From beb62740a343dd25253f5383edc6b5e8dba4006c Mon Sep 17 00:00:00 2001 From: Wassim Dhif Date: Thu, 5 Dec 2024 15:43:46 +0100 Subject: [PATCH 001/303] fix(podresources): switch socket error to debug (#31789) Signed-off-by: Wassim DHIF --- pkg/util/kubernetes/kubelet/kubelet.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/util/kubernetes/kubelet/kubelet.go b/pkg/util/kubernetes/kubelet/kubelet.go index b1ba6785e5940..5708841967134 100644 --- a/pkg/util/kubernetes/kubelet/kubelet.go +++ b/pkg/util/kubernetes/kubelet/kubelet.go @@ -214,7 +214,8 @@ func (ku *KubeUtil) getLocalPodList(ctx context.Context) (*PodList, error) { err = ku.addContainerResourcesData(ctx, pods.Items) if err != nil { - log.Errorf("Error adding container resources data: %s", err) + // TODO: Switch back to error level once the socket issue is fixed. + log.Debugf("Error adding container resources data: %s", err) } // ensure we dont have nil pods From 013c5722b6a0d2b30dd49714120bab652f3536f1 Mon Sep 17 00:00:00 2001 From: Amit Slavin <108348428+amitslavin@users.noreply.github.com> Date: Thu, 5 Dec 2024 17:00:27 +0200 Subject: [PATCH 002/303] [USM] Fix TestInvalidBatchCountMetric flakiness (#31772) --- pkg/network/protocols/events/consumer_test.go | 71 ++++++++++++------- 1 file changed, 45 insertions(+), 26 deletions(-) diff --git a/pkg/network/protocols/events/consumer_test.go b/pkg/network/protocols/events/consumer_test.go index 2b1bba26b97ad..5e9864b5a342a 100644 --- a/pkg/network/protocols/events/consumer_test.go +++ b/pkg/network/protocols/events/consumer_test.go @@ -18,6 +18,8 @@ import ( manager "github.com/DataDog/ebpf-manager" "github.com/cilium/ebpf" + "github.com/cilium/ebpf/features" + "github.com/cilium/ebpf/perf" "github.com/cilium/ebpf/ringbuf" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -78,6 +80,33 @@ func TestConsumer(t *testing.T) { } } +func TestInvalidBatchCountMetric(t *testing.T) { + kversion, err := kernel.HostVersion() + require.NoError(t, err) + if minVersion := kernel.VersionCode(4, 14, 0); kversion < minVersion { + t.Skipf("package not supported by kernels < %s", minVersion) + } + + c := config.New() + program, err := newEBPFProgram(c) + require.NoError(t, err) + t.Cleanup(func() { program.Stop(manager.CleanAll) }) + + consumer, err := NewConsumer("test", program, func([]uint64) {}) + require.NoError(t, err) + + // We are creating a raw sample with a data length of 4, which is smaller than sizeOfBatch + // and would be considered an invalid batch. + recordSample(c, consumer, []byte("test")) + + consumer.Start() + t.Cleanup(func() { consumer.Stop() }) + require.Eventually(t, func() bool { + // Wait for the consumer to process the invalid batch. + return consumer.invalidBatchCount.Get() == 1 + }, 5*time.Second, 100*time.Millisecond) +} + type eventGenerator struct { // map used for coordinating test with eBPF program space testMap *ebpf.Map @@ -86,6 +115,22 @@ type eventGenerator struct { testFile *os.File } +// recordSample records a sample using the consumer handler. +func recordSample(c *config.Config, consumer *Consumer[uint64], sampleData []byte) { + // Ring buffers require kernel version 5.8.0 or higher, therefore, the handler is chosen based on the kernel version. + if c.EnableUSMRingBuffers && features.HaveMapType(ebpf.RingBuf) == nil { + handler := consumer.handler.(*ddebpf.RingBufferHandler) + handler.RecordHandler(&ringbuf.Record{ + RawSample: sampleData, + }, nil, nil) + } else { + handler := consumer.handler.(*ddebpf.PerfHandler) + handler.RecordHandler(&perf.Record{ + RawSample: sampleData, + }, nil, nil) + } +} + func newEventGenerator(program *manager.Manager, t *testing.T) *eventGenerator { m, _, _ := program.GetMap("test") require.NotNilf(t, m, "couldn't find test map") @@ -171,29 +216,3 @@ func newEBPFProgram(c *config.Config) (*manager.Manager, error) { return m, nil } - -func TestInvalidBatchCountMetric(t *testing.T) { - kversion, err := kernel.HostVersion() - require.NoError(t, err) - if minVersion := kernel.VersionCode(4, 14, 0); kversion < minVersion { - t.Skipf("package not supported by kernels < %s", minVersion) - } - - program, err := newEBPFProgram(config.New()) - require.NoError(t, err) - - ringBufferHandler := ddebpf.NewRingBufferHandler(1) - ringBufferHandler.RecordHandler(&ringbuf.Record{ - RawSample: []byte("test"), - }, nil, nil) - - consumer, err := NewConsumer("test", program, func(_ []uint64) {}) - require.NoError(t, err) - consumer.handler = ringBufferHandler - - consumer.Start() - program.Stop(manager.CleanAll) - consumer.Stop() - - require.Equalf(t, int(consumer.invalidBatchCount.Get()), 1, "invalidBatchCount should be greater than 0") -} From 973511f1c1ff0e282e71427f6d93efd14ba59a33 Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Thu, 5 Dec 2024 16:50:50 +0100 Subject: [PATCH 003/303] Update update-go task to update go.work, and rework modules.go-work to only synchronise used modules with modules.yml (#31754) --- go.work | 1 + internal/tools/worksynchronizer/go.mod | 14 +++ internal/tools/worksynchronizer/go.sum | 19 ++++ .../worksynchronizer/worksynchronizer.go | 98 +++++++++++++++++++ modules.yml | 4 + tasks/modules.py | 18 +--- tasks/update_go.py | 2 + 7 files changed, 143 insertions(+), 13 deletions(-) create mode 100644 internal/tools/worksynchronizer/go.mod create mode 100644 internal/tools/worksynchronizer/go.sum create mode 100644 internal/tools/worksynchronizer/worksynchronizer.go diff --git a/go.work b/go.work index fb1eb5e121c1c..880b236237204 100644 --- a/go.work +++ b/go.work @@ -51,6 +51,7 @@ use ( internal/tools/modformatter internal/tools/modparser internal/tools/proto + internal/tools/worksynchronizer pkg/aggregator/ckey pkg/api pkg/collector/check/defaults diff --git a/internal/tools/worksynchronizer/go.mod b/internal/tools/worksynchronizer/go.mod new file mode 100644 index 0000000000000..222e3c82c6c59 --- /dev/null +++ b/internal/tools/worksynchronizer/go.mod @@ -0,0 +1,14 @@ +module github.com/DataDog/datadog-agent/internal/tools/worksynchronizer + +go 1.23.0 + +require ( + golang.org/x/mod v0.22.0 + gopkg.in/yaml.v3 v3.0.1 +) + +require ( + github.com/kr/pretty v0.3.1 // indirect + github.com/rogpeppe/go-internal v1.13.1 // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect +) diff --git a/internal/tools/worksynchronizer/go.sum b/internal/tools/worksynchronizer/go.sum new file mode 100644 index 0000000000000..f1d48861c035b --- /dev/null +++ b/internal/tools/worksynchronizer/go.sum @@ -0,0 +1,19 @@ +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/tools/worksynchronizer/worksynchronizer.go b/internal/tools/worksynchronizer/worksynchronizer.go new file mode 100644 index 0000000000000..5ac672aa91a04 --- /dev/null +++ b/internal/tools/worksynchronizer/worksynchronizer.go @@ -0,0 +1,98 @@ +// 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 2022-present Datadog, Inc. + +// Package main contains the logic for the go.mod file parser +package main + +import ( + "flag" + "fmt" + "os" + "slices" + + "golang.org/x/mod/modfile" + + "gopkg.in/yaml.v3" +) + +func parseWorkfile(path string) (*modfile.WorkFile, error) { + data, err := os.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("could not read %s file", path) + } + + parsedFile, err := modfile.ParseWork(path, data, nil) + if err != nil { + return nil, fmt.Errorf("could not parse %s file", path) + } + + return parsedFile, nil +} + +type modules struct { + Modules map[string]any `yaml:"modules"` +} + +func parseModulesList(path string) ([]string, error) { + data, err := os.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("could not read %s file", path) + } + + var parsedModules modules + err = yaml.Unmarshal(data, &parsedModules) + if err != nil { + return nil, fmt.Errorf("could not parse %s file", path) + } + + res := make([]string, 0, len(parsedModules.Modules)) + for module, moduleConfig := range parsedModules.Modules { + if config, ok := moduleConfig.(string); ok && config == "ignored" { + continue + } + res = append(res, module) + } + return res, nil +} +func main() { + var workPath string + var modulesFilePath string + + flag.StringVar(&workPath, "path", "", "Path to the go module to inspect") + flag.StringVar(&modulesFilePath, "modules-file", "", "Path to modules.yml file") + + flag.Parse() + + // Check that both flags have been set + if flag.NFlag() != 2 { + flag.Usage() + os.Exit(1) + } + + parsedWorkFile, err := parseWorkfile(workPath) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + parsedModules, err := parseModulesList(modulesFilePath) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + slices.Sort(parsedModules) + + parsedWorkFile.SetUse([]*modfile.Use{}) + for _, module := range parsedModules { + parsedWorkFile.AddUse(module, module) + } + + if err := os.WriteFile(workPath, modfile.Format(parsedWorkFile.Syntax), 0644); err != nil { + fmt.Println(err) + os.Exit(1) + } + +} diff --git a/modules.yml b/modules.yml index cc5d5666b14dd..a84b452117db1 100644 --- a/modules.yml +++ b/modules.yml @@ -116,6 +116,10 @@ modules: independent: false should_tag: false should_test_condition: never + internal/tools/worksynchronizer: + independent: false + should_tag: false + should_test_condition: never pkg/aggregator/ckey: used_by_otel: true pkg/api: diff --git a/tasks/modules.py b/tasks/modules.py index 09192a074973a..9d92b5324cd2a 100644 --- a/tasks/modules.py +++ b/tasks/modules.py @@ -79,22 +79,14 @@ def generate_dummy_package(ctx, folder): @task -def go_work(_: Context): +def go_work(ctx: Context): """ - Re-create the go.work file using the module list contained in get_default_modules() - and the go version contained in the file .go-version. + Update the go work to use all the modules defined in modules.yml """ - # read go version from the .go-version file, removing the bugfix part of the version - - with open(".go-version") as f: - go_version = f.read().strip() - - with open("go.work", "w") as f: - f.write(f"go {go_version}\n\nuse (\n") - for mod in get_default_modules().values(): - f.write(f"\t{mod.path}\n") - f.write(")\n") + ctx.run( + "go run ./internal/tools/worksynchronizer/worksynchronizer.go --path ./go.work --modules-file ./modules.yml" + ) @task diff --git a/tasks/update_go.py b/tasks/update_go.py index 8e2d638bbddd7..923fb8d0425e4 100644 --- a/tasks/update_go.py +++ b/tasks/update_go.py @@ -33,6 +33,8 @@ ("./pkg/logs/launchers/windowsevent/README.md", "install go ", "+,", False), ("./.wwhrd.yml", "raw.githubusercontent.com/golang/go/go", "/LICENSE", True), ("./docs/public/setup.md", "version `", "` or later", True), + ("./go.work", "go ", "", False), + ("./go.work", "toolchain go", "", True), ] PATTERN_MAJOR_MINOR = r'1\.\d+' From 835a84819e77e468e350f1e88474436455031641 Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Thu, 5 Dec 2024 17:36:36 +0100 Subject: [PATCH 004/303] Revert "Move containers integration tests to e2e provisioners" (#31755) --- .../pkg/environments/aws/kubernetes/eks.go | 15 +- .../pkg/environments/aws/kubernetes/kind.go | 12 +- test/new-e2e/tests/containers/base_test.go | 47 ++- test/new-e2e/tests/containers/docker_test.go | 43 ++- .../tests/containers/dump_cluster_state.go | 341 ++++++++++++++++++ test/new-e2e/tests/containers/ecs_test.go | 70 ++-- test/new-e2e/tests/containers/eks_test.go | 100 ++++- test/new-e2e/tests/containers/k8s_test.go | 99 ++--- test/new-e2e/tests/containers/kindvm_test.go | 85 ++++- 9 files changed, 681 insertions(+), 131 deletions(-) create mode 100644 test/new-e2e/tests/containers/dump_cluster_state.go diff --git a/test/new-e2e/pkg/environments/aws/kubernetes/eks.go b/test/new-e2e/pkg/environments/aws/kubernetes/eks.go index 92262aa9d7380..22971ae20f9ed 100644 --- a/test/new-e2e/pkg/environments/aws/kubernetes/eks.go +++ b/test/new-e2e/pkg/environments/aws/kubernetes/eks.go @@ -112,15 +112,6 @@ func EKSRunFunc(ctx *pulumi.Context, env *environments.Kubernetes, params *Provi // Deploy the agent if params.agentOptions != nil { params.agentOptions = append(params.agentOptions, kubernetesagentparams.WithPulumiResourceOptions(utils.PulumiDependsOn(cluster)), kubernetesagentparams.WithFakeintake(fakeIntake), kubernetesagentparams.WithTags([]string{"stackid:" + ctx.Stack()})) - - eksParams, err := eks.NewParams(params.eksOptions...) - if err != nil { - return err - } - if eksParams.WindowsNodeGroup { - params.agentOptions = append(params.agentOptions, kubernetesagentparams.WithDeployWindows()) - } - kubernetesAgent, err := helm.NewKubernetesAgent(&awsEnv, "eks", cluster.KubeProvider, params.agentOptions...) if err != nil { return err @@ -135,7 +126,7 @@ func EKSRunFunc(ctx *pulumi.Context, env *environments.Kubernetes, params *Provi } // Deploy standalone dogstatsd if params.deployDogstatsd { - if _, err := dogstatsdstandalone.K8sAppDefinition(&awsEnv, cluster.KubeProvider, "dogstatsd-standalone", fakeIntake, true, "", utils.PulumiDependsOn(cluster)); err != nil { + if _, err := dogstatsdstandalone.K8sAppDefinition(&awsEnv, cluster.KubeProvider, "dogstatsd-standalone", fakeIntake, true, ""); err != nil { return err } } @@ -147,7 +138,7 @@ func EKSRunFunc(ctx *pulumi.Context, env *environments.Kubernetes, params *Provi } // dogstatsd clients that report to the Agent - if _, err := dogstatsd.K8sAppDefinition(&awsEnv, cluster.KubeProvider, "workload-dogstatsd", 8125, "/var/run/datadog/dsd.socket", utils.PulumiDependsOn(workloadWithCRDDeps...)); err != nil { + if _, err := dogstatsd.K8sAppDefinition(&awsEnv, cluster.KubeProvider, "workload-dogstatsd", 8125, "/var/run/datadog/dsd.socket", utils.PulumiDependsOn(cluster)); err != nil { return err } @@ -166,7 +157,7 @@ func EKSRunFunc(ctx *pulumi.Context, env *environments.Kubernetes, params *Provi return err } - if _, err := mutatedbyadmissioncontroller.K8sAppDefinition(&awsEnv, cluster.KubeProvider, "workload-mutated", "workload-mutated-lib-injection", utils.PulumiDependsOn(workloadWithCRDDeps...)); err != nil { + if _, err := mutatedbyadmissioncontroller.K8sAppDefinition(&awsEnv, cluster.KubeProvider, "workload-mutated", "workload-mutated-lib-injection", utils.PulumiDependsOn(cluster)); err != nil { return err } diff --git a/test/new-e2e/pkg/environments/aws/kubernetes/kind.go b/test/new-e2e/pkg/environments/aws/kubernetes/kind.go index 2230f1a9c1736..60da0620167f9 100644 --- a/test/new-e2e/pkg/environments/aws/kubernetes/kind.go +++ b/test/new-e2e/pkg/environments/aws/kubernetes/kind.go @@ -129,17 +129,19 @@ func KindRunFunc(ctx *pulumi.Context, env *environments.Kubernetes, params *Prov var dependsOnCrd []pulumi.Resource if params.agentOptions != nil { - helmValues := ` + kindClusterName := ctx.Stack() + helmValues := fmt.Sprintf(` datadog: kubelet: tlsVerify: false + clusterName: "%s" agents: useHostNetwork: true -` +`, kindClusterName) - newOpts := []kubernetesagentparams.Option{kubernetesagentparams.WithHelmValues(helmValues), kubernetesagentparams.WithClusterName(kindCluster.ClusterName), kubernetesagentparams.WithTags([]string{"stackid:" + ctx.Stack()})} + newOpts := []kubernetesagentparams.Option{kubernetesagentparams.WithHelmValues(helmValues), kubernetesagentparams.WithTags([]string{"stackid:" + ctx.Stack()})} params.agentOptions = append(newOpts, params.agentOptions...) - agent, err := helm.NewKubernetesAgent(&awsEnv, "kind", kubeProvider, params.agentOptions...) + agent, err := helm.NewKubernetesAgent(&awsEnv, kindClusterName, kubeProvider, params.agentOptions...) if err != nil { return err } @@ -180,7 +182,7 @@ agents: return err } - if _, err := mutatedbyadmissioncontroller.K8sAppDefinition(&awsEnv, kubeProvider, "workload-mutated", "workload-mutated-lib-injection", utils.PulumiDependsOn(dependsOnCrd...)); err != nil { + if _, err := mutatedbyadmissioncontroller.K8sAppDefinition(&awsEnv, kubeProvider, "workload-mutated", "workload-mutated-lib-injection"); err != nil { return err } diff --git a/test/new-e2e/tests/containers/base_test.go b/test/new-e2e/tests/containers/base_test.go index 7bc4735a43dd2..84bce8ea70197 100644 --- a/test/new-e2e/tests/containers/base_test.go +++ b/test/new-e2e/tests/containers/base_test.go @@ -14,6 +14,7 @@ import ( "github.com/samber/lo" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/suite" "gopkg.in/yaml.v3" "gopkg.in/zorkian/go-datadog-api.v2" @@ -22,21 +23,39 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/pointer" "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/e2e" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/runner" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/runner/parameters" ) -type baseSuite[Env any] struct { - e2e.BaseSuite[Env] +type baseSuite struct { + suite.Suite - Fakeintake *fakeintake.Client - clusterName string + startTime time.Time + endTime time.Time + datadogClient *datadog.Client + Fakeintake *fakeintake.Client + clusterName string } -func (suite *baseSuite[Env]) BeforeTest(suiteName, testName string) { +func (suite *baseSuite) SetupSuite() { + apiKey, err := runner.GetProfile().SecretStore().Get(parameters.APIKey) + suite.Require().NoError(err) + appKey, err := runner.GetProfile().SecretStore().Get(parameters.APPKey) + suite.Require().NoError(err) + suite.datadogClient = datadog.NewClient(apiKey, appKey) + + suite.startTime = time.Now() +} + +func (suite *baseSuite) TearDownSuite() { + suite.endTime = time.Now() +} + +func (suite *baseSuite) BeforeTest(suiteName, testName string) { suite.T().Logf("START %s/%s %s", suiteName, testName, time.Now()) } -func (suite *baseSuite[Env]) AfterTest(suiteName, testName string) { +func (suite *baseSuite) AfterTest(suiteName, testName string) { suite.T().Logf("FINISH %s/%s %s", suiteName, testName, time.Now()) } @@ -79,7 +98,7 @@ func (mc *myCollectT) Errorf(format string, args ...interface{}) { mc.CollectT.Errorf(format, args...) } -func (suite *baseSuite[Env]) testMetric(args *testMetricArgs) { +func (suite *baseSuite) testMetric(args *testMetricArgs) { prettyMetricQuery := fmt.Sprintf("%s{%s}", args.Filter.Name, strings.Join(args.Filter.Tags, ",")) suite.Run("metric "+prettyMetricQuery, func() { @@ -88,7 +107,7 @@ func (suite *baseSuite[Env]) testMetric(args *testMetricArgs) { expectedTags = lo.Map(*args.Expect.Tags, func(tag string, _ int) *regexp.Regexp { return regexp.MustCompile(tag) }) } - optionalTags := []*regexp.Regexp{regexp.MustCompile("stackid:.*")} // The stackid tag is added by the framework itself to allow filtering on the stack id + var optionalTags []*regexp.Regexp if args.Optional.Tags != nil { optionalTags = lo.Map(*args.Optional.Tags, func(tag string, _ int) *regexp.Regexp { return regexp.MustCompile(tag) }) } @@ -101,7 +120,7 @@ func (suite *baseSuite[Env]) testMetric(args *testMetricArgs) { return "filter_tag_" + tag }) - if _, err := suite.DatadogClient().PostEvent(&datadog.Event{ + if _, err := suite.datadogClient.PostEvent(&datadog.Event{ Title: pointer.Ptr(fmt.Sprintf("testMetric %s", prettyMetricQuery)), Text: pointer.Ptr(fmt.Sprintf(`%%%%%% ### Result @@ -208,7 +227,7 @@ type testLogExpectArgs struct { Message string } -func (suite *baseSuite[Env]) testLog(args *testLogArgs) { +func (suite *baseSuite) testLog(args *testLogArgs) { prettyLogQuery := fmt.Sprintf("%s{%s}", args.Filter.Service, strings.Join(args.Filter.Tags, ",")) suite.Run("log "+prettyLogQuery, func() { @@ -230,7 +249,7 @@ func (suite *baseSuite[Env]) testLog(args *testLogArgs) { return "filter_tag_" + tag }) - if _, err := suite.DatadogClient().PostEvent(&datadog.Event{ + if _, err := suite.datadogClient.PostEvent(&datadog.Event{ Title: pointer.Ptr(fmt.Sprintf("testLog %s", prettyLogQuery)), Text: pointer.Ptr(fmt.Sprintf(`%%%%%% ### Result @@ -337,7 +356,7 @@ type testCheckRunExpectArgs struct { AcceptUnexpectedTags bool } -func (suite *baseSuite[Env]) testCheckRun(args *testCheckRunArgs) { +func (suite *baseSuite) testCheckRun(args *testCheckRunArgs) { prettyCheckRunQuery := fmt.Sprintf("%s{%s}", args.Filter.Name, strings.Join(args.Filter.Tags, ",")) suite.Run("checkRun "+prettyCheckRunQuery, func() { @@ -359,7 +378,7 @@ func (suite *baseSuite[Env]) testCheckRun(args *testCheckRunArgs) { return "filter_tag_" + tag }) - if _, err := suite.DatadogClient().PostEvent(&datadog.Event{ + if _, err := suite.datadogClient.PostEvent(&datadog.Event{ Title: pointer.Ptr(fmt.Sprintf("testCheckRun %s", prettyCheckRunQuery)), Text: pointer.Ptr(fmt.Sprintf(`%%%%%% ### Result diff --git a/test/new-e2e/tests/containers/docker_test.go b/test/new-e2e/tests/containers/docker_test.go index 985d80e46b757..a7d27f4fa2987 100644 --- a/test/new-e2e/tests/containers/docker_test.go +++ b/test/new-e2e/tests/containers/docker_test.go @@ -6,24 +6,53 @@ package containers import ( + "context" + "encoding/json" + "fmt" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/runner" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/utils/infra" + "github.com/DataDog/test-infra-definitions/scenarios/aws/ec2" + "github.com/pulumi/pulumi/sdk/v3/go/auto" + "github.com/stretchr/testify/suite" + "os" "testing" - - "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/environments/aws/docker" ) type DockerSuite struct { - baseSuite[environments.DockerHost] + baseSuite } func TestDockerSuite(t *testing.T) { - e2e.Run(t, &DockerSuite{}, e2e.WithProvisioner(awsdocker.Provisioner(awsdocker.WithTestingWorkload()))) + suite.Run(t, &DockerSuite{}) } func (suite *DockerSuite) SetupSuite() { + ctx := context.Background() + + stackConfig := runner.ConfigMap{ + "ddagent:deploy": auto.ConfigValue{Value: "true"}, + "ddagent:fakeintake": auto.ConfigValue{Value: "true"}, + } + + _, stackOutput, err := infra.GetStackManager().GetStack(ctx, "dockerstack", stackConfig, ec2.VMRunWithDocker, false) + suite.Require().NoError(err) + + var fakeintake components.FakeIntake + fiSerialized, err := json.Marshal(stackOutput.Outputs["dd-Fakeintake-aws-aws-vm"].Value) + suite.Require().NoError(err) + suite.Require().NoError(fakeintake.Import(fiSerialized, &fakeintake)) + suite.Require().NoError(fakeintake.Init(suite)) + suite.Fakeintake = fakeintake.Client() + + var host components.RemoteHost + hostSerialized, err := json.Marshal(stackOutput.Outputs["dd-Host-aws-vm"].Value) + suite.Require().NoError(err) + suite.Require().NoError(host.Import(hostSerialized, &host)) + suite.Require().NoError(host.Init(suite)) + suite.clusterName = fmt.Sprintf("%s-%v", os.Getenv("USER"), host.Address) + suite.baseSuite.SetupSuite() - suite.Fakeintake = suite.Env().FakeIntake.Client() } func (suite *DockerSuite) TestDSDWithUDS() { diff --git a/test/new-e2e/tests/containers/dump_cluster_state.go b/test/new-e2e/tests/containers/dump_cluster_state.go new file mode 100644 index 0000000000000..ddf546d889d09 --- /dev/null +++ b/test/new-e2e/tests/containers/dump_cluster_state.go @@ -0,0 +1,341 @@ +// 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 2023-present Datadog, Inc. + +package containers + +import ( + "bytes" + "context" + "encoding/base64" + "fmt" + "io" + "net" + "os" + "os/user" + "strings" + "sync" + + "github.com/DataDog/datadog-agent/pkg/util/pointer" + awsconfig "github.com/aws/aws-sdk-go-v2/config" + awsec2 "github.com/aws/aws-sdk-go-v2/service/ec2" + awsec2types "github.com/aws/aws-sdk-go-v2/service/ec2/types" + awseks "github.com/aws/aws-sdk-go-v2/service/eks" + awsekstypes "github.com/aws/aws-sdk-go-v2/service/eks/types" + "golang.org/x/crypto/ssh" + "golang.org/x/crypto/ssh/agent" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/cli-runtime/pkg/genericclioptions" + "k8s.io/cli-runtime/pkg/genericiooptions" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/tools/clientcmd" + clientcmdapi "k8s.io/client-go/tools/clientcmd/api" + kubectlget "k8s.io/kubectl/pkg/cmd/get" + kubectlutil "k8s.io/kubectl/pkg/cmd/util" +) + +func dumpEKSClusterState(ctx context.Context, name string) (ret string) { + var out strings.Builder + defer func() { ret = out.String() }() + + cfg, err := awsconfig.LoadDefaultConfig(ctx) + if err != nil { + fmt.Fprintf(&out, "Failed to load AWS config: %v\n", err) + return + } + + client := awseks.NewFromConfig(cfg) + + clusterDescription, err := client.DescribeCluster(ctx, &awseks.DescribeClusterInput{ + Name: &name, + }) + if err != nil { + fmt.Fprintf(&out, "Failed to describe cluster %s: %v\n", name, err) + return + } + + cluster := clusterDescription.Cluster + if cluster.Status != awsekstypes.ClusterStatusActive { + fmt.Fprintf(&out, "EKS cluster %s is not in active state. Current status: %s\n", name, cluster.Status) + return + } + + kubeconfig := clientcmdapi.NewConfig() + kubeconfig.Clusters[name] = &clientcmdapi.Cluster{ + Server: *cluster.Endpoint, + } + if kubeconfig.Clusters[name].CertificateAuthorityData, err = base64.StdEncoding.DecodeString(*cluster.CertificateAuthority.Data); err != nil { + fmt.Fprintf(&out, "Failed to decode certificate authority: %v\n", err) + } + kubeconfig.AuthInfos[name] = &clientcmdapi.AuthInfo{ + Exec: &clientcmdapi.ExecConfig{ + APIVersion: "client.authentication.k8s.io/v1beta1", + Command: "aws", + Args: []string{ + "--region", + cfg.Region, + "eks", + "get-token", + "--cluster-name", + name, + "--output", + "json", + }, + }, + } + kubeconfig.Contexts[name] = &clientcmdapi.Context{ + Cluster: name, + AuthInfo: name, + } + kubeconfig.CurrentContext = name + + dumpK8sClusterState(ctx, kubeconfig, &out) + + return +} + +func dumpKindClusterState(ctx context.Context, name string) (ret string) { + var out strings.Builder + defer func() { ret = out.String() }() + + cfg, err := awsconfig.LoadDefaultConfig(ctx) + if err != nil { + fmt.Fprintf(&out, "Failed to load AWS config: %v\n", err) + return + } + + ec2Client := awsec2.NewFromConfig(cfg) + + user, _ := user.Current() + instancesDescription, err := ec2Client.DescribeInstances(ctx, &awsec2.DescribeInstancesInput{ + Filters: []awsec2types.Filter{ + { + Name: pointer.Ptr("tag:managed-by"), + Values: []string{"pulumi"}, + }, + { + Name: pointer.Ptr("tag:username"), + Values: []string{user.Username}, + }, + { + Name: pointer.Ptr("tag:Name"), + Values: []string{name + "-aws-kind"}, + }, + }, + }) + if err != nil { + fmt.Fprintf(&out, "Failed to describe instances: %v\n", err) + return + } + + if instancesDescription == nil || (len(instancesDescription.Reservations) != 1 && len(instancesDescription.Reservations[0].Instances) != 1) { + fmt.Fprintf(&out, "Didn’t find exactly one instance for cluster %s\n", name) + return + } + + instanceIP := instancesDescription.Reservations[0].Instances[0].PrivateIpAddress + + auth := []ssh.AuthMethod{} + + if sshAgentSocket, found := os.LookupEnv("SSH_AUTH_SOCK"); found { + sshAgent, err := net.Dial("unix", sshAgentSocket) + if err != nil { + fmt.Fprintf(&out, "Failed to connect to SSH agent: %v\n", err) + return + } + defer sshAgent.Close() + + auth = append(auth, ssh.PublicKeysCallback(agent.NewClient(sshAgent).Signers)) + } + + if sshKeyPath, found := os.LookupEnv("E2E_PRIVATE_KEY_PATH"); found { + sshKey, err := os.ReadFile(sshKeyPath) + if err != nil { + fmt.Fprintf(&out, "Failed to read SSH key: %v\n", err) + return + } + + signer, err := ssh.ParsePrivateKey(sshKey) + if err != nil { + fmt.Fprintf(&out, "Failed to parse SSH key: %v\n", err) + return + } + + auth = append(auth, ssh.PublicKeys(signer)) + } + + var sshClient *ssh.Client + err = nil + for _, user := range []string{"ec2-user", "ubuntu"} { + sshClient, err = ssh.Dial("tcp", *instanceIP+":22", &ssh.ClientConfig{ + User: user, + Auth: auth, + HostKeyCallback: ssh.InsecureIgnoreHostKey(), + }) + if err == nil { + break + } + } + if err != nil { + fmt.Fprintf(&out, "Failed to dial SSH server %s: %v\n", *instanceIP, err) + return + } + defer sshClient.Close() + + sshSession, err := sshClient.NewSession() + if err != nil { + fmt.Fprintf(&out, "Failed to create SSH session: %v\n", err) + return + } + defer sshSession.Close() + + stdout, err := sshSession.StdoutPipe() + if err != nil { + fmt.Fprintf(&out, "Failed to create stdout pipe: %v\n", err) + return + } + + stderr, err := sshSession.StderrPipe() + if err != nil { + fmt.Fprintf(&out, "Failed to create stderr pipe: %v\n", err) + return + } + + err = sshSession.Start("kind get kubeconfig --name \"$(kind get clusters | head -n 1)\"") + if err != nil { + fmt.Fprintf(&out, "Failed to start remote command: %v\n", err) + return + } + + var stdoutBuf bytes.Buffer + + var wg sync.WaitGroup + wg.Add(2) + + go func() { + if _, err := io.Copy(&stdoutBuf, stdout); err != nil { + fmt.Fprintf(&out, "Failed to read stdout: %v\n", err) + } + wg.Done() + }() + + go func() { + if _, err := io.Copy(&out, stderr); err != nil { + fmt.Fprintf(&out, "Failed to read stderr: %v\n", err) + } + wg.Done() + }() + + err = sshSession.Wait() + wg.Wait() + if err != nil { + fmt.Fprintf(&out, "Remote command exited with error: %v\n", err) + return + } + + kubeconfig, err := clientcmd.Load(stdoutBuf.Bytes()) + if err != nil { + fmt.Fprintf(&out, "Failed to parse kubeconfig: %v\n", err) + return + } + + for _, cluster := range kubeconfig.Clusters { + cluster.Server = strings.Replace(cluster.Server, "0.0.0.0", *instanceIP, 1) + cluster.CertificateAuthorityData = nil + cluster.InsecureSkipTLSVerify = true + } + + dumpK8sClusterState(ctx, kubeconfig, &out) + + return +} + +func dumpK8sClusterState(ctx context.Context, kubeconfig *clientcmdapi.Config, out *strings.Builder) { + kubeconfigFile, err := os.CreateTemp("", "kubeconfig") + if err != nil { + fmt.Fprintf(out, "Failed to create kubeconfig temporary file: %v\n", err) + return + } + defer os.Remove(kubeconfigFile.Name()) + + if err := clientcmd.WriteToFile(*kubeconfig, kubeconfigFile.Name()); err != nil { + fmt.Fprintf(out, "Failed to write kubeconfig file: %v\n", err) + return + } + + if err := kubeconfigFile.Close(); err != nil { + fmt.Fprintf(out, "Failed to close kubeconfig file: %v\n", err) + } + + fmt.Fprintf(out, "\n") + + configFlags := genericclioptions.NewConfigFlags(false) + kubeconfigFileName := kubeconfigFile.Name() + configFlags.KubeConfig = &kubeconfigFileName + + factory := kubectlutil.NewFactory(configFlags) + + streams := genericiooptions.IOStreams{ + Out: out, + ErrOut: out, + } + + getCmd := kubectlget.NewCmdGet("", factory, streams) + getCmd.SetOut(out) + getCmd.SetErr(out) + getCmd.SetContext(ctx) + getCmd.SetArgs([]string{ + "nodes,all", + "--all-namespaces", + "-o", + "wide", + }) + if err := getCmd.ExecuteContext(ctx); err != nil { + fmt.Fprintf(out, "Failed to execute Get command: %v\n", err) + return + } + + // Get the logs of containers that have restarted + config, err := clientcmd.BuildConfigFromFlags("", kubeconfigFile.Name()) + if err != nil { + fmt.Fprintf(out, "Failed to build Kubernetes config: %v\n", err) + return + } + k8sClient, err := kubernetes.NewForConfig(config) + if err != nil { + fmt.Fprintf(out, "Failed to create Kubernetes client: %v\n", err) + return + } + + pods, err := k8sClient.CoreV1().Pods("").List(ctx, metav1.ListOptions{}) + if err != nil { + fmt.Fprintf(out, "Failed to list pods: %v\n", err) + return + } + + for _, pod := range pods.Items { + for _, containerStatus := range pod.Status.ContainerStatuses { + if containerStatus.RestartCount > 0 { + fmt.Fprintf(out, "\nLOGS FOR POD %s/%s CONTAINER %s:\n", pod.Namespace, pod.Name, containerStatus.Name) + logs, err := k8sClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, &corev1.PodLogOptions{ + Container: containerStatus.Name, + Previous: true, + // TailLines: pointer.Ptr(int64(100)), + }).Stream(ctx) + if err != nil { + fmt.Fprintf(out, "Failed to get logs: %v\n", err) + continue + } + defer logs.Close() + + _, err = io.Copy(out, logs) + if err != nil { + fmt.Fprintf(out, "Failed to copy logs: %v\n", err) + continue + } + } + } + } +} diff --git a/test/new-e2e/tests/containers/ecs_test.go b/test/new-e2e/tests/containers/ecs_test.go index f5603278f017e..9498aa9414deb 100644 --- a/test/new-e2e/tests/containers/ecs_test.go +++ b/test/new-e2e/tests/containers/ecs_test.go @@ -7,26 +7,29 @@ package containers import ( "context" + "encoding/json" "regexp" "strings" "testing" "time" + ecsComp "github.com/DataDog/test-infra-definitions/components/ecs" + "github.com/DataDog/test-infra-definitions/scenarios/aws/ecs" + "github.com/DataDog/datadog-agent/pkg/util/pointer" - "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" - "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/runner" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/utils/infra" awsconfig "github.com/aws/aws-sdk-go-v2/config" awsecs "github.com/aws/aws-sdk-go-v2/service/ecs" awsecstypes "github.com/aws/aws-sdk-go-v2/service/ecs/types" "github.com/fatih/color" + "github.com/pulumi/pulumi/sdk/v3/go/auto" "github.com/samber/lo" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - - tifecs "github.com/DataDog/test-infra-definitions/scenarios/aws/ecs" - - envecs "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/ecs" + "github.com/stretchr/testify/suite" ) const ( @@ -38,27 +41,52 @@ const ( ) type ecsSuite struct { - baseSuite[environments.ECS] + baseSuite + ecsClusterName string } func TestECSSuite(t *testing.T) { - e2e.Run(t, &ecsSuite{}, e2e.WithProvisioner(envecs.Provisioner( - envecs.WithECSOptions( - tifecs.WithFargateCapacityProvider(), - tifecs.WithLinuxNodeGroup(), - tifecs.WithWindowsNodeGroup(), - tifecs.WithLinuxBottleRocketNodeGroup(), - ), - envecs.WithTestingWorkload(), - ))) + suite.Run(t, &ecsSuite{}) } func (suite *ecsSuite) SetupSuite() { + ctx := context.Background() + + // Creating the stack + stackConfig := runner.ConfigMap{ + "ddinfra:aws/ecs/linuxECSOptimizedNodeGroup": auto.ConfigValue{Value: "true"}, + "ddinfra:aws/ecs/linuxBottlerocketNodeGroup": auto.ConfigValue{Value: "true"}, + "ddinfra:aws/ecs/windowsLTSCNodeGroup": auto.ConfigValue{Value: "true"}, + "ddagent:deploy": auto.ConfigValue{Value: "true"}, + "ddagent:fakeintake": auto.ConfigValue{Value: "true"}, + "ddtestworkload:deploy": auto.ConfigValue{Value: "true"}, + } + + _, stackOutput, err := infra.GetStackManager().GetStackNoDeleteOnFailure( + ctx, + "ecs-cluster", + ecs.Run, + infra.WithConfigMap(stackConfig), + ) + suite.Require().NoError(err) + + fakeintake := &components.FakeIntake{} + fiSerialized, err := json.Marshal(stackOutput.Outputs["dd-Fakeintake-aws-ecs"].Value) + suite.Require().NoError(err) + suite.Require().NoError(fakeintake.Import(fiSerialized, fakeintake)) + suite.Require().NoError(fakeintake.Init(suite)) + suite.Fakeintake = fakeintake.Client() + + clusterSerialized, err := json.Marshal(stackOutput.Outputs["dd-Cluster-ecs"].Value) + suite.Require().NoError(err) + ecsCluster := &ecsComp.ClusterOutput{} + suite.Require().NoError(ecsCluster.Import(clusterSerialized, ecsCluster)) + + suite.ecsClusterName = ecsCluster.ClusterName + suite.clusterName = suite.ecsClusterName + suite.baseSuite.SetupSuite() - suite.Fakeintake = suite.Env().FakeIntake.Client() - suite.ecsClusterName = suite.Env().ECSCluster.ClusterName - suite.clusterName = suite.Env().ECSCluster.ClusterName } func (suite *ecsSuite) TearDownSuite() { @@ -71,8 +99,8 @@ func (suite *ecsSuite) TearDownSuite() { suite.T().Log(c("https://dddev.datadoghq.com/dashboard/mnw-tdr-jd8/e2e-tests-containers-ecs?refresh_mode=paused&tpl_var_ecs_cluster_name%%5B0%%5D=%s&tpl_var_fake_intake_task_family%%5B0%%5D=%s-fakeintake-ecs&from_ts=%d&to_ts=%d&live=false", suite.ecsClusterName, strings.TrimSuffix(suite.ecsClusterName, "-ecs"), - suite.StartTime().UnixMilli(), - suite.EndTime().UnixMilli(), + suite.startTime.UnixMilli(), + suite.endTime.UnixMilli(), )) } diff --git a/test/new-e2e/tests/containers/eks_test.go b/test/new-e2e/tests/containers/eks_test.go index 163bcdba0f0b4..6562eff6abb80 100644 --- a/test/new-e2e/tests/containers/eks_test.go +++ b/test/new-e2e/tests/containers/eks_test.go @@ -6,32 +6,104 @@ package containers import ( + "context" + "encoding/json" "testing" - tifeks "github.com/DataDog/test-infra-definitions/scenarios/aws/eks" + "github.com/DataDog/test-infra-definitions/scenarios/aws/eks" - "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" - awskubernetes "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/kubernetes" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/runner" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/runner/parameters" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/utils/infra" + + "github.com/pulumi/pulumi/sdk/v3/go/auto" + "github.com/stretchr/testify/suite" + "k8s.io/client-go/tools/clientcmd" ) type eksSuite struct { k8sSuite + initOnly bool } func TestEKSSuite(t *testing.T) { - e2e.Run(t, &eksSuite{}, e2e.WithProvisioner(awskubernetes.EKSProvisioner( - awskubernetes.WithEKSOptions( - tifeks.WithLinuxNodeGroup(), - tifeks.WithWindowsNodeGroup(), - tifeks.WithBottlerocketNodeGroup(), - tifeks.WithLinuxARMNodeGroup(), - ), - awskubernetes.WithDeployDogstatsd(), - awskubernetes.WithDeployTestWorkload(), - ))) + var initOnly bool + initOnlyParam, err := runner.GetProfile().ParamStore().GetBoolWithDefault(parameters.InitOnly, false) + if err == nil { + initOnly = initOnlyParam + } + suite.Run(t, &eksSuite{initOnly: initOnly}) } func (suite *eksSuite) SetupSuite() { + ctx := context.Background() + + stackConfig := runner.ConfigMap{ + "ddagent:deploy": auto.ConfigValue{Value: "true"}, + "ddagent:fakeintake": auto.ConfigValue{Value: "true"}, + "ddtestworkload:deploy": auto.ConfigValue{Value: "true"}, + "dddogstatsd:deploy": auto.ConfigValue{Value: "true"}, + } + + _, stackOutput, err := infra.GetStackManager().GetStackNoDeleteOnFailure( + ctx, + "eks-cluster", + eks.Run, + infra.WithConfigMap(stackConfig), + ) + + if !suite.Assert().NoError(err) { + stackName, err := infra.GetStackManager().GetPulumiStackName("eks-cluster") + suite.Require().NoError(err) + suite.T().Log(dumpEKSClusterState(ctx, stackName)) + if !runner.GetProfile().AllowDevMode() || !*keepStacks { + infra.GetStackManager().DeleteStack(ctx, "eks-cluster", nil) + } + suite.T().FailNow() + } + + if suite.initOnly { + suite.T().Skip("E2E_INIT_ONLY is set, skipping tests") + } + + fakeintake := &components.FakeIntake{} + fiSerialized, err := json.Marshal(stackOutput.Outputs["dd-Fakeintake-aws-ecs"].Value) + suite.Require().NoError(err) + suite.Require().NoError(fakeintake.Import(fiSerialized, &fakeintake)) + suite.Require().NoError(fakeintake.Init(suite)) + suite.Fakeintake = fakeintake.Client() + + kubeCluster := &components.KubernetesCluster{} + kubeSerialized, err := json.Marshal(stackOutput.Outputs["dd-Cluster-eks"].Value) + suite.Require().NoError(err) + suite.Require().NoError(kubeCluster.Import(kubeSerialized, &kubeCluster)) + suite.Require().NoError(kubeCluster.Init(suite)) + suite.KubeClusterName = kubeCluster.ClusterName + suite.K8sClient = kubeCluster.Client() + suite.K8sConfig, err = clientcmd.RESTConfigFromKubeConfig([]byte(kubeCluster.KubeConfig)) + suite.Require().NoError(err) + + kubernetesAgent := &components.KubernetesAgent{} + kubernetesAgentSerialized, err := json.Marshal(stackOutput.Outputs["dd-KubernetesAgent-aws-datadog-agent"].Value) + suite.Require().NoError(err) + suite.Require().NoError(kubernetesAgent.Import(kubernetesAgentSerialized, &kubernetesAgent)) + + suite.KubernetesAgentRef = kubernetesAgent + suite.k8sSuite.SetupSuite() - suite.Fakeintake = suite.Env().FakeIntake.Client() +} + +func (suite *eksSuite) TearDownSuite() { + if suite.initOnly { + suite.T().Logf("E2E_INIT_ONLY is set, skipping deletion") + return + } + + suite.k8sSuite.TearDownSuite() + + ctx := context.Background() + stackName, err := infra.GetStackManager().GetPulumiStackName("eks-cluster") + suite.Require().NoError(err) + suite.T().Log(dumpEKSClusterState(ctx, stackName)) } diff --git a/test/new-e2e/tests/containers/k8s_test.go b/test/new-e2e/tests/containers/k8s_test.go index 3bf11754dff61..fbb1195a976c3 100644 --- a/test/new-e2e/tests/containers/k8s_test.go +++ b/test/new-e2e/tests/containers/k8s_test.go @@ -22,7 +22,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/testutil/flake" "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" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" "github.com/fatih/color" "github.com/samber/lo" @@ -32,7 +32,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" + restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/remotecommand" ) @@ -50,12 +52,21 @@ const ( var GitCommit string type k8sSuite struct { - baseSuite[environments.Kubernetes] + baseSuite + + KubeClusterName string + AgentLinuxHelmInstallName string + AgentWindowsHelmInstallName string + KubernetesAgentRef *components.KubernetesAgent + + K8sConfig *restclient.Config + K8sClient kubernetes.Interface } func (suite *k8sSuite) SetupSuite() { + suite.clusterName = suite.KubeClusterName + suite.baseSuite.SetupSuite() - suite.clusterName = suite.Env().KubernetesCluster.ClusterName } func (suite *k8sSuite) TearDownSuite() { @@ -66,10 +77,10 @@ func (suite *k8sSuite) TearDownSuite() { suite.T().Log(c("The data produced and asserted by these tests can be viewed on this dashboard:")) c = color.New(color.Bold, color.FgBlue).SprintfFunc() suite.T().Log(c("https://dddev.datadoghq.com/dashboard/qcp-brm-ysc/e2e-tests-containers-k8s?refresh_mode=paused&tpl_var_kube_cluster_name%%5B0%%5D=%s&tpl_var_fake_intake_task_family%%5B0%%5D=%s-fakeintake-ecs&from_ts=%d&to_ts=%d&live=false", - suite.clusterName, - suite.clusterName, - suite.StartTime().UnixMilli(), - suite.EndTime().UnixMilli(), + suite.KubeClusterName, + suite.KubeClusterName, + suite.startTime.UnixMilli(), + suite.endTime.UnixMilli(), )) } @@ -109,7 +120,7 @@ func (suite *k8sSuite) testUpAndRunning(waitFor time.Duration) { suite.Run("agent pods are ready and not restarting", func() { suite.EventuallyWithTf(func(c *assert.CollectT) { - linuxNodes, err := suite.Env().KubernetesCluster.Client().CoreV1().Nodes().List(ctx, metav1.ListOptions{ + linuxNodes, err := suite.K8sClient.CoreV1().Nodes().List(ctx, metav1.ListOptions{ LabelSelector: fields.OneTermEqualSelector("kubernetes.io/os", "linux").String(), }) // Can be replaced by require.NoErrorf(…) once https://github.com/stretchr/testify/pull/1481 is merged @@ -117,7 +128,7 @@ func (suite *k8sSuite) testUpAndRunning(waitFor time.Duration) { return } - windowsNodes, err := suite.Env().KubernetesCluster.Client().CoreV1().Nodes().List(ctx, metav1.ListOptions{ + windowsNodes, err := suite.K8sClient.CoreV1().Nodes().List(ctx, metav1.ListOptions{ LabelSelector: fields.OneTermEqualSelector("kubernetes.io/os", "windows").String(), }) // Can be replaced by require.NoErrorf(…) once https://github.com/stretchr/testify/pull/1481 is merged @@ -125,39 +136,39 @@ func (suite *k8sSuite) testUpAndRunning(waitFor time.Duration) { return } - linuxPods, err := suite.Env().KubernetesCluster.Client().CoreV1().Pods("datadog").List(ctx, metav1.ListOptions{ - LabelSelector: fields.OneTermEqualSelector("app", suite.Env().Agent.LinuxNodeAgent.LabelSelectors["app"]).String(), + linuxPods, err := suite.K8sClient.CoreV1().Pods("datadog").List(ctx, metav1.ListOptions{ + LabelSelector: fields.OneTermEqualSelector("app", suite.KubernetesAgentRef.LinuxNodeAgent.LabelSelectors["app"]).String(), }) // Can be replaced by require.NoErrorf(…) once https://github.com/stretchr/testify/pull/1481 is merged if !assert.NoErrorf(c, err, "Failed to list Linux datadog agent pods") { return } - windowsPods, err := suite.Env().KubernetesCluster.Client().CoreV1().Pods("datadog").List(ctx, metav1.ListOptions{ - LabelSelector: fields.OneTermEqualSelector("app", suite.Env().Agent.WindowsNodeAgent.LabelSelectors["app"]).String(), + windowsPods, err := suite.K8sClient.CoreV1().Pods("datadog").List(ctx, metav1.ListOptions{ + LabelSelector: fields.OneTermEqualSelector("app", suite.KubernetesAgentRef.WindowsNodeAgent.LabelSelectors["app"]).String(), }) // Can be replaced by require.NoErrorf(…) once https://github.com/stretchr/testify/pull/1481 is merged if !assert.NoErrorf(c, err, "Failed to list Windows datadog agent pods") { return } - clusterAgentPods, err := suite.Env().KubernetesCluster.Client().CoreV1().Pods("datadog").List(ctx, metav1.ListOptions{ - LabelSelector: fields.OneTermEqualSelector("app", suite.Env().Agent.LinuxClusterAgent.LabelSelectors["app"]).String(), + clusterAgentPods, err := suite.K8sClient.CoreV1().Pods("datadog").List(ctx, metav1.ListOptions{ + LabelSelector: fields.OneTermEqualSelector("app", suite.KubernetesAgentRef.LinuxClusterAgent.LabelSelectors["app"]).String(), }) // Can be replaced by require.NoErrorf(…) once https://github.com/stretchr/testify/pull/1481 is merged if !assert.NoErrorf(c, err, "Failed to list datadog cluster agent pods") { return } - clusterChecksPods, err := suite.Env().KubernetesCluster.Client().CoreV1().Pods("datadog").List(ctx, metav1.ListOptions{ - LabelSelector: fields.OneTermEqualSelector("app", suite.Env().Agent.LinuxClusterChecks.LabelSelectors["app"]).String(), + clusterChecksPods, err := suite.K8sClient.CoreV1().Pods("datadog").List(ctx, metav1.ListOptions{ + LabelSelector: fields.OneTermEqualSelector("app", suite.KubernetesAgentRef.LinuxClusterChecks.LabelSelectors["app"]).String(), }) // Can be replaced by require.NoErrorf(…) once https://github.com/stretchr/testify/pull/1481 is merged if !assert.NoErrorf(c, err, "Failed to list datadog cluster checks runner pods") { return } - dogstatsdPods, err := suite.Env().KubernetesCluster.Client().CoreV1().Pods("dogstatsd-standalone").List(ctx, metav1.ListOptions{ + dogstatsdPods, err := suite.K8sClient.CoreV1().Pods("dogstatsd-standalone").List(ctx, metav1.ListOptions{ LabelSelector: fields.OneTermEqualSelector("app", "dogstatsd-standalone").String(), }) // Can be replaced by require.NoErrorf(…) once https://github.com/stretchr/testify/pull/1481 is merged @@ -188,13 +199,13 @@ func (suite *k8sSuite) TestAdmissionControllerWebhooksExist() { expectedWebhookName := "datadog-webhook" suite.Run("agent registered mutating webhook configuration", func() { - mutatingConfig, err := suite.Env().KubernetesCluster.Client().AdmissionregistrationV1().MutatingWebhookConfigurations().Get(ctx, expectedWebhookName, metav1.GetOptions{}) + mutatingConfig, err := suite.K8sClient.AdmissionregistrationV1().MutatingWebhookConfigurations().Get(ctx, expectedWebhookName, metav1.GetOptions{}) suite.Require().NoError(err) suite.NotNilf(mutatingConfig, "None of the mutating webhook configurations have the name '%s'", expectedWebhookName) }) suite.Run("agent registered validating webhook configuration", func() { - validatingConfig, err := suite.Env().KubernetesCluster.Client().AdmissionregistrationV1().ValidatingWebhookConfigurations().Get(ctx, expectedWebhookName, metav1.GetOptions{}) + validatingConfig, err := suite.K8sClient.AdmissionregistrationV1().ValidatingWebhookConfigurations().Get(ctx, expectedWebhookName, metav1.GetOptions{}) suite.Require().NoError(err) suite.NotNilf(validatingConfig, "None of the validating webhook configurations have the name '%s'", expectedWebhookName) }) @@ -211,27 +222,27 @@ func (suite *k8sSuite) TestVersion() { }{ { "Linux agent", - suite.Env().Agent.LinuxNodeAgent.LabelSelectors["app"], + suite.KubernetesAgentRef.LinuxNodeAgent.LabelSelectors["app"], "agent", }, { "Windows agent", - suite.Env().Agent.WindowsNodeAgent.LabelSelectors["app"], + suite.KubernetesAgentRef.WindowsNodeAgent.LabelSelectors["app"], "agent", }, { "cluster agent", - suite.Env().Agent.LinuxClusterAgent.LabelSelectors["app"], + suite.KubernetesAgentRef.LinuxClusterAgent.LabelSelectors["app"], "cluster-agent", }, { "cluster checks", - suite.Env().Agent.LinuxClusterChecks.LabelSelectors["app"], + suite.KubernetesAgentRef.LinuxClusterChecks.LabelSelectors["app"], "agent", }, } { suite.Run(tt.podType+" pods are running the good version", func() { - linuxPods, err := suite.Env().KubernetesCluster.Client().CoreV1().Pods("datadog").List(ctx, metav1.ListOptions{ + linuxPods, err := suite.K8sClient.CoreV1().Pods("datadog").List(ctx, metav1.ListOptions{ LabelSelector: fields.OneTermEqualSelector("app", tt.appSelector).String(), Limit: 1, }) @@ -266,8 +277,8 @@ func (suite *k8sSuite) TestCLI() { func (suite *k8sSuite) testAgentCLI() { ctx := context.Background() - pod, err := suite.Env().KubernetesCluster.Client().CoreV1().Pods("datadog").List(ctx, metav1.ListOptions{ - LabelSelector: fields.OneTermEqualSelector("app", suite.Env().Agent.LinuxNodeAgent.LabelSelectors["app"]).String(), + pod, err := suite.K8sClient.CoreV1().Pods("datadog").List(ctx, metav1.ListOptions{ + LabelSelector: fields.OneTermEqualSelector("app", suite.KubernetesAgentRef.LinuxNodeAgent.LabelSelectors["app"]).String(), Limit: 1, }) suite.Require().NoError(err) @@ -373,8 +384,8 @@ func (suite *k8sSuite) testAgentCLI() { func (suite *k8sSuite) testClusterAgentCLI() { ctx := context.Background() - pod, err := suite.Env().KubernetesCluster.Client().CoreV1().Pods("datadog").List(ctx, metav1.ListOptions{ - LabelSelector: fields.OneTermEqualSelector("app", suite.Env().Agent.LinuxClusterAgent.LabelSelectors["app"]).String(), + pod, err := suite.K8sClient.CoreV1().Pods("datadog").List(ctx, metav1.ListOptions{ + LabelSelector: fields.OneTermEqualSelector("app", suite.KubernetesAgentRef.LinuxClusterAgent.LabelSelectors["app"]).String(), Limit: 1, }) suite.Require().NoError(err) @@ -834,7 +845,7 @@ func (suite *k8sSuite) testDogstatsdExternalData(kubeNamespace, kubeDeployment s ctx := context.Background() // Record old pod, so we can be sure we are not looking at the incorrect one after deletion - oldPods, err := suite.Env().KubernetesCluster.KubernetesClient.K8sClient.CoreV1().Pods(kubeNamespace).List(ctx, metav1.ListOptions{ + oldPods, err := suite.K8sClient.CoreV1().Pods(kubeNamespace).List(ctx, metav1.ListOptions{ LabelSelector: fields.OneTermEqualSelector("app", kubeDeployment).String(), }) suite.Require().NoError(err) @@ -842,7 +853,7 @@ func (suite *k8sSuite) testDogstatsdExternalData(kubeNamespace, kubeDeployment s oldPod := oldPods.Items[0] // Delete the pod to ensure it is recreated after the admission controller is deployed - err = suite.Env().KubernetesCluster.KubernetesClient.K8sClient.CoreV1().Pods(kubeNamespace).DeleteCollection(ctx, metav1.DeleteOptions{}, metav1.ListOptions{ + err = suite.K8sClient.CoreV1().Pods(kubeNamespace).DeleteCollection(ctx, metav1.DeleteOptions{}, metav1.ListOptions{ LabelSelector: fields.OneTermEqualSelector("app", kubeDeployment).String(), }) suite.Require().NoError(err) @@ -850,7 +861,7 @@ func (suite *k8sSuite) testDogstatsdExternalData(kubeNamespace, kubeDeployment s // Wait for the fresh pod to be created var pod corev1.Pod suite.Require().EventuallyWithTf(func(c *assert.CollectT) { - pods, err := suite.Env().KubernetesCluster.KubernetesClient.K8sClient.CoreV1().Pods(kubeNamespace).List(ctx, metav1.ListOptions{ + pods, err := suite.K8sClient.CoreV1().Pods(kubeNamespace).List(ctx, metav1.ListOptions{ LabelSelector: fields.OneTermEqualSelector("app", kubeDeployment).String(), }) if !assert.NoError(c, err) { @@ -996,7 +1007,7 @@ func (suite *k8sSuite) testAdmissionControllerPod(namespace string, name string, // libraries for the detected language are injected if languageShouldBeAutoDetected { suite.Require().EventuallyWithTf(func(c *assert.CollectT) { - deployment, err := suite.Env().KubernetesCluster.Client().AppsV1().Deployments(namespace).Get(ctx, name, metav1.GetOptions{}) + deployment, err := suite.K8sClient.AppsV1().Deployments(namespace).Get(ctx, name, metav1.GetOptions{}) if !assert.NoError(c, err) { return } @@ -1014,7 +1025,7 @@ func (suite *k8sSuite) testAdmissionControllerPod(namespace string, name string, } // Record old pod, so we can be sure we are not looking at the incorrect one after deletion - oldPods, err := suite.Env().KubernetesCluster.Client().CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{ + oldPods, err := suite.K8sClient.CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{ LabelSelector: fields.OneTermEqualSelector("app", name).String(), }) suite.Require().NoError(err) @@ -1022,7 +1033,7 @@ func (suite *k8sSuite) testAdmissionControllerPod(namespace string, name string, oldPod := oldPods.Items[0] // Delete the pod to ensure it is recreated after the admission controller is deployed - err = suite.Env().KubernetesCluster.Client().CoreV1().Pods(namespace).DeleteCollection(ctx, metav1.DeleteOptions{}, metav1.ListOptions{ + err = suite.K8sClient.CoreV1().Pods(namespace).DeleteCollection(ctx, metav1.DeleteOptions{}, metav1.ListOptions{ LabelSelector: fields.OneTermEqualSelector("app", name).String(), }) suite.Require().NoError(err) @@ -1030,7 +1041,7 @@ func (suite *k8sSuite) testAdmissionControllerPod(namespace string, name string, // Wait for the fresh pod to be created var pod corev1.Pod suite.Require().EventuallyWithTf(func(c *assert.CollectT) { - pods, err := suite.Env().KubernetesCluster.Client().CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{ + pods, err := suite.K8sClient.CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{ LabelSelector: fields.OneTermEqualSelector("app", name).String(), }) if !assert.NoError(c, err) { @@ -1126,7 +1137,7 @@ func (suite *k8sSuite) testAdmissionControllerPod(namespace string, name string, func (suite *k8sSuite) TestContainerImage() { sendEvent := func(alertType, text string) { - if _, err := suite.DatadogClient().PostEvent(&datadog.Event{ + if _, err := suite.datadogClient.PostEvent(&datadog.Event{ Title: pointer.Ptr(suite.T().Name()), Text: pointer.Ptr(fmt.Sprintf(`%%%%%% `+"```"+` @@ -1196,7 +1207,7 @@ func (suite *k8sSuite) TestContainerImage() { func (suite *k8sSuite) TestSBOM() { sendEvent := func(alertType, text string) { - if _, err := suite.DatadogClient().PostEvent(&datadog.Event{ + if _, err := suite.datadogClient.PostEvent(&datadog.Event{ Title: pointer.Ptr(suite.T().Name()), Text: pointer.Ptr(fmt.Sprintf(`%%%%%% `+"```"+` @@ -1321,7 +1332,7 @@ func (suite *k8sSuite) TestSBOM() { func (suite *k8sSuite) TestContainerLifecycleEvents() { sendEvent := func(alertType, text string) { - if _, err := suite.DatadogClient().PostEvent(&datadog.Event{ + if _, err := suite.datadogClient.PostEvent(&datadog.Event{ Title: pointer.Ptr(suite.T().Name()), Text: pointer.Ptr(fmt.Sprintf(`%%%%%% `+"```"+` @@ -1351,7 +1362,7 @@ func (suite *k8sSuite) TestContainerLifecycleEvents() { var nginxPod corev1.Pod suite.Require().EventuallyWithTf(func(c *assert.CollectT) { - pods, err := suite.Env().KubernetesCluster.Client().CoreV1().Pods("workload-nginx").List(context.Background(), metav1.ListOptions{ + pods, err := suite.K8sClient.CoreV1().Pods("workload-nginx").List(context.Background(), metav1.ListOptions{ LabelSelector: fields.OneTermEqualSelector("app", "nginx").String(), FieldSelector: fields.OneTermEqualSelector("status.phase", "Running").String(), }) @@ -1371,7 +1382,7 @@ func (suite *k8sSuite) TestContainerLifecycleEvents() { }) }, 1*time.Minute, 10*time.Second, "Failed to find an nginx pod") - err := suite.Env().KubernetesCluster.Client().CoreV1().Pods("workload-nginx").Delete(context.Background(), nginxPod.Name, metav1.DeleteOptions{}) + err := suite.K8sClient.CoreV1().Pods("workload-nginx").Delete(context.Background(), nginxPod.Name, metav1.DeleteOptions{}) suite.Require().NoError(err) suite.EventuallyWithTf(func(collect *assert.CollectT) { @@ -1414,7 +1425,7 @@ func (suite *k8sSuite) TestContainerLifecycleEvents() { func (suite *k8sSuite) testHPA(namespace, deployment string) { suite.Run(fmt.Sprintf("hpa kubernetes_state.deployment.replicas_available{kube_namespace:%s,kube_deployment:%s}", namespace, deployment), func() { sendEvent := func(alertType, text string, time *int) { - if _, err := suite.DatadogClient().PostEvent(&datadog.Event{ + if _, err := suite.datadogClient.PostEvent(&datadog.Event{ Title: pointer.Ptr(fmt.Sprintf("testHPA %s/%s", namespace, deployment)), Text: pointer.Ptr(fmt.Sprintf(`%%%%%% %s @@ -1502,7 +1513,7 @@ func (suite *k8sSuite) testHPA(namespace, deployment string) { type podExecOption func(*corev1.PodExecOptions) func (suite *k8sSuite) podExec(namespace, pod, container string, cmd []string, podOptions ...podExecOption) (stdout, stderr string, err error) { - req := suite.Env().KubernetesCluster.Client().CoreV1().RESTClient().Post().Resource("pods").Namespace(namespace).Name(pod).SubResource("exec") + req := suite.K8sClient.CoreV1().RESTClient().Post().Resource("pods").Namespace(namespace).Name(pod).SubResource("exec") option := &corev1.PodExecOptions{ Stdin: false, Stdout: true, @@ -1521,7 +1532,7 @@ func (suite *k8sSuite) podExec(namespace, pod, container string, cmd []string, p scheme.ParameterCodec, ) - exec, err := remotecommand.NewSPDYExecutor(suite.Env().KubernetesCluster.KubernetesClient.K8sConfig, "POST", req.URL()) + exec, err := remotecommand.NewSPDYExecutor(suite.K8sConfig, "POST", req.URL()) if err != nil { return "", "", err } diff --git a/test/new-e2e/tests/containers/kindvm_test.go b/test/new-e2e/tests/containers/kindvm_test.go index f6212d98eaed8..08e327fced435 100644 --- a/test/new-e2e/tests/containers/kindvm_test.go +++ b/test/new-e2e/tests/containers/kindvm_test.go @@ -6,14 +6,21 @@ package containers import ( - "github.com/DataDog/datadog-agent/pkg/util/testutil/flake" + "context" + "encoding/json" "testing" - "github.com/DataDog/test-infra-definitions/scenarios/aws/ec2" - "github.com/DataDog/test-infra-definitions/scenarios/aws/fakeintake" + "github.com/DataDog/datadog-agent/pkg/util/testutil/flake" + + "github.com/DataDog/test-infra-definitions/scenarios/aws/kindvm" + + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/runner" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/utils/infra" - "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" - awskubernetes "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/kubernetes" + "github.com/pulumi/pulumi/sdk/v3/go/auto" + "github.com/stretchr/testify/suite" + "k8s.io/client-go/tools/clientcmd" ) type kindSuite struct { @@ -22,19 +29,69 @@ type kindSuite struct { func TestKindSuite(t *testing.T) { flake.Mark(t) - e2e.Run(t, &kindSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner( - awskubernetes.WithEC2VMOptions( - ec2.WithInstanceType("t3.xlarge"), - ), - awskubernetes.WithFakeIntakeOptions(fakeintake.WithMemory(2048)), - awskubernetes.WithDeployDogstatsd(), - awskubernetes.WithDeployTestWorkload(), - ))) + suite.Run(t, &kindSuite{}) } func (suite *kindSuite) SetupSuite() { + ctx := context.Background() + + stackConfig := runner.ConfigMap{ + "ddinfra:aws/defaultInstanceType": auto.ConfigValue{Value: "t3.xlarge"}, + "ddagent:deploy": auto.ConfigValue{Value: "true"}, + "ddagent:fakeintake": auto.ConfigValue{Value: "true"}, + "ddtestworkload:deploy": auto.ConfigValue{Value: "true"}, + "dddogstatsd:deploy": auto.ConfigValue{Value: "true"}, + } + + _, stackOutput, err := infra.GetStackManager().GetStackNoDeleteOnFailure( + ctx, + "kind-cluster", + kindvm.Run, + infra.WithConfigMap(stackConfig), + ) + if !suite.Assert().NoError(err) { + stackName, err := infra.GetStackManager().GetPulumiStackName("kind-cluster") + suite.Require().NoError(err) + suite.T().Log(dumpKindClusterState(ctx, stackName)) + if !runner.GetProfile().AllowDevMode() || !*keepStacks { + infra.GetStackManager().DeleteStack(ctx, "kind-cluster", nil) + } + suite.T().FailNow() + } + + var fakeintake components.FakeIntake + fiSerialized, err := json.Marshal(stackOutput.Outputs["dd-Fakeintake-aws-kind"].Value) + suite.Require().NoError(err) + suite.Require().NoError(fakeintake.Import(fiSerialized, &fakeintake)) + suite.Require().NoError(fakeintake.Init(suite)) + suite.Fakeintake = fakeintake.Client() + + var kubeCluster components.KubernetesCluster + kubeSerialized, err := json.Marshal(stackOutput.Outputs["dd-Cluster-kind"].Value) + suite.Require().NoError(err) + suite.Require().NoError(kubeCluster.Import(kubeSerialized, &kubeCluster)) + suite.Require().NoError(kubeCluster.Init(suite)) + suite.KubeClusterName = kubeCluster.ClusterName + suite.K8sClient = kubeCluster.Client() + suite.K8sConfig, err = clientcmd.RESTConfigFromKubeConfig([]byte(kubeCluster.KubeConfig)) + suite.Require().NoError(err) + + kubernetesAgent := &components.KubernetesAgent{} + kubernetesAgentSerialized, err := json.Marshal(stackOutput.Outputs["dd-KubernetesAgent-aws-datadog-agent"].Value) + suite.Require().NoError(err) + suite.Require().NoError(kubernetesAgent.Import(kubernetesAgentSerialized, &kubernetesAgent)) + suite.KubernetesAgentRef = kubernetesAgent + suite.k8sSuite.SetupSuite() - suite.Fakeintake = suite.Env().FakeIntake.Client() +} + +func (suite *kindSuite) TearDownSuite() { + suite.k8sSuite.TearDownSuite() + + ctx := context.Background() + stackName, err := infra.GetStackManager().GetPulumiStackName("kind-cluster") + suite.Require().NoError(err) + suite.T().Log(dumpKindClusterState(ctx, stackName)) } func (suite *kindSuite) TestControlPlane() { From 01b605d452242a9f129a5d380d1a6b25e0212d29 Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Thu, 5 Dec 2024 17:54:37 +0100 Subject: [PATCH 005/303] Gowork off on serverless integration test (#31775) --- .github/workflows/serverless-integration.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/serverless-integration.yml b/.github/workflows/serverless-integration.yml index da01338b48081..288d3ef5042e4 100644 --- a/.github/workflows/serverless-integration.yml +++ b/.github/workflows/serverless-integration.yml @@ -9,6 +9,7 @@ on: - 'pkg/serverless/**' - 'test/integration/serverless/**' - '.github/workflows/serverless-integration.yml' + - 'go.mod' schedule: - cron: '0 14 * * *' # cron schedule uses UTC timezone. Run tests at the beginning of the day in US-East @@ -67,6 +68,7 @@ jobs: env: AWS_ACCESS_KEY_ID: ${{ secrets.SERVERLESS_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.SERVERLESS_AWS_SECRET_ACCESS_KEY }} + GOWORK: off with: timeout_minutes: 60 max_attempts: 2 From 7027b870d5d7b4d9d5a72ae1626df682f658352c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lian=20Raimbault?= <161456554+CelianR@users.noreply.github.com> Date: Thu, 5 Dec 2024 11:54:47 -0500 Subject: [PATCH 006/303] Fix gitlab diff (unhashable type list) (#31799) --- tasks/libs/ciproviders/gitlab_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/libs/ciproviders/gitlab_api.py b/tasks/libs/ciproviders/gitlab_api.py index 0cf4c429b59b0..03ba1e58c8003 100644 --- a/tasks/libs/ciproviders/gitlab_api.py +++ b/tasks/libs/ciproviders/gitlab_api.py @@ -176,7 +176,7 @@ def from_dict(data: dict) -> GitlabCIDiff: added=set(data['added']), removed=set(data['removed']), modified=set(data['modified']), - renamed=set(data['renamed']), + renamed=data['renamed'], modified_diffs=data['modied_diffs'], added_contents=data['added_contents'], ) From 97d29fb33d507fcd365c9035ba956e5f250d6405 Mon Sep 17 00:00:00 2001 From: Daniel Tafoya <63120739+daniel-taf@users.noreply.github.com> Date: Thu, 5 Dec 2024 11:55:20 -0500 Subject: [PATCH 007/303] [PROCS-4577] Remove `ECSEC2Suite` embed from `ECSEC2CoreAgentSuite` struct (#31800) --- test/new-e2e/tests/process/ecs_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/new-e2e/tests/process/ecs_test.go b/test/new-e2e/tests/process/ecs_test.go index 95024a2bdea3d..45881701fde06 100644 --- a/test/new-e2e/tests/process/ecs_test.go +++ b/test/new-e2e/tests/process/ecs_test.go @@ -91,7 +91,7 @@ func (s *ECSEC2Suite) TestProcessCheck() { // This is duplicated as the tests have been flaky. This may be due to how pulumi is handling the provisioning of // ecs tasks. type ECSEC2CoreAgentSuite struct { - ECSEC2Suite + e2e.BaseSuite[ecsCPUStressEnv] } func TestECSEC2CoreAgentSuite(t *testing.T) { From 4fd23e42a5085305f92bbef426351e9e7db0572d Mon Sep 17 00:00:00 2001 From: "John L. Peterson (Jack)" Date: Thu, 5 Dec 2024 12:18:29 -0500 Subject: [PATCH 008/303] OTEL-2238 update integration test to build ddflare and datadog converter (#31189) --- .gitlab/JOBOWNERS | 2 +- .gitlab/integration_test/otel.yml | 28 +++++++------------- test/otel/testdata/builder-config.yaml | 12 ++++++--- test/otel/testdata/collector-config.yaml | 22 +++------------- test/otel/testdata/ocb_build_script.sh | 33 ++++++++++++++++++++++++ 5 files changed, 54 insertions(+), 43 deletions(-) create mode 100755 test/otel/testdata/ocb_build_script.sh diff --git a/.gitlab/JOBOWNERS b/.gitlab/JOBOWNERS index 091149d6d7af2..bbb7d693c5ea3 100644 --- a/.gitlab/JOBOWNERS +++ b/.gitlab/JOBOWNERS @@ -133,7 +133,7 @@ trigger_auto_staging_release @DataDog/agent-delivery integration_tests_windows* @DataDog/windows-agent integration_tests_otel @DataDog/opentelemetry docker_image_build_otel @DataDog/opentelemetry -ddflare_extension_ocb_build @DataDog/opentelemetry +datadog_otel_components_ocb_build @DataDog/opentelemetry agent_integration_tests @DataDog/container-integrations docker_integration_tests @DataDog/container-integrations diff --git a/.gitlab/integration_test/otel.yml b/.gitlab/integration_test/otel.yml index 5f162afc2d564..4a2a054c66967 100644 --- a/.gitlab/integration_test/otel.yml +++ b/.gitlab/integration_test/otel.yml @@ -57,35 +57,25 @@ docker_image_build_otel: - when: always -ddflare_extension_ocb_build: +datadog_otel_components_ocb_build: stage: integration_test image: registry.ddbuild.io/ci/datadog-agent-buildimages/deb_x64$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES tags: ["arch:amd64"] needs: ["go_deps"] + artifacts: + paths: + - ocb-output.log + - otelcol-custom.log + - flare-info.log before_script: - !reference [.retrieve_linux_go_deps] - - mkdir -p /tmp/otel-ci - - cp test/otel/testdata/* /tmp/otel-ci/ - - wget -O /tmp/otel-ci/ocb https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/cmd%2Fbuilder%2Fv0.114.0/ocb_0.114.0_linux_amd64 - - chmod +x /tmp/otel-ci/ocb script: - - echo 'Building collector with OCB and test ddflare extension' - - /tmp/otel-ci/ocb --config=/tmp/otel-ci/builder-config.yaml > ocb-output.log 2>&1 - - grep -q 'Compiled' ocb-output.log || (echo "OCB failed to compile" && exit 1) - - "grep -q '{\"binary\": \"/tmp/otel-ci/otelcol-custom/otelcol-custom\"}' ocb-output.log || (echo \"OCB failed to compile\" && exit 1)" - - /tmp/otel-ci/otelcol-custom/otelcol-custom --config /tmp/otel-ci/collector-config.yaml > otelcol-custom.log 2>&1 & - - OTELCOL_PID=$! # Capture the process ID - - sleep 10 # Wait for the process to start - - grep -q 'Everything is ready. Begin running and processing data.' otelcol-custom.log || (echo "custom collector failed to start" && kill $OTELCOL_PID && exit 1) - - curl -k https://localhost:7777 > flare-info.log 2>&1 # get the dd flare info - - "grep -q '\"provided_configuration\": \"\"' flare-info.log || (echo \"provided config should not be supported with ocb\" && kill $OTELCOL_PID && exit 1)" - - grep -q 'extensions:\\n - ddflare\\n' flare-info.log || (echo "ddflare extension should be enabled" && kill $OTELCOL_PID && exit 1) - - kill $OTELCOL_PID # Kill the process + - echo "Building custom collector with datadog components" + - test/otel/testdata/ocb_build_script.sh + - echo "see artifacts for job logs" rules: - if: $CI_PIPELINE_SOURCE =~ /^schedule.*$/ when: never - - if: $CI_COMMIT_TAG - when: never - if: $CI_COMMIT_MESSAGE =~ /.*\[skip cancel\].*/ when: never - if: $CI_COMMIT_REF_NAME =~ /.*-skip-cancel$/ diff --git a/test/otel/testdata/builder-config.yaml b/test/otel/testdata/builder-config.yaml index bb20b619e5ddc..b13b478649860 100644 --- a/test/otel/testdata/builder-config.yaml +++ b/test/otel/testdata/builder-config.yaml @@ -1,10 +1,11 @@ -connectors: -- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector - v0.114.0 dist: description: Basic OTel Collector distribution for Developers name: otelcol-custom output_path: /tmp/otel-ci/otelcol-custom +connectors: +- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector + v0.114.0 +- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.114.0 exporters: - gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.114.0 - gomod: go.opentelemetry.io/collector/exporter/nopexporter v0.114.0 @@ -15,7 +16,7 @@ exporters: - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.114.0 extensions: -- gomod: github.com/DataDog/datadog-agent/comp/otelcol/ddflareextension/impl v0.60.0 +- gomod: github.com/DataDog/datadog-agent/comp/otelcol/ddflareextension/impl v0.61.0 path: ./comp/otelcol/ddflareextension/impl - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension @@ -80,3 +81,6 @@ receivers: v0.114.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.114.0 +converters: +- gomod: github.com/DataDog/datadog-agent/comp/otelcol/converter/impl v0.61.0 + path: ./comp/otelcol/converter/impl diff --git a/test/otel/testdata/collector-config.yaml b/test/otel/testdata/collector-config.yaml index a117589a48b26..60a7c607d9299 100644 --- a/test/otel/testdata/collector-config.yaml +++ b/test/otel/testdata/collector-config.yaml @@ -11,41 +11,25 @@ processors: exporters: debug: - otlp: - endpoint: "localhost:4317" - tls: - insecure: true # Set to true for testing; adjust for production. - datadog/exporter: - api: - site: datadoghq.com - key: "12345" extensions: ddflare: include_metadata: true # Set to true for testing; adjust for production. - health_check: - zpages: - pprof: service: - extensions: - - ddflare - - health_check - - pprof - - zpages pipelines: traces: receivers: [otlp] processors: [batch] - exporters: [debug, otlp] + exporters: [debug] metrics: receivers: [otlp] processors: [batch] - exporters: [debug, otlp] + exporters: [debug] logs: receivers: [otlp] processors: [batch] - exporters: [datadog/exporter] + exporters: [debug] # TODO: enable Additional configuration providers # providers: diff --git a/test/otel/testdata/ocb_build_script.sh b/test/otel/testdata/ocb_build_script.sh new file mode 100755 index 0000000000000..6aaf8bfeb36b4 --- /dev/null +++ b/test/otel/testdata/ocb_build_script.sh @@ -0,0 +1,33 @@ +#!/bin/bash +set -e +OTELCOL_PID=0 + +mkdir -p /tmp/otel-ci +trap 'rm -rf /tmp/otel-ci && kill $OTELCOL_PID' EXIT +cp ./test/otel/testdata/builder-config.yaml /tmp/otel-ci/ +cp ./test/otel/testdata/collector-config.yaml /tmp/otel-ci/ +cp ./tools/ci/retry.sh /tmp/otel-ci/ +chmod +x /tmp/otel-ci/retry.sh + +OCB_VERSION="0.114.0" +CGO_ENABLED=0 go install -trimpath -ldflags="-s -w" go.opentelemetry.io/collector/cmd/builder@v${OCB_VERSION} +mv "$(go env GOPATH)/bin/builder" /tmp/otel-ci/ocb + +chmod +x /tmp/otel-ci/ocb + +/tmp/otel-ci/ocb --config=/tmp/otel-ci/builder-config.yaml > ocb-output.log 2>&1 +grep -q 'Compiled' ocb-output.log || (echo "OCB failed to build custom collector" && exit 1) +grep -q '{"binary": "/tmp/otel-ci/otelcol-custom/otelcol-custom"}' ocb-output.log || (echo "OCB failed to build custom collector" && exit 1) + +/tmp/otel-ci/otelcol-custom/otelcol-custom --config /tmp/otel-ci/collector-config.yaml > otelcol-custom.log 2>&1 & +OTELCOL_PID=$! +/tmp/otel-ci/retry.sh grep -q 'Everything is ready. Begin running and processing data.' otelcol-custom.log || (echo "Failed to start otelcol-custom" && exit 1) + +/tmp/otel-ci/retry.sh curl -k https://localhost:7777 > flare-info.log 2>&1 +grep -q '"provided_configuration": ""' flare-info.log || (echo "provided config is not empty" && exit 1) +grep -q 'ddflare/dd-autoconfigured' flare-info.log || (echo "ddflare extension should be enabled" && exit 1) +grep -q 'health_check/dd-autoconfigured' flare-info.log || (echo "health_check extension should be enabled" && exit 1) +grep -q 'pprof/dd-autoconfigured' flare-info.log || (echo "pprof extension should be enabled" && exit 1) +grep -q 'zpages/dd-autoconfigured' flare-info.log || (echo "zpages extension should be enabled" && exit 1) + +echo "OCB build script completed successfully" From 945f15cabb6c40d40884e6faff16e8970cf4c5ef Mon Sep 17 00:00:00 2001 From: Gabriel Dos Santos <91925154+gabedos@users.noreply.github.com> Date: Thu, 5 Dec 2024 13:21:45 -0500 Subject: [PATCH 009/303] [CONTP-499] Parsing GPU tags on kubeapiserver collector (#31465) --- .github/CODEOWNERS | 1 + .../collectors/internal/kubelet/kubelet.go | 50 ++--- .../internal/kubelet/kubelet_test.go | 175 ++++++++++++++++++ .../util/kubernetes_resource_parsers/pod.go | 16 ++ .../kubernetes_resource_parsers/pod_test.go | 24 +++ pkg/util/gpu/common.go | 48 +++++ pkg/util/gpu/common_test.go | 41 ++++ ...piserver-gpu-tagging-e6202bc782982e5d.yaml | 12 ++ 8 files changed, 330 insertions(+), 37 deletions(-) create mode 100644 comp/core/workloadmeta/collectors/internal/kubelet/kubelet_test.go create mode 100644 pkg/util/gpu/common.go create mode 100644 pkg/util/gpu/common_test.go create mode 100644 releasenotes/notes/kubeapiserver-gpu-tagging-e6202bc782982e5d.yaml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 42466f04064aa..c3d8aed610550 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -454,6 +454,7 @@ /pkg/util/docker/ @DataDog/container-integrations /pkg/util/ecs/ @DataDog/container-integrations /pkg/util/funcs/ @DataDog/ebpf-platform +/pkg/util/gpu/ @DataDog/container-platform /pkg/util/kernel/ @DataDog/ebpf-platform /pkg/util/safeelf/ @DataDog/ebpf-platform /pkg/util/ktime @DataDog/agent-security diff --git a/comp/core/workloadmeta/collectors/internal/kubelet/kubelet.go b/comp/core/workloadmeta/collectors/internal/kubelet/kubelet.go index 0633238f905ae..25440989430f9 100644 --- a/comp/core/workloadmeta/collectors/internal/kubelet/kubelet.go +++ b/comp/core/workloadmeta/collectors/internal/kubelet/kubelet.go @@ -22,6 +22,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/errors" "github.com/DataDog/datadog-agent/pkg/util/containers" pkgcontainersimage "github.com/DataDog/datadog-agent/pkg/util/containers/image" + "github.com/DataDog/datadog-agent/pkg/util/gpu" "github.com/DataDog/datadog-agent/pkg/util/kubernetes" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/kubelet" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -83,13 +84,13 @@ func (c *collector) Pull(ctx context.Context) error { return err } - events := c.parsePods(updatedPods) + events := parsePods(updatedPods) if time.Since(c.lastExpire) >= c.expireFreq { var expiredIDs []string expiredIDs, err = c.watcher.Expire() if err == nil { - events = append(events, c.parseExpires(expiredIDs)...) + events = append(events, parseExpires(expiredIDs)...) c.lastExpire = time.Now() } } @@ -107,7 +108,7 @@ func (c *collector) GetTargetCatalog() workloadmeta.AgentType { return c.catalog } -func (c *collector) parsePods(pods []*kubelet.Pod) []workloadmeta.CollectorEvent { +func parsePods(pods []*kubelet.Pod) []workloadmeta.CollectorEvent { events := []workloadmeta.CollectorEvent{} for _, pod := range pods { @@ -131,14 +132,14 @@ func (c *collector) parsePods(pods []*kubelet.Pod) []workloadmeta.CollectorEvent ID: podMeta.UID, } - podInitContainers, initContainerEvents := c.parsePodContainers( + podInitContainers, initContainerEvents := parsePodContainers( pod, pod.Spec.InitContainers, pod.Status.InitContainers, &podID, ) - podContainers, containerEvents := c.parsePodContainers( + podContainers, containerEvents := parsePodContainers( pod, pod.Spec.Containers, pod.Status.Containers, @@ -194,7 +195,7 @@ func (c *collector) parsePods(pods []*kubelet.Pod) []workloadmeta.CollectorEvent return events } -func (c *collector) parsePodContainers( +func parsePodContainers( pod *kubelet.Pod, containerSpecs []kubelet.ContainerSpec, containerStatuses []kubelet.ContainerStatus, @@ -427,21 +428,6 @@ func extractEnvFromSpec(envSpec []kubelet.EnvVar) map[string]string { return env } -func extractGPUVendor(gpuNamePrefix kubelet.ResourceName) string { - gpuVendor := "" - switch gpuNamePrefix { - case kubelet.ResourcePrefixNvidiaMIG, kubelet.ResourceGenericNvidiaGPU: - gpuVendor = "nvidia" - case kubelet.ResourcePrefixAMDGPU: - gpuVendor = "amd" - case kubelet.ResourcePrefixIntelGPU: - gpuVendor = "intel" - default: - gpuVendor = string(gpuNamePrefix) - } - return gpuVendor -} - func extractResources(spec *kubelet.ContainerSpec) workloadmeta.ContainerResources { resources := workloadmeta.ContainerResources{} if cpuReq, found := spec.Resources.Requests[kubelet.ResourceCPU]; found { @@ -453,24 +439,14 @@ func extractResources(spec *kubelet.ContainerSpec) workloadmeta.ContainerResourc } // extract GPU resource info from the possible GPU sources - uniqueGPUVendor := make(map[string]bool) - - resourceKeys := make([]kubelet.ResourceName, 0, len(spec.Resources.Requests)) + uniqueGPUVendor := make(map[string]struct{}) for resourceName := range spec.Resources.Requests { - resourceKeys = append(resourceKeys, resourceName) - } - - for _, gpuResourceName := range kubelet.GetGPUResourceNames() { - for _, resourceKey := range resourceKeys { - if strings.HasPrefix(string(resourceKey), string(gpuResourceName)) { - if gpuReq, found := spec.Resources.Requests[resourceKey]; found { - resources.GPURequest = pointer.Ptr(uint64(gpuReq.Value())) - uniqueGPUVendor[extractGPUVendor(gpuResourceName)] = true - break - } - } + gpuName, found := gpu.ExtractSimpleGPUName(gpu.ResourceGPU(resourceName)) + if found { + uniqueGPUVendor[gpuName] = struct{}{} } } + gpuVendorList := make([]string, 0, len(uniqueGPUVendor)) for GPUVendor := range uniqueGPUVendor { gpuVendorList = append(gpuVendorList, GPUVendor) @@ -490,7 +466,7 @@ func findContainerSpec(name string, specs []kubelet.ContainerSpec) *kubelet.Cont return nil } -func (c *collector) parseExpires(expiredIDs []string) []workloadmeta.CollectorEvent { +func parseExpires(expiredIDs []string) []workloadmeta.CollectorEvent { events := make([]workloadmeta.CollectorEvent, 0, len(expiredIDs)) podTerminatedTime := time.Now() diff --git a/comp/core/workloadmeta/collectors/internal/kubelet/kubelet_test.go b/comp/core/workloadmeta/collectors/internal/kubelet/kubelet_test.go new file mode 100644 index 0000000000000..a8a1ba1bdda20 --- /dev/null +++ b/comp/core/workloadmeta/collectors/internal/kubelet/kubelet_test.go @@ -0,0 +1,175 @@ +// 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. + +//go:build kubelet && test + +package kubelet + +import ( + "testing" + + "github.com/stretchr/testify/assert" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + + "github.com/DataDog/datadog-agent/pkg/util/kubernetes" + "github.com/DataDog/datadog-agent/pkg/util/kubernetes/kubelet" + + workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" +) + +func TestPodParser(t *testing.T) { + + referencePod := []*kubelet.Pod{ + { + Metadata: kubelet.PodMetadata{ + Name: "TestPod", + UID: "uniqueIdentifier", + Namespace: "namespace", + Owners: []kubelet.PodOwner{ + { + Kind: "ReplicaSet", + Name: "deployment-hashrs", + ID: "ownerUID", + }, + }, + Annotations: map[string]string{ + "annotationKey": "annotationValue", + }, + Labels: map[string]string{ + "labelKey": "labelValue", + }, + }, + Spec: kubelet.Spec{ + PriorityClassName: "priorityClass", + Volumes: []kubelet.VolumeSpec{ + { + Name: "pvcVol", + PersistentVolumeClaim: &kubelet.PersistentVolumeClaimSpec{ + ClaimName: "pvcName", + }, + }, + }, + Containers: []kubelet.ContainerSpec{ + { + Name: "nginx-container", + Image: "nginx:1.25.2", + Resources: &kubelet.ContainerResourcesSpec{ + Requests: kubelet.ResourceList{ + "nvidia.com/gpu": resource.Quantity{ + Format: "1", + }, + }, + }, + }, + }, + }, + Status: kubelet.Status{ + Phase: string(corev1.PodRunning), + Conditions: []kubelet.Conditions{ + { + Type: string(corev1.PodReady), + Status: string(corev1.ConditionTrue), + }, + }, + PodIP: "127.0.0.1", + QOSClass: string(corev1.PodQOSGuaranteed), + Containers: []kubelet.ContainerStatus{ + { + Name: "nginx-container", + ImageID: "5dbe7e1b6b9c", + Image: "nginx:1.25.2", + ID: "docker://containerID", + Ready: true, + }, + }, + }, + }, + } + + events := parsePods(referencePod) + containerEvent, podEvent := events[0], events[1] + + expectedContainer := &workloadmeta.Container{ + EntityID: workloadmeta.EntityID{ + Kind: workloadmeta.KindContainer, + ID: "containerID", + }, + EntityMeta: workloadmeta.EntityMeta{ + Name: "nginx-container", + Labels: map[string]string{ + kubernetes.CriContainerNamespaceLabel: "namespace", + }, + }, + Image: workloadmeta.ContainerImage{ + ID: "5dbe7e1b6b9c", + Name: "nginx", + ShortName: "nginx", + Tag: "1.25.2", + RawName: "nginx:1.25.2", + }, + Runtime: "docker", + Resources: workloadmeta.ContainerResources{ + GPUVendorList: []string{"nvidia"}, + }, + Owner: &workloadmeta.EntityID{ + Kind: "kubernetes_pod", + ID: "uniqueIdentifier", + }, + Ports: []workloadmeta.ContainerPort{}, + EnvVars: map[string]string{}, + State: workloadmeta.ContainerState{ + Health: "healthy", + }, + } + expectedPod := &workloadmeta.KubernetesPod{ + EntityID: workloadmeta.EntityID{ + Kind: workloadmeta.KindKubernetesPod, + ID: "uniqueIdentifier", + }, + EntityMeta: workloadmeta.EntityMeta{ + Name: "TestPod", + Namespace: "namespace", + Annotations: map[string]string{ + "annotationKey": "annotationValue", + }, + Labels: map[string]string{ + "labelKey": "labelValue", + }, + }, + Phase: "Running", + Owners: []workloadmeta.KubernetesPodOwner{ + { + Kind: "ReplicaSet", + Name: "deployment-hashrs", + ID: "ownerUID", + }, + }, + Containers: []workloadmeta.OrchestratorContainer{ + { + Name: "nginx-container", + ID: "containerID", + Image: workloadmeta.ContainerImage{ + ID: "5dbe7e1b6b9c", + Name: "nginx", + ShortName: "nginx", + Tag: "1.25.2", + RawName: "nginx:1.25.2", + }, + }, + }, + InitContainers: []workloadmeta.OrchestratorContainer{}, + PersistentVolumeClaimNames: []string{"pvcName"}, + Ready: true, + IP: "127.0.0.1", + PriorityClass: "priorityClass", + GPUVendorList: []string{"nvidia"}, + QOSClass: "Guaranteed", + } + + assert.Equal(t, expectedPod, podEvent.Entity) + + assert.Equal(t, expectedContainer, containerEvent.Entity) +} diff --git a/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod.go b/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod.go index 1ae7d26db13f2..f776081150bb8 100644 --- a/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod.go +++ b/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod.go @@ -13,6 +13,7 @@ import ( corev1 "k8s.io/api/core/v1" workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" + "github.com/DataDog/datadog-agent/pkg/util/gpu" ) type podParser struct { @@ -62,6 +63,20 @@ func (p podParser) Parse(obj interface{}) workloadmeta.Entity { rtcName = *pod.Spec.RuntimeClassName } + var gpuVendorList []string + uniqueGPUVendor := make(map[string]struct{}) + for _, container := range pod.Spec.Containers { + for resourceName := range container.Resources.Limits { + gpuName, found := gpu.ExtractSimpleGPUName(gpu.ResourceGPU(resourceName)) + if found { + uniqueGPUVendor[gpuName] = struct{}{} + } + } + } + for gpuVendor := range uniqueGPUVendor { + gpuVendorList = append(gpuVendorList, gpuVendor) + } + return &workloadmeta.KubernetesPod{ EntityID: workloadmeta.EntityID{ Kind: workloadmeta.KindKubernetesPod, @@ -81,6 +96,7 @@ func (p podParser) Parse(obj interface{}) workloadmeta.Entity { PriorityClass: pod.Spec.PriorityClassName, QOSClass: string(pod.Status.QOSClass), RuntimeClass: rtcName, + GPUVendorList: gpuVendorList, // Containers could be generated by this collector, but // currently it's not to save on memory, since this is supposed diff --git a/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod_test.go b/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod_test.go index 2815e270e4530..a90d0a2028357 100644 --- a/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod_test.go +++ b/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod_test.go @@ -12,6 +12,7 @@ import ( "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" @@ -54,6 +55,28 @@ func TestPodParser_Parse(t *testing.T) { }, }, }, + Containers: []corev1.Container{ + { + Name: "gpuContainer1", + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + "nvidia.com/gpu": resource.Quantity{ + Format: "1", + }, + }, + }, + }, + { + Name: "gpuContainer2", + Resources: corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + "gpu.intel.com/xe": resource.Quantity{ + Format: "2", + }, + }, + }, + }, + }, }, Status: corev1.PodStatus{ Phase: corev1.PodRunning, @@ -97,6 +120,7 @@ func TestPodParser_Parse(t *testing.T) { Ready: true, IP: "127.0.0.1", PriorityClass: "priorityClass", + GPUVendorList: []string{"nvidia", "intel"}, QOSClass: "Guaranteed", } diff --git a/pkg/util/gpu/common.go b/pkg/util/gpu/common.go new file mode 100644 index 0000000000000..7d5dc6a9825b2 --- /dev/null +++ b/pkg/util/gpu/common.go @@ -0,0 +1,48 @@ +// 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 gpu provides utilities for interacting with GPU resources. +package gpu + +import "strings" + +// ResourceGPU represents a GPU resource +type ResourceGPU string + +// Resource name prefixes +const ( + gpuNvidiaGeneric ResourceGPU = "nvidia.com/gpu" + gpuAMD ResourceGPU = "amd.com/gpu" + gpuIntelXe ResourceGPU = "gpu.intel.com/xe" + gpuInteli915 ResourceGPU = "gpu.intel.com/i915" + + gpuNvidiaMigPrefix ResourceGPU = "nvidia.com/mig" +) + +// longToShortGPUName maps a GPU resource to a simplified name +var longToShortGPUName = map[ResourceGPU]string{ + gpuNvidiaGeneric: "nvidia", + gpuAMD: "amd", + gpuIntelXe: "intel", + gpuInteli915: "intel", +} + +// ExtractSimpleGPUName returns a simplified GPU name. +// If the resource is not recognized, the second return value is false. +func ExtractSimpleGPUName(gpuName ResourceGPU) (string, bool) { + val, ok := longToShortGPUName[gpuName] + if ok { + return val, true + } + + // More complex cases (eg. nvidia.com/mig-3g.20gb => nvidia) + switch { + case strings.HasPrefix(string(gpuName), string(gpuNvidiaMigPrefix)): + return "nvidia", true + } + + // Not a GPU resource (or not recognized) + return "", false +} diff --git a/pkg/util/gpu/common_test.go b/pkg/util/gpu/common_test.go new file mode 100644 index 0000000000000..f5e9fa4946c8f --- /dev/null +++ b/pkg/util/gpu/common_test.go @@ -0,0 +1,41 @@ +// 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 gpu + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestExtractSimpleGPUName(t *testing.T) { + tests := []struct { + name string + gpuName ResourceGPU + found bool + expected string + }{ + { + name: "known gpu resource", + gpuName: gpuNvidiaGeneric, + found: true, + expected: "nvidia", + }, + { + name: "unknown gpu resource", + gpuName: ResourceGPU("cpu"), + found: false, + expected: "", + }, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + actual, found := ExtractSimpleGPUName(test.gpuName) + assert.Equal(t, test.found, found) + assert.Equal(t, test.expected, actual) + }) + } +} diff --git a/releasenotes/notes/kubeapiserver-gpu-tagging-e6202bc782982e5d.yaml b/releasenotes/notes/kubeapiserver-gpu-tagging-e6202bc782982e5d.yaml new file mode 100644 index 0000000000000..a09ed5f24515e --- /dev/null +++ b/releasenotes/notes/kubeapiserver-gpu-tagging-e6202bc782982e5d.yaml @@ -0,0 +1,12 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + Include `gpu_vendor` pod tags on the Datadog Cluster Agent when + enabling datadog.clusterTagger.collectKubernetesTags. From 0db869dc3c6348148a39c96e504970ae97a08a62 Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 5 Dec 2024 13:38:46 -0500 Subject: [PATCH 010/303] AMLII-2207 - alter dogstatsd packet buffers to automatically flush when stream sockets disconnect (#31768) --- comp/dogstatsd/listeners/uds_common.go | 1 + comp/dogstatsd/packets/buffer.go | 7 +++++++ comp/dogstatsd/packets/buffer_test.go | 21 ++++++++++++++++++- ...ream-socket-race-fix-255b6e7a10f7fde0.yaml | 13 ++++++++++++ 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/stream-socket-race-fix-255b6e7a10f7fde0.yaml diff --git a/comp/dogstatsd/listeners/uds_common.go b/comp/dogstatsd/listeners/uds_common.go index 62a39421dcc12..ff165228b3bf1 100644 --- a/comp/dogstatsd/listeners/uds_common.go +++ b/comp/dogstatsd/listeners/uds_common.go @@ -204,6 +204,7 @@ func (l *UDSListener) handleConnection(conn netUnixConn, closeFunc CloseFunction l.telemetryStore.tlmUDSConnections.Inc(tlmListenerID, l.transport) defer func() { _ = closeFunc(conn) + packetsBuffer.Flush() packetsBuffer.Close() if telemetryWithFullListenerID { l.clearTelemetry(tlmListenerID) diff --git a/comp/dogstatsd/packets/buffer.go b/comp/dogstatsd/packets/buffer.go index 3a8a232f804db..f0ca9ab1d6659 100644 --- a/comp/dogstatsd/packets/buffer.go +++ b/comp/dogstatsd/packets/buffer.go @@ -70,6 +70,13 @@ func (pb *Buffer) Append(packet *Packet) { } } +// Flush offers a thread-safe method to force a flush of the appended packets +func (pb *Buffer) Flush() { + pb.m.Lock() + pb.flush() + pb.m.Unlock() +} + func (pb *Buffer) flush() { if len(pb.packets) > 0 { t1 := time.Now() diff --git a/comp/dogstatsd/packets/buffer_test.go b/comp/dogstatsd/packets/buffer_test.go index bc90d5c5f46b2..117b26d35ef86 100644 --- a/comp/dogstatsd/packets/buffer_test.go +++ b/comp/dogstatsd/packets/buffer_test.go @@ -24,7 +24,7 @@ func TestBufferTelemetry(t *testing.T) { // We need a high enough duration to avoid the buffer to flush // And cause the program to deadlock on the packetChannel duration := 10 * time.Second - packetChannel := make(chan Packets) + packetChannel := make(chan Packets, 1) buffer := NewBuffer(3, duration, packetChannel, "test_buffer", telemetryStore) defer buffer.Close() @@ -127,3 +127,22 @@ func TestBufferTelemetryFull(t *testing.T) { assert.Equal(t, float64(1), channelSizeMetrics[0].Value()) } + +func TestBufferFlush(t *testing.T) { + telemetryComponent := fxutil.Test[telemetry.Component](t, telemetryimpl.MockModule()) + telemetryStore := NewTelemetryStore(nil, telemetryComponent) + duration := 10 * time.Hour + packetChannel := make(chan Packets, 1) + buffer := NewBuffer(0, duration, packetChannel, "test_buffer", telemetryStore) + packet := &Packet{ + Contents: []byte("test"), + Buffer: []byte("test read"), + Origin: "test origin", + ListenerID: "1", + Source: 0, + } + + buffer.Append(packet) + buffer.Flush() + assert.Equal(t, 1, len(packetChannel)) +} diff --git a/releasenotes/notes/stream-socket-race-fix-255b6e7a10f7fde0.yaml b/releasenotes/notes/stream-socket-race-fix-255b6e7a10f7fde0.yaml new file mode 100644 index 0000000000000..2a0b8bf07e975 --- /dev/null +++ b/releasenotes/notes/stream-socket-race-fix-255b6e7a10f7fde0.yaml @@ -0,0 +1,13 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + Fixed race condition in stream UDS clients of Dogstatsd that + allowed for the loss of received data. + From 48cbbbf593c8e1f78f1f35447beb14f3f24cb44a Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 5 Dec 2024 18:54:17 +0000 Subject: [PATCH 011/303] Fixing logic for when to enable APM (#31805) --- pkg/config/utils/miscellaneous.go | 2 +- pkg/config/utils/miscellaneous_test.go | 46 +++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/pkg/config/utils/miscellaneous.go b/pkg/config/utils/miscellaneous.go index faf3572d318d3..a1de732654318 100644 --- a/pkg/config/utils/miscellaneous.go +++ b/pkg/config/utils/miscellaneous.go @@ -54,6 +54,6 @@ func IsCoreAgentEnabled(cfg pkgconfigmodel.Reader) bool { // Error Tracking standalone only via the apm_config.error_tracking_standalone.enabled option instead of requiring // to enable also apm_config.enabled. func IsAPMEnabled(cfg pkgconfigmodel.Reader) bool { - return (cfg.GetBool("apm_config.enabled") && IsCoreAgentEnabled(cfg)) || + return cfg.GetBool("apm_config.enabled") || cfg.GetBool("apm_config.error_tracking_standalone.enabled") } diff --git a/pkg/config/utils/miscellaneous_test.go b/pkg/config/utils/miscellaneous_test.go index 96c65f5b33b9c..59ee253bcb09f 100644 --- a/pkg/config/utils/miscellaneous_test.go +++ b/pkg/config/utils/miscellaneous_test.go @@ -6,11 +6,12 @@ package utils import ( - "github.com/stretchr/testify/assert" "testing" configmock "github.com/DataDog/datadog-agent/pkg/config/mock" "github.com/DataDog/datadog-agent/pkg/config/model" + + "github.com/stretchr/testify/assert" ) func TestIsCoreAgentEnabled(t *testing.T) { @@ -64,3 +65,46 @@ func TestIsCoreAgentEnabled(t *testing.T) { }) } } + +func TestIsAPMEnabled(t *testing.T) { + tests := []struct { + name string + apmEnabled, errorTrackingEnable, expected bool + }{ + { + name: "APM enabled and Error Tracking standalone disabled", + apmEnabled: false, + errorTrackingEnable: false, + expected: false, + }, + { + name: "APM enabled and Error Tracking standalone disabled", + apmEnabled: true, + errorTrackingEnable: false, + expected: true, + }, + { + name: "APM disabled and Error Tracking standalone enabled", + apmEnabled: false, + errorTrackingEnable: true, + expected: true, + }, + { + name: "APM enabled and Error Tracking standalone enabled", + apmEnabled: true, + errorTrackingEnable: true, + expected: true, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + mockConfig := configmock.New(t) + mockConfig.SetWithoutSource("apm_config.enabled", test.apmEnabled) + mockConfig.SetWithoutSource("apm_config.error_tracking_standalone.enabled", test.errorTrackingEnable) + assert.Equal(t, + test.expected, IsAPMEnabled(mockConfig), + "Was expecting IsAPMEnabled to return", test.expected) + }) + } +} From 435a6e33276ee040f5553bfde7e03bfa05adb13c Mon Sep 17 00:00:00 2001 From: Stuart Geipel Date: Thu, 5 Dec 2024 16:10:24 -0500 Subject: [PATCH 012/303] [ebpfless] Implement connection duration and fix IsOpen (#31763) --- .../connection/ebpfless/tcp_processor.go | 20 ++++++++++++- .../connection/ebpfless/tcp_processor_test.go | 28 +++++++++++++++++++ pkg/network/tracer/tracer_linux_test.go | 12 +++++--- 3 files changed, 55 insertions(+), 5 deletions(-) diff --git a/pkg/network/tracer/connection/ebpfless/tcp_processor.go b/pkg/network/tracer/connection/ebpfless/tcp_processor.go index b23b8bbac4bbe..500a89893eeb6 100644 --- a/pkg/network/tracer/connection/ebpfless/tcp_processor.go +++ b/pkg/network/tracer/connection/ebpfless/tcp_processor.go @@ -10,6 +10,7 @@ package ebpfless import ( "fmt" "syscall" + "time" "golang.org/x/sys/unix" @@ -63,6 +64,19 @@ func NewTCPProcessor() *TCPProcessor { //nolint:revive // TODO } } +// updateConnStatsForOpen sets the duration to a "timestamp" representing the open time +func updateConnStatsForOpen(conn *network.ConnectionStats) { + conn.IsClosed = false + conn.Duration = time.Duration(time.Now().UnixNano()) +} + +// updateConnStatsForClose writes the actual duration once the connection closed +func updateConnStatsForClose(conn *network.ConnectionStats) { + conn.IsClosed = true + nowNs := time.Now().UnixNano() + conn.Duration = time.Duration(nowNs - int64(conn.Duration)) +} + // calcNextSeq returns the seq "after" this segment, aka, what the ACK will be once this segment is received func calcNextSeq(tcp *layers.TCP, payloadLen uint16) uint32 { nextSeq := tcp.Seq + uint32(payloadLen) @@ -105,6 +119,8 @@ func (t *TCPProcessor) updateSynFlag(conn *network.ConnectionStats, st *connecti // if any SynState has progressed, move to attempted if st.tcpState == ConnStatClosed && (st.localSynState != SynStateNone || st.remoteSynState != SynStateNone) { st.tcpState = ConnStatAttempted + + updateConnStatsForOpen(conn) } // if both synStates are ack'd, move to established if st.tcpState == ConnStatAttempted && st.localSynState == SynStateAcked && st.remoteSynState == SynStateAcked { @@ -188,6 +204,7 @@ func (t *TCPProcessor) updateFinFlag(conn *network.ConnectionStats, st *connecti tcpState: ConnStatClosed, } conn.Monotonic.TCPClosed++ + updateConnStatsForClose(conn) } } @@ -200,6 +217,7 @@ func (t *TCPProcessor) updateRstFlag(conn *network.ConnectionStats, st *connecti if st.tcpState == ConnStatAttempted { reason = syscall.ECONNREFUSED } + conn.TCPFailures[uint16(reason)]++ if st.tcpState == ConnStatEstablished { conn.Monotonic.TCPClosed++ @@ -207,7 +225,7 @@ func (t *TCPProcessor) updateRstFlag(conn *network.ConnectionStats, st *connecti *st = connectionState{ tcpState: ConnStatClosed, } - conn.TCPFailures[uint16(reason)]++ + updateConnStatsForClose(conn) } // Process handles a TCP packet, calculating stats and keeping track of its state according to the diff --git a/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go b/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go index 2d7e1ba4bff33..a558f073dc4ec 100644 --- a/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go +++ b/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go @@ -747,3 +747,31 @@ func TestUnusualAckSyn(t *testing.T) { } require.Equal(t, expectedStats, f.conn.Monotonic) } + +// TestOpenCloseConn checks whether IsClosed is set correctly in ConnectionStats +func TestOpenCloseConn(t *testing.T) { + pb := newPacketBuilder(lowerSeq, higherSeq) + + f := newTcpTestFixture(t) + + // send a SYN packet to kick things off + f.runPkt(pb.incoming(0, 0, 0, SYN)) + require.False(t, f.conn.IsClosed) + + // finish up the connection handshake and close it + remainingPkts := []testCapture{ + pb.outgoing(0, 0, 1, SYN|ACK), + pb.incoming(0, 1, 1, ACK), + // active close after sending no data + pb.outgoing(0, 1, 1, FIN|ACK), + pb.incoming(0, 1, 2, FIN|ACK), + pb.outgoing(0, 2, 2, ACK), + } + f.runPkts(remainingPkts) + // should be closed now + require.True(t, f.conn.IsClosed) + + // open it up again, it should not be marked closed afterward + f.runPkt(pb.incoming(0, 0, 0, SYN)) + require.False(t, f.conn.IsClosed) +} diff --git a/pkg/network/tracer/tracer_linux_test.go b/pkg/network/tracer/tracer_linux_test.go index 519c0ef979e3b..74e00cb3588a4 100644 --- a/pkg/network/tracer/tracer_linux_test.go +++ b/pkg/network/tracer/tracer_linux_test.go @@ -2357,7 +2357,6 @@ func BenchmarkAddProcessInfo(b *testing.B) { func (s *TracerSuite) TestConnectionDuration() { t := s.T() cfg := testConfig() - skipEbpflessTodo(t, cfg) tr := setupTracer(t, cfg) srv := tracertestutil.NewTCPServer(func(c net.Conn) { @@ -2365,15 +2364,17 @@ func (s *TracerSuite) TestConnectionDuration() { for { _, err := c.Read(b[:]) if err != nil && (errors.Is(err, net.ErrClosed) || err == io.EOF) { - return + break } require.NoError(t, err) _, err = c.Write([]byte("pong")) if err != nil && (errors.Is(err, net.ErrClosed) || err == io.EOF) { - return + break } require.NoError(t, err) } + err := c.Close() + require.NoError(t, err) }) require.NoError(t, srv.Run(), "error running server") @@ -2421,7 +2422,10 @@ LOOP: require.EventuallyWithT(t, func(collect *assert.CollectT) { var found bool conn, found = findConnection(c.LocalAddr(), srv.Addr(), getConnections(t, tr)) - assert.True(collect, found, "could not find closed connection") + if !assert.True(collect, found, "could not find connection") { + return + } + assert.True(collect, conn.IsClosed, "connection should be closed") }, 3*time.Second, 100*time.Millisecond, "could not find closed connection") // after closing the client connection, the duration should be From 643c43a24e537f713d051b0f33b97dc8d53ec651 Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Thu, 5 Dec 2024 23:20:38 +0100 Subject: [PATCH 013/303] Mark TestPodParser test as flaky (#31811) --- .../collectors/util/kubernetes_resource_parsers/pod_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod_test.go b/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod_test.go index a90d0a2028357..2f5e8e0c941a0 100644 --- a/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod_test.go +++ b/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod_test.go @@ -16,9 +16,11 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" + "github.com/DataDog/datadog-agent/pkg/util/testutil/flake" ) func TestPodParser_Parse(t *testing.T) { + flake.Mark(t) filterAnnotations := []string{"ignoreAnnotation"} parser, err := NewPodParser(filterAnnotations) From e03dff2a8a79262d4bd5ed8e926ee97c9e38043c Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Thu, 5 Dec 2024 23:38:01 +0100 Subject: [PATCH 014/303] Do not print Ansible logs (#31814) --- test/new-e2e/tests/installer/unix/all_packages_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/new-e2e/tests/installer/unix/all_packages_test.go b/test/new-e2e/tests/installer/unix/all_packages_test.go index f213a0fda8394..82f3d6bf44c12 100644 --- a/test/new-e2e/tests/installer/unix/all_packages_test.go +++ b/test/new-e2e/tests/installer/unix/all_packages_test.go @@ -217,7 +217,7 @@ func (s *packageBaseSuite) RunInstallScript(params ...string) { playbookPath := s.writeAnsiblePlaybook(env, params...) // Run the playbook - s.Env().RemoteHost.MustExecute(fmt.Sprintf("%sansible-playbook -vvv %s", ansiblePrefix, playbookPath)) + s.Env().RemoteHost.MustExecute(fmt.Sprintf("%sansible-playbook %s > /dev/null 2> /dev/null", ansiblePrefix, playbookPath)) // touch install files for compatibility s.Env().RemoteHost.MustExecute("touch /tmp/datadog-installer-stdout.log") From a1a230f012e306c2e0e9f49af3f888e1582a92fe Mon Sep 17 00:00:00 2001 From: Stuart Geipel Date: Thu, 5 Dec 2024 17:44:46 -0500 Subject: [PATCH 015/303] [ebpfless] Fix TestTCPRemoveEntries (#31816) --- pkg/network/tracer/tracer_linux_test.go | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/pkg/network/tracer/tracer_linux_test.go b/pkg/network/tracer/tracer_linux_test.go index 74e00cb3588a4..5897839fb2c41 100644 --- a/pkg/network/tracer/tracer_linux_test.go +++ b/pkg/network/tracer/tracer_linux_test.go @@ -108,13 +108,19 @@ func (s *TracerSuite) TestTCPRemoveEntries() { require.NoError(t, err) defer c2.Close() - conn, ok := findConnection(c2.LocalAddr(), c2.RemoteAddr(), getConnections(t, tr)) - require.True(t, ok) - assert.Equal(t, clientMessageSize, int(conn.Monotonic.SentBytes)) - assert.Equal(t, 0, int(conn.Monotonic.RecvBytes)) - assert.Equal(t, 0, int(conn.Monotonic.Retransmits)) - assert.Equal(t, os.Getpid(), int(conn.Pid)) - assert.Equal(t, addrPort(server.Address()), int(conn.DPort)) + assert.EventuallyWithT(t, func(ct *assert.CollectT) { + conn, ok := findConnection(c2.LocalAddr(), c2.RemoteAddr(), getConnections(t, tr)) + if !assert.True(ct, ok) { + return + } + assert.Equal(ct, clientMessageSize, int(conn.Monotonic.SentBytes)) + assert.Equal(ct, 0, int(conn.Monotonic.RecvBytes)) + assert.Equal(ct, 0, int(conn.Monotonic.Retransmits)) + if !tr.config.EnableEbpfless { + assert.Equal(ct, os.Getpid(), int(conn.Pid)) + } + assert.Equal(ct, addrPort(server.Address()), int(conn.DPort)) + }, 3*time.Second, 100*time.Millisecond) // Make sure the first connection got cleaned up assert.Eventually(t, func() bool { From 60bad3775521ad4b6311808c014ad3eb03011dc3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 07:21:03 +0000 Subject: [PATCH 016/303] CWS: sync BTFHub constants (#31820) Co-authored-by: --- .../probe/constantfetch/btfhub/constants.json | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pkg/security/probe/constantfetch/btfhub/constants.json b/pkg/security/probe/constantfetch/btfhub/constants.json index 00d66492a9624..c8e007fa9ae5c 100644 --- a/pkg/security/probe/constantfetch/btfhub/constants.json +++ b/pkg/security/probe/constantfetch/btfhub/constants.json @@ -18337,6 +18337,13 @@ "uname_release": "4.14.35-2047.541.4.1.el7uek.aarch64", "cindex": 89 }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.542.2.el7uek.aarch64", + "cindex": 89 + }, { "distrib": "ol", "version": "7", @@ -20948,6 +20955,13 @@ "uname_release": "4.1.12-124.91.3.el7uek.x86_64", "cindex": 94 }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.92.3.el7uek.x86_64", + "cindex": 94 + }, { "distrib": "ol", "version": "7", @@ -23874,6 +23888,13 @@ "uname_release": "4.14.35-2047.543.2.el7uek.x86_64", "cindex": 96 }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.543.3.el7uek.x86_64", + "cindex": 96 + }, { "distrib": "ol", "version": "7", From e46622ae56f719d6ad8ef4b87ec1f4b3416d9864 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Fri, 6 Dec 2024 08:39:11 +0100 Subject: [PATCH 017/303] Replace --incremental-build by their --rebuild equivalent (#31573) Co-authored-by: clarkb7 --- omnibus/config/software/datadog-agent.rb | 8 ++++---- omnibus/config/software/datadog-dogstatsd.rb | 2 +- omnibus/config/software/datadog-iot-agent.rb | 4 ++-- omnibus/config/software/installer.rb | 4 ++-- tasks/cws_instrumentation.py | 4 ++-- tasks/process_agent.py | 4 ++-- tasks/security_agent.py | 4 ++-- tasks/system_probe.py | 8 ++++---- 8 files changed, 19 insertions(+), 19 deletions(-) diff --git a/omnibus/config/software/datadog-agent.rb b/omnibus/config/software/datadog-agent.rb index eaa141eab49e3..ecfe7cb0d4c7c 100644 --- a/omnibus/config/software/datadog-agent.rb +++ b/omnibus/config/software/datadog-agent.rb @@ -89,8 +89,8 @@ command "inv -e rtloader.clean" command "inv -e rtloader.make --install-prefix \"#{windows_safe_path(python_2_embedded)}\" --cmake-options \"-G \\\"Unix Makefiles\\\" \\\"-DPython3_EXECUTABLE=#{windows_safe_path(python_3_embedded)}\\python.exe\"\"", :env => env command "mv rtloader/bin/*.dll #{install_dir}/bin/agent/" - command "inv -e agent.build --exclude-rtloader --major-version #{major_version_arg} --rebuild --no-development --install-path=#{install_dir} --embedded-path=#{install_dir}/embedded #{do_windows_sysprobe} --flavor #{flavor_arg}", env: env - command "inv -e systray.build --major-version #{major_version_arg} --rebuild", env: env + command "inv -e agent.build --exclude-rtloader --major-version #{major_version_arg} --no-development --install-path=#{install_dir} --embedded-path=#{install_dir}/embedded #{do_windows_sysprobe} --flavor #{flavor_arg}", env: env + command "inv -e systray.build --major-version #{major_version_arg}", env: env else command "inv -e rtloader.clean" command "inv -e rtloader.make --install-prefix \"#{install_dir}/embedded\" --cmake-options '-DCMAKE_CXX_FLAGS:=\"-D_GLIBCXX_USE_CXX11_ABI=0\" -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_FIND_FRAMEWORK:STRING=NEVER -DPython3_EXECUTABLE=#{install_dir}/embedded/bin/python3'", :env => env @@ -100,10 +100,10 @@ if linux_target? include_sds = "--include-sds" # we only support SDS on Linux targets for now end - command "inv -e agent.build --exclude-rtloader #{include_sds} --major-version #{major_version_arg} --rebuild --no-development --install-path=#{install_dir} --embedded-path=#{install_dir}/embedded --flavor #{flavor_arg}", env: env + command "inv -e agent.build --exclude-rtloader #{include_sds} --major-version #{major_version_arg} --no-development --install-path=#{install_dir} --embedded-path=#{install_dir}/embedded --flavor #{flavor_arg}", env: env if heroku_target? - command "inv -e agent.build --exclude-rtloader --major-version #{major_version_arg} --rebuild --no-development --install-path=#{install_dir} --embedded-path=#{install_dir}/embedded --flavor #{flavor_arg} --agent-bin=bin/agent/core-agent", env: env + command "inv -e agent.build --exclude-rtloader --major-version #{major_version_arg} --no-development --install-path=#{install_dir} --embedded-path=#{install_dir}/embedded --flavor #{flavor_arg} --agent-bin=bin/agent/core-agent", env: env end end diff --git a/omnibus/config/software/datadog-dogstatsd.rb b/omnibus/config/software/datadog-dogstatsd.rb index f212a799078ad..f22a68ec7ec13 100644 --- a/omnibus/config/software/datadog-dogstatsd.rb +++ b/omnibus/config/software/datadog-dogstatsd.rb @@ -33,7 +33,7 @@ end # we assume the go deps are already installed before running omnibus - command "invoke dogstatsd.build --rebuild --major-version #{major_version_arg}", env: env + command "invoke dogstatsd.build --major-version #{major_version_arg}", env: env mkdir "#{install_dir}/etc/datadog-dogstatsd" unless windows_target? diff --git a/omnibus/config/software/datadog-iot-agent.rb b/omnibus/config/software/datadog-iot-agent.rb index afabbd0835188..b528cb485c49b 100644 --- a/omnibus/config/software/datadog-iot-agent.rb +++ b/omnibus/config/software/datadog-iot-agent.rb @@ -39,7 +39,7 @@ end if linux_target? - command "invoke agent.build --flavor iot --rebuild --no-development --major-version #{major_version_arg}", env: env + command "invoke agent.build --flavor iot --no-development --major-version #{major_version_arg}", env: env mkdir "#{install_dir}/bin" mkdir "#{install_dir}/run/" @@ -61,7 +61,7 @@ mkdir conf_dir mkdir "#{install_dir}/bin/agent" - command "inv agent.build --flavor iot --rebuild --no-development --major-version #{major_version_arg}", env: env + command "inv agent.build --flavor iot --no-development --major-version #{major_version_arg}", env: env # move around bin and config files move 'bin/agent/dist/datadog.yaml', "#{conf_dir}/datadog.yaml.example" diff --git a/omnibus/config/software/installer.rb b/omnibus/config/software/installer.rb index 99708622641fb..38b612d2510eb 100644 --- a/omnibus/config/software/installer.rb +++ b/omnibus/config/software/installer.rb @@ -32,11 +32,11 @@ env = with_embedded_path(env) if linux_target? - command "invoke installer.build --rebuild --no-cgo --run-path=/opt/datadog-packages/run --install-path=#{install_dir}", env: env + command "invoke installer.build --no-cgo --run-path=/opt/datadog-packages/run --install-path=#{install_dir}", env: env mkdir "#{install_dir}/bin" copy 'bin/installer', "#{install_dir}/bin/" elsif windows_target? - command "inv -e installer.build --rebuild --install-path=#{install_dir}", env: env + command "inv -e installer.build --install-path=#{install_dir}", env: env copy 'bin/installer/installer.exe', "#{install_dir}/datadog-installer.exe" end diff --git a/tasks/cws_instrumentation.py b/tasks/cws_instrumentation.py index c2cb17b40530c..748c6b64784c3 100644 --- a/tasks/cws_instrumentation.py +++ b/tasks/cws_instrumentation.py @@ -28,7 +28,7 @@ def build( ctx, build_tags=None, race=False, - incremental_build=True, + rebuild=False, major_version='7', go_mod="readonly", static=False, @@ -59,7 +59,7 @@ def build( build_tags.append("osusergo") race_opt = "-race" if race else "" - build_type = "" if incremental_build else "-a" + build_type = "-a" if rebuild else "" go_build_tags = " ".join(build_tags) agent_bin = BIN_PATH diff --git a/tasks/process_agent.py b/tasks/process_agent.py index 50d716e1a1831..42beed0d770f3 100644 --- a/tasks/process_agent.py +++ b/tasks/process_agent.py @@ -24,7 +24,7 @@ def build( build_exclude=None, install_path=None, flavor=AgentFlavor.base.name, - incremental_build=False, + rebuild=False, major_version='7', go_mod="readonly", ): @@ -80,7 +80,7 @@ def build( args = { "go_mod": go_mod, "race_opt": "-race" if race else "", - "build_type": "" if incremental_build else "-a", + "build_type": "-a" if rebuild else "", "go_build_tags": " ".join(build_tags), "agent_bin": BIN_PATH, "gcflags": gcflags, diff --git a/tasks/security_agent.py b/tasks/security_agent.py index 725c0d6d0a583..fe1def0e39b8c 100644 --- a/tasks/security_agent.py +++ b/tasks/security_agent.py @@ -52,7 +52,7 @@ def build( ctx, build_tags, race=False, - incremental_build=True, + rebuild=False, install_path=None, major_version='7', go_mod="readonly", @@ -100,7 +100,7 @@ def build( args = { "go_mod": go_mod, "race_opt": "-race" if race else "", - "build_type": "" if incremental_build else "-a", + "build_type": "-a" if rebuild else "", "go_build_tags": " ".join(build_tags), "agent_bin": BIN_PATH, "gcflags": gcflags, diff --git a/tasks/system_probe.py b/tasks/system_probe.py index c14c0541f8eaf..7478f31c415fc 100644 --- a/tasks/system_probe.py +++ b/tasks/system_probe.py @@ -676,7 +676,7 @@ def get_libpcap_cgo_flags(ctx, install_path: str = None): def build( ctx, race=False, - incremental_build=True, + rebuild=False, major_version='7', go_mod="readonly", arch: str = CURRENT_ARCH, @@ -711,7 +711,7 @@ def build( bundle_ebpf=bundle_ebpf, go_mod=go_mod, race=race, - incremental_build=incremental_build, + rebuild=rebuild, strip_binary=strip_binary, arch=arch, static=static, @@ -733,7 +733,7 @@ def clean( def build_sysprobe_binary( ctx, race=False, - incremental_build=True, + rebuild=False, major_version='7', go_mod="readonly", arch: str = CURRENT_ARCH, @@ -784,7 +784,7 @@ def build_sysprobe_binary( args = { "go_mod": go_mod, "race_opt": " -race" if race else "", - "build_type": "" if incremental_build else " -a", + "build_type": " -a" if rebuild else "", "go_build_tags": " ".join(build_tags), "agent_bin": binary, "gcflags": gcflags, From 0cd172ffc9fbbf95f06def58bdba079df529e20e Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Fri, 6 Dec 2024 10:03:23 +0100 Subject: [PATCH 018/303] Delete test/kitchen folder (#31525) --- .github/CODEOWNERS | 17 +- .gitlab-ci.yml | 46 +- .gitlab/.ci-linters.yml | 10 - .gitlab/JOBOWNERS | 7 - .gitlab/e2e_install_packages/common.yml | 2 +- .../e2e_deploy.yml} | 16 +- .gitlab/functional_test/include.yml | 2 +- .../functional_test_cleanup.yml | 17 - .gitlab/kernel_matrix_testing/common.yml | 10 +- .gitlab/kitchen_cleanup/cleanup.yml | 28 - .gitlab/kitchen_cleanup/include.yml | 6 - .gitlab/kitchen_cleanup/kitchen_cleanup.yml | 16 - .gitlab/kitchen_testing/common.yml | 161 -- .gitlab/kitchen_testing/include.yml | 7 - .gitlab/kitchen_testing/windows.yml | 25 - .gitlab/maintenance_jobs/include.yml | 2 - .gitlab/maintenance_jobs/kitchen.yml | 47 - .gitlab/source_test/tooling_unit_tests.yml | 15 - .gitlab/source_test/windows.yml | 2 +- .gitlab/trigger_release/trigger_release.yml | 2 +- omnibus/.gitignore | 3 - tasks/kernel_matrix_testing/ci.py | 2 +- tasks/kmt.py | 4 +- tasks/libs/pipeline/data.py | 14 +- tasks/libs/pipeline/tools.py | 4 +- tasks/libs/types/types.py | 2 - tasks/linter.py | 4 +- tasks/system_probe.py | 94 +- tasks/unit_tests/junit_tests.py | 10 - tasks/unit_tests/libs/data_tests.py | 8 - .../bedroom-rspec-win2016-azure-x86_64.xml | 42 +- tasks/unit_tests/testdata/variables.yml | 9 +- tasks/winbuildscripts/secagent.ps1 | 2 +- tasks/winbuildscripts/sysprobe.bat | 4 +- tasks/winbuildscripts/sysprobe.ps1 | 4 +- test/files/default/.gitkeep | 1 + test/kitchen/.gitignore | 26 - test/kitchen/Berksfile | 27 - test/kitchen/Gemfile.local | 11 - test/kitchen/README.md | 283 ---- test/kitchen/azure-creds.erb | 4 - test/kitchen/docs/README.md | 236 --- test/kitchen/docs/win-all-subservices.md | 27 - test/kitchen/docs/win-installopts.md | 15 - test/kitchen/docs/win-no-subservices.md | 27 - test/kitchen/drivers/azure-driver.yml | 200 --- test/kitchen/drivers/ec2-driver.yml | 215 --- test/kitchen/drivers/hyperv-driver.yml | 89 -- test/kitchen/drivers/vagrant-driver.yml | 54 - test/kitchen/platforms.json | 175 --- .../site-cookbooks/dd-agent-5/README.md | 6 - .../dd-agent-5/attributes/default.rb | 26 - .../site-cookbooks/dd-agent-5/metadata.rb | 9 - .../dd-agent-5/recipes/_install_linux.rb | 68 - .../recipes/_install_windows_base.rb | 73 - .../dd-agent-5/recipes/default.rb | 15 - .../dd-agent-5/templates/datadog.conf.erb | 3 - .../dd-agent-disable-system-repos/.gitignore | 15 - .../dd-agent-disable-system-repos/Berksfile | 3 - .../dd-agent-disable-system-repos/Gemfile | 4 - .../dd-agent-disable-system-repos/README.md | 3 - .../dd-agent-disable-system-repos/chefignore | 96 -- .../dd-agent-disable-system-repos/metadata.rb | 5 - .../recipes/default.rb | 20 - .../dd-agent-import-conf/.gitignore | 15 - .../dd-agent-import-conf/Berksfile | 3 - .../dd-agent-import-conf/Gemfile | 4 - .../dd-agent-import-conf/README.md | 4 - .../attributes/default.rb | 13 - .../dd-agent-import-conf/chefignore | 96 -- .../dd-agent-import-conf/metadata.rb | 9 - .../recipes/_datadog-agent-6.rb | 75 - .../dd-agent-import-conf/recipes/default.rb | 26 - .../dd-agent-install/.gitignore | 15 - .../site-cookbooks/dd-agent-install/Berksfile | 3 - .../site-cookbooks/dd-agent-install/Gemfile | 4 - .../site-cookbooks/dd-agent-install/README.md | 6 - .../dd-agent-install/attributes/default.rb | 83 - .../dd-agent-install/chefignore | 96 -- .../dd-agent-install/metadata.rb | 9 - .../recipes/_agent6_windows_config.rb | 120 -- .../recipes/_damage_windows_install.rb | 11 - .../recipes/_install_windows.rb | 47 - .../recipes/_install_windows_base.rb | 101 -- .../recipes/_repair_windows_install.rb | 12 - .../recipes/_stop_windows_agent.rb | 23 - .../dd-agent-install/recipes/default.rb | 15 - .../templates/default/activemq.yaml.erb | 60 - .../templates/default/apache.yaml.erb | 19 - .../templates/default/cacti.yaml.erb | 22 - .../templates/default/cassandra.yaml.erb | 152 -- .../templates/default/consul.yaml.erb | 24 - .../templates/default/couch.yaml.erb | 12 - .../templates/default/couchbase.yaml.erb | 9 - .../templates/default/datadog.conf.erb | 240 --- .../templates/default/datadog.yaml.erb | 116 -- .../templates/default/directory.yaml.erb | 15 - .../templates/default/disk.yaml.erb | 3 - .../templates/default/dns_check.yaml.erb | 13 - .../templates/default/docker.yaml.erb | 13 - .../templates/default/docker_daemon.yaml.erb | 3 - .../templates/default/elastic.yaml.erb | 48 - .../templates/default/etcd.yaml.erb | 20 - .../templates/default/fluentd.yaml.erb | 4 - .../templates/default/go-metro.yaml.erb | 4 - .../templates/default/go_expvar.yaml.erb | 3 - .../templates/default/gunicorn.yaml.erb | 15 - .../templates/default/haproxy.yaml.erb | 17 - .../templates/default/hdfs.yaml.erb | 18 - .../templates/default/http_check.yaml.erb | 5 - .../templates/default/iis.yaml.erb | 41 - .../templates/default/integration.yaml.erb | 3 - .../templates/default/jenkins.yaml.erb | 9 - .../templates/default/jmx.yaml.erb | 5 - .../templates/default/kafka.yaml.erb | 553 ------- .../templates/default/kafka_consumer.yaml.erb | 23 - .../templates/default/kubernetes.yaml.erb | 4 - .../templates/default/kyototycoon.yaml.erb | 19 - .../templates/default/lighttpd.yaml.erb | 15 - .../templates/default/mcache.yaml.erb | 18 - .../templates/default/mesos.yaml.erb | 8 - .../templates/default/mongo.yaml.erb | 35 - .../templates/default/mysql.yaml.erb | 38 - .../templates/default/network.yaml.erb | 13 - .../templates/default/nginx.yaml.erb | 23 - .../templates/default/ntp.yaml.erb | 5 - .../templates/default/pgbouncer.yaml.erb | 6 - .../templates/default/php_fpm.yaml.erb | 4 - .../templates/default/postfix.yaml.erb | 21 - .../templates/default/postgres.yaml.erb | 21 - .../templates/default/process.yaml.erb | 3 - .../templates/default/rabbitmq.yaml.erb | 54 - .../templates/default/redisdb.yaml.erb | 38 - .../templates/default/riak.yaml.erb | 9 - .../templates/default/snmp.yaml.erb | 3 - .../templates/default/solr.yaml.erb | 71 - .../templates/default/sqlserver.yaml.erb | 3 - .../templates/default/ssh_check.yaml.erb | 26 - .../templates/default/supervisord.yaml.erb | 6 - .../templates/default/system_core.yaml.erb | 9 - .../templates/default/system_swap.yaml.erb | 9 - .../templates/default/tcp_check.yaml.erb | 5 - .../templates/default/tokumx.yaml.erb | 34 - .../templates/default/tomcat.yaml.erb | 78 - .../templates/default/varnish.yaml.erb | 24 - .../default/win32_event_log.yaml.erb | 3 - .../default/windows_service.yaml.erb | 6 - .../templates/default/wmi_check.yaml.erb | 75 - .../templates/default/zk.yaml.erb | 22 - .../dd-agent-reinstall/.gitignore | 15 - .../dd-agent-reinstall/Berksfile | 3 - .../site-cookbooks/dd-agent-reinstall/Gemfile | 4 - .../dd-agent-reinstall/README.md | 3 - .../dd-agent-reinstall/attributes/default.rb | 8 - .../dd-agent-reinstall/chefignore | 96 -- .../dd-agent-reinstall/metadata.rb | 5 - .../dd-agent-reinstall/recipes/default.rb | 57 - .../dd-agent-rhel-workaround/.gitignore | 15 - .../dd-agent-rhel-workaround/Berksfile | 3 - .../dd-agent-rhel-workaround/Gemfile | 4 - .../dd-agent-rhel-workaround/README.md | 3 - .../dd-agent-rhel-workaround/chefignore | 96 -- .../dd-agent-rhel-workaround/metadata.rb | 5 - .../recipes/default.rb | 22 - .../dd-agent-sles-workaround/.gitignore | 15 - .../dd-agent-sles-workaround/Berksfile | 3 - .../dd-agent-sles-workaround/Gemfile | 4 - .../dd-agent-sles-workaround/README.md | 4 - .../dd-agent-sles-workaround/chefignore | 96 -- .../dd-agent-sles-workaround/metadata.rb | 5 - .../recipes/default.rb | 29 - .../dd-agent-system-files-check/.gitignore | 15 - .../dd-agent-system-files-check/Berksfile | 3 - .../dd-agent-system-files-check/Gemfile | 4 - .../dd-agent-system-files-check/README.md | 3 - .../dd-agent-system-files-check/chefignore | 96 -- .../dd-agent-system-files-check/metadata.rb | 5 - .../recipes/list-files-before-install.rb | 27 - .../dd-agent-upgrade/.gitignore | 15 - .../site-cookbooks/dd-agent-upgrade/Berksfile | 3 - .../site-cookbooks/dd-agent-upgrade/Gemfile | 4 - .../site-cookbooks/dd-agent-upgrade/README.md | 8 - .../dd-agent-upgrade/Vagrantfile | 25 - .../dd-agent-upgrade/attributes/default.rb | 70 - .../dd-agent-upgrade/chefignore | 96 -- .../dd-agent-upgrade/metadata.rb | 9 - .../dd-agent-upgrade/recipes/default.rb | 188 --- .../dd-system-probe-check/.gitignore | 7 - .../dd-system-probe-check/Berksfile | 3 - .../dd-system-probe-check/Gemfile | 4 - .../dd-system-probe-check/README.md | 3 - .../attributes/default.rb | 0 .../dd-system-probe-check/chefignore | 84 - .../files/default/.gitkeep | 0 .../files/windows/decompress_merge_module.ps1 | 61 - .../files/windows/iisstart.htm | 32 - .../files/windows/iisstart.png | Bin 98757 -> 0 bytes .../dd-system-probe-check/metadata.rb | 5 - .../dd-system-probe-check/recipes/default.rb | 27 - .../dd-system-probe-check/recipes/windows.rb | 96 -- test/kitchen/tasks/README.md | 6 - test/kitchen/tasks/__init__.py | 11 - test/kitchen/tasks/clean.sh | 72 - test/kitchen/tasks/kitchen.py | 253 --- .../kitchen/tasks/kitchen_rspec_xml_update.sh | 7 - test/kitchen/tasks/kitchen_setup.sh | 6 - test/kitchen/tasks/run-test-kitchen.ps1 | 35 - test/kitchen/tasks/run-test-kitchen.sh | 200 --- test/kitchen/tasks/show-strays.sh | 67 - test/kitchen/tasks/unit-tests/__init__.py | 0 .../tasks/unit-tests/gotest-failed-runlog | 10 - .../unit-tests/gotest-infra-failed-runlog | 10 - .../tasks/unit-tests/infra-failed-runlog | 10 - .../tasks/unit-tests/kitchen_unit_tests.py | 35 - .../tasks/unit-tests/test-failed-runlog | 10 - test/kitchen/test-definitions/chef-test.yml | 28 - .../test-definitions/platforms-common.yml | 30 - .../security-agent-stress.yml | 13 - .../test-definitions/security-agent-test.yml | 13 - .../test-definitions/upgrade5-test.yml | 40 - .../test-definitions/upgrade6-test.yml | 41 - .../test-definitions/upgrade7-test.yml | 47 - .../test-definitions/windows-cwsinstall.yml | 30 - .../test-definitions/windows-install-test.yml | 24 - .../test-definitions/windows-npm-test.md | 54 - .../test-definitions/windows-npm-test.yml | 322 ---- .../test-definitions/windows-npmdriver.yml | 29 - .../windows-secagent-test.yml | 10 - .../windows-sysprobe-test.yml | 10 - .../integration/chef/rspec_datadog/Gemfile | 4 - .../chef/rspec_datadog/chef_spec.rb | 7 - .../chef/rspec_datadog/spec_helper.rb | 1 - .../integration/common/rspec_datadog/Gemfile | 4 - .../rspec_datadog/kernel_out_spec_helper.rb | 83 - .../common/rspec_datadog/spec_helper.rb | 1383 ----------------- .../rspec_datadog/windows_npm_spec_helper.rb | 103 -- .../upgrade-agent5/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/upgrade-agent5_spec.rb | 1 - .../upgrade-agent6/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/upgrade-agent6_spec.rb | 1 - .../upgrade-agent7/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/upgrade-agent7_spec.rb | 1 - .../integration/upgrade/rspec_datadog/Gemfile | 4 - .../upgrade/rspec_datadog/spec_helper.rb | 1 - .../upgrade/rspec_datadog/upgrade_spec.rb | 7 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-agent-with-cws-option_spec.rb | 81 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../win-all-subservices/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/win-all-subservices_spec.rb | 12 - .../win-alt-dir/rspec_datadog/Gemfile | 4 - .../win-alt-dir/rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/win-alt-dir_spec.rb | 126 -- .../win-install-fail/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/win-install-fail_spec.rb | 42 - .../win-installopts/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/win-installopts_spec.rb | 64 - .../win-no-subservices/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/win-no-subservices_spec.rb | 48 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-beta-upgrade_spec.rb | 10 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-no-npm-option_spec.rb | 10 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-reinstall-option_spec.rb | 9 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-upgrade-no-npm_spec.rb | 9 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-upgrade-to-npm-no-csflag_spec.rb | 10 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-upgrade-to-npm_spec.rb | 10 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-with-addlocal-all_spec.rb | 9 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-with-addlocal-npm_spec.rb | 9 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-with-cs-option_spec.rb | 9 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-with-npm-option_spec.rb | 9 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../win-repair/rspec_datadog/Gemfile | 4 - .../win-repair/rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/win-repair_spec.rb | 6 - .../win-secagent-test/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/win-secagent-test_spec.rb | 43 - .../win-sysprobe-test/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/sysprobe_spec_helper.rb | 52 - .../rspec_datadog/win-sysprobe-test_spec.rb | 39 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-upgrade-rollback_spec.rb | 8 - .../win-user/rspec_datadog/Gemfile | 4 - .../win-user/rspec_datadog/spec_helper.rb | 1 - .../win-user/rspec_datadog/win-user_spec.rb | 142 -- test/kitchen/uservars-example.json | 29 - test/new-e2e/tests/npm/ec2_1host_test.go | 4 +- .../tests/sysprobe-functional/.gitignore | 7 + .../tests/sysprobe-functional/apmtags_test.go | 9 +- .../sysprobe-functional/sysprobe_test.go | 4 +- 329 files changed, 95 insertions(+), 10605 deletions(-) rename .gitlab/{kitchen_deploy/kitchen_deploy.yml => e2e_testing_deploy/e2e_deploy.yml} (97%) delete mode 100644 .gitlab/functional_test_cleanup/functional_test_cleanup.yml delete mode 100644 .gitlab/kitchen_cleanup/cleanup.yml delete mode 100644 .gitlab/kitchen_cleanup/include.yml delete mode 100644 .gitlab/kitchen_cleanup/kitchen_cleanup.yml delete mode 100644 .gitlab/kitchen_testing/common.yml delete mode 100644 .gitlab/kitchen_testing/include.yml delete mode 100644 .gitlab/kitchen_testing/windows.yml delete mode 100644 .gitlab/maintenance_jobs/kitchen.yml create mode 100644 test/files/default/.gitkeep delete mode 100644 test/kitchen/.gitignore delete mode 100644 test/kitchen/Berksfile delete mode 100644 test/kitchen/Gemfile.local delete mode 100644 test/kitchen/README.md delete mode 100644 test/kitchen/azure-creds.erb delete mode 100644 test/kitchen/docs/README.md delete mode 100644 test/kitchen/docs/win-all-subservices.md delete mode 100644 test/kitchen/docs/win-installopts.md delete mode 100644 test/kitchen/docs/win-no-subservices.md delete mode 100644 test/kitchen/drivers/azure-driver.yml delete mode 100644 test/kitchen/drivers/ec2-driver.yml delete mode 100644 test/kitchen/drivers/hyperv-driver.yml delete mode 100644 test/kitchen/drivers/vagrant-driver.yml delete mode 100644 test/kitchen/platforms.json delete mode 100644 test/kitchen/site-cookbooks/dd-agent-5/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-5/attributes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-5/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-5/recipes/_install_linux.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-5/recipes/_install_windows_base.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-5/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-5/templates/datadog.conf.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-disable-system-repos/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-disable-system-repos/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-disable-system-repos/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-disable-system-repos/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-disable-system-repos/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-disable-system-repos/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-disable-system-repos/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/attributes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/recipes/_datadog-agent-6.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/attributes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/recipes/_agent6_windows_config.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/recipes/_damage_windows_install.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/recipes/_install_windows.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/recipes/_install_windows_base.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/recipes/_repair_windows_install.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/recipes/_stop_windows_agent.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/activemq.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/apache.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/cacti.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/cassandra.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/consul.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/couch.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/couchbase.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/datadog.conf.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/datadog.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/directory.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/disk.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/dns_check.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/docker.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/docker_daemon.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/elastic.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/etcd.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/fluentd.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/go-metro.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/go_expvar.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/gunicorn.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/haproxy.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/hdfs.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/http_check.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/iis.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/integration.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/jenkins.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/jmx.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/kafka.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/kafka_consumer.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/kubernetes.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/kyototycoon.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/lighttpd.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/mcache.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/mesos.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/mongo.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/mysql.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/network.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/nginx.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/ntp.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/pgbouncer.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/php_fpm.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/postfix.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/postgres.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/process.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/rabbitmq.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/redisdb.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/riak.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/snmp.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/solr.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/sqlserver.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/ssh_check.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/supervisord.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/system_core.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/system_swap.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/tcp_check.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/tokumx.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/tomcat.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/varnish.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/win32_event_log.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/windows_service.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/wmi_check.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/zk.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-reinstall/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-reinstall/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-reinstall/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-reinstall/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-reinstall/attributes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-reinstall/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-reinstall/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-reinstall/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-rhel-workaround/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-rhel-workaround/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-rhel-workaround/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-rhel-workaround/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-rhel-workaround/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-rhel-workaround/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-rhel-workaround/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-sles-workaround/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-sles-workaround/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-sles-workaround/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-sles-workaround/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-sles-workaround/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-sles-workaround/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-sles-workaround/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-system-files-check/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-system-files-check/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-system-files-check/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-system-files-check/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-system-files-check/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-system-files-check/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-system-files-check/recipes/list-files-before-install.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/Vagrantfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/attributes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/attributes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/files/default/.gitkeep delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/decompress_merge_module.ps1 delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/iisstart.htm delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/iisstart.png delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/recipes/windows.rb delete mode 100644 test/kitchen/tasks/README.md delete mode 100644 test/kitchen/tasks/__init__.py delete mode 100755 test/kitchen/tasks/clean.sh delete mode 100644 test/kitchen/tasks/kitchen.py delete mode 100755 test/kitchen/tasks/kitchen_rspec_xml_update.sh delete mode 100755 test/kitchen/tasks/kitchen_setup.sh delete mode 100644 test/kitchen/tasks/run-test-kitchen.ps1 delete mode 100755 test/kitchen/tasks/run-test-kitchen.sh delete mode 100755 test/kitchen/tasks/show-strays.sh delete mode 100644 test/kitchen/tasks/unit-tests/__init__.py delete mode 100644 test/kitchen/tasks/unit-tests/gotest-failed-runlog delete mode 100644 test/kitchen/tasks/unit-tests/gotest-infra-failed-runlog delete mode 100644 test/kitchen/tasks/unit-tests/infra-failed-runlog delete mode 100644 test/kitchen/tasks/unit-tests/kitchen_unit_tests.py delete mode 100644 test/kitchen/tasks/unit-tests/test-failed-runlog delete mode 100644 test/kitchen/test-definitions/chef-test.yml delete mode 100644 test/kitchen/test-definitions/platforms-common.yml delete mode 100644 test/kitchen/test-definitions/security-agent-stress.yml delete mode 100644 test/kitchen/test-definitions/security-agent-test.yml delete mode 100644 test/kitchen/test-definitions/upgrade5-test.yml delete mode 100644 test/kitchen/test-definitions/upgrade6-test.yml delete mode 100644 test/kitchen/test-definitions/upgrade7-test.yml delete mode 100644 test/kitchen/test-definitions/windows-cwsinstall.yml delete mode 100644 test/kitchen/test-definitions/windows-install-test.yml delete mode 100644 test/kitchen/test-definitions/windows-npm-test.md delete mode 100644 test/kitchen/test-definitions/windows-npm-test.yml delete mode 100644 test/kitchen/test-definitions/windows-npmdriver.yml delete mode 100644 test/kitchen/test-definitions/windows-secagent-test.yml delete mode 100644 test/kitchen/test-definitions/windows-sysprobe-test.yml delete mode 100644 test/kitchen/test/integration/chef/rspec_datadog/Gemfile delete mode 100644 test/kitchen/test/integration/chef/rspec_datadog/chef_spec.rb delete mode 120000 test/kitchen/test/integration/chef/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/common/rspec_datadog/Gemfile delete mode 100644 test/kitchen/test/integration/common/rspec_datadog/kernel_out_spec_helper.rb delete mode 100644 test/kitchen/test/integration/common/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/common/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/upgrade-agent5/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/upgrade-agent5/rspec_datadog/spec_helper.rb delete mode 120000 test/kitchen/test/integration/upgrade-agent5/rspec_datadog/upgrade-agent5_spec.rb delete mode 100644 test/kitchen/test/integration/upgrade-agent6/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/upgrade-agent6/rspec_datadog/spec_helper.rb delete mode 120000 test/kitchen/test/integration/upgrade-agent6/rspec_datadog/upgrade-agent6_spec.rb delete mode 100644 test/kitchen/test/integration/upgrade-agent7/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/upgrade-agent7/rspec_datadog/spec_helper.rb delete mode 120000 test/kitchen/test/integration/upgrade-agent7/rspec_datadog/upgrade-agent7_spec.rb delete mode 100644 test/kitchen/test/integration/upgrade/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/upgrade/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/upgrade/rspec_datadog/upgrade_spec.rb delete mode 100644 test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/win-agent-with-cws-option_spec.rb delete mode 120000 test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-all-subservices/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-all-subservices/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-all-subservices/rspec_datadog/win-all-subservices_spec.rb delete mode 100644 test/kitchen/test/integration/win-alt-dir/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-alt-dir/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-alt-dir/rspec_datadog/win-alt-dir_spec.rb delete mode 100644 test/kitchen/test/integration/win-install-fail/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-install-fail/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-install-fail/rspec_datadog/win-install-fail_spec.rb delete mode 100644 test/kitchen/test/integration/win-installopts/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-installopts/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-installopts/rspec_datadog/win-installopts_spec.rb delete mode 100644 test/kitchen/test/integration/win-no-subservices/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-no-subservices/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-no-subservices/rspec_datadog/win-no-subservices_spec.rb delete mode 100644 test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/win-npm-beta-upgrade_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/win-npm-no-npm-option_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/win-npm-reinstall-option_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/win-npm-upgrade-no-npm_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/win-npm-upgrade-to-npm-no-csflag_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/win-npm-upgrade-to-npm_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/win-npm-with-addlocal-all_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/win-npm-with-addlocal-npm_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/win-npm-with-cs-option_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/win-npm-with-npm-option_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-repair/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-repair/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-repair/rspec_datadog/win-repair_spec.rb delete mode 100644 test/kitchen/test/integration/win-secagent-test/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-secagent-test/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-secagent-test/rspec_datadog/win-secagent-test_spec.rb delete mode 100644 test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/sysprobe_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/win-sysprobe-test_spec.rb delete mode 120000 test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/win-upgrade-rollback_spec.rb delete mode 100644 test/kitchen/test/integration/win-user/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-user/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-user/rspec_datadog/win-user_spec.rb delete mode 100644 test/kitchen/uservars-example.json create mode 100644 test/new-e2e/tests/sysprobe-functional/.gitignore diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c3d8aed610550..6c22b2c34e4b8 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -75,6 +75,7 @@ /.gitlab/deploy*/* @DataDog/agent-delivery /.gitlab/deps_fetch/* @DataDog/agent-devx-infra /.gitlab/e2e/* @DataDog/agent-devx-infra @DataDog/agent-devx-loops +/.gitlab/e2e_testing_deploy/* @DataDog/agent-devx-loops @DataDog/agent-devx-infra /.gitlab/e2e_install_packages/* @DataDog/agent-delivery /.gitlab/e2e_pre_test/* @DataDog/agent-devx-infra @DataDog/agent-devx-loops /.gitlab/kernel_matrix_testing/* @DataDog/agent-devx-infra @DataDog/ebpf-platform @@ -90,7 +91,6 @@ /.gitlab/binary_build/include.yml @DataDog/agent-devx-infra /.gitlab/binary_build/linux.yml @DataDog/agent-devx-infra @DataDog/agent-delivery /.gitlab/functional_test/include.yml @DataDog/agent-devx-infra -/.gitlab/functional_test_cleanup/functional_test_cleanup.yml @DataDog/agent-devx-infra @DataDog/agent-security /.gitlab/install_script_testing/install_script_testing.yml @DataDog/agent-delivery /.gitlab/integration_test/dogstatsd.yml @DataDog/agent-devx-infra @DataDog/agent-metrics-logs /.gitlab/integration_test/include.yml @DataDog/agent-devx-infra @@ -131,8 +131,6 @@ /.gitlab/deps_build/ @DataDog/ebpf-platform @DataDog/agent-delivery @DataDog/windows-agent -/.gitlab/kitchen_* @DataDog/container-ecosystems @DataDog/agent-delivery -/.gitlab/kitchen_testing/windows.yml @DataDog/container-ecosystems @DataDog/agent-delivery @DataDog/windows-agent /.gitlab/e2e_install_packages/windows.yml @DataDog/container-ecosystems @DataDog/agent-delivery @DataDog/windows-agent /.gitlab/common/ @DataDog/agent-devx-infra @@ -144,7 +142,6 @@ /.gitlab/binary_build/fakeintake.yml @DataDog/agent-e2e-testing @DataDog/agent-devx-loops /.gitlab/functional_test/serverless.yml @DataDog/serverless @Datadog/serverless-aws @DataDog/agent-devx-infra -/.gitlab/functional_test_cleanup @DataDog/agent-security @DataDog/windows-kernel-integrations @DataDog/agent-devx-infra /.gitlab/functional_test/oracle.yml @DataDog/agent-devx-infra @DataDog/database-monitoring /.gitlab/powershell_script_deploy @DataDog/agent-delivery @DataDog/windows-agent @@ -590,18 +587,6 @@ /test/integration/docker/otel_agent_build_tests.py @DataDog/opentelemetry /test/integration/serverless @DataDog/serverless @Datadog/serverless-aws /test/integration/serverless_perf @DataDog/serverless @Datadog/serverless-aws -/test/kitchen/ @DataDog/agent-devx-loops -/test/kitchen/test-definitions/ @DataDog/container-ecosystems @DataDog/agent-delivery -/test/kitchen/test/integration/ @DataDog/container-ecosystems @DataDog/agent-delivery -/test/kitchen/site-cookbooks/dd-system-probe-check/ @DataDog/windows-kernel-integrations -/test/kitchen/test/integration/win-all-subservices/ @DataDog/windows-agent -/test/kitchen/test/integration/win-alt-dir/ @DataDog/windows-agent -/test/kitchen/test/integration/win-install-fail/ @DataDog/windows-agent -/test/kitchen/test/integration/win-installopts/ @DataDog/windows-agent -/test/kitchen/test/integration/win-no-subservices/ @DataDog/windows-agent -/test/kitchen/test/integration/win-sysprobe-test/ @DataDog/windows-kernel-integrations -/test/kitchen/test/integration/win-repair/ @DataDog/windows-agent -/test/kitchen/test/integration/win-user/ @DataDog/windows-agent /test/fakeintake/ @DataDog/agent-e2e-testing @DataDog/agent-devx-loops /test/fakeintake/aggregator/ndmflowAggregator.go @DataDog/ndm-integrations /test/fakeintake/aggregator/ndmflowAggregator_test.go @DataDog/ndm-integrations diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index eff912e0c25e9..ef09047f42cce 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,15 +24,12 @@ include: - .gitlab/e2e/e2e.yml - .gitlab/e2e_install_packages/include.yml - .gitlab/e2e_pre_test/e2e_pre_test.yml + - .gitlab/e2e_testing_deploy/e2e_deploy.yml - .gitlab/functional_test/include.yml - - .gitlab/functional_test_cleanup/functional_test_cleanup.yml - .gitlab/install_script_testing/install_script_testing.yml - .gitlab/integration_test/include.yml - .gitlab/internal_image_deploy/internal_image_deploy.yml - .gitlab/internal_kubernetes_deploy/include.yml - - .gitlab/kitchen_cleanup/include.yml - - .gitlab/kitchen_deploy/kitchen_deploy.yml - - .gitlab/kitchen_testing/include.yml - .gitlab/lint/include.yml - .gitlab/maintenance_jobs/include.yml - .gitlab/notify/notify.yml @@ -79,8 +76,6 @@ stages: - package_build - packaging - pkg_metrics - - kitchen_deploy - - kitchen_testing - container_build - container_scan - check_deploy @@ -93,6 +88,7 @@ stages: - trigger_release - choco_and_install_script_deploy - internal_image_deploy + - e2e_deploy - install_script_testing - e2e_pre_test - e2e_init @@ -100,9 +96,7 @@ stages: - e2e_cleanup - e2e_k8s - e2e_install_packages - - kitchen_cleanup - functional_test - - functional_test_cleanup - junit_upload - internal_kubernetes_deploy - post_rc_build @@ -124,7 +118,7 @@ variables: # avoids accidentally overwriting files when downloading artifacts from # both RPM and SUSE rpm jobs. OMNIBUS_PACKAGE_DIR_SUSE: $CI_PROJECT_DIR/omnibus/suse/pkg - DD_AGENT_TESTING_DIR: $CI_PROJECT_DIR/test/kitchen + DD_AGENT_TESTING_DIR: $CI_PROJECT_DIR/test/new-e2e/tests STATIC_BINARIES_DIR: bin/static DOGSTATSD_BINARIES_DIR: bin/dogstatsd AGENT_BINARIES_DIR: bin/agent @@ -263,8 +257,6 @@ variables: E2E_AZURE: e2e-azure # agent-devx-loops E2E_GCP: e2e-gcp # agent-devx-loops GITLAB_TOKEN: gitlab-token # agent-devx-infra - KITCHEN_AWS: kitchen-aws # agent-devx-loops - KITCHEN_AZURE: kitchen-azure # agent-devx-loops INSTALL_SCRIPT_API_KEY_ORG2: install-script-api-key-org-2 # agent-devx-infra MACOS_GITHUB_APP_1: macos-github-app-one # agent-devx-infra MACOS_GITHUB_APP_2: macos-github-app-two # agent-devx-infra @@ -658,26 +650,12 @@ workflow: when: manual allow_failure: true -.on_kitchen_tests: +.on_e2e_tests: - <<: *if_installer_tests -.on_kitchen_tests_always: - - <<: *if_installer_tests - when: always - .on_all_install_script_tests: - <<: *if_installer_tests -# Default kitchen tests are also run on dev branches -# In that case, the target OS versions is a subset of the -# available versions, stored in DEFAULT_KITCHEN_OSVERS -.on_default_kitchen_tests: - - !reference [.except_mergequeue] - - <<: *if_installer_tests - - <<: *if_auto_e2e_tests - variables: - KITCHEN_OSVERS: $DEFAULT_KITCHEN_OSVERS - .on_default_new_e2e_tests: - !reference [.except_mergequeue] - <<: *if_disable_e2e_tests @@ -687,15 +665,6 @@ workflow: variables: E2E_OSVERS: $E2E_BRANCH_OSVERS -.on_default_kitchen_tests_always: - - !reference [.except_mergequeue] - - <<: *if_installer_tests - when: always - - <<: *if_auto_e2e_tests - when: always - variables: - KITCHEN_OSVERS: $DEFAULT_KITCHEN_OSVERS - .on_main_or_testing_cleanup: - <<: *if_main_branch - <<: *if_testing_cleanup @@ -1186,13 +1155,6 @@ workflow: - tasks/**/* compare_to: main # TODO: use a variable, when this is supported https://gitlab.com/gitlab-org/gitlab/-/issues/369916 -.on_kitchen_invoke_tasks_changes: - - <<: *if_main_branch - - changes: - paths: - - test/kitchen/tasks/**/* - compare_to: main # TODO: use a variable, when this is supported https://gitlab.com/gitlab-org/gitlab/-/issues/369916 - .on_powershell_module_or_e2e_changes_or_manual: - !reference [.on_e2e_main_release_or_rc] - changes: diff --git a/.gitlab/.ci-linters.yml b/.gitlab/.ci-linters.yml index a87c049cfb341..af5acfa72b74a 100644 --- a/.gitlab/.ci-linters.yml +++ b/.gitlab/.ci-linters.yml @@ -15,7 +15,6 @@ needs-rules: - build_dogstatsd_static-binary_x64 - build_processed_btfhub_archive - check_already_deployed_version_7 - - cleanup_kitchen_functional_test - compute_gitlab_ci_config - deploy_containers-cws-instrumentation-final-versioned - deploy_containers-cws-instrumentation-latest @@ -23,7 +22,6 @@ needs-rules: - deploy_containers-cws-instrumentation-rc-versioned - dogstatsd_x64_size_test - go_mod_tidy_check - - kitchen_cleanup_azure-a7 - lint_flavor_dogstatsd_linux-x64 - lint_flavor_heroku_linux-x64 - lint_flavor_iot_linux-x64 @@ -33,9 +31,6 @@ needs-rules: - lint_linux-x64 - lint_macos_gitlab_amd64 - new-e2e-eks-cleanup-on-failure - - periodic_kitchen_cleanup_azure - - periodic_kitchen_cleanup_ec2 - - periodic_kitchen_cleanup_s3 - publish_winget_7_x64 - revert_latest_7 - security_go_generate_check @@ -81,8 +76,6 @@ job-owners: - installer-install-scripts - integration_tests_otel - invoke_unit_tests - - kitchen_cleanup_azure-a7 - - kitchen_invoke_unit_tests - new-e2e-cspm - new-e2e-otel - new-e2e-package-signing-debian-a7-x86_64 @@ -90,9 +83,6 @@ job-owners: - new-e2e-unit-tests - ot_agent_deb-arm64-a7 - ot_agent_deb-x64-a7 - - periodic_kitchen_cleanup_azure - - periodic_kitchen_cleanup_ec2 - - periodic_kitchen_cleanup_s3 - publish_choco_7_x64 - publish_fakeintake - publish_fakeintake_latest diff --git a/.gitlab/JOBOWNERS b/.gitlab/JOBOWNERS index bbb7d693c5ea3..9cf4e21fc84de 100644 --- a/.gitlab/JOBOWNERS +++ b/.gitlab/JOBOWNERS @@ -74,9 +74,6 @@ deploy_rpm_testing* @DataDog/agent-delivery deploy_suse_rpm_testing* @DataDog/agent-delivery deploy_windows_testing* @DataDog/agent-delivery -# Kitchen tests -kitchen_windows* @DataDog/windows-agent - # Image build docker_build* @DataDog/agent-delivery @@ -138,10 +135,6 @@ agent_integration_tests @DataDog/container-integrations docker_integration_tests @DataDog/container-integrations # Functional test -kitchen_*_system_probe_windows* @DataDog/windows-kernel-integrations -kitchen_*_security_agent* @DataDog/agent-security -kitchen_*_process_agent* @DataDog/processes -cleanup_kitchen_functional_test @DataDog/windows-kernel-integrations @DataDog/agent-security serverless_cold_start_performance-deb_x64 @DataDog/serverless oracle* @DataDog/database-monitoring diff --git a/.gitlab/e2e_install_packages/common.yml b/.gitlab/e2e_install_packages/common.yml index 35b2b0b1f4619..8985150b3ff14 100644 --- a/.gitlab/e2e_install_packages/common.yml +++ b/.gitlab/e2e_install_packages/common.yml @@ -1,5 +1,5 @@ .new-e2e_agent_a7: - rules: !reference [.on_kitchen_tests] #TODO: Change when migration is complete to another name without 'kitchen' + rules: !reference [.on_e2e_tests] variables: AGENT_MAJOR_VERSION: 7 diff --git a/.gitlab/kitchen_deploy/kitchen_deploy.yml b/.gitlab/e2e_testing_deploy/e2e_deploy.yml similarity index 97% rename from .gitlab/kitchen_deploy/kitchen_deploy.yml rename to .gitlab/e2e_testing_deploy/e2e_deploy.yml index d9518f946af29..45be38a825a5d 100644 --- a/.gitlab/kitchen_deploy/kitchen_deploy.yml +++ b/.gitlab/e2e_testing_deploy/e2e_deploy.yml @@ -1,6 +1,6 @@ --- -# kitchen_deploy stage -# Contains jobs which deploy Agent package to testing repsoitories that are used in kitchen tests. +# e2e_deploy stage +# Contains jobs which deploy Agent package to testing repsoitories that are used in e2e tests. .setup_rpm_signing_key: &setup_rpm_signing_key - printf -- "$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $RPM_GPG_KEY)" | gpg --import --batch @@ -33,7 +33,7 @@ - popd .deploy_deb_testing-a7: - stage: kitchen_deploy + stage: e2e_deploy image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES tags: ["arch:amd64"] variables: @@ -86,7 +86,7 @@ deploy_deb_testing-a7_arm64: - echo "$APT_SIGNING_KEY_PASSPHRASE" | deb-s3 upload -c "pipeline-$DD_PIPELINE_ID-arm64" -m 7 -b $DEB_TESTING_S3_BUCKET -a arm64 --sign=$DEB_GPG_KEY_ID --gpg_options="--passphrase-fd 0 --batch --digest-algo SHA512" --preserve_versions --visibility public $OMNIBUS_PACKAGE_DIR/datadog-signing-keys_${DD_PIPELINE_ID}.deb .deploy_rpm_testing-a7: - stage: kitchen_deploy + stage: e2e_deploy image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES tags: ["arch:amd64"] variables: @@ -132,7 +132,7 @@ deploy_suse_rpm_testing_x64-a7: - !reference [.except_no_tests_no_deploy] - !reference [.except_mergequeue] - when: on_success - stage: kitchen_deploy + stage: e2e_deploy image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES tags: ["arch:amd64"] needs: @@ -154,10 +154,10 @@ deploy_suse_rpm_testing_x64-a7: deploy_suse_rpm_testing_arm64-a7: rules: - - !reference [.on_kitchen_tests] + - !reference [.on_e2e_tests] - !reference [.on_installer_or_e2e_changes] - !reference [.manual] - stage: kitchen_deploy + stage: e2e_deploy image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES tags: ["arch:amd64"] needs: ["installer_suse_rpm-arm64", "agent_suse-arm64-a7", "lint_linux-arm64"] @@ -175,7 +175,7 @@ deploy_windows_testing-a7: - !reference [.except_no_tests_no_deploy] - !reference [.except_mergequeue] - when: on_success - stage: kitchen_deploy + stage: e2e_deploy image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES tags: ["arch:amd64"] needs: diff --git a/.gitlab/functional_test/include.yml b/.gitlab/functional_test/include.yml index aab2d1c1ace48..501b2d3132db1 100644 --- a/.gitlab/functional_test/include.yml +++ b/.gitlab/functional_test/include.yml @@ -1,6 +1,6 @@ --- # functional_test stage -# Contains jobs which run kitchen tests on the security-agent and on system-probe +# Contains jobs which run e2e tests on the security-agent and on system-probe include: - .gitlab/functional_test/serverless.yml diff --git a/.gitlab/functional_test_cleanup/functional_test_cleanup.yml b/.gitlab/functional_test_cleanup/functional_test_cleanup.yml deleted file mode 100644 index 51d6ab7ec22ea..0000000000000 --- a/.gitlab/functional_test_cleanup/functional_test_cleanup.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -# functional_test_cleanup stage -# Contains a job which cleans up kitchen resources created for functional tests. - -# FIXME: our current Gitlab version doesn't support importing a file more than once -# For now, the workaround is to include "common" files once in the top-level .gitlab-ci.yml file -# See: https://gitlab.com/gitlab-org/gitlab/-/issues/28987 -# include: -# - .gitlab/kitchen_common/cleanup.yml - -cleanup_kitchen_functional_test: - extends: .kitchen_cleanup_azure_common - rules: - !reference [ .on_system_probe_or_e2e_changes_or_manual ] - stage: functional_test_cleanup - variables: - DD_PIPELINE_ID: $CI_PIPELINE_ID-fnct diff --git a/.gitlab/kernel_matrix_testing/common.yml b/.gitlab/kernel_matrix_testing/common.yml index f2c12afee1db4..032950ad4b929 100644 --- a/.gitlab/kernel_matrix_testing/common.yml +++ b/.gitlab/kernel_matrix_testing/common.yml @@ -1,3 +1,11 @@ +# KMT: EC2 Locations +.kmt_ec2_location_us_east_1: + variables: + KITCHEN_EC2_REGION: us-east-1 + KITCHEN_EC2_SUBNET: subnet-05d7c6b1b5cfea811 + KITCHEN_EC2_SG_IDS: sg-019917348cb0eb7e7 + + # --- Common scripts .shared_filters_and_queries: - FILTER_TEAM="Name=tag:team,Values=ebpf-platform" @@ -122,7 +130,7 @@ # -- Environment setup .kmt_setup_env: extends: - - .kitchen_ec2_location_us_east_1 + - .kmt_ec2_location_us_east_1 stage: kernel_matrix_testing_prepare image: registry.ddbuild.io/ci/test-infra-definitions/runner$TEST_INFRA_DEFINITIONS_BUILDIMAGES_SUFFIX:$TEST_INFRA_DEFINITIONS_BUILDIMAGES needs: ["go_deps", "go_tools_deps"] diff --git a/.gitlab/kitchen_cleanup/cleanup.yml b/.gitlab/kitchen_cleanup/cleanup.yml deleted file mode 100644 index 6f562223e183d..0000000000000 --- a/.gitlab/kitchen_cleanup/cleanup.yml +++ /dev/null @@ -1,28 +0,0 @@ ---- -.kitchen_cleanup_s3_common: - allow_failure: true - stage: kitchen_cleanup - image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES - tags: ["arch:amd64"] - script: - - aws s3 rm s3://$DEB_TESTING_S3_BUCKET/dists/pipeline-$DD_PIPELINE_ID --recursive - - aws s3 rm s3://$RPM_TESTING_S3_BUCKET/testing/pipeline-$DD_PIPELINE_ID --recursive - - aws s3 rm s3://$RPM_TESTING_S3_BUCKET/testing/suse/pipeline-$DD_PIPELINE_ID --recursive - - export WINDOWS_TESTING_S3_BUCKET=$WINDOWS_TESTING_S3_BUCKET_A7 - - aws s3 rm s3://$WIN_S3_BUCKET/$WINDOWS_TESTING_S3_BUCKET --recursive - - cd $OMNIBUS_PACKAGE_DIR - # Remove all deb packages for the pipeline in the pool - - for deb in $(ls *amd64.deb); do aws s3 rm s3://$DEB_TESTING_S3_BUCKET/pool/d/da/$deb --recursive; done - # Remove the datadog-signing-keys package for the pipeline in the pool - - aws s3 rm s3://$DEB_TESTING_S3_BUCKET/pool/d/da/datadog-signing-keys_${DD_PIPELINE_ID}.deb - -.kitchen_cleanup_azure_common: - allow_failure: true - stage: kitchen_cleanup - image: registry.ddbuild.io/ci/datadog-agent-buildimages/dd-agent-testing$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES - tags: ["arch:amd64"] - dependencies: [] - before_script: - script: - - cd $DD_AGENT_TESTING_DIR - - tasks/clean.sh diff --git a/.gitlab/kitchen_cleanup/include.yml b/.gitlab/kitchen_cleanup/include.yml deleted file mode 100644 index f0a86b5fcf296..0000000000000 --- a/.gitlab/kitchen_cleanup/include.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -# kitchen_cleanup stage -# Include file for jobs which clean up kitchen resources created for Agent kitchen tests. -include: - - .gitlab/kitchen_cleanup/cleanup.yml - - .gitlab/kitchen_cleanup/kitchen_cleanup.yml \ No newline at end of file diff --git a/.gitlab/kitchen_cleanup/kitchen_cleanup.yml b/.gitlab/kitchen_cleanup/kitchen_cleanup.yml deleted file mode 100644 index ff3634ad24d94..0000000000000 --- a/.gitlab/kitchen_cleanup/kitchen_cleanup.yml +++ /dev/null @@ -1,16 +0,0 @@ ---- -# kitchen_cleanup stage -# Contains jobs which clean up kitchen resources created for Agent kitchen tests. - -# FIXME: our current Gitlab version doesn't support importing a file more than once -# For now, the workaround is to include "common" files once in the top-level .gitlab-ci.yml file -# See: https://gitlab.com/gitlab-org/gitlab/-/issues/28987 -# include: -# - .gitlab/kitchen_common/cleanup.yml - -kitchen_cleanup_azure-a7: - extends: .kitchen_cleanup_azure_common - rules: - !reference [.on_default_kitchen_tests_always] - variables: - DD_PIPELINE_ID: $CI_PIPELINE_ID-a7 diff --git a/.gitlab/kitchen_testing/common.yml b/.gitlab/kitchen_testing/common.yml deleted file mode 100644 index e99f4b9d42f00..0000000000000 --- a/.gitlab/kitchen_testing/common.yml +++ /dev/null @@ -1,161 +0,0 @@ ---- -.kitchen_common: - stage: kitchen_testing - image: registry.ddbuild.io/ci/datadog-agent-buildimages/dd-agent-testing$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES - tags: ["arch:amd64"] - artifacts: - expire_in: 2 weeks - when: always - paths: - - $CI_PROJECT_DIR/kitchen_logs - retry: 1 - variables: - KUBERNETES_MEMORY_REQUEST: "6Gi" - KUBERNETES_MEMORY_LIMIT: "12Gi" - -.kitchen_common_with_junit: - extends: - - .kitchen_common - after_script: - - echo "--tags arch:${KITCHEN_ARCH} --tags os:${KITCHEN_PLATFORM} upload_option.os_version_from_name" > $CI_PROJECT_DIR/test/kitchen/tags.txt - - echo "CI_JOB_URL=${CI_JOB_URL}" > $CI_PROJECT_DIR/test/kitchen/job_env.txt - - echo "CI_JOB_NAME=${CI_JOB_NAME}" >> $CI_PROJECT_DIR/test/kitchen/job_env.txt - - kitchen_files=$(find $CI_PROJECT_DIR -name "kitchen-rspec-*.xml" -exec basename {} \;) - - find $CI_PROJECT_DIR -name "kitchen-rspec-*.xml" -exec $CI_PROJECT_DIR/test/kitchen/tasks/kitchen_rspec_xml_update.sh {} "${CI_JOB_NAME}" \; - - tar -czvf junit-${CI_JOB_NAME}.tgz -C $CI_PROJECT_DIR/test/kitchen/ ./job_env.txt ./tags.txt $kitchen_files - - $CI_PROJECT_DIR/tools/ci/junit_upload.sh - - artifacts: - expire_in: 2 weeks - when: always - paths: - - $CI_PROJECT_DIR/kitchen_logs - - "**/junit-${CI_JOB_NAME}.tgz" - -# Kitchen: providers -# --------------- - -# Azure -# --------------- -.kitchen_azure: - variables: - KITCHEN_PROVIDER: azure - -.kitchen_azure_x64: - variables: - KITCHEN_ARCH: x86_64 - extends: - - .kitchen_azure - -# EC2 -# --------------- -.kitchen_ec2: - variables: - KITCHEN_PROVIDER: ec2 - KITCHEN_EC2_IAM_PROFILE_NAME: ci-datadog-agent-e2e-runner - -.kitchen_ec2_x64: - variables: - KITCHEN_ARCH: x86_64 - extends: - - .kitchen_ec2 - -.kitchen_ec2_spot_instances: - extends: .kitchen_ec2 - variables: - KITCHEN_EC2_SPOT_PRICE: on-demand - -.kitchen_ec2_arm64: - variables: - KITCHEN_ARCH: arm64 - KITCHEN_EC2_INSTANCE_TYPE: "t4g.xlarge" - CHEF_VERSION: 14.15.6 - extends: - - .kitchen_ec2 - -# Kitchen: agents -# --------------- - -.kitchen_agent_a7: - extends: .kitchen_common_with_junit - rules: - !reference [.on_kitchen_tests] - variables: - DD_PIPELINE_ID: $CI_PIPELINE_ID-a7 - - -# Kitchen: tests -# -------------- - -.kitchen_test_chef: - script: - - tasks/run-test-kitchen.sh chef-test 7 - -.kitchen_test_upgrade5: - script: - - tasks/run-test-kitchen.sh upgrade5-test 7 - -.kitchen_test_upgrade7: - script: - - export LAST_STABLE_VERSION=$(cd ../.. && invoke release.get-release-json-value "last_stable::7") - - tasks/run-test-kitchen.sh upgrade7-test 7 - -# Kitchen: Agent flavor -# ------------------------------- - -.kitchen_datadog_agent_flavor: - variables: - AGENT_FLAVOR: "datadog-agent" - -# Kitchen: Azure locations -# ------------------------------- - -.kitchen_azure_location_north_central_us: - variables: - AZURE_LOCATION: "North Central US" - -.kitchen_azure_location_west_central_us: - variables: - AZURE_LOCATION: "West Central US" - -.kitchen_azure_location_central_us: - variables: - AZURE_LOCATION: "Central US" - -.kitchen_azure_location_south_central_us: - variables: - AZURE_LOCATION: "South Central US" - - -# Kitchen: EC2 locations -# ------------------------------- - -.kitchen_ec2_location_us_east_1: - variables: - KITCHEN_EC2_REGION: us-east-1 - KITCHEN_EC2_SUBNET: subnet-05d7c6b1b5cfea811 - KITCHEN_EC2_SG_IDS: sg-019917348cb0eb7e7 - -# Kitchen: Test types (test suite * agent flavor + location in each cloud provider) -# ------------------------------- - -.kitchen_test_chef_agent: - extends: - - .kitchen_test_chef - - .kitchen_datadog_agent_flavor - - .kitchen_azure_location_north_central_us - - .kitchen_ec2_location_us_east_1 - -.kitchen_test_upgrade5_agent: - extends: - - .kitchen_test_upgrade5 - - .kitchen_datadog_agent_flavor - - .kitchen_azure_location_central_us - - .kitchen_ec2_location_us_east_1 - -.kitchen_test_upgrade7_agent: - extends: - - .kitchen_test_upgrade7 - - .kitchen_datadog_agent_flavor - - .kitchen_azure_location_south_central_us - - .kitchen_ec2_location_us_east_1 diff --git a/.gitlab/kitchen_testing/include.yml b/.gitlab/kitchen_testing/include.yml deleted file mode 100644 index 06eb7ed1f40e0..0000000000000 --- a/.gitlab/kitchen_testing/include.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -# kitchen_testing stage -# Contains jobs which run kitchen tests on the Agent packages. - -include: - - .gitlab/kitchen_testing/common.yml - - .gitlab/kitchen_testing/windows.yml diff --git a/.gitlab/kitchen_testing/windows.yml b/.gitlab/kitchen_testing/windows.yml deleted file mode 100644 index 54a31a5e77b95..0000000000000 --- a/.gitlab/kitchen_testing/windows.yml +++ /dev/null @@ -1,25 +0,0 @@ ---- -# FIXME: our current Gitlab version doesn't support importing a file more than once -# For now, the workaround is to include "common" files once in the top-level .gitlab-ci.yml file -# See: https://gitlab.com/gitlab-org/gitlab/-/issues/28987 -# include: -# - .gitlab/kitchen_testing/testing.yml - -# Kitchen: OSes -# ------------- - -.kitchen_os_windows: - extends: - - .kitchen_azure_x64 - variables: - KITCHEN_PLATFORM: "windows" - KITCHEN_OSVERS: "win2016,win2019,win2019cn,win2022" - DEFAULT_KITCHEN_OSVERS: "win2022" - before_script: - - export WINDOWS_TESTING_S3_BUCKET=$WINDOWS_TESTING_S3_BUCKET_A7 - - cd $DD_AGENT_TESTING_DIR - - tasks/kitchen_setup.sh - # Windows kitchen tests are slower and more fragile (lots of WinRM::WinRMAuthorizationError and/or execution expired errors) - # Give them one more chance before failing. - # TODO: understand why they fail more often than Linux jobs on network errors. - retry: 2 diff --git a/.gitlab/maintenance_jobs/include.yml b/.gitlab/maintenance_jobs/include.yml index c8c7ddf8d2634..860d91ab830aa 100644 --- a/.gitlab/maintenance_jobs/include.yml +++ b/.gitlab/maintenance_jobs/include.yml @@ -1,8 +1,6 @@ --- # maintenance_jobs stage # Contains utility jobs to manipulate Docker repositories (Dockerhub & GCR) -# as well as jobs which periodically clean up kitchen resources. include: - .gitlab/maintenance_jobs/docker.yml - - .gitlab/maintenance_jobs/kitchen.yml diff --git a/.gitlab/maintenance_jobs/kitchen.yml b/.gitlab/maintenance_jobs/kitchen.yml deleted file mode 100644 index 3eea73295c63c..0000000000000 --- a/.gitlab/maintenance_jobs/kitchen.yml +++ /dev/null @@ -1,47 +0,0 @@ ---- -# Once a day, before the nightly build, cleans up the artifacts used during kitchen tests which might have been left over -# This can happen when a kitchen test fails and is never retried, since that pipeline's cleanup job won't run -periodic_kitchen_cleanup_s3: - stage: maintenance_jobs - image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES - tags: ["arch:amd64"] - rules: !reference [.on_testing_cleanup] - script: - - MAX_AGE_HOURS=72 BUCKET_NAME=$DEB_TESTING_S3_BUCKET BUCKET_PREFIX=pool python3 /deploy_scripts/cleanup_s3.py - - MAX_AGE_HOURS=72 BUCKET_NAME=$DEB_TESTING_S3_BUCKET BUCKET_PREFIX=dists python3 /deploy_scripts/cleanup_s3.py - - MAX_AGE_HOURS=72 BUCKET_NAME=$RPM_TESTING_S3_BUCKET BUCKET_PREFIX=testing/ python3 /deploy_scripts/cleanup_s3.py - - MAX_AGE_HOURS=72 BUCKET_NAME=$RPM_TESTING_S3_BUCKET BUCKET_PREFIX=suse/testing/ python3 /deploy_scripts/cleanup_s3.py - - MAX_AGE_HOURS=72 BUCKET_NAME=$WIN_S3_BUCKET BUCKET_PREFIX=pipelines/A6/ python3 /deploy_scripts/cleanup_s3.py - - MAX_AGE_HOURS=72 BUCKET_NAME=$WIN_S3_BUCKET BUCKET_PREFIX=pipelines/A7/ python3 /deploy_scripts/cleanup_s3.py - -# Kills any VMs that might have been left over by kitchen -# The script only deletes VMs that have been there for >= 4 hours, which is more than the time limit -# for Gitlab jobs (2 hours), so this should never remove a live kitchen test. -periodic_kitchen_cleanup_azure: - stage: maintenance_jobs - image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES - tags: ["arch:amd64"] - rules: !reference [.on_main_or_testing_cleanup] - # Note: We're not sure if the cleanup script is safe if run multiple times concurrently, so we limit - # the job to be run one at a time. - resource_group: azure_cleanup - script: - - ARM_SUBSCRIPTION_ID=`$CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE subscription_id` || exit $?; export ARM_SUBSCRIPTION_ID - - ARM_CLIENT_ID=`$CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE client_id` || exit $?; export ARM_CLIENT_ID - - ARM_CLIENT_SECRET=`$CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE token` || exit $?; export ARM_CLIENT_SECRET - - ARM_TENANT_ID=`$CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE tenant_id` || exit $?; export ARM_TENANT_ID - # Remove kitchen resources for all existing test suite prefixes - - RESOURCE_GROUP_PREFIX=kitchen-chef python3 /deploy_scripts/cleanup_azure.py - - RESOURCE_GROUP_PREFIX=kitchen-win python3 /deploy_scripts/cleanup_azure.py - - RESOURCE_GROUP_PREFIX=kitchen-security-agent python3 /deploy_scripts/cleanup_azure.py - -periodic_kitchen_cleanup_ec2: - stage: maintenance_jobs - image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES - tags: ["arch:amd64"] - rules: !reference [.on_main_or_testing_cleanup] - script: - # Only run aws ec2 terminate-instances if $ZOMBIES is not empty, otherwise the command fails - # https://docs.aws.amazon.com/cli/latest/reference/ec2/terminate-instances.html#options - - export AWS_DEFAULT_REGION=us-east-1 - - python3 /deploy_scripts/cleanup_ec2.py diff --git a/.gitlab/source_test/tooling_unit_tests.yml b/.gitlab/source_test/tooling_unit_tests.yml index 41f20d3aeb884..547f742b8353e 100644 --- a/.gitlab/source_test/tooling_unit_tests.yml +++ b/.gitlab/source_test/tooling_unit_tests.yml @@ -11,18 +11,3 @@ invoke_unit_tests: - python3 -m pip install -r tasks/libs/requirements-github.txt --break-system-packages - inv -e invoke-unit-tests.run -kitchen_invoke_unit_tests: - stage: source_test - image: registry.ddbuild.io/ci/datadog-agent-buildimages/deb_x64$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES - tags: ["arch:amd64"] - needs: [] - rules: - - !reference [.on_kitchen_invoke_tasks_changes] - script: - # Python 3.12 changes default behavior how packages are installed. - # In particular, --break-system-packages command line option is - # required to use the old behavior or use a virtual env. https://github.com/actions/runner-images/issues/8615 - - python3 -m pip install -r tasks/libs/requirements-github.txt --break-system-packages - - pushd test/kitchen - - inv -e kitchen.invoke-unit-tests - - popd diff --git a/.gitlab/source_test/windows.yml b/.gitlab/source_test/windows.yml index db57842d68538..b0565ce028273 100644 --- a/.gitlab/source_test/windows.yml +++ b/.gitlab/source_test/windows.yml @@ -85,7 +85,7 @@ tests_windows-x64: artifacts: when: always paths: - - $DD_AGENT_TESTING_DIR/site-cookbooks/dd-system-probe-check/files + - $CI_PROJECT_DIR/test/new-e2e/tests/sysprobe-functional/artifacts .tests_windows_secagent: stage: source_test diff --git a/.gitlab/trigger_release/trigger_release.yml b/.gitlab/trigger_release/trigger_release.yml index 69f8a53b1df99..0ecd5e0b02606 100644 --- a/.gitlab/trigger_release/trigger_release.yml +++ b/.gitlab/trigger_release/trigger_release.yml @@ -7,7 +7,7 @@ image: registry.ddbuild.io/ci/datadog-agent-buildimages/deb_x64$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES tags: ["arch:amd64"] # We don't directly depend/need the package deploy jobs, because - # that would make us deploy even when there are kitchen failures etc + # that would make us deploy even when there are e2e tests failures etc # We only want to allow automatically triggering agent-release-manangement # pipelines when everything goes well variables: diff --git a/omnibus/.gitignore b/omnibus/.gitignore index 94b7d38ccea76..c231c1a867015 100644 --- a/omnibus/.gitignore +++ b/omnibus/.gitignore @@ -1,8 +1,5 @@ *.gem .bundle -.kitchen/ -.kitchen.local.yml -kitchen.local.yml vendor/bundle pkg/* .vagrant diff --git a/tasks/kernel_matrix_testing/ci.py b/tasks/kernel_matrix_testing/ci.py index f6e83fcb6e571..d07f079f6eab3 100644 --- a/tasks/kernel_matrix_testing/ci.py +++ b/tasks/kernel_matrix_testing/ci.py @@ -217,7 +217,7 @@ def get_test_results(self) -> dict[str, bool | None]: The values are True if test passed, False if failed, None if skipped. """ junit_archive_name = f"junit-{self.arch}-{self.distro}-{self.vmset}.tar.gz" - junit_archive = self.artifact_file_binary(f"test/kitchen/{junit_archive_name}", ignore_not_found=True) + junit_archive = self.artifact_file_binary(f"test/new-e2e/tests/{junit_archive_name}", ignore_not_found=True) if junit_archive is None: return {} diff --git a/tasks/kmt.py b/tasks/kmt.py index 40437b8eff3f3..b1c30e0246c50 100644 --- a/tasks/kmt.py +++ b/tasks/kmt.py @@ -1372,7 +1372,7 @@ def clean(ctx: Context, stack: str | None = None, container=False, image=False): stack ), f"Stack {stack} does not exist. Please create with 'inv kmt.create-stack --stack='" - ctx.run("rm -rf ./test/kitchen/site-cookbooks/dd-system-probe-check/files/default/tests/pkg") + ctx.run("rm -rf ./test/new-e2e/tests/sysprobe-functional/artifacts/pkg") ctx.run(f"rm -rf kmt-deps/{stack}", warn=True) ctx.run(f"rm {get_kmt_os().shared_dir}/*.tar.gz", warn=True) @@ -2290,7 +2290,7 @@ def download_complexity_data(ctx: Context, commit: str, dest_path: str | Path, k _, test_jobs = get_all_jobs_for_pipeline(pipeline_id) for job in test_jobs: complexity_name = f"verifier-complexity-{job.arch}-{job.distro}-{job.component}" - complexity_data_fname = f"test/kitchen/{complexity_name}.tar.gz" + complexity_data_fname = f"test/new-e2e/tests/{complexity_name}.tar.gz" data = job.artifact_file_binary(complexity_data_fname, ignore_not_found=True) if data is None: print(f"Complexity data not found for {job.name} - filename {complexity_data_fname} not found") diff --git a/tasks/libs/pipeline/data.py b/tasks/libs/pipeline/data.py index dc56d54f202b3..6cfef9a40fc16 100644 --- a/tasks/libs/pipeline/data.py +++ b/tasks/libs/pipeline/data.py @@ -89,23 +89,11 @@ def get_failed_jobs(pipeline: ProjectPipeline) -> FailedJobs: ), FailedJobReason.RUNNER, ), - # kitchen tests Azure VM allocation failures - ( - re.compile( - r'Allocation failed\. We do not have sufficient capacity for the requested VM size in this region\.' - ), - FailedJobReason.KITCHEN_AZURE, - ), # Gitlab 5xx errors ( re.compile(r'fatal: unable to access \'.*\': The requested URL returned error: 5..'), FailedJobReason.GITLAB, ), - # kitchen tests general infrastructure issues - ( - re.compile(r'ERROR: The kitchen tests failed due to infrastructure failures\.'), - FailedJobReason.KITCHEN, - ), # End to end tests EC2 Spot instances allocation failures ( re.compile(r'Failed to allocate end to end test EC2 Spot instance after [0-9]+ attempts'), @@ -171,7 +159,7 @@ def truncate_job_name(job_name, max_char_per_job=48): # Those jobs have `allow_failure: true` but still need to be included # in failure reports -jobs_allowed_to_fail_but_need_report = [re.compile(r'kitchen_test_security_agent.*')] +jobs_allowed_to_fail_but_need_report = [] def should_report_job(job_name, allow_failure): diff --git a/tasks/libs/pipeline/tools.py b/tasks/libs/pipeline/tools.py index 7f9d08e8eca6e..2cab6a42d28b5 100644 --- a/tasks/libs/pipeline/tools.py +++ b/tasks/libs/pipeline/tools.py @@ -130,9 +130,9 @@ def trigger_agent_pipeline( """ Trigger a pipeline on the datadog-agent repositories. Multiple options are available: - run a pipeline with all builds (by default, a pipeline only runs a subset of all available builds), - - run a pipeline with all kitchen tests, + - run a pipeline with all e2e tests, - run a pipeline with all end-to-end tests, - - run a deploy pipeline (includes all builds & kitchen tests + uploads artifacts to staging repositories); + - run a deploy pipeline (includes all builds & e2e tests + uploads artifacts to staging repositories); """ ref = ref or get_default_branch() diff --git a/tasks/libs/types/types.py b/tasks/libs/types/types.py index cd8e13c9fa37f..37398ca62c2a8 100644 --- a/tasks/libs/types/types.py +++ b/tasks/libs/types/types.py @@ -48,10 +48,8 @@ class FailedJobType(Enum): class FailedJobReason(Enum): RUNNER = 1 - KITCHEN_AZURE = 4 FAILED_JOB_SCRIPT = 5 GITLAB = 6 - KITCHEN = 7 EC2_SPOT = 8 E2E_INFRA_FAILURE = 9 FAILED_BRIDGE_JOB = 10 diff --git a/tasks/linter.py b/tasks/linter.py index f549ae2005075..a0be3ca3970b9 100644 --- a/tasks/linter.py +++ b/tasks/linter.py @@ -113,9 +113,7 @@ def filenames(ctx): max_length = 255 for filename in files: if ( - not filename.startswith( - ('test/kitchen/', 'tools/windows/DatadogAgentInstaller', 'test/workload-checks', 'test/regression') - ) + not filename.startswith(('tools/windows/DatadogAgentInstaller', 'test/workload-checks', 'test/regression')) and prefix_length + len(filename) > max_length ): print( diff --git a/tasks/system_probe.py b/tasks/system_probe.py index 7478f31c415fc..6f8e4e1f7457e 100644 --- a/tasks/system_probe.py +++ b/tasks/system_probe.py @@ -44,8 +44,8 @@ BUNDLE_TAG = "ebpf_bindata" NPM_TAG = "npm" -KITCHEN_DIR = os.getenv('DD_AGENT_TESTING_DIR') or os.path.normpath(os.path.join(os.getcwd(), "test", "kitchen")) -KITCHEN_ARTIFACT_DIR = os.path.join(KITCHEN_DIR, "site-cookbooks", "dd-system-probe-check", "files", "default", "tests") +TEST_DIR = os.getenv('DD_AGENT_TESTING_DIR') or os.path.normpath(os.path.join(os.getcwd(), "test", "new-e2e", "tests")) +E2E_ARTIFACT_DIR = os.path.join(TEST_DIR, "sysprobe-functional/artifacts") TEST_PACKAGES_LIST = [ "./pkg/ebpf/...", "./pkg/network/...", @@ -822,7 +822,7 @@ def test( Run tests on eBPF parts If skip_object_files is set to True, this won't rebuild object files If output_path is set, we run `go test` with the flags `-c -o output_path`, which *compiles* the test suite - into a single binary. This artifact is meant to be used in conjunction with kitchen tests. + into a single binary. This artifact is meant to be used in conjunction with e2e tests. """ if os.getenv("GOPATH") is None: raise Exit( @@ -958,11 +958,11 @@ def go_package_dirs(packages, build_tags): return [p for p in target_packages if len(p) > 0] -BUILD_COMMIT = os.path.join(KITCHEN_ARTIFACT_DIR, "build.commit") +BUILD_COMMIT = os.path.join(E2E_ARTIFACT_DIR, "build.commit") def clean_build(ctx): - if not os.path.exists(KITCHEN_ARTIFACT_DIR): + if not os.path.exists(E2E_ARTIFACT_DIR): return True if not os.path.exists(BUILD_COMMIT): @@ -983,9 +983,9 @@ def full_pkg_path(name): @task -def kitchen_prepare(ctx, kernel_release=None, ci=False, packages=""): +def e2e_prepare(ctx, kernel_release=None, ci=False, packages=""): """ - Compile test suite for kitchen + Compile test suite for e2e tests """ build_tags = [NPM_TAG] if not is_windows: @@ -994,8 +994,8 @@ def kitchen_prepare(ctx, kernel_release=None, ci=False, packages=""): target_packages = go_package_dirs(TEST_PACKAGES_LIST, build_tags) # Clean up previous build - if os.path.exists(KITCHEN_ARTIFACT_DIR) and (packages == "" or clean_build(ctx)): - shutil.rmtree(KITCHEN_ARTIFACT_DIR) + if os.path.exists(E2E_ARTIFACT_DIR) and (packages == "" or clean_build(ctx)): + shutil.rmtree(E2E_ARTIFACT_DIR) elif packages != "": packages = [full_pkg_path(name) for name in packages.split(",")] # make sure valid packages were provided. @@ -1008,22 +1008,22 @@ def kitchen_prepare(ctx, kernel_release=None, ci=False, packages=""): if os.path.exists(BUILD_COMMIT): os.remove(BUILD_COMMIT) - os.makedirs(KITCHEN_ARTIFACT_DIR, exist_ok=True) + os.makedirs(E2E_ARTIFACT_DIR, exist_ok=True) # clean target_packages only for pkg_dir in target_packages: test_dir = pkg_dir.lstrip(os.getcwd()) - if os.path.exists(os.path.join(KITCHEN_ARTIFACT_DIR, test_dir)): - shutil.rmtree(os.path.join(KITCHEN_ARTIFACT_DIR, test_dir)) + if os.path.exists(os.path.join(E2E_ARTIFACT_DIR, test_dir)): + shutil.rmtree(os.path.join(E2E_ARTIFACT_DIR, test_dir)) # This will compile one 'testsuite' file per package by running `go test -c -o output_path`. - # These artifacts will be "vendored" inside a chef recipe like the following: - # test/kitchen/site-cookbooks/dd-system-probe-check/files/default/tests/pkg/network/testsuite - # test/kitchen/site-cookbooks/dd-system-probe-check/files/default/tests/pkg/network/netlink/testsuite - # test/kitchen/site-cookbooks/dd-system-probe-check/files/default/tests/pkg/ebpf/testsuite - # test/kitchen/site-cookbooks/dd-system-probe-check/files/default/tests/pkg/ebpf/bytecode/testsuite + # These artifacts will be "vendored" inside: + # test/new-e2e/tests/sysprobe-functional/artifacts/pkg/network/testsuite + # test/new-e2e/tests/sysprobe-functional/artifacts/pkg/network/netlink/testsuite + # test/new-e2e/tests/sysprobe-functional/artifacts/pkg/ebpf/testsuite + # test/new-e2e/tests/sysprobe-functional/artifacts/pkg/ebpf/bytecode/testsuite for i, pkg in enumerate(target_packages): - target_path = os.path.join(KITCHEN_ARTIFACT_DIR, os.path.relpath(pkg, os.getcwd())) + target_path = os.path.join(E2E_ARTIFACT_DIR, os.path.relpath(pkg, os.getcwd())) target_bin = "testsuite" if is_windows: target_bin = "testsuite.exe" @@ -1072,14 +1072,11 @@ def kitchen_prepare(ctx, kernel_release=None, ci=False, packages=""): f"{gopath}/bin/gotestsum", ] - files_dir = os.path.join(KITCHEN_ARTIFACT_DIR, "..") + files_dir = os.path.join(E2E_ARTIFACT_DIR, "..") for cf in copy_files: if os.path.exists(cf): shutil.copy(cf, files_dir) - if not ci: - kitchen_prepare_btfs(ctx, files_dir) - ctx.run(f"go build -o {files_dir}/test2json -ldflags=\"-s -w\" cmd/test2json", env={"CGO_ENABLED": "0"}) ctx.run(f"echo {get_commit_sha(ctx)} > {BUILD_COMMIT}") @@ -1628,59 +1625,6 @@ def check_for_ninja(ctx): ctx.run("ninja --version") -def is_bpftool_compatible(ctx): - try: - ctx.run("bpftool gen min_core_btf 2>&1 | grep -q \"'min_core_btf' needs at least 3 arguments, 0 found\"") - return True - except Exception: - return False - - -def kitchen_prepare_btfs(ctx, files_dir, arch=CURRENT_ARCH): - btf_dir = "/opt/datadog-agent/embedded/share/system-probe/ebpf/co-re/btf" - - if arch == "x64": - arch = "x86_64" - elif arch == "arm64": - arch = "aarch64" - - if not os.path.exists(f"{btf_dir}/kitchen-btfs-{arch}.tar.xz"): - exit("BTFs for kitchen test environments not found. Please update & re-provision your dev VM.") - - sudo = "sudo" if not is_root() else "" - ctx.run(f"{sudo} chmod -R 0777 {btf_dir}") - - if not os.path.exists(f"{btf_dir}/kitchen-btfs-{arch}"): - ctx.run( - f"mkdir {btf_dir}/kitchen-btfs-{arch} && " - + f"tar xf {btf_dir}/kitchen-btfs-{arch}.tar.xz -C {btf_dir}/kitchen-btfs-{arch}" - ) - - can_minimize = True - if not is_bpftool_compatible(ctx): - print( - "Cannot minimize BTFs: bpftool version 6 or higher is required: preparing kitchen environment with full sized BTFs instead." - ) - can_minimize = False - - if can_minimize: - co_re_programs = " ".join(glob.glob("/opt/datadog-agent/embedded/share/system-probe/ebpf/co-re/*.o")) - generate_minimized_btfs( - ctx, - source_dir=f"{btf_dir}/kitchen-btfs-{arch}", - output_dir=f"{btf_dir}/minimized-btfs", - bpf_programs=co_re_programs, - ) - - ctx.run( - f"cd {btf_dir}/minimized-btfs && " - + "tar -cJf minimized-btfs.tar.xz * && " - + f"mv minimized-btfs.tar.xz {files_dir}" - ) - else: - ctx.run(f"cp {btf_dir}/kitchen-btfs-{arch}.tar.xz {files_dir}/minimized-btfs.tar.xz") - - # list of programs we do not want to minimize against no_minimize = ["lock_contention.o"] diff --git a/tasks/unit_tests/junit_tests.py b/tasks/unit_tests/junit_tests.py index 6dfa6e0fe57ac..5e7ea0cb3184e 100644 --- a/tasks/unit_tests/junit_tests.py +++ b/tasks/unit_tests/junit_tests.py @@ -69,16 +69,6 @@ def test_default_e2e(self): self.assertNotIn("kitchen", grouped) self.assertNotIn("kitchen-e2e", grouped) - def test_e2e_kitchen(self): - test_dir = Path("./tasks/unit_tests/testdata/to_group") - grouped = junit.group_per_tags(test_dir, ["upload_option.os_version_from_name"]) - self.assertNotIn("default", grouped) - self.assertIn("kitchen", grouped) - self.assertCountEqual([f"{str(test_dir)}/onepiece", f"{str(test_dir)}/dragonball"], grouped["kitchen"]) - self.assertIn("kitchen-e2e", grouped) - self.assertEqual([f"{str(test_dir)}/naruto"], grouped["kitchen-e2e"]) - self.assertNotIn("e2e", grouped) - class TestSetTag(unittest.TestCase): @patch.dict("os.environ", {"CI_PIPELINE_ID": "1515"}) diff --git a/tasks/unit_tests/libs/data_tests.py b/tasks/unit_tests/libs/data_tests.py index 97d4981af82bb..e6d4c7d9be88f 100644 --- a/tasks/unit_tests/libs/data_tests.py +++ b/tasks/unit_tests/libs/data_tests.py @@ -9,14 +9,6 @@ def test_without_logs(self): self.assertEqual(get_infra_failure_info(''), FailedJobReason.GITLAB) self.assertEqual(get_infra_failure_info(None), FailedJobReason.GITLAB) - def test_kitchen(self): - self.assertEqual( - get_infra_failure_info( - 'something ERROR: The kitchen tests failed due to infrastructure failures. something' - ), - FailedJobReason.KITCHEN, - ) - def test_gitlab_5xx(self): self.assertEqual( get_infra_failure_info( diff --git a/tasks/unit_tests/testdata/secret.tar.gz/bedroom-rspec-win2016-azure-x86_64.xml b/tasks/unit_tests/testdata/secret.tar.gz/bedroom-rspec-win2016-azure-x86_64.xml index 947e3b3310580..04c6b23e6c637 100644 --- a/tasks/unit_tests/testdata/secret.tar.gz/bedroom-rspec-win2016-azure-x86_64.xml +++ b/tasks/unit_tests/testdata/secret.tar.gz/bedroom-rspec-win2016-azure-x86_64.xml @@ -1,26 +1,26 @@ - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/tasks/unit_tests/testdata/variables.yml b/tasks/unit_tests/testdata/variables.yml index 1583ab354d5cc..e95d55a033b7e 100644 --- a/tasks/unit_tests/testdata/variables.yml +++ b/tasks/unit_tests/testdata/variables.yml @@ -14,7 +14,7 @@ variables: # avoids accidentally overwriting files when downloading artifacts from # both RPM and SUSE rpm jobs. OMNIBUS_PACKAGE_DIR_SUSE: $CI_PROJECT_DIR/omnibus/suse/pkg - DD_AGENT_TESTING_DIR: $CI_PROJECT_DIR/test/kitchen + DD_AGENT_TESTING_DIR: $CI_PROJECT_DIR/test STATIC_BINARIES_DIR: bin/static DOGSTATSD_BINARIES_DIR: bin/dogstatsd AGENT_BINARIES_DIR: bin/agent @@ -145,11 +145,6 @@ variables: E2E_TESTS_AZURE_SUBSCRIPTION_ID: ci.datadog-agent.e2e_tests_azure_subscription_id # agent-devx-loops E2E_TESTS_GCP_CREDENTIALS: ci.datadog-agent.e2e_tests_gcp_credentials # agent-devx-loops E2E_PULUMI_CONFIG_PASSPHRASE: ci.datadog-agent.pulumi_password # agent-devx-loops - KITCHEN_EC2_SSH_KEY: ci.datadog-agent.aws_ec2_kitchen_ssh_key # agent-devx-loops - KITCHEN_AZURE_CLIENT_ID: ci.datadog-agent.azure_kitchen_client_id # agent-devx-loops - KITCHEN_AZURE_CLIENT_SECRET: ci.datadog-agent.azure_kitchen_client_secret # agent-devx-loops - KITCHEN_AZURE_SUBSCRIPTION_ID: ci.datadog-agent.azure_kitchen_subscription_id # agent-devx-loops - KITCHEN_AZURE_TENANT_ID: ci.datadog-agent.azure_kitchen_tenant_id # agent-devx-loops GITHUB_PR_COMMENTER_APP_KEY: pr-commenter.github_app_key # agent-devx-infra GITHUB_PR_COMMENTER_INTEGRATION_ID: pr-commenter.github_integration_id # agent-devx-infra GITHUB_PR_COMMENTER_INSTALLATION_ID: pr-commenter.github_installation_id # agent-devx-infra @@ -205,4 +200,4 @@ variables: RESTORE_CACHE_ATTEMPTS: 2 # Feature flags FF_SCRIPT_SECTIONS: 1 # Prevent multiline scripts log collapsing, see https://gitlab.com/gitlab-org/gitlab-runner/-/issues/3392 - FF_KUBERNETES_HONOR_ENTRYPOINT: true # Honor the entrypoint in the Docker image when running Kubernetes jobs \ No newline at end of file + FF_KUBERNETES_HONOR_ENTRYPOINT: true # Honor the entrypoint in the Docker image when running Kubernetes jobs diff --git a/tasks/winbuildscripts/secagent.ps1 b/tasks/winbuildscripts/secagent.ps1 index 0ff6a448cf737..af6a1cbb85eef 100644 --- a/tasks/winbuildscripts/secagent.ps1 +++ b/tasks/winbuildscripts/secagent.ps1 @@ -25,7 +25,7 @@ if ($Env:TARGET_ARCH -eq "x86") { $err = $LASTEXITCODE if($err -ne 0){ - Write-Host -ForegroundColor Red "kitchen prepare failed $err" + Write-Host -ForegroundColor Red "e2e prepare failed $err" [Environment]::Exit($err) } Write-Host Test passed diff --git a/tasks/winbuildscripts/sysprobe.bat b/tasks/winbuildscripts/sysprobe.bat index 4281fa5028a93..0b71364dbc0ef 100644 --- a/tasks/winbuildscripts/sysprobe.bat +++ b/tasks/winbuildscripts/sysprobe.bat @@ -18,5 +18,5 @@ call %BUILD_ROOT%\datadog-agent\tasks\winbuildscripts\extract-modcache.bat %BUIL Powershell -C "%BUILD_ROOT%\datadog-agent\tasks\winbuildscripts\sysprobe.ps1" || exit /b 5 REM copy resulting packages to expected location for collection by gitlab. -if not exist c:\mnt\test\kitchen\site-cookbooks\dd-system-probe-check\files\default\tests\ mkdir c:\mnt\test\kitchen\site-cookbooks\dd-system-probe-check\files\default\tests\ || exit /b 6 -xcopy /e/s/q %BUILD_ROOT%\datadog-agent\test\kitchen\site-cookbooks\dd-system-probe-check\files\default\tests\*.* c:\mnt\test\kitchen\site-cookbooks\dd-system-probe-check\files\default\tests\ || exit /b 7 +if not exist c:\mnt\test\new-e2e\tests\sysprobe-functional\artifacts\ mkdir c:\mnt\ttest\new-e2e\tests\sysprobe-functional\artifacts\ || exit /b 6 +xcopy /e/s/q %BUILD_ROOT%\datadog-agent\test\new-e2e\tests\sysprobe-functional\artifacts\*.* c:\mnt\test\new-e2e\tests\sysprobe-functional\artifacts\ || exit /b 7 diff --git a/tasks/winbuildscripts/sysprobe.ps1 b/tasks/winbuildscripts/sysprobe.ps1 index 7abc3cd02ba3f..2ac70e2766a27 100644 --- a/tasks/winbuildscripts/sysprobe.ps1 +++ b/tasks/winbuildscripts/sysprobe.ps1 @@ -23,11 +23,11 @@ if ($err -ne 0) { [Environment]::Exit($err) } -& inv -e system-probe.kitchen-prepare --ci +& inv -e system-probe.e2e-prepare --ci $err = $LASTEXITCODE if($err -ne 0){ - Write-Host -ForegroundColor Red "kitchen prepare failed $err" + Write-Host -ForegroundColor Red "e2e prepare failed $err" [Environment]::Exit($err) } Write-Host Test passed diff --git a/test/files/default/.gitkeep b/test/files/default/.gitkeep new file mode 100644 index 0000000000000..6fa10537e826d --- /dev/null +++ b/test/files/default/.gitkeep @@ -0,0 +1 @@ +This file is used by some tests as a folder to store artifacts diff --git a/test/kitchen/.gitignore b/test/kitchen/.gitignore deleted file mode 100644 index ff9d59ff7cdde..0000000000000 --- a/test/kitchen/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -.kitchen/ -.rbenv-version -.ruby-gemset -.ruby-version -.rvmrc -.vagrant -Berksfile.lock -cookbooks/ -.kitchen.yml -kitchen.yml -tmpkitchen.yml -ssh-key -ssh-key.pub -azureid.sh -*.bat -*.ps1 -!site-cookbooks/**/files/**/*.ps1 -localplatforms.json -uservars.json -rsa-key -rsa-key.pub -ed25519-key -ed25519-key.pub -Gemfile -Gemfile.lock -!test/**/Gemfile diff --git a/test/kitchen/Berksfile b/test/kitchen/Berksfile deleted file mode 100644 index 1ecd9cf9143c5..0000000000000 --- a/test/kitchen/Berksfile +++ /dev/null @@ -1,27 +0,0 @@ -source 'https://supermarket.chef.io' - -cookbook 'datadog', '~> 4.20.0' - -# We pin an old version of the apt cookbook because this cookbook triggers an "apt update" by default -# and in newer versions this update is not allowed to fail, while in 3.X it is. For some reason -# apt update fails a lot in our debian instances. -# This can be removed if the datadog cookbook no longer depends on apt, since it's only used there -# (ie: when the datadog cookbook requires chef >= 13.3, which already bundles everything we use from apt). -cookbook 'apt', '< 4.0' - -# Version 7.3.0 of the cookbook depends on chef version >= 15.0 but right now we are running 14.12.9 -cookbook 'docker', '< 7.3.0' -# Version 4.0.0 of the cookbook depends on chef version >= 15.3 but right now we are running 14.12.9 -cookbook 'selinux', '< 4.0.0' - -cookbook 'dd-agent-disable-system-repos', path: './site-cookbooks/dd-agent-disable-system-repos' -cookbook 'dd-agent-install', path: './site-cookbooks/dd-agent-install' -cookbook 'dd-agent-reinstall', path: './site-cookbooks/dd-agent-reinstall' -cookbook 'dd-agent-upgrade', path: './site-cookbooks/dd-agent-upgrade' -cookbook 'dd-agent-import-conf', path: './site-cookbooks/dd-agent-import-conf' -cookbook 'dd-agent-5', path: './site-cookbooks/dd-agent-5' -cookbook 'dd-agent-sles-workaround', path: './site-cookbooks/dd-agent-sles-workaround' -cookbook 'dd-agent-rhel-workaround', path: './site-cookbooks/dd-agent-rhel-workaround' -cookbook 'dd-agent-system-files-check', path: './site-cookbooks/dd-agent-system-files-check' -cookbook 'dd-security-agent-check', path: './site-cookbooks/dd-security-agent-check' -cookbook 'dd-system-probe-check', path: './site-cookbooks/dd-system-probe-check' diff --git a/test/kitchen/Gemfile.local b/test/kitchen/Gemfile.local deleted file mode 100644 index 9ecbbd033e9ed..0000000000000 --- a/test/kitchen/Gemfile.local +++ /dev/null @@ -1,11 +0,0 @@ -require 'open-uri' - -group :test do - gem "rspec" - gem "rspec_junit_formatter", require: false -end - -# Actual gemfile is stored in the buildimages repo because it comes pre-installed in the dd-agent-testing Docker image, read it from there -gemfile = ::URI.open('https://raw.githubusercontent.com/DataDog/datadog-agent-buildimages/main/dd-agent-testing/Gemfile') -eval gemfile.read - diff --git a/test/kitchen/README.md b/test/kitchen/README.md deleted file mode 100644 index 8f27b05a830f0..0000000000000 --- a/test/kitchen/README.md +++ /dev/null @@ -1,283 +0,0 @@ -# Datadog Agent Testing - -This directory contains automated integration tests for the Datadog Agent. It -currently tests Agent packaging (installing, updating, and removing the Agent), -as well as basic functionality. The tests are executed on virtual machines that -span most of the supported Agent platforms. They're currently run on Azure VMs. - -This is meant to be executed internally at Datadog and references our internal build structure. -However, people outside of Datadog can run it by editing the repository URL that they are uploaded to in the .kitchen-azure.yml file. You will also need to ensure that the repo branch is `pipeline-$CI_PIPELINE_ID`. - -## Getting Started - -### Dependencies -Non-bundled dependencies: - - [Ruby](http://www.ruby-lang.org/) (last tested with 2.2.1) - - [Bundler](http://bundler.io/) - -Then install bundled gem dependencies: -``` -bundle config set --local path '.' -bundle config set --local gemfile './Gemfile.local' -``` - -`bundle install` - -Note: When building on macOS M1, you might run into an error when installing the `ffi-yajl` gem. You should be able to get around that by setting the build `ldflags` for this gem in bundler configuration (see [this Github Issue](https://github.com/chef/ffi-yajl/issues/115)): -```bash -bundle config build.ffi-yajl --with-ldflags="-Wl,-undefined,dynamic_lookup" -``` - -#### Azure - -These tests are set up to be run on Azure. -It is set up to use our automated testing. -However, there are also provisions to run it locally. - -You will need to create a service principle. -You can do that with the following command on the azure cli tool: - -``` -az ad sp create-for-rbac --name -``` - -Then create a file called `azureid.sh` and export the relevant settings into environment variables: - -The subscription ID is retrieved from the azure portal, by starting a azure shell. --or-- the "id" returned from `az account list` - -The AZURE_CLIENT_ID is returned as the appId from the above command - -the AZURE_CLIENT_SECRET is returned as the password from the above command - -the AZURE_TENANT_ID is returned as tenant from the above command --or-- the "tenantId" returned from `az account list` - -``` -export AZURE_CLIENT_ID="$AZURE_CLIENT_ID" -export AZURE_CLIENT_SECRET="$AZURE_CLIENT_SECRET" -export AZURE_TENANT_ID="$AZURE_TENANT_ID" -export AZURE_SUBSCRIPTION_ID="$AZURE_SUBSCRIPTION_ID" -export CI_PIPELINE_ID="$CI_PIPELINE_ID" -export NOT_GITLAB="true" -``` - -##### Images - -If for some reason you need to find another version of a specific image you will -need to use the Azure CLI. - -This will list all the images available on Azure (and take ~10min to run) -```bash -az vm image list --all --output table -``` - -This will list all the images available on Azure for a specific OS (and take ~2min to run) -```bash -az vm image list --offer Ubuntu --all --output table -``` - -#### Common - -To see the rest of the rake commands, execute - - rake -T - -For finer control, you can invoke test-kitchen directly - -To list all available tests, execute - - kitchen list - -And to run one of these tests, execute - - kitchen test - -For more kitchen commands, execute - - kitchen help - -## Test Coverage - -Tests are composed of platforms and suites. A suite is a series of commands to -execute (usually in the form of Chef recipes) followed by a series of tests -that verify that the commands completed as expected. Platforms are -systems environments in which the suites are executed. Each test suite is -executed on each platform. - -### Platforms Tested: - -To generate a test suite, the platforms to be tested are passed in via the -TEST_PLATFORMS environment variable. The exact format of the list that's -supplied in this variable will vary depending upon which driver (provider) -is being used. - -In Azure (which is what is used in the ci pipeline), the list of platforms -is created in the top level .gitlab-ci.yaml, and the syntax is of the form: -`short_name1,azure_full_qualified_name1|short_name2,azure_full_qualified_name2` - -Each driver (provider) will have a slightly different format, which is described -in the driver-specific yaml (drivers/azure-driver.yml, drivers/ec2-driver, etc.) - - -### Packaging Test Suites - -The *release candidate* is the latest Agent built. -In other words, they are the most up-to-date packages on our -staging (datad0g.com) deb (unstable branch) and yum repositories. - -Agent packaging methods tested: - -- `chef`: Installing the latest release candidate using the - [chef-datadog](https://github.com/DataDog/chef-datadog). The recipe will - determine if the base Agent should be installed instead of the regular one - (based on the system version of Python). -- `upgrade-agent6`: Installs the latest release Agent 6 (the latest publicly - available Agent 6 version), then upgrades it to the latest release candidate - using the platform's package manager. -- `upgrade-agent5`: Installs the latest release Agent 5 (the latest publicly - available Agent 5 version), then upgrades it to the latest Agent 6 release candidate - using the platform's package manager. -- `install-script`: Installs the latest release candidate using our [Agent - install script](https://raw.github.com/DataDog/dd-agent/master/packaging/datadog-agent/source/install_agent.sh). -- `step-by-step`: Installs the latest release candidate using our - step-by-step installation instructions as listed on Dogweb. - -For each platform, for each packaging method, the following Agent tests are -run (in the order listed): - - * The Agent is running: - - the Agent is running after installation is complete - - the configuration has been correctly placed (where applicable) - - the info command output does not contain 'ERROR' and exits with a non-zero - value - * The Agent stops: - - the `stop` command does not error when the Agent is running - - no Agent processes are running after the Agent has been stopped - - the Agent starts after being stopped - * The Agent restarts: - - the `restart` command does not error when the Agent is running - - the Agent is running after a previously-running Agent it is restarted - - the `restart` command does not error when the Agent is stopped - - the Agent is running after a previously-stopped Agent it is restarted - * The Agent is removed (if installed using a package manager): - - removing the Agent using the package manager should not error - - the Agent should not be running after it is removed - - the Agent binary should not be present after removal - -For the `upgrade` method, the version of the agent after the upgrade is tested. -Be sure to set the `DD_AGENT_EXPECTED_VERSION` environment variable to the version the agent -should be upgraded to (for instance `export DD_AGENT_EXPECTED_VERSION='5.5.0+git.213.59ac9da'`). - -### Agent Properties that are NOT Tested - -This suite covers the installing, upgrading, and removing the Agent on most -platforms. The following, among other aspects, are *not* covered: - -* Updates from versions of the Agent prior to the latest publicly available - version. This can easily be added by setting the ['datadog']['agent_version'] - attribute to the version that you wish to upgrade from in the - `upgrade` suite -* Not all supported operating systems are tested. Missing operating systems - include: - - Mac OS 10.x - - Amazon Linux -* Memory leaks or any obscurities that result from the Agent running for a long time, and so short term tests like these will not catch them -* Sending metrics/events over Dogstatsd via client libraries -* Changes made to an environment by a user (no sudo present, system Python - removed, supervisor installed etc.) - -## Adding Tests - -For basic test-kitchen usage, see its [Getting Started -guide](https://github.com/opscode/test-kitchen/wiki/Getting-Started). - -### Adding a Platform -Tests are executed on Azure in ci. Platforms are defined in the OS dependent -files kitchen testing definitions in /.gitlab/kitchen_testing/.yaml - -### Adding a Suite -Suites define the commands that should be run on a platform as Chef recipes, -and tests that verify the outcome of these commands written in RSpec. Suites -are defined in specific yaml files in the `test-definitions` directory. - -Add new cookbooks by describing them in `Berksfile`. If you want to write your -own cookbook that is specific to this repository, place it in the -`site-cookbooks` directory. New cookbooks will not be available in your tests -until `rake berks` is executed. - -Tests should be placed in `test/integration//rspec/`. They will be -copied and executed on a platform after the suite's recipes have been applied -to the environment. They are not managed by `Berks`. Code that can be shared -between suites is in `test/integration/common/rspec/`. - -Tests do not need to be written in RSpec; [Busser](https://github.com/fnichol/busser), -the framework that executes the tests, supports several different testing -frameworks (including Bats and minitest). - -### Creating a complete test file (kitchen.yaml) - -To support running multiple kitchen suites using multiple back-end providers, the -kitchen configuration file (kitchen.yaml) is created dynamically by combining three -provided yaml files. - -A complete kitchen configuration (kitchen.yaml) is created by taking one of the -driver files, adding the common configuration options [platforms-common](test-definitions/platforms-common.yml), -and then adding the desired test suite(s) from the test-definitions directory. - -There is an invoke task for creating the completed `kitchen.yml`. The usage for -the invoke task is: - - invoke kitchen.genconfig --platform=platform --osversions=osversions --provider=provider --arch=arch --testfiles=testfiles - -where: - platform is an index into the platforms.json. It is (currently) one of: - - centos - - debian - - suse - - ubuntu - - windows - - amazonlinux - - osversions is an index into the per-provider dictionary for the given - platform. Examples include - - win2012r2 (which is in both windows/azure and windows/ec2) - - ubuntu-20-04 (which is in ubuntu/azure) - - Provider is the kitchen driver to be used. Currently supported are - - azure - - ec2 - - vagrant - - hyperv (with a user-supplied platforms file) - - arch is: - - x86_64 - - arm64 - - Testfiles is the name of the test-specific file(s) (found in [test-definitions](test-definitions) ) to be - added. The testfiles define the tests that are run, on what OS, on the given provider. - -An example command would be - invoke kitchen.genconfig --platform ubuntu --osversions all --provider azure --arch x86_64 --testfiles install-script-test - - This will generate a kitchen.yml which executes the `install-script-test` on all of the defined `ubuntu` - OS images in azure. - -#### Running in CI - -When run in CI, the gitlab job will set up the `TEST_PLATFORMS` environment variable, -and then concatenate the [azure driver](drivers/azure-driver.yml), [platforms-common](test-definitions/platforms-common.yml), -and the desired test suite file (for example [upgrade7-test](test-definitions/upgrade7-test.yml)). - -Test kitchen then expands out each of the `TEST_PLATFORMS` into a kitchen platform, and runs -each suite on each provided platform - -#### Running locally - -To run kitchen locally, either to do broad tests on a given build or to develop the -kitchen tests themselves, additional driver files are provided for using AWS EC2, Hyper-V, -or vagrant as the back end. - -To create a kitchen file, take the same steps as above. Combine the desired driver file, -the common file, and the desired test suite(s). Using `erb` as a manual step will generate -a kitchen file that can be reused. - -At present, the EC2 and Hyper-V driver files have only been tested for Windows targets. diff --git a/test/kitchen/azure-creds.erb b/test/kitchen/azure-creds.erb deleted file mode 100644 index 65cd405c3f46e..0000000000000 --- a/test/kitchen/azure-creds.erb +++ /dev/null @@ -1,4 +0,0 @@ -[<%= subscription_id %>] -client_id = "<%= client_id %>" -client_secret = "<%= client_secret %>" -tenant_id = "<%= tenant_id %>" diff --git a/test/kitchen/docs/README.md b/test/kitchen/docs/README.md deleted file mode 100644 index 80e3b3fa28df7..0000000000000 --- a/test/kitchen/docs/README.md +++ /dev/null @@ -1,236 +0,0 @@ -# Test Kitchen Overview - -## Build pipeline testing - -### Configuration (.gitlab-ci.yml) - -The gitlab pipelines which require kitchen testing have 3 independent stages for provisioning kitchen testing, running kitchen testing, and cleaning up (removing the artifacts). The `testkitchen_deploy` stage copies the build artifacts to an S3 bucket. The `testkitchen_testing` stage executes the kitchen tests. The `testkitchen_cleanup` stage cleans up the s3 buckets and the azure virtual machines. - -#### testkitchen_deploy - -This stage contains jobs to deploy the Agent packages created by the package build jobs to our test repositories: -- apttesting.datad0g.com (for .deb packages used by the Debian and Ubuntu tests) -- yumtesting.datad0g.com (for .rpm packages used by the CentOS/RHEL and SUSE tests) -- s3.amazonaws.com/dd-agent-mstesting (for .msi packages used by the Windows tests) - -For each package type, there are two jobs: one to deploy the A6 package, the other -to deploy the A7 and IoT packages. - -Each pipeline puts its packages in a dedicated branch: -- .deb packages are put in the `dists/pipeline--a6` and `dists/pipeline--a7` branches apttesting.datad0g.com. -- .rpm packages are put in the `pipeline--a6` and `pipeline--a7` branches of yumtesting.datad0g.com. -- SUSE .rpm packages are put in the `suse/pipeline--a6` and `suse/pipeline--a7` branches of yumtesting.datad0g.com. -- .msi packages are put in the `pipelines/A6/` and `pipelines/A7/` branches of s3.amazonaws.com/dd-agent-mstesting. - -#### testkitchen_testing - -This stage contains jobs which execute the kitchen tests on our Azure account. - -Each job executes one specific test suite, for one OS, for one Agent flavor and one major Agent version. - -The `.gitlab-ci.yml` file has been structured to avoid config duplication with the following jobs: - -- a common `kitchen_common` job from which all kitchen testing jobs inherit -- `kitchen_agent_aX` jobs that specify the Agent version tested -- `kitchen_os_X` jobs that specify which OS is tested -- `kitchen_test_X` jobs that specify which test suite is run -- `kitchen_datadog_X_flavor` jobs that specify which Agent flavor is run (eg. `datadog-agent`, `datadog-iot-agent`) -- `kitchen_azure_location_X` jobs that specify the Azure location where the tests are run. - -**Note:** We spread our kitchen tests on multiple regions mainly because we have a limited number of resources available on each region on Azure. - -From these base blocks, we define: -- test types: `kitchen_test__` which is a combination of a chosen test suite, Agent flavor and Azure location. -- scenarios: `kitchen_scenario__aX` which is a combination of a chosen OS and major Agent version. - -**Note:** When jobs use combinations of other jobs with the `extends` keyword (eg. test types, scenarios), the `extends` list is processed in order. Duplicate keys are overridden (ie. the latest job in the list which contains the key wins). Therefore, `extends` lists need to be ordered from the most generic to the most specific extension. - -**Note:** To avoid having too many different test types, we bind each test suite with a specific Azure location. Eg. all install script tests are run in the same Azure location. - -The real jobs that are run in the Gitlab pipelines are thus a combination of test types and scenarios, named `kitchen___-aX`. - -##### testkitchen_cleanup - -The `testkitchen_cleanup_azure-aX` jobs clean up the Azure VMs that were used during the `testkitchen_testing` stage. - -**Note:** The kitchen test jobs send a `destroy` request to Azure when their tests end, so usually these jobs do nothing. They're mainly useful to make sure all VMs have been destroyed, or when kitchen jobs are cancelled while they're running. - -**Note:** Azure VMs are also cleaned up on a daily basis by a job in the `mars-jenkins-scripts` pipeline. - -The `testkitchen_cleanup_s3-aX` jobs clean up the S3 buckets of the testing repos. - -**Important note:** These jobs are always run, even when a kitchen test fails. This is done on purpose (to avoid having remaining resources once a job fails). -The downside of this approach is that when you want to retry a failing kitchen test job, you'll have to re-run the corresponding deploy job first (to put the Agent packages back in the testing repository). - -#### Test suites - -kitchen tests are defined in a file named `kitchen.yml` which defines: -- the provisioner (`provisioner:` key) used in the tests. In the pipeline, `chef-solo` is used. -- the driver (`driver:` + `driver_config:` keys) used to run the tests. In the pipeline, the [Azure kitchen driver](https://github.com/test-kitchen/kitchen-azurerm) is used. - -- the list of platforms (`platforms:` key) used in the tests. -- the list of test suites (`suites:` key) to run. - -To reduce duplication, the `kitchen.yml` file is generated at test time by the `run-test-kitchen.sh` script ([see below](#test-execution-tasksrun-test-kitchensh)) by concatenating 2 template files: - -- the `kitchen-azure-common.yml` file, which defines the provisioner, driver, and platforms that will be used. It also defines a number of useful variables that can be used by the test suite templates (such as: which major Agent version is used, what are the testing repository URLs, etc.). -- a `kitchen-azure--test.yml` file, which contains the test suite definition for a particular test. That definition consists in the list of recipes to run, with their attributes, and optionally a list of platforms to not run the test on (eg. if you know that a particular test x platform combination cannot work). - -These files are `.erb` template files, the rendered contents (eg. the list of platforms) depend on what variables are passed to the `run-test-kitchen.sh` script. - -#### Test execution (tasks/run-test-kitchen.sh) - -Each individual test environment is controlled from the `.gitlab-ci.yml` jobs. The tests are set up using environment variables. - -##### `TEST_PLATFORMS` - -`TEST_PLATFORMS` is a list of test platforms which are turned into test kitchen platforms. In `.gitlab-ci.yml`, the platform list has the following syntax: - `short_name1,type1,azure_fully_qualified_name1|short_name2,type2,azure_fully_qualified_name2` - -There are two types of platforms: -- ones which use a public image (type `urn`): the azure qualified name for such an image can be found by using `az vm image list` to search for the image (using the publisher name, the offer name and/or the sku). The `urn` field contains the azure fully qualified name. -- ones which use a private image (type `id`): the image is in an image gallery in the `kitchen-test-images` resource group of the Azure account. The fully qualified name is the full path to the image in the gallery. - -We mainly use private images for platforms we still want to test, but have been removed from the public Azure images list (eg. because they're EOL). - -**Note:** this variable is set by the `kitchen_os_X` jobs. - -##### `AZURE_LOCATION` - -`AZURE_LOCATION` is a string that indicates on which Azure region the test VMs are spun up. - -**Note:** this variable is set by the `kitchen_azure_location_X` jobs. - -##### `AGENT_FLAVOR` - -`AGENT_FLAVOR` is a string that indicates which flavor the Agent is installed (eg. datadog-agent, datadog-iot-agent). In particular, it helps knowing which package has to be installed, and which tests should be applied (eg. doing Python tests on the IoT Agent doesn't make sense). - -**Note:** this variable is set by the `kitchen_datadog_X_flavor` jobs. - -This configuration is fed to the `tasks/run-test-kitchen.sh`. That script also takes two mandatory parameters: - -- an identifier for the test suite that is run (eg. `install-script`, `upgrade5`), -- the major Agent version that is tested (eg. `6` or `7`). - -In turn, it sets up additional variables for Azure (authentication/environment variables), as well as some variables used during testing (such as the exact expected Agent version, gathered from the `inv agent.version` command). - -It concatenates the `kitchen-azure-common.yml` file with the file specific to the provided test suite into a `kitchen.yml` file, and then executes the actual kitchen command. - -### Test Implementation - -#### Directory structure - -Test kitchen imposes a very specific directory structure. For more information, see the [test kitchen documentation](https://kitchen.ci/docs). However, a brief overview: - -##### Cookbooks - -The `site_cookbooks` tree contains the chef cookbooks that are run during the `kitchen converge` stage. - -**Note:** The test suites can also use recipes from other cookbooks defined in the `Berksfile`, such as our official `chef-datadog` cookbook. - -``` -. -├── site-cookbooks -│   ├── dd-agent-install-script -│   │   ├── attributes -│   │   │   └── default.rb -│   │   ├── recipes -│   │   │   └── default.rb -``` -etc. - -The `recipes` directory contains the actions that the cookbook does. By default (ie. when including the `[]` recipe to your test suite), the `default.rb` recipe is used. To target a specific recipe, include `[:]`. - -The `attributes` directory contains the default attributes of your recipes. While not mandatory (you can explicitly define all attributes in the test suites), they are useful to quickly know what can be configured in the recipe. - -**Note:** The cookbooks are run prior to an individual test. Each listed cookbook is run before any verification stage, so multi-stage tests can't do verification in between stages (like the upgrade test). - -##### Tests - -The `test/integration` tree contains the `rspec` verification tests that are run during the `kitchen verify` stage. - -``` -└── test - └── integration - ├── common - │   └── rspec - │   └── spec_helper.rb - │   └── iot_spec_helper.rb - ├── install-script - │   └── rspec - │   ├── install_script_spec.rb - │   └── spec_helper.rb -> ../../common/rspec/spec_helper.rb - │   └── iot_spec_helper.rb -> ../../common/rspec/iot_spec_helper.rb - ├── win-all-subservices - │   └── rspec - │   ├── win-all-subservices_spec.rb - │   └── spec_helper.rb -> ../../common/rspec/spec_helper.rb - ├── win-installopts - │   └── rspec - │   ├── win-installopts_spec.rb - │   └── spec_helper.rb -> ../../common/rspec/spec_helper.rb -``` - -To prevent copy/paste, and make maintenance manageable, therefore there's a group of common test definitions in `spec_helper.rb` that is shared to the other via the symbolic links. The symbolic link is necessary because chef/kitchen only copies the test files from the specific test directory that will be run to the target machine. - -The same is done for IoT-specific helpers, via the `iot_spec_helper.rb` file. - -**On Windows** symbolic links must be explicitly enabled in git prior to fetching the tree. This can be done at install time, or after the fact with `git config --global core.symlinks=true`. - -The two `spec_helper` files define helpers and groups of examples that can be used by test suites. Test suites can then add their own specific tests in their test file, and/or use the test groups and helpers defined in the `spec_helper` files. - -In particular, both `spec_helper` and `iot_spec_helper` have: -- an "install" test group, to check that the Agent is correctly installed. -- a "behavior" test group, to check various properties of the Agent. -- an "uninstall" test group, to uninstall the Agent and verify its uninstall properties (eg. no files left after uninstall). - - -#### Test definition - -Each test suite runs one or more chef recipes (usually to install the agent in various ways), defined by the `run_list:` key, and then its verifier. The verifier is assumed (by kitchen) to be in the directory that has the name of the suite. So, the suite named `dd-agent-install-script` suite runs the verifier script in `dd-agent-install-script/rspec/dd-agent-install-script_spec.rb`. - -### How to add a new test suite to the pipeline - -1. If needed, create (a) new cookbook(s) that perform(s) the install type you want to test. - -- To scaffold your cookbook, you can use the same cookbook structure as existing cookbooks in the directory -- Don't forget to add your cookbook to the `Berksfile`, otherwise Chef won't know that it's there. -- Think of the different attributes that your cookbook needs (usually, it needs a way to know which Agent version it installs, as well as a location where it can fetch the Agent package built by the pipeline), add them to the `attributes/default.rb` file. - -2. Create the new test suite file (`kitchen-azure--test.yml`). - -- The most important parts are the run list, the attributes to set for each cookbook used, and optionally a list of platforms to exclude. -- Add the suite to the list of accepted suites in `tasks/run-test-kitchen.sh`. - -**Note:** When creating kitchen resources on Azure, the kitchen Azure driver creates one resource group for each suite + test platform combination. Its name is computed as follows: -`kitchen---pl-`, with: -- `suite_name`: the kitchen test suite name, defined in `kitchen-azure--test.yml`. -- `platform_name`: the short name of the test platform, defined in the `TEST_PLATFORMS`. -- `timestamp`: a `YYYYMMDDThhmmss` timestamp (15 chars), -- `pipeline n°`: the pipeline number (7-8 chars for the foreseeable future). -- `suffix`: `a6` or `a7` (2 chars). - -Azure will throw an error if a resource group name is longer than 80 characters: `Failed to complete #create action: [{"error"=>{"code"=>"InvalidParameter", "message"=>"The entity name 'resourceGroupName' is invalid according to its validation rule: ^[^_\\W][\\w-._]{0,79}(?"resourceGroupName"}}]` - -Therefore, your test suite name + test platform short name combinations need to be short enough to not exceed the limit. - -**Note (HACK):** On some test suites, we define attributes for a cookbook named `dd-agent-rspec`. This is not a real cookbook; we're using this as a workaround to pass variables to the rspec tests (in the rspec tests, we only have access to a `dna.json` file that has the contents of `kitchen.yml`). - -3. Create the rspec test directory matching your new test suite. - -- Do not forget to create the symlinks to the `rspec_helper` files from the `common` directory if you need them. -- Remember that your main test file must be in `test/integration//_spec.rb`. - -4. Create the necessary Gitlab jobs to run your test suite on all platforms, Agent flavors and versions you want, following the existing naming conventions. - -5. Update the periodic cleanup job (`periodic_kitchen_cleanup_azure`) - -When kitchen tests are run, VMs are created in dedicated resource groups in Azure. These resource groups are prefixed with `kitchen-`. - -The periodic cleanup jobs runs the `cleanup_azure.py` script on a given list of Azure resource group prefixes. Eg.: -``` -RESOURCE_GROUP_PREFIX=kitchen-dd-agent python3 /deploy_scripts/cleanup_azure.py -``` -cleans up all resources created by test suites that start with `dd-agent`. - -If you add a new test suite that doesn't match any of the already present prefixes, then you need to add a line to the cleanup job to clean up the resources created under this new prefix. \ No newline at end of file diff --git a/test/kitchen/docs/win-all-subservices.md b/test/kitchen/docs/win-all-subservices.md deleted file mode 100644 index c73dfe50b25b1..0000000000000 --- a/test/kitchen/docs/win-all-subservices.md +++ /dev/null @@ -1,27 +0,0 @@ -## win-all-subservices.md - -### Objective - -Test the Windows command line installer options for explicitly enabling the various datadog subservices (processes, trace, and logs) - -### Installation Recipe - -Uses the \_install_windows_base recipe to do a fresh install of the agent. -1. Uses a fresh install because install options are ignored on upgrades -2. Uses the \_base recipe which allows setting of additional options - -### Test definition - -The test is successful if: -1. APM - 1. APM is enabled in the configuration file - 2. Something is listening on port 8126 - 3. there is a process in the process table called `trace-agent.exe` - 4. There is a service registered called `datadog-trace-agent` which can be queried via `sc qc` -2. Logs - 1. Logs is enabled in the configuration file -3. Process - 1. Process is enabled in the configuration file - 2. There is a process in the process table called `process-agent.exe` - 3. There is a service registered called `datadog-process-agent` which can be queried via `sc qc` - \ No newline at end of file diff --git a/test/kitchen/docs/win-installopts.md b/test/kitchen/docs/win-installopts.md deleted file mode 100644 index 1ff285bdb9613..0000000000000 --- a/test/kitchen/docs/win-installopts.md +++ /dev/null @@ -1,15 +0,0 @@ -## win-installopts - -### Objective - -Test the Windows command line installer options for tags, hostname, command port, all proxy settings, and datadog site-specific settings - -### Installation Recipe - -Uses the \_install_windows_base recipe to do a fresh install of the agent. -1. Uses a fresh install because install options are ignored on upgrades -2. Uses the \_base recipe which allows setting of additional options - -### Test definition - -Test is successful if the options are correctly written to `datadog.yaml`. The verifier reads and parses the resulting configuration file to verify the test options are correctly written. \ No newline at end of file diff --git a/test/kitchen/docs/win-no-subservices.md b/test/kitchen/docs/win-no-subservices.md deleted file mode 100644 index b6be7b425e1a5..0000000000000 --- a/test/kitchen/docs/win-no-subservices.md +++ /dev/null @@ -1,27 +0,0 @@ -## win-no-subservices.md - -### Objective - -Test the Windows command line installer options for explicitly disabling the various datadog subservices (processes, trace, and logs) - -### Installation Recipe - -Uses the \_install_windows_base recipe to do a fresh install of the agent. -1. Uses a fresh install because install options are ignored on upgrades -2. Uses the \_base recipe which allows setting of additional options - -### Test definition - -The test is successful if: -1. APM - 1. APM is disabled in the configuration file - 2. Nothing is listening on port 8126 - 3. there is no process in the process table called `trace-agent.exe` - 4. There is not a service registered called `datadog-trace-agent` which can be queried via `sc qc` -2. Logs - 1. Logs is not enabled in the configuration file -3. Process - 1. Process is disabled in the configuration file - 2. There is no process in the process table called `process-agent.exe` - 3. There is not a service registered called `datadog-process-agent` which can be queried via `sc qc` - \ No newline at end of file diff --git a/test/kitchen/drivers/azure-driver.yml b/test/kitchen/drivers/azure-driver.yml deleted file mode 100644 index 65f815b10eff4..0000000000000 --- a/test/kitchen/drivers/azure-driver.yml +++ /dev/null @@ -1,200 +0,0 @@ -<% - ENV['AZURE_LOCATION'] ||= "North Central US" - location = ENV['AZURE_LOCATION'] -%> - -<% - vm_tags = { - 'dd_agent_testing': 'dd_agent_testing' - } - vm_username = ENV['VM_USERNAME'] ? ENV['VM_USERNAME'] : "datadog" - if ENV['DD_PIPELINE_ID'] - vm_tags['pipeline_id'] = ENV['DD_PIPELINE_ID'] - else - vm_tags['pipeline_id'] = 'nopipeline' - end -%> - -provisioner: - name: chef_solo - <% if ENV['KITCHEN_CI_MOUNT_PATH'] && ENV['KITCHEN_CI_ROOT_PATH'] %> - root_path: <%= ENV['KITCHEN_CI_ROOT_PATH'] %>/kitchen - <% end %> - product_name: chef - # There is no arm64 distribution of Chef 14 for Debian. Use the Ubuntu package instead - <% if ENV['KITCHEN_PLATFORM'] == "debian" && ENV['KITCHEN_ARCH'] == "arm64" %> - download_url: https://packages.chef.io/files/stable/chef/14.15.6/ubuntu/18.04/chef_14.15.6-1_arm64.deb - product_version: 14.15.6 - <% else %> - product_version: <%= ENV['CHEF_VERSION'] ||= '14.12.9' %> - <% end %> - install_strategy: always - # the following settings make it possible to do a reboot during setup - # (necessary for FIPS tests which reboot to enable FIPS mode) - max_retries: 3 - wait_for_retry: 90 - client_rb: - client_fork: false - -driver: - name: azurerm - -driver_config: - subscription_id: <%= ENV['AZURE_SUBSCRIPTION_ID'] %> - location: <%= location %> - <% if ENV['DD_PIPELINE_ID'] %> - azure_resource_group_suffix: pl<%= ENV['DD_PIPELINE_ID'] %> - <% else %> - azure_resource_group_suffix: plnone - <% end %> - -platforms: -# Loop through two lists and output a total matrix of all possible platform + chef versions, -# for both drivers - - -<% - # TEST_PLATFORMS syntax is `short_name1,azure_full_qualified_name1|short_name2,azure_full_qualified_name1` - # TEST_PLATFORMS syntax is `short_name1,parent vhd folder,parent_vhd_name|...` - azure_test_platforms = ENV['TEST_PLATFORMS'].split('|').map { |p| p.split(',') } - cws_supported_platforms = (ENV['KITCHEN_CWS_SUPPORTED_OSVERS'] || "").split(',') - - if ENV['TEST_IMAGE_SIZE'] != "" - sizes = [ - ENV['TEST_IMAGE_SIZE'] - ] - else - sizes = [ - "Standard_D1_v2", - "Standard_A1_v2", - ] - end - - windows_sizes = [ - "Standard_D2_v4" - ] - - windows_platforms = [] - sles15_platforms = [] - - idx = 0 - azure_test_platforms.each do |platform| - idx += 1 - - host = "azure" - - # KITCHEN_PLATFORM_SUFFIX is set for non-standard Agent tests (eg. IoT Agent, FIPS) - # that use the same test suites as the standard Agent. - # This is needed because the resource group name used by the driver is computed as: - # --- - # which means that, without that KITCHEN_PLATFORM_SUFFIX, two types of tests - # running at the same time can conflict with each other if they start at the same time, - # as they try to use the same resource group name, leading to provisioning errors. - if ENV['KITCHEN_PLATFORM_SUFFIX'] - platform_name = platform[0] + "-" + ENV['KITCHEN_PLATFORM_SUFFIX'] + "-#{host}-#{ENV['KITCHEN_ARCH']}" - else - platform_name = platform[0] + "-#{host}-#{ENV['KITCHEN_ARCH']}" - end - - windows = platform_name.include?("win") - sles15 = platform_name.include?("sles-15") - debian9 = platform_name.include?("debian-9") - - if windows - windows_platforms << platform_name - size = windows_sizes[idx % windows_sizes.length] - else - if sles15 - sles15_platforms << platform_name - end - size = sizes[idx % sizes.length] - end - - # Check if we should use an ed25519 key, an rsa key or the default key - # Some newer platforms don't support rsa, while some older platforms don't support ed25519 - # In Azure, ed25519 is not supported, but the default key created by the driver works - default_key_platforms = ["ubuntu-22-04", "rhel-91", "debian-12"] - use_default_key = default_key_platforms.any? { |p| platform_name.include?(p) } - - ed25519_platforms = [] - use_ed25519 = ed25519_platforms.any? { |p| platform_name.include?(p) } - - vm_password = ENV['SERVER_PASSWORD'] - -%> - -- name: <%= platform_name %> - attributes: - color_idx: <%= idx %> - dd-agent-rspec: - enable_cws: <%= ENV['KITCHEN_CWS'] == "true" && cws_supported_platforms.include?(platform[0]) %> - <% if ENV["KITCHEN_CWS_PLATFORM"] %> - cws_platform: <%= ENV["KITCHEN_CWS_PLATFORM"] %> - <% end %> - <% if ENV['KITCHEN_CI_MOUNT_PATH'] && ENV['KITCHEN_CI_ROOT_PATH'] %> - provisioner: - command_prefix: TMPDIR=<%= ENV['KITCHEN_CI_ROOT_PATH'] %> - <% end %> - driver_config: - machine_size: <%= size %> - <% if platform[1] == "urn" %> - image_urn: <%= platform[2] %> - <% else %> - image_id: <%= platform[2] %> - <% end %> - location: <%= location %> - <% if windows %> - vm_name: ddat<%= platform[0] %> - <% else %> - vm_name: dd-agent-testing-<%= platform[0] %>-azure - <% end %> - vm_tags: - <% vm_tags.each do |key,value| %> - <%= key %>: <%= value %> - <% end %> - username: <%= vm_username %> - password: <%= vm_password %> - <% if (ENV['KITCHEN_CI_MOUNT_PATH'] && ENV['KITCHEN_CI_ROOT_PATH']) || debian9 %> - lifecycle: - post_create: - <% if ENV['KITCHEN_CI_MOUNT_PATH'] && ENV['KITCHEN_CI_ROOT_PATH'] %> - - remote: | - sudo mkdir -p <%= ENV['KITCHEN_CI_MOUNT_PATH'] %>; - sudo chmod a+rwx <%= ENV['KITCHEN_CI_MOUNT_PATH'] %>; - sudo ln -s <%= ENV['KITCHEN_CI_MOUNT_PATH'] %> <%= ENV['KITCHEN_CI_ROOT_PATH'] %>; - <% end %> - <% if debian9 %> - - local: echo 'Updating the sources.list file to use archive.debian.org for the stretch suites' - - remote: | - # Stretch has been moved to archive.debian.org - # See https://lists.debian.org/debian-devel-announce/2023/03/msg00006.html - sudo sed -i 's/debian-archive.trafficmanager.net/archive.debian.org/g' /etc/apt/sources.list - # The stretch-updates dist doesn't exist in archive.debian.org/debian - sudo sed -i '/stretch-updates/d' /etc/apt/sources.list - <% end %> - <% end %> - - transport: - <% if windows %> - name: winrm - username: <%= vm_username %> - password: <%= vm_password %> - <% else %> - connection_retries: 30 - connection_retry_sleep: 2 - <% if use_default_key %> - ssh_key: - <% elsif use_ed25519 %> - ssh_key: <%= ENV['KITCHEN_ED25519_SSH_KEY_PATH'] %> - <% else %> - ssh_key: <%= ENV['KITCHEN_RSA_SSH_KEY_PATH'] %> - <% end %> - <% end %> - - verifier: - downloads: - "/tmp/junit.tar.gz": junit-<%= platform_name %>.tar.gz - "/tmp/testjson.tar.gz": testjson/<%= platform_name %>/testjson.tar.gz - "/tmp/kitchen/rspec.xml": kitchen-rspec-<%= platform_name %>.xml - -<% end %> diff --git a/test/kitchen/drivers/ec2-driver.yml b/test/kitchen/drivers/ec2-driver.yml deleted file mode 100644 index 57359d902dd5d..0000000000000 --- a/test/kitchen/drivers/ec2-driver.yml +++ /dev/null @@ -1,215 +0,0 @@ -provisioner: - name: chef_solo - <% if ENV['KITCHEN_CI_MOUNT_PATH'] && ENV['KITCHEN_CI_ROOT_PATH'] %> - root_path: <%= ENV['KITCHEN_CI_ROOT_PATH'] %>/kitchen - <% end %> - product_name: chef - # There is no arm64 distribution of Chef 14 for Debian. Use the Ubuntu package instead - <% if ENV['KITCHEN_PLATFORM'] == "debian" && ENV['KITCHEN_ARCH'] == "arm64" %> - download_url: https://packages.chef.io/files/stable/chef/14.15.6/ubuntu/18.04/chef_14.15.6-1_arm64.deb - product_version: 14.15.6 - <% elsif (ENV['KITCHEN_PLATFORM'] == "amazonlinux" || ENV['KITCHEN_PLATFORM'] == "suse") && ENV['KITCHEN_ARCH'] == "arm64" %> - # There is no arm64 distribution of Chef 14 for Amazon Linux 2022 nor SLES 15. Use the CentOS package instead - download_url: https://packages.chef.io/files/stable/chef/14.15.6/el/7/chef-14.15.6-1.el7.aarch64.rpm - product_version: 14.15.6 - <% elsif ENV['KITCHEN_PLATFORM'] == "amazonlinux" && ENV['KITCHEN_ARCH'] == "x86_64" %> - # There is no x86_64 distribution of Chef 14 for Amazon Linux 2022. Use the CentOS package instead - download_url: https://packages.chef.io/files/stable/chef/14.15.6/el/7/chef-14.15.6-1.el7.x86_64.rpm - product_version: 14.15.6 - <% else %> - product_version: <%= ENV['CHEF_VERSION'] ||= '14.12.9' %> - <% end %> - install_strategy: always - # the following settings make it possible to do a reboot during setup - # (necessary for FIPS tests which reboot to enable FIPS mode) - max_retries: 3 - wait_for_retry: 90 - client_rb: - client_fork: false - -driver: - name: ec2 - <% if ENV['KITCHEN_EC2_SSH_KEY_ID'] %> - aws_ssh_key_id: <%= ENV['KITCHEN_EC2_SSH_KEY_ID'] %> - <% end %> - <% if ENV['KITCHEN_EC2_SG_IDS'] %> - security_group_ids: <%= [ENV['KITCHEN_EC2_SG_IDS']] %> - <% else %> - security_group_ids: [ "sg-7fedd80a","sg-46506837" ] - <% end %> - # Fix an edge case where IMDSv2 doesn't work for this specific ubuntu AMI - # Using this AMI with any other (e.g : KITCHEN_OSVERS: ubuntu-16-04-4.4,ubuntu-18-04) will use IMDSv2 and fail. - <% if ENV['KITCHEN_OSVERS'] != "ubuntu-16-04-4.4" %> - metadata_options: - http_tokens: required - http_put_response_hop_limit: 1 - instance_metadata_tags: enabled - <% end %> - region: <%= ENV['KITCHEN_EC2_REGION'] ||= "us-east-1" %> - instance_type: <%= ENV['KITCHEN_EC2_INSTANCE_TYPE'] ||= 't3.xlarge' %> - associate_public_ip: false - subnet_id: <%= ENV['KITCHEN_EC2_SUBNET'] ||= 'subnet-b89e00e2' %> - iam_profile_name: <%= ENV['KITCHEN_EC2_IAM_PROFILE_NAME'] ||= nil %> - <% if ENV['KITCHEN_EC2_SPOT_PRICE'] %> - spot_price: <%= ENV['KITCHEN_EC2_SPOT_PRICE'] %> - <% end %> - block_duration_minutes: <%= ENV['KITCHEN_EC2_SPOT_DURATION'] ||= '60' %> - tags: - Name: ci-datadog-agent-kitchen - Team: agent-devx-loops - PipelineId: <%= ENV['DD_PIPELINE_ID'] %> - CreatedBy: datadog-agent-kitchen-tests - Creator: <%= ENV['KITCHEN_EC2_TAG_CREATOR'] || "datadog-agent-kitchen-user" %> - -platforms: -# Loop through two lists and output a total matrix of all possible platform + chef versions, -# for both drivers - - -<% - # TEST_PLATFORMS syntax is `short_name1,ami|...` - ec2_test_platforms = ENV['TEST_PLATFORMS'].split('|').map { |p| p.split(',') } - cws_supported_platforms = (ENV['KITCHEN_CWS_SUPPORTED_OSVERS'] || "").split(',') - - windows_platforms = [] - sles15_platforms = [] - - idx = 0 - ec2_test_platforms.each do |platform| - idx += 1 - - host = "ec2" - platform_name = platform[0] + "-#{host}-#{ENV['KITCHEN_ARCH']}" - - windows = platform_name.include?("win") - sles15 = platform_name.include?("sles-15") - al2022 = platform_name.include?("amazonlinux2022") - al2023 = platform_name.include?("amazonlinux2023") - fedora = platform_name.include?("fedora") - rocky = platform_name.include?("rocky") - - if windows - windows_platforms << platform_name - else - if sles15 - sles15_platforms << platform_name - end - end - - # Check if we should use allow RSA key usage via user_data - allow_rsa_key_platforms = ["ubuntu-22-04"] - allow_rsa_key = allow_rsa_key_platforms.any? { |p| platform_name.include?(p) } - - vm_username = ENV['VM_USERNAME'] ? ENV['VM_USERNAME'] : "datadog" - vm_password = ENV['SERVER_PASSWORD'] - -%> - -- name: <%= platform_name %> - attributes: - color_idx: <%= idx %> - dd-agent-rspec: - enable_cws: <%= ENV['KITCHEN_CWS'] == "true" && cws_supported_platforms.include?(platform[0]) %> - <% if ENV["KITCHEN_CWS_PLATFORM"] %> - cws_platform: <%= ENV["KITCHEN_CWS_PLATFORM"] %> - <% end %> - <% if ENV["DOCKER_REGISTRY_LOGIN"] && ENV["DOCKER_REGISTRY_PASSWORD"] %> - docker: - registry: <%= ENV["DOCKER_REGISTRY_URL"] %> - username: <%= ENV["DOCKER_REGISTRY_LOGIN"] %> - password: <%%= ENV["DOCKER_REGISTRY_PASSWORD"] %> - <% end %> - <% if ENV['KITCHEN_CI_MOUNT_PATH'] && ENV['KITCHEN_CI_ROOT_PATH'] %> - provisioner: - command_prefix: TMPDIR=<%= ENV['KITCHEN_CI_ROOT_PATH'] %> - <% end %> - driver: - <% if windows %> - connection_timeout: 20 - connection_retries: 40 - retryable_tries: 600 - connection_retry_sleep: 20 - max_wait_until_ready: 1200 - <% end %> - image_id: <%= platform[1] %> - block_device_mappings: - <% if ENV['KITCHEN_ARCH'] == "arm64" %> - - device_name: <%= ENV['KITCHEN_EC2_DEVICE_NAME'] || "/dev/sda1" %> - <% else %> - - device_name: <%= ENV['KITCHEN_EC2_DEVICE_NAME'] || "/dev/xvda" %> - <% end %> - ebs: - volume_type: gp2 - volume_size: 100 - delete_on_termination: true - <% if allow_rsa_key || al2022 || al2023 || fedora %> - user_data: | - #!/bin/sh - <% end %> - <% if allow_rsa_key %> - echo PubkeyAcceptedKeyTypes=+ssh-rsa >> /etc/ssh/sshd_config - service ssh reload - <% end %> - <% if al2022 || al2023 || fedora %> - sudo dnf install -y libxcrypt-compat - <% end %> - <% if (ENV['KITCHEN_CI_MOUNT_PATH'] && ENV['KITCHEN_CI_ROOT_PATH']) || al2022 || al2023 || fedora %> - lifecycle: - post_create: - <% end %> - <% if ENV['KITCHEN_CI_MOUNT_PATH'] && ENV['KITCHEN_CI_ROOT_PATH'] %> - - remote: | - sudo mkdir -p <%= ENV['KITCHEN_CI_MOUNT_PATH'] %>; - sudo chmod a+rwx <%= ENV['KITCHEN_CI_MOUNT_PATH'] %>; - sudo ln -s <%= ENV['KITCHEN_CI_MOUNT_PATH'] %> <%= ENV['KITCHEN_CI_ROOT_PATH'] %>; - <% end %> - <% if al2022 || al2023 || fedora %> - # Add a hook after creating the host, to make sure we wait until the user_data - # script has been run. - # Snippet taken from the kitchen docs: https://kitchen.ci/docs/reference/lifecycle-hooks/ - - local: echo 'Awaiting cloud-init completion' - - remote: | - declare i=0; - declare wait=5; - declare timeout=300; - while true; do - [ -f /var/lib/cloud/instance/boot-finished ] && break; - if [ ${i} -ge ${timeout} ]; then - echo "Timed out after ${i}s waiting for cloud-init to complete"; - exit 1; - fi; - echo "Waited ${i}/${timeout}s for cloud-init to complete, retrying in ${wait} seconds" - sleep ${wait}; - let i+=${wait}; - done; - <% end %> - verifier: - downloads: - "/tmp/junit.tar.gz": junit-<%= platform_name %>.tar.gz - "/tmp/testjson.tar.gz": testjson/<%= platform_name %>/testjson.tar.gz - "/tmp/kitchen/rspec.xml": kitchen-rspec-<%= platform_name %>.xml - - transport: - <% if windows %> - name: winrm - elevated: true - username: administrator - - <% else %> - connection_retries: 30 - connection_retry_sleep: 2 - max_wait_until_ready: 30 - <% end %> - <% if sles15 || al2022 || al2023 %> - # The AWS EC2 driver doesn't recognize Amazon Linux 2022 yet, - # therefore it doesn't know that it needs to use ec2-user. - username: ec2-user - <% end %> - <% if rocky %> - username: rocky - <% end %> - <% if ENV['KITCHEN_EC2_SSH_KEY_PATH'] %> - ssh_key: <%= ENV['KITCHEN_EC2_SSH_KEY_PATH'] %> - <% end %> - -<% end %> diff --git a/test/kitchen/drivers/hyperv-driver.yml b/test/kitchen/drivers/hyperv-driver.yml deleted file mode 100644 index 3626cf008479f..0000000000000 --- a/test/kitchen/drivers/hyperv-driver.yml +++ /dev/null @@ -1,89 +0,0 @@ -provisioner: - name: chef_solo - product_name: chef - product_version: 13.9.4 - install_strategy: always - # the following settings make it possible to do a reboot during setup - # (necessary for FIPS tests which reboot to enable FIPS mode) - max_retries: 3 - wait_for_retry: 90 - client_rb: - client_fork: false - -driver: - name: hyperv - vm_switch: <%= ENV['KITCHEN_HYPERV_SWITCH'] %> - dynamic_memory: true - <% if ENV['KITCHEN_HYPERV_MEM_MIN'] %> - dynamic_memory_min_bytes: <%= ENV['KITCHEN_HYPERV_MEM_MIN'] %> - memory_startup_bytes: <%= ENV['KITCHEN_HYPERV_MEM_MIN'] %> - <% else %> - dynamic_memory_min_bytes: 2GB - memory_startup_bytes: 2GB - <% end %> - <% if ENV['KITCHEN_HYPERV_MEM_MAX'] %> - dynamic_memory_max_bytes: <%= ENV['KITCHEN_HYPERV_MEM_MAX'] %> - <% else %> - dynamic_memory_max_bytes: 8GB - <% end %> - <% if ENV['KITCHEN_HYPERV_PROC_COUNT'] %> - processor_count: <%= ENV['KITCHEN_HYPERV_PROC_COUNT'] %> - <% end %> - -platforms: -# Loop through two lists and output a total matrix of all possible platform + chef versions, -# for both drivers - - -<% - # TEST_PLATFORMS syntax is `short_name1,parent vhd folder,parent_vhd_name|...` - hyperv_test_platforms = ENV['TEST_PLATFORMS'].split('|').map { |p| p.split(',') } - - windows_platforms = [] - sles15_platforms = [] - - idx = 0 - hyperv_test_platforms.each do |platform| - idx += 1 - - host = "hyperv" - platform_name = platform[0] + "-#{host}" - - windows = platform_name.include?("win") - sles15 = platform_name.include?("sles-15") - - if windows - windows_platforms << platform_name - end - if sles15 - sles15_platforms << platform_name - end - - vm_username = ENV['VM_USERNAME'] ? ENV['VM_USERNAME'] : "datadog" - vm_password = ENV['SERVER_PASSWORD'] - vm_hyperv_switch = ENV['KITCHEN_HYPERV_SWITCH'] ? ENV['KITCHEN_HYPERV_SWITCH'] : "public_eth" - -%> - -- name: <%= platform_name %> - driver: - name: hyperv - parent_vhd_folder: <%= platform[1] %> - parent_vhd_name: <%= platform[2] %> - vm_switch: <%= vm_hyperv_switch %> - driver_config: - username: <%= vm_username %> - password: <%= vm_password %> - - transport: - <% if windows %> - name: winrm - username: <%= vm_username %> - password: <%= vm_password %> - <% else %> - connection_retries: 30 - connection_retry_sleep: 2 - ssh_key: <%= ENV['KITCHEN_SSH_KEY_PATH'] %> - <% end %> - -<% end %> \ No newline at end of file diff --git a/test/kitchen/drivers/vagrant-driver.yml b/test/kitchen/drivers/vagrant-driver.yml deleted file mode 100644 index 846174d69e1d9..0000000000000 --- a/test/kitchen/drivers/vagrant-driver.yml +++ /dev/null @@ -1,54 +0,0 @@ ---- -driver: - name: vagrant - provider: <%= ENV['KITCHEN_VAGRANT_PROVIDER'] %> - - <% if ENV['KITCHEN_VAGRANT_PROVIDER'] != "hyperv" && ENV['KITCHEN_VAGRANT_SYNCED_FOLDER'] %> - # Hyper-V doesn't support synced folders - synced_folders: - - ["<%= ENV['KITCHEN_VAGRANT_SYNCED_FOLDER'].tr('\\', '/') %>", "/datadog-agent"] - <% end %> - -provisioner: - name: chef_solo - product_name: chef - install_strategy: always - # Use the same product_version as the CI kitchen test in Azure. - product_version: 14.12.9 - # the following settings make it possible to do a reboot during setup - # (necessary for FIPS tests which reboot to enable FIPS mode) - max_retries: 3 - wait_for_retry: 90 - client_rb: - client_fork: false - -platforms: -<% - ENV['TEST_PLATFORMS'] ||= "centos7,roboxes/centos7|centos8,roboxes/centos8" - cws_supported_platforms = (ENV['KITCHEN_CWS_SUPPORTED_OSVERS'] || "").split(',') - test_platforms = ENV['TEST_PLATFORMS'].split('|').map { |p| p.split(',') } - test_platforms.each do |platform| -%> - - name: <%= platform[0] %> - attributes: - dd-agent-rspec: - enable_cws: <%= ENV['KITCHEN_CWS'] && cws_supported_platforms.include?(platform[0]) %> - driver: - box: <%= platform[1] %> - # Always use linked_clone when possible, it's so much faster - linked_clone: true - <% if ENV['KITCHEN_VAGRANT_PROVIDER'] == "virtualbox" %> - gui: true - <% end %> - <% if platform[1].include?('opensuse') %> - customize: - disk_bus: sata - <% end %> -# uncomment below to locally inspect junit tarballs used for CI visibility -# verifier: -# downloads: -# "/tmp/junit.tar.gz": junit-<%= platform[0] %>.tar.gz -# "/tmp/testjson.tar.gz": testjson/<%= platform[0] %>/testjson.tar.gz -<% - end -%> diff --git a/test/kitchen/platforms.json b/test/kitchen/platforms.json deleted file mode 100644 index 6f3d87834c60c..0000000000000 --- a/test/kitchen/platforms.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "centos": { - "azure": { - "x86_64": { - "centos-76": "urn,OpenLogic:CentOS:7.6:7.6.201909120", - "centos-77": "urn,OpenLogic:CentOS:7.7:7.7.201912090", - "rhel-81": "urn,RedHat:RHEL:8.1:8.1.2021040910", - "rhel-85": "urn,RedHat:RHEL:8_5:8.5.2021121501", - "rhel-91": "urn,RedHat:RHEL:9_1:9.1.2022112113" - } - }, - "ec2": { - "x86_64": { - "centos-79": "ami-036de472bb001ae9c", - "rhel-86": "ami-031eff1ae75bb87e4", - "rocky-92": "ami-08f362c39d03a4eb5" - }, - "arm64": { - "centos-79": "ami-0cb7a00afccf30559", - "rhel-86": "ami-0238411fb452f8275" - } - }, - "vagrant": { - "x86_64": { - "centos-76": "bento/centos-7.6", - "centos7": "roboxes/centos7", - "centos8": "roboxes/centos8" - } - } - }, - "debian": { - "azure": { - "x86_64": { - "debian-8": "urn,credativ:Debian:8:8.0.201901221", - "debian-9": "urn,credativ:Debian:9:9.20200722.0", - "debian-10": "urn,Debian:debian-10:10:0.20230802.1460", - "debian-11": "urn,Debian:debian-11:11:0.20230501.1367", - "debian-12": "urn,Debian:debian-12:12:0.20230802.1460" - } - }, - "ec2": { - "x86_64": { - "debian-10": "ami-067a196d70cb53732", - "debian-11": "ami-0607e701db389efe7", - "debian-12": "ami-07edaec601cf2b6d3" - }, - "arm64": { - "debian-10": "ami-0b6ee4b8f4aa91fb4", - "debian-11": "ami-00988b9ead6afb0b1", - "debian-12": "ami-02aab8d5301cb8d68" - } - } - }, - "fedora": { - "ec2": { - "x86_64": { - "fedora-36": "ami-05e7ccec1e0408397", - "fedora-37": "ami-032e9a5778bde5a1a" - }, - "arm64": { - "fedora-36": "ami-0487fbde1f898f0f1", - "fedora-37": "ami-0e9221491fc51fca6" - } - } - }, - "suse": { - "azure": { - "x86_64": { - "sles-12": "urn,SUSE:sles-12-sp5-byos:gen1:2023.03.21", - "sles-15": "urn,SUSE:sles-15-sp2-byos:gen1:2022.11.09", - "opensuse-15-3": "urn,SUSE:opensuse-leap-15-3:gen1:2022.01.28" - } - }, - "ec2": { - "arm64": { - "sles-15": "ami-02f7663f03ca92749" - } - } - }, - "ubuntu": { - "azure": { - "x86_64": { - "ubuntu-14-04": "urn,Canonical:UbuntuServer:14.04.5-LTS:14.04.201905140", - "ubuntu-16-04": "urn,Canonical:UbuntuServer:16.04.0-LTS:16.04.202106110", - "ubuntu-18-04-0": "urn,Canonical:UbuntuServer:18.04-LTS:18.04.201809110", - "ubuntu-18-04": "urn,Canonical:UbuntuServer:18.04-LTS:18.04.201906040", - "ubuntu-18-04-3": "urn,Canonical:UbuntuServer:18.04-LTS:18.04.201912180", - "ubuntu-20-04": "urn,Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202004230", - "ubuntu-20-04-2": "urn,Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202107200", - "ubuntu-22-04": "urn,Canonical:0001-com-ubuntu-server-jammy:22_04-lts:22.04.202205060" - } - }, - "ec2": { - "x86_64": { - "ubuntu-16-04": "ami-089043ae24872fe78", - "ubuntu-18-04": "ami-015715c1584e7243c", - "ubuntu-20-04": "ami-0ffb8e1df897204c4", - "ubuntu-22-04": "ami-02e99c6973f5a184a", - "ubuntu-23-04": "ami-09c5d86a379ab69a5", - "ubuntu-23-10": "ami-0949b45ef274e55a1" - }, - "arm64": { - "ubuntu-18-04": "ami-002c0df0f55a14f82", - "ubuntu-20-04": "ami-0ccf50ab09c6df2d4", - "ubuntu-20-04-2": "ami-023f1e40b096c3ebc", - "ubuntu-21-04": "ami-044f0ceee8e885e87", - "ubuntu-22-04": "ami-0f1d4680f8b775120", - "ubuntu-23-04": "ami-05fab5da2d7fe0b0b", - "ubuntu-23-10": "ami-0dea732dd5f1da0a8" - } - }, - "vagrant": { - "x86_64": { - "ubuntu-16-04": "bento/ubuntu-16.04" - }, - "arm64": { - "ubuntu-20-04": "bytesguy/ubuntu-server-20.04-arm64", - "ubuntu-22-04": "brycekahle/ubuntu-22.04-arm64" - } - } - }, - "oracle": { - "azure": { - "x86_64": { - "oracle-7-9": "urn,Oracle:Oracle-Linux:ol79:7.9.9" - } - } - }, - "amazonlinux": { - "ec2": { - "x86_64": { - "amazonlinux2-4-14": "ami-038b3df3312ddf25d", - "amazonlinux2-5-10": "ami-06a0cd9728546d178", - "amazonlinux2022-5-15": "ami-0f0f00c2d082c52ae", - "amazonlinux2023": "ami-064ed2d3fc01d3ec1" - }, - "arm64": { - "amazonlinux2-4-14": "ami-090230ed0c6b13c74", - "amazonlinux2-5-10": "ami-09e51988f56677f44", - "amazonlinux2022-5-15": "ami-0acc51c3357f26240", - "amazonlinux2023": "ami-0a515c154e76934f7" - } - } - }, - "windows": { - "azure": { - "x86_64": { - "win2016": "urn,MicrosoftWindowsServer:WindowsServer:2016-Datacenter-Server-Core:latest", - "win2019": "urn,MicrosoftWindowsServer:WindowsServer:2019-Datacenter-Core:latest", - "win2019cn": "urn,MicrosoftWindowsServer:WindowsServer:2019-Datacenter-zhcn:latest", - "win2022": "urn,MicrosoftWindowsServer:WindowsServer:2022-datacenter-core:latest" - } - }, - "ec2": { - "x86_64": { - "win2016": "ami-03bee25bb430166e4", - "comment-win2016": "# Windows_Server-2016-English-Core-Containers-2022.12.14", - "win2019": "ami-01cc656499debb56a", - "comment-win2019": "Windows_Server-2019-English-Core-ContainersLatest-2023.01.19", - "win2022": "ami-0176b2659d40f0696", - "comment-win2022": "Windows_Server-2022-English-Core-ContainersLatest-2023.01.19" - } - }, - "vagrant": { - "x86_64": { - "win2022": "cdaf/WindowsServer2022", - "comment-win2022": "Windows Server 2022 Standard Desktop Experience Evaluation", - "win2022-dc": "cdaf/WindowsServerDC", - "comment-win2022-dc": "Windows Server 2022 Standard Evaluation + Domain Controller", - "win2019-core": "cdaf/WindowsServerCore", - "comment-win2019-core": "Windows Server 2019 Standard Core Evaluation" - } - } - } -} diff --git a/test/kitchen/site-cookbooks/dd-agent-5/README.md b/test/kitchen/site-cookbooks/dd-agent-5/README.md deleted file mode 100644 index 21c8535d9b566..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-5/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# dd-agent-install cookbook - - -This installs the Datadog Agent. -The Windows installation on the Chef Cookbook is broken for Agent 6. -This will be a temporary solution. diff --git a/test/kitchen/site-cookbooks/dd-agent-5/attributes/default.rb b/test/kitchen/site-cookbooks/dd-agent-5/attributes/default.rb deleted file mode 100644 index aefa5307d24a7..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-5/attributes/default.rb +++ /dev/null @@ -1,26 +0,0 @@ -default['dd-agent-5']['api_key'] = nil -default['dd-agent-5']['url'] = nil - -if node['platform_family'] == 'windows' - default['dd-agent-5']['agent_package_retries'] = nil - default['dd-agent-5']['agent_package_retry_delay'] = nil - default['dd-agent-5']['windows_agent_checksum'] = nil - default['dd-agent-5']['windows_version'] = nil - default['dd-agent-5']['windows_agent_filename'] = "ddagent-cli-latest" - default['dd-agent-5']['windows_agent_url'] = 'https://ddagent-windows-stable.s3.amazonaws.com/' - default['dd-agent-5']['agent_install_options'] = nil - default['dd-agent-5']['config_dir'] = "#{ENV['ProgramData']}/Datadog" - default['dd-agent-5']['agent_name'] = 'DatadogAgent' - default['dd-agent-5']['agent6_config_dir'] = "#{ENV['ProgramData']}/Datadog" -else - default['dd-agent-5']['config_dir'] = '/etc/dd-agent' - default['dd-agent-5']['working_dir'] = '/tmp/install-script/' - default['dd-agent-5']['install_script_url'] = 'https://raw.githubusercontent.com/DataDog/dd-agent/master/packaging/datadog-agent/source/install_agent.sh' -end - -# Enable the agent to start at boot -default['dd-agent-5']['agent_enable'] = true -default['dd-agent-5']['agent_start'] = true -default['dd-agent-5']['enable_trace_agent'] = true -default['dd-agent-5']['enable_process_agent'] = true - diff --git a/test/kitchen/site-cookbooks/dd-agent-5/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-5/metadata.rb deleted file mode 100644 index 0bb3e5e3876bd..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-5/metadata.rb +++ /dev/null @@ -1,9 +0,0 @@ -name "dd-agent-5" -maintainer "Datadog" -description "Installs the Datadog Agent5" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.2.0" - -depends 'apt', '>= 2.1.0' -depends 'datadog' -depends 'yum', '< 7.0.0' diff --git a/test/kitchen/site-cookbooks/dd-agent-5/recipes/_install_linux.rb b/test/kitchen/site-cookbooks/dd-agent-5/recipes/_install_linux.rb deleted file mode 100644 index 2c06921195c42..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-5/recipes/_install_linux.rb +++ /dev/null @@ -1,68 +0,0 @@ -# -# Cookbook Name:: dd-agent-install-script -# Recipe:: default -# -# Copyright (C) 2013-present Datadog -# -# All rights reserved - Do Not Redistribute -# - -wrk_dir = node['dd-agent-5']['working_dir'] -is_windows = node['platform_family'] == 'windows' - -directory wrk_dir do - recursive true -end - -remote_file "#{wrk_dir}/install-script" do - source node['dd-agent-5']['install_script_url'] -end - -# apt-get update fails a LOT on our droplets, so ignore these failures -# TODO: assess whether we should do the same thing in the install script itself -execute 'ignore "apt-get update" failure' do - cwd wrk_dir - command "sed -i 's/apt-get update$/apt-get update || true/' install-script" -end - - -execute 'run agent install script' do - cwd wrk_dir - command <<-EOF - sed -i '1aDD_API_KEY=#{node['dd-agent-5']['api_key']}' install-script - bash install-script - sleep 10 - EOF - live_stream true -end - -agent_config_file = ::File.join(node['dd-agent-5']['config_dir'], 'datadog.conf') -template agent_config_file do - def template_vars - dd_url = 'https://app.datadoghq.com' - - api_keys = [node['dd-agent-5']['api_key']] - dd_urls = [dd_url] - { - :api_keys => api_keys, - :dd_urls => dd_urls - } - end - if is_windows - owner 'Administrators' - rights :full_control, 'Administrators' - inherits false - else - owner 'dd-agent' - group 'root' - mode '640' - end - variables( - if respond_to?(:lazy) - lazy { template_vars } - else - template_vars - end - ) - sensitive true if Chef::Resource.instance_methods(false).include?(:sensitive) -end \ No newline at end of file diff --git a/test/kitchen/site-cookbooks/dd-agent-5/recipes/_install_windows_base.rb b/test/kitchen/site-cookbooks/dd-agent-5/recipes/_install_windows_base.rb deleted file mode 100644 index 848780762329a..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-5/recipes/_install_windows_base.rb +++ /dev/null @@ -1,73 +0,0 @@ -# -# Cookbook Name:: dd-agent-5 -# Recipe:: _install_windows_base -# -# Copyright (C) 2019-present Datadog -# -# All rights reserved - Do Not Redistribute -# - -package_retries = node['dd-agent-5']['agent_package_retries'] -package_retry_delay = node['dd-agent-5']['agent_package_retry_delay'] -dd_agent_version = node['dd-agent-5']['windows_version'] -dd_agent_filename = node['dd-agent-5']['windows_agent_filename'] - -dd_agent_installer_basename = dd_agent_filename - -temp_file_basename = ::File.join(Chef::Config[:file_cache_path], 'ddagent-cli').gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) - -dd_agent_installer = "#{dd_agent_installer_basename}.msi" -temp_file = "#{temp_file_basename}.msi" -installer_type = :msi -# Agent >= 5.12.0 installs per-machine by default, but specifying ALLUSERS=1 shouldn't affect the install -agent_install_options = node['dd-agent-5']['agent_install_options'] -install_options = "/norestart ALLUSERS=1 #{agent_install_options}" -use_windows_package_resource = true - -agent_config_file = ::File.join(node['dd-agent-5']['config_dir'], 'datadog.conf') - -# Set the Agent service enable or disable -agent_enable = node['dd-agent-5']['agent_enable'] ? :enable : :disable -# Set the correct Agent startup action -agent_start = node['dd-agent-5']['agent_start'] ? :start : :stop - -package 'Datadog Agent removal' do - package_name 'Datadog Agent' - action :nothing -end - -source_url = node['dd-agent-5']['windows_agent_url'] -if !source_url.end_with? '/' - source_url += '/' -end -source_url += dd_agent_installer - - # Download the installer to a temp location -remote_file temp_file do - source source_url - checksum node['dd-agent-5']['windows_agent_checksum'] if node['dd-agent-5']['windows_agent_checksum'] - retries package_retries unless package_retries.nil? - retry_delay package_retry_delay unless package_retry_delay.nil? - # As of v1.37, the windows cookbook doesn't upgrade the package if a newer version is downloaded - # As a workaround uninstall the package first if a new MSI is downloaded - notifies :remove, 'package[Datadog Agent removal]', :immediately -end - -execute "install-agent" do - command "start /wait msiexec /log install.log /q /i #{temp_file} #{install_options}" - status_out = `sc interrogate datadogagent 2>&1` - puts status_out - action :run -end - -service 'datadog-agent' do - service_name node['dd-agent-5']['agent_name'] - action [agent_enable, agent_start] - supports :restart => true, :start => true, :stop => true - subscribes :restart, "template[#{agent_config_file}]", :delayed unless node['dd-agent-5']['agent_start'] == false - restart_command "powershell -Command \"restart-service -Force -Name datadogagent\"" - # HACK: the restart can fail when we hit systemd's restart limits (by default, 5 starts every 10 seconds) - # To workaround this, retry once after 5 seconds, and a second time after 10 seconds - retries 2 - retry_delay 5 - end diff --git a/test/kitchen/site-cookbooks/dd-agent-5/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-5/recipes/default.rb deleted file mode 100644 index dd46c2774cbcf..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-5/recipes/default.rb +++ /dev/null @@ -1,15 +0,0 @@ -# -# Cookbook Name:: dd-agent-install -# Recipe:: default -# -# Copyright (C) 2013-present Datadog -# -# All rights reserved - Do Not Redistribute -# -require 'uri' - -if node['platform_family'] == 'windows' - include_recipe 'dd-agent-5::_install_windows_base' -else - include_recipe 'dd-agent-5::_install_linux' -end diff --git a/test/kitchen/site-cookbooks/dd-agent-5/templates/datadog.conf.erb b/test/kitchen/site-cookbooks/dd-agent-5/templates/datadog.conf.erb deleted file mode 100644 index 21104977bbaa3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-5/templates/datadog.conf.erb +++ /dev/null @@ -1,3 +0,0 @@ -[Main] -dd_url: <%= @dd_urls.join(',') %> -api_key: <%= @api_keys.join(',') %> diff --git a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/.gitignore b/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/.gitignore deleted file mode 100644 index 45b891c93cfc3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.vagrant -Berksfile.lock -*~ -*# -.#* -\#*# -.*.sw[a-z] -*.un~ -/cookbooks - -# Bundler -Gemfile.lock -bin/* -.bundle/* - diff --git a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/Berksfile b/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/Berksfile deleted file mode 100644 index c4bb297b7275b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode - -metadata diff --git a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/Gemfile b/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/README.md b/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/README.md deleted file mode 100644 index 553e0565c0df3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# dd-agent-disable-system-repos cookbook - -Cookbook that disables all system package repositories (if applicable) diff --git a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/chefignore b/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/chefignore deleted file mode 100644 index a6de14221d876..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/chefignore +++ /dev/null @@ -1,96 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -## COMPILED ## -############## -a.out -*.o -*.pyc -*.so -*.com -*.class -*.dll -*.exe -*/rdoc/ - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/metadata.rb deleted file mode 100644 index 2a0578c2e67e1..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/metadata.rb +++ /dev/null @@ -1,5 +0,0 @@ -name "dd-agent-disable-system-repos" -maintainer "Datadog" -description "Cookbook that disables all system package repositories (if applicable)" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.0.1" diff --git a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/recipes/default.rb deleted file mode 100644 index 17ed9c2fb9e6c..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/recipes/default.rb +++ /dev/null @@ -1,20 +0,0 @@ -# -# Cookbook Name:: dd-agent-disable-system-repos -# Recipe:: default -# -# Copyright (C) 2021-present Datadog -# -# All rights reserved - Do Not Redistribute -# - -if ['redhat', 'centos', 'fedora'].include?(node[:platform]) - execute 'disable all yum repositories' do - command 'yum-config-manager --disable "*"' - end -elsif ['suse', 'opensuseleap'].include?(node[:platform]) - execute 'disable all zypper repositories' do - # Zypper appears to be running when the VM starts, so we - # wait for up to 2 minutes for it to release its lock - command 'ZYPP_LOCK_TIMEOUT=120 zypper mr -da' - end -end diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/.gitignore b/test/kitchen/site-cookbooks/dd-agent-import-conf/.gitignore deleted file mode 100644 index 45b891c93cfc3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.vagrant -Berksfile.lock -*~ -*# -.#* -\#*# -.*.sw[a-z] -*.un~ -/cookbooks - -# Bundler -Gemfile.lock -bin/* -.bundle/* - diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/Berksfile b/test/kitchen/site-cookbooks/dd-agent-import-conf/Berksfile deleted file mode 100644 index c4bb297b7275b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode - -metadata diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/Gemfile b/test/kitchen/site-cookbooks/dd-agent-import-conf/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/README.md b/test/kitchen/site-cookbooks/dd-agent-import-conf/README.md deleted file mode 100644 index b12eb7c3a539b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# dd-agent-import-conf cookbook - -Only used while upgrading an Agent 5 to an Agent 6. -This way, we can have a generic cookbook to setup an Agent 6. diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/attributes/default.rb b/test/kitchen/site-cookbooks/dd-agent-import-conf/attributes/default.rb deleted file mode 100644 index 163b2c7f0c35c..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/attributes/default.rb +++ /dev/null @@ -1,13 +0,0 @@ -default['dd-agent-import-conf']['api_key'] = nil - -if node['platform_family'] == 'windows' - default['dd-agent-import-conf']['config_dir'] = "#{ENV['ProgramData']}/Datadog" - default['dd-agent-import-conf']['agent_name'] = 'DatadogAgent' - default['dd-agent-import-conf']['agent6_config_dir'] = "#{ENV['ProgramData']}/Datadog" -else - default['dd-agent-import-conf']['agent6_config_dir'] = '/etc/datadog-agent' - default['dd-agent-import-conf']['config_dir'] = '/etc/dd-agent' - default['dd-agent-import-conf']['agent_name'] = 'datadog-agent' -end - -default['dd-agent-import-conf']['agent_start'] = true diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/chefignore b/test/kitchen/site-cookbooks/dd-agent-import-conf/chefignore deleted file mode 100644 index a6de14221d876..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/chefignore +++ /dev/null @@ -1,96 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -## COMPILED ## -############## -a.out -*.o -*.pyc -*.so -*.com -*.class -*.dll -*.exe -*/rdoc/ - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-import-conf/metadata.rb deleted file mode 100644 index e7b17a74e19c1..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/metadata.rb +++ /dev/null @@ -1,9 +0,0 @@ -name "dd-agent-import-conf" -maintainer "Datadog" -description "Import configuration from Agent 5 to Agent 6" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.1.0" - -depends 'apt', '>= 2.1.0' -depends 'datadog' -depends 'yum', '< 7.0.0' diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/recipes/_datadog-agent-6.rb b/test/kitchen/site-cookbooks/dd-agent-import-conf/recipes/_datadog-agent-6.rb deleted file mode 100644 index 21c43cba9548c..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/recipes/_datadog-agent-6.rb +++ /dev/null @@ -1,75 +0,0 @@ -# -# Cookbook Name:: dd-agent-import-conf -# Recipe:: datadog-agent-6 -# -# Copyright 2011-present, Datadog -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# Fail here at converge time if no api_key is set -ruby_block 'datadog-api-key-unset' do - block do - raise "Set ['datadog']['api_key'] as an attribute or on the node's run_state to configure this node's Datadog Agent." - end - only_if { node['dd-agent-import-conf']['api_key'].nil? } -end - -is_windows = node['platform_family'] == 'windows' - -# -# Configures a basic agent -# To add integration-specific configurations, add 'datadog::config_name' to -# the node's run_list and set the relevant attributes -# -agent6_config_file = ::File.join(node['dd-agent-import-conf']['agent6_config_dir'], 'datadog.yaml') - -# Common configuration -service_provider = nil -if (((node['platform'] == 'amazon' || node['platform_family'] == 'amazon') && node['platform_version'].to_i != 2) || - (node['platform'] == 'ubuntu' && node['platform_version'].to_f < 15.04) || # chef <11.14 doesn't use the correct service provider - (node['platform'] != 'amazon' && node['platform_family'] == 'rhel' && node['platform_version'].to_i < 7)) - # use Upstart provider explicitly for Agent 6 on Amazon Linux < 2.0 and RHEL < 7 - service_provider = Chef::Provider::Service::Upstart -end - -service 'datadog-agent-6' do - service_name node['dd-agent-import-conf']['agent_name'] - action :nothing - provider service_provider unless service_provider.nil? - if is_windows - supports :restart => true, :start => true, :stop => true - restart_command "powershell restart-service #{node['dd-agent-import-conf']['agent_name']} -Force" - stop_command "powershell stop-service #{node['dd-agent-import-conf']['agent_name']} -Force" - else - supports :restart => true, :status => true, :start => true, :stop => true - end - subscribes :restart, "template[#{agent6_config_file}]", :delayed unless node['dd-agent-import-conf']['agent_start'] == false - # HACK: the restart can fail when we hit systemd's restart limits (by default, 5 starts every 10 seconds) - # To workaround this, retry once after 5 seconds, and a second time after 10 seconds - retries 2 - retry_delay 5 -end - -# TODO: Add this when we update our datadog Berksfile dependency to 2.20 or 3.0 -# only load system-probe recipe if an agent6 installation comes with it -# ruby_block 'include system-probe' do -# block do -# if ::File.exist?('/opt/datadog-agent/embedded/bin/system-probe') && !is_windows -# run_context.include_recipe 'datadog::system-probe' -# end -# end -# end - -# Install integration packages -#include_recipe 'datadog::integrations' unless is_windows diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-import-conf/recipes/default.rb deleted file mode 100644 index a34b67cbb46c1..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/recipes/default.rb +++ /dev/null @@ -1,26 +0,0 @@ -# Cookbook Name:: dd-agent-imprt-conf -# Recipe:: default -# -# Copyright (C) 2013-present Datadog -# -# All rights reserved - Do Not Redistribute -# - -# We only do the import, meaning that the Agent 5 and -# the Agent 6 has already been setup. -# We just have to run the command. - - -if node['platform_family'] != 'windows' - include_recipe 'dd-agent-import-conf::_datadog-agent-6' - - execute "import-command" do - command "sudo -u dd-agent -- /opt/datadog-agent/bin/agent/agent import /etc/dd-agent/ /etc/datadog-agent/" - action :run - notifies :restart, 'service[datadog-agent-6]' - end -end - -if node['platform_family'] == 'windows' - # TODO(remy): do we want to test the import on Windows? -end diff --git a/test/kitchen/site-cookbooks/dd-agent-install/.gitignore b/test/kitchen/site-cookbooks/dd-agent-install/.gitignore deleted file mode 100644 index 45b891c93cfc3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.vagrant -Berksfile.lock -*~ -*# -.#* -\#*# -.*.sw[a-z] -*.un~ -/cookbooks - -# Bundler -Gemfile.lock -bin/* -.bundle/* - diff --git a/test/kitchen/site-cookbooks/dd-agent-install/Berksfile b/test/kitchen/site-cookbooks/dd-agent-install/Berksfile deleted file mode 100644 index c4bb297b7275b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode - -metadata diff --git a/test/kitchen/site-cookbooks/dd-agent-install/Gemfile b/test/kitchen/site-cookbooks/dd-agent-install/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-agent-install/README.md b/test/kitchen/site-cookbooks/dd-agent-install/README.md deleted file mode 100644 index 21c8535d9b566..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# dd-agent-install cookbook - - -This installs the Datadog Agent. -The Windows installation on the Chef Cookbook is broken for Agent 6. -This will be a temporary solution. diff --git a/test/kitchen/site-cookbooks/dd-agent-install/attributes/default.rb b/test/kitchen/site-cookbooks/dd-agent-install/attributes/default.rb deleted file mode 100644 index 82463b244b5c5..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/attributes/default.rb +++ /dev/null @@ -1,83 +0,0 @@ -# -# Linux options (Linux uses the official datadog cookbook) -# - -default['datadog']['agent_start'] = true -default['datadog']['agent_enable'] = true -default['datadog']['agent_version'] = nil - -# All other options use the defaults set in the official cookbook, -# or the options set in the kitchen job (eg. aptrepo, yumrepo, etc.) - -# -# Windows options (Windows uses the custom dd-agent-install cookbook) -# - -# The dd-agent-install recipe is a copy of the official install recipe, -# the only difference being the command used to install the Agent. -# Here, we add a start /wait to the command, otherwise chef doesn't wait -# for the Agent to be installed before ending its run. -# This behavior could make kitchen tests fail, because we would start testing -# the Agent before it is ready. - -default['dd-agent-install']['api_key'] = nil -default['dd-agent-install']['agent_major_version'] = nil -default['dd-agent-install']['windows_version'] = nil # => install the latest available version -default['dd-agent-install']['windows_agent_checksum'] = nil -default['dd-agent-install']['windows_agent_url'] = 'https://ddagent-windows-stable.s3.amazonaws.com/' - -default['dd-agent-install']['agent_package_retries'] = nil -default['dd-agent-install']['agent_package_retry_delay'] = nil -default['dd-agent-install']['config_dir'] = "#{ENV['ProgramData']}/Datadog" -default['dd-agent-install']['agent_name'] = 'DatadogAgent' -default['dd-agent-install']['agent6_config_dir'] = "#{ENV['ProgramData']}/Datadog" - -# Enable the agent to start at boot -default['dd-agent-install']['agent_enable'] = true - -# Start agent or not -default['dd-agent-install']['agent_start'] = true -default['dd-agent-install']['enable_trace_agent'] = true -default['dd-agent-install']['enable_process_agent'] = true - -# Set the defaults from the chef recipe -default['dd-agent-install']['extra_endpoints']['prod']['enabled'] = nil -default['dd-agent-install']['extra_endpoints']['prod']['api_key'] = nil -default['dd-agent-install']['extra_endpoints']['prod']['application_key'] = nil -default['dd-agent-install']['extra_endpoints']['prod']['url'] = nil # op -default['dd-agent-install']['extra_config']['forwarder_timeout'] = nil -default['dd-agent-install']['web_proxy']['host'] = nil -default['dd-agent-install']['web_proxy']['port'] = nil -default['dd-agent-install']['web_proxy']['user'] = nil -default['dd-agent-install']['web_proxy']['password'] = nil -default['dd-agent-install']['web_proxy']['skip_ssl_validation'] = nil # accepted values 'yes' or 'no' -default['dd-agent-install']['dogstreams'] = [] -default['dd-agent-install']['custom_emitters'] = [] -default['dd-agent-install']['syslog']['active'] = false -default['dd-agent-install']['syslog']['udp'] = false -default['dd-agent-install']['syslog']['host'] = nil -default['dd-agent-install']['syslog']['port'] = nil -default['dd-agent-install']['log_file_directory'] = nil -default['dd-agent-install']['process_agent']['blacklist'] = nil -default['dd-agent-install']['process_agent']['container_blacklist'] = nil -default['dd-agent-install']['process_agent']['container_whitelist'] = nil -default['dd-agent-install']['process_agent']['log_file'] = nil -default['dd-agent-install']['process_agent']['process_interval'] = nil -default['dd-agent-install']['process_agent']['rtprocess_interval'] = nil -default['dd-agent-install']['process_agent']['container_interval'] = nil -default['dd-agent-install']['process_agent']['rtcontainer_interval'] = nil -default['dd-agent-install']['tags'] = '' -default['dd-agent-install']['histogram_aggregates'] = 'max, median, avg, count' -default['dd-agent-install']['histogram_percentiles'] = '0.95' -default['dd-agent-install']['dogstatsd'] = true -default['dd-agent-install']['dogstatsd_port'] = 8125 -default['dd-agent-install']['dogstatsd_interval'] = 10 -default['dd-agent-install']['dogstatsd_normalize'] = 'yes' -default['dd-agent-install']['dogstatsd_target'] = 'http://localhost:17123' -default['dd-agent-install']['statsd_forward_host'] = nil -default['dd-agent-install']['statsd_forward_port'] = 8125 -default['dd-agent-install']['statsd_metric_namespace'] = nil -default['dd-agent-install']['log_level'] = 'INFO' -default['dd-agent-install']['enable_logs_agent'] = false - -default['dd-agent-install']['agent_install_options'] = '' diff --git a/test/kitchen/site-cookbooks/dd-agent-install/chefignore b/test/kitchen/site-cookbooks/dd-agent-install/chefignore deleted file mode 100644 index a6de14221d876..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/chefignore +++ /dev/null @@ -1,96 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -## COMPILED ## -############## -a.out -*.o -*.pyc -*.so -*.com -*.class -*.dll -*.exe -*/rdoc/ - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-agent-install/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-install/metadata.rb deleted file mode 100644 index 8430034d05a5d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/metadata.rb +++ /dev/null @@ -1,9 +0,0 @@ -name "dd-agent-install" -maintainer "Datadog" -description "Installs the Datadog Agent" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.2.0" - -depends 'apt', '>= 2.1.0' -depends 'datadog' -depends 'yum', '< 7.0.0' diff --git a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_agent6_windows_config.rb b/test/kitchen/site-cookbooks/dd-agent-install/recipes/_agent6_windows_config.rb deleted file mode 100644 index 6965c4fa2ddcc..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_agent6_windows_config.rb +++ /dev/null @@ -1,120 +0,0 @@ -# -# Cookbook Name:: dd-agent-install -# Recipe:: _agent6_windows_config -# -# Copyright 2011-present, Datadog -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -is_windows = node['platform_family'] == 'windows' - -# FIXME: with the agent6, we still need the agent5 conf file in duplicate -# in /etc/datadog-agent/trace-agent.conf for the trace agent. -# Remove them when these agents can read from datadog.yaml. -trace_agent_config_file = ::File.join(node['dd-agent-install']['agent6_config_dir'], 'trace-agent.conf') -config_dir = node['dd-agent-install']['agent_major_version'].to_i > 5 ? node['dd-agent-install']['agent6_config_dir'] : node['dd-agent-install']['config_dir'] - - -template trace_agent_config_file do - def conf_template_vars - { - :api_keys => [node['dd-agent-install']['api_key']], - :dd_urls => [node['dd-agent-install']['url']] - } - end - variables( - if respond_to?(:lazy) - lazy { conf_template_vars } - else - conf_template_vars - end - ) - if is_windows - # the windows installer takes care of setting the correct permissions - else - owner 'dd-agent' - group 'dd-agent' - mode '640' - end - source 'datadog.conf.erb' - sensitive true if Chef::Resource.instance_methods(false).include?(:sensitive) - notifies :restart, 'service[datadog-agent]', :delayed unless node['dd-agent-install']['agent_start'] == false -end - - -# With agent6, the process-agent and trace-agent are enabled as long-running checks -# TODO: on agent6, we can't really make the trace-agent _not_ run yet -template ::File.join(config_dir, 'conf.d', "apm.yaml") do - if node['platform_family'] == 'windows' - owner 'Administrators' - rights :full_control, 'Administrators' - inherits false - else - owner 'dd-agent' - mode '600' - end - - source 'integration.yaml.erb' - - variables( - instances: [{}] - ) - sensitive true if Chef::Resource.instance_methods(false).include?(:sensitive) - notifies :restart, 'service[datadog-agent]', :delayed if node['dd-agent-install']['agent_start'] -end - -agent6_config_file = ::File.join(node['dd-agent-install']['agent6_config_dir'], 'datadog.yaml') -template agent6_config_file do # rubocop:disable Metrics/BlockLength - def template_vars # rubocop:disable Metrics/AbcSize, Metrics/MethodLength - additional_endpoints = {} - node['dd-agent-install']['extra_endpoints'].each do |_, endpoint| - next unless endpoint['enabled'] - url = if endpoint['url'] - endpoint['url'] - else - node['dd-agent-install']['url'] - end - if additional_endpoints.key?(url) - additional_endpoints[url] << endpoint['api_key'] - else - additional_endpoints[url] = [endpoint['api_key']] - end - end - extra_config = {} - node['dd-agent-install']['extra_config'].each do |k, v| - next if v.nil? - extra_config[k] = v - end - { - extra_config: extra_config, - api_key: Chef::Datadog.api_key(node), - additional_endpoints: additional_endpoints - } - end - - if node['platform_family'] == 'windows' - else - owner 'dd-agent' - mode '600' - end - variables( - if respond_to?(:lazy) - lazy { template_vars } - else - template_vars - end - ) - sensitive true if Chef::Resource.instance_methods(false).include?(:sensitive) - notifies :restart, 'service[datadog-agent]', :delayed unless node['dd-agent-install']['agent_start'] == false -end diff --git a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_damage_windows_install.rb b/test/kitchen/site-cookbooks/dd-agent-install/recipes/_damage_windows_install.rb deleted file mode 100644 index ebdcbf3a84741..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_damage_windows_install.rb +++ /dev/null @@ -1,11 +0,0 @@ -# -# Cookbook Name:: dd-agent-install -# Recipe:: _damage_windows_install -# -# Copyright (C) 2021-present Datadog - -powershell_script "damage-agent" do - code <<-EOF - Remove-Item -Recurse -Force 'C:\\Program Files\\Datadog\\Datadog Agent\\bin\\agent.exe' - EOF -end diff --git a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_install_windows.rb b/test/kitchen/site-cookbooks/dd-agent-install/recipes/_install_windows.rb deleted file mode 100644 index f229e7aabde29..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_install_windows.rb +++ /dev/null @@ -1,47 +0,0 @@ -# -# Cookbook Name:: dd-agent-install -# Recipe:: _install_windows -# -# Copyright (C) 2019-present Datadog -# -# All rights reserved - Do Not Redistribute -# - -if node['dd-agent-install']['enable_testsigning'] - reboot 'enable_testsigning' do - action :nothing - reason 'Cannot continue Chef run without a reboot.' - end - - execute 'enable unsigned drivers' do - command "bcdedit.exe /set testsigning on" - notifies :reboot_now, 'reboot[enable_testsigning]', :immediately - not_if 'bcdedit.exe | findstr "testsigning" | findstr "Yes"' - end -end - - -include_recipe 'dd-agent-install::_install_windows_base' - -agent_config_file = ::File.join(node['dd-agent-install']['config_dir'], 'datadog.conf') - -# Set the Agent service enable or disable -agent_enable = node['dd-agent-install']['agent_enable'] ? :enable : :disable -# Set the correct Agent startup action -agent_start = node['dd-agent-install']['agent_start'] ? :start : :stop - - -include_recipe 'dd-agent-install::_agent6_windows_config' - -# Common configuration -service 'datadog-agent' do - service_name node['dd-agent-install']['agent_name'] - action [agent_enable, agent_start] - supports :restart => true, :start => true, :stop => true - subscribes :restart, "template[#{agent_config_file}]", :delayed unless node['dd-agent-install']['agent_start'] == false - restart_command "powershell -Command \"restart-service -Force -Name datadogagent\"" - # HACK: the restart can fail when we hit systemd's restart limits (by default, 5 starts every 10 seconds) - # To workaround this, retry once after 5 seconds, and a second time after 10 seconds - retries 2 - retry_delay 5 -end diff --git a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_install_windows_base.rb b/test/kitchen/site-cookbooks/dd-agent-install/recipes/_install_windows_base.rb deleted file mode 100644 index 274d2c1fd7b3c..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_install_windows_base.rb +++ /dev/null @@ -1,101 +0,0 @@ -# -# Cookbook Name:: dd-agent-install -# Recipe:: _install_windows_base -# -# Copyright (C) 2019-present Datadog -# -# All rights reserved - Do Not Redistribute -# - -package_retries = node['dd-agent-install']['agent_package_retries'] -package_retry_delay = node['dd-agent-install']['agent_package_retry_delay'] -dd_agent_version = node['datadog']['agent_version'] || node['dd-agent-install']['windows_version'] -dd_agent_filename = node['dd-agent-install']['windows_agent_filename'] - -source_url = node['dd-agent-install']['windows_agent_url'] -if !source_url.end_with? '/' - source_url += '/' -end - -if dd_agent_filename - dd_agent_installer_basename = dd_agent_filename -else - # HACK: the packages have different names in the stable repos and the testing repos - # Check the source URL to know if we need to use the "stable" filename, or the "testing" filename - if source_url == "https://ddagent-windows-stable.s3.amazonaws.com/" # Use a version of the Agent from the official repos - dd_agent_installer_basename = "ddagent-cli-#{dd_agent_version}" - else # Use a version of the Agent from the testing repos - dd_agent_installer_basename = "datadog-agent-#{dd_agent_version}-1-x86_64" - end -end - -temp_file_basename = ::File.join(Chef::Config[:file_cache_path], 'ddagent-cli').gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) - -dd_agent_installer = "#{dd_agent_installer_basename}.msi" -source_url += dd_agent_installer -temp_file = "#{temp_file_basename}.msi" - -log_file_name = ::File.join(Chef::Config[:file_cache_path], 'install.log').gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) -# Delete the log file in case it exists (in case of multiple converge runs for example) -file log_file_name do - action :delete -end - -# Agent >= 5.12.0 installs per-machine by default, but specifying ALLUSERS=1 shouldn't affect the install -agent_install_options = node['dd-agent-install']['agent_install_options'] -install_options = "/log #{log_file_name} /norestart ALLUSERS=1 #{agent_install_options}" - -# This fake package resource serves only to trigger the Datadog Agent uninstall. -# If the checksum is not provided, assume we need to reinstall the Agent. -package 'Datadog Agent removal' do - only_if { node['dd-agent-install']['windows_agent_checksum'].nil? } - package_name 'Datadog Agent' - action :remove -end - -# When WIXFAILWHENDEFERRED is present, we expect the installer to fail. -expected_msi_result_code = [0, 3010] -expected_msi_result_code.append(1603) if agent_install_options.include?('WIXFAILWHENDEFERRED') - -windows_package 'Datadog Agent' do - source source_url - checksum node['dd-agent-install']['windows_agent_checksum'] if node['dd-agent-install']['windows_agent_checksum'] - retries package_retries unless package_retries.nil? - retry_delay package_retry_delay unless package_retry_delay.nil? - options install_options - action :install - remote_file_attributes ({ - :path => temp_file - }) - returns expected_msi_result_code - # It's ok to ignore failure, the kitchen test will fail anyway - # but we need to print the install logs. - ignore_failure true -end - -# This runs during the converge phase and will return a non-zero exit -# code if the service doesn't run. While it can be useful to quickly -# test locally if the Datadog Agent service is running after a converge phase -# it defeats the purpose of the kitchen tests, so keep it commented unless debugging the installer. -#execute "check-agent-service" do -# command "sc interrogate datadogagent 2>&1" -# action :run -#end - -ruby_block "Print install logs" do - only_if { ::File.exists?(log_file_name) } - block do - # Use warn, because Chef's default "log" is too chatty - # and the kitchen tests default to "warn" - Chef::Log.warn(File.open(log_file_name, "rb:UTF-16LE", &:read).encode('UTF-8')) - end -end - -ruby_block "Check install sucess" do - not_if { agent_install_options.include?('WIXFAILWHENDEFERRED') } - block do - raise "Could not find installation log file, did the installer run ?" if !File.file?(log_file_name) - logfile = File.open(log_file_name, "rb:UTF-16LE", &:read).encode('UTF-8') - raise "The Agent failed to install" if logfile.include? "Product: Datadog Agent -- Installation failed." - end -end diff --git a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_repair_windows_install.rb b/test/kitchen/site-cookbooks/dd-agent-install/recipes/_repair_windows_install.rb deleted file mode 100644 index 6c4f76fbe2dd1..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_repair_windows_install.rb +++ /dev/null @@ -1,12 +0,0 @@ -# -# Cookbook Name:: dd-agent-install -# Recipe:: _repair_windows_install -# -# Copyright (C) 2021-present Datadog - -powershell_script "repair-agent" do - code <<-EOF - $product_code = (Get-WmiObject Win32_Product | Where-Object -Property Name -eq 'Datadog Agent').IdentifyingNumber - Start-Process msiexec.exe -Wait -ArgumentList '/q','/log','repair.log','/fa',$product_code - EOF -end diff --git a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_stop_windows_agent.rb b/test/kitchen/site-cookbooks/dd-agent-install/recipes/_stop_windows_agent.rb deleted file mode 100644 index f45604773bbb1..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_stop_windows_agent.rb +++ /dev/null @@ -1,23 +0,0 @@ -# -# Cookbook Name:: dd-agent-install -# Recipe:: _stop_windows_agent -# -# Copyright (C) 2021-present Datadog - -# -# gives the agent 60s to actually get started if it hasn't fully started yet -# -powershell_script 'stop-datadog-agent' do - code <<-EOH - $serviceName = "#{node['dd-agent-install']['agent_name']}" - sc.exe query $serviceName; - for($i= 0; $i -lt 30; $i++) { - $s = (get-service datadogagent).status - if($s -ne "StartPending") { - break; - } - start-sleep -seconds 2 - } - Stop-Service -force $serviceName - EOH -end diff --git a/test/kitchen/site-cookbooks/dd-agent-install/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-install/recipes/default.rb deleted file mode 100644 index 5697c1873426f..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/recipes/default.rb +++ /dev/null @@ -1,15 +0,0 @@ -# -# Cookbook Name:: dd-agent-install -# Recipe:: default -# -# Copyright (C) 2013-present Datadog -# -# All rights reserved - Do Not Redistribute -# -require 'uri' - -if node['platform_family'] == 'windows' && node['dd-agent-install']['agent_major_version'].to_i > 5 - include_recipe 'dd-agent-install::_install_windows' -else - include_recipe 'datadog::dd-agent' -end diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/activemq.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/activemq.yaml.erb deleted file mode 100644 index 6b001e0ea0a23..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/activemq.yaml.erb +++ /dev/null @@ -1,60 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -# List of metrics to be collected by the integration -# You should not have to modify this. -init_config: - conf: - - include: - Type: Queue - attribute: - AverageEnqueueTime: - alias: activemq.queue.avg_enqueue_time - metric_type: gauge - ConsumerCount: - alias: activemq.queue.consumer_count - metric_type: gauge - DequeueCount: - alias: activemq.queue.dequeue_count - metric_type: counter - DispatchCount: - alias: activemq.queue.dispatch_count - metric_type: counter - EnqueueCount: - alias: activemq.queue.enqueue_count - metric_type: counter - ExpiredCount: - alias: activemq.queue.expired_count - metric_type: counter - InFlightCount: - alias: activemq.queue.in_flight_count - metric_type: counter - MaxEnqueueTime: - alias: activemq.queue.max_enqueue_time - metric_type: gauge - MemoryPercentUsage: - alias: activemq.queue.memory_pct - metric_type: gauge - MinEnqueueTime: - alias: activemq.queue.min_enqueue_time - metric_type: gauge - ProducerCount: - alias: activemq.queue.producer_count - metric_type: gauge - QueueSize: - alias: activemq.queue.size - metric_type: gauge - - - include: - Type: Broker - attribute: - MemoryPercentUsage: - alias: activemq.broker.memory_pct - metric_type: gauge - StorePercentUsage: - alias: activemq.broker.store_pct - metric_type: gauge - TempPercentUsage: - alias: activemq.broker.temp_pct - metric_type: gauge diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/apache.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/apache.yaml.erb deleted file mode 100644 index 6af28d1a3358d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/apache.yaml.erb +++ /dev/null @@ -1,19 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - apache_status_url: <%= i['status_url'] %> - <% if i['apache_user'] -%>apache_user: <%= i['apache_user'] %><% end -%> - <% if i['apache_password'] -%>apache_password: <%= i['apache_password'] %><% end -%> - <% if i['disable_ssl_validation'] -%>disable_ssl_validation: <%= i['disable_ssl_validation'] %><% end -%> - - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/cacti.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/cacti.yaml.erb deleted file mode 100644 index 1a73bb3977395..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/cacti.yaml.erb +++ /dev/null @@ -1,22 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - mysql_host: <%= i['mysql_host'] %> - mysql_user: <%= i['mysql_user'] %> - mysql_password: <%= i['mysql_password'] %> - rrd_path: <%= i['rrd_path'] %> - <% if i['rrd_whitelist'] -%> - rrd_whitelist: <%= i['rrd_whitelist'] %> - <% end -%> - - <% if i.key?('field_names') -%> - field_names: - <% i['field_names'].each do |fn| -%> - - <%= fn %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/cassandra.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/cassandra.yaml.erb deleted file mode 100644 index daf913192f645..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/cassandra.yaml.erb +++ /dev/null @@ -1,152 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - host: <%= i['server'] || i['host'] %> - <% (i.keys - ['host']).each do |key| -%> - <%= key %>: <%= i[key] %> - <% end -%> - cassandra_aliasing: true -<% end -%> - -<% if @version == 2 %> -init_config: - # List of metrics to be collected by the integration - # Read http://docs.datadoghq.com/integrations/java/ to learn how to customize it - conf: - - include: - domain: org.apache.cassandra.metrics - type: ClientRequest - scope: - - Read - - Write - name: - - Latency - - Timeouts - - Unavailables - attribute: - - Count - - OneMinuteRate - - include: - domain: org.apache.cassandra.metrics - type: ClientRequest - scope: - - Read - - Write - name: - - TotalLatency - - include: - domain: org.apache.cassandra.metrics - type: Storage - name: - - Load - - Exceptions - - include: - domain: org.apache.cassandra.metrics - type: ColumnFamily - bean_regex: - - .*keyspace=.* - name: - - TotalDiskSpaceUsed - - BloomFilterDiskSpaceUsed - - BloomFilterFalsePositives - - BloomFilterFalseRatio - - CompressionRatio - - LiveDiskSpaceUsed - - LiveSSTableCount - - MaxRowSize - - MeanRowSize - - MemtableColumnsCount - - MemtableLiveDataSize - - MemtableSwitchCount - - MinRowSize - exclude: - keyspace: - - OpsCenter - - system - - system_auth - - system_distributed - - system_schema - - system_traces - - include: - domain: org.apache.cassandra.metrics - type: Cache - name: - - Capacity - - Size - attribute: - - Value - - include: - domain: org.apache.cassandra.metrics - type: Cache - name: - - Hits - - Requests - attribute: - - Count - - include: - domain: org.apache.cassandra.metrics - type: ThreadPools - path: request - name: - - ActiveTasks - - CompletedTasks - - PendingTasks - - CurrentlyBlockedTasks - - include: - domain: org.apache.cassandra.db - attribute: - - UpdateInterval -<% else %> -# List of metrics to be collected. -init_config: - conf: - - include: - domain: org.apache.cassandra.db - attribute: - - BloomFilterDiskSpaceUsed - - BloomFilterFalsePositives - - BloomFilterFalseRatio - - Capacity - - CompletedTasks - - CompressionRatio - - ExceptionCount - - Hits - - KeyCacheRecentHitRate - - LiveDiskSpaceUsed - - LiveSSTableCount - - Load - - MaxRowSize - - MeanRowSize - - MemtableColumnsCount - - MemtableDataSize - - MemtableSwitchCount - - MinRowSize - - PendingTasks - - ReadCount - - RecentHitRate - - RecentRangeLatencyMicros - - RecentReadLatencyMicros - - RecentWriteLatencyMicros - - Requests - - RowCacheRecentHitRate - - Size - - TotalDiskSpaceUsed - - TotalReadLatencyMicros - - TotalWriteLatencyMicros - - UpdateInterval - - WriteCount - exclude: - keyspace: system - - include: - domain: org.apache.cassandra.internal - attribute: - - ActiveCount - - CompletedTasks - - CurrentlyBlockedTasks - - TotalBlockedTasks - - include: - domain: org.apache.cassandra.net - attribute: - - TotalTimeouts -<% end %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/consul.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/consul.yaml.erb deleted file mode 100644 index 345bb8751e1c6..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/consul.yaml.erb +++ /dev/null @@ -1,24 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - url: <%= i['url'] %> - <% unless i['new_leader_checks'].nil? %> - new_leader_checks: <%= i['new_leader_checks'] %> - <% end %> - <% unless i['catalog_checks'].nil? %> - catalog_checks: <%= i['catalog_checks'] %> - <% end %> - <% unless i['service_whitelist'].nil? %> - service_whitelist: <%= i['service_whitelist'] %> - <% end %> - <% if i.key?('tags') && !i['tags'].empty? -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/couch.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/couch.yaml.erb deleted file mode 100644 index d4987a07f9fe1..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/couch.yaml.erb +++ /dev/null @@ -1,12 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - server: <%= i['server'] %> - <% (i.keys - ['server']).each do |key| -%> - <%= key %>: <%= i[key] %> - <% end -%> -<% end -%> - -# Nothing to change below -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/couchbase.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/couchbase.yaml.erb deleted file mode 100644 index 4010a711a8d02..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/couchbase.yaml.erb +++ /dev/null @@ -1,9 +0,0 @@ -<%= JSON.parse(({ 'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - server: <%= i['server'] %> - user: <%= @node.fetch('couchbase', {}).fetch('server', {}).fetch('username', i.fetch('username', 'Administrator')) %> - password: <%= @node.fetch('couchbase', {}).fetch('server', {}).fetch('password', i.fetch('password', '')) %> -<% end %> -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/datadog.conf.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/datadog.conf.erb deleted file mode 100644 index 1117d30b69cd6..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/datadog.conf.erb +++ /dev/null @@ -1,240 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -[Main] -dd_url: <%= @dd_urls.join(',') %> -api_key: <%= @api_keys.join(',') %> -check_freq: <%= node['dd-agent-install']['check_freq'] %> -hostname: <%= node['dd-agent-install']['hostname'] %> -use_mount: <%= node['dd-agent-install']['use_mount'] ? "yes" : "no" %> -listen_port: <%= node['dd-agent-install']['agent_port'] %> -bind_host: <%= node['dd-agent-install']['bind_host'] %> -<% if node['dd-agent-install']['autorestart'] -%> -autorestart: <%= node['dd-agent-install']['autorestart'] %> -<% end -%> -<% if node['dd-agent-install']['web_proxy']['skip_ssl_validation'] -%> -skip_ssl_validation: <%= node['dd-agent-install']['web_proxy']['skip_ssl_validation'] %> -<% end -%> -<% if node['dd-agent-install']['developer_mode'] -%> -developer_mode: <%= node['dd-agent-install']['developer_mode'] %> -<% end -%> - -<% if node['dd-agent-install']['tags'].respond_to?(:each_pair) -%> -tags: <%= node['dd-agent-install']['tags'].reject{ |_k,v| v.empty? }.map{ |k,v| "#{k}:#{v}" }.join(',') %> -<% else -%> -tags: <%= node['dd-agent-install']['tags'] %> -<% end -%> -<% if node['dd-agent-install']['create_dd_check_tags'] -%> -create_dd_check_tags: <%= node['dd-agent-install']['create_dd_check_tags'] %> -<% end -%> -<% if node['dd-agent-install']['collect_ec2_tags'] -%> -collect_ec2_tags: <%= node['dd-agent-install']['collect_ec2_tags'] %> -<% end -%> - -<% if node['dd-agent-install']['web_proxy']['host'] -%> -proxy_host: <%= node['dd-agent-install']['web_proxy']['host'] %> -proxy_port: <%= node['dd-agent-install']['web_proxy']['port'] %> -proxy_user: <%= node['dd-agent-install']['web_proxy']['user'] %> -proxy_password: <%= node['dd-agent-install']['web_proxy']['password'] %> -<% end -%> - -<% if node['dd-agent-install']['non_local_traffic'] == true %> -non_local_traffic: true -<% end -%> - -<% if !node['dd-agent-install']['dogstreams'].empty? -%> -dogstreams: <%= node['dd-agent-install']['dogstreams'].join(', ') %> -<% end -%> - -<% if !node['dd-agent-install']['custom_emitters'].empty? -%> -custom_emitters: <%= node['dd-agent-install']['custom_emitters'].join(', ') %> -<% end -%> - -<% if node['dd-agent-install']['agent_checks_interval'] -%> -agent_checks_interval: <%= node['dd-agent-install']['agent_checks_interval'] %> -<% end -%> - -<% if node['dd-agent-install']['graphite'] -%> -graphite_listen_port: <%= node['dd-agent-install']['graphite_port'] %> -<% end -%> - -## Histogram settings -histogram_aggregates: <%= node['dd-agent-install']['histogram_aggregates'] %> -histogram_percentiles: <%= node['dd-agent-install']['histogram_percentiles'] %> - -<% if node['dd-agent-install']['service_discovery_backend'] -%> -# ========================================================================== # -# Service Discovery # -# See https://docs.datadoghq.com/guides/servicediscovery/ for details # -# ========================================================================== # - -# Service discovery allows the agent to look for running services -# and load a configuration object for the one it recognizes. -# This feature is disabled by default. -# Uncomment this line to enable it (works for docker containers only for now). -service_discovery_backend: <%= node['dd-agent-install']['service_discovery_backend'] %> - -# Define which key/value store must be used to look for configuration templates. -# Default is etcd. Consul is also supported. -sd_config_backend: <%= node['dd-agent-install']['sd_config_backend'] %> - -# Settings for connecting to the service discovery backend. -sd_backend_host: <%= node['dd-agent-install']['sd_backend_host'] %> -sd_backend_port: <%= node['dd-agent-install']['sd_backend_port'] %> - -# By default, the agent will look for the configuration templates under the -# `/datadog/check_configs` key in the back-end. If you wish otherwise, uncomment this option -# and modify its value. -sd_template_dir: <%= node['dd-agent-install']['sd_template_dir'] %> -<% end -%> - -<% if node['dd-agent-install']['dogstatsd'] -%> -# ========================================================================== # -# DogStatsd configuration # -# ========================================================================== # - -# DogStatsd is a small server that aggregates your custom app metrics. For -# usage information, check out http://docs.datadoghq.com - -# Make sure your client is sending to the same port. -dogstatsd_port: <%= node['dd-agent-install']['dogstatsd_port'] %> - -## The dogstatsd flush period. -dogstatsd_interval: <%= node['dd-agent-install']['dogstatsd_interval'] %> - -## The target location to send the data -dogstatsd_target: <%= node['dd-agent-install']['dogstatsd_target'] %> - -## If 'yes', counters and rates will be normalized to 1 second (that is divided -## by the dogstatsd_interval) before being sent to the server. Defaults to 'yes' -dogstatsd_normalize: <%= node['dd-agent-install']['dogstatsd_normalize'] %> -<% if node['dd-agent-install']['statsd_forward_host'] -%> -statsd_forward_host: <%= node['dd-agent-install']['statsd_forward_host'] %> -statsd_forward_port: <%= node['dd-agent-install']['statsd_forward_port'] %> -<% end -%> - -<% if node['dd-agent-install']['statsd_metric_namespace'] -%> -statsd_metric_namespace: <%= node['dd-agent-install']['statsd_metric_namespace'] %> -<% end -%> -<% else -%> -use_dogstatsd: no -<% end -%> - -# ========================================================================== # -# Logging -# ========================================================================== # - -log_level: <%= node['dd-agent-install']['log_level'] %> - -<% if node['dd-agent-install']['log_file_directory'] -%> -collector_log_file: <%= node['dd-agent-install']['log_file_directory'] %>/collector.log -forwarder_log_file: <%= node['dd-agent-install']['log_file_directory'] %>/forwarder.log -dogstatsd_log_file: <%= node['dd-agent-install']['log_file_directory'] %>/dogstatsd.log -jmxfetch_log_file: <%= node['dd-agent-install']['log_file_directory'] %>/jmxfetch.log -<% unless node['platform_family'] == 'windows' -%> -go-metro_log_file: <%= node['dd-agent-install']['log_file_directory'] %>/go-metro.log -<% end -%> -<% end -%> - -# if syslog is enabled but a host and port are not set, a local domain socket -# connection will be attempted -# -log_to_syslog: <%= node['dd-agent-install']['syslog']['active'] ? 'yes' : 'no' %> -<% if node['dd-agent-install']['syslog']['udp'] -%> -syslog_host: <%= node['dd-agent-install']['syslog']['host'] %> -syslog_port: <%= node['dd-agent-install']['syslog']['port'] %> - -<% end -%> -# ========================================================================== # -# Legacy Integrations -# ========================================================================== # - -# For integrations which do not yet use the yaml configurations -<% -if node['dd-agent-install']['legacy_integrations'] - node['dd-agent-install']['legacy_integrations'].each do |int_name, int_hash| - if int_hash["enabled"] and int_hash.has_key? "config" - description = int_name - description += " - #{int_hash["description"]}" if int_hash["description"] - description.gsub!(/^/, '# ') --%> -<%= description %> -<% - int_hash['config'].each do |k,v| --%> -<%= k %>: <%= v %> -<% - end - end - end -end --%> - -<% if node['dd-agent-install']['enable_process_agent'].is_a?(TrueClass) || node['dd-agent-install']['enable_process_agent'].is_a?(FalseClass) -%> -process_agent_enabled: <%= node['dd-agent-install']['enable_process_agent'] %> -<% end -%> - -<% if node['dd-agent-install']['enable_trace_agent'].is_a?(TrueClass) || node['dd-agent-install']['enable_trace_agent'].is_a?(FalseClass) -%> -apm_enabled: <%= node['dd-agent-install']['enable_trace_agent'] %> -<% end -%> - -<% if ! node['dd-agent-install']['extra_config'].empty? -%> -# ========================================================================== # -# Other config options -# ========================================================================== # - <% node['dd-agent-install']['extra_config'].each do |k, v| -%> - <% if ! v.nil? -%> -<%= k %>: <%= v %> - <% end -%> - <% end -%> -<% end -%> - -## Trace settings - -[trace.config] -<% unless node['dd-agent-install']['trace_env'].nil? -%> -env: <%= node['dd-agent-install']['trace_env'] %> -<% end -%> - -[trace.sampler] -<% unless node['dd-agent-install']['extra_sample_rate'].nil? -%> -extra_sample_rate: <%= node['dd-agent-install']['extra_sample_rate'] %> -<% end -%> -<% unless node['dd-agent-install']['max_traces_per_second'].nil? -%> -max_traces_per_second: <%= node['dd-agent-install']['max_traces_per_second'] %> -<% end -%> - -[trace.receiver] -<% unless node['dd-agent-install']['receiver_port'].nil? -%> -receiver_port: <%= node['dd-agent-install']['receiver_port'] %> -<% end -%> -<% unless node['dd-agent-install']['connection_limit'].nil? -%> -connection_limit: <%= node['dd-agent-install']['connection_limit'] %> -<% end -%> - -## Process settings - -[process.config] -<% unless node['dd-agent-install']['process_agent']['blacklist'].nil? -%> -blacklist: <%= node['dd-agent-install']['process_agent']['blacklist'] %> -<% end -%> -<% unless node['dd-agent-install']['process_agent']['container_blacklist'].nil? -%> -container_blacklist: <%= node['dd-agent-install']['process_agent']['container_blacklist'] %> -<% end -%> -<% unless node['dd-agent-install']['process_agent']['container_whitelist'].nil? -%> -container_whitelist: <%= node['dd-agent-install']['process_agent']['container_whitelist'] %> -<% end -%> -<% unless node['dd-agent-install']['process_agent']['process_interval'].nil? -%> -process_interval = <%= node['dd-agent-install']['process_agent']['process_interval'] %> -<% end -%> -<% unless node['dd-agent-install']['process_agent']['rtprocess_interval'].nil? -%> -rtprocess_interval = <%= node['dd-agent-install']['process_agent']['rtprocess_interval'] %> -<% end -%> -<% unless node['dd-agent-install']['process_agent']['container_interval'].nil? -%> -container_interval = <%= node['dd-agent-install']['process_agent']['container_interval'] %> -<% end -%> -<% unless node['dd-agent-install']['process_agent']['rtcontainer_interval'].nil? -%> -rtcontainer_interval = <%= node['dd-agent-install']['process_agent']['rtcontainer_interval'] %> -<% end -%> -<% unless node['dd-agent-install']['process_agent']['log_file'].nil? -%> -log_file: <%= node['dd-agent-install']['process_agent']['log_file'] %> -<% end -%> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/datadog.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/datadog.yaml.erb deleted file mode 100644 index be783c320da42..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/datadog.yaml.erb +++ /dev/null @@ -1,116 +0,0 @@ -<% -# OPTIONS REMOVED IN AGENT 6: -# - check_freq -# - use_mount -# - developer_mode -# - dogstreams -# - autorestart -# - custom_emitters -# - graphite -# - dogstatsd_target -# - dogstatsd_interval -# - dogstatsd_normalize -# - legacy_integrations - -# TODO: options not supported yet: -# - agent_checks_interval -# - Autodiscovery (aka Service Discovery) related options -# - statsd_forward_host -# - statsd_forward_port -# - statsd_metric_namespace -# - enable_trace_agent: always enabled -# - all trace-related options are written to an INI file - -def string_list_to_array(string_list) - # return an array from a comma-separated list in a string - string_list.split(',').map{ |elem| elem.strip } -end - -## Normalize complex config values for agent6 format ## -if node['dd-agent-install']['tags'].respond_to?(:each_pair) - tags = node['dd-agent-install']['tags'].reject{ |_k,v| v.empty? }.map{ |k,v| "#{k.strip}:#{v.strip}" } -else - tags = string_list_to_array(node['dd-agent-install']['tags']) -end - -# TODO: support the more complete proxy settings that the agent6 supports -http_proxy = nil -if node['dd-agent-install']['web_proxy']['host'] - host = node['dd-agent-install']['web_proxy']['host'] - port = node['dd-agent-install']['web_proxy']['port'] - user = node['dd-agent-install']['web_proxy']['user'] - password = node['dd-agent-install']['web_proxy']['password'] - scheme = "" - - unless host.start_with?('http://') or host.start_with?('https://') - scheme = 'http://' - end - - http_proxy = host - if port - http_proxy += ":#{port}" - end - if user - if password - http_proxy = "#{user}:#{port}@#{http_proxy}" - else - http_proxy = "#{user}@#{http_proxy}" - end - end - - http_proxy = scheme + http_proxy -end - -## Populate agent_config ## -agent_config = @extra_config.merge({ - api_key: @api_key, - dd_url: node['dd-agent-install']['url'], - hostname: node['dd-agent-install']['hostname'], - additional_endpoints: @additional_endpoints, - listen_port: node['dd-agent-install']['agent_port'], - bind_host: node['dd-agent-install']['bind_host'], - skip_ssl_validation: node['dd-agent-install']['web_proxy']['skip_ssl_validation'], - tags: tags, - create_dd_check_tags: node['dd-agent-install']['create_dd_check_tags'], - collect_ec2_tags: node['dd-agent-install']['collect_ec2_tags'], - non_local_traffic: node['dd-agent-install']['non_local_traffic'], - histogram_aggregates: string_list_to_array(node['dd-agent-install']['histogram_aggregates']), - histogram_percentiles: string_list_to_array(node['dd-agent-install']['histogram_percentiles']), # TODO: check that the value works with agent6 - use_dogstatsd: node['dd-agent-install']['dogstatsd'], - log_level: node['dd-agent-install']['log_level'], # TODO: make sure it's a seelog-compatible log level - - # log agent options - logs_enabled: node['dd-agent-install']['enable_logs_agent'] -}) - -if node['dd-agent-install']['log_file_directory'] - agent_config['log_file'] = ::File.join(node['dd-agent-install']['log_file_directory'], "agent.log") -end - -if node['dd-agent-install']['use_v2_api'] - agent_config['use_v2_api'] = node['dd-agent-install']['use_v2_api'] -end - -if node['dd-agent-install']['syslog']['active'] - agent_config['log_to_syslog'] = true - # TODO: double check the udp settings work with agent6 - if node['dd-agent-install']['syslog']['udp'] - agent_config['syslog_uri'] = "#{node['dd-agent-install']['syslog']['host']}:#{node['dd-agent-install']['syslog']['port']}" - end -end - -# Set proxy options -if !http_proxy.nil? - agent_config['proxy'] = { - http: http_proxy, - https: http_proxy - } -end - -# Remove nil values -agent_config.reject!{ |k,v| v.nil? } - --%> -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(agent_config.to_json).to_yaml %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/directory.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/directory.yaml.erb deleted file mode 100644 index 26413d4f9d601..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/directory.yaml.erb +++ /dev/null @@ -1,15 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - directory: "<%= i['directory'] %>" - <% if i['name'] -%>name: "<%= i['name'] %>"<% end -%> - <% if i['dirtagname'] -%>dirtagname: "<%= i['dirtagname'] %>"<% end -%> - <% if i['filetagname'] -%>filetagname: "<%= i['filetagname'] %>"<% end -%> - <% if i.key?('filegauges') -%>filegauges: <%= i['filegauges'] %><% end -%> - <% if i['pattern'] -%>pattern: "<%= i['pattern'] %>"<% end -%> - <% if i.key?('recursive') -%>recursive: <%= i['recursive'] %><% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/disk.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/disk.yaml.erb deleted file mode 100644 index 70a04547944bc..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/disk.yaml.erb +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'init_config' => @init_config, 'logs' => @logs }).to_json).to_yaml %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/dns_check.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/dns_check.yaml.erb deleted file mode 100644 index 62207e78d22f3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/dns_check.yaml.erb +++ /dev/null @@ -1,13 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - hostname: <%= i["hostname"] %> - nameserver: <%= i["nameserver"] || '127.0.0.1' %> - <% unless i["timeout"].nil? %> - timeout: <%= i["timeout"] %> - <% end %> - <% end %> - -init_config: - default_timeout: 4 diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/docker.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/docker.yaml.erb deleted file mode 100644 index 3b2d3b1ef91f3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/docker.yaml.erb +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: - <% if @init_config %> - <% if @init_config.key?('docker_root') -%> - docker_root: <%= @init_config['docker_root'] %> - <% end -%> - <% if @init_config.key?('socket_timeout') -%> - socket_timeout: <%= @init_config['socket_timeout'] %> - <% end -%> - <% end -%> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/docker_daemon.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/docker_daemon.yaml.erb deleted file mode 100644 index 1b3b8c08cbd1d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/docker_daemon.yaml.erb +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'init_config' => @init_config, 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/elastic.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/elastic.yaml.erb deleted file mode 100644 index 37e077e263394..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/elastic.yaml.erb +++ /dev/null @@ -1,48 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - url: <%= i["url"] %> - <% unless i["shard_level_metrics"].nil? %> - shard_level_metrics: <%= i["shard_level_metrics"] %> - <% end %> - <% unless i["pshard_stats"].nil? %> - pshard_stats: <%= i["pshard_stats"] %> - <% end %> - <% unless i["cluster_stats"].nil? %> - cluster_stats: <%= i["cluster_stats"] %> - <% end %> - <% unless i["is_external"].nil? %> - is_external: <%= i["is_external"] %> - <% end %> - <% unless i["username"].nil? %> - username: <%= i["username"] %> - <% end %> - <% unless i["password"].nil? %> - password: <%= i["password"] %> - <% end %> - <% unless i["timeout"].nil? %> - timeout: <%= i["timeout"] %> - <% end %> - <% unless i["pending_task_stats"].nil? %> - pending_task_stats: <%= i["pending_task_stats"] %> - <% end %> - <% unless i["ssl_verify"].nil? %> - ssl_verify: <%= i["ssl_verify"] %> - <% end %> - <% unless i["ssl_cert"].nil? %> - ssl_cert: <%= i["ssl_cert"] %> - <% end %> - <% unless i["ssl_key"].nil? %> - ssl_key: <%= i["ssl_key"] %> - <% end %> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> - <% end %> - -# Nothing to configure below -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/etcd.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/etcd.yaml.erb deleted file mode 100644 index 8473daa4a1cc2..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/etcd.yaml.erb +++ /dev/null @@ -1,20 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - url: <%= i['url'] %> - <% if i['timeout'] -%>timeout: <%= i['timeout'] %><% end -%> - <% if i['ssl_keyfile'] -%>ssl_keyfile: <%= i['ssl_keyfile'] %><% end -%> - <% if i['ssl_certfile'] -%>ssl_certfile: <%= i['ssl_certfile'] %><% end -%> - <% if i['ssl_cert_validation'] -%>ssl_cert_validation: <%= i['ssl_cert_validation'] %><% end -%> - <% if i['ssl_ca_certs'] -%>ssl_ca_certs: <%= i['ssl_ca_certs'] %><% end -%> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/fluentd.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/fluentd.yaml.erb deleted file mode 100644 index f09867a7e9efd..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/fluentd.yaml.erb +++ /dev/null @@ -1,4 +0,0 @@ -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/go-metro.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/go-metro.yaml.erb deleted file mode 100644 index 7351b887819c4..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/go-metro.yaml.erb +++ /dev/null @@ -1,4 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'init_config' => @init_config, 'instances' => @instances, 'logs' => @logs}).to_json).to_yaml %> - diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/go_expvar.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/go_expvar.yaml.erb deleted file mode 100644 index 1b3b8c08cbd1d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/go_expvar.yaml.erb +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'init_config' => @init_config, 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/gunicorn.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/gunicorn.yaml.erb deleted file mode 100644 index 2b40a714fdc97..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/gunicorn.yaml.erb +++ /dev/null @@ -1,15 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - proc_name: <%= i['proc_name'] %> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/haproxy.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/haproxy.yaml.erb deleted file mode 100644 index 1afb39166aecf..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/haproxy.yaml.erb +++ /dev/null @@ -1,17 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -<% excluded_keys = ["url", "username", "password"] -%> -instances: - <% @instances.each do |i| -%> - - url: <%= i['url'] %> - <% if i.key?('username') && i.key?('password') -%> - username: <%= i['username'] %> - password: <%= i['password'] %> - <% end -%> - <% (i.keys - excluded_keys).each do |key| -%> - <%= key %>: <%= i[key] %> - <% end -%> - <% end -%> - -# Nothing to configure below -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/hdfs.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/hdfs.yaml.erb deleted file mode 100644 index 9643fb11012a7..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/hdfs.yaml.erb +++ /dev/null @@ -1,18 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -# Each instance requires a namenode hostname. -# Port defaults to 8020. -instances: - <% @instances.each do |instance| -%> - - namenode: <%= instance.fetch("fqdn"){ node["fqdn"] } %> - port: <%= instance.fetch("port", 8020) %> - <% if instance.key?("tags") -%> - tags: - <% instance["tags"].each do |tag| -%> - - <%= tag %> - <% end -%> - <% end -%> - <% end -%> - -# HDFS check does not require any init_config -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/http_check.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/http_check.yaml.erb deleted file mode 100644 index 5f39a4d59e5c2..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/http_check.yaml.erb +++ /dev/null @@ -1,5 +0,0 @@ -<%# Sanitize the compiled Mash to standard Array/Hash objects by way of JSON -%> -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: -# Nothing to configure here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/iis.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/iis.yaml.erb deleted file mode 100644 index 8176b70ce29f3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/iis.yaml.erb +++ /dev/null @@ -1,41 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -# By default, this check will run against a single instance - the current -# machine that the Agent is running on. It will check the WMI performance -# counters for IIS on that machine. -# -# If you want to check other remote machines as well, you can add one -# instance per host. Note: If you also want to check the counters on the -# current machine, you will have to create an instance with empty params. - -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - <% if i['host'] == 'localhost' -%> - - host: . - <% else -%> - - host: <%= i['host'] %> - <% end -%> - <% if i.key?('username') -%> - username: <%= i['username'] %> - password: <%= i['password'] %> - <% end -%> - <% if i.key?('provider') -%> - provider: <%= i['provider'] %> - <% end -%> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> - <% if i.key?('sites') -%> - sites: - <% i['sites'].each do |s| -%> - - <%= s %> - <% end -%> - <% end -%> - <% end -%> - -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/integration.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/integration.yaml.erb deleted file mode 100644 index 70a04547944bc..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/integration.yaml.erb +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'init_config' => @init_config, 'logs' => @logs }).to_json).to_yaml %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/jenkins.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/jenkins.yaml.erb deleted file mode 100644 index 3f81fdfde8b20..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/jenkins.yaml.erb +++ /dev/null @@ -1,9 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - name: <%= i['name'] %> - jenkins_home: <%= i['home'] %> - <% end -%> - -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/jmx.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/jmx.yaml.erb deleted file mode 100644 index 5f39a4d59e5c2..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/jmx.yaml.erb +++ /dev/null @@ -1,5 +0,0 @@ -<%# Sanitize the compiled Mash to standard Array/Hash objects by way of JSON -%> -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: -# Nothing to configure here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kafka.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kafka.yaml.erb deleted file mode 100644 index 45bb4ef39ff63..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kafka.yaml.erb +++ /dev/null @@ -1,553 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - host: <%= i['host'] %> - port: <%= i['port'] %> - <% if i['name'] -%> - name: <%= i['name'] %> - <% end -%> - <% if i['user'] -%> - user: <%= i['user'] %> - <% end -%> - <% if i['password'] -%> - password: <%= i['password'] %> - <% end -%> - <% if i['process_name_regex'] and i['tools_jar_path'] -%> - process_name_regex: <%= i['process_name_regex'] %> # Instead of specifying a host, and port. The agent can connect using the attach api. - # This requires the JDK to be installed and the path to tools.jar to be set below. - tools_jar_path: <%= i['tools_jar_path'] %> - <% end -%> - <% if i['java_bin_path'] -%> - java_bin_path: <%= i['java_bin_path'] %> #Optional, should be set if the agent cannot find your java executable - <% end -%> - <% if i['trust_store_path'] -%> - trust_store_path: <%= i['trust_store_path'] %> # Optional, should be set if ssl is enabled - <% end -%> - <% if i['trust_store_password'] -%> - trust_store_password: <%= i['trust_store_password'] %> - <% end -%> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |k, v| -%> - <%= k %>: <%= v %> - <% end -%> - <% end -%> - <% end -%> - -<% if @version == 2 %> -init_config: - is_jmx: true - - # Metrics collected by this check. You should not have to modify this. - conf: - # v0.8.2.x Producers - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=ProducerRequestMetrics,name=ProducerRequestRateAndTimeMs,clientId=.*' - attribute: - Count: - metric_type: rate - alias: kafka.producer.request_rate - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=ProducerRequestMetrics,name=ProducerRequestRateAndTimeMs,clientId=.*' - attribute: - Mean: - metric_type: gauge - alias: kafka.producer.request_latency_avg - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=ProducerTopicMetrics,name=BytesPerSec,clientId=.*' - attribute: - Count: - metric_type: rate - alias: kafka.producer.bytes_out - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=ProducerTopicMetrics,name=MessagesPerSec,clientId=.*' - attribute: - Count: - metric_type: rate - alias: kafka.producer.message_rate - - - # v0.9.0.x Producers - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=producer-metrics,client-id=.*' - attribute: - response-rate: - metric_type: gauge - alias: kafka.producer.response_rate - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=producer-metrics,client-id=.*' - attribute: - request-rate: - metric_type: gauge - alias: kafka.producer.request_rate - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=producer-metrics,client-id=.*' - attribute: - request-latency-avg: - metric_type: gauge - alias: kafka.producer.request_latency_avg - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=producer-metrics,client-id=.*' - attribute: - outgoing-byte-rate: - metric_type: gauge - alias: kafka.producer.bytes_out - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=producer-metrics,client-id=.*' - attribute: - io-wait-time-ns-avg: - metric_type: gauge - alias: kafka.producer.io_wait - - - # v0.8.2.x Consumers - - include: - domain: 'kafka.consumer' - bean_regex: 'kafka\.consumer:type=ConsumerFetcherManager,name=MaxLag,clientId=.*' - attribute: - Value: - metric_type: gauge - alias: kafka.consumer.max_lag - - include: - domain: 'kafka.consumer' - bean_regex: 'kafka\.consumer:type=ConsumerFetcherManager,name=MinFetchRate,clientId=.*' - attribute: - Value: - metric_type: gauge - alias: kafka.consumer.fetch_rate - - include: - domain: 'kafka.consumer' - bean_regex: 'kafka\.consumer:type=ConsumerTopicMetrics,name=BytesPerSec,clientId=.*' - attribute: - Count: - metric_type: rate - alias: kafka.consumer.bytes_in - - include: - domain: 'kafka.consumer' - bean_regex: 'kafka\.consumer:type=ConsumerTopicMetrics,name=MessagesPerSec,clientId=.*' - attribute: - Count: - metric_type: rate - alias: kafka.consumer.messages_in - - # Offsets committed to ZooKeeper - - include: - domain: 'kafka.consumer' - bean_regex: 'kafka\.consumer:type=ZookeeperConsumerConnector,name=ZooKeeperCommitsPerSec,clientId=.*' - attribute: - Count: - metric_type: rate - alias: kafka.consumer.zookeeper_commits - # Offsets committed to Kafka - - include: - domain: 'kafka.consumer' - bean_regex: 'kafka\.consumer:type=ZookeeperConsumerConnector,name=KafkaCommitsPerSec,clientId=.*' - attribute: - Count: - metric_type: rate - alias: kafka.consumer.kafka_commits - - # v0.9.0.x Consumers - - include: - domain: 'kafka.consumer' - bean_regex: 'kafka\.consumer:type=consumer-fetch-manager-metrics,client-id=.*' - attribute: - bytes-consumed-rate: - metric_type: gauge - alias: kafka.consumer.bytes_in - - include: - domain: 'kafka.consumer' - bean_regex: 'kafka\.consumer:type=consumer-fetch-manager-metrics,client-id=.*' - attribute: - records-consumed-rate: - metric_type: gauge - alias: kafka.consumer.messages_in - - # - # Aggregate cluster stats - # - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.net.bytes_out.rate - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.net.bytes_in.rate - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.messages_in.rate - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=BrokerTopicMetrics,name=BytesRejectedPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.net.bytes_rejected.rate - - # - # Request timings - # - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=BrokerTopicMetrics,name=FailedFetchRequestsPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.request.fetch.failed.rate - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=BrokerTopicMetrics,name=FailedProduceRequestsPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.request.produce.failed.rate - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=RequestsPerSec,request=Produce' - attribute: - Count: - metric_type: rate - alias: kafka.request.produce.rate - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Produce' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.produce.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.produce.time.99percentile - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=RequestsPerSec,request=FetchConsumer' - attribute: - Count: - metric_type: rate - alias: kafka.request.fetch_consumer.rate - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=RequestsPerSec,request=FetchFollower' - attribute: - Count: - metric_type: rate - alias: kafka.request.fetch_follower.rate - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=TotalTimeMs,request=FetchConsumer' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.fetch_consumer.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.fetch_consumer.time.99percentile - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=TotalTimeMs,request=FetchFollower' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.fetch_follower.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.fetch_follower.time.99percentile - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=TotalTimeMs,request=UpdateMetadata' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.update_metadata.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.update_metadata.time.99percentile - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Metadata' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.metadata.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.metadata.time.99percentile - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Offsets' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.offsets.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.offsets.time.99percentile - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=KafkaRequestHandlerPool,name=RequestHandlerAvgIdlePercent' - attribute: - Count: - metric_type: rate - alias: kafka.request.handler.avg.idle.pct.rate - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=ProducerRequestPurgatory,name=PurgatorySize' - attribute: - Value: - metric_type: gauge - alias: kafka.request.producer_request_purgatory.size - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=FetchRequestPurgatory,name=PurgatorySize' - attribute: - Value: - metric_type: gauge - alias: kafka.request.fetch_request_purgatory.size - - # - # Replication stats - # - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions' - attribute: - Value: - metric_type: gauge - alias: kafka.replication.under_replicated_partitions - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=ReplicaManager,name=IsrShrinksPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.replication.isr_shrinks.rate - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=ReplicaManager,name=IsrExpandsPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.replication.isr_expands.rate - - include: - domain: 'kafka.controller' - bean: 'kafka.controller:type=ControllerStats,name=LeaderElectionRateAndTimeMs' - attribute: - Count: - metric_type: rate - alias: kafka.replication.leader_elections.rate - - include: - domain: 'kafka.controller' - bean: 'kafka.controller:type=ControllerStats,name=UncleanLeaderElectionsPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.replication.unclean_leader_elections.rate - - include: - domain: 'kafka.controller' - bean: 'kafka.controller:type=KafkaController,name=OfflinePartitionsCount' - attribute: - Value: - metric_type: gauge - alias: kafka.replication.offline_partitions_count - - include: - domain: 'kafka.controller' - bean: 'kafka.controller:type=KafkaController,name=ActiveControllerCount' - attribute: - Value: - metric_type: gauge - alias: kafka.replication.active_controller_count - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=ReplicaManager,name=PartitionCount' - attribute: - Value: - metric_type: gauge - alias: kafka.replication.partition_count - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=ReplicaManager,name=LeaderCount' - attribute: - Value: - metric_type: gauge - alias: kafka.replication.leader_count - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=ReplicaFetcherManager,name=MaxLag,clientId=Replica' - attribute: - Value: - metric_type: gauge - alias: kafka.replication.max_lag - - # - # Log flush stats - # - - include: - domain: 'kafka.log' - bean: 'kafka.log:type=LogFlushStats,name=LogFlushRateAndTimeMs' - attribute: - Count: - metric_type: rate - alias: kafka.log.flush_rate.rate -<% else %> -init_config: - is_jmx: true - - # Metrics collected by this check. You should not have to modify this. - conf: - # - # Aggregate cluster stats - # - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="BrokerTopicMetrics",name="AllTopicsBytesOutPerSec"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.net.bytes_out - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="BrokerTopicMetrics",name="AllTopicsBytesInPerSec"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.net.bytes_in - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="BrokerTopicMetrics",name="AllTopicsMessagesInPerSec"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.messages_in - - # - # Request timings - # - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="BrokerTopicMetrics",name="AllTopicsFailedFetchRequestsPerSec"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.request.fetch.failed - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="BrokerTopicMetrics",name="AllTopicsFailedProduceRequestsPerSec"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.request.produce.failed - - include: - domain: '"kafka.network"' - bean: '"kafka.network":type="RequestMetrics",name="Produce-TotalTimeMs"' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.produce.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.produce.time.99percentile - - include: - domain: '"kafka.network"' - bean: '"kafka.network":type="RequestMetrics",name="Fetch-TotalTimeMs"' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.fetch.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.fetch.time.99percentile - - include: - domain: '"kafka.network"' - bean: '"kafka.network":type="RequestMetrics",name="UpdateMetadata-TotalTimeMs"' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.update_metadata.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.update_metadata.time.99percentile - - include: - domain: '"kafka.network"' - bean: '"kafka.network":type="RequestMetrics",name="Metadata-TotalTimeMs"' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.metadata.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.metadata.time.99percentile - - include: - domain: '"kafka.network"' - bean: '"kafka.network":type="RequestMetrics",name="Offsets-TotalTimeMs"' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.offsets.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.offsets.time.99percentile - - # - # Replication stats - # - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="ReplicaManager",name="ISRShrinksPerSec"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.replication.isr_shrinks - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="ReplicaManager",name="ISRExpandsPerSec"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.replication.isr_expands - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="ControllerStats",name="LeaderElectionRateAndTimeMs"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.replication.leader_elections - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="ControllerStats",name="UncleanLeaderElectionsPerSec"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.replication.unclean_leader_elections - - # - # Log flush stats - # - - include: - domain: '"kafka.log"' - bean: '"kafka.log":type="LogFlushStats",name="LogFlushRateAndTimeMs"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.log.flush_rate -<% end %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kafka_consumer.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kafka_consumer.yaml.erb deleted file mode 100644 index 68c6d23bfdc41..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kafka_consumer.yaml.erb +++ /dev/null @@ -1,23 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - kafka_connect_str: <%= i['kafka_connect_str'] %> - zk_connect_str: <%= i['zk_connect_str'] %> - <% if i['zk_prefix'] -%> - zk_prefix: <%= i['zk_prefix'] %> - <% end -%> - <% if i['consumer_groups'] -%> - consumer_groups: <%= i['name'] %> - <% i["consumer_groups"].each do |consumer, t| -%> - <%= consumer %>: - <% t.each do |topic, l| -%> - <%= topic %>: <%= l %> - <% end -%> - <% end -%> - <% end -%> - <% end -%> - -init_config: -# The Kafka Consumer check does not require any init_config - diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kubernetes.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kubernetes.yaml.erb deleted file mode 100644 index f09867a7e9efd..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kubernetes.yaml.erb +++ /dev/null @@ -1,4 +0,0 @@ -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kyototycoon.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kyototycoon.yaml.erb deleted file mode 100644 index 3d9caa307304a..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kyototycoon.yaml.erb +++ /dev/null @@ -1,19 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -# Add one or more instances, which accept report_url, -# name, and optionally tags keys. The report URL should -# be a URL to the Kyoto Tycoon "report" RPC endpoint. -instances: - <% @instances.each do |i| -%> - - name: <%= i['name'] %> - report_url: <%= i['report_url'] %> # e.g. http://localhost:1978/rpc/report - <% if i.key?('tags') -%> - tags: - <% @tags.each do |k, v| -%> - <%= k %>: <%= v %> - <% end -%> - <% end -%> - <% end -%> - -init_config: -# The Kyoto Tycoon check does not require any init_config diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/lighttpd.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/lighttpd.yaml.erb deleted file mode 100644 index e2ab2f0205b94..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/lighttpd.yaml.erb +++ /dev/null @@ -1,15 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - lighttpd_status_url: <%= i['status_url'] %> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each_pair do |k, v| -%> - - <%= k %>: <%= v %> - <% end -%> - <% end -%> - <% end -%> - -init_config: -# No init_config section needed diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mcache.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mcache.yaml.erb deleted file mode 100644 index c64cca9687d7b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mcache.yaml.erb +++ /dev/null @@ -1,18 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - url: <%= i['url'] %> - <% if i.key?('port') -%> - port: <%= i['port'] %> - <% end -%> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> - <% end -%> - -init_config: -# No init_config section needed diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mesos.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mesos.yaml.erb deleted file mode 100644 index 88097d78f8f7f..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mesos.yaml.erb +++ /dev/null @@ -1,8 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: - <% if @init_config.key?('default_timeout') -%> - default_timeout: <%= @init_config['default_timeout'] %> - <% end -%> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mongo.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mongo.yaml.erb deleted file mode 100644 index cd45bae7c1532..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mongo.yaml.erb +++ /dev/null @@ -1,35 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - server: mongodb://<%= i['host']%>:<%= i['port'] %> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> - <% if i.key?('ssl') -%> - ssl: <%= i['ssl'] %> - ssl_ca_certs: <%= i['ssl_ca_certs'] %> - ssl_cert_reqs: <%= i['ssl_cert_reqs'] %> - ssl_certfile: <%= i['ssl_certfile'] %> - ssl_keyfile: <%= i['ssl_keyfile'] %> - <% end %> - <% if i.key?('additional_metrics') -%> - additional_metrics: - <% i['additional_metrics'].each do |t| %> - - <%= t %> - <%end -%> - <% end %> - <% if i.key?('collections') -%> - collections: - <% i['collections'].each do |t| %> - - <%= t %> - <%end -%> - <% end %> - <% end -%> - -init_config: -# No init_config details needed - diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mysql.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mysql.yaml.erb deleted file mode 100644 index e7cc4672fbcd7..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mysql.yaml.erb +++ /dev/null @@ -1,38 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - server: <%= i['server'] %> - <% if i.key?('port') -%> - port: <%= i['port'] %> - <% end -%> - user: <%= i['user'] %> - pass: <%= i['pass'] %> - <% if i.key?('sock') -%> - sock: <%= i['sock'] %> - <% end -%> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> - <% if i.key?('options') -%> - options: - <% i['options'].each do |o| -%> - <%= o %> - <% end -%> - <% end -%> - <% if i.key?('queries') -%> - queries: - <% i['queries'].each do |q| -%> - - type: <%= q['type'] %> - field: <%= q['field'] %> - metric: <%= q['metric'] %> - query: <%= q['query'] %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/network.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/network.yaml.erb deleted file mode 100644 index 8646ba6c06d41..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/network.yaml.erb +++ /dev/null @@ -1,13 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -init_config: - -# Network check supports only one configured instance -instances: -<% @instances.each do |i| -%> - - collect_connection_state: <%= i['collect_connection_state'] || 'false' %> - excluded_interfaces: - <% i["excluded_interfaces"].each do |interface| -%> - - <%= interface %> - <% end -%> -<% end -%> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/nginx.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/nginx.yaml.erb deleted file mode 100644 index bda9413ab5448..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/nginx.yaml.erb +++ /dev/null @@ -1,23 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - nginx_status_url: <%= i['nginx_status_url'] %> - <% unless i['ssl_validation'].nil? -%> - ssl_validation: <%= i['ssl_validation'] %> - <% end -%> - <%# don't print user/password if either is nil -%> - <% unless i['user'].nil? || i['password'].nil? -%> - user: <%= i['user'] %> - password: <%= i['password'] %> - <% end -%> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/ntp.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/ntp.yaml.erb deleted file mode 100644 index 5f39a4d59e5c2..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/ntp.yaml.erb +++ /dev/null @@ -1,5 +0,0 @@ -<%# Sanitize the compiled Mash to standard Array/Hash objects by way of JSON -%> -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: -# Nothing to configure here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/pgbouncer.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/pgbouncer.yaml.erb deleted file mode 100644 index d6f4ae3cde641..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/pgbouncer.yaml.erb +++ /dev/null @@ -1,6 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: -# Nothing to configure here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/php_fpm.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/php_fpm.yaml.erb deleted file mode 100644 index c4b509c7e7881..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/php_fpm.yaml.erb +++ /dev/null @@ -1,4 +0,0 @@ -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: -# nothing to add here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/postfix.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/postfix.yaml.erb deleted file mode 100644 index ead1e879187c1..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/postfix.yaml.erb +++ /dev/null @@ -1,21 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -# Each instance requires a directory and an array of queues. -# Tags are optional. -instances: - <% @instances.each do |instance| -%> - - directory: <%= instance['directory'] %> - queues: - <% Array(instance['queues']).each do |queue| -%> - - <%= queue %> - <% end -%> - <% if instance.key?('tags') -%> - tags: - <% Array(instance['tags']).each do |tag| -%> - - <%= tag %> - <% end -%> - <% end -%> - <% end -%> - -# Postfix check does not require any init_config -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/postgres.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/postgres.yaml.erb deleted file mode 100644 index 0ad4a4f09d45c..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/postgres.yaml.erb +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%# TODO: Breaking change, remove defaults -%> -<% - # Apply default transformations to @instances, an ImmutableArray - instances = @instances.to_a - - instances.each do |instance| - # The `server` key renders as a `host` value - # `if` test future-proofs the key from being modified if users change to - # using `host` as their key. - instance['host'] = instance.delete 'server' if instance['server'] - - # If `port` is unspecified, set to 5432 - instance['port'] = 5432 if instance['port'].nil? - end --%> -<%= JSON.parse(({ 'instances' => instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: -# Nothing to configure here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/process.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/process.yaml.erb deleted file mode 100644 index 6d65c5a271baf..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/process.yaml.erb +++ /dev/null @@ -1,3 +0,0 @@ -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: \ No newline at end of file diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/rabbitmq.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/rabbitmq.yaml.erb deleted file mode 100644 index 426d4dc34bb69..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/rabbitmq.yaml.erb +++ /dev/null @@ -1,54 +0,0 @@ -# Generated by Chef, local modifications will be overwritten -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - # for every instance a 'rabbitmq_api_url' must be provided, pointing to the api - # url of the RabbitMQ Management Plugin (http://www.rabbitmq.com/management.html) - # optional: 'rabbitmq_user' (default: guest), 'rabbitmq_pass' (default: guest), 'ssl_verify' (default: true) and 'tag_families' (default: false) -<% @instances.each do |i| -%> - - rabbitmq_api_url: <%= i['api_url'] %> - rabbitmq_user: <%= i['user'] || 'guest' %> - rabbitmq_pass: <%= i['pass'] || 'guest' %> - ssl_verify: <%= i.key?('ssl_verify') ? i['ssl_verify'] : 'true' %> - # https://help.datadoghq.com/hc/en-us/articles/211590103-Tagging-RabbitMQ-queues-by-tag-family - tag_families: <%= i['tag_families'] || 'false' %> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |x| -%> - - <%= x %> - <% end -%> - <% end -%> - <% if i.key?('nodes') -%> - nodes: - <% i['nodes'].each do |x| -%> - - <%= x %> - <% end -%> - <% end -%> - <% if i.key?('nodes_regexes') -%> - nodes_regexes: - <% i['nodes_regexes'].each do |x| -%> - - <%= x %> - <% end -%> - <% end -%> - <% if i.key?('queues') -%> - queues: - <% i['queues'].each do |x| -%> - - <%= x %> - <% end -%> - <% end -%> - <% if i.key?('queues_regexes') -%> - queues_regexes: - <% i['queues_regexes'].each do |x| -%> - - <%= x %> - <% end -%> - <% end -%> - <% if i.key?('vhosts') -%> - vhosts: - <% i['vhosts'].each do |x| -%> - - <%= x %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/redisdb.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/redisdb.yaml.erb deleted file mode 100644 index e610af37df9e8..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/redisdb.yaml.erb +++ /dev/null @@ -1,38 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - <% if i.key?("unix_socket_path") -%> - - unix_socket_path: <%= i["unix_socket_path"] %> - <% else -%> - - host: <%= i["server"] %> - port: <%= i["port"] || 6379 %> - <% end -%> - <% if i.key?("password") -%> - password: <%= i["password"] %> - <% end -%> - <% if i.key?("db") -%> - db: <%= i["db"] %> - <% end -%> - <% if i.key?("tags") -%> - tags: - <% i["tags"].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> - <% if i.key?("keys") -%> - <% if i.key?("warn_on_missing_keys") -%> - warn_on_missing_keys: <%= i['warn_on_missing_keys'] %> - <% end -%> - keys: - <% i["keys"].each do |k| -%> - - <%= k %> - <% end -%> - <% end -%> - <% if i.key?('slowlog-max-len') -%>slowlog-max-len: <%= i['slowlog-max-len'] %><% end -%> - <% if i.key?('socket_timeout') -%>socket_timeout: <%= i['socket_timeout'] %><% end -%> - <% if i.key?('command_stats') -%>command_stats: <%= i['command_stats'] %><% end -%> -<% end -%> - -init_config: -# nothing to add here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/riak.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/riak.yaml.erb deleted file mode 100644 index 9f5f1958fbff2..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/riak.yaml.erb +++ /dev/null @@ -1,9 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - url: <%= i["url"] %> -<% end -%> - -init_config: -# Nothing to configure here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/snmp.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/snmp.yaml.erb deleted file mode 100644 index 11b348e06fe94..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/snmp.yaml.erb +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({'init_config' => @init_config, 'instances' => @instances, 'logs' => @logs}).to_json).to_yaml %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/solr.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/solr.yaml.erb deleted file mode 100644 index f4e6cd90b24f5..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/solr.yaml.erb +++ /dev/null @@ -1,71 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -# List of metrics to be collected by the integration -# Read http://docs.datadoghq.com/integrations/java/ to learn how to customize it -init_config: - conf: - - include: - type: searcher - attribute: - maxDoc: - alias: solr.searcher.maxdoc - metric_type: gauge - numDocs: - alias: solr.searcher.numdocs - metric_type: gauge - warmupTime: - alias: solr.searcher.warmup - metric_type: gauge - - include: - id: org.apache.solr.search.FastLRUCache - attribute: - cumulative_lookups: - alias: solr.cache.lookups - metric_type: counter - cumulative_hits: - alias: solr.cache.hits - metric_type: counter - cumulative_inserts: - alias: solr.cache.inserts - metric_type: counter - cumulative_evictions: - alias: solr.cache.evictions - metric_type: counter - - include: - id: org.apache.solr.search.LRUCache - attribute: - cumulative_lookups: - alias: solr.cache.lookups - metric_type: counter - cumulative_hits: - alias: solr.cache.hits - metric_type: counter - cumulative_inserts: - alias: solr.cache.inserts - metric_type: counter - cumulative_evictions: - alias: solr.cache.evictions - metric_type: counter - - include: - id: org.apache.solr.handler.component.SearchHandler - attribute: - errors: - alias: solr.search_handler.errors - metric_type: counter - requests: - alias: solr.search_handler.requests - metric_type: counter - timeouts: - alias: solr.search_handler.timeouts - metric_type: counter - totalTime: - alias: solr.search_handler.time - metric_type: counter - avgTimePerRequest: - alias: solr.search_handler.avg_time_per_req - metric_type: gauge - avgRequestsPerSecond: - alias: solr.search_handler.avg_requests_per_sec - metric_type: gauge diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/sqlserver.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/sqlserver.yaml.erb deleted file mode 100644 index e44ccc5f42938..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/sqlserver.yaml.erb +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({'init_config' => @init_config, 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/ssh_check.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/ssh_check.yaml.erb deleted file mode 100644 index daf37dbcac11d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/ssh_check.yaml.erb +++ /dev/null @@ -1,26 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - host: <%= i['host'] %> - username: <%= i['username'] %> - <% - keys = %w(password port sftp_check private_key_file add_missing_keys tags) - keys.each do |key| - if i.key?(key) - -%> - <%= key %>: <%= i[key] %> - <% - end - end - -%> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/supervisord.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/supervisord.yaml.erb deleted file mode 100644 index ab6c4d5b09541..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/supervisord.yaml.erb +++ /dev/null @@ -1,6 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/system_core.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/system_core.yaml.erb deleted file mode 100644 index 5f7e3d4c7ea39..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/system_core.yaml.erb +++ /dev/null @@ -1,9 +0,0 @@ -# Generated by Chef, local modifications will be overwritten -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -init_config: - -instances: - # No configuration is needed for this check. - # A single instance needs to be defined with any value. - - foo: bar diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/system_swap.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/system_swap.yaml.erb deleted file mode 100644 index 489e2bb4ee68a..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/system_swap.yaml.erb +++ /dev/null @@ -1,9 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -# This check takes no initial configuration -init_config: - -instances: - [{}] diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tcp_check.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tcp_check.yaml.erb deleted file mode 100644 index 5f39a4d59e5c2..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tcp_check.yaml.erb +++ /dev/null @@ -1,5 +0,0 @@ -<%# Sanitize the compiled Mash to standard Array/Hash objects by way of JSON -%> -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: -# Nothing to configure here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tokumx.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tokumx.yaml.erb deleted file mode 100644 index a7fbcb3a27ecc..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tokumx.yaml.erb +++ /dev/null @@ -1,34 +0,0 @@ -<%= JSON.parse(({ 'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - server: mongodb://<%= i['host']%>:<%= i['port'] %> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> - <% if i.key?('ssl') -%> - ssl: <%= i['ssl'] %> - ssl_ca_certs: <%= i['ssl_ca_certs'] %> - ssl_cert_reqs: <%= i['ssl_cert_reqs'] %> - ssl_certfile: <%= i['ssl_certfile'] %> - ssl_keyfile: <%= i['ssl_keyfile'] %> - <% end %> - <% if i.key?('additional_metrics') -%> - additional_metrics: - <% i['additional_metrics'].each do |t| %> - - <%= t %> - <%end -%> - <% end %> - <% if i.key?('collections') -%> - collections: - <% i['collections'].each do |t| %> - - <%= t %> - <%end -%> - <% end %> - <% end -%> - -init_config: -# No init_config details needed diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tomcat.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tomcat.yaml.erb deleted file mode 100644 index 17f4c7298b931..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tomcat.yaml.erb +++ /dev/null @@ -1,78 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - host: <%= i["server"] %> - port: <%= i["port"] %> - <% if i.key?("username") -%> - user: <%= i["username"] %> - password: <%= i["password"] %> - <% end -%> - name: <%= i["name"] || "tomcat" %> -<% end -%> - -# List of metrics to be collected by the integration -# You should not need to modify this. -init_config: - conf: - - include: - type: ThreadPool - attribute: - maxThreads: - alias: tomcat.threads.max - metric_type: gauge - currentThreadCount: - alias: tomcat.threads.count - metric_type: gauge - currentThreadsBusy: - alias: tomcat.threads.busy - metric_type: gauge - - include: - type: GlobalRequestProcessor - attribute: - bytesSent: - alias: tomcat.bytes_sent - metric_type: counter - bytesReceived: - alias: tomcat.bytes_rcvd - metric_type: counter - errorCount: - alias: tomcat.error_count - metric_type: counter - requestCount: - alias: tomcat.request_count - metric_type: counter - maxTime: - alias: tomcat.max_time - metric_type: gauge - processingTime: - alias: tomcat.processing_time - metric_type: counter - - include: - j2eeType: Servlet - attribute: - processingTime: - alias: tomcat.servlet.processing_time - metric_type: counter - errorCount: - alias: tomcat.servlet.error_count - metric_type: counter - requestCount: - alias: tomcat.servlet.request_count - metric_type: counter - - include: - type: Cache - accessCount: - alias: tomcat.cache.access_count - metric_type: counter - hitsCounts: - alias: tomcat.cache.hits_count - metric_type: counter - - include: - type: JspMonitor - jspCount: - alias: tomcat.jsp.count - metric_type: counter - jspReloadCount: - alias: tomcat.jsp.reload_count - metric_type: counter diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/varnish.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/varnish.yaml.erb deleted file mode 100644 index 512bbce5a76b0..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/varnish.yaml.erb +++ /dev/null @@ -1,24 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - varnishstat: <%= i["varnishstat"] || "/usr/bin/varnishstat" %> - <% if i.key?("name") -%> - name: <%= i["name"] %> - <% end -%> - <% if i.key?("tags") -%> - tags: - <% i["tags"].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> - <% if i.key?("varnishadm") -%> - varnishadm: <%= i["varnishadm"] %> - <% end -%> - <% if i.key?("secretfile") -%> - secretfile: <%= i["secretfile"] %> - <% end -%> -<% end -%> - -init_config: -# Nothing to configure here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/win32_event_log.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/win32_event_log.yaml.erb deleted file mode 100644 index 11b348e06fe94..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/win32_event_log.yaml.erb +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({'init_config' => @init_config, 'instances' => @instances, 'logs' => @logs}).to_json).to_yaml %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/windows_service.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/windows_service.yaml.erb deleted file mode 100644 index ab6c4d5b09541..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/windows_service.yaml.erb +++ /dev/null @@ -1,6 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/wmi_check.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/wmi_check.yaml.erb deleted file mode 100644 index a80c523a04bbb..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/wmi_check.yaml.erb +++ /dev/null @@ -1,75 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -init_config: - -instances: - # Each WMI query has 2 required options, `class` and `metrics` and two - # optional options, `filters` and `tag_by`. - # - # `class` is the name of the WMI class, for example Win32_OperatingSystem - # or Win32_PerfFormattedData_PerfProc_Process. You can find many of the - # standard class names on the MSDN docs at - # http://msdn.microsoft.com/en-us/library/windows/desktop/aa394084.aspx. - # The Win32_FormattedData_* classes provide many useful performance counters - # by default. - # - # - # `metrics` is a list of metrics you want to capture, with each item in the - # list being a set of [WMI property name, metric name, metric type]. - # - # - The property name is something like `NumberOfUsers` or `ThreadCount`. - # The standard properties are also available on the MSDN docs for each - # class. - # - # - The metric name is the name you want to show up in Datadog. - # - # - The metric type is from the standard choices for all agent checks, such - # as gauge, rate, histogram or counter. - # - # - # `filters` is a list of filters on the WMI query you may want. For example, - # for a process-based WMI class you may want metrics for only certain - # processes running on your machine, so you could add a filter for each - # process name. See below for an example of this case. - # - # - # `tag_by` optionally lets you tag each metric with a property from the - # WMI class you're using. This is only useful when you will have multiple - # values for your WMI query. The examples below show how you can tag your - # process metrics with the process name (giving a tag of "name:app_name"). - - - # Fetch the number of processes and users - - class: Win32_OperatingSystem - metrics: - - [NumberOfProcesses, system.proc.count, gauge] - - [NumberOfUsers, system.users.count, gauge] - - # Fetch metrics for a single running application, called myapp - - class: Win32_PerfFormattedData_PerfProc_Process - metrics: - - [ThreadCount, my_app.threads.count, gauge] - - [VirtualBytes, my_app.mem.virtual, gauge] - filters: - - Name: myapp - - # Fetch process metrics for a set of processes, tagging by app name. - - class: Win32_PerfFormattedData_PerfProc_Process - metrics: - - [ThreadCount, proc.threads.count, gauge] - - [VirtualBytes, proc.mem.virtual, gauge] - - [PercentProcessorTime, proc.cpu_pct, gauge] - filters: - - Name: app1 - - Name: app2 - - Name: app3 - tag_by: Name - - # Fetch process metrics for every available process, tagging by app name. - - class: Win32_PerfFormattedData_PerfProc_Process - metrics: - - [IOReadBytesPerSec, proc.io.bytes_read, gauge] - - [IOWriteBytesPerSec, proc.io.bytes_written, gauge] - tag_by: Name - - diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/zk.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/zk.yaml.erb deleted file mode 100644 index c5ee8f8386bf5..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/zk.yaml.erb +++ /dev/null @@ -1,22 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -<% excluded_keys = ["host", "port", "timeout", "tags"] -%> -instances: - <% @instances.each do |instance| -%> - - host: <%= instance["host"] %> - port: <%= instance["port"] %> - <% if instance.key?("timeout") -%> - timeout: <%= instance["timeout"] %> - <% end -%> - <% if instance.key?("tags") -%> - tags: - <% instance["tags"].each do |tag| -%> - - <%= tag %> - <% end -%> - <% end -%> - <% (instance.keys - excluded_keys).each do |key| -%> - <%= key %>: <%= instance[key] %> - <% end -%> - <% end %> - -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-reinstall/.gitignore b/test/kitchen/site-cookbooks/dd-agent-reinstall/.gitignore deleted file mode 100644 index 45b891c93cfc3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-reinstall/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.vagrant -Berksfile.lock -*~ -*# -.#* -\#*# -.*.sw[a-z] -*.un~ -/cookbooks - -# Bundler -Gemfile.lock -bin/* -.bundle/* - diff --git a/test/kitchen/site-cookbooks/dd-agent-reinstall/Berksfile b/test/kitchen/site-cookbooks/dd-agent-reinstall/Berksfile deleted file mode 100644 index c4bb297b7275b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-reinstall/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode - -metadata diff --git a/test/kitchen/site-cookbooks/dd-agent-reinstall/Gemfile b/test/kitchen/site-cookbooks/dd-agent-reinstall/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-reinstall/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-agent-reinstall/README.md b/test/kitchen/site-cookbooks/dd-agent-reinstall/README.md deleted file mode 100644 index 15c8de8b2df5a..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-reinstall/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# dd-agent-reinstall cookbook - -Reinstalls the same Windows Agent version, using different installer flags \ No newline at end of file diff --git a/test/kitchen/site-cookbooks/dd-agent-reinstall/attributes/default.rb b/test/kitchen/site-cookbooks/dd-agent-reinstall/attributes/default.rb deleted file mode 100644 index 6df9bffb59358..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-reinstall/attributes/default.rb +++ /dev/null @@ -1,8 +0,0 @@ -default['dd-agent-reinstall']['agent_package_retries'] = nil -default['dd-agent-reinstall']['agent_package_retry_delay'] = nil - -default['dd-agent-reinstall']['windows_version'] = nil # => install the latest available version -default['dd-agent-reinstall']['windows_agent_url'] = 'https://ddagent-windows-stable.s3.amazonaws.com/' -default['dd-agent-reinstall']['windows_agent_filename'] = nil - -default['dd-agent-reinstall']['agent_install_options'] = '' diff --git a/test/kitchen/site-cookbooks/dd-agent-reinstall/chefignore b/test/kitchen/site-cookbooks/dd-agent-reinstall/chefignore deleted file mode 100644 index a6de14221d876..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-reinstall/chefignore +++ /dev/null @@ -1,96 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -## COMPILED ## -############## -a.out -*.o -*.pyc -*.so -*.com -*.class -*.dll -*.exe -*/rdoc/ - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-agent-reinstall/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-reinstall/metadata.rb deleted file mode 100644 index c196d46aadd9f..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-reinstall/metadata.rb +++ /dev/null @@ -1,5 +0,0 @@ -name "dd-agent-reinstall" -maintainer "Datadog" -description "Reinstalls the installed Windows Agent" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.2.0" diff --git a/test/kitchen/site-cookbooks/dd-agent-reinstall/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-reinstall/recipes/default.rb deleted file mode 100644 index d16e90baee341..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-reinstall/recipes/default.rb +++ /dev/null @@ -1,57 +0,0 @@ -# -# Cookbook Name:: dd-agent-reinstall -# Recipe:: default -# -# Copyright (C) 2013 Datadog -# -# All rights reserved - Do Not Redistribute -# -require 'uri' - -if node['platform_family'] != 'windows' - raise "The dd-agent-reinstall cookbook is only usable on Windows." -end - -package_retries = node['dd-agent-reinstall']['agent_package_retries'] -package_retry_delay = node['dd-agent-reinstall']['agent_package_retry_delay'] -dd_agent_version = node['dd-agent-reinstall']['windows_version'] -dd_agent_filename = node['dd-agent-reinstall']['windows_agent_filename'] - -if dd_agent_filename - dd_agent_installer_basename = dd_agent_filename -else - if dd_agent_version - dd_agent_installer_basename = "datadog-agent-#{dd_agent_version}-1-x86_64" - else - dd_agent_installer_basename = "datadog-agent-6.0.0-beta.latest.amd64" - end -end - -temp_file_basename = ::File.join(Chef::Config[:file_cache_path], 'ddagent-up').gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) - -dd_agent_installer = "#{dd_agent_installer_basename}.msi" -temp_file = "#{temp_file_basename}.msi" -installer_type = :msi -# Agent >= 5.12.0 installs per-machine by default, but specifying ALLUSERS=1 shouldn't affect the install -agent_install_options = node['dd-agent-reinstall']['agent_install_options'] -install_options = "/norestart ALLUSERS=1 #{agent_install_options}" - -use_windows_package_resource = true - -source_url = node['dd-agent-reinstall']['windows_agent_url'] -if !source_url.end_with? '/' - source_url += '/' -end -source_url += dd_agent_installer - -# Download the installer to a temp location -remote_file temp_file do - source source_url - retries package_retries unless package_retries.nil? - retry_delay package_retry_delay unless package_retry_delay.nil? -end - -execute "reinstall-agent" do - command "start /wait msiexec /log upgrade.log /q /i #{temp_file} #{install_options}" - action :run -end diff --git a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/.gitignore b/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/.gitignore deleted file mode 100644 index 45b891c93cfc3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.vagrant -Berksfile.lock -*~ -*# -.#* -\#*# -.*.sw[a-z] -*.un~ -/cookbooks - -# Bundler -Gemfile.lock -bin/* -.bundle/* - diff --git a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/Berksfile b/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/Berksfile deleted file mode 100644 index c4bb297b7275b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode - -metadata diff --git a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/Gemfile b/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/README.md b/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/README.md deleted file mode 100644 index 1c73493f28680..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# dd-agent-rhel-workaround cookbook - -Works around the root partition not being large enough to install and upgrade the Agent diff --git a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/chefignore b/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/chefignore deleted file mode 100644 index a6de14221d876..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/chefignore +++ /dev/null @@ -1,96 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -## COMPILED ## -############## -a.out -*.o -*.pyc -*.so -*.com -*.class -*.dll -*.exe -*/rdoc/ - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/metadata.rb deleted file mode 100644 index 3c9e3a75cd96d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/metadata.rb +++ /dev/null @@ -1,5 +0,0 @@ -name "dd-agent-rhel-workaround" -maintainer "Datadog" -description "Works around the root partition not being large enough to install and upgrade the Agent" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.0.1" diff --git a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/recipes/default.rb deleted file mode 100644 index ba081242e8fcc..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/recipes/default.rb +++ /dev/null @@ -1,22 +0,0 @@ -# -# Cookbook Name:: dd-agent-rhel-workaround -# Recipe:: default -# -# Copyright (C) 2020-present Datadog -# -# All rights reserved - Do Not Redistribute -# - -if node['platform_family'] == 'rhel' && node['platform_version'].to_i >= 8 - execute 'increase / partition size' do - command <<-EOF - export size=32; - export rootpart=$(cat /proc/mounts | awk '{ if ($2 =="/") print $1; }'); - while [[ $size -ne "0" ]] && ! sudo lvextend --size +${size}G ${rootpart}; do - size=$(($size / 2)); - done; - sudo xfs_growfs / - EOF - live_stream true - end -end diff --git a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/.gitignore b/test/kitchen/site-cookbooks/dd-agent-sles-workaround/.gitignore deleted file mode 100644 index 45b891c93cfc3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.vagrant -Berksfile.lock -*~ -*# -.#* -\#*# -.*.sw[a-z] -*.un~ -/cookbooks - -# Bundler -Gemfile.lock -bin/* -.bundle/* - diff --git a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/Berksfile b/test/kitchen/site-cookbooks/dd-agent-sles-workaround/Berksfile deleted file mode 100644 index c4bb297b7275b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode - -metadata diff --git a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/Gemfile b/test/kitchen/site-cookbooks/dd-agent-sles-workaround/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/README.md b/test/kitchen/site-cookbooks/dd-agent-sles-workaround/README.md deleted file mode 100644 index ed9a87cebbd96..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# dd-agent-sles-workaround cookbook - -Works around the Azure Agent trying to restart network interfaces -on SLES 12. diff --git a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/chefignore b/test/kitchen/site-cookbooks/dd-agent-sles-workaround/chefignore deleted file mode 100644 index a6de14221d876..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/chefignore +++ /dev/null @@ -1,96 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -## COMPILED ## -############## -a.out -*.o -*.pyc -*.so -*.com -*.class -*.dll -*.exe -*/rdoc/ - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-sles-workaround/metadata.rb deleted file mode 100644 index aa90d59ab293e..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/metadata.rb +++ /dev/null @@ -1,5 +0,0 @@ -name "dd-agent-sles-workaround" -maintainer "Datadog" -description "Works around waagent restarting network interfaces on SLES 12" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.0.1" diff --git a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-sles-workaround/recipes/default.rb deleted file mode 100644 index f941e8fffd57f..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/recipes/default.rb +++ /dev/null @@ -1,29 +0,0 @@ -# -# Cookbook Name:: dd-agent-sles-workaround -# Recipe:: default -# -# Copyright (C) 2020-present Datadog -# -# All rights reserved - Do Not Redistribute -# - -if node['platform_family'] == 'suse' && node.key?('azure') - # Update the waagent conf to stop watching hostname changes. - execute 'update Azure Agent conf' do - command "sed -i 's/Provisioning\\.MonitorHostName=y/Provisioning\\.MonitorHostName=n/' /etc/waagent.conf" - end - - # Change the Windows Azure Agent conf to stop watching hostname changes. - # For some reason it's changing the hostname every 30s on SLES 12, which - # leads to a network interface reset, making it likely for tests to fail if a - # network call happens during the reset. - service 'waagent' do - service_name "waagent" - action :restart - end - - # Put eth0 back up in case the waagent was taking it down while we restarted it. - execute 'bring eth0 up' do - command "/sbin/ifup eth0" - end -end diff --git a/test/kitchen/site-cookbooks/dd-agent-system-files-check/.gitignore b/test/kitchen/site-cookbooks/dd-agent-system-files-check/.gitignore deleted file mode 100644 index 45b891c93cfc3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-system-files-check/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.vagrant -Berksfile.lock -*~ -*# -.#* -\#*# -.*.sw[a-z] -*.un~ -/cookbooks - -# Bundler -Gemfile.lock -bin/* -.bundle/* - diff --git a/test/kitchen/site-cookbooks/dd-agent-system-files-check/Berksfile b/test/kitchen/site-cookbooks/dd-agent-system-files-check/Berksfile deleted file mode 100644 index c4bb297b7275b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-system-files-check/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode - -metadata diff --git a/test/kitchen/site-cookbooks/dd-agent-system-files-check/Gemfile b/test/kitchen/site-cookbooks/dd-agent-system-files-check/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-system-files-check/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-agent-system-files-check/README.md b/test/kitchen/site-cookbooks/dd-agent-system-files-check/README.md deleted file mode 100644 index d1bbe95134ca5..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-system-files-check/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# dd-agent-system-files-check cookbook - -Lists system files before and after an install-uninstall cycle and checks we aren't deleting what we shouldn't. diff --git a/test/kitchen/site-cookbooks/dd-agent-system-files-check/chefignore b/test/kitchen/site-cookbooks/dd-agent-system-files-check/chefignore deleted file mode 100644 index a6de14221d876..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-system-files-check/chefignore +++ /dev/null @@ -1,96 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -## COMPILED ## -############## -a.out -*.o -*.pyc -*.so -*.com -*.class -*.dll -*.exe -*/rdoc/ - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-agent-system-files-check/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-system-files-check/metadata.rb deleted file mode 100644 index 2866375908287..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-system-files-check/metadata.rb +++ /dev/null @@ -1,5 +0,0 @@ -name "dd-agent-system-files-check" -maintainer "Datadog" -description "Lists system files before and after an install-uninstall cycle and checks we aren't deleting what we shouldn't." -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.0.1" diff --git a/test/kitchen/site-cookbooks/dd-agent-system-files-check/recipes/list-files-before-install.rb b/test/kitchen/site-cookbooks/dd-agent-system-files-check/recipes/list-files-before-install.rb deleted file mode 100644 index b77d8c48c74cd..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-system-files-check/recipes/list-files-before-install.rb +++ /dev/null @@ -1,27 +0,0 @@ -# -# Cookbook Name:: dd-agent-system-files-check -# Recipe:: default -# -# Copyright (C) 2020-present Datadog -# -# All rights reserved - Do Not Redistribute -# -require 'find' - -if node['platform_family'] != 'windows' - puts "dd-agent-system-files-check: Not implemented on non-windows" -else - ruby_block "list-before-files" do - block do - # Windows update is likely to change lots of files, disable it. - # It's okay to do this because this should run on an ephemereal VM. - system("sc.exe config wuauserv start=disabled") - system("sc.exe stop wuauserv") - - File.open("c:/before-files.txt", "w") do |out| - Find.find('c:/windows/').each { |f| out.puts(f) } - end - end - action :run - end -end diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/.gitignore b/test/kitchen/site-cookbooks/dd-agent-upgrade/.gitignore deleted file mode 100644 index 45b891c93cfc3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.vagrant -Berksfile.lock -*~ -*# -.#* -\#*# -.*.sw[a-z] -*.un~ -/cookbooks - -# Bundler -Gemfile.lock -bin/* -.bundle/* - diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/Berksfile b/test/kitchen/site-cookbooks/dd-agent-upgrade/Berksfile deleted file mode 100644 index c4bb297b7275b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode - -metadata diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/Gemfile b/test/kitchen/site-cookbooks/dd-agent-upgrade/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/README.md b/test/kitchen/site-cookbooks/dd-agent-upgrade/README.md deleted file mode 100644 index a6ce282f7c05a..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# dd-agent-upgrade cookbook - -Updates an installed Agent to the latest version (default), or the version -specified in `version`. You can also add a new repository by setting the -`add_new_repo` flag to `true` and passing an `aptrepo` and/or a `yumrepo`. This -is useful when you want to use the `dd-agent` recipe to install the latest -release, and then use this repository to add the candidate repository and -install the latest candidate. diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/Vagrantfile b/test/kitchen/site-cookbooks/dd-agent-upgrade/Vagrantfile deleted file mode 100644 index 23861276f1181..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/Vagrantfile +++ /dev/null @@ -1,25 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -Vagrant.configure("2") do |config| - config.vm.hostname = "dd-agent-upgrade-dev" - config.vm.box = "opscode_ubuntu-12.04_chef-11.4.4" - - #config.vm.box_url = "https://dl.dropbox.com/u/31081437/Berkshelf-CentOS-6.3-x86_64-minimal.box" - - config.berkshelf.enabled = true - - config.vm.provision :chef_solo do |chef| - chef.json = { - :mysql => { - :server_root_password => 'rootpass', - :server_debian_password => 'debpass', - :server_repl_password => 'replpass' - } - } - - chef.run_list = [ - "recipe[dd-agent-upgrade::default]" - ] - end -end diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/attributes/default.rb b/test/kitchen/site-cookbooks/dd-agent-upgrade/attributes/default.rb deleted file mode 100644 index cc3ea3f8ade8d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/attributes/default.rb +++ /dev/null @@ -1,70 +0,0 @@ -default['dd-agent-upgrade']['api_key'] = nil -default['dd-agent-upgrade']['agent_major_version'] = nil - -default['dd-agent-upgrade']['version'] = nil # => install the latest available version -default['dd-agent-upgrade']['add_new_repo'] = false # If set to true, be sure to set aptrepo and yumrepo -default['dd-agent-upgrade']['aptrepo'] = nil -default['dd-agent-upgrade']['aptrepo_dist'] = nil -default['dd-agent-upgrade']['yumrepo'] = nil -default['dd-agent-upgrade']['yumrepo_suse'] = nil -default['dd-agent-upgrade']['package_name'] = 'datadog-agent' - -default['dd-agent-upgrade']['windows_version'] = nil # => install the latest available version -default['dd-agent-upgrade']['windows_agent_checksum'] = nil -default['dd-agent-upgrade']['windows_agent_url'] = 'https://ddagent-windows-stable.s3.amazonaws.com/' - -default['dd-agent-upgrade']['agent_package_retries'] = nil -default['dd-agent-upgrade']['agent_package_retry_delay'] = nil - -# Enable the agent to start at boot -default['dd-agent-upgrade']['agent_enable'] = true - -# Start agent or not -default['dd-agent-upgrade']['agent_start'] = true -default['dd-agent-upgrade']['enable_trace_agent'] = true -default['dd-agent-upgrade']['enable_process_agent'] = true - -# Set the defaults from the chef recipe -default['dd-agent-upgrade']['extra_endpoints']['prod']['enabled'] = nil -default['dd-agent-upgrade']['extra_endpoints']['prod']['api_key'] = nil -default['dd-agent-upgrade']['extra_endpoints']['prod']['application_key'] = nil -default['dd-agent-upgrade']['extra_endpoints']['prod']['url'] = nil # op -default['dd-agent-upgrade']['extra_config']['forwarder_timeout'] = nil -default['dd-agent-upgrade']['web_proxy']['host'] = nil -default['dd-agent-upgrade']['web_proxy']['port'] = nil -default['dd-agent-upgrade']['web_proxy']['user'] = nil -default['dd-agent-upgrade']['web_proxy']['password'] = nil -default['dd-agent-upgrade']['web_proxy']['skip_ssl_validation'] = nil # accepted values 'yes' or 'no' -default['dd-agent-upgrade']['dogstreams'] = [] -default['dd-agent-upgrade']['custom_emitters'] = [] -default['dd-agent-upgrade']['syslog']['active'] = false -default['dd-agent-upgrade']['syslog']['udp'] = false -default['dd-agent-upgrade']['syslog']['host'] = nil -default['dd-agent-upgrade']['syslog']['port'] = nil -default['dd-agent-upgrade']['log_file_directory'] = - if node['platform_family'] == 'windows' - nil # let the agent use a default log file dir - else - '/var/log/datadog' - end -default['dd-agent-upgrade']['process_agent']['blacklist'] = nil -default['dd-agent-upgrade']['process_agent']['container_blacklist'] = nil -default['dd-agent-upgrade']['process_agent']['container_whitelist'] = nil -default['dd-agent-upgrade']['process_agent']['log_file'] = nil -default['dd-agent-upgrade']['process_agent']['process_interval'] = nil -default['dd-agent-upgrade']['process_agent']['rtprocess_interval'] = nil -default['dd-agent-upgrade']['process_agent']['container_interval'] = nil -default['dd-agent-upgrade']['process_agent']['rtcontainer_interval'] = nil -default['dd-agent-upgrade']['tags'] = '' -default['dd-agent-upgrade']['histogram_aggregates'] = 'max, median, avg, count' -default['dd-agent-upgrade']['histogram_percentiles'] = '0.95' -default['dd-agent-upgrade']['dogstatsd'] = true -default['dd-agent-upgrade']['dogstatsd_port'] = 8125 -default['dd-agent-upgrade']['dogstatsd_interval'] = 10 -default['dd-agent-upgrade']['dogstatsd_normalize'] = 'yes' -default['dd-agent-upgrade']['dogstatsd_target'] = 'http://localhost:17123' -default['dd-agent-upgrade']['statsd_forward_host'] = nil -default['dd-agent-upgrade']['statsd_forward_port'] = 8125 -default['dd-agent-upgrade']['statsd_metric_namespace'] = nil -default['dd-agent-upgrade']['log_level'] = 'INFO' -default['dd-agent-upgrade']['enable_logs_agent'] = false diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/chefignore b/test/kitchen/site-cookbooks/dd-agent-upgrade/chefignore deleted file mode 100644 index a6de14221d876..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/chefignore +++ /dev/null @@ -1,96 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -## COMPILED ## -############## -a.out -*.o -*.pyc -*.so -*.com -*.class -*.dll -*.exe -*/rdoc/ - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-upgrade/metadata.rb deleted file mode 100644 index e2fa67352e52f..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/metadata.rb +++ /dev/null @@ -1,9 +0,0 @@ -name "dd-agent-upgrade" -maintainer "Datadog" -description "Updates the installed Agent" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.2.0" - -depends 'apt', '>= 2.1.0' -depends 'datadog' -depends 'yum', '< 7.0.0' diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-upgrade/recipes/default.rb deleted file mode 100644 index 1cba4f72b0d3a..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/recipes/default.rb +++ /dev/null @@ -1,188 +0,0 @@ -# -# Cookbook Name:: dd-agent-upgrade -# Recipe:: default -# -# Copyright (C) 2013-present Datadog -# -# All rights reserved - Do Not Redistribute -# -require 'uri' - -if node['dd-agent-upgrade']['add_new_repo'] - case node['platform_family'] - when 'debian' - include_recipe 'apt' - apt_trusted_d_keyring = '/etc/apt/trusted.gpg.d/datadog-archive-keyring.gpg' - apt_usr_share_keyring = '/usr/share/keyrings/datadog-archive-keyring.gpg' - apt_gpg_keys = { - 'DATADOG_APT_KEY_CURRENT.public' => 'https://keys.datadoghq.com/DATADOG_APT_KEY_CURRENT.public', - 'D75CEA17048B9ACBF186794B32637D44F14F620E' => 'https://keys.datadoghq.com/DATADOG_APT_KEY_F14F620E.public', - 'A2923DFF56EDA6E76E55E492D3A80E30382E94DE' => 'https://keys.datadoghq.com/DATADOG_APT_KEY_382E94DE.public', - } - - package 'install dependencies' do - package_name ['apt-transport-https', 'gnupg'] - action :install - end - - file apt_usr_share_keyring do - action :create_if_missing - content '' - mode '0644' - end - - apt_gpg_keys.each do |key_fingerprint, key_url| - # Download the APT key - key_local_path = ::File.join(Chef::Config[:file_cache_path], key_fingerprint) - # By default, remote_file will use `If-Modified-Since` header to see if the file - # was modified remotely, so this works fine for the "current" key - remote_file "remote_file_#{key_fingerprint}" do - path key_local_path - source key_url - notifies :run, "execute[import apt datadog key #{key_fingerprint}]", :immediately - end - - # Import the APT key - execute "import apt datadog key #{key_fingerprint}" do - command "/bin/cat #{key_local_path} | gpg --import --batch --no-default-keyring --keyring #{apt_usr_share_keyring}" - # the second part extracts the fingerprint of the key from output like "fpr::::A2923DFF56EDA6E76E55E492D3A80E30382E94DE:" - not_if "/usr/bin/gpg --no-default-keyring --keyring #{apt_usr_share_keyring} --list-keys --with-fingerprint --with-colons | grep \ - $(cat #{key_local_path} | gpg --with-colons --with-fingerprint 2>/dev/null | grep 'fpr:' | sed 's|^fpr||' | tr -d ':')" - action :nothing - end - end - - remote_file apt_trusted_d_keyring do - action :create - mode '0644' - source "file://#{apt_usr_share_keyring}" - only_if { (platform?('ubuntu') && node['platform_version'].to_i < 16) || (platform?('debian') && node['platform_version'].to_i < 9) } - end - - # Add APT repositories - # Chef's apt_repository resource doesn't allow specifying the signed-by option and we can't pass - # it in uri, as that would make it fail parsing, hence we use the file and apt_update resources. - apt_update 'datadog' do - retries retries - ignore_failure true # this is exactly what apt_repository does - action :nothing - end - - file '/etc/apt/sources.list.d/datadog.list' do - action :create - owner 'root' - group 'root' - mode '0644' - content "deb #{node['dd-agent-upgrade']['aptrepo']} #{node['dd-agent-upgrade']['aptrepo_dist']} #{node['dd-agent-upgrade']['agent_major_version']}" - notifies :update, 'apt_update[datadog]', :immediately - end - - when 'rhel' - include_recipe 'yum' - - yum_repository 'datadog' do - name 'datadog' - description 'datadog' - url node['dd-agent-upgrade']['yumrepo'] - action :add - make_cache true - # Older versions of yum embed M2Crypto with SSL that doesn't support TLS1.2 - protocol = node['platform_version'].to_i < 6 ? 'http' : 'https' - gpgkey [ - "#{protocol}://keys.datadoghq.com/DATADOG_RPM_KEY_CURRENT.public", - "#{protocol}://keys.datadoghq.com/DATADOG_RPM_KEY_FD4BF915.public", - "#{protocol}://keys.datadoghq.com/DATADOG_RPM_KEY_E09422B3.public", - ] - end - when 'suse' - zypper_repository 'datadog' do - name 'datadog' - description 'datadog' - baseurl node['dd-agent-upgrade']['yumrepo_suse'] - action :add - gpgcheck false - # Older versions of yum embed M2Crypto with SSL that doesn't support TLS1.2 - protocol = node['platform_version'].to_i < 6 ? 'http' : 'https' - gpgkey "#{protocol}://keys.datadoghq.com/DATADOG_RPM_KEY_CURRENT.public" - gpgautoimportkeys false - end - end -end - -if node['platform_family'] != 'windows' - package node['dd-agent-upgrade']['package_name'] do - action :upgrade - version node['dd-agent-upgrade']['version'] - end - # the :upgrade method seems broken for sles: https://github.com/chef/chef/issues/4863 - if node['platform_family'] == 'suse' - package node['dd-agent-upgrade']['package_name'] do - action :remove - end - # We have this commented and run it as `execute` command to be able to provide - # ZYPP_RPM_DEBUG=1 and see debug output. Whenever we solve/understand - # https://bugzilla.suse.com/show_bug.cgi?id=1192034, we can uncomment - # and remove the command. - # - # package node['dd-agent-upgrade']['package_name'] do - # action :install - # version node['dd-agent-upgrade']['version'] - # end - execute 'install agent' do - command "zypper --non-interactive install --auto-agree-with-licenses #{node['dd-agent-upgrade']['package_name']}=#{node['dd-agent-upgrade']['version']}" - - environment({'ZYPP_RPM_DEBUG' => '1'}) - live_stream true - action :run - end - end -end - -if node['platform_family'] == 'windows' - package_retries = node['dd-agent-upgrade']['agent_package_retries'] - package_retry_delay = node['dd-agent-upgrade']['agent_package_retry_delay'] - dd_agent_version = node['dd-agent-upgrade']['windows_version'] - dd_agent_filename = node['dd-agent-upgrade']['windows_agent_filename'] - - if dd_agent_filename - dd_agent_installer_basename = dd_agent_filename - else - if dd_agent_version - dd_agent_installer_basename = "datadog-agent-#{dd_agent_version}-1-x86_64" - else - dd_agent_installer_basename = "datadog-agent-6.0.0-beta.latest.amd64" - end - end - - temp_file_basename = ::File.join(Chef::Config[:file_cache_path], 'ddagent-up').gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) - - dd_agent_installer = "#{dd_agent_installer_basename}.msi" - temp_file = "#{temp_file_basename}.msi" - installer_type = :msi - # Agent >= 5.12.0 installs per-machine by default, but specifying ALLUSERS=1 shouldn't affect the install - agent_install_options = node['dd-agent-upgrade']['agent_install_options'] - install_options = "/norestart ALLUSERS=1 #{agent_install_options}" - - use_windows_package_resource = true - - source_url = node['dd-agent-upgrade']['windows_agent_url'] - if !source_url.end_with? '/' - source_url += '/' - end - source_url += dd_agent_installer - - # Download the installer to a temp location - remote_file temp_file do - source source_url - checksum node['dd-agent-upgrade']['windows_agent_checksum'] if node['dd-agent-upgrade']['windows_agent_checksum'] - retries package_retries unless package_retries.nil? - retry_delay package_retry_delay unless package_retry_delay.nil? - end - - execute "install-agent" do - command "start /wait msiexec /log upgrade.log /q /i #{temp_file} #{install_options}" - action :run - # notifies :restart, 'service[datadog-agent]' - end - -end diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore b/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore deleted file mode 100644 index bae3233263f53..0000000000000 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# Exclude system-probe test files generated by running inv -e system-probe.kitchen-prepare -files/default/tests/* -files/default/clang-bpf -files/default/llc-bpf -files/default/gotestsum -files/default/test2json -files/default/minimized-btfs.tar.xz diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/Berksfile b/test/kitchen/site-cookbooks/dd-system-probe-check/Berksfile deleted file mode 100644 index d1086cfcbeba1..0000000000000 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode -source 'https://supermarket.chef.io' -metadata diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/Gemfile b/test/kitchen/site-cookbooks/dd-system-probe-check/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/README.md b/test/kitchen/site-cookbooks/dd-system-probe-check/README.md deleted file mode 100644 index 4b81ad7cc58c2..0000000000000 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# dd-system-probe-check - -Prepare environment for system-probe test execution diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/attributes/default.rb b/test/kitchen/site-cookbooks/dd-system-probe-check/attributes/default.rb deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/chefignore b/test/kitchen/site-cookbooks/dd-system-probe-check/chefignore deleted file mode 100644 index e08f95962d56d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/chefignore +++ /dev/null @@ -1,84 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/files/default/.gitkeep b/test/kitchen/site-cookbooks/dd-system-probe-check/files/default/.gitkeep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/decompress_merge_module.ps1 b/test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/decompress_merge_module.ps1 deleted file mode 100644 index 13d2c62887c7d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/decompress_merge_module.ps1 +++ /dev/null @@ -1,61 +0,0 @@ -param( - [Parameter(Mandatory = $true)][string] $file, - [Parameter(Mandatory = $true)][string] $targetDir - ) - - -[Reflection.Assembly]::LoadFrom("$($Env:WIX)\Microsoft.Deployment.WindowsInstaller.dll") - -write-host "Extracting files from merge module: "$file - -if(![IO.Directory]::Exists($targetDir)) { new-item -type directory -path $targetDir } - -$cabFile = join-path $targetDir "temp.cab" -if([IO.File]::Exists($cabFile)) { remove-item $cabFile } - -$db = new-object Microsoft.Deployment.WindowsInstaller.DataBase($file, [Microsoft.Deployment.WindowsInstaller.DataBaseOpenMode]::ReadOnly) -$view = $db.OpenView("SELECT `Name`,`Data` FROM _Streams WHERE `Name`= 'MergeModule.CABinet'") -$view.Execute() -$record = $view.Fetch() -$record.GetStream(2, $cabFile) -$view.Dispose() - -& "$($Env:WINDIR)\system32\expand" -F:* $cabFile $targetDir - -remove-item $cabFile - -$extractedFiles = get-childitem $targetDir -$hashFiles = @{} -foreach($extracted in $extractedFiles) -{ - try - { - $longName = $db.ExecuteScalar("SELECT `FileName` FROM `File` WHERE `File`='{0}'", $extracted.Name) - } - catch - { - write-host "$($extracted.Name) is not in the MSM file" - } - - if($longName) - { - $longName = $LongName.SubString($LongName.IndexOf("|") + 1) - Write-host $longName - - #There are duplicates in the - if($hashFiles.Contains($longName)) - { - write-host "Removing duplicate of $longName" - remove-item $extracted.FullName - } - else - { - write-host "Rename $($extracted.Name) to $longName" - $hashFiles[$longName] = $extracted - $targetFilePath = join-path $targetDir $longName - if([IO.File]::Exists($targetFilePath)) {remove-item $targetFilePath} - rename-item $extracted.FullName -NewName $longName - } - } -} -$db.Dispose() diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/iisstart.htm b/test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/iisstart.htm deleted file mode 100644 index e658d1b5f675c..0000000000000 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/iisstart.htm +++ /dev/null @@ -1,32 +0,0 @@ - - - - -IIS Windows - - - -
-IIS -
- - \ No newline at end of file diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/iisstart.png b/test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/iisstart.png deleted file mode 100644 index 29f1c908592a36630e1433cf72556634c99492e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98757 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

mEW?jjf>(oy;h&7B)SZlX_Q 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 { 'default' => ::File.join(Chef::Config[:file_cache_path], 'system-probe') }, -) - -directory rootdir do - recursive true -end - -# This will copy the whole file tree from COOKBOOK_NAME/files/default/tests -# to the directory where RSpec is expecting them. -remote_directory ::File.join(rootdir, "tests") do - source 'tests' - mode '755' - files_mode '755' - sensitive true -end - -if platform?('windows') - include_recipe "::windows" -end diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/windows.rb b/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/windows.rb deleted file mode 100644 index 912ff2fe1d115..0000000000000 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/windows.rb +++ /dev/null @@ -1,96 +0,0 @@ -require 'json' - -# manually install and start the NPM driver -tmp_dir = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp" -dna_json_path = "#{tmp_dir}\\kitchen\\dna.json" -agentvars = JSON.parse(IO.read(dna_json_path)).fetch('dd-agent-rspec') -driver_path = agentvars.fetch('driver_path') -driver_ver = agentvars.fetch('driver_ver') -driver_msmsha = agentvars.fetch('driver_msmsha') - -remote_path = "https://s3.amazonaws.com/dd-windowsfilter/builds/#{driver_path}/ddnpminstall-#{driver_ver}.msm" -remote_file "#{tmp_dir}\\ddnpm.msm" do - source remote_path - checksum driver_msmsha -end - -remote_file "#{tmp_dir}\\wix311-binaries.zip" do - source "https://github.com/wixtoolset/wix3/releases/download/wix3112rtm/wix311-binaries.zip" -end - - -execute 'wix-extract' do - cwd tmp_dir - command "powershell -C \"Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('wix311-binaries.zip', 'wix');\"" - not_if { ::File.directory?(::File.join(tmp_dir, 'wix')) } -end - -cookbook_file "#{tmp_dir}\\decompress_merge_module.ps1" do - source 'decompress_merge_module.ps1' -end - -execute 'extract driver merge module' do - cwd tmp_dir - live_stream true - environment 'WIX' => "#{tmp_dir}\\wix" - command "powershell -C \".\\decompress_merge_module.ps1 -file ddnpm.msm -targetDir .\\expanded\"" - not_if { ::File.exist?(::File.join(tmp_dir, 'expanded', 'ddnpm.msm')) } -end - -execute 'IIS' do - command "powershell -C \"Install-WindowsFeature -name Web-Server -IncludeManagementTools\"" -end - -directory "Make IIS Paths" do - path "c:\\tmp\\inetpub\\testsite1" - recursive true -end - -cookbook_file "c:\\tmp\\inetpub\\testsite1\\iisstart.htm" do - source 'iisstart.htm' -end -cookbook_file "c:\\tmp\\inetpub\\testsite1\\iisstart.png" do - source 'iisstart.png' -end - -directory "Make IIS Paths" do - path "c:\\tmp\\inetpub\\testsite2" - recursive true -end - -cookbook_file "c:\\tmp\\inetpub\\testsite2\\iisstart.htm" do - source 'iisstart.htm' -end -cookbook_file "c:\\tmp\\inetpub\\testsite2\\iisstart.png" do - source 'iisstart.png' -end -execute "create testsite 1" do - command "powershell -C \"New-IISSite -Name 'TestSite1' -BindingInformation '*:8081:' -PhysicalPath c:\\tmp\\inetpub\\testsite1\"" -end - -execute "create testsite 2" do - command "powershell -C \"New-IISSite -Name 'TestSite2' -BindingInformation '*:8082:' -PhysicalPath c:\\tmp\\inetpub\\testsite2\"" -end - -if driver_path == "testsigned" - reboot 'now' do - action :nothing - reason 'Cannot continue Chef run without a reboot.' - end - - execute 'enable unsigned drivers' do - command "bcdedit.exe /set testsigning on" - notifies :reboot_now, 'reboot[now]', :immediately - not_if 'bcdedit.exe | findstr "testsigning" | findstr "Yes"' - end -end - -execute 'system-probe-driver-install' do - command "powershell -C \"sc.exe create ddnpm type= kernel binpath= #{tmp_dir}\\expanded\\ddnpm.sys start= demand\"" - not_if 'sc.exe query ddnpm' -end - -windows_service 'system-probe-driver' do - service_name 'ddnpm' - action :start -end diff --git a/test/kitchen/tasks/README.md b/test/kitchen/tasks/README.md deleted file mode 100644 index 63dc2a0ca125b..0000000000000 --- a/test/kitchen/tasks/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Tasks - -These are shell scripts that execute the build and cleanup. They also have some debugging included. -They are meant to be run from our build environment, however they can also be run locally if you provide the proper variables. - -Look at the test kitchen readme for a discussion of these environment variables and how to get them. diff --git a/test/kitchen/tasks/__init__.py b/test/kitchen/tasks/__init__.py deleted file mode 100644 index 7d75e1a988354..0000000000000 --- a/test/kitchen/tasks/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -""" -Invoke entrypoint, import here all the tasks we want to make available -""" - -from invoke import Collection - -from . import kitchen - -ns = Collection() - -ns.add_collection(kitchen) diff --git a/test/kitchen/tasks/clean.sh b/test/kitchen/tasks/clean.sh deleted file mode 100755 index b05c08fa71f7d..0000000000000 --- a/test/kitchen/tasks/clean.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/bash - -# This script cleans up any stray azure vms that may remain from the prior run. - -# http://redsymbol.net/articles/unofficial-bash-strict-mode/ -IFS=$'\n\t' -set -euo pipefail - -# These should not be printed out -if [ -z ${AZURE_CLIENT_ID+x} ]; then - AZURE_CLIENT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE client_id) - export AZURE_CLIENT_ID -fi -if [ -z ${AZURE_CLIENT_SECRET+x} ]; then - AZURE_CLIENT_SECRET=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE token) - export AZURE_CLIENT_SECRET -fi -if [ -z ${AZURE_TENANT_ID+x} ]; then - AZURE_TENANT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE tenant_id) - export AZURE_TENANT_ID -fi -if [ -z ${AZURE_SUBSCRIPTION_ID+x} ]; then - AZURE_SUBSCRIPTION_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE subscription_id) - export AZURE_SUBSCRIPTION_ID -fi -if [ -z ${DD_PIPELINE_ID+x} ]; then - DD_PIPELINE_ID='none' - export DD_PIPELINE_ID -fi - -if [ -z ${AZURE_SUBSCRIPTION_ID+x} ] || [ -z ${AZURE_TENANT_ID+x} ] || [ -z ${AZURE_CLIENT_SECRET+x} ] || [ -z ${AZURE_CLIENT_ID+x} ]; then - printf "You are missing some of the necessary credentials. Exiting." - exit 1 -fi - -az login --service-principal -u "$AZURE_CLIENT_ID" -p "$AZURE_CLIENT_SECRET" --tenant "$AZURE_TENANT_ID" > /dev/null - -if [ ${CLEAN_ALL+x} ]; then - groups=$(az group list -o tsv --query "[?starts_with(name, 'kitchen')].[name]") -else - groups=$(az group list -o tsv --query "[?starts_with(name, 'kitchen')]|[?ends_with(name, 'pl$DD_PIPELINE_ID')].[name]") -fi - -# This will really only fail if a VM or Group -# is in the process of being deleted when queried but is deleted -# when the deletion attempt is made. -# So, failure should generally be swallowed. - -for group in $groups; do - echo "az group delete -n $group -y" - if [ ${CLEAN_ASYNC+x} ]; then - ( az group delete -n "$group" -y || true ) & - else - ( az group delete -n "$group" -y || true ) - fi - printf "\n\n" -done - -if [ ${CLEAN_ALL+x} ]; then - vms=$(az vm list --query "[?tags.dd_agent_testing=='dd_agent_testing']|[*].[id]" -o tsv) -else - vms=$(az vm list --query "[?tags.dd_agent_testing=='dd_agent_testing']|[?tags.pipeline_id=='$DD_PIPELINE_ID']|[*].[id]" -o tsv) -fi - -for vm in $vms; do - echo "az vm delete --ids $vm -y" - if [ ${CLEAN_ASYNC+x} ]; then - (az vm delete --ids "$vm" -y || true) & - else - (az vm delete --ids "$vm" -y || true) - fi -done diff --git a/test/kitchen/tasks/kitchen.py b/test/kitchen/tasks/kitchen.py deleted file mode 100644 index beb345b66d4ad..0000000000000 --- a/test/kitchen/tasks/kitchen.py +++ /dev/null @@ -1,253 +0,0 @@ -import glob -import json -import os -import re -import sys -import traceback - -import requests -from invoke import task -from invoke.exceptions import Exit - -WINDOWS_SKIP_IF_TESTSIGNING = ['.*cn'] - - -@task(iterable=['platlist']) -def genconfig( - ctx, - platform=None, - provider=None, - osversions="all", - testfiles=None, - uservars=None, - platformfile=None, - platlist=None, - fips=False, - arch="x86_64", - imagesize=None, -): - """ - Create a kitchen config - """ - if not platform and not platlist: - raise Exit(message="Must supply a platform to configure\n", code=1) - - if not testfiles: - raise Exit(message="Must supply one or more testfiles to include\n", code=1) - - if platlist and (platform or provider): - raise Exit( - message="Can specify either a list of specific OS images OR a platform and provider, but not both\n", code=1 - ) - - if not platlist and not provider: - provider = "azure" - - if platformfile: - with open(platformfile) as f: - platforms = json.load(f) - else: - try: - print( - "Fetching the latest kitchen platforms.json from Github. Use --platformfile=platforms.json to override with a local file." - ) - r = requests.get( - 'https://raw.githubusercontent.com/DataDog/datadog-agent/main/test/kitchen/platforms.json', - allow_redirects=True, - ) - r.raise_for_status() - platforms = r.json() - except Exception: - traceback.print_exc() - print("Warning: Could not fetch the latest kitchen platforms.json from Github, using local version.") - with open("platforms.json") as f: - platforms = json.load(f) - - # create the TEST_PLATFORMS environment variable - testplatformslist = [] - - if platform: - plat = platforms.get(platform) - if not plat: - raise Exit( - message=f"Unknown platform {platform}. Known platforms are {list(platforms.keys())}\n", - code=2, - ) - - # check to see if the OS is configured for the given provider - prov = plat.get(provider) - if not prov: - raise Exit( - message=f"Unknown provider {provider}. Known providers for platform {platform} are {list(plat.keys())}\n", - code=3, - ) - - ar = prov.get(arch) - if not ar: - raise Exit( - message=f"Unknown architecture {arch}. Known architectures for platform {platform} provider {provider} are {list(prov.keys())}\n", - code=4, - ) - - # get list of target OSes - if osversions.lower() == "all": - osversions = ".*" - - osimages = load_targets(ctx, ar, osversions, platform) - - print(f"Chose os targets {osimages}\n") - for osimage in osimages: - testplatformslist.append(f"{osimage},{ar[osimage]}") - - elif platlist: - # platform list should be in the form of driver,os,arch,image - for entry in platlist: - driver, osv, arch, image = entry.split(",") - if provider and driver != provider: - raise Exit(message=f"Can only use one driver type per config ( {provider} != {driver} )\n", code=1) - - provider = driver - # check to see if we know this one - if not platforms.get(osv): - raise Exit(message=f"Unknown OS in {entry}\n", code=4) - - if not platforms[osv].get(driver): - raise Exit(message=f"Unknown driver in {entry}\n", code=5) - - if not platforms[osv][driver].get(arch): - raise Exit(message=f"Unknown architecture in {entry}\n", code=5) - - if not platforms[osv][driver][arch].get(image): - raise Exit(message=f"Unknown image in {entry}\n", code=6) - - testplatformslist.append(f"{image},{platforms[osv][driver][arch][image]}") - - print("Using the following test platform(s)\n") - for logplat in testplatformslist: - print(f" {logplat}") - testplatforms = "|".join(testplatformslist) - - # create the kitchen.yml file - with open('tmpkitchen.yml', 'w') as kitchenyml: - # first read the correct driver - print(f"Adding driver file drivers/{provider}-driver.yml\n") - - with open(f"drivers/{provider}-driver.yml") as driverfile: - kitchenyml.write(driverfile.read()) - - # read the generic contents - with open("test-definitions/platforms-common.yml") as commonfile: - kitchenyml.write(commonfile.read()) - - # now open the requested test files - for f in glob.glob(f"test-definitions/{testfiles}.yml"): - if f.lower().endswith("platforms-common.yml"): - print("Skipping common file\n") - with open(f) as infile: - print(f"Adding file {f}\n") - kitchenyml.write(infile.read()) - - env = {} - if uservars: - env = load_user_env(ctx, provider, uservars) - - # set KITCHEN_ARCH if it's not set in the user env - if 'KITCHEN_ARCH' not in env and 'KITCHEN_ARCH' not in os.environ.keys(): - env['KITCHEN_ARCH'] = arch - - env['TEST_PLATFORMS'] = testplatforms - - if provider == "azure": - env['TEST_IMAGE_SIZE'] = imagesize if imagesize else "" - elif provider == "ec2" and imagesize: - env['KITCHEN_EC2_INSTANCE_TYPE'] = imagesize - - if fips: - env['FIPS'] = 'true' - ctx.run("erb tmpkitchen.yml > kitchen.yml", env=env) - - -@task -def should_rerun_failed(_, runlog): - """ - Parse a log from kitchen run and see if we should rerun it (e.g. because of a network issue). - """ - test_result_re_gotest = re.compile(r'--- FAIL: (?P[A-Z].*) \(.*\)') - test_result_re_rspec = re.compile(r'\d+\s+examples?,\s+(?P\d+)\s+failures?') - - with open(runlog, encoding='utf-8') as f: - text = f.read() - result_rspec = set(test_result_re_rspec.findall(text)) - result_gotest = set(test_result_re_gotest.findall(text)) - result = result_rspec.union(result_gotest) - if result == {'0'} or result == set(): - print( - "Seeing no failed kitchen tests in log this is probably an infrastructure problem, advising to rerun the failed test suite" - ) - else: - raise Exit("Seeing some failed kitchen tests in log, not advising to rerun the failed test suite", 1) - - -@task -def invoke_unit_tests(ctx): - """ - Run the unit tests on the invoke tasks - """ - for _, _, files in os.walk("tasks/unit-tests/"): - for file in files: - if file[-3:] == ".py" and file != "__init__.py": - ctx.run(f"{sys.executable} -m tasks.unit-tests.{file[:-3]}") - - -def load_targets(_, targethash, selections, platform): - returnlist = [] - skiplist = [] - commentpattern = re.compile("^comment") - - if platform == "windows": - if 'WINDOWS_DDNPM_DRIVER' in os.environ.keys() and os.environ['WINDOWS_DDNPM_DRIVER'] == 'testsigned': - for skip in WINDOWS_SKIP_IF_TESTSIGNING: - skiplist.append(re.compile(skip)) - - for selection in selections.split(","): - selectionpattern = re.compile(f"^{selection}$") - - matched = False - for key in targethash: - if commentpattern.match(key): - continue - if selectionpattern.search(key): - for skip in skiplist: - if skip.match(key): - print(f"Matched key {key} to skip list, skipping\n") - matched = True - break - else: - # will only execute if there's not a break in the previous for - # loop. - matched = True - if key not in returnlist: - returnlist.append(key) - else: - print(f"Skipping duplicate target key {key} (matched search {selection})\n") - - if not matched: - raise Exit(message=f"Couldn't find any match for target {selection}\n", code=7) - return returnlist - - -def load_user_env(_, provider, varsfile): - env = {} - commentpattern = re.compile("^comment") - if os.path.exists(varsfile): - with open(varsfile) as f: - vars = json.load(f) - for key, val in vars.get("global", {}).items(): - if commentpattern.match(key): - continue - env[key] = val - for key, val in vars.get(provider, {}).items(): - if commentpattern.match(key): - continue - env[key] = val - return env diff --git a/test/kitchen/tasks/kitchen_rspec_xml_update.sh b/test/kitchen/tasks/kitchen_rspec_xml_update.sh deleted file mode 100755 index d7f253a1212ec..0000000000000 --- a/test/kitchen/tasks/kitchen_rspec_xml_update.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# set testsuite name with the job name -sed -i "s/name=\"rspec\"/name=\"$2\"/g" "$1" -# Edit filepath from relative to the kitchen test to the datadog git repository for codeowners -parent_folder=$(sed -n 's/.*classname="\([^"]*\)_spec.*/\1/p' "$1" | head -1) -sed -i "s/file=\".\/${parent_folder}_spec.rb\"/file=\".\/test\/kitchen\/test\/integration\/${parent_folder}\/rspec_datadog\/${parent_folder}_spec.rb\"/g" "$1" diff --git a/test/kitchen/tasks/kitchen_setup.sh b/test/kitchen/tasks/kitchen_setup.sh deleted file mode 100755 index dfa0d7652624f..0000000000000 --- a/test/kitchen/tasks/kitchen_setup.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -rm -rf "$CI_PROJECT_DIR/kitchen_logs" -rm -rf "$DD_AGENT_TESTING_DIR/.kitchen" -mkdir "$CI_PROJECT_DIR/kitchen_logs" -ln -s "$CI_PROJECT_DIR/kitchen_logs" "$DD_AGENT_TESTING_DIR/.kitchen" diff --git a/test/kitchen/tasks/run-test-kitchen.ps1 b/test/kitchen/tasks/run-test-kitchen.ps1 deleted file mode 100644 index ad6a536e57526..0000000000000 --- a/test/kitchen/tasks/run-test-kitchen.ps1 +++ /dev/null @@ -1,35 +0,0 @@ -if (Test-Path $PSScriptRoot\ssh-key) { - Write-Host -ForegroundColor Yellow "Deleting existing $PSScriptRoot\ssh-key" - Remove-Item $PSScriptRoot\ssh-key -} - -if (Test-Path $PSScriptRoot\ssh-key.pub) { - Write-Host -ForegroundColor Yellow "Deleting existing $PSScriptRoot\ssh-key" - Remove-Item $PSScriptRoot\ssh-key.pub -} - -$keyfile = "$PSScriptRoot\ssh-key" -Write-Host -ForegroundColor Green "Generating $PSScriptRoot\ssh-key" -& 'ssh-keygen.exe' -f $keyfile -P """" -t rsa -b 2048 - -$KITCHEN_SSH_KEY_PATH=$keyfile -& 'ssh-agent.exe' -s -& 'ssh-add' $keyfile - -if (-not (Test-Path env:AZURE_CLIENT_ID)) { - Write-Host -ForegroundColor Red "Need AZURE_CLIENT_ID" - exit -} - -if (-not (Test-Path env:AZURE_CLIENT_SECRET)) { - Write-Host -ForegroundColor Red "Need AZURE_CLIENT_SECRET" - exit -} -if (-not (Test-Path env:AZURE_TENANT_ID)) { - Write-Host -ForegroundColor Red "Need AZURE_TENANT_ID" - exit -} -if (-not (Test-Path env:AZURE_SUBSCRIPTION_ID)) { - Write-Host -ForegroundColor Red "Need AZURE_SUBSCRIPTION_ID" - exit -} diff --git a/test/kitchen/tasks/run-test-kitchen.sh b/test/kitchen/tasks/run-test-kitchen.sh deleted file mode 100755 index 795ee25dc4ff1..0000000000000 --- a/test/kitchen/tasks/run-test-kitchen.sh +++ /dev/null @@ -1,200 +0,0 @@ -#!/bin/bash - -# This script sets up the environment and then runs the test kitchen itself. - -# http://redsymbol.net/articles/unofficial-bash-strict-mode/ -IFS=$'\n\t' -set -euo pipefail - -# Ensure that the ssh key is never reused between tests -if [ -f "$(pwd)/ssh-key" ]; then - rm ssh-key -fi -if [ -f "$(pwd)/ssh-key.pub" ]; then - rm ssh-key.pub -fi -# Set a PARENT_DIR variable to call the aws_ssm wrapper in both local and CI contexts -pushd ../.. -if [ -n "$CI_PROJECT_DIR" ]; then - PARENT_DIR="$CI_PROJECT_DIR" -else - PARENT_DIR="$(pwd)" -fi -popd - -# in docker we cannot interact to do this so we must disable it -mkdir -p ~/.ssh -[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config - -if [ "$KITCHEN_PROVIDER" == "azure" ]; then - # Generating SSH keys to connect to Azure VMs - - ssh-keygen -f "$(pwd)/ed25519-key" -P "" -a 100 -t ed25519 - KITCHEN_ED25519_SSH_KEY_PATH="$(pwd)/ed25519-key" - export KITCHEN_ED25519_SSH_KEY_PATH - - # show that the ed25519 ssh key is there - ls "$(pwd)/ed25519-key" - - ssh-keygen -f "$(pwd)/rsa-key" -P "" -t rsa -b 2048 - KITCHEN_RSA_SSH_KEY_PATH="$(pwd)/rsa-key" - export KITCHEN_RSA_SSH_KEY_PATH - - # show that the rsa ssh key is there - ls "$(pwd)/rsa-key" - - # start the ssh-agent and add the keys - eval "$(ssh-agent -s)" - ssh-add "$KITCHEN_RSA_SSH_KEY_PATH" - ssh-add "$KITCHEN_ED25519_SSH_KEY_PATH" - - # Setup the azure credentials, grabbing them from AWS if they do not exist in the environment already - # If running locally, they should be imported into the environment - - # These should not be printed out - set +x - if [ -z ${AZURE_CLIENT_ID+x} ]; then - AZURE_CLIENT_ID=$($PARENT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE client_id) - # make sure whitespace is removed - AZURE_CLIENT_ID="$(echo -e "${AZURE_CLIENT_ID}" | tr -d '[:space:]')" - export AZURE_CLIENT_ID - fi - if [ -z ${AZURE_CLIENT_SECRET+x} ]; then - AZURE_CLIENT_SECRET=$($PARENT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE token) - # make sure whitespace is removed - AZURE_CLIENT_SECRET="$(echo -e "${AZURE_CLIENT_SECRET}" | tr -d '[:space:]')" - export AZURE_CLIENT_SECRET - fi - if [ -z ${AZURE_TENANT_ID+x} ]; then - AZURE_TENANT_ID=$($PARENT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE tenant_id) - # make sure whitespace is removed - AZURE_TENANT_ID="$(echo -e "${AZURE_TENANT_ID}" | tr -d '[:space:]')" - export AZURE_TENANT_ID - fi - if [ -z ${AZURE_SUBSCRIPTION_ID+x} ]; then - AZURE_SUBSCRIPTION_ID=$($PARENT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE subscription_id) - # make sure whitespace is removed - AZURE_SUBSCRIPTION_ID="$(echo -e "${AZURE_SUBSCRIPTION_ID}" | tr -d '[:space:]')" - export AZURE_SUBSCRIPTION_ID - fi - - if [ -z ${AZURE_SUBSCRIPTION_ID+x} ] || [ -z ${AZURE_TENANT_ID+x} ] || [ -z ${AZURE_CLIENT_SECRET+x} ] || [ -z ${AZURE_CLIENT_ID+x} ]; then - printf "You are missing some of the necessary credentials. Exiting." - exit 1 - fi - - # Create the Azure credentials file as requried by the kitchen-azurerm driver - mkdir -p ~/.azure/ - (echo "<% subscription_id=\"$AZURE_SUBSCRIPTION_ID\"; client_id=\"$AZURE_CLIENT_ID\"; client_secret=\"$AZURE_CLIENT_SECRET\"; tenant_id=\"$AZURE_TENANT_ID\"; %>" && cat azure-creds.erb) | erb > ~/.azure/credentials - -elif [ "$KITCHEN_PROVIDER" == "ec2" ]; then - echo "using ec2 kitchen provider" - - # Setup the AWS credentials: grab the ED25519 ssh key that is needed to connect to Amazon Linux 2022 instances - # See: https://github.com/test-kitchen/kitchen-ec2/issues/588 - # Note: this issue happens even when allowing RSA keys in the ssh service of the remote host (which was the fix we did for Ubuntu 22.04), - # therefore using the auto-generated SSH key is not possible at all. - - # These should not be printed out - set +x - if [ -z ${KITCHEN_EC2_SSH_KEY_ID+x} ]; then - export KITCHEN_EC2_SSH_KEY_ID="datadog-agent-kitchen" - export KITCHEN_EC2_SSH_KEY_PATH="$(pwd)/aws-ssh-key" - touch $KITCHEN_EC2_SSH_KEY_PATH && chmod 600 $KITCHEN_EC2_SSH_KEY_PATH - $PARENT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AWS ssh_private_key > $KITCHEN_EC2_SSH_KEY_PATH - fi -fi - -# Generate a password to use for the windows servers -if [ -z ${SERVER_PASSWORD+x} ]; then - export SERVER_PASSWORD="$(tr -dc A-Za-z0-9 < /dev/urandom | head -c32)0aZ" -fi - -if [[ $# == 0 ]]; then - echo "Missing run suite argument. Exiting." - exit 1 -fi - -if [[ $# == 1 ]]; then - echo "Missing major version argument. Exiting." - exit 1 -fi - -export MAJOR_VERSION=$2 - -# if the agent version isn't set, grab it -# This is for the windows agent, as it needs to know the exact right version to grab -# on linux it can just download the latest version from the package manager -if [ -z ${AGENT_VERSION+x} ]; then - pushd ../.. - AGENT_VERSION=$(inv agent.version --url-safe --git-sha-length=7 --major-version "$MAJOR_VERSION") - export AGENT_VERSION - DD_AGENT_EXPECTED_VERSION=$(inv agent.version --url-safe --git-sha-length=7 --major-version "$MAJOR_VERSION") - export DD_AGENT_EXPECTED_VERSION - popd -fi - -KITCHEN_IMAGE_SIZE="${KITCHEN_IMAGE_SIZE:-}" - -invoke -e kitchen.genconfig --platform="$KITCHEN_PLATFORM" --osversions="$KITCHEN_OSVERS" --provider="$KITCHEN_PROVIDER" --arch="${KITCHEN_ARCH:-x86_64}" --imagesize="${KITCHEN_IMAGE_SIZE}" --testfiles="$1" ${KITCHEN_FIPS:+--fips} --platformfile=platforms.json - -bundle exec kitchen diagnose --no-instances --loader - -## copy the generated kitchen.yml to the .kitchen directory so it'll be included -## in the artifacts (for debugging when necessary) -cp kitchen.yml ./.kitchen/generated_kitchen.yml - -rm -rf cookbooks -rm -f Berksfile.lock -berks vendor ./cookbooks - -set +o pipefail - -# Initially test every suite, as we only generate those we want to run -test_suites=".*" -# This for loop retries kitchen tests failing because of infrastructure/networking issues -for attempt in $(seq 0 "${KITCHEN_INFRASTRUCTURE_FLAKES_RETRY:-2}"); do - bundle exec kitchen verify "$test_suites" -c -d always 2>&1 | tee "/tmp/runlog${attempt}" - result=${PIPESTATUS[0]} - # Before destroying the kitchen machines, get the list of failed suites, - # as their status will be reset to non-failing once they're destroyed. - # failing_test_suites is a newline-separated list of the failing test suite names. - failing_test_suites=$(bundle exec kitchen list --no-log-overwrite --json | jq -cr "[ .[] | select( .last_error != null ) ] | map( .instance ) | .[]") - - # Then, destroy the kitchen machines - # Do not fail on kitchen destroy, it breaks the infra failures filter - set +e - bundle exec kitchen destroy "$test_suites" --no-log-overwrite - destroy_result=$? - set -e - - # If the destory operation fails, it is not safe to continue running kitchen - # so we just exit with an infrastructure failure message. - if [ "$destroy_result" -ne 0 ]; then - echo "Failure while destroying kitchen infrastructure, skipping retries" - break - fi - - if [ "$result" -eq 0 ]; then - echo "Kitchen test succeeded exiting 0" - exit 0 - else - if ! invoke kitchen.should-rerun-failed "/tmp/runlog${attempt}" ; then - # if kitchen test failed and shouldn't be rerun, exit with 1 - echo "Kitchen tests failed and it should not be an infrastructure problem" - exit 1 - else - cp -R "${DD_AGENT_TESTING_DIR}"/.kitchen/logs "${DD_AGENT_TESTING_DIR}/.kitchen/logs-${attempt}" - # Only keep test suites that have a non-null error code - # Build the result as a regexp: "test_suite1|test_suite2|test_suite3", as kitchen only - # supports one instance name or a regexp as argument. - test_suites=$(echo -n "$failing_test_suites" | tr '\n' '|') - fi - fi -done - - -# if we ran out of attempts because of infrastructure/networking issues, exit with 1 -echo "Ran out of retry attempts" -echo "ERROR: The kitchen tests failed due to infrastructure failures." -exit 1 diff --git a/test/kitchen/tasks/show-strays.sh b/test/kitchen/tasks/show-strays.sh deleted file mode 100755 index f1d2eff4df7a8..0000000000000 --- a/test/kitchen/tasks/show-strays.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/bash - -# This script lists any stray azure vms that remain from an arbitrary pipeline. -# It's meant to be run manually to see if any cleanup is necessary. - -# http://redsymbol.net/articles/unofficial-bash-strict-mode/ -IFS=$'\n\t' -set -euo pipefail - -# These should not be printed out -set +x -if [ -z ${AZURE_CLIENT_ID+x} ]; then - AZURE_CLIENT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE client_id) - export AZURE_CLIENT_ID -fi -if [ -z ${AZURE_CLIENT_SECRET+x} ]; then - AZURE_CLIENT_SECRET=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE token) - export AZURE_CLIENT_SECRET -fi -if [ -z ${AZURE_TENANT_ID+x} ]; then - AZURE_TENANT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE tenant_id) - export AZURE_TENANT_ID -fi -if [ -z ${AZURE_SUBSCRIPTION_ID+x} ]; then - AZURE_SUBSCRIPTION_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE subscription_id) - export AZURE_SUBSCRIPTION_ID -fi -if [ -z ${DD_PIPELINE_ID+x} ]; then - DD_PIPELINE_ID='none' - export DD_PIPELINE_ID -fi - -if [ -z ${AZURE_SUBSCRIPTION_ID+x} -o -z ${AZURE_TENANT_ID+x} -o -z ${AZURE_CLIENT_SECRET+x} -o -z ${AZURE_CLIENT_ID+x} ]; then - printf "You are missing some of the necessary credentials. Exiting." - exit 1 -fi - -az login --service-principal -u "$AZURE_CLIENT_ID" -p "$AZURE_CLIENT_SECRET" --tenant "$AZURE_TENANT_ID" > /dev/null - -printf "VMs:\n" - -if [ ${SHOW_ALL+x} ]; then - export VM_QUERY="[?tags.dd_agent_testing=='dd_agent_testing']" -else - export VM_QUERY="[?tags.dd_agent_testing=='dd_agent_testing']|[?tags.pipeline_id=='$CI_PIPELINE_ID']" -fi - -if [ ${STRAYS_VERBOSE+x} ]; then - az vm list --query "$VM_QUERY" -else - az vm list --query "$VM_QUERY|[*].{name:name,location:location,state:provisioningState}" -o tsv -fi - -printf "\n" - -printf "Groups:\n" - -if [ ${SHOW_ALL+x} ]; then - export GROUPS_QUERY="[?starts_with(name, 'kitchen-')]" -else - export GROUPS_QUERY="[?starts_with(name, 'kitchen-')]|[?ends_with(name, 'pl"$CI_PIPELINE_ID"')]" -fi -if [ ${STRAYS_VERBOSE+x} ]; then - az group list --query "$GROUPS_QUERY" -else - az group list --query "$GROUPS_QUERY|[*].{name:name,location:location,state:properties.provisioningState}" -o table -fi diff --git a/test/kitchen/tasks/unit-tests/__init__.py b/test/kitchen/tasks/unit-tests/__init__.py deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/test/kitchen/tasks/unit-tests/gotest-failed-runlog b/test/kitchen/tasks/unit-tests/gotest-failed-runlog deleted file mode 100644 index 86ec9aec47ae9..0000000000000 --- a/test/kitchen/tasks/unit-tests/gotest-failed-runlog +++ /dev/null @@ -1,10 +0,0 @@ -I, [2023-06-20T17:11:07.082387 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: PASS -I, [2023-06-20T17:11:07.083578 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: finished system-probe tests for /pkg/network/tracer/testsuite.exe -I, [2023-06-20T17:11:07.084475 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: -I, [2023-06-20T17:11:07.085372 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: -I, [2023-06-20T17:11:07.086272 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: FAILURES: -I, [2023-06-20T17:11:07.087161 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: -I, [2023-06-20T17:11:07.088145 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: system-probe tests for /pkg/network/testsuite.exe successfully runs: -I, [2023-06-20T17:11:07.089081 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: --- FAIL: TestMustFail (0.00s) -I, [2023-06-20T17:11:07.089982 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: -I, [2023-06-20T17:11:07.090900 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: Finished in 29.9 seconds. \ No newline at end of file diff --git a/test/kitchen/tasks/unit-tests/gotest-infra-failed-runlog b/test/kitchen/tasks/unit-tests/gotest-infra-failed-runlog deleted file mode 100644 index 347a21939800c..0000000000000 --- a/test/kitchen/tasks/unit-tests/gotest-infra-failed-runlog +++ /dev/null @@ -1,10 +0,0 @@ -I, [2023-06-20T17:11:07.071887 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: --- PASS: TestTracerSuite/prebuilt/TestUDPSendAndReceive/v4/random_port (0.08s) -I, [2023-06-20T17:11:07.072844 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: --- PASS: TestTracerSuite/prebuilt/TestUDPSendAndReceive/v6 (0.16s) -I, [2023-06-20T17:11:07.073819 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: --- PASS: TestTracerSuite/prebuilt/TestUDPSendAndReceive/v6/fixed_port (0.08s) -I, [2023-06-20T17:11:07.074785 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: --- PASS: TestTracerSuite/prebuilt/TestUDPSendAndReceive/v6/random_port (0.08s) -I, [2023-06-20T17:11:07.075773 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: --- PASS: TestTracerSuite/prebuilt/TestUnconnectedUDPSendIPv4 (0.08s) -I, [2023-06-20T17:11:07.076712 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: === RUN TestSkipConnectionDNS -I, [2023-06-20T17:11:07.077662 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: === RUN TestSkipConnectionDNS/CollectLocalDNS_disabled -I, [2023-06-20T17:11:07.087161 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: -I, [2023-06-20T17:11:07.089982 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: -I, [2023-06-20T17:11:07.090900 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: Finished in 29.9 seconds. \ No newline at end of file diff --git a/test/kitchen/tasks/unit-tests/infra-failed-runlog b/test/kitchen/tasks/unit-tests/infra-failed-runlog deleted file mode 100644 index 1fc8c62cc9826..0000000000000 --- a/test/kitchen/tasks/unit-tests/infra-failed-runlog +++ /dev/null @@ -1,10 +0,0 @@ -I, [2023-06-19T14:41:49.342860 #357] INFO -- chef-win2022-azure-x86-64: Shared Example Group: "Agent behavior" called from ./chef_spec.rb:5 -I, [2023-06-19T14:41:49.343999 #357] INFO -- chef-win2022-azure-x86-64: # ./spec_helper.rb:225:in `block in integration_install' -I, [2023-06-19T14:41:49.345581 #357] INFO -- chef-win2022-azure-x86-64: # ./spec_helper.rb:224:in `tap' -I, [2023-06-19T14:41:49.347113 #357] INFO -- chef-win2022-azure-x86-64: # ./spec_helper.rb:224:in `integration_install' -I, [2023-06-19T14:41:49.348798 #357] INFO -- chef-win2022-azure-x86-64: # ./spec_helper.rb:782:in `block (2 levels) in ' -I, [2023-06-19T14:41:49.350390 #357] INFO -- chef-win2022-azure-x86-64: # C:/Users/datadog/AppData/Local/Temp/verifier/gems/gems/busser-rspec_datadog-0.8.5/lib/busser/rspec_datadog/runner.rb:23:in `

' -I, [2023-06-19T14:41:49.351817 #357] INFO -- chef-win2022-azure-x86-64: -I, [2023-06-19T14:41:49.353374 #357] INFO -- chef-win2022-azure-x86-64: Finished in 6 minutes 2 seconds (files took 0.45318 seconds to load) -I, [2023-06-19T14:41:49.354914 #357] INFO -- chef-win2022-azure-x86-64: 33 examples, 0 failures, 3 pending -I, [2023-06-19T14:41:49.356773 #357] INFO -- chef-win2022-azure-x86-64: \ No newline at end of file diff --git a/test/kitchen/tasks/unit-tests/kitchen_unit_tests.py b/test/kitchen/tasks/unit-tests/kitchen_unit_tests.py deleted file mode 100644 index 822a27a652ff4..0000000000000 --- a/test/kitchen/tasks/unit-tests/kitchen_unit_tests.py +++ /dev/null @@ -1,35 +0,0 @@ -import unittest - -from invoke import Exit, MockContext - -from ..kitchen import should_rerun_failed - - -class TestKitchenInvokeMethod(unittest.TestCase): - def test_no_rerun_gotest(self): - mock_context = MockContext() - with self.assertRaises(Exit): - should_rerun_failed(mock_context, "tasks/unit-tests/gotest-failed-runlog") - - def test_rerun_gotest(self): - mock_context = MockContext() - try: - should_rerun_failed(mock_context, "tasks/unit-tests/gotest-infra-failed-runlog") - except Exit: - self.fail("should_rerun_failed returned non-zero exit code") - - def test_no_rerun_rspec(self): - mock_context = MockContext() - with self.assertRaises(Exit): - should_rerun_failed(mock_context, "tasks/unit-tests/test-failed-runlog") - - def test_rerun_rspec(self): - mock_context = MockContext() - try: - should_rerun_failed(mock_context, "tasks/unit-tests/infra-failed-runlog") - except Exit: - self.fail("should_rerun_failed returned non-zero exit code") - - -if __name__ == '__main__': - unittest.main() diff --git a/test/kitchen/tasks/unit-tests/test-failed-runlog b/test/kitchen/tasks/unit-tests/test-failed-runlog deleted file mode 100644 index e98d0de145fc0..0000000000000 --- a/test/kitchen/tasks/unit-tests/test-failed-runlog +++ /dev/null @@ -1,10 +0,0 @@ -I, [2023-06-19T14:41:49.342860 #357] INFO -- chef-win2022-azure-x86-64: Shared Example Group: "Agent behavior" called from ./chef_spec.rb:5 -I, [2023-06-19T14:41:49.343999 #357] INFO -- chef-win2022-azure-x86-64: # ./spec_helper.rb:225:in `block in integration_install' -I, [2023-06-19T14:41:49.345581 #357] INFO -- chef-win2022-azure-x86-64: # ./spec_helper.rb:224:in `tap' -I, [2023-06-19T14:41:49.347113 #357] INFO -- chef-win2022-azure-x86-64: # ./spec_helper.rb:224:in `integration_install' -I, [2023-06-19T14:41:49.348798 #357] INFO -- chef-win2022-azure-x86-64: # ./spec_helper.rb:782:in `block (2 levels) in ' -I, [2023-06-19T14:41:49.350390 #357] INFO -- chef-win2022-azure-x86-64: # C:/Users/datadog/AppData/Local/Temp/verifier/gems/gems/busser-rspec_datadog-0.8.5/lib/busser/rspec_datadog/runner.rb:23:in `
' -I, [2023-06-19T14:41:49.351817 #357] INFO -- chef-win2022-azure-x86-64: -I, [2023-06-19T14:41:49.353374 #357] INFO -- chef-win2022-azure-x86-64: Finished in 6 minutes 2 seconds (files took 0.45318 seconds to load) -I, [2023-06-19T14:41:49.354914 #357] INFO -- chef-win2022-azure-x86-64: 33 examples, 2 failures, 3 pending -I, [2023-06-19T14:41:49.356773 #357] INFO -- chef-win2022-azure-x86-64: diff --git a/test/kitchen/test-definitions/chef-test.yml b/test/kitchen/test-definitions/chef-test.yml deleted file mode 100644 index c1df5b346e1ec..0000000000000 --- a/test/kitchen/test-definitions/chef-test.yml +++ /dev/null @@ -1,28 +0,0 @@ -suites: - -# Install the latest release candidate using Chef -- name: chef - run_list: - - "recipe[dd-agent-disable-system-repos]" - - "recipe[dd-agent-sles-workaround]" - - "recipe[dd-agent-system-files-check::list-files-before-install]" - - "recipe[dd-agent-install]" - attributes: - apt: - unattended_upgrades: - enable: false - datadog: - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - dd-agent-install: - agent_major_version: <%= agent_major_version %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - windows_agent_url: <%= windows_agent_url %> - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> diff --git a/test/kitchen/test-definitions/platforms-common.yml b/test/kitchen/test-definitions/platforms-common.yml deleted file mode 100644 index 3272ba99a70c6..0000000000000 --- a/test/kitchen/test-definitions/platforms-common.yml +++ /dev/null @@ -1,30 +0,0 @@ -<% -def kitchen_arch_to_repo_arch(arch) - case arch - when 'arm64' - "aarch64" - else - arch - end -end - api_key = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - application_key = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - url = "https://app.datad0g.com" - aptrepo = "[signed-by=/usr/share/keyrings/datadog-archive-keyring.gpg] http://apttesting.datad0g.com/" - aptrepo_dist = "pipeline-#{ENV['DD_PIPELINE_ID']}-#{ENV['KITCHEN_ARCH']}" - yumrepo = "http://yumtesting.datad0g.com/testing/pipeline-#{ENV['DD_PIPELINE_ID']}/#{ENV['MAJOR_VERSION']}/#{kitchen_arch_to_repo_arch(ENV['KITCHEN_ARCH'])}/" - yumrepo_suse = "http://yumtesting.datad0g.com/suse/testing/pipeline-#{ENV['DD_PIPELINE_ID']}/#{ENV['MAJOR_VERSION']}/#{kitchen_arch_to_repo_arch(ENV['KITCHEN_ARCH'])}/" - agent_major_version = "#{ENV['MAJOR_VERSION']}" - windows_agent_url = ENV['WINDOWS_AGENT_URL'] ? ENV['WINDOWS_AGENT_URL'] : "https://#{ENV['WIN_S3_BUCKET']}.s3.amazonaws.com/#{ENV['WINDOWS_TESTING_S3_BUCKET']}" - dd_agent_config = { - 'agent_major_version': agent_major_version, - 'api_key': api_key, - 'application_key': application_key, - 'url': url, - 'aptrepo': aptrepo, - 'aptrepo_dist': aptrepo_dist, - 'yumrepo': yumrepo, - 'yumrepo_suse': yumrepo_suse, - 'windows_agent_url': windows_agent_url - } -%> diff --git a/test/kitchen/test-definitions/security-agent-stress.yml b/test/kitchen/test-definitions/security-agent-stress.yml deleted file mode 100644 index a4774731e45ec..0000000000000 --- a/test/kitchen/test-definitions/security-agent-stress.yml +++ /dev/null @@ -1,13 +0,0 @@ -suites: - -# Deploys and run the stress tests -- name: security-agent-stress - run_list: - - "recipe[dd-agent-rhel-workaround]" - - "recipe[dd-agent-sles-workaround]" - - "recipe[dd-security-agent-check]" - - "recipe[dd-security-agent-check::stress-tests]" - attributes: - apt: - unattended_upgrades: - enable: false diff --git a/test/kitchen/test-definitions/security-agent-test.yml b/test/kitchen/test-definitions/security-agent-test.yml deleted file mode 100644 index bd09658974ac4..0000000000000 --- a/test/kitchen/test-definitions/security-agent-test.yml +++ /dev/null @@ -1,13 +0,0 @@ -suites: - -# Deploys and run the functional tests -- name: security-agent-test - run_list: - - "recipe[dd-agent-rhel-workaround]" - - "recipe[dd-agent-sles-workaround]" - - "recipe[dd-security-agent-check]" - - "recipe[dd-security-agent-check::functional-tests]" - attributes: - apt: - unattended_upgrades: - enable: false diff --git a/test/kitchen/test-definitions/upgrade5-test.yml b/test/kitchen/test-definitions/upgrade5-test.yml deleted file mode 100644 index 345a892ae5dc6..0000000000000 --- a/test/kitchen/test-definitions/upgrade5-test.yml +++ /dev/null @@ -1,40 +0,0 @@ -suites: - -# Installs the latest release Agent 5, then updates it to the latest release -# candidate -- name: upgrade-agent5 - excludes: <% if (sles15_platforms.nil? || sles15_platforms.empty?) %>[]<% end %> # Agent 5 package doesn't work on SLES 15 - <% sles15_platforms.each do |p| %> - - <%= p %> - <% end %> - run_list: - - "recipe[dd-agent-disable-system-repos]" - - "recipe[dd-agent-rhel-workaround]" - - "recipe[dd-agent-sles-workaround]" - - "recipe[dd-agent-5]" # Setup agent 5 - - "recipe[dd-agent-upgrade]" # Upgrade to Agent 6 - - "recipe[dd-agent-import-conf]" # Import the configuration from 5 to 6 - attributes: - apt: - unattended_upgrades: - enable: false - dd-agent-5: - api_key: <%= api_key %> - dd-agent-upgrade: - add_new_repo: true - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - dd-agent-import-conf: - api_key: <%= api_key %> - dd-agent-upgrade-rspec: - # Used by the rspec test to know the version to which the agent should be upgraded - agent_expected_version: &agent_expected_version <%= ENV['DD_AGENT_EXPECTED_VERSION'] || "5.99.0" %> - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> diff --git a/test/kitchen/test-definitions/upgrade6-test.yml b/test/kitchen/test-definitions/upgrade6-test.yml deleted file mode 100644 index 166c7df74e270..0000000000000 --- a/test/kitchen/test-definitions/upgrade6-test.yml +++ /dev/null @@ -1,41 +0,0 @@ -suites: - -# Installs the latest release Agent 6, then updates it to the latest release -# candidate -- name: upgrade-agent6 - run_list: - <% if ENV['FIPS'] == 'true' %> - - "recipe[dd-agent-enable-fips::enable]" - - "recipe[dd-agent-enable-fips::ensure]" - <% end %> - - "recipe[dd-agent-disable-system-repos]" - - "recipe[dd-agent-rhel-workaround]" - - "recipe[dd-agent-sles-workaround]" - - "recipe[dd-agent-install]" - - "recipe[dd-agent-upgrade]" - attributes: - apt: - unattended_upgrades: - enable: false - datadog: - agent_major_version: 6 - agent_version: <%= ENV['LAST_STABLE_VERSION'] %> - api_key: <%= api_key %> - dd-agent-upgrade: - add_new_repo: true - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - dd-agent-import-conf: - api_key: <%= api_key %> - dd-agent-upgrade-rspec: - # Used by the rspec test to know the version to which the agent should be upgraded - agent_expected_version: &agent_expected_version <%= ENV['DD_AGENT_EXPECTED_VERSION'] || "5.99.0" %> - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> diff --git a/test/kitchen/test-definitions/upgrade7-test.yml b/test/kitchen/test-definitions/upgrade7-test.yml deleted file mode 100644 index 0a5f6a7e75bf3..0000000000000 --- a/test/kitchen/test-definitions/upgrade7-test.yml +++ /dev/null @@ -1,47 +0,0 @@ -suites: - -# Installs the latest release Agent 7, then updates it to the latest release -# candidate -- name: upgrade-agent7 - run_list: - <% if ENV['FIPS'] == 'true' %> - - "recipe[dd-agent-enable-fips::enable]" - - "recipe[dd-agent-enable-fips::ensure]" - <% end %> - - "recipe[dd-agent-disable-system-repos]" - - "recipe[dd-agent-rhel-workaround]" - - "recipe[dd-agent-sles-workaround]" - - "recipe[dd-agent-install]" - - "recipe[dd-agent-upgrade]" - attributes: - apt: - unattended_upgrades: - enable: false - datadog: - agent_major_version: 7 - agent_version: <%= ENV['LAST_STABLE_VERSION'] %> - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-upgrade: - add_new_repo: true - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - package_name: 'datadog-iot-agent' - <% end %> - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - dd-agent-import-conf: - api_key: <%= api_key %> - dd-agent-upgrade-rspec: - # Used by the rspec test to know the version to which the agent should be upgraded - agent_expected_version: &agent_expected_version <%= ENV['DD_AGENT_EXPECTED_VERSION'] || "5.99.0" %> - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> diff --git a/test/kitchen/test-definitions/windows-cwsinstall.yml b/test/kitchen/test-definitions/windows-cwsinstall.yml deleted file mode 100644 index f2baf33d3737a..0000000000000 --- a/test/kitchen/test-definitions/windows-cwsinstall.yml +++ /dev/null @@ -1,30 +0,0 @@ -suites: - -- name: win-agent-with-cws-option - run_list: - - "recipe[dd-agent-install]" - attributes: - datadog: - agent_major_version: 7 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - enable_process_agent: true - dd-agent-install: - agent_major_version: 7 - agent6: true - windows_agent_url: <%= windows_agent_url %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - agent_install_options: > - NPM=true - enable_testsigning: <%= ENV['WINDOWS_DDPROCMON_DRIVER'] == "testsigned" %> - - dd-agent-rspec: - agent_flavor: <%= ENV['AGENT_FLAVOR'] || "datadog-agent" %> - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> diff --git a/test/kitchen/test-definitions/windows-install-test.yml b/test/kitchen/test-definitions/windows-install-test.yml deleted file mode 100644 index b149a60ab7459..0000000000000 --- a/test/kitchen/test-definitions/windows-install-test.yml +++ /dev/null @@ -1,24 +0,0 @@ -suites: - - name: win-user - run_list: - - "recipe[dd-agent-install::_install_windows_base]" - attributes: - datadog: - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - dd-agent-install: - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - windows_agent_url: <%= windows_agent_url %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - agent_install_options: > - APIKEY=<%= api_key %> - LOGS_ENABLED=false - PROCESS_ENABLED=true - APM_ENABLED=true - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> diff --git a/test/kitchen/test-definitions/windows-npm-test.md b/test/kitchen/test-definitions/windows-npm-test.md deleted file mode 100644 index c42bd916ceada..0000000000000 --- a/test/kitchen/test-definitions/windows-npm-test.md +++ /dev/null @@ -1,54 +0,0 @@ -# Windows NPM Test definitions - -## Test matrix - -The tests in this test file attempt to test all of the install/upgrade scenarios for installing the Windows agent with various install options. Starting in 7.45, the installation option changed from a Windows feature (NPM) to a more general "allow closed source". - -For these tests, then, installing/upgrading from an "old" version means <= 7.43. -Installing/upgrading from a "previous" version means > 7.43, but less than current version. (this is different for testing reacting -to the way the new state is recorded). -The "current" version is the version in test. - - -Install scenarios expected -1. Install old version with no NPM flag, install new version - - expect driver installed, system probe to enable & start -2. Install old version with no NPM flag, install new version - - expect driver installed, disabled -3. Install old version with NPM flag, install new version - - expect install to detect NPM previously installed, results in system probe enabling/starting driver -4. Install new version with NPM disabled - - expect driver installed, disabled -5. Install new version with NPM enabled - - expect driver installed, system probe to enable & start -7. Install version with no flag, reinstall same version with ADDLOCAL=ALL - - expect previous setting to be maintained (driver installed, system probe starts it) -8. Install version with ADDLOCAL=ALL - - (driver installed, system probe starts it) -9. Install version with ADDLOCAL=NPM - -## win-npm-upgrade-to-npm -Scenario 1 - -## win-npm-upgrade-no-npm -Scenario 2 - -## win-npm-upgrade-to-npm-no-csflag -Scenario 3 - -## win-npm-no-npm-option -Scenario 4 - -## win-npm-with-cs-option -Scenario 5 - -## Scenario 6 not currently enabled - -## win-npm-reinstall-option -Scenario 7 - -## win-npm-with-addlocal-all -Scenario 8 - -## win-npm-with-addlocal-npm -Scenario 9 diff --git a/test/kitchen/test-definitions/windows-npm-test.yml b/test/kitchen/test-definitions/windows-npm-test.yml deleted file mode 100644 index e724110bdd54c..0000000000000 --- a/test/kitchen/test-definitions/windows-npm-test.yml +++ /dev/null @@ -1,322 +0,0 @@ -suites: - -# Scenario 1 -# Install old version with no NPM flag, install new version -# - expect driver installed, enable NPM, expect system probe to enable & start -- name: win-npm-upgrade-to-npm - run_list: - - "recipe[dd-agent-install]" - - "recipe[dd-agent-upgrade]" - attributes: - datadog: - agent_major_version: 7 - agent_version: 7.42.0 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - agent_version: 7.42.0 - dd-agent-upgrade: - add_new_repo: true - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - package_name: 'datadog-iot-agent' - <% end %> - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - dd-agent-import-conf: - api_key: <%= api_key %> - dd-agent-upgrade-rspec: - # Used by the rspec test to know the version to which the agent should be upgraded - agent_expected_version: &agent_expected_version <%= ENV['DD_AGENT_EXPECTED_VERSION'] || "5.99.0" %> - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - - - - -# Scenario 2 -# Install old version with no NPM flag, install new version -# - expect driver installed, does not enable NPM, expect NPM installed but not running -- name: win-npm-upgrade-no-npm - run_list: - - "recipe[dd-agent-install]" - - "recipe[dd-agent-upgrade]" - attributes: - datadog: - agent_major_version: 7 - agent_version: 7.42.0 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - dd-agent-upgrade: - add_new_repo: true - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - package_name: 'datadog-iot-agent' - <% end %> - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - dd-agent-import-conf: - api_key: <%= api_key %> - dd-agent-upgrade-rspec: - # Used by the rspec test to know the version to which the agent should be upgraded - agent_expected_version: &agent_expected_version <%= ENV['DD_AGENT_EXPECTED_VERSION'] || "5.99.0" %> - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - - -# Scenario 3 -# Install old version with NPM flag, install new version -# - expect driver installed, enable NPM, expect system probe to enable & start -- name: win-npm-upgrade-to-npm-no-csflag - run_list: - - "recipe[dd-agent-install]" - - "recipe[dd-agent-upgrade]" - attributes: - datadog: - agent_major_version: 7 - agent_version: 7.42.0 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - agent_version: 7.42.0 - agent_install_options: > - ADDLOCAL=NPM - dd-agent-upgrade: - add_new_repo: true - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - package_name: 'datadog-iot-agent' - <% end %> - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - dd-agent-import-conf: - api_key: <%= api_key %> - dd-agent-upgrade-rspec: - # Used by the rspec test to know the version to which the agent should be upgraded - agent_expected_version: &agent_expected_version <%= ENV['DD_AGENT_EXPECTED_VERSION'] || "5.99.0" %> - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - - -# Scenario 4 -# Install latest -# - expect driver installed, does not enable NPM, expect NPM installed but not running -- name: win-npm-no-npm-option - run_list: - - "recipe[dd-agent-install]" - attributes: - datadog: - agent_major_version: 7 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - windows_agent_url: <%= windows_agent_url %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - dd-agent-rspec: - agent_flavor: <%= ENV['AGENT_FLAVOR'] || "datadog-agent" %> - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - -# Scenario 5 -# Install latest -# - expect driver installed, enable NPM, expect system probe to enable & start -- name: win-npm-with-cs-option - run_list: - - "recipe[dd-agent-install]" - attributes: - datadog: - agent_major_version: 7 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - windows_agent_url: <%= windows_agent_url %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - dd-agent-rspec: - agent_flavor: <%= ENV['AGENT_FLAVOR'] || "datadog-agent" %> - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - -# Scenario 7 -# Install latest, reinstall latest with ADDLOCAL=ALL to test old option compat -# - expect driver installed, enable NPM, expect system probe to enable & start -- name: win-npm-reinstall-option - run_list: - - "recipe[dd-agent-install]" - - "recipe[dd-agent-reinstall]" - attributes: - datadog: - agent_major_version: 7 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - windows_agent_url: <%= windows_agent_url %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - dd-agent-reinstall: - windows_agent_url: <%= windows_agent_url %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - agent_install_options: > - ADDLOCAL=ALL - dd-agent-rspec: - agent_flavor: <%= ENV['AGENT_FLAVOR'] || "datadog-agent" %> - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - -# Scenario 8 -# Install latest with ADDLOCAL=ALL to test old option compat -# - expect driver installed, enable NPM, expect system probe to enable & start -- name: win-npm-with-addlocal-all - run_list: - - "recipe[dd-agent-install]" - attributes: - datadog: - agent_major_version: 7 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - windows_agent_url: <%= windows_agent_url %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - agent_install_options: > - ADDLOCAL=ALL - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - dd-agent-rspec: - agent_flavor: <%= ENV['AGENT_FLAVOR'] || "datadog-agent" %> - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - - -# Scenario 9 -# Install latest with ADDLOCAL=NPM to test old option compat -# - expect driver installed, enable NPM, expect system probe to enable & start -- name: win-npm-with-addlocal-npm - run_list: - - "recipe[dd-agent-install]" - attributes: - datadog: - agent_major_version: 7 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - windows_agent_url: <%= windows_agent_url %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - agent_install_options: > - ADDLOCAL=NPM - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - dd-agent-rspec: - agent_flavor: <%= ENV['AGENT_FLAVOR'] || "datadog-agent" %> - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - -# Scenario 10 -# Install original NPM beta version, upgrade to latest -# - expect driver installed, enable NPM, expect system probe to enable & start -- name: win-npm-beta-upgrade - run_list: - - "recipe[dd-agent-install]" - - "recipe[dd-agent-upgrade]" - attributes: - datadog: - agent_major_version: 7 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - windows_agent_url: https://ddagent-windows-unstable.s3.amazonaws.com/ - windows_agent_filename: datadog-agent-7.23.2-beta1-1-x86_64 - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - dd-agent-upgrade: - add_new_repo: true - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - package_name: 'datadog-iot-agent' - <% end %> - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - dd-agent-import-conf: - api_key: <%= api_key %> - dd-agent-upgrade-rspec: - # Used by the rspec test to know the version to which the agent should be upgraded - agent_expected_version: &agent_expected_version <%= ENV['DD_AGENT_EXPECTED_VERSION'] || "5.99.0" %> - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> diff --git a/test/kitchen/test-definitions/windows-npmdriver.yml b/test/kitchen/test-definitions/windows-npmdriver.yml deleted file mode 100644 index 5910f15a8f45a..0000000000000 --- a/test/kitchen/test-definitions/windows-npmdriver.yml +++ /dev/null @@ -1,29 +0,0 @@ -suites: - -- name: win-npm-with-npm-option - run_list: - - "recipe[dd-agent-install]" - attributes: - datadog: - agent_major_version: 7 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - enable_process_agent: true - dd-agent-install: - agent_major_version: 7 - agent6: true - windows_agent_url: <%= windows_agent_url %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - agent_install_options: > - NPM=true - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - dd-agent-rspec: - agent_flavor: <%= ENV['AGENT_FLAVOR'] || "datadog-agent" %> - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> diff --git a/test/kitchen/test-definitions/windows-secagent-test.yml b/test/kitchen/test-definitions/windows-secagent-test.yml deleted file mode 100644 index 04e78f2f102c1..0000000000000 --- a/test/kitchen/test-definitions/windows-secagent-test.yml +++ /dev/null @@ -1,10 +0,0 @@ -suites: - -- name: win-secagent-test - run_list: - - "recipe[dd-security-agent-check]" - attributes: - dd-agent-rspec: - driver_path: <%= ENV['WINDOWS_DDPROCMON_DRIVER'] %> - driver_ver: <%= ENV['WINDOWS_DDPROCMON_VERSION'] %> - driver_msmsha: <%= ENV['WINDOWS_DDPROCMON_SHASUM'] %> diff --git a/test/kitchen/test-definitions/windows-sysprobe-test.yml b/test/kitchen/test-definitions/windows-sysprobe-test.yml deleted file mode 100644 index e1458e24d8c36..0000000000000 --- a/test/kitchen/test-definitions/windows-sysprobe-test.yml +++ /dev/null @@ -1,10 +0,0 @@ -suites: - -- name: win-sysprobe-test - run_list: - - "recipe[dd-system-probe-check]" - attributes: - dd-agent-rspec: - driver_path: <%= ENV['WINDOWS_DDNPM_DRIVER'] %> - driver_ver: <%= ENV['WINDOWS_DDNPM_VERSION'] %> - driver_msmsha: <%= ENV['WINDOWS_DDNPM_SHASUM'] %> diff --git a/test/kitchen/test/integration/chef/rspec_datadog/Gemfile b/test/kitchen/test/integration/chef/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/chef/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/chef/rspec_datadog/chef_spec.rb b/test/kitchen/test/integration/chef/rspec_datadog/chef_spec.rb deleted file mode 100644 index a2cc4aff11ebe..0000000000000 --- a/test/kitchen/test/integration/chef/rspec_datadog/chef_spec.rb +++ /dev/null @@ -1,7 +0,0 @@ -require 'spec_helper' - -describe 'dd-agent' do - include_examples 'Agent install' - include_examples 'Agent behavior' - include_examples 'Agent uninstall' -end diff --git a/test/kitchen/test/integration/chef/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/chef/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/chef/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/common/rspec_datadog/Gemfile b/test/kitchen/test/integration/common/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/common/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/common/rspec_datadog/kernel_out_spec_helper.rb b/test/kitchen/test/integration/common/rspec_datadog/kernel_out_spec_helper.rb deleted file mode 100644 index c6d5252ebc98c..0000000000000 --- a/test/kitchen/test/integration/common/rspec_datadog/kernel_out_spec_helper.rb +++ /dev/null @@ -1,83 +0,0 @@ -require "rspec/core/formatters/base_text_formatter" - -COLORS = [ - :green, - :blue, - :magenta, - :yellow, - :cyan, -] - -class KernelOut - @@release = `uname -r`.strip - if File.exist?('/tmp/color_idx') - color_idx = File.read('/tmp/color_idx').strip.to_i - 1 - @@color = COLORS[color_idx] - else - @@color = :no_format - end - - def self.format(text, tag="") - tag = "[#{tag}]" if tag != "" - if @@color != :no_format - return RSpec::Core::Formatters::ConsoleCodes.wrap("[#{@@release}]#{tag} #{text}", @@color) - else - return "[#{@@release}]#{tag} #{text}" - end - end -end - -class CustomFormatter - RSpec::Core::Formatters.register self, :example_passed, :example_failed, :dump_summary, :dump_failures, :example_group_started, :example_group_finished - - def initialize(output) - @output = output - end - - # Remove "."'s from the test execution output - def example_passed(_) - end - - # Remove "F"'s from the test execution output - def example_failed(_) - end - - def example_group_started(notification) - @output << "\n" - @output << KernelOut.format("started #{notification.group.description}\n") - end - - def example_group_finished(notification) - @output << KernelOut.format("finished #{notification.group.description}\n\n") - end - - def dump_summary(notification) - @output << KernelOut.format("Finished in #{RSpec::Core::Formatters::Helpers.format_duration(notification.duration)}.\n") - @output << KernelOut.format("#{notification.totals_line}\n") - @output << KernelOut.format("Platform: #{`uname -a`}\n\n") - end - - def dump_failures(notification) # ExamplesNotification - if notification.failed_examples.length > 0 - rel = KernelOut.format("") - failures = RSpec::Core::Formatters::ConsoleCodes.wrap("FAILURES:", :failure) - @output << "\n#{rel} #{failures}\n\n" - @output << error_summary(notification) - end - end - - private - - def error_summary(notification) - summary_output = notification.failed_examples.map do |example| - "#{example.full_description}:\n#{example.execution_result.exception.message}\n\n" - end - - summary_output.join - end -end - - -RSpec.configure do |config| - config.formatter = CustomFormatter -end diff --git a/test/kitchen/test/integration/common/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/common/rspec_datadog/spec_helper.rb deleted file mode 100644 index 89b2fa59a91fd..0000000000000 --- a/test/kitchen/test/integration/common/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1,1383 +0,0 @@ -require 'json' -require 'open-uri' -require 'rspec' -require 'rbconfig' -require 'yaml' -require 'find' -require 'tempfile' -require 'fileutils' -require 'set' - -# -# this enables RSpec output so that individual tests ("it behaves like...") are -# logged. -RSpec.configure do |c| - c.add_formatter "documentation" - FileUtils.mkdir_p '/tmp' - c.add_formatter("RspecJunitFormatter", "/tmp/kitchen/rspec.xml") -end - -os_cache = nil - -# We retrieve the value defined in kitchen.yml because there is no simple way -# to set env variables on the target machine or via parameters in Kitchen/Busser -# See https://github.com/test-kitchen/test-kitchen/issues/662 for reference -def parse_dna - if os == :windows - dna_json_path = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\dna.json" - else - dna_json_path = "/tmp/kitchen/dna.json" - end - JSON.parse(IO.read(dna_json_path)) -end - -def get_agent_flavor - parse_dna().fetch('dd-agent-rspec').fetch('agent_flavor') -end - -def get_service_name(flavor) - # Return the service name of the given flavor depending on the OS - if os == :windows - case flavor - when "datadog-agent", "datadog-heroku-agent", "datadog-iot-agent" - "datadogagent" - when "datadog-dogstatsd" - # Placeholder, not used yet - "dogstatsd" - end - else - case flavor - when "datadog-agent", "datadog-heroku-agent", "datadog-iot-agent" - "datadog-agent" - when "datadog-dogstatsd" - "datadog-dogstatsd" - end - end -end - -def os - # OS Detection from https://stackoverflow.com/questions/11784109/detecting-operating-systems-in-ruby - os_cache ||= ( - host_os = RbConfig::CONFIG['host_os'] - case host_os - when /mswin|msys|mingw|cygwin|bccwin|wince|emc/ - :windows - when /darwin|mac os/ - :macosx - when /linux/ - :linux - when /solaris|bsd/ - :unix - else - raise Error::WebDriverError, "unknown os: #{host_os.inspect}" - end - ) -end - -def safe_program_files - # HACK: on non-English Windows, Chef wrongly installs its 32-bit version on 64-bit hosts because - # of this issue: https://github.com/chef/mixlib-install/issues/343 - # Because of this, the ENV['ProgramFiles'] content is wrong (it's `C:/Program Files (x86)`) - # while the Agent is installed in `C:/Program Files` - # To prevent this issue, we check the system arch and the ProgramFiles folder, and we fix it - # if needed. - - # Env variables are frozen strings, they need to be duplicated to modify them - program_files = ENV['ProgramFiles'].dup - arch = `Powershell -command "(Get-WmiObject Win32_OperatingSystem).OsArchitecture"` - if arch.include? "64" and program_files.include? "(x86)" - program_files.slice!("(x86)") - program_files.strip! - end - - program_files -end - - -def agent_command - if os == :windows - '"C:\\Program Files\\Datadog\\Datadog Agent\\bin\\agent.exe"' - else - "sudo datadog-agent" - end -end - -def wait_until_service_stopped(service, timeout = 60) - # Check if the service has stopped every second - # Timeout after the given number of seconds - for _ in 1..timeout do - if !is_service_running?(service) - case service - when "datadog-agent" - break if !is_port_bound(5001) - when "datadog-dogstatsd" - break if !is_port_bound(8125) - else - break - end - end - sleep 1 - end -end - -def wait_until_service_started(service, timeout = 30) - # Check if the service has started every second - # Timeout after the given number of seconds - for _ in 1..timeout do - if is_service_running?(service) - case service - when "datadog-agent" - break if is_port_bound(5001) - when "datadog-dogstatsd" - break if is_port_bound(8125) - else - break - end - end - sleep 1 - end -end - -def stop(flavor) - service = get_service_name(flavor) - if os == :windows - # forces the trace agent (and other dependent services) to stop - result = system "net stop /y #{service} 2>&1" - sleep 5 - else - if has_systemctl - result = system "sudo systemctl stop #{service}.service" - elsif has_upstart - result = system "sudo initctl stop #{service}" - else - result = system "sudo /sbin/service #{service} stop" - end - end - wait_until_service_stopped(service) - if result == nil || result == false - log_trace "datadog-agent", "stop" - end - result -end - -def start(flavor) - service = get_service_name(flavor) - if os == :windows - result = system "net start #{service} 2>&1" - sleep 5 - else - if has_systemctl - result = system "sudo systemctl start #{service}.service" - elsif has_upstart - result = system "sudo initctl start #{service}" - else - result = system "sudo /sbin/service #{service} start" - end - end - wait_until_service_started(service) - if result == nil || result == false - log_trace "datadog-agent", "start" - end - result -end - -def restart(flavor) - service = get_service_name(flavor) - if os == :windows - # forces the trace agent (and other dependent services) to stop - if is_service_running?(service) - result = system "net stop /y #{service} 2>&1" - sleep 20 - wait_until_service_stopped(service) - end - result = system "net start #{service} 2>&1" - sleep 20 - wait_until_service_started(service) - else - if has_systemctl - result = system "sudo systemctl restart #{service}.service" - # Worst case: the Agent has already stopped and restarted when we check if the process has been stopped - # and we lose 5 seconds. - wait_until_service_stopped(service, 5) - wait_until_service_started(service, 5) - elsif has_upstart - # initctl can't restart - result = system "(sudo initctl restart #{service} || sudo initctl start #{service})" - wait_until_service_stopped(service, 5) - wait_until_service_started(service, 5) - else - result = system "sudo /sbin/service #{service} restart" - wait_until_service_stopped(service, 5) - wait_until_service_started(service, 5) - end - end - if result == nil || result == false - log_trace "datadog-agent", "restart" - end - result -end - -def log_trace(flavor, action) - service = get_service_name(flavor) - if os == :windows - # Collect events from DatadogAgent and this service, since this service may depend on datadogagent it may be - # that the actual error is coming from datadogagent failing to start. - system "powershell.exe -Command \"Get-EventLog -LogName Application -Newest 10 -Source datadogagent,#{service} | fl\"" - system "powershell.exe -Command \"Get-EventLog -LogName System -Newest 10 -Source \\\"Service Control Manager\\\" | fl\"" - else - if has_systemctl - system "sudo journalctl -u #{service} -xe --no-pager" - elsif has_upstart - system "sudo grep #{service} /var/log/upstart" - else - system "sudo grep #{service} /var/log/message" - end - end -end - -def has_systemctl - system('command -v systemctl 2>&1 > /dev/null') -end - -def has_upstart - system('/sbin/init --version 2>&1 | grep -q upstart >/dev/null') -end - -def has_dpkg - system('command -v dpkg 2>&1 > /dev/null') -end - -def info - `#{agent_command} status 2>&1` -end - -def integration_install(package) - `#{agent_command} integration install -r #{package} 2>&1`.tap do |output| - raise "Failed to install integrations package '#{package}' - #{output}" unless $? == 0 - end -end - -def integration_remove(package) - `#{agent_command} integration remove -r #{package} 2>&1`.tap do |output| - raise "Failed to remove integrations package '#{package}' - #{output}" unless $? == 0 - end -end - -def integration_freeze - `#{agent_command} integration freeze 2>&1`.tap do |output| - raise "Failed to get integrations freeze - #{output}" unless $? == 0 - end -end - -def json_info(command) - tmpfile = Tempfile.new('agent-status') - begin - `#{command} status -j -o #{tmpfile.path}` - info_output = File.read(tmpfile.path) - - JSON.parse(info_output) - rescue Exception => e - puts $! - return {} - ensure - tmpfile.close - tmpfile.unlink - end -end - -def windows_service_status(service) - raise "windows_service_status is only for windows" unless os == :windows - # Language-independent way of getting the service status - res = `powershell -command \"try { (get-service #{service} -ErrorAction Stop).Status } catch { write-host NOTINSTALLED }\"` - return (res).upcase.strip -end - -def is_service_running?(service) - if os == :windows - return windows_service_status(service) == "RUNNING" - else - if has_systemctl - system "sudo systemctl status --no-pager #{service}.service" - elsif has_upstart - status = `sudo initctl status #{service}` - status.include?('start/running') - else - status = `sudo /sbin/service #{service} status` - status.include?('running') - end - end -end - -def is_windows_service_installed(service) - raise "is_windows_service_installed is only for windows" unless os == :windows - return windows_service_status(service) != "NOTINSTALLED" -end - -def is_flavor_running?(flavor) - is_service_running?(get_service_name(flavor)) -end - -def is_process_running?(pname) - if os == :windows - tasklist = `tasklist /fi \"ImageName eq #{pname}\" 2>&1` - if tasklist.include?(pname) - return true - end - else - return true if system("pgrep -f #{pname}") - end - return false -end - -def agent_processes_running? - %w(datadog-agent agent.exe).each do |p| - return true if is_process_running?(p) - end - false -end - -def trace_processes_running? - %w(trace-agent trace-agent.exe).each do |p| - return true if is_process_running?(p) - end - false -end - -def security_agent_running? - %w(security-agent security-agent.exe).each do |p| - return true if is_process_running?(p) - end - false -end - -def system_probe_running? - %w(system-probe system-probe.exe).each do |p| - return true if is_process_running?(p) - end - false -end - -def process_agent_running? - %w(process-agent process-agent.exe).each do |p| - return true if is_process_running?(p) - end - false -end - -def dogstatsd_processes_running? - %w(dogstatsd dogstatsd.exe).each do |p| - return true if is_process_running?(p) - end - false -end - -def deploy_cws? - os != :windows && - get_agent_flavor == 'datadog-agent' && - parse_dna().fetch('dd-agent-rspec').fetch('enable_cws') == true -end - -def read_agent_file(path, commit_hash) - open("https://raw.githubusercontent.com/DataDog/datadog-agent/#{commit_hash}/#{path}").read() -end - -# Hash of the commit the Agent was built from -def agent_git_hash - JSON.parse(IO.read("/opt/datadog-agent/version-manifest.json"))['software']['datadog-agent']['locked_version'] -end - -def trace_agent_git_hash - JSON.parse(IO.read("/opt/datadog-agent/version-manifest.json"))['software']['datadog-trace-agent']['locked_version'] -end - -# From a pip-requirements-formatted string, return a hash of 'dep_name' => 'version' -def read_requirements(file_contents) - reqs = Hash.new - file_contents.lines.reject do |line| - /^#/ === line # reject comment lines - end.collect do |line| - /(.+)==([^\s]+)/.match(line) - end.compact.each do |match| - reqs[match[1].downcase] = match[2] - end - reqs -end - -def is_port_bound(port) - if os == :windows - port_regex = Regexp.new(port.to_s) - port_regex.match(`netstat -n -b -a -p TCP 2>&1`) - else - # If netstat is not found (eg. on SUSE >= 15), use ss to get the list of ports used. - system("sudo netstat -lntp | grep #{port} 1>/dev/null") || system("sudo ss -lntp | grep #{port} 1>/dev/null") - end -end - -def get_conf_file(conf_path) - if os == :windows - return "#{ENV['ProgramData']}\\Datadog\\#{conf_path}" - else - return "/etc/datadog-agent/#{conf_path}" - end -end - -def read_conf_file(conf_path = "") - if conf_path == "" - conf_path = get_conf_file("datadog.yaml") - end - puts "cp is #{conf_path}" - f = File.read(conf_path) - confYaml = YAML.load(f) - confYaml -end - -def fetch_python_version(timeout = 15) - # Fetch the python_version from the Agent status - # Timeout after the given number of seconds - for _ in 1..timeout do - json_info_output = json_info(agent_command()) - if json_info_output.key?('python_version') && - ! json_info_output['python_version'].nil? && # nil is considered a correct version by Gem::Version - Gem::Version.correct?(json_info_output['python_version']) # Check that we do have a version number - return json_info_output['python_version'] - end - sleep 1 - end - return nil -end - -def is_file_signed(fullpath) - puts "checking file #{fullpath}" - expect(File).to exist(fullpath) - - output = `powershell -command "(get-authenticodesignature -FilePath '#{fullpath}').SignerCertificate.Thumbprint"` - signature_hashes = Set[ - ## signature below is for new cert acquired using new hsm-backed signing method - ## Non-EV Valid From: May 2023; To: May 2025 - "B03F29CC07566505A718583E9270A6EE17678742".upcase.strip, - ## EV Valid From: Dec 2023; To: Dec 2025 - "ECAA21456723CB0911183255A683DC01A99392DB".upcase.strip, - ## EV Valid From: Jun 2024; To: Jun 2026 - "59063C826DAA5B628B5CE8A2B32015019F164BF0".upcase.strip, - ] - - return true if signature_hashes.include?(output.upcase.strip) - - puts("Acceptable hashes: #{signature_hashes.keys}, actual hash = #{output.upcase.strip}") - return false -end - -def is_dpkg_package_installed(package) - system("dpkg -l #{package} | grep ii") -end - -shared_examples_for 'Agent install' do - it_behaves_like 'an installed Agent' - it_behaves_like 'an installed Datadog Signing Keys' -end - -shared_examples_for 'Basic Agent behavior' do - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'an Agent with integrations' - it_behaves_like 'an Agent that stops' - it_behaves_like 'an Agent that restarts' - it_behaves_like 'an Agent with Python' -end - -shared_examples_for 'Agent behavior' do - include_examples 'Basic Agent behavior' - it_behaves_like 'a running Agent with APM' - it_behaves_like 'a running Agent with APM manually disabled' - if deploy_cws? - it_behaves_like 'a running Agent with CWS enabled' - end -end - -shared_examples_for 'Agent uninstall' do - it_behaves_like 'an Agent that is removed' -end - -shared_examples_for "an installed Agent" do - wait_until_service_started get_service_name("datadog-agent") - - it 'has an example config file' do - if os != :windows - expect(File).to exist('/etc/datadog-agent/datadog.yaml.example') - end - end - - it 'has a datadog-agent binary in usr/bin' do - if os != :windows - expect(File).to exist('/usr/bin/datadog-agent') - end - end - - # We retrieve the value defined in kitchen.yml because there is no simple way - # to set env variables on the target machine or via parameters in Kitchen/Busser - # See https://github.com/test-kitchen/test-kitchen/issues/662 for reference - let(:skip_windows_signing_check) { - parse_dna().fetch('dd-agent-rspec').fetch('skip_windows_signing_test') - } - - it 'is properly signed' do - puts "skipping windows signing check #{skip_windows_signing_check}" if os == :windows and skip_windows_signing_check - #puts "is an upgrade is #{is_upgrade}" - if os == :windows and !skip_windows_signing_check - # The user in the yaml file is "datadog", however the default test kitchen user is azure. - # This allows either to be used without changing the test. - msi_path = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\cache\\ddagent-cli.msi" - msi_path_upgrade = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\cache\\ddagent-up.msi" - - # The upgrade file should only be present when doing an upgrade test. Therefore, - # check the file we're upgrading to, not the file we're upgrading from - if File.file?(msi_path_upgrade) - msi_path = msi_path_upgrade - end - - program_files = safe_program_files - verify_signature_files = [ - msi_path, - # TODO: Uncomment this when we start shipping the security agent on Windows - # "#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\security-agent.exe", - "#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\process-agent.exe", - "#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\trace-agent.exe", - "#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\ddtray.exe", - "#{program_files}\\DataDog\\Datadog Agent\\bin\\libdatadog-agent-three.dll", - "#{program_files}\\DataDog\\Datadog Agent\\bin\\agent.exe", - ] - libdatadog_agent_two = "#{program_files}\\DataDog\\Datadog Agent\\bin\\libdatadog-agent-two.dll" - if File.file?(libdatadog_agent_two) - verify_signature_files += [ - libdatadog_agent_two, - "#{program_files}\\DataDog\\Datadog Agent\\embedded2\\python.exe", - "#{program_files}\\DataDog\\Datadog Agent\\embedded2\\pythonw.exe", - "#{program_files}\\DataDog\\Datadog Agent\\embedded2\\python27.dll" - ] - end - - verify_signature_files.each do |vf| - expect(is_file_signed(vf)).to be_truthy - end - end - end -end - -shared_examples_for "an installed Datadog Signing Keys" do - it 'is installed (on Debian-based systems)' do - skip if os == :windows - skip unless has_dpkg - # Only check on Debian-based systems, which have dpkg installed - expect(is_dpkg_package_installed('datadog-signing-keys')).to be_truthy - end -end - -shared_examples_for "a running Agent with no errors" do - it 'has an agent binary' do - if os != :windows - expect(File).to exist('/usr/bin/datadog-agent') - end - end - - it 'is running' do - expect(is_flavor_running? "datadog-agent").to be_truthy - end - - it 'has a config file' do - conf_path = get_conf_file("datadog.yaml") - expect(File).to exist(conf_path) - end - - it 'has running checks' do - result = false - # Wait for the collector to do its first run - # Timeout after 30 seconds - for _ in 1..30 do - json_info_output = json_info(agent_command()) - if json_info_output.key?('runnerStats') && - json_info_output['runnerStats'].key?('Checks') && - !json_info_output['runnerStats']['Checks'].empty? - result = true - break - end - sleep 1 - end - expect(result).to be_truthy - end - - it 'has an info command' do - # On systems that use systemd (on which the `start` script returns immediately) - # sleep a few seconds to let the collector finish its first run - # Windows seems to frequently have this same issue - if os != :windows - system('command -v systemctl 2>&1 > /dev/null && sleep 5') - else - sleep 5 - end - - expect(info).to include "Forwarder" - expect(info).to include "DogStatsD" - expect(info).to include "Host Info" - end - - it 'has no errors in the info command' do - info_output = info - # The api key is invalid. this test ensures there are no other errors - info_output = info_output.gsub "[ERROR] API Key is invalid" "API Key is invalid" - expect(info_output).to_not include 'ERROR' - end -end - -shared_examples_for "a running Agent with APM" do - if os == :windows - it 'has the apm agent running' do - expect(is_process_running?("trace-agent.exe")).to be_truthy - expect(is_service_running?("datadog-trace-agent")).to be_truthy - end - end - it 'is bound to the port that receives traces by default' do - expect(is_port_bound(8126)).to be_truthy - end -end - -shared_examples_for "a running Agent with process enabled" do - it 'has the process agent running' do - expect(is_process_running?("process-agent.exe")).to be_truthy - expect(is_service_running?("datadog-process-agent")).to be_truthy - end -end - -shared_examples_for "a running Agent with APM manually disabled" do - it 'is not bound to the port that receives traces when apm_enabled is set to false' do - conf_path = get_conf_file("datadog.yaml") - - f = File.read(conf_path) - confYaml = YAML.load(f) - if !confYaml.key("apm_config") - confYaml["apm_config"] = {} - end - confYaml["apm_config"]["enabled"] = false - File.write(conf_path, confYaml.to_yaml) - - output = restart "datadog-agent" - if os != :windows - expect(output).to be_truthy - system 'command -v systemctl 2>&1 > /dev/null || sleep 5 || true' - else - sleep 5 - end - expect(is_port_bound(8126)).to be_falsey - end - - it "doesn't say 'not running' in the info command" do - # Until it runs the logs agent by default it will say this - # expect(info).to_not include 'not running' - end -end - -shared_examples_for 'an Agent that stops' do - it 'stops' do - output = stop "datadog-agent" - if os != :windows - expect(output).to be_truthy - end - expect(is_flavor_running? "datadog-agent").to be_falsey - end - - it 'has connection refuse in the info command' do - if os == :windows - expect(info).to include 'No connection could be made' - else - expect(info).to include 'connection refuse' - end - end - - it 'is not running any agent processes' do - expect(agent_processes_running?).to be_falsey - expect(trace_processes_running?).to be_falsey - expect(security_agent_running?).to be_falsey - expect(system_probe_running?).to be_falsey - end - - it 'starts after being stopped' do - output = start "datadog-agent" - if os != :windows - expect(output).to be_truthy - end - expect(is_flavor_running? "datadog-agent").to be_truthy - end -end - -shared_examples_for 'an Agent that restarts' do - it 'restarts when the agent is running' do - if !is_flavor_running? "datadog-agent" - start "datadog-agent" - end - output = restart "datadog-agent" - if os != :windows - expect(output).to be_truthy - end - expect(is_flavor_running? "datadog-agent").to be_truthy - end - - it 'restarts when the agent is not running' do - if is_flavor_running? "datadog-agent" - stop "datadog-agent" - end - output = restart "datadog-agent" - if os != :windows - expect(output).to be_truthy - end - expect(is_flavor_running? "datadog-agent").to be_truthy - end -end - -# Checks that the Agent can run Python 3. -# If running on an Agent 6, also check that it can run Python 2. -shared_examples_for 'an Agent with Python' do - it 'restarts after python_version is set to 3' do - conf_path = get_conf_file("datadog.yaml") - f = File.read(conf_path) - confYaml = YAML.load(f) - confYaml["python_version"] = 3 - File.write(conf_path, confYaml.to_yaml) - - output = restart "datadog-agent" - expect(output).to be_truthy - end - - it 'runs Python 3 after python_version is set to 3' do - result = false - python_version = fetch_python_version - if ! python_version.nil? && Gem::Version.new('3.0.0') <= Gem::Version.new(python_version) - result = true - end - expect(result).to be_truthy - end - - it 'restarts after python_version is set to 2' do - skip if info.include? "v7." - conf_path = get_conf_file("datadog.yaml") - f = File.read(conf_path) - confYaml = YAML.load(f) - confYaml["python_version"] = 2 - File.write(conf_path, confYaml.to_yaml) - - output = restart "datadog-agent" - expect(output).to be_truthy - end - - it 'runs Python 2 after python_version is set to 2' do - skip if info.include? "v7." - result = false - python_version = fetch_python_version - if ! python_version.nil? && Gem::Version.new('3.0.0') > Gem::Version.new(python_version) - result = true - end - expect(result).to be_truthy - end -end - -shared_examples_for 'an Agent with integrations' do - let(:integrations_freeze_file) do - if os == :windows - 'C:\Program Files\Datadog\Datadog Agent\requirements-agent-release.txt' - else - '/opt/datadog-agent/requirements-agent-release.txt' - end - end - - before do - freeze_content = File.read(integrations_freeze_file) - freeze_content.gsub!(/datadog-cilium==.*/, 'datadog-cilium==2.2.1') - File.write(integrations_freeze_file, freeze_content) - - integration_remove('datadog-cilium') - end - - it 'can uninstall an installed package' do - integration_install('datadog-cilium==2.2.1') - - expect do - integration_remove('datadog-cilium') - end.to change { integration_freeze.match?(%r{datadog-cilium==.*}) }.from(true).to(false) - end - - it 'can install a new package' do - integration_remove('datadog-cilium') - - expect do - integration_install('datadog-cilium==2.2.1') - end.to change { integration_freeze.match?(%r{datadog-cilium==2\.2\.1}) }.from(false).to(true) - end - - it 'can upgrade an installed package' do - expect do - integration_install('datadog-cilium==2.3.0') - end.to change { integration_freeze.match?(%r{datadog-cilium==2\.3\.0}) }.from(false).to(true) - end - - it 'can downgrade an installed package' do - integration_remove('datadog-cilium') - integration_install('datadog-cilium==2.3.0') - - expect do - integration_install('datadog-cilium==2.2.1') - end.to change { integration_freeze.match?(%r{datadog-cilium==2\.2\.1}) }.from(false).to(true) - end - - it 'cannot downgrade an installed package to a version older than the one shipped with the agent' do - integration_remove('datadog-cilium') - integration_install('datadog-cilium==2.2.1') - - expect do - integration_install('datadog-cilium==2.2.0') - end.to raise_error(/Failed to install integrations package 'datadog-cilium==2\.2\.0'/) - end -end - -shared_examples_for 'an Agent that is removed' do - it 'should remove the agent' do - if os == :windows - # uninstallcmd = "start /wait msiexec /q /x 'C:\\Users\\azure\\AppData\\Local\\Temp\\kitchen\\cache\\ddagent-cli.msi'" - uninstallcmd='for /f "usebackq" %n IN (`wmic product where "name like \'datadog%\'" get IdentifyingNumber ^| find "{"`) do start /wait msiexec /log c:\\uninst.log /q /x %n' - expect(system(uninstallcmd)).to be_truthy - else - if system('which apt-get &> /dev/null') - expect(system("sudo apt-get -q -y remove #{get_agent_flavor} > /dev/null")).to be_truthy - elsif system('which yum &> /dev/null') - expect(system("sudo yum -y remove #{get_agent_flavor} > /dev/null")).to be_truthy - elsif system('which zypper &> /dev/null') - expect(system("sudo zypper --non-interactive remove #{get_agent_flavor} > /dev/null")).to be_truthy - else - raise 'Unknown package manager' - end - end - end - - it 'should not be running the agent after removal' do - sleep 15 - expect(agent_processes_running?).to be_falsey - expect(trace_processes_running?).to be_falsey - expect(security_agent_running?).to be_falsey - expect(system_probe_running?).to be_falsey - end - - if os == :windows - windows_service_names = [ - 'datadogagent', - 'datadog-process-agent', - 'datadog-trace-agent', - 'datadog-system-probe', - 'datadog-security-agent' - ] - it 'should not have services installed' do - windows_service_names.each do |ws| - expect(is_windows_service_installed(ws)).to be_falsey - end - end - end -if os == :windows - it 'should not make changes to system files' do - exclude = [ - 'C:/Windows/Assembly/Temp/', - 'C:/Windows/Assembly/Tmp/', - 'C:/windows/AppReadiness/', - 'C:/Windows/Temp/', - 'C:/Windows/Prefetch/', - 'C:/Windows/Installer/', - 'C:/Windows/WinSxS/', - 'C:/Windows/Logs/', - 'C:/Windows/servicing/', - 'c:/Windows/System32/catroot2/', - 'c:/windows/System32/config/', - 'C:/Windows/ServiceProfiles/NetworkService/AppData/Local/Microsoft/Windows/DeliveryOptimization/Logs/', - 'C:/Windows/ServiceProfiles/NetworkService/AppData/Local/Microsoft/Windows/DeliveryOptimization/Cache/', - 'C:/Windows/SoftwareDistribution/DataStore/Logs/', - 'C:/Windows/System32/wbem/Performance/', - 'c:/windows/System32/LogFiles/', - 'c:/windows/SoftwareDistribution/', - 'c:/windows/ServiceProfiles/NetworkService/AppData/', - 'c:/windows/System32/Tasks/Microsoft/Windows/UpdateOrchestrator/', - 'c:/windows/System32/Tasks/Microsoft/Windows/Windows Defender/Windows Defender Scheduled Scan' - ].each { |e| e.downcase! } - - # We don't really need to create this file since we consume it right afterwards, but it's useful for debugging - File.open("c:/after-files.txt", "w") do |out| - Find.find('c:/windows/').each { |f| out.puts(f) } - end - - before_files = File.readlines('c:/before-files.txt').reject { |f| f.downcase.start_with?(*exclude) } - after_files = File.readlines('c:/after-files.txt').reject { |f| f.downcase.start_with?(*exclude) } - - missing_files = before_files - after_files - new_files = after_files - before_files - - puts "New files:" - new_files.each { |f| puts(f) } - - puts "Missing files:" - missing_files.each { |f| puts(f) } - - expect(missing_files).to be_empty - end - end - - it 'should remove the installation directory' do - if os == :windows - expect(File).not_to exist("C:\\Program Files\\Datadog\\Datadog Agent\\") - else - remaining_files = [] - if Dir.exists?("/opt/datadog-agent") - Find.find('/opt/datadog-agent').each { |f| remaining_files.push(f) } - end - expect(remaining_files).to be_empty - expect(File).not_to exist("/opt/datadog-agent/") - end - end - - if os != :windows - it 'should remove the agent link from bin' do - expect(File).not_to exist('/usr/bin/datadog-agent') - end - end -end - -shared_examples_for 'an Agent with APM enabled' do - it 'has apm enabled' do - confYaml = read_conf_file() - expect(confYaml).to have_key("apm_config") - expect(confYaml["apm_config"]).to have_key("enabled") - expect(confYaml["apm_config"]["enabled"]).to be_truthy - end -end - -shared_examples_for 'an Agent with logs enabled' do - it 'has logs enabled' do - confYaml = read_conf_file() - expect(confYaml).to have_key("logs_config") - expect(confYaml).to have_key("logs_enabled") - expect(confYaml["logs_enabled"]).to be_truthy - end -end - -shared_examples_for 'an Agent with process enabled' do - it 'has process enabled' do - confYaml = read_conf_file() - expect(confYaml).to have_key("process_config") - expect(confYaml["process_config"]).to have_key("process_collection") - expect(confYaml["process_config"]["process_collection"]).to have_key("enabled") - expect(confYaml["process_config"]["process_collection"]["enabled"]).to be_truthy - end -end - -shared_examples_for 'a running Agent with CWS enabled' do - it 'has CWS enabled' do - enable_cws(get_conf_file("system-probe.yaml"), true) - enable_cws(get_conf_file("security-agent.yaml"), true) - - output = restart "datadog-agent" - expect(output).to be_truthy - end - - it 'has the security agent running' do - expect(security_agent_running?).to be_truthy - expect(is_service_running?("datadog-agent-security")).to be_truthy - end - - it 'has system-probe running' do - expect(system_probe_running?).to be_truthy - expect(is_service_running?("datadog-agent-sysprobe")).to be_truthy - end - - it 'has security-agent and system-probe communicating' do - for _ in 1..20 do - json_info_output = json_info("sudo /opt/datadog-agent/embedded/bin/security-agent") - if json_info_output.key?('runtimeSecurityStatus') && - json_info_output['runtimeSecurityStatus'].key?('connected') && - json_info_output['runtimeSecurityStatus']['connected'] - result = true - break - end - sleep 3 - end - expect(result).to be_truthy - end -end - -shared_examples_for 'an upgraded Agent with the expected version' do - # We retrieve the value defined in kitchen.yml because there is no simple way - # to set env variables on the target machine or via parameters in Kitchen/Busser - # See https://github.com/test-kitchen/test-kitchen/issues/662 for reference - let(:agent_expected_version) { - parse_dna().fetch('dd-agent-upgrade-rspec').fetch('agent_expected_version') - } - - it 'runs with the expected version (based on the `info` command output)' do - agent_short_version = /(\.?\d)+/.match(agent_expected_version)[0] - expect(info).to include "v#{agent_short_version}" - end - - it 'runs with the expected version (based on the version manifest file)' do - if os == :windows - version_manifest_file = "C:/Program Files/Datadog/Datadog Agent/version-manifest.txt" - else - version_manifest_file = '/opt/datadog-agent/version-manifest.txt' - end - expect(File).to exist(version_manifest_file) - # Match the first line of the manifest file - expect(File.open(version_manifest_file) {|f| f.readline.strip}).to match "agent #{agent_expected_version}" - end -end - -def enable_cws(conf_path, state) - begin - f = File.read(conf_path) - confYaml = YAML.load(f) - if !confYaml.key("runtime_security_config") - confYaml["runtime_security_config"] = {} - end - confYaml["runtime_security_config"]["enabled"] = state - rescue - confYaml = {'runtime_security_config' => {'enabled' => state}} - ensure - File.write(conf_path, confYaml.to_yaml) - end -end - -def get_user_sid(uname) - output = `powershell -command "(New-Object System.Security.Principal.NTAccount('#{uname}')).Translate([System.Security.Principal.SecurityIdentifier]).value"`.strip - output -end - -def get_sddl_for_object(name) - cmd = "powershell -command \"get-acl -Path \\\"#{name}\\\" | format-list -Property sddl\"" - outp = `#{cmd}`.gsub("\n", "").gsub(" ", "") - sddl = outp.gsub("/\s+/", "").split(":").drop(1).join(":").strip - sddl -end - -def get_security_settings - fname = "secout.txt" - system "secedit /export /cfg #{fname} /areas USER_RIGHTS" - data = Hash.new - - utext = File.open(fname).read - text = utext.unpack("v*").pack("U*") - text.each_line do |line| - next unless line.include? "=" - kv = line.strip.split("=") - data[kv[0].strip] = kv[1].strip - end - #File::delete(fname) - data -end - -def check_has_security_right(data, k, name) - right = data[k] - unless right - return false - end - rights = right.split(",") - rights.each do |r| - return true if r == name - end - false -end - -def check_is_user_in_group(user, group) - members = `net localgroup "#{group}"` - members.split(/\n+/).each do |line| - return true if line.strip == user - end - false -end - -def get_username_from_tasklist(exename) - # output of tasklist command is - # Image Name PID Session Name Session# Mem Usage Status User Name CPU Time Window Title - output = `tasklist /v /fi "imagename eq #{exename}" /nh`.gsub("\n", "").gsub("NT AUTHORITY", "NT_AUTHORITY") - - # for the above, the system user comes out as "NT AUTHORITY\System", which confuses the split - # below. So special case it, and get rid of the space - - #username is fully qualified \username - uname = output.split(' ')[7].partition('\\').last - uname -end - -if os == :windows - require 'English' - - module SDDLHelper - @@ace_types = { - 'A' => 'Access Allowed', - 'D' => 'Access Denied', - 'OA' => 'Object Access Allowed', - 'OD' => 'Object Access Denied', - 'AU' => 'System Audit', - 'AL' => 'System Alarm', - 'OU' => 'Object System Audit', - 'OL' => 'Object System Alarm' - } - - def self.ace_types - @@ace_types - end - - @@ace_flags = { - 'CI' => 'Container Inherit', - 'OI' => 'Object Inherit', - 'NP' => 'No Propagate', - 'IO' => 'Inheritance Only', - 'ID' => 'Inherited', - 'SA' => 'Successful Access Audit', - 'FA' => 'Failed Access Audit' - } - - def self.ace_flags - @@ace_flags - end - - @@permissions = { - 'GA' => 'Generic All', - 'GR' => 'Generic Read', - 'GW' => 'Generic Write', - 'GX' => 'Generic Execute', - - 'RC' => 'Read Permissions', - 'SD' => 'Delete', - 'WD' => 'Modify Permissions', - 'WO' => 'Modify Owner', - 'RP' => 'Read All Properties', - 'WP' => 'Write All Properties', - 'CC' => 'Create All Child Objects', - 'DC' => 'Delete All Child Objects', - 'LC' => 'List Contents', - 'SW' => 'All Validated Writes', - 'LO' => 'List Object', - 'DT' => 'Delete Subtree', - 'CR' => 'All Extended Rights', - - 'FA' => 'File All Access', - 'FR' => 'File Generic Read', - 'FW' => 'File Generic Write', - 'FX' => 'File Generic Execute', - - 'KA' => 'Key All Access', - 'KR' => 'Key Read', - 'KW' => 'Key Write', - 'KX' => 'Key Execute' - } - - def self.permissions - @@permissions - end - - @@trustee = { - 'AO' => 'Account Operators', - 'RU' => 'Alias to allow previous Windows 2000', - 'AN' => 'Anonymous Logon', - 'AU' => 'Authenticated Users', - 'BA' => 'Built-in Administrators', - 'BG' => 'Built in Guests', - 'BO' => 'Backup Operators', - 'BU' => 'Built-in Users', - 'CA' => 'Certificate Server Administrators', - 'CG' => 'Creator Group', - 'CO' => 'Creator Owner', - 'DA' => 'Domain Administrators', - 'DC' => 'Domain Computers', - 'DD' => 'Domain Controllers', - 'DG' => 'Domain Guests', - 'DU' => 'Domain Users', - 'EA' => 'Enterprise Administrators', - 'ED' => 'Enterprise Domain Controllers', - 'WD' => 'Everyone', - 'PA' => 'Group Policy Administrators', - 'IU' => 'Interactively logged-on user', - 'LA' => 'Local Administrator', - 'LG' => 'Local Guest', - 'LS' => 'Local Service Account', - 'SY' => 'Local System', - 'NU' => 'Network Logon User', - 'NO' => 'Network Configuration Operators', - 'NS' => 'Network Service Account', - 'PO' => 'Printer Operators', - 'PS' => 'Self', - 'PU' => 'Power Users', - 'RS' => 'RAS Servers group', - 'RD' => 'Terminal Server Users', - 'RE' => 'Replicator', - 'RC' => 'Restricted Code', - 'SA' => 'Schema Administrators', - 'SO' => 'Server Operators', - 'SU' => 'Service Logon User' - } - - def self.trustee - @@trustee - end - - def self.lookup_trustee(trustee) - if @@trustee[trustee].nil? - nt_account = `powershell -command "(New-Object System.Security.Principal.SecurityIdentifier('#{trustee}')).Translate([System.Security.Principal.NTAccount]).Value"`.strip - return nt_account if 0 == $CHILD_STATUS - - # Can't lookup, just return value - return trustee - end - - @@trustee[trustee] - end - end - - class SDDL - def initialize(sddl_str) - sddl_str.scan(/(.):(.*?)(?=.:|$)/) do |m| - case m[0] - when 'D' - @dacls = [] - m[1].scan(/(\((?.*?);(?.*?);(?.*?);(?.*?);(?.*?);(?.*?)\))/) do |ace_type, ace_flags, permissions, object_type, inherited_object_type, trustee| - @dacls.append(DACL.new(ace_type, ace_flags, permissions, object_type, inherited_object_type, trustee)) - end - when 'O' - @owner = m[1] - when 'G' - @group = m[1] - end - end - end - - attr_reader :owner, :group, :dacls - - def to_s - str = "Owner: #{SDDLHelper.lookup_trustee(@owner)}\n" - str += "Group: #{SDDLHelper.lookup_trustee(@owner)}\n" - @dacls.each do |dacl| - str += dacl.to_s - end - str - end - - def ==(other_sddl) - return false if - @owner != other_sddl.owner || - @group != other_sddl.group || - @dacls.length != other_sddl.dacls.length - - @dacls.each do |d1| - if other_sddl.dacls.find { |d2| d1 == d2 }.eql? nil - return false - end - end - - other_sddl.dacls.each do |d1| - if @dacls.find { |d2| d1 == d2 }.eql? nil - return false - end - end - end - - def eql?(other_sddl) - self == other_sddl - end - - end - - class DACL - def initialize(ace_type, ace_flags, permissions, object_type, inherited_object_type, trustee) - @ace_type = ace_type - @ace_flags = ace_flags - @permissions = permissions - @object_type = object_type - @inherited_object_type = inherited_object_type - @trustee = trustee - end - - attr_reader :ace_type, :ace_flags, :permissions, :object_type, :inherited_object_type, :trustee - - def ==(other_dacl) - return false if other_dacl.eql? nil - - @ace_type == other_dacl.ace_type && - @ace_flags == other_dacl.ace_flags && - @permissions == other_dacl.permissions && - @object_type == other_dacl.object_type && - @inherited_object_type == other_dacl.inherited_object_type && - @trustee == other_dacl.trustee - end - - def eql?(other_dacl) - self == other_dacl - end - - def to_s - str = " Trustee: #{SDDLHelper.lookup_trustee(@trustee)}\n" - str += " Type: #{SDDLHelper.ace_types[@ace_type]}\n" - str += " Permissions: \n - #{break_flags(@permissions, SDDLHelper.permissions).join("\n - ")}\n" if permissions != '' - str += " Inheritance: \n - #{break_flags(@ace_flags, SDDLHelper.ace_flags).join("\n - ")}\n" if ace_flags != '' - str - end - - private - - def break_flags(flags, lookup_dict) - return [lookup_dict[flags]] if flags.length <= 2 - - idx = 0 - flags_str = '' - flags_list = [] - flags.each_char do |ch| - if idx.positive? && idx.even? - flags_list.append(lookup_dict[flags_str]) - flags_str = '' - end - flags_str += ch - idx += 1 - end - flags_list - end - end - - RSpec::Matchers.define :have_sddl_equal_to do |expected| - def get_difference(actual, expected) - actual_sddl = SDDL.new(actual) - expected_sddl = SDDL.new(expected) - - difference = '' - if expected_sddl.owner != actual_sddl.owner - difference += " => expected owner to be \"#{SDDLHelper.lookup_trustee(expected_sddl.owner)}\" but was \"#{SDDLHelper.lookup_trustee(actual_sddl.owner)}\"\n" - end - if expected_sddl.group != actual_sddl.group - difference += " => expected owner to be \"#{SDDLHelper.lookup_trustee(expected_sddl.owner)}\" but was \"#{SDDLHelper.lookup_trustee(actual_sddl.owner)}\"\n" - end - - expected_sddl.dacls.each do |expected_dacl| - actual_dacl = actual_sddl.dacls.find { |d| expected_dacl == d } - if actual_dacl.eql? nil - difference += " => expected missing DACL\n#{expected_dacl}\n" - end - end - - actual_sddl.dacls.each do |actual_dacl| - expected_dacl = expected_sddl.dacls.find { |d| actual_dacl == d } - if expected_dacl.eql? nil - difference += " => found unexpected DACL\n#{actual_dacl}\n" - end - end - - difference - end - - match do |actual| - actual_sddl = SDDL.new(actual) - expected_sddl = SDDL.new(expected) - return actual_sddl == expected_sddl - end - - failure_message do |actual| - get_difference(actual, expected) - end - end - -end diff --git a/test/kitchen/test/integration/common/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/common/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 100644 index e65a8e2736ae9..0000000000000 --- a/test/kitchen/test/integration/common/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1,103 +0,0 @@ -require 'win32/registry' - -def is_windows_service_disabled(service) - keypath = "SYSTEM\\CurrentControlSet\\Services\\#{service}" - type = 0; - Win32::Registry::HKEY_LOCAL_MACHINE.open(keypath) do |reg| - type = reg['Start'] - end - return true if type == 4 - return false -end -shared_examples_for 'a Windows Agent with NPM driver that can start' do - it 'has system probe service installed' do - expect(is_windows_service_installed("datadog-system-probe")).to be_truthy - end - it 'has Windows NPM driver installed' do - expect(is_windows_service_installed("ddnpm")).to be_truthy - end - it 'has Windows NPM driver files installed' do - program_files = safe_program_files - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddnpm.cat") - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddnpm.sys") - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddnpm.inf") - end - - it 'does not have the driver running on install' do - ## verify that the driver is not started yet - expect(is_service_running?("ddnpm")).to be_falsey - end - - - it 'can successfully start the driver' do - ## start the service - result = system "net start ddnpm 2>&1" - - ## now expect it to be running - expect(is_service_running?("ddnpm")).to be_truthy - end - -end -shared_examples_for 'a Windows Agent with NPM driver disabled' do - it 'has the service disabled' do - expect(is_windows_service_disabled("ddnpm")).to be_truthy - end -end - -shared_examples_for 'a Windows Agent with NPM driver installed' do - it 'has system probe service installed' do - expect(is_windows_service_installed("datadog-system-probe")).to be_truthy - end - it 'has Windows NPM driver installed' do - expect(is_windows_service_installed("ddnpm")).to be_truthy - end - it 'has Windows NPM driver files installed' do - program_files = safe_program_files - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddnpm.cat") - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddnpm.sys") - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddnpm.inf") - end -end - -shared_examples_for 'a Windows Agent with NPM running' do - it 'can start system probe' do - conf_path = "" - if os != :windows - conf_path = "/etc/datadog-agent/datadog.yaml" - else - conf_path = "#{ENV['ProgramData']}\\Datadog\\datadog.yaml" - end - f = File.read(conf_path) - confYaml = YAML.load(f) - if !confYaml.key("process_config") - confYaml["process_config"] = {} - end - confYaml["process_config"]["process_collection"] = { "enabled": true } - File.write(conf_path, confYaml.to_yaml) - - if os != :windows - spconf_path = "/etc/datadog-agent/datadog.yaml" - else - spconf_path = "#{ENV['ProgramData']}\\Datadog\\system-probe.yaml" - end - spf = File.read(spconf_path) - spconfYaml = YAML.load(spf) - if !spconfYaml - spconfYaml = {} - end - if !spconfYaml.key("network_config") - spconfYaml["network_config"] = {} - end - spconfYaml["network_config"]["enabled"] = true - File.write(spconf_path, spconfYaml.to_yaml) - - expect(is_service_running?("datadog-system-probe")).to be_falsey - #restart "datadog-agent" - stop "datadog-agent" - sleep 10 - start "datadog-agent" - sleep 20 - expect(is_service_running?("datadogagent")).to be_truthy - expect(is_service_running?("datadog-system-probe")).to be_truthy - end -end diff --git a/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/Gemfile b/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/upgrade-agent5_spec.rb b/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/upgrade-agent5_spec.rb deleted file mode 120000 index 01c4a8f741b40..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/upgrade-agent5_spec.rb +++ /dev/null @@ -1 +0,0 @@ -../../upgrade/rspec_datadog/upgrade_spec.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/Gemfile b/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/upgrade-agent6_spec.rb b/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/upgrade-agent6_spec.rb deleted file mode 120000 index 01c4a8f741b40..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/upgrade-agent6_spec.rb +++ /dev/null @@ -1 +0,0 @@ -../../upgrade/rspec_datadog/upgrade_spec.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/Gemfile b/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/upgrade-agent7_spec.rb b/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/upgrade-agent7_spec.rb deleted file mode 120000 index 01c4a8f741b40..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/upgrade-agent7_spec.rb +++ /dev/null @@ -1 +0,0 @@ -../../upgrade/rspec_datadog/upgrade_spec.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade/rspec_datadog/Gemfile b/test/kitchen/test/integration/upgrade/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/upgrade/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/upgrade/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/upgrade/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/upgrade/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade/rspec_datadog/upgrade_spec.rb b/test/kitchen/test/integration/upgrade/rspec_datadog/upgrade_spec.rb deleted file mode 100644 index b44751fdbd782..0000000000000 --- a/test/kitchen/test/integration/upgrade/rspec_datadog/upgrade_spec.rb +++ /dev/null @@ -1,7 +0,0 @@ -require 'spec_helper' - -describe 'the upgraded agent' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'an upgraded Agent with the expected version' -end diff --git a/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/win-agent-with-cws-option_spec.rb b/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/win-agent-with-cws-option_spec.rb deleted file mode 100644 index ee4063d3e1a1d..0000000000000 --- a/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/win-agent-with-cws-option_spec.rb +++ /dev/null @@ -1,81 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' # for is_windows_service_disabled - - -shared_examples_for 'a Windows Agent with CWS driver disabled' do - it 'has the service disabled' do - expect(is_windows_service_disabled("ddprocmon")).to be_truthy - end -end - -shared_examples_for 'a Windows Agent with CWS driver installed' do - it 'has system probe service installed' do - expect(is_windows_service_installed("datadog-system-probe")).to be_truthy - end - - it 'has required services installed' do - expect(is_windows_service_installed("datadog-security-agent")).to be_truthy - expect(is_windows_service_installed("ddprocmon")).to be_truthy - end - it 'has driver files' do - program_files = safe_program_files - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddprocmon.cat") - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddprocmon.sys") - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddprocmon.inf") - end - - it 'does not have the driver running on install' do - ## verify that the driver is not started yet - expect(is_service_running?("ddprocmon")).to be_falsey - end - -end - -shared_examples_for 'a Windows Agent with CWS running' do - it 'has cws services not started by default' do - expect(is_service_running?("datadog-system-probe")).to be_falsey - expect(is_service_running?("datadog-security-agent")).to be_falsey - end - - it 'has default config files' do - expect(File).to exist(get_conf_file("system-probe.yaml")) - expect(File).to exist(get_conf_file("security-agent.yaml")) - end - it 'can start security agent' do - - enable_cws(get_conf_file("system-probe.yaml"), true) - enable_cws(get_conf_file("security-agent.yaml"), true) - - stop "datadog-agent" - - start "datadog-agent" - sleep 30 - expect(is_service_running?("datadogagent")).to be_truthy - expect(is_service_running?("datadog-system-probe")).to be_truthy - expect(is_service_running?("datadog-security-agent")).to be_truthy - end - it 'can gracefully shut down security agent' do - stop "datadog-agent" - - ## these tests return false for any state other than running. So "shutting down" - ## will erroneously pass here - expect(is_service_running?("datadogagent")).to be_falsey - expect(is_service_running?("datadog-system-probe")).to be_falsey - expect(is_service_running?("datadog-security-agent")).to be_falsey - - ## so also check that the process is actually gone - expect(security_agent_running?).to be_falsey - expect(system_probe_running?).to be_falsey - - end -end - - -describe 'the agent installed with the cws component' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with CWS driver installed' - it_behaves_like 'a Windows Agent with CWS driver disabled' - it_behaves_like 'a Windows Agent with CWS running' -end - diff --git a/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-all-subservices/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-all-subservices/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-all-subservices/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-all-subservices/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-all-subservices/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-all-subservices/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-all-subservices/rspec_datadog/win-all-subservices_spec.rb b/test/kitchen/test/integration/win-all-subservices/rspec_datadog/win-all-subservices_spec.rb deleted file mode 100644 index 39618d4d83211..0000000000000 --- a/test/kitchen/test/integration/win-all-subservices/rspec_datadog/win-all-subservices_spec.rb +++ /dev/null @@ -1,12 +0,0 @@ -require_relative 'spec_helper' - -describe 'win-all-subservices' do - include_examples 'Agent install' - include_examples 'Basic Agent behavior' - it_behaves_like 'an Agent with APM enabled' - it_behaves_like 'an Agent with logs enabled' - it_behaves_like 'an Agent with process enabled' - it_behaves_like 'a running Agent with APM' - it_behaves_like 'a running Agent with process enabled' - include_examples 'Agent uninstall' -end diff --git a/test/kitchen/test/integration/win-alt-dir/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-alt-dir/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-alt-dir/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-alt-dir/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-alt-dir/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-alt-dir/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-alt-dir/rspec_datadog/win-alt-dir_spec.rb b/test/kitchen/test/integration/win-alt-dir/rspec_datadog/win-alt-dir_spec.rb deleted file mode 100644 index a0a74b975bf01..0000000000000 --- a/test/kitchen/test/integration/win-alt-dir/rspec_datadog/win-alt-dir_spec.rb +++ /dev/null @@ -1,126 +0,0 @@ -require 'spec_helper' - - -def check_user_exists(name) - selectstatement = "powershell -command \"get-wmiobject -query \\\"Select * from Win32_UserAccount where Name='#{name}'\\\"\"" - outp = `#{selectstatement} 2>&1` - outp -end - -shared_examples_for 'a correctly created configuration root' do - # We retrieve the value defined in kitchen.yml because there is no simple way - # to set env variables on the target machine or via parameters in Kitchen/Busser - # See https://github.com/test-kitchen/test-kitchen/issues/662 for reference - let(:configuration_path) { - dna_json_path = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\dna.json" - JSON.parse(IO.read(dna_json_path)).fetch('dd-agent-rspec').fetch('APPLICATIONDATADIRECTORY') - } - it 'has the proper configuration root' do - expect(File).not_to exist("#{ENV['ProgramData']}\\DataDog") - expect(File).to exist("#{configuration_path}") - end -end - -shared_examples_for 'a correctly created binary root' do - # We retrieve the value defined in kitchen.yml because there is no simple way - # to set env variables on the target machine or via parameters in Kitchen/Busser - # See https://github.com/test-kitchen/test-kitchen/issues/662 for reference - let(:binary_path) { - dna_json_path = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\dna.json" - JSON.parse(IO.read(dna_json_path)).fetch('dd-agent-rspec').fetch('PROJECTLOCATION') - } - it 'has the proper binary root' do - expect(File).not_to exist("#{ENV['ProgramFiles']}\\DataDog\\Datadog Agent") - expect(File).to exist("#{binary_path}") - end -end - -shared_examples_for 'an Agent with valid permissions' do - let(:configuration_path) { - dna_json_path = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\dna.json" - JSON.parse(IO.read(dna_json_path)).fetch('dd-agent-rspec').fetch('APPLICATIONDATADIRECTORY') - } - let(:binary_path) { - dna_json_path = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\dna.json" - JSON.parse(IO.read(dna_json_path)).fetch('dd-agent-rspec').fetch('PROJECTLOCATION') - } - dd_user_sid = get_user_sid('ddagentuser') - it 'has proper permissions on programdata\datadog' do - expected_sddl = "O:SYG:SYD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FA;;;#{dd_user_sid})" - actual_sddl = get_sddl_for_object(configuration_path) - - expect(actual_sddl).to have_sddl_equal_to(expected_sddl) - end - it 'has proper permissions on datadog.yaml' do - expected_sddl = "O:SYG:SYD:AI(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;FA;;;#{dd_user_sid})" - actual_sddl = get_sddl_for_object("#{configuration_path}\\datadog.yaml") - - expect(actual_sddl).to have_sddl_equal_to(expected_sddl) - end - it 'has proper permissions on the conf.d directory' do - # A,OICI;FA;;;SY = Allows Object Inheritance (OI) container inherit (CI); File All Access to LocalSystem - # A,OICIID;WD;;;BU = Allows OI, CI, this is an inherited ACE (ID), change permissions (WD), to built-in users - # A,OICIID;FA;;;BA = Allow OI, CI, ID, File All Access (FA) to Builtin Administrators - # A,OICIID;FA;;;SY = Inherited right of OI, CI, (FA) to LocalSystem - # A,OICIID;FA;;;dd_user_sid = explicit right assignment of OI, CI, FA to the dd-agent user, inherited from the parent - - expected_sddl = "O:SYG:SYD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;#{dd_user_sid})" - actual_sddl = get_sddl_for_object("#{configuration_path}\\conf.d") - - expect(actual_sddl).to have_sddl_equal_to(expected_sddl) - end - - it 'has the proper permissions on the DataDog registry key' do - # A;;KA;;;SY = Allows KA (KeyAllAccess) to local system - # A;;KA;;;BA = Allows KA (KeyAllAccess) to BA builtin administrators - # A;;KA;; allows KEY_ALL_ACCESS to the dd agent user - # A;OICIIO; Object Inherit AC, container inherit ace, Inherit only ace - # CCDCLCSWRPWPSDRCWDWOGA CC = SDDL Create Child - # DC = SDDL Delete Child - # LC = Listchildrent - # SW = self write - # RP = read property - # WP = write property - # SD = standard delete - # RC = read control - # WD = WRITE DAC - # WO = Write owner - # GA = Generic All - # for dd-agent-user - # A;CIID;KR;;;BU = Allow Container Inherit/inherited ace KeyRead to BU (builtin users) - # A;CIID;KA;;;BA = KeyAllAccess (builtin admins) - # A;CIID;KA;;;SY = Keyallaccess (local system) - # A;CIIOID;KA;;;CO= container inherit, inherit only, inherited ace, keyallAccess, to creator/owner - # A;CIID;KR;;;AC = allow container inherit/inherited ace Key Read to AC () - expected_sddl = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)" - expected_sddl_with_edge = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)(A;CIID;KR;;;S-1-15-3-1024-1065365936-1281604716-3511738428-1654721687-432734479-3232135806-4053264122-3456934681)" - - ## sigh. M$ added a mystery sid some time back, that Edge/IE use for sandboxing, - ## and it's an inherited ace. Allow that one, too - - actual_sddl = get_sddl_for_object("HKLM:Software\\Datadog\\Datadog Agent") - - expect(actual_sddl).to have_sddl_equal_to(expected_sddl) - .or have_sddl_equal_to(expected_sddl_with_edge) - end - - it 'has agent.exe running as ddagentuser' do - expect(get_username_from_tasklist("agent.exe")).to eq("ddagentuser") - end - secdata = get_security_settings - it 'has proper security rights assigned' do - expect(check_has_security_right(secdata, "SeDenyInteractiveLogonRight", "ddagentuser")).to be_truthy - expect(check_has_security_right(secdata, "SeDenyNetworkLogonRight", "ddagentuser")).to be_truthy - expect(check_has_security_right(secdata, "SeDenyRemoteInteractiveLogonRight", "ddagentuser")).to be_truthy - end - it 'is in proper groups' do - expect(check_is_user_in_group("ddagentuser", "Performance Monitor Users")).to be_truthy - end -end - -describe 'dd-agent-install-alternate-dir' do - it_behaves_like 'a correctly created configuration root' - it_behaves_like 'a correctly created binary root' - it_behaves_like 'an Agent with valid permissions' -end - diff --git a/test/kitchen/test/integration/win-install-fail/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-install-fail/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-install-fail/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-install-fail/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-install-fail/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-install-fail/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-install-fail/rspec_datadog/win-install-fail_spec.rb b/test/kitchen/test/integration/win-install-fail/rspec_datadog/win-install-fail_spec.rb deleted file mode 100644 index 5b6279ad760a5..0000000000000 --- a/test/kitchen/test/integration/win-install-fail/rspec_datadog/win-install-fail_spec.rb +++ /dev/null @@ -1,42 +0,0 @@ -require 'spec_helper' - -def check_user_exists(name) - selectstatement = "powershell -command \"get-wmiobject -query \\\"Select * from Win32_UserAccount where Name='#{name}'\\\"\"" - outp = `#{selectstatement} 2>&1` - outp -end -shared_examples_for 'a device with no files installed' do - it 'has no DataDog program files directory' do - expect(File).not_to exist("#{ENV['ProgramFiles']}\\DataDog") - end - it 'has no DataDog program data directory' do - expect(File).not_to exist("#{ENV['ProgramData']}\\DataDog\\conf.d") - expect(File).not_to exist("#{ENV['ProgramData']}\\DataDog\\checks.d") - # Do not check that the datadog.yaml file was removed because once it's created - # it's risky to delete it. - # expect(File).not_to exist("#{ENV['ProgramData']}\\DataDog\\datadog.yaml") - expect(File).not_to exist("#{ENV['ProgramData']}\\DataDog\\auth_token") - end -end - -shared_examples_for 'a device with a ddagentuser' do - is_user = check_user_exists('ddagentuser') - it 'has a ddagentuser account' do - expect(is_user).not_to be_empty - end -end - -shared_examples_for 'a device without a ddagentuser' do - is_user = check_user_exists('ddagentuser') - it 'doesn\'t have a ddagentuser account' do - expect(is_user).to be_empty - end -end - -describe 'dd-agent-win-install-fail' do - it_behaves_like 'a device with no files installed' - # The installer no longer deletes the user on uninstall and is transitioning away from managing user accounts. - # Therefore we should instead check that it did create a ddagentuser account for now, and in the future check - # that it did not create a ddagentuser account. - it_behaves_like 'a device with a ddagentuser' -end diff --git a/test/kitchen/test/integration/win-installopts/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-installopts/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-installopts/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-installopts/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-installopts/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-installopts/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-installopts/rspec_datadog/win-installopts_spec.rb b/test/kitchen/test/integration/win-installopts/rspec_datadog/win-installopts_spec.rb deleted file mode 100644 index 6c9ecbbb1d48e..0000000000000 --- a/test/kitchen/test/integration/win-installopts/rspec_datadog/win-installopts_spec.rb +++ /dev/null @@ -1,64 +0,0 @@ -require 'spec_helper' - -shared_examples_for 'an Agent with APM disabled' do - it 'has apm disabled' do - confYaml = read_conf_file() - expect(confYaml).to have_key("apm_config") - expect(confYaml["apm_config"]).to have_key("enabled") - expect(confYaml["apm_config"]["enabled"]).to be_falsey - expect(is_port_bound(8126)).to be_falsey - end -end - -shared_examples_for 'a configured Agent' do - confYaml = read_conf_file() - it 'has an API key' do - expect(confYaml).to have_key("api_key") - expect(confYaml["api_key"]).to eql("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") - end - it 'has tags set' do - expect(confYaml).to have_key("tags") - expect(confYaml["tags"]).to include("k1:v1", "k2:v2") - expect(confYaml["tags"]).not_to include("k1:v2") - expect(confYaml["tags"]).not_to include("k2:v1") - end - it 'has CMDPORT set' do - expect(confYaml).to have_key("cmd_port") - expect(confYaml["cmd_port"]).to equal(4999) - expect(is_port_bound(4999)).to be_truthy - expect(is_port_bound(5001)).to be_falsey - end - it 'has proxy settings' do - expect(confYaml).to have_key("proxy") - expect(confYaml["proxy"]).to have_key("https") - expect(URI.parse(confYaml["proxy"]["https"])).to eq(URI.parse("http://puser:ppass@proxy.foo.com:1234")) - end - it 'has site settings' do - expect(confYaml).to have_key("site") - expect(confYaml["site"]).to eq("eu") - - expect(confYaml).to have_key("dd_url") - expect(URI.parse(confYaml["dd_url"])).to eq(URI.parse("https://someurl.datadoghq.com")) - - expect(confYaml).to have_key("logs_config") - expect(confYaml["logs_config"]).to have_key("logs_dd_url") - expect(URI.parse(confYaml["logs_config"]["logs_dd_url"])).to eq(URI.parse("https://logs.someurl.datadoghq.com")) - - expect(confYaml).to have_key("process_config") - expect(confYaml["process_config"]).to have_key("process_dd_url") - expect(URI.parse(confYaml["process_config"]["process_dd_url"])).to eq(URI.parse("https://process.someurl.datadoghq.com")) - - expect(confYaml).to have_key("apm_config") - expect(confYaml["apm_config"]).to have_key("apm_dd_url") - expect(URI.parse(confYaml["apm_config"]["apm_dd_url"])).to eq(URI.parse("https://trace.someurl.datadoghq.com")) - - end -end - - -describe 'win-installopts' do - include_examples 'Agent install' - it_behaves_like 'a configured Agent' - include_examples 'Agent uninstall' -end - diff --git a/test/kitchen/test/integration/win-no-subservices/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-no-subservices/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-no-subservices/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-no-subservices/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-no-subservices/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-no-subservices/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-no-subservices/rspec_datadog/win-no-subservices_spec.rb b/test/kitchen/test/integration/win-no-subservices/rspec_datadog/win-no-subservices_spec.rb deleted file mode 100644 index 4bdc85bcac06f..0000000000000 --- a/test/kitchen/test/integration/win-no-subservices/rspec_datadog/win-no-subservices_spec.rb +++ /dev/null @@ -1,48 +0,0 @@ -require_relative 'spec_helper' - - -shared_examples_for 'an Agent with APM disabled' do - it 'has apm disabled' do - confYaml = read_conf_file() - expect(confYaml).to have_key("apm_config") - expect(confYaml["apm_config"]).to have_key("enabled") - expect(confYaml["apm_config"]["enabled"]).to be_falsey - expect(is_port_bound(8126)).to be_falsey - end - it 'does not have the apm agent running' do - expect(is_process_running?("trace-agent.exe")).to be_falsey - expect(is_service_running?("datadog-trace-agent")).to be_falsey - end -end - -shared_examples_for 'an Agent with logs disabled' do - it 'has logs disabled' do - confYaml = read_conf_file() - expect(confYaml).to have_key("logs_config") - expect(confYaml).to have_key("logs_enabled") - expect(confYaml["logs_enabled"]).to be_falsey - end -end - -shared_examples_for 'an Agent with process disabled' do - it 'has process disabled' do - confYaml = read_conf_file() - expect(confYaml).to have_key("process_config") - expect(confYaml["process_config"]).to have_key("process_collection") - expect(confYaml["process_config"]["process_collection"]).to have_key("enabled") - expect(confYaml["process_config"]["process_collection"]["enabled"]).to eq(false) - expect(confYaml["process_config"]["process_discovery"]["enabled"]).to eq(false) - end - it 'does not have the process agent running' do - expect(is_process_running?("process-agent.exe")).to be_falsey - expect(is_service_running?("datadog-process-agent")).to be_falsey - end -end - -describe 'win-no-subservices' do - include_examples 'Agent install' - include_examples 'Basic Agent behavior' - it_behaves_like 'an Agent with APM disabled' - it_behaves_like 'an Agent with logs disabled' - it_behaves_like 'an Agent with process disabled' -end diff --git a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/win-npm-beta-upgrade_spec.rb b/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/win-npm-beta-upgrade_spec.rb deleted file mode 100644 index 4f29c6702bfd9..0000000000000 --- a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/win-npm-beta-upgrade_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' - -describe 'the agent upgraded from npm beta' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM running' - it_behaves_like 'an upgraded Agent with the expected version' -end diff --git a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/win-npm-no-npm-option_spec.rb b/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/win-npm-no-npm-option_spec.rb deleted file mode 100644 index 4b1ad54ab4d07..0000000000000 --- a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/win-npm-no-npm-option_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper.rb' - -describe 'the agent installed with no npm options' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM driver disabled' - - end \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/win-npm-reinstall-option_spec.rb b/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/win-npm-reinstall-option_spec.rb deleted file mode 100644 index 649c3ab9a68b1..0000000000000 --- a/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/win-npm-reinstall-option_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' - -describe 'the agent installed with no npm options' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM running' -end diff --git a/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/win-npm-upgrade-no-npm_spec.rb b/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/win-npm-upgrade-no-npm_spec.rb deleted file mode 100644 index 7759de3e99fab..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/win-npm-upgrade-no-npm_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' - -describe 'the agent installed with no npm options' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM driver disabled' -end \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/win-npm-upgrade-to-npm-no-csflag_spec.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/win-npm-upgrade-to-npm-no-csflag_spec.rb deleted file mode 100644 index 34d70581c6542..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/win-npm-upgrade-to-npm-no-csflag_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' - -describe 'an agent upgraded with NPM added' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM running' - it_behaves_like 'an upgraded Agent with the expected version' -end diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/win-npm-upgrade-to-npm_spec.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/win-npm-upgrade-to-npm_spec.rb deleted file mode 100644 index 34d70581c6542..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/win-npm-upgrade-to-npm_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' - -describe 'an agent upgraded with NPM added' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM running' - it_behaves_like 'an upgraded Agent with the expected version' -end diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/win-npm-with-addlocal-all_spec.rb b/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/win-npm-with-addlocal-all_spec.rb deleted file mode 100644 index c659e18a27362..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/win-npm-with-addlocal-all_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' - -describe 'an agent upgraded with NPM added' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM running' -end diff --git a/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/win-npm-with-addlocal-npm_spec.rb b/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/win-npm-with-addlocal-npm_spec.rb deleted file mode 100644 index c659e18a27362..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/win-npm-with-addlocal-npm_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' - -describe 'an agent upgraded with NPM added' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM running' -end diff --git a/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/win-npm-with-cs-option_spec.rb b/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/win-npm-with-cs-option_spec.rb deleted file mode 100644 index 1d7e10d67beec..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/win-npm-with-cs-option_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper.rb' - -describe 'the agent installed with npm options' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM running' -end diff --git a/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/win-npm-with-npm-option_spec.rb b/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/win-npm-with-npm-option_spec.rb deleted file mode 100644 index 52ff3bec79bc3..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/win-npm-with-npm-option_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' - -describe 'the agent installed with the npm option' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM running' - end \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-repair/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-repair/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-repair/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-repair/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-repair/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-repair/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-repair/rspec_datadog/win-repair_spec.rb b/test/kitchen/test/integration/win-repair/rspec_datadog/win-repair_spec.rb deleted file mode 100644 index 37c4a4e307b41..0000000000000 --- a/test/kitchen/test/integration/win-repair/rspec_datadog/win-repair_spec.rb +++ /dev/null @@ -1,6 +0,0 @@ -require 'spec_helper' - -describe 'win-repair' do - include_examples 'Agent install' - include_examples 'Basic Agent behavior' -end diff --git a/test/kitchen/test/integration/win-secagent-test/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-secagent-test/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-secagent-test/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-secagent-test/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-secagent-test/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-secagent-test/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-secagent-test/rspec_datadog/win-secagent-test_spec.rb b/test/kitchen/test/integration/win-secagent-test/rspec_datadog/win-secagent-test_spec.rb deleted file mode 100644 index 5be3ff7811b77..0000000000000 --- a/test/kitchen/test/integration/win-secagent-test/rspec_datadog/win-secagent-test_spec.rb +++ /dev/null @@ -1,43 +0,0 @@ -require 'spec_helper' -#require 'sysprobe_spec_helper' -#require 'windows_npm_spec_helper' -require 'open3' - -GOLANG_TEST_FAILURE = /FAIL:/ - -def check_output(output, wait_thr) - test_failures = [] - - output.each_line do |line| - puts line - test_failures << line.strip if line =~ GOLANG_TEST_FAILURE - end - - if test_failures.empty? && !wait_thr.value.success? - test_failures << "Test command exited with status (#{wait_thr.value.exitstatus}) but no failures were captured." - end - - test_failures -end - -print `Powershell -C "Get-WmiObject Win32_OperatingSystem | Select Caption, OSArchitecture, Version, BuildNumber | FL"` - -wait_until_service_stopped('datadog-agent-sysprobe') - -root_dir = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\cache\\security-agent\\tests".gsub("\\", File::SEPARATOR) -print "#{root_dir}\n" -print "#{Dir.entries(root_dir)}\n" - -Dir.glob("#{root_dir}/**/testsuite.exe").each do |f| - #pkg = f.delete_prefix(root_dir).delete_suffix('/testsuite.exe') - describe "security-agent tests for #{f}" do - it 'successfully runs' do - Dir.chdir(File.dirname(f)) do - Open3.popen2e(f, "-test.v", "-test.timeout=10m", "-test.count=1") do |_, output, wait_thr| - test_failures = check_output(output, wait_thr) - expect(test_failures).to be_empty, test_failures.join("\n") - end - end - end - end -end diff --git a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/sysprobe_spec_helper.rb b/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/sysprobe_spec_helper.rb deleted file mode 100644 index f7c183282e725..0000000000000 --- a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/sysprobe_spec_helper.rb +++ /dev/null @@ -1,52 +0,0 @@ -require "rspec/core/formatters/base_text_formatter" - -class CustomFormatter - RSpec::Core::Formatters.register self, :example_passed, :example_failed, :dump_summary, :dump_failures, :example_group_started, :example_group_finished - - def initialize(output) - @output = output - end - - # Remove "."'s from the test execution output - def example_passed(_) - end - - # Remove "F"'s from the test execution output - def example_failed(_) - end - - def example_group_started(notification) - @output << "\nstarted #{notification.group.description}\n" - end - - def example_group_finished(notification) - @output << "finished #{notification.group.description}\n\n" - end - - def dump_summary(notification) - @output << "Finished in #{RSpec::Core::Formatters::Helpers.format_duration(notification.duration)}.\n" - @output << "Platform: #{`Powershell -C \"Get-WmiObject Win32_OperatingSystem | Select Caption, OSArchitecture, Version, BuildNumber | FL\"`}\n\n" - end - - def dump_failures(notification) # ExamplesNotification - if notification.failed_examples.length > 0 - @output << "\n#{RSpec::Core::Formatters::ConsoleCodes.wrap("FAILURES:", :failure)}\n\n" - @output << error_summary(notification) - end - end - - private - - def error_summary(notification) - summary_output = notification.failed_examples.map do |example| - "#{example.full_description}:\n#{example.execution_result.exception.message}\n\n" - end - - summary_output.join - end -end - - -RSpec.configure do |config| - config.formatter = CustomFormatter -end diff --git a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/win-sysprobe-test_spec.rb b/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/win-sysprobe-test_spec.rb deleted file mode 100644 index 3e1efaac7d850..0000000000000 --- a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/win-sysprobe-test_spec.rb +++ /dev/null @@ -1,39 +0,0 @@ -require 'spec_helper' -require 'open3' - -GOLANG_TEST_FAILURE = /FAIL:/ - -def check_output(output, wait_thr) - test_failures = [] - - output.each_line do |line| - puts line - test_failures << line.strip if line =~ GOLANG_TEST_FAILURE - end - - if test_failures.empty? && !wait_thr.value.success? - test_failures << "Test command exited with status (#{wait_thr.value.exitstatus}) but no failures were captured." - end - - test_failures -end - -print `Powershell -C "Get-WmiObject Win32_OperatingSystem | Select Caption, OSArchitecture, Version, BuildNumber | FL"` - -root_dir = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\cache\\system-probe\\tests".gsub("\\", File::SEPARATOR) -print root_dir -print Dir.entries(root_dir) - -Dir.glob("#{root_dir}/**/testsuite.exe").each do |f| - pkg = f.delete_prefix(root_dir).delete_suffix('/testsuite') - describe "system probe tests for #{pkg}" do - it 'successfully runs' do - Dir.chdir(File.dirname(f)) do - Open3.popen2e(f, "-test.v", "-test.timeout=10m", "-test.count=1") do |_, output, wait_thr| - test_failures = check_output(output, wait_thr) - expect(test_failures).to be_empty, test_failures.join("\n") - end - end - end - end -end diff --git a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/win-upgrade-rollback_spec.rb b/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/win-upgrade-rollback_spec.rb deleted file mode 100644 index 5b9fecaf2761f..0000000000000 --- a/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/win-upgrade-rollback_spec.rb +++ /dev/null @@ -1,8 +0,0 @@ -require 'spec_helper' - -describe 'win-upgrade-rollback' do - include_examples 'Agent install' - include_examples 'Basic Agent behavior' - it_behaves_like 'an upgraded Agent with the expected version' - include_examples 'Agent uninstall' -end diff --git a/test/kitchen/test/integration/win-user/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-user/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-user/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-user/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-user/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-user/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-user/rspec_datadog/win-user_spec.rb b/test/kitchen/test/integration/win-user/rspec_datadog/win-user_spec.rb deleted file mode 100644 index 176f0b78503d1..0000000000000 --- a/test/kitchen/test/integration/win-user/rspec_datadog/win-user_spec.rb +++ /dev/null @@ -1,142 +0,0 @@ -require 'spec_helper' - -=begin -Each SDDL is defined as follows (split across multiple lines here for readability, but they're -all concatenated into one) -O:owner_sid -G:group_sid -D:dacl_flags(string_ace1)(string_ace2)... (string_acen) -S:sacl_flags(string_ace1)(string_ace2)... (string_acen) - -Well known SID strings we're interested in -SY = LOCAL_SYSTEM -BU = Builtin Users -BA = Builtin Administrators - -So, the string O:SYG:SY indicates owner sid is LOCAL_SYSTEM group sid is SYSTEM -Then, D: indicates what comes after is the DACL, which is a list of ACE strings - -Ace strings are defined as -ace_type;ace_flags;rights;object_guid;inherit_object_guid;account_sid;(resource_attribute) - -Ace types include -A = Allowed -D = Denied - -Ace flags -ID = this ace inherited from parent - -rights -GA = Generic All -FA = File All access -FR = File Read -FW = File Write -WD = Write DAC (change permissions) - -Putting it all together, the sddl that we expect for Datadog.yaml is -O:SYG:SYD:(A;;FA;;;SY)(A;ID;WD;;;BU)(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;FA;;;#{dd_user_sid}) - -Owner: Local System -Group: Local System - -A;;FA;;;SY grants File All Access to Local System -A;ID;WD;;;BU grants members of the builtin users group Change Permissions; this ACE is inherited -A;ID;FA;;;BA grants Fila All Access to Builtin Administrators; this ACE was inherited from the parent -A;ID;FA;;;SY grants LocalSystem file AllAccess -A;ID;FA;;;#{dd_user_id} grants the ddagentuser FileAllAccess, this ACE is inherited from the parent -=end - -shared_examples_for 'an Agent with valid permissions' do - dd_user_sid = get_user_sid('ddagentuser') - it 'has proper permissions on programdata\datadog' do - # og+ng installers set protected explicit ACE on the config root - expected_sddl = "O:SYG:SYD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FA;;;#{dd_user_sid})" - actual_sddl = get_sddl_for_object("#{ENV['ProgramData']}\\Datadog") - - expect(actual_sddl).to have_sddl_equal_to(expected_sddl) - end - it 'has proper permissions on datadog.yaml' do - # ng installer sets inherited ACE - expected_sddl = "O:SYG:SYD:AI(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;FA;;;#{dd_user_sid})" - actual_sddl = get_sddl_for_object("#{ENV['ProgramData']}\\Datadog\\datadog.yaml") - - expect(actual_sddl).to have_sddl_equal_to(expected_sddl) - end - it 'has proper permissions on the conf.d directory' do - # A,OICI;FA;;;SY = Allows Object Inheritance (OI) container inherit (CI); File All Access to LocalSystem - # A,OICIID;WD;;;BU = Allows OI, CI, this is an inherited ACE (ID), change permissions (WD), to built-in users - # A,OICIID;FA;;;BA = Allow OI, CI, ID, File All Access (FA) to Builtin Administrators - # A,OICIID;FA;;;SY = Inherited right of OI, CI, (FA) to LocalSystem - # A,OICIID;FA;;;dd_user_sid = explicit right assignment of OI, CI, FA to the dd-agent user, inherited from the parent - - # ng installer sets inherited ACE - expected_sddl = "O:SYG:SYD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;#{dd_user_sid})" - actual_sddl = get_sddl_for_object("#{ENV['ProgramData']}\\Datadog\\conf.d") - - expect(actual_sddl).to have_sddl_equal_to(expected_sddl) - - end - - it 'has the proper permissions on the DataDog registry key' do - # A;;KA;;;SY = Allows KA (KeyAllAccess) to local system - # A;;KA;;;BA = Allows KA (KeyAllAccess) to BA builtin administrators - # A;;KA;; allows KEY_ALL_ACCESS to the dd agent user - # A;OICIIO; Object Inherit AC, container inherit ace, Inherit only ace - # CCDCLCSWRPWPSDRCWDWOGA CC = SDDL Create Child - # DC = SDDL Delete Child - # LC = Listchildrent - # SW = self write - # RP = read property - # WP = write property - # SD = standard delete - # RC = read control - # WD = WRITE DAC - # WO = Write owner - # GA = Generic All - # for dd-agent-user - # A;CIID;KR;;;BU = Allow Container Inherit/inherited ace KeyRead to BU (builtin users) - # A;CIID;KA;;;BA = KeyAllAccess (builtin admins) - # A;CIID;KA;;;SY = Keyallaccess (local system) - # A;CIIOID;KA;;;CO= container inherit, inherit only, inherited ace, keyallAccess, to creator/owner - # A;CIID;KR;;;AC = allow container inherit/inherited ace Key Read to AC () - expected_sddl = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)" - expected_sddl_with_edge = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)(A;CIID;KR;;;S-1-15-3-1024-1065365936-1281604716-3511738428-1654721687-432734479-3232135806-4053264122-3456934681)" - - ## sigh. M$ added a mystery sid some time back, that Edge/IE use for sandboxing, - ## and it's an inherited ace. Allow that one, too - - actual_sddl = get_sddl_for_object("HKLM:Software\\Datadog\\Datadog Agent") - - expect(actual_sddl).to have_sddl_equal_to(expected_sddl) - .or have_sddl_equal_to(expected_sddl_with_edge) - end - - it 'has agent.exe running as ddagentuser' do - expect(get_username_from_tasklist("agent.exe")).to eq("ddagentuser") - end - it 'has trace agent running as ddagentuser' do - expect(get_username_from_tasklist("trace-agent.exe")).to eq("ddagentuser") - end - it 'has process agent running as local_system' do - expect(get_username_from_tasklist("process-agent.exe")).to eq("SYSTEM") - end - secdata = get_security_settings - it 'has proper security rights assigned' do - expect(check_has_security_right(secdata, "SeDenyInteractiveLogonRight", "ddagentuser")).to be_truthy - expect(check_has_security_right(secdata, "SeDenyNetworkLogonRight", "ddagentuser")).to be_truthy - expect(check_has_security_right(secdata, "SeDenyRemoteInteractiveLogonRight", "ddagentuser")).to be_truthy - end - it 'is in proper groups' do - expect(check_is_user_in_group("ddagentuser", "Performance Monitor Users")).to be_truthy - end -end -describe 'dd-agent-win-user' do -# it_behaves_like 'an installed Agent' - it_behaves_like 'an Agent with APM enabled' - it_behaves_like 'an Agent with process enabled' - it_behaves_like 'an Agent with valid permissions' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a running Agent with APM' - it_behaves_like 'a running Agent with process enabled' -end - diff --git a/test/kitchen/uservars-example.json b/test/kitchen/uservars-example.json deleted file mode 100644 index 0194b1795bef2..0000000000000 --- a/test/kitchen/uservars-example.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "global" : { - "comment-global" : "Environment variables that will be overridden for every target", - "comment-WINDOWS_AGENT_URL": "Override download target (useful for testing specific build). Must end in '/'", - "WINDOWS_AGENT_URL" : "https://s3.amazonaws.com/ddagent-windows-stable/", - "comment-WINDOWS_AGENT_FILE": "Override download file (must _not_ end in msi)", - "WINDOWS_AGENT_FILE" : "datadog-agent-7-latest.amd64", - "AGENT_VERSION" : "7.27.0", - "DD_AGENT_EXPECTED_VERSION" : "7.27.0" - }, - "hyperv" : { - "comment-hyperv-vars": "Variables specific to the hyper-v driver", - "KITCHEN_HYPERV_SWITCH" : "public-eth", - "KITCHEN_HYPERV_MEM_MIN" : "4GB", - "VM_USERNAME" : "administrator", - "SERVER_PASSWORD" : "" - }, - "ec2" : { - "comment-ec2-vars": "Variables specific to the hyper-v driver", - "comment_SSH_KEY": "path to ssh key used to create instances", - "KITCHEN_EC2_SSH_KEY_PATH" : "", - "comment_SSH_ID": "friendly name in EC2 associated with above ssh key", - "KITCHEN_EC2_SSH_KEY_ID" : "derek-sandbox-2", - "KITCHEN_EC2_TAG_CREATOR" : "db" - }, - "azure" : { - - } -} \ No newline at end of file diff --git a/test/new-e2e/tests/npm/ec2_1host_test.go b/test/new-e2e/tests/npm/ec2_1host_test.go index 3ed2cb8de79e0..ba07540f58ca7 100644 --- a/test/new-e2e/tests/npm/ec2_1host_test.go +++ b/test/new-e2e/tests/npm/ec2_1host_test.go @@ -79,8 +79,8 @@ func TestEC2VMSuite(t *testing.T) { e2eParams := []e2e.SuiteOption{e2e.WithProvisioner(e2e.NewTypedPulumiProvisioner("hostHttpbin", hostDockerHttpbinEnvProvisioner(), nil))} - // Source of our kitchen CI images test/kitchen/platforms.json - // Other VM image can be used, our kitchen CI images test/kitchen/platforms.json + // Source of our E2E CI images test/new-e2e/tests/agent-platform/platforms.json + // Other VM image can be used, our E2E CI images test/new-e2e/tests/agent-platform/platforms.json // ec2params.WithImageName("ami-a4dc46db", os.AMD64Arch, ec2os.AmazonLinuxOS) // ubuntu-16-04-4.4 e2e.Run(t, s, e2eParams...) } diff --git a/test/new-e2e/tests/sysprobe-functional/.gitignore b/test/new-e2e/tests/sysprobe-functional/.gitignore new file mode 100644 index 0000000000000..433a10da9f0e5 --- /dev/null +++ b/test/new-e2e/tests/sysprobe-functional/.gitignore @@ -0,0 +1,7 @@ +# Exclude system-probe test files generated by running inv -e system-probe.kitchen-prepare +artifacts/* +clang-bpf +llc-bpf +gotestsum +test2json +minimized-btfs.tar.xz diff --git a/test/new-e2e/tests/sysprobe-functional/apmtags_test.go b/test/new-e2e/tests/sysprobe-functional/apmtags_test.go index fad68dd02267d..3aff8ab90c5ae 100644 --- a/test/new-e2e/tests/sysprobe-functional/apmtags_test.go +++ b/test/new-e2e/tests/sysprobe-functional/apmtags_test.go @@ -17,13 +17,14 @@ import ( "github.com/DataDog/test-infra-definitions/components/datadog/agentparams" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" awsHostWindows "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/host/windows" "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) type apmvmSuite struct { @@ -107,9 +108,7 @@ func (v *apmvmSuite) SetupSuite() { currDir, err := os.Getwd() require.NoError(t, err) - reporoot, _ := filepath.Abs(filepath.Join(currDir, "..", "..", "..", "..")) - kitchenDir := filepath.Join(reporoot, "test", "kitchen", "site-cookbooks") - v.testspath = filepath.Join(kitchenDir, "dd-system-probe-check", "files", "default", "tests") + v.testspath = filepath.Join(currDir, "artifacts") // this creates the VM. v.BaseSuite.SetupSuite() diff --git a/test/new-e2e/tests/sysprobe-functional/sysprobe_test.go b/test/new-e2e/tests/sysprobe-functional/sysprobe_test.go index 4e41c685bbd7d..888f9427e4413 100644 --- a/test/new-e2e/tests/sysprobe-functional/sysprobe_test.go +++ b/test/new-e2e/tests/sysprobe-functional/sysprobe_test.go @@ -50,9 +50,7 @@ func (v *vmSuite) SetupSuite() { currDir, err := os.Getwd() require.NoError(t, err) - reporoot, _ := filepath.Abs(filepath.Join(currDir, "..", "..", "..", "..")) - kitchenDir := filepath.Join(reporoot, "test", "kitchen", "site-cookbooks") - v.testspath = filepath.Join(kitchenDir, "dd-system-probe-check", "files", "default", "tests") + v.testspath = filepath.Join(currDir, "artifacts") } func (v *vmSuite) TestSystemProbeNPMSuite() { From 54e744f5a00273a2f8bc8568555fa02f5a8685a0 Mon Sep 17 00:00:00 2001 From: Alexandre Yang Date: Fri, 6 Dec 2024 10:30:54 +0100 Subject: [PATCH 019/303] [HA Agent] Refactor is_leader to state (#31777) --- comp/haagent/def/component.go | 4 +-- .../{impl/utils_test.go => def/state.go} | 19 ++++++------ comp/haagent/impl/haagent.go | 31 ++++++++++++------- comp/haagent/impl/haagent_test.go | 7 +++-- comp/haagent/impl/utils.go | 13 -------- comp/haagent/mock/mock.go | 7 ++++- 6 files changed, 43 insertions(+), 38 deletions(-) rename comp/haagent/{impl/utils_test.go => def/state.go} (51%) delete mode 100644 comp/haagent/impl/utils.go diff --git a/comp/haagent/def/component.go b/comp/haagent/def/component.go index f1d3f53ce3fa5..7115988e5501b 100644 --- a/comp/haagent/def/component.go +++ b/comp/haagent/def/component.go @@ -16,8 +16,8 @@ type Component interface { // GetGroup returns the value of ha_agent.group GetGroup() string - // IsLeader returns true if the current Agent is leader - IsLeader() bool + // GetState returns current HA agent state + GetState() State // SetLeader takes the leader agent hostname as input, if it matches the current agent hostname, // the isLeader state is set to true, otherwise false. diff --git a/comp/haagent/impl/utils_test.go b/comp/haagent/def/state.go similarity index 51% rename from comp/haagent/impl/utils_test.go rename to comp/haagent/def/state.go index 2e9f324c30890..e9d873abc03f3 100644 --- a/comp/haagent/impl/utils_test.go +++ b/comp/haagent/def/state.go @@ -3,15 +3,16 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2024-present Datadog, Inc. -package haagentimpl +package haagent -import ( - "testing" +// State type for HA Agent State +type State string - "github.com/stretchr/testify/assert" +const ( + // Active HA Agent state + Active State = "active" + // Standby HA Agent state + Standby State = "standby" + // Unknown HA Agent state + Unknown State = "unknown" ) - -func Test_leaderStatusToRole(t *testing.T) { - assert.Equal(t, "leader", leaderStateToRole(true)) - assert.Equal(t, "follower", leaderStateToRole(false)) -} diff --git a/comp/haagent/impl/haagent.go b/comp/haagent/impl/haagent.go index f670a0103dbb3..40635092d42f7 100644 --- a/comp/haagent/impl/haagent.go +++ b/comp/haagent/impl/haagent.go @@ -10,6 +10,7 @@ import ( "encoding/json" log "github.com/DataDog/datadog-agent/comp/core/log/def" + haagent "github.com/DataDog/datadog-agent/comp/haagent/def" "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" "github.com/DataDog/datadog-agent/pkg/util/hostname" "go.uber.org/atomic" @@ -18,14 +19,14 @@ import ( type haAgentImpl struct { log log.Component haAgentConfigs *haAgentConfigs - isLeader *atomic.Bool + state *atomic.String } func newHaAgentImpl(log log.Component, haAgentConfigs *haAgentConfigs) *haAgentImpl { return &haAgentImpl{ log: log, haAgentConfigs: haAgentConfigs, - isLeader: atomic.NewBool(false), + state: atomic.NewString(string(haagent.Unknown)), } } @@ -37,8 +38,8 @@ func (h *haAgentImpl) GetGroup() string { return h.haAgentConfigs.group } -func (h *haAgentImpl) IsLeader() bool { - return h.isLeader.Load() +func (h *haAgentImpl) GetState() haagent.State { + return haagent.State(h.state.Load()) } func (h *haAgentImpl) SetLeader(leaderAgentHostname string) { @@ -47,13 +48,21 @@ func (h *haAgentImpl) SetLeader(leaderAgentHostname string) { h.log.Warnf("error getting the hostname: %v", err) return } - newIsLeader := agentHostname == leaderAgentHostname - prevIsLeader := h.isLeader.Load() - if newIsLeader != prevIsLeader { - h.log.Infof("agent role switched from %s to %s", leaderStateToRole(prevIsLeader), leaderStateToRole(newIsLeader)) - h.isLeader.Store(newIsLeader) + + var newState haagent.State + if agentHostname == leaderAgentHostname { + newState = haagent.Active + } else { + newState = haagent.Standby + } + + prevState := h.GetState() + + if newState != prevState { + h.log.Infof("agent state switched from %s to %s", prevState, newState) + h.state.Store(string(newState)) } else { - h.log.Debugf("agent role not changed (current role: %s)", leaderStateToRole(prevIsLeader)) + h.log.Debugf("agent state not changed (current state: %s)", prevState) } } @@ -61,7 +70,7 @@ func (h *haAgentImpl) SetLeader(leaderAgentHostname string) { // When ha-agent is disabled, the agent behave as standalone agent (non HA) and will always run all integrations. func (h *haAgentImpl) ShouldRunIntegration(integrationName string) bool { if h.Enabled() && validHaIntegrations[integrationName] { - return h.isLeader.Load() + return h.GetState() == haagent.Active } return true } diff --git a/comp/haagent/impl/haagent_test.go b/comp/haagent/impl/haagent_test.go index 8821843e21c73..a83822de20431 100644 --- a/comp/haagent/impl/haagent_test.go +++ b/comp/haagent/impl/haagent_test.go @@ -10,6 +10,7 @@ import ( "github.com/DataDog/datadog-agent/comp/core/config" logmock "github.com/DataDog/datadog-agent/comp/core/log/mock" + haagent "github.com/DataDog/datadog-agent/comp/haagent/def" "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/stretchr/testify/assert" @@ -62,11 +63,13 @@ func Test_IsLeader_SetLeader(t *testing.T) { } haAgent := newTestHaAgentComponent(t, agentConfigs).Comp + assert.Equal(t, haagent.Unknown, haAgent.GetState()) + haAgent.SetLeader("another-agent") - assert.False(t, haAgent.IsLeader()) + assert.Equal(t, haagent.Standby, haAgent.GetState()) haAgent.SetLeader("my-agent-hostname") - assert.True(t, haAgent.IsLeader()) + assert.Equal(t, haagent.Active, haAgent.GetState()) } func Test_RCListener(t *testing.T) { diff --git a/comp/haagent/impl/utils.go b/comp/haagent/impl/utils.go deleted file mode 100644 index 2ce6dee05203b..0000000000000 --- a/comp/haagent/impl/utils.go +++ /dev/null @@ -1,13 +0,0 @@ -// 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 2024-present Datadog, Inc. - -package haagentimpl - -func leaderStateToRole(isLeader bool) string { - if isLeader { - return "leader" - } - return "follower" -} diff --git a/comp/haagent/mock/mock.go b/comp/haagent/mock/mock.go index 37c5cf4aa9916..f4d713d93f271 100644 --- a/comp/haagent/mock/mock.go +++ b/comp/haagent/mock/mock.go @@ -21,6 +21,7 @@ type mockHaAgent struct { group string enabled bool + state haagent.State } func (m *mockHaAgent) GetGroup() string { @@ -34,7 +35,7 @@ func (m *mockHaAgent) Enabled() bool { func (m *mockHaAgent) SetLeader(_ string) { } -func (m *mockHaAgent) IsLeader() bool { return false } +func (m *mockHaAgent) GetState() haagent.State { return haagent.Standby } func (m *mockHaAgent) SetGroup(group string) { m.group = group @@ -43,6 +44,9 @@ func (m *mockHaAgent) SetGroup(group string) { func (m *mockHaAgent) SetEnabled(enabled bool) { m.enabled = enabled } +func (m *mockHaAgent) SetState(state haagent.State) { + m.state = state +} func (m *mockHaAgent) ShouldRunIntegration(_ string) bool { return true @@ -54,6 +58,7 @@ type Component interface { SetGroup(string) SetEnabled(bool) + SetState(haagent.State) } // NewMockHaAgent returns a new Mock From 57d04939974ef4f5a5a120d8bf69a9420bd46fed Mon Sep 17 00:00:00 2001 From: Arthur Bellal Date: Fri, 6 Dec 2024 10:48:15 +0100 Subject: [PATCH 020/303] (fleet) isolate the downloader in its own sub cmd (#31795) --- .github/CODEOWNERS | 1 + .gitlab/package_build/installer.yml | 2 +- .../main.go} | 4 +- cmd/installer/main.go | 2 - pkg/fleet/installer/setup.sh | 47 ---------- pkg/fleet/installer/setup/install.sh | 52 ++++++++++++ tasks/installer.py | 85 ++++++++----------- 7 files changed, 89 insertions(+), 104 deletions(-) rename cmd/{installer/main_bootstrapper.go => installer-downloader/main.go} (91%) delete mode 100644 pkg/fleet/installer/setup.sh create mode 100644 pkg/fleet/installer/setup/install.sh diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 6c22b2c34e4b8..ad6e11974b350 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -240,6 +240,7 @@ /cmd/systray/ @DataDog/windows-agent /cmd/security-agent/ @DataDog/agent-security /cmd/installer/ @DataDog/fleet @DataDog/windows-agent +/cmd/installer-downloader/ @DataDog/fleet /dev/ @DataDog/agent-devx-loops /devenv/ @DataDog/agent-devx-loops diff --git a/.gitlab/package_build/installer.yml b/.gitlab/package_build/installer.yml index 19dd062fd5461..443b2fe52318b 100644 --- a/.gitlab/package_build/installer.yml +++ b/.gitlab/package_build/installer.yml @@ -103,7 +103,7 @@ installer-install-scripts: - !reference [.retrieve_linux_go_deps] - echo "About to build for $RELEASE_VERSION" - mkdir -p $OMNIBUS_PACKAGE_DIR - - inv -e installer.build-linux-script && mv ./bin/installer/setup.sh $OMNIBUS_PACKAGE_DIR/install-djm.sh + - inv -e installer.build-linux-script && mv ./bin/installer/install.sh $OMNIBUS_PACKAGE_DIR/install-djm.sh - ls -la $OMNIBUS_PACKAGE_DIR artifacts: expire_in: 2 weeks diff --git a/cmd/installer/main_bootstrapper.go b/cmd/installer-downloader/main.go similarity index 91% rename from cmd/installer/main_bootstrapper.go rename to cmd/installer-downloader/main.go index 25f95f8ef281f..f964080a4315b 100644 --- a/cmd/installer/main_bootstrapper.go +++ b/cmd/installer-downloader/main.go @@ -3,9 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2023-present Datadog, Inc. -//go:build bootstrapper - -// Package main implements 'installer'. +// Package main implements the installer downloader package main import ( diff --git a/cmd/installer/main.go b/cmd/installer/main.go index 1cd198631d420..e7d94bb6d70fe 100644 --- a/cmd/installer/main.go +++ b/cmd/installer/main.go @@ -3,8 +3,6 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2023-present Datadog, Inc. -//go:build !bootstrapper - // Package main implements 'installer'. package main diff --git a/pkg/fleet/installer/setup.sh b/pkg/fleet/installer/setup.sh deleted file mode 100644 index a3dee1323ce00..0000000000000 --- a/pkg/fleet/installer/setup.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash -set -e -# This script is used to install Datadog. - -if [ "$(uname -s)" != "Linux" ] || { [ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ]; }; then - echo "This installer only supports linux running on amd64 or arm64." >&2 - exit 1 -fi - -installer_path="/opt/datadog-installer-bootstrap" - -install() { - if [ "$UID" == "0" ]; then - sudo_cmd='' - else - sudo_cmd='sudo' - fi - - case "$(uname -m)" in - x86_64) - echo "${installer_bin_linux_amd64}" | base64 -d | $sudo_cmd tee "${installer_path}" >/dev/null - ;; - aarch64) - echo "${installer_bin_linux_arm64}" | base64 -d | $sudo_cmd tee "${installer_path}" >/dev/null - ;; - esac - $sudo_cmd chmod +x "${installer_path}" - echo "Running the installer binary..." - $sudo_cmd "${installer_path}" "$@" - $sudo_cmd rm -f "${installer_path}" -} - -# Embedded installer binaries. -# Source: https://github.com/DataDog/datadog-agent/tree/INSTALLER_COMMIT/cmd/installer -installer_bin_linux_amd64=$( - cat <&2 + exit 1 +fi + +tmp_dir="/opt/datadog-packages/tmp" +downloader_path="${tmp_dir}/download-installer" + +install() { + if [ "$UID" == "0" ]; then + sudo_cmd='' + else + sudo_cmd='sudo' + fi + + $sudo_cmd mkdir -p "${tmp_dir}" + case "$(uname -m)" in + x86_64) + echo "${downloader_bin_linux_amd64}" | base64 -d | $sudo_cmd tee "${downloader_path}" >/dev/null + ;; + aarch64) + echo "${downloader_bin_linux_arm64}" | base64 -d | $sudo_cmd tee "${downloader_path}" >/dev/null + ;; + esac + $sudo_cmd chmod +x "${downloader_path}" + echo "Starting the Datadog installer..." + $sudo_cmd "${downloader_path}" "$@" + $sudo_cmd rm -f "${downloader_path}" +} + +# Embedded binaries used to install Datadog. +# Source: https://github.com/DataDog/datadog-agent/tree/INSTALLER_COMMIT/pkg/fleet/installer +# DO NOT EDIT THIS SECTION MANUALLY. +downloader_bin_linux_amd64=$( + cat < Date: Fri, 6 Dec 2024 11:34:20 +0100 Subject: [PATCH 021/303] Fix comp/otelcol/collector-contrib module path (#31762) --- comp/otelcol/collector-contrib/impl/go.mod | 2 +- comp/otelcol/collector-contrib/impl/manifest.yaml | 2 +- tasks/unit_tests/testdata/collector/valid_datadog_manifest.yaml | 2 +- .../collector/valid_manifest_without_specified_version.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/comp/otelcol/collector-contrib/impl/go.mod b/comp/otelcol/collector-contrib/impl/go.mod index 2ca191c9c4ea0..d23c34cd7c2f2 100644 --- a/comp/otelcol/collector-contrib/impl/go.mod +++ b/comp/otelcol/collector-contrib/impl/go.mod @@ -1,6 +1,6 @@ // Code generated by "go.opentelemetry.io/collector/cmd/builder". DO NOT EDIT. -module github.com/DataDog/datadog-agent/comp/otelcol/collector-contrib +module github.com/DataDog/datadog-agent/comp/otelcol/collector-contrib/impl go 1.22.0 diff --git a/comp/otelcol/collector-contrib/impl/manifest.yaml b/comp/otelcol/collector-contrib/impl/manifest.yaml index a5d48ed8eed80..6f878f6d19c84 100644 --- a/comp/otelcol/collector-contrib/impl/manifest.yaml +++ b/comp/otelcol/collector-contrib/impl/manifest.yaml @@ -3,7 +3,7 @@ connectors: v0.114.0 dist: description: Datadog OpenTelemetry Collector - module: github.com/DataDog/datadog-agent/comp/otelcol/collector-contrib + module: github.com/DataDog/datadog-agent/comp/otelcol/collector-contrib/impl name: otelcol-contrib output_path: ./comp/otelcol/collector-contrib/impl version: 0.114.0 diff --git a/tasks/unit_tests/testdata/collector/valid_datadog_manifest.yaml b/tasks/unit_tests/testdata/collector/valid_datadog_manifest.yaml index 4a3a56caf12e3..0f12f2cc26ca1 100644 --- a/tasks/unit_tests/testdata/collector/valid_datadog_manifest.yaml +++ b/tasks/unit_tests/testdata/collector/valid_datadog_manifest.yaml @@ -1,6 +1,6 @@ --- dist: - module: github.com/DataDog/datadog-agent/comp/otelcol/collector-contrib + module: github.com/DataDog/datadog-agent/comp/otelcol/collector-contrib/impl name: otelcol-contrib description: Valid (default) datadog converged Agent ocb manifest (should pass collector_tests.py) version: 0.114.0 diff --git a/tasks/unit_tests/testdata/collector/valid_manifest_without_specified_version.yaml b/tasks/unit_tests/testdata/collector/valid_manifest_without_specified_version.yaml index baa4486191d7f..7a11140cbb107 100644 --- a/tasks/unit_tests/testdata/collector/valid_manifest_without_specified_version.yaml +++ b/tasks/unit_tests/testdata/collector/valid_manifest_without_specified_version.yaml @@ -1,6 +1,6 @@ --- dist: - module: github.com/DataDog/datadog-agent/comp/otelcol/collector-contrib + module: github.com/DataDog/datadog-agent/comp/otelcol/collector-contrib/impl name: otelcol-contrib description: valid manifest with minimum requirements and no version (should pass collector_tests.py) output_path: ./comp/otelcol/collector-contrib/impl From 38921a72e8df7d7879881cb74d98cae49994d1fc Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Fri, 6 Dec 2024 11:34:26 +0100 Subject: [PATCH 022/303] Bump gohai workflow macos runners to 13 (#31793) --- .github/workflows/gohai.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/gohai.yml b/.github/workflows/gohai.yml index 8b53658112909..851c2f9d0ccd1 100644 --- a/.github/workflows/gohai.yml +++ b/.github/workflows/gohai.yml @@ -7,9 +7,11 @@ on: - main - "[0-9]+.[0-9]+.x" paths: + - ".github/workflows/gohai.yml" - "pkg/gohai/**" pull_request: paths: + - ".github/workflows/gohai.yml" - "pkg/gohai/**" permissions: {} @@ -23,7 +25,7 @@ jobs: [ ubuntu-20.04, ubuntu-latest, - macos-12, + macos-13, macos-latest, windows-2019, windows-latest, From f7625c5ee640792bcbde23507a18de0a9d3464c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lian=20Raimbault?= <161456554+CelianR@users.noreply.github.com> Date: Fri, 6 Dec 2024 05:48:33 -0500 Subject: [PATCH 023/303] [ACIX-453] Agent 6 release tasks support (#30062) Co-authored-by: Nicolas Schweitzer Co-authored-by: sabrina lu Co-authored-by: pducolin <45568537+pducolin@users.noreply.github.com> --- .github/workflows/create_rc_pr.yml | 4 +- .gitlab/check_merge/do_not_merge.yml | 2 +- .gitlab/e2e_install_packages/windows.yml | 4 +- .../functional_test/regression_detector.yml | 2 +- .gitlab/pkg_metrics/pkg_metrics.yml | 2 +- .../datadog-agent-integrations-py3.rb | 2 +- tasks/kmt.py | 2 +- tasks/libs/ciproviders/github_api.py | 3 + tasks/libs/common/git.py | 6 +- tasks/libs/releasing/json.py | 7 +- tasks/libs/releasing/notes.py | 25 +- tasks/libs/releasing/version.py | 14 +- tasks/notes.py | 4 +- tasks/release.py | 1155 ++++++++++------- tasks/unit_tests/release_tests.py | 37 +- 15 files changed, 712 insertions(+), 557 deletions(-) diff --git a/.github/workflows/create_rc_pr.yml b/.github/workflows/create_rc_pr.yml index 9bbc419466891..874944a0fe95d 100644 --- a/.github/workflows/create_rc_pr.yml +++ b/.github/workflows/create_rc_pr.yml @@ -96,8 +96,10 @@ jobs: - name: Create RC PR if: ${{ steps.check_for_changes.outputs.CHANGES == 'true'}} + env: + MATRIX: ${{ matrix.value }} run: | git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git fetch - inv -e release.create-rc --slack-webhook=${{ secrets.AGENT_RELEASE_SYNC_SLACK_WEBHOOK }} + inv -e release.create-rc "$MATRIX" --slack-webhook=${{ secrets.AGENT_RELEASE_SYNC_SLACK_WEBHOOK }} diff --git a/.gitlab/check_merge/do_not_merge.yml b/.gitlab/check_merge/do_not_merge.yml index 1e76fa3c19303..214e051a7d00e 100644 --- a/.gitlab/check_merge/do_not_merge.yml +++ b/.gitlab/check_merge/do_not_merge.yml @@ -22,5 +22,5 @@ do-not-merge: echo "This workflow fails so that the pull request cannot be merged" exit 1 fi - - inv -e release.check-omnibus-branches || exit 1 + - inv -e release.check-omnibus-branches --no-worktree || exit 1 - exit 0 diff --git a/.gitlab/e2e_install_packages/windows.yml b/.gitlab/e2e_install_packages/windows.yml index 223812e0e0c4e..f4575d0159f8c 100644 --- a/.gitlab/e2e_install_packages/windows.yml +++ b/.gitlab/e2e_install_packages/windows.yml @@ -14,7 +14,7 @@ - !reference [.new_e2e_template, before_script] script: # LAST_STABLE_VERSION is used for upgrade test - - export LAST_STABLE_VERSION=$(invoke release.get-release-json-value "last_stable::7") + - export LAST_STABLE_VERSION=$(invoke release.get-release-json-value "last_stable::7" --no-worktree) - !reference [.new_e2e_template, script] .new-e2e_windows_domain_test: @@ -28,7 +28,7 @@ - !reference [.new_e2e_template, before_script] script: # LAST_STABLE_VERSION is used for upgrade test - - export LAST_STABLE_VERSION=$(invoke release.get-release-json-value "last_stable::7") + - export LAST_STABLE_VERSION=$(invoke release.get-release-json-value "last_stable::7" --no-worktree) - !reference [.new_e2e_template, script] .new-e2e_windows_installer_v7_tests: diff --git a/.gitlab/functional_test/regression_detector.yml b/.gitlab/functional_test/regression_detector.yml index ce412f24981fb..ed86bbc9fa0c0 100644 --- a/.gitlab/functional_test/regression_detector.yml +++ b/.gitlab/functional_test/regression_detector.yml @@ -37,7 +37,7 @@ single-machine-performance-regression_detector: - mkdir outputs # Also needed for smp job sync step # Compute merge base of current commit and `main` - git fetch origin - - SMP_BASE_BRANCH=$(inv release.get-release-json-value base_branch) + - SMP_BASE_BRANCH=$(inv release.get-release-json-value base_branch --no-worktree) - echo "Looking for merge base for branch ${SMP_BASE_BRANCH}" - SMP_MERGE_BASE=$(git merge-base ${CI_COMMIT_SHA} origin/${SMP_BASE_BRANCH}) - echo "Merge base is ${SMP_MERGE_BASE}" diff --git a/.gitlab/pkg_metrics/pkg_metrics.yml b/.gitlab/pkg_metrics/pkg_metrics.yml index 433a381dbb8ce..bb62a727a570a 100644 --- a/.gitlab/pkg_metrics/pkg_metrics.yml +++ b/.gitlab/pkg_metrics/pkg_metrics.yml @@ -85,7 +85,7 @@ send_pkg_size: - if [[ "${ARCH}" == "amd64" ]]; then ls -l $OMNIBUS_PACKAGE_DIR_SUSE; fi - export failures=0 - - export last_stable=$(inv release.get-release-json-value "last_stable::${MAJOR_VERSION}") + - export last_stable=$(inv release.get-release-json-value "last_stable::${MAJOR_VERSION}" --no-worktree) # Get stable packages from S3 buckets, send new package sizes & compare stable and new package sizes # The loop assumes that all flavors start with "da", which is currently the case # We want to run all package size comparisons before failing, so we set +e while doing the comparisons diff --git a/omnibus/config/software/datadog-agent-integrations-py3.rb b/omnibus/config/software/datadog-agent-integrations-py3.rb index e29c4e3431ab4..0b88f6fd8f5d1 100644 --- a/omnibus/config/software/datadog-agent-integrations-py3.rb +++ b/omnibus/config/software/datadog-agent-integrations-py3.rb @@ -132,7 +132,7 @@ ).stdout.split() # Retrieving integrations from cache cache_bucket = ENV.fetch('INTEGRATION_WHEELS_CACHE_BUCKET', '') - cache_branch = (shellout! "inv release.get-release-json-value base_branch", cwd: File.expand_path('..', tasks_dir_in)).stdout.strip + cache_branch = (shellout! "inv release.get-release-json-value base_branch --no-worktree", cwd: File.expand_path('..', tasks_dir_in)).stdout.strip if cache_bucket != '' mkdir cached_wheels_dir shellout! "inv -e agent.get-integrations-from-cache " \ diff --git a/tasks/kmt.py b/tasks/kmt.py index b1c30e0246c50..18f5f9370893b 100644 --- a/tasks/kmt.py +++ b/tasks/kmt.py @@ -2219,7 +2219,7 @@ def install_ddagent( assert len(domains) > 0, err_msg if version is not None: - check_version(version) + check_version(ctx, version) else: with open("release.json") as f: release = json.load(f) diff --git a/tasks/libs/ciproviders/github_api.py b/tasks/libs/ciproviders/github_api.py index 48bd741c85748..4021b5d7937e5 100644 --- a/tasks/libs/ciproviders/github_api.py +++ b/tasks/libs/ciproviders/github_api.py @@ -334,6 +334,9 @@ def latest_release(self) -> str: release = self._repository.get_latest_release() return release.title + def get_releases(self): + return self._repository.get_releases() + def latest_unreleased_release_branches(self): """ Get all the release branches that are newer than the latest release. diff --git a/tasks/libs/common/git.py b/tasks/libs/common/git.py index 6606a4ce522c2..44f5c5a684cfa 100644 --- a/tasks/libs/common/git.py +++ b/tasks/libs/common/git.py @@ -103,17 +103,17 @@ def get_current_branch(ctx) -> str: def is_agent6(ctx) -> bool: - return get_current_branch(ctx).startswith("6.") + return get_current_branch(ctx).startswith("6.53") -def get_default_branch(): +def get_default_branch(major: int | None = None): """Returns the default git branch given the current context (agent 6 / 7).""" # We create a context to avoid passing context in each function # This context is used to get the current branch so there is no side effect ctx = Context() - return '6.53.x' if is_agent6(ctx) else 'main' + return '6.53.x' if major is None and is_agent6(ctx) or major == 6 else 'main' def get_common_ancestor(ctx, branch, base=None) -> str: diff --git a/tasks/libs/releasing/json.py b/tasks/libs/releasing/json.py index 85270b23ce70e..91e68678a8b02 100644 --- a/tasks/libs/releasing/json.py +++ b/tasks/libs/releasing/json.py @@ -7,8 +7,7 @@ from invoke.exceptions import Exit from tasks.libs.common.constants import TAG_FOUND_TEMPLATE -from tasks.libs.common.git import get_default_branch -from tasks.libs.common.worktree import is_worktree +from tasks.libs.common.git import get_default_branch, is_agent6 from tasks.libs.releasing.documentation import _stringify_config, nightly_entry_for, release_entry_for from tasks.libs.releasing.version import ( VERSION_RE, @@ -337,7 +336,7 @@ def set_new_release_branch(branch): _save_release_json(rj) -def generate_repo_data(warning_mode, next_version, release_branch): +def generate_repo_data(ctx, warning_mode, next_version, release_branch): repos = ["integrations-core"] if warning_mode else ALL_REPOS previous_tags = find_previous_tags("release-a7", repos, RELEASE_JSON_FIELDS_TO_UPDATE) data = {} @@ -347,7 +346,7 @@ def generate_repo_data(warning_mode, next_version, release_branch): branch = ( next_version.branch() if repo == "integrations-core" - else (DEFAULT_BRANCHES_AGENT6 if is_worktree() else DEFAULT_BRANCHES).get(repo, get_default_branch()) + else (DEFAULT_BRANCHES_AGENT6 if is_agent6(ctx) else DEFAULT_BRANCHES).get(repo, get_default_branch()) ) data[repo] = { 'branch': branch, diff --git a/tasks/libs/releasing/notes.py b/tasks/libs/releasing/notes.py index d831f372b6197..33eb48a2facb9 100644 --- a/tasks/libs/releasing/notes.py +++ b/tasks/libs/releasing/notes.py @@ -2,7 +2,7 @@ from invoke import Failure -from tasks.libs.common.constants import GITHUB_REPO_NAME +from tasks.libs.common.constants import DEFAULT_INTEGRATIONS_CORE_BRANCH, GITHUB_REPO_NAME from tasks.libs.common.git import get_default_branch from tasks.libs.releasing.version import current_version @@ -10,6 +10,7 @@ def _add_prelude(ctx, version): res = ctx.run(f"reno new prelude-release-{version}") new_releasenote = res.stdout.split(' ')[-1].strip() # get the new releasenote file path + branch = DEFAULT_INTEGRATIONS_CORE_BRANCH with open(new_releasenote, "w") as f: f.write( @@ -17,7 +18,7 @@ def _add_prelude(ctx, version): | Release on: {date.today()} - - Please refer to the `{version} tag on integrations-core `_ for the list of changes on the Core Checks + - Please refer to the `{version} tag on integrations-core `_ for the list of changes on the Core Checks """ ) @@ -26,29 +27,25 @@ def _add_prelude(ctx, version): print(f"git commit -m \"Add prelude for {version} release\"") -def _add_dca_prelude(ctx, agent7_version, agent6_version=""): - """ - Release of the Cluster Agent should be pinned to a version of the Agent. - """ - res = ctx.run(f"reno --rel-notes-dir releasenotes-dca new prelude-release-{agent7_version}") - new_releasenote = res.stdout.split(' ')[-1].strip() # get the new releasenote file path +def _add_dca_prelude(ctx, version=None): + """Release of the Cluster Agent should be pinned to a version of the Agent.""" - if agent6_version != "": - agent6_version = ( - f"--{agent6_version.replace('.', '')}" # generate the right hyperlink to the agent's changelog. - ) + branch = get_default_branch() + + res = ctx.run(f"reno --rel-notes-dir releasenotes-dca new prelude-release-{version}") + new_releasenote = res.stdout.split(' ')[-1].strip() # get the new releasenote file path with open(new_releasenote, "w") as f: f.write( f"""prelude: | Released on: {date.today()} - Pinned to datadog-agent v{agent7_version}: `CHANGELOG `_.""" + Pinned to datadog-agent v{version}: `CHANGELOG `_.""" ) ctx.run(f"git add {new_releasenote}") print("\nIf not run as part of finish task, commit this with:") - print(f"git commit -m \"Add prelude for {agent7_version} release\"") + print(f"git commit -m \"Add prelude for {version} release\"") def update_changelog_generic(ctx, new_version, changelog_dir, changelog_file): diff --git a/tasks/libs/releasing/version.py b/tasks/libs/releasing/version.py index 8c781fb2e134f..23472d57c0cca 100644 --- a/tasks/libs/releasing/version.py +++ b/tasks/libs/releasing/version.py @@ -13,7 +13,7 @@ REPO_NAME, TAG_FOUND_TEMPLATE, ) -from tasks.libs.common.git import get_commit_sha, get_current_branch +from tasks.libs.common.git import get_commit_sha, get_current_branch, is_agent6 from tasks.libs.common.user_interactions import yes_no_question from tasks.libs.releasing.documentation import release_entry_for from tasks.libs.types.version import Version @@ -61,11 +61,13 @@ def _create_version_from_match(match): return version -def check_version(agent_version): +def check_version(ctx, agent_version): """Check Agent version to see if it is valid.""" - version_re = re.compile(r'7[.](\d+)[.](\d+)(-rc\.(\d+))?') + + major = '6' if is_agent6(ctx) else '7' + version_re = re.compile(rf'{major}[.](\d+)[.](\d+)(-rc\.(\d+))?') if not version_re.match(agent_version): - raise Exit(message="Version should be of the form 7.Y.Z or 7.Y.Z-rc.t") + raise Exit(message=f"Version should be of the form {major}.Y.Z or {major}.Y.Z-rc.t") def current_version(ctx, major_version) -> Version: @@ -115,10 +117,6 @@ def next_rc_version(ctx, major_version, patch_version=False) -> Version: return new_version -def parse_major_versions(major_versions): - return sorted(int(x) for x in major_versions.split(",")) - - ## ## Repository version fetch functions ## The following functions aim at returning the correct version to use for a given diff --git a/tasks/notes.py b/tasks/notes.py index 519a2893c3aeb..d58a36cf3ddf8 100644 --- a/tasks/notes.py +++ b/tasks/notes.py @@ -16,11 +16,11 @@ def add_prelude(ctx, version): @task -def add_dca_prelude(ctx, agent7_version, agent6_version=""): +def add_dca_prelude(ctx, version): """ Release of the Cluster Agent should be pinned to a version of the Agent. """ - _add_dca_prelude(ctx, agent7_version, agent6_version) + _add_dca_prelude(ctx, version) @task diff --git a/tasks/release.py b/tasks/release.py index cabf0568e9d20..999230044ea44 100644 --- a/tasks/release.py +++ b/tasks/release.py @@ -1,5 +1,9 @@ -""" -Release helper tasks +"""Release helper tasks + +Notes about Agent6: + Release tasks should be run from the main branch. + To make a task compatible with agent 6, it is possible to use agent_context such that + the task will be run in the agent6 branch. """ import json @@ -26,7 +30,6 @@ check_base_branch, check_clean_branch_state, clone, - get_current_branch, get_default_branch, get_last_commit, get_last_release_tag, @@ -35,6 +38,7 @@ ) from tasks.libs.common.gomodules import get_default_modules from tasks.libs.common.user_interactions import yes_no_question +from tasks.libs.common.worktree import agent_context from tasks.libs.pipeline.notifications import ( DEFAULT_JIRA_PROJECT, DEFAULT_SLACK_CHANNEL, @@ -50,7 +54,6 @@ from tasks.libs.releasing.json import ( DEFAULT_BRANCHES, DEFAULT_BRANCHES_AGENT6, - UNFREEZE_REPO_AGENT, UNFREEZE_REPOS, _get_release_json_value, _save_release_json, @@ -65,12 +68,11 @@ RC_VERSION_RE, VERSION_RE, _create_version_from_match, - check_version, current_version, next_final_version, next_rc_version, - parse_major_versions, ) +from tasks.libs.types.version import Version from tasks.pipeline import edit_schedule, run from tasks.release_metrics.metrics import get_prs_metrics, get_release_lead_time @@ -82,11 +84,66 @@ BACKPORT_LABEL_COLOR = "5319e7" +def deduce_and_ask_version(ctx, branch, as_str=True, trust=False) -> str | Version: + release_version = get_next_version_from_branch(ctx, branch, as_str=as_str) + + if trust: + return release_version + + if yes_no_question( + f'Version {release_version} deduced from branch {branch}. Is this the version you want to use?', + color="orange", + default=False, + ): + return release_version + + raise Exit(color_message("Aborting.", "red"), code=1) + + +def get_version_major(branch: str) -> int: + """Get the major version from a branch name.""" + + return 7 if branch == 'main' else int(branch.split('.')[0]) + + +def get_all_version_tags(ctx) -> list[str]: + """Returns the tags for all the versions of the Agent in git.""" + + cmd = "bash -c 'git tag | grep -E \"^[0-9]\\.[0-9]+\\.[0-9]+$\"'" + + return ctx.run(cmd, hide=True).stdout.strip().split('\n') + + +def get_next_version_from_branch(ctx, branch: str, as_str=True) -> str | Version: + """Returns the latest version + 1 belonging to a branch. + + Example: + get_latest_version_from_branch("7.55.x") -> Version(7, 55, 4) if there are 7.55.0, 7.55.1, 7.55.2, 7.55.3 tags. + get_latest_version_from_branch("6.99.x") -> Version(6, 99, 0) if there are no 6.99.* tags. + """ + + re_branch = re.compile(r"^([0-9]\.[0-9]+\.)x$") + + try: + matched = re_branch.match(branch).group(1) + except Exception as e: + raise Exit( + f'{color_message("Error:", "red")}: Branch {branch} is not a release branch (should be X.Y.x)', code=1 + ) from e + + tags = [tuple(map(int, tag.split('.'))) for tag in get_all_version_tags(ctx) if tag.startswith(matched)] + versions = sorted(Version(*tag) for tag in tags) + + minor, major = tuple(map(int, branch.split('.')[:2])) + + latest = versions[-1].next_version(bump_patch=True) if versions else Version(minor, major, 0) + + return str(latest) if as_str else latest + + @task def list_major_change(_, milestone): - """ - List all PR labeled "major_changed" for this release. - """ + """List all PR labeled "major_changed" for this release.""" gh = GithubAPI() pull_requests = gh.get_pulls(milestone=milestone, labels=['major_change']) @@ -101,25 +158,31 @@ def list_major_change(_, milestone): @task -def update_modules(ctx, agent_version, verify=True): - """ - Update internal dependencies between the different Agent modules. - * --verify checks for correctness on the Agent Version (on by default). +def update_modules(ctx, release_branch=None, version=None, trust=False): + """Update internal dependencies between the different Agent modules. + + Args: + verify: Checks for correctness on the Agent Version (on by default). Examples: - inv -e release.update-modules 7.27.0 + $ inv -e release.update-modules 7.27.x """ - if verify: - check_version(agent_version) - for module in get_default_modules().values(): - for dependency in module.dependencies: - dependency_mod = get_default_modules()[dependency] - ctx.run(f"go mod edit -require={dependency_mod.dependency_path(agent_version)} {module.go_mod_path()}") + assert release_branch or version + + agent_version = version or deduce_and_ask_version(ctx, release_branch, trust=trust) + + with agent_context(ctx, release_branch, skip_checkout=release_branch is None): + modules = get_default_modules() + for module in modules.values(): + for dependency in module.dependencies: + dependency_mod = modules[dependency] + ctx.run(f"go mod edit -require={dependency_mod.dependency_path(agent_version)} {module.go_mod_path()}") def __get_force_option(force: bool) -> str: """Get flag to pass to git tag depending on if we want forcing or not.""" + force_option = "" if force: print(color_message("--force option enabled. This will allow the task to overwrite existing tags.", "orange")) @@ -152,64 +215,72 @@ def __tag_single_module(ctx, module, agent_version, commit, force_option, devel) @task -def tag_modules(ctx, agent_version, commit="HEAD", verify=True, push=True, force=False, devel=False): - """ - Create tags for Go nested modules for a given Datadog Agent version. - The version should be given as an Agent 7 version. - - * --commit COMMIT will tag COMMIT with the tags (default HEAD) - * --verify checks for correctness on the Agent version (on by default). - * --push will push the tags to the origin remote (on by default). - * --force will allow the task to overwrite existing tags. Needed to move existing tags (off by default). - * --devel will create -devel tags (used after creation of the release branch) +def tag_modules( + ctx, release_branch=None, commit="HEAD", push=True, force=False, devel=False, version=None, trust=False +): + """Create tags for Go nested modules for a given Datadog Agent version. + + Args: + commit: Will tag `commit` with the tags (default HEAD). + verify: Checks for correctness on the Agent version (on by default). + push: Will push the tags to the origin remote (on by default). + force: Will allow the task to overwrite existing tags. Needed to move existing tags (off by default). + devel: Will create -devel tags (used after creation of the release branch). Examples: - inv -e release.tag-modules 7.27.0 # Create tags and push them to origin - inv -e release.tag-modules 7.27.0-rc.3 --no-push # Create tags locally; don't push them - inv -e release.tag-modules 7.29.0-rc.3 --force # Create tags (overwriting existing tags with the same name), force-push them to origin - + $ inv -e release.tag-modules 7.27.x # Create tags and push them to origin + $ inv -e release.tag-modules 7.27.x --no-push # Create tags locally; don't push them + $ inv -e release.tag-modules 7.29.x --force # Create tags (overwriting existing tags with the same name), force-push them to origin """ - if verify: - check_version(agent_version) - force_option = __get_force_option(force) + assert release_branch or version + + agent_version = version or deduce_and_ask_version(ctx, release_branch, trust=trust) + tags = [] - for module in get_default_modules().values(): - # Skip main module; this is tagged at tag_version via __tag_single_module. - if module.should_tag and module.path != ".": - new_tags = __tag_single_module(ctx, module, agent_version, commit, force_option, devel) - tags.extend(new_tags) + with agent_context(ctx, release_branch, skip_checkout=release_branch is None): + force_option = __get_force_option(force) + for module in get_default_modules().values(): + # Skip main module; this is tagged at tag_version via __tag_single_module. + if module.should_tag and module.path != ".": + new_tags = __tag_single_module(ctx, module, agent_version, commit, force_option, devel) + tags.extend(new_tags) - if push: - tags_list = ' '.join(tags) - ctx.run(f"git push origin {tags_list}{force_option}") - print(f"Pushed tag {tags_list}") - print(f"Created module tags for version {agent_version}") + if push: + tags_list = ' '.join(tags) + ctx.run(f"git push origin {tags_list}{force_option}") + print(f"Pushed tag {tags_list}") + print(f"Created module tags for version {agent_version}") @task -def tag_version(ctx, agent_version, commit="HEAD", verify=True, push=True, force=False, devel=False): - """ - Create tags for a given Datadog Agent version. - The version should be given as an Agent 7 version. - - * --commit COMMIT will tag COMMIT with the tags (default HEAD) - * --verify checks for correctness on the Agent version (on by default). - * --push will push the tags to the origin remote (on by default). - * --force will allow the task to overwrite existing tags. Needed to move existing tags (off by default). - * --devel will create -devel tags (used after creation of the release branch) +def tag_version( + ctx, release_branch=None, commit="HEAD", push=True, force=False, devel=False, version=None, trust=False +): + """Create tags for a given Datadog Agent version. + + Args: + commit: Will tag `commit` with the tags (default HEAD) + verify: Checks for correctness on the Agent version (on by default). + push: Will push the tags to the origin remote (on by default). + force: Will allow the task to overwrite existing tags. Needed to move existing tags (off by default). + devel: Will create -devel tags (used after creation of the release branch) Examples: - inv -e release.tag-version 7.27.0 # Create tags and push them to origin - inv -e release.tag-version 7.27.0-rc.3 --no-push # Create tags locally; don't push them - inv -e release.tag-version 7.29.0-rc.3 --force # Create tags (overwriting existing tags with the same name), force-push them to origin + $ inv -e release.tag-version 7.27.x # Create tags and push them to origin + $ inv -e release.tag-version 7.27.x --no-push # Create tags locally; don't push them + $ inv -e release.tag-version 7.29.x --force # Create tags (overwriting existing tags with the same name), force-push them to origin """ - if verify: - check_version(agent_version) + + assert release_branch or version + + agent_version = version or deduce_and_ask_version(ctx, release_branch, trust=trust) # Always tag the main module force_option = __get_force_option(force) - tags = __tag_single_module(ctx, get_default_modules()["."], agent_version, commit, force_option, devel) + with agent_context(ctx, release_branch, skip_checkout=release_branch is None): + tags = __tag_single_module(ctx, get_default_modules()["."], agent_version, commit, force_option, devel) + if push: tags_list = ' '.join(tags) ctx.run(f"git push origin {tags_list}{force_option}") @@ -218,25 +289,24 @@ def tag_version(ctx, agent_version, commit="HEAD", verify=True, push=True, force @task -def tag_devel(ctx, agent_version, commit="HEAD", verify=True, push=True, force=False): - tag_version(ctx, agent_version, commit, verify, push, force, devel=True) - tag_modules(ctx, agent_version, commit, verify, push, force, devel=True) +def tag_devel(ctx, release_branch, commit="HEAD", push=True, force=False): + tag_version(ctx, release_branch, commit, push, force, devel=True) + tag_modules(ctx, release_branch, commit, push, force, devel=True, trust=True) @task -def finish(ctx, major_versions="6,7", upstream="origin"): - """ - Updates the release entry in the release.json file for the new version. +def finish(ctx, release_branch, upstream="origin"): + """Updates the release entry in the release.json file for the new version. Updates internal module dependencies with the new version. """ # Step 1: Preparation - list_major_versions = parse_major_versions(major_versions) - print(f"Finishing release for major version(s) {list_major_versions}") + major_version = get_version_major(release_branch) + print(f"Finishing release for major version {major_version}") - for major_version in list_major_versions: + with agent_context(ctx, release_branch): # NOTE: the release process assumes that at least one RC # was built before release.finish is used. It doesn't support # doing final version -> final version updates (eg. 7.32.0 -> 7.32.1 @@ -245,84 +315,85 @@ def finish(ctx, major_versions="6,7", upstream="origin"): # To support this, we'd have to support a --patch-version param in # release.finish new_version = next_final_version(ctx, major_version, False) + if not yes_no_question( + f'Do you want to finish the release with version {new_version}?', color="bold", default=False + ): + raise Exit(color_message("Aborting.", "red"), code=1) update_release_json(new_version, new_version) - current_branch = get_current_branch(ctx) + # Step 2: Update internal module dependencies - # Step 2: Update internal module dependencies + update_modules(ctx, version=str(new_version)) - update_modules(ctx, str(new_version)) + # Step 3: Branch out, commit change, push branch - # Step 3: Branch out, commit change, push branch + final_branch = f"{new_version}-final" - final_branch = f"{new_version}-final" + print(color_message(f"Branching out to {final_branch}", "bold")) + ctx.run(f"git checkout -b {final_branch}") - print(color_message(f"Branching out to {final_branch}", "bold")) - ctx.run(f"git checkout -b {final_branch}") - - print(color_message("Committing release.json and Go modules updates", "bold")) - print( - color_message( - "If commit signing is enabled, you will have to make sure the commit gets properly signed.", "bold" + print(color_message("Committing release.json and Go modules updates", "bold")) + print( + color_message( + "If commit signing is enabled, you will have to make sure the commit gets properly signed.", "bold" + ) ) - ) - ctx.run("git add release.json") - ctx.run("git ls-files . | grep 'go.mod$' | xargs git add") + ctx.run("git add release.json") + ctx.run("git ls-files . | grep 'go.mod$' | xargs git add") - commit_message = f"'Final updates for release.json and Go modules for {new_version} release'" + commit_message = f"'Final updates for release.json and Go modules for {new_version} release'" - ok = try_git_command(ctx, f"git commit -m {commit_message}") - if not ok: - raise Exit( - color_message( - f"Could not create commit. Please commit manually with:\ngit commit -m {commit_message}\n, push the {final_branch} branch and then open a PR against {final_branch}.", - "red", - ), - code=1, - ) + ok = try_git_command(ctx, f"git commit -m {commit_message}") + if not ok: + raise Exit( + color_message( + f"Could not create commit. Please commit manually with:\ngit commit -m {commit_message}\n, push the {final_branch} branch and then open a PR against {final_branch}.", + "red", + ), + code=1, + ) - # Step 4: Add release changelog preludes - print(color_message("Adding Agent release changelog prelude", "bold")) - _add_prelude(ctx, str(new_version)) + # Step 4: Add release changelog preludes + print(color_message("Adding Agent release changelog prelude", "bold")) + _add_prelude(ctx, str(new_version)) - print(color_message("Adding DCA release changelog prelude", "bold")) - _add_dca_prelude(ctx, str(new_version)) + print(color_message("Adding DCA release changelog prelude", "bold")) + _add_dca_prelude(ctx, str(new_version)) - ok = try_git_command(ctx, f"git commit -m 'Add preludes for {new_version} release'") - if not ok: - raise Exit( - color_message( - f"Could not create commit. Please commit manually, push the {final_branch} branch and then open a PR against {final_branch}.", - "red", - ), - code=1, - ) + ok = try_git_command(ctx, f"git commit -m 'Add preludes for {new_version} release'") + if not ok: + raise Exit( + color_message( + f"Could not create commit. Please commit manually, push the {final_branch} branch and then open a PR against {final_branch}.", + "red", + ), + code=1, + ) - # Step 5: Push branch and create PR + # Step 5: Push branch and create PR + print(color_message("Pushing new branch to the upstream repository", "bold")) + res = ctx.run(f"git push --set-upstream {upstream} {final_branch}", warn=True) + if res.exited is None or res.exited > 0: + raise Exit( + color_message( + f"Could not push branch {final_branch} to the upstream '{upstream}'. Please push it manually and then open a PR against {final_branch}.", + "red", + ), + code=1, + ) - print(color_message("Pushing new branch to the upstream repository", "bold")) - res = ctx.run(f"git push --set-upstream {upstream} {final_branch}", warn=True) - if res.exited is None or res.exited > 0: - raise Exit( - color_message( - f"Could not push branch {final_branch} to the upstream '{upstream}'. Please push it manually and then open a PR against {final_branch}.", - "red", - ), - code=1, + create_release_pr( + f"Final updates for release.json and Go modules for {new_version} release + preludes", + release_branch, + final_branch, + new_version, ) - create_release_pr( - f"Final updates for release.json and Go modules for {new_version} release + preludes", - current_branch, - final_branch, - new_version, - ) - @task(help={'upstream': "Remote repository name (default 'origin')"}) -def create_rc(ctx, major_versions="6,7", patch_version=False, upstream="origin", slack_webhook=None): - """ - Updates the release entries in release.json to prepare the next RC build. +def create_rc(ctx, release_branch, patch_version=False, upstream="origin", slack_webhook=None): + """Updates the release entries in release.json to prepare the next RC build. + If the previous version of the Agent (determined as the latest tag on the current branch) is not an RC: - by default, updates the release entries for the next minor version of @@ -336,242 +407,265 @@ def create_rc(ctx, major_versions="6,7", patch_version=False, upstream="origin", If the previous version of the Agent was an RC, updates the release entries for RC + 1. Examples: - If the latest tag on the branch is 7.31.0, and invoke release.create-rc --patch-version - is run, then the task will prepare the release entries for 7.31.1-rc.1, and therefore - will only use 7.31.X tags on the dependency repositories that follow the Agent version scheme. + If the latest tag on the branch is 7.31.0, and invoke release.create-rc --patch-version + is run, then the task will prepare the release entries for 7.31.1-rc.1, and therefore + will only use 7.31.X tags on the dependency repositories that follow the Agent version scheme. - If the latest tag on the branch is 7.32.0-devel or 7.31.0, and invoke release.create-rc - is run, then the task will prepare the release entries for 7.32.0-rc.1, and therefore - will only use 7.32.X tags on the dependency repositories that follow the Agent version scheme. + If the latest tag on the branch is 7.32.0-devel or 7.31.0, and invoke release.create-rc + is run, then the task will prepare the release entries for 7.32.0-rc.1, and therefore + will only use 7.32.X tags on the dependency repositories that follow the Agent version scheme. - Updates internal module dependencies with the new RC. + Updates internal module dependencies with the new RC. - Commits the above changes, and then creates a PR on the upstream repository with the change. + Commits the above changes, and then creates a PR on the upstream repository with the change. - If slack_webhook is provided, it tries to send the PR URL to the provided webhook. This is meant to be used mainly in automation. + If slack_webhook is provided, it tries to send the PR URL to the provided webhook. This is meant to be used mainly in automation. Notes: - This requires a Github token (either in the GITHUB_TOKEN environment variable, or in the MacOS keychain), - with 'repo' permissions. - This also requires that there are no local uncommitted changes, that the current branch is 'main' or the - release branch, and that no branch named 'release/' already exists locally or upstream. + This requires a Github token (either in the GITHUB_TOKEN environment variable, or in the MacOS keychain), + with 'repo' permissions. + This also requires that there are no local uncommitted changes, that the current branch is 'main' or the + release branch, and that no branch named 'release/' already exists locally or upstream. """ - github = GithubAPI(repository=GITHUB_REPO_NAME) - - list_major_versions = parse_major_versions(major_versions) + major_version = get_version_major(release_branch) - # Get the version of the highest major: useful for some logging & to get - # the version to use for Go submodules updates - new_highest_version = next_rc_version(ctx, max(list_major_versions), patch_version) - # Get the next final version of the highest major: useful to know which - # milestone to target, as well as decide which tags from dependency repositories - # can be used. - new_final_version = next_final_version(ctx, max(list_major_versions), patch_version) + with agent_context(ctx, release_branch): + github = GithubAPI(repository=GITHUB_REPO_NAME) - print(color_message(f"Preparing RC for agent version(s) {list_major_versions}", "bold")) + # Get the version of the highest major: useful for some logging & to get + # the version to use for Go submodules updates + new_highest_version = next_rc_version(ctx, major_version, patch_version) + # Get the next final version of the highest major: useful to know which + # milestone to target, as well as decide which tags from dependency repositories + # can be used. + new_final_version = next_final_version(ctx, major_version, patch_version) + print(color_message(f"Preparing RC for agent version {major_version}", "bold")) - # Step 0: checks + # Step 0: checks - print(color_message("Checking repository state", "bold")) - ctx.run("git fetch") + print(color_message("Checking repository state", "bold")) + ctx.run("git fetch") - # Check that the current and update branches are valid - current_branch = get_current_branch(ctx) - update_branch = f"release/{new_highest_version}-{int(time.time())}" + # Check that the current and update branches are valid + update_branch = f"release/{new_highest_version}-{int(time.time())}" - check_clean_branch_state(ctx, github, update_branch) - if not check_base_branch(current_branch, new_highest_version): - raise Exit( - color_message( - f"The branch you are on is neither {get_default_branch()} or the correct release branch ({new_highest_version.branch()}). Aborting.", - "red", - ), - code=1, - ) - - # Step 1: Update release entries + check_clean_branch_state(ctx, github, update_branch) + if not check_base_branch(release_branch, new_highest_version): + raise Exit( + color_message( + f"The branch you are on is neither {get_default_branch()} or the correct release branch ({new_highest_version.branch()}). Aborting.", + "red", + ), + code=1, + ) - print(color_message("Updating release entries", "bold")) - for major_version in list_major_versions: + # Step 1: Update release entries + print(color_message("Updating release entries", "bold")) new_version = next_rc_version(ctx, major_version, patch_version) - update_release_json(new_version, new_final_version) + if not yes_no_question( + f'Do you want to create release candidate with:\n- new version: {new_version}\n- new highest version: {new_highest_version}\n- new final version: {new_final_version}?', + color="bold", + default=False, + ): + raise Exit(color_message("Aborting.", "red"), code=1) - # Step 2: Update internal module dependencies + update_release_json(new_version, new_final_version) - print(color_message("Updating Go modules", "bold")) - update_modules(ctx, str(new_highest_version)) + # Step 2: Update internal module dependencies - # Step 3: branch out, commit change, push branch + print(color_message("Updating Go modules", "bold")) + update_modules(ctx, version=str(new_highest_version)) - print(color_message(f"Branching out to {update_branch}", "bold")) - ctx.run(f"git checkout -b {update_branch}") + # Step 3: branch out, commit change, push branch - print(color_message("Committing release.json and Go modules updates", "bold")) - print( - color_message( - "If commit signing is enabled, you will have to make sure the commit gets properly signed.", "bold" - ) - ) - ctx.run("git add release.json") - ctx.run("git ls-files . | grep 'go.mod$' | xargs git add") + print(color_message(f"Branching out to {update_branch}", "bold")) + ctx.run(f"git checkout -b {update_branch}") - ok = try_git_command( - ctx, f"git commit --no-verify -m 'Update release.json and Go modules for {new_highest_version}'" - ) - if not ok: - raise Exit( + print(color_message("Committing release.json and Go modules updates", "bold")) + print( color_message( - f"Could not create commit. Please commit manually, push the {update_branch} branch and then open a PR against {current_branch}.", - "red", - ), - code=1, + "If commit signing is enabled, you will have to make sure the commit gets properly signed.", "bold" + ) ) + ctx.run("git add release.json") + ctx.run("git ls-files . | grep 'go.mod$' | xargs git add") - print(color_message("Pushing new branch to the upstream repository", "bold")) - res = ctx.run(f"git push --no-verify --set-upstream {upstream} {update_branch}", warn=True) - if res.exited is None or res.exited > 0: - raise Exit( - color_message( - f"Could not push branch {update_branch} to the upstream '{upstream}'. Please push it manually and then open a PR against {current_branch}.", - "red", - ), - code=1, + ok = try_git_command( + ctx, f"git commit --no-verify -m 'Update release.json and Go modules for {new_highest_version}'" ) + if not ok: + raise Exit( + color_message( + f"Could not create commit. Please commit manually, push the {update_branch} branch and then open a PR against {release_branch}.", + "red", + ), + code=1, + ) - pr_url = create_release_pr( - f"[release] Update release.json and Go modules for {new_highest_version}", - current_branch, - update_branch, - new_final_version, - ) + print(color_message("Pushing new branch to the upstream repository", "bold")) + res = ctx.run(f"git push --no-verify --set-upstream {upstream} {update_branch}", warn=True) + if res.exited is None or res.exited > 0: + raise Exit( + color_message( + f"Could not push branch {update_branch} to the upstream '{upstream}'. Please push it manually and then open a PR against {release_branch}.", + "red", + ), + code=1, + ) + + pr_url = create_release_pr( + f"[release] Update release.json and Go modules for {new_highest_version}", + release_branch, + update_branch, + new_final_version, + ) - # Step 4 - If slack workflow webhook is provided, send a slack message - if slack_webhook: - print(color_message("Sending slack notification", "bold")) - payload = { - "pr_url": pr_url, - "version": str(new_highest_version), - } + # Step 4 - If slack workflow webhook is provided, send a slack message + if slack_webhook: + print(color_message("Sending slack notification", "bold")) + payload = { + "pr_url": pr_url, + "version": str(new_highest_version), + } - ctx.run(f"curl -X POST -H 'Content-Type: application/json' --data '{json.dumps(payload)}' {slack_webhook}") + ctx.run(f"curl -X POST -H 'Content-Type: application/json' --data '{json.dumps(payload)}' {slack_webhook}") @task -def build_rc(ctx, major_versions="6,7", patch_version=False, k8s_deployments=False): - """ - To be done after the PR created by release.create-rc is merged, with the same options +def build_rc(ctx, release_branch, patch_version=False, k8s_deployments=False): + """To be done after the PR created by release.create-rc is merged, with the same options as release.create-rc. - k8s_deployments - when set to True the child pipeline deploying to subset of k8s staging clusters will be triggered. - Tags the new RC versions on the current commit, and creates the build pipeline for these new tags. + + Args: + k8s_deployments: When set to True the child pipeline deploying to subset of k8s staging clusters will be triggered. """ - datadog_agent = get_gitlab_repo() - list_major_versions = parse_major_versions(major_versions) + major_version = get_version_major(release_branch) - # Get the version of the highest major: needed for tag_version and to know - # which tag to target when creating the pipeline. - new_version = next_rc_version(ctx, max(list_major_versions), patch_version) + with agent_context(ctx, release_branch): + datadog_agent = get_gitlab_repo() - # Get a string representation of the RC, eg. "6/7.32.0-rc.1" - versions_string = f"{'/'.join([str(n) for n in list_major_versions[:-1]] + [str(new_version)])}" + # Get the version of the highest major: needed for tag_version and to know + # which tag to target when creating the pipeline. + new_version = next_rc_version(ctx, major_version, patch_version) - # Step 0: checks + # Get a string representation of the RC, eg. "6/7.32.0-rc.1" + versions_string = str(new_version) - print(color_message("Checking repository state", "bold")) - # Check that the base branch is valid - current_branch = get_current_branch(ctx) + # Step 0: checks - if not check_base_branch(current_branch, new_version): - raise Exit( + print(color_message("Checking repository state", "bold")) + + # Check that the base branch is valid + if not check_base_branch(release_branch, new_version): + raise Exit( + color_message( + f"The branch you are on is neither {get_default_branch()} or the correct release branch ({new_version.branch()}). Aborting.", + "red", + ), + code=1, + ) + + latest_commit = ctx.run("git --no-pager log --no-color -1 --oneline").stdout.strip() + + if not yes_no_question( + f"This task will create tags for {versions_string} on the current commit: {latest_commit}. Is this OK?", + color="orange", + default=False, + ): + raise Exit(color_message("Aborting.", "red"), code=1) + + # Step 1: Tag versions + + print(color_message(f"Tagging RC for agent version {versions_string}", "bold")) + print( color_message( - f"The branch you are on is neither {get_default_branch()} or the correct release branch ({new_version.branch()}). Aborting.", - "red", - ), - code=1, + "If commit signing is enabled, you will have to make sure each tag gets properly signed.", "bold" + ) ) - latest_commit = ctx.run("git --no-pager log --no-color -1 --oneline").stdout.strip() + # tag_version only takes the highest version (Agent 7 currently), and creates + # the tags for all supported versions + # TODO: make it possible to do Agent 6-only or Agent 7-only tags? + tag_version(ctx, version=str(new_version), force=False) + tag_modules(ctx, version=str(new_version), force=False) + + print(color_message(f"Waiting until the {new_version} tag appears in Gitlab", "bold")) + gitlab_tag = None + while not gitlab_tag: + try: + gitlab_tag = datadog_agent.tags.get(str(new_version)) + except GitlabError: + continue - if not yes_no_question( - f"This task will create tags for {versions_string} on the current commit: {latest_commit}. Is this OK?", - color="orange", - default=False, - ): - raise Exit(color_message("Aborting.", "red"), code=1) + sleep(5) - # Step 1: Tag versions + print(color_message("Creating RC pipeline", "bold")) - print(color_message(f"Tagging RC for agent version(s) {list_major_versions}", "bold")) - print( - color_message("If commit signing is enabled, you will have to make sure each tag gets properly signed.", "bold") - ) - # tag_version only takes the highest version (Agent 7 currently), and creates - # the tags for all supported versions - # TODO: make it possible to do Agent 6-only or Agent 7-only tags? - tag_version(ctx, str(new_version), force=False) - tag_modules(ctx, str(new_version), force=False) - - print(color_message(f"Waiting until the {new_version} tag appears in Gitlab", "bold")) - gitlab_tag = None - while not gitlab_tag: - try: - gitlab_tag = datadog_agent.tags.get(str(new_version)) - except GitlabError: - continue - - sleep(5) - - print(color_message("Creating RC pipeline", "bold")) - - # Step 2: Run the RC pipeline - - run( - ctx, - git_ref=gitlab_tag.name, - use_release_entries=True, - major_versions=major_versions, - repo_branch="beta", - deploy=True, - rc_build=True, - rc_k8s_deployments=k8s_deployments, - ) + # Step 2: Run the RC pipeline + + run( + ctx, + git_ref=gitlab_tag.name, + use_release_entries=True, + repo_branch="beta", + deploy=True, + rc_build=True, + rc_k8s_deployments=k8s_deployments, + ) @task(help={'key': "Path to an existing release.json key, separated with double colons, eg. 'last_stable::6'"}) -def set_release_json(_, key, value): - release_json = load_release_json() - path = key.split('::') - current_node = release_json - for key_idx in range(len(path)): - key = path[key_idx] - if key not in current_node: - raise Exit(code=1, message=f"Couldn't find '{key}' in release.json") - if key_idx == len(path) - 1: - current_node[key] = value - break - else: - current_node = current_node[key] - _save_release_json(release_json) +def set_release_json(ctx, key, value, release_branch=None, skip_checkout=False, worktree=True): + def _main(): + nonlocal key + + release_json = load_release_json() + path = key.split('::') + current_node = release_json + for key_idx in range(len(path)): + key = path[key_idx] + if key not in current_node: + raise Exit(code=1, message=f"Couldn't find '{key}' in release.json") + if key_idx == len(path) - 1: + current_node[key] = value + break + else: + current_node = current_node[key] + _save_release_json(release_json) + + if worktree: + with agent_context(ctx, release_branch, skip_checkout=skip_checkout): + _main() + else: + _main() @task(help={'key': "Path to the release.json key, separated with double colons, eg. 'last_stable::6'"}) -def get_release_json_value(_, key): - release_json = _get_release_json_value(key) +def get_release_json_value(ctx, key, release_branch=None, skip_checkout=False, worktree=True): + if worktree: + with agent_context(ctx, release_branch, skip_checkout=skip_checkout): + release_json = _get_release_json_value(key) + else: + release_json = _get_release_json_value(key) + print(release_json) -def create_and_update_release_branch(ctx, repo, release_branch, base_directory="~/dd", upstream="origin"): - # Perform branch out in all required repositories - with ctx.cd(f"{base_directory}/{repo}"): - # Step 1 - Create a local branch out from the default branch +def create_and_update_release_branch( + ctx, repo, release_branch, base_branch: str | None = None, base_directory="~/dd", upstream="origin" +): + """Create and push a release branch to `repo`. - print(color_message(f"Working repository: {repo}", "bold")) - main_branch = ctx.run(f"git remote show {upstream} | grep \"HEAD branch\" | sed 's/.*: //'").stdout.strip() - ctx.run(f"git checkout {main_branch}") + Args: + base_branch: Branch from which we create the release branch. Default branch if `None`. + """ + + def _main(): ctx.run("git pull") print(color_message(f"Branching out to {release_branch}", "bold")) ctx.run(f"git checkout -b {release_branch}") @@ -589,29 +683,47 @@ def create_and_update_release_branch(ctx, repo, release_branch, base_directory=" code=1, ) + # Perform branch out in all required repositories + print(color_message(f"Working repository: {repo}", "bold")) + if repo == 'datadog-agent': + with agent_context(ctx, base_branch or get_default_branch(major=get_version_major(release_branch))): + _main() + else: + with ctx.cd(f"{base_directory}/{repo}"): + # Step 1 - Create a local branch out from the default branch + main_branch = ( + base_branch + or ctx.run(f"git remote show {upstream} | grep \"HEAD branch\" | sed 's/.*: //'").stdout.strip() + ) + ctx.run(f"git checkout {main_branch}") + + _main() + # TODO: unfreeze is the former name of this task, kept for backward compatibility. Remove in a few weeks. @task(help={'upstream': "Remote repository name (default 'origin')"}, aliases=["unfreeze"]) -def create_release_branches(ctx, base_directory="~/dd", major_versions="6,7", upstream="origin", check_state=True): - """ - Create and push release branches in Agent repositories and update them. +def create_release_branches(ctx, base_directory="~/dd", major_version: int = 7, upstream="origin", check_state=True): + """Create and push release branches in Agent repositories and update them. + That includes: - - creates a release branch in datadog-agent, datadog-agent-macos, omnibus-ruby and omnibus-software repositories, - - updates release.json on new datadog-agent branch to point to newly created release branches in nightly section - - updates entries in .gitlab-ci.yml and .gitlab/notify/notify.yml which depend on local branch name + - creates a release branch in datadog-agent, datadog-agent-macos, omnibus-ruby and omnibus-software repositories, + - updates release.json on new datadog-agent branch to point to newly created release branches in nightly section + - updates entries in .gitlab-ci.yml and .gitlab/notify/notify.yml which depend on local branch name + + Args: + base_directory: Path to the directory where dd repos are cloned, defaults to ~/dd, but can be overwritten. + use_worktree: If True, will go to datadog-agent-worktree instead of datadog-agent. Notes: - base_directory - path to the directory where dd repos are cloned, defaults to ~/dd, but can be overwritten. - This requires a Github token (either in the GITHUB_TOKEN environment variable, or in the MacOS keychain), - with 'repo' permissions. - This also requires that there are no local uncommitted changes, that the current branch is 'main' or the - release branch, and that no branch named 'release/' already exists locally or upstream. + This requires a Github token (either in the GITHUB_TOKEN environment variable, or in the MacOS keychain), + with 'repo' permissions. + This also requires that there are no local uncommitted changes, that the current branch is 'main' or the + release branch, and that no branch named 'release/' already exists locally or upstream. """ - github = GithubAPI(repository=GITHUB_REPO_NAME) - list_major_versions = parse_major_versions(major_versions) + github = GithubAPI(repository=GITHUB_REPO_NAME) - current = current_version(ctx, max(list_major_versions)) + current = current_version(ctx, major_version) next = current.next_version(bump_minor=True) current.rc = False current.devel = False @@ -620,34 +732,39 @@ def create_release_branches(ctx, base_directory="~/dd", major_versions="6,7", up # Strings with proper branch/tag names release_branch = current.branch() - # Step 0: checks - ctx.run("git fetch") + with agent_context(ctx, get_default_branch(major=major_version)): + # Step 0: checks + ctx.run("git fetch") - if check_state: - print(color_message("Checking repository state", "bold")) - check_clean_branch_state(ctx, github, release_branch) + if check_state: + print(color_message("Checking repository state", "bold")) + check_clean_branch_state(ctx, github, release_branch) - if not yes_no_question( - f"This task will create new branches with the name '{release_branch}' in repositories: {', '.join(UNFREEZE_REPOS)}. Is this OK?", - color="orange", - default=False, - ): - raise Exit(color_message("Aborting.", "red"), code=1) + if not yes_no_question( + f"This task will create new branches with the name '{release_branch}' in repositories: {', '.join(UNFREEZE_REPOS)}. Is this OK?", + color="orange", + default=False, + ): + raise Exit(color_message("Aborting.", "red"), code=1) - # Step 1 - Create release branches in all required repositories + # Step 1 - Create release branches in all required repositories - for repo in UNFREEZE_REPOS: - create_and_update_release_branch(ctx, repo, release_branch, base_directory=base_directory, upstream=upstream) + base_branch = get_default_branch() if major_version == 6 else None - # create the backport label in the Agent repo - print(color_message("Creating backport label in the Agent repository", Color.BOLD)) - github.create_label( - f'backport/{release_branch}', BACKPORT_LABEL_COLOR, f'Automatically create a backport PR to {release_branch}' - ) + for repo in UNFREEZE_REPOS: + create_and_update_release_branch( + ctx, repo, release_branch, base_branch=base_branch, base_directory=base_directory, upstream=upstream + ) - # Step 2 - Create PRs with new settings in datadog-agent repository + # create the backport label in the Agent repo + print(color_message("Creating backport label in the Agent repository", Color.BOLD)) + github.create_label( + f'backport/{release_branch}', + BACKPORT_LABEL_COLOR, + f'Automatically create a backport PR to {release_branch}', + ) - with ctx.cd(f"{base_directory}/{UNFREEZE_REPO_AGENT}"): + # Step 2 - Create PRs with new settings in datadog-agent repository # Step 2.0 - Create milestone update milestone_branch = f"release_milestone-{int(time.time())}" ctx.run(f"git switch -c {milestone_branch}") @@ -738,114 +855,135 @@ def create_release_branches(ctx, base_directory="~/dd", major_versions="6,7", up ) -def _update_last_stable(_, version, major_versions="7"): +def _update_last_stable(_, version, major_version: int = 7): """ Updates the last_release field(s) of release.json and returns the current milestone """ release_json = load_release_json() - list_major_versions = parse_major_versions(major_versions) # If the release isn't a RC, update the last stable release field - for major in list_major_versions: - version.major = major - release_json['last_stable'][str(major)] = str(version) + version.major = major_version + release_json['last_stable'][str(major_version)] = str(version) _save_release_json(release_json) return release_json["current_milestone"] +def _get_agent6_latest_release(gh): + return max((r for r in gh.get_releases() if r.title.startswith('6.53')), key=lambda r: r.created_at).title + + @task -def cleanup(ctx): - """ - Perform the post release cleanup steps +def cleanup(ctx, release_branch): + """Perform the post release cleanup steps + Currently this: - Updates the scheduled nightly pipeline to target the new stable branch - Updates the release.json last_stable fields """ - gh = GithubAPI() - latest_release = gh.latest_release() - match = VERSION_RE.search(latest_release) - if not match: - raise Exit(f'Unexpected version fetched from github {latest_release}', code=1) - version = _create_version_from_match(match) - current_milestone = _update_last_stable(ctx, version) - - # create pull request to update last stable version - main_branch = get_default_branch() - cleanup_branch = f"release/{version}-cleanup" - ctx.run(f"git checkout -b {cleanup_branch}") - ctx.run("git add release.json") - - commit_message = f"Update last_stable to {version}" - ok = try_git_command(ctx, f"git commit -m '{commit_message}'") - if not ok: - raise Exit( - color_message( - f"Could not create commit. Please commit manually with:\ngit commit -m {commit_message}\n, push the {cleanup_branch} branch and then open a PR against {main_branch}.", - "red", - ), - code=1, - ) - if not ctx.run(f"git push --set-upstream origin {cleanup_branch}", warn=True): - raise Exit( - color_message( - f"Could not push branch {cleanup_branch} to the upstream 'origin'. Please push it manually and then open a PR against {main_branch}.", - "red", - ), - code=1, - ) + with agent_context(ctx, release_branch): + gh = GithubAPI() + major_version = get_version_major(release_branch) + if major_version == 6: + latest_release = _get_agent6_latest_release(gh) + else: + latest_release = gh.latest_release() + match = VERSION_RE.search(latest_release) + if not match: + raise Exit(f'Unexpected version fetched from github {latest_release}', code=1) + + version = _create_version_from_match(match) + current_milestone = _update_last_stable(ctx, version, major_version=major_version) + + # create pull request to update last stable version + main_branch = get_default_branch() + cleanup_branch = f"release/{version}-cleanup" + ctx.run(f"git checkout -b {cleanup_branch}") + ctx.run("git add release.json") - create_release_pr(commit_message, main_branch, cleanup_branch, version, milestone=current_milestone) + commit_message = f"Update last_stable to {version}" + ok = try_git_command(ctx, f"git commit -m '{commit_message}'") + if not ok: + raise Exit( + color_message( + f"Could not create commit. Please commit manually with:\ngit commit -m {commit_message}\n, push the {cleanup_branch} branch and then open a PR against {main_branch}.", + "red", + ), + code=1, + ) - edit_schedule(ctx, 2555, ref=version.branch()) + if not ctx.run(f"git push --set-upstream origin {cleanup_branch}", warn=True): + raise Exit( + color_message( + f"Could not push branch {cleanup_branch} to the upstream 'origin'. Please push it manually and then open a PR against {main_branch}.", + "red", + ), + code=1, + ) + + create_release_pr(commit_message, main_branch, cleanup_branch, version, milestone=current_milestone) + + if major_version != 6: + edit_schedule(ctx, 2555, ref=version.branch()) @task -def check_omnibus_branches(ctx): - base_branch = _get_release_json_value('base_branch') - if base_branch == get_default_branch(): - default_branches = DEFAULT_BRANCHES_AGENT6 if is_agent6(ctx) else DEFAULT_BRANCHES - omnibus_ruby_branch = default_branches['omnibus-ruby'] - omnibus_software_branch = default_branches['omnibus-software'] - else: - omnibus_ruby_branch = base_branch - omnibus_software_branch = base_branch - - def _check_commit_in_repo(repo_name, branch, release_json_field): - with tempfile.TemporaryDirectory() as tmpdir: - ctx.run( - f'git clone --depth=50 https://github.com/DataDog/{repo_name} --branch {branch} {tmpdir}/{repo_name}', - hide='stdout', - ) - for version in ['nightly', 'nightly-a7']: - commit = _get_release_json_value(f'{version}::{release_json_field}') - if ctx.run(f'git -C {tmpdir}/{repo_name} branch --contains {commit}', warn=True, hide=True).exited != 0: - raise Exit( - code=1, - message=f'{repo_name} commit ({commit}) is not in the expected branch ({branch}). The PR is not mergeable', - ) - else: - print(f'[{version}] Commit {commit} was found in {repo_name} branch {branch}') +def check_omnibus_branches(ctx, release_branch=None, worktree=True): + def _main(): + base_branch = _get_release_json_value('base_branch') + if base_branch == get_default_branch(): + default_branches = DEFAULT_BRANCHES_AGENT6 if is_agent6(ctx) else DEFAULT_BRANCHES + omnibus_ruby_branch = default_branches['omnibus-ruby'] + omnibus_software_branch = default_branches['omnibus-software'] + else: + omnibus_ruby_branch = base_branch + omnibus_software_branch = base_branch + + def _check_commit_in_repo(repo_name, branch, release_json_field): + with tempfile.TemporaryDirectory() as tmpdir: + ctx.run( + f'git clone --depth=50 https://github.com/DataDog/{repo_name} --branch {branch} {tmpdir}/{repo_name}', + hide='stdout', + ) + for version in ['nightly', 'nightly-a7']: + commit = _get_release_json_value(f'{version}::{release_json_field}') + if ( + ctx.run(f'git -C {tmpdir}/{repo_name} branch --contains {commit}', warn=True, hide=True).exited + != 0 + ): + raise Exit( + code=1, + message=f'{repo_name} commit ({commit}) is not in the expected branch ({branch}). The PR is not mergeable', + ) + else: + print(f'[{version}] Commit {commit} was found in {repo_name} branch {branch}') - _check_commit_in_repo('omnibus-ruby', omnibus_ruby_branch, 'OMNIBUS_RUBY_VERSION') - _check_commit_in_repo('omnibus-software', omnibus_software_branch, 'OMNIBUS_SOFTWARE_VERSION') + _check_commit_in_repo('omnibus-ruby', omnibus_ruby_branch, 'OMNIBUS_RUBY_VERSION') + _check_commit_in_repo('omnibus-software', omnibus_software_branch, 'OMNIBUS_SOFTWARE_VERSION') - return True + return True + + if worktree: + with agent_context(ctx, release_branch): + return _main() + else: + return _main() @task def update_build_links(_, new_version, patch_version=False): - """ - Updates Agent release candidates build links on https://datadoghq.atlassian.net/wiki/spaces/agent/pages/2889876360/Build+links + """Updates Agent release candidates build links on https://datadoghq.atlassian.net/wiki/spaces/agent/pages/2889876360/Build+links - new_version - should be given as an Agent 7 RC version, ie. '7.50.0-rc.1' format. Does not support patch version unless patch_version is set to True. - patch_version - if set to True, then task can be used for patch releases (3 digits), ie. '7.50.1-rc.1' format. Otherwise patch release number will be considered as invalid. + Args: + new_version: Should be given as an Agent 7 RC version, ie. '7.50.0-rc.1' format. Does not support patch version unless patch_version is set to True. + patch_version: If set to True, then task can be used for patch releases (3 digits), ie. '7.50.1-rc.1' format. Otherwise patch release number will be considered as invalid. Notes: - Attlasian credentials are required to be available as ATLASSIAN_USERNAME and ATLASSIAN_PASSWORD as environment variables. - ATLASSIAN_USERNAME is typically an email address. - ATLASSIAN_PASSWORD is a token. See: https://id.atlassian.com/manage-profile/security/api-tokens + Attlasian credentials are required to be available as ATLASSIAN_USERNAME and ATLASSIAN_PASSWORD as environment variables. + ATLASSIAN_USERNAME is typically an email address. + ATLASSIAN_PASSWORD is a token. See: https://id.atlassian.com/manage-profile/security/api-tokens """ + from atlassian import Confluence from atlassian.confluence import ApiError @@ -918,19 +1056,21 @@ def _create_build_links_patterns(current_version, new_version): @task -def get_active_release_branch(_): - """ - Determine what is the current active release branch for the Agent. +def get_active_release_branch(ctx, release_branch): + """Determine what is the current active release branch for the Agent within the release worktree. + If release started and code freeze is in place - main branch is considered active. If release started and code freeze is over - release branch is considered active. """ - gh = GithubAPI() - next_version = get_next_version(gh) - release_branch = gh.get_branch(next_version.branch()) - if release_branch: - print(f"{release_branch.name}") - else: - print(get_default_branch()) + + with agent_context(ctx, branch=release_branch): + gh = GithubAPI() + next_version = get_next_version(gh, latest_release=_get_agent6_latest_release(gh) if is_agent6(ctx) else None) + release_branch = gh.get_branch(next_version.branch()) + if release_branch: + print(f"{release_branch.name}") + else: + print(get_default_branch()) @task @@ -942,23 +1082,24 @@ def get_unreleased_release_branches(_): print(json.dumps([branch.name for branch in gh.latest_unreleased_release_branches()])) -def get_next_version(gh): - latest_release = gh.latest_release() +def get_next_version(gh, latest_release=None): + latest_release = latest_release or gh.latest_release() current_version = _create_version_from_match(VERSION_RE.search(latest_release)) return current_version.next_version(bump_minor=True) @task def generate_release_metrics(ctx, milestone, freeze_date, release_date): - """ - Task to run after the release is done to generate release metrics. + """Task to run after the release is done to generate release metrics. - milestone - github milestone number for the release. Expected format like '7.54.0' - freeze_date - date when the code freeze was started. Expected format YYYY-MM-DD, like '2022-02-01' - release_date - date when the release was done. Expected format YYYY-MM-DD, like '2022-09-15' + Args: + milestone: Github milestone number for the release. Expected format like '7.54.0' + freeze_date: Date when the code freeze was started. Expected format YYYY-MM-DD, like '2022-02-01' + release_date: Date when the release was done. Expected format YYYY-MM-DD, like '2022-09-15' - Results are formatted in a way that can be easily copied to https://docs.google.com/spreadsheets/d/1r39CtyuvoznIDx1JhhLHQeAzmJB182n7ln8nToiWQ8s/edit#gid=1490566519 - Copy paste numbers to the respective sheets and select 'Split text to columns'. + Notes: + Results are formatted in a way that can be easily copied to https://docs.google.com/spreadsheets/d/1r39CtyuvoznIDx1JhhLHQeAzmJB182n7ln8nToiWQ8s/edit#gid=1490566519 + Copy paste numbers to the respective sheets and select 'Split text to columns'. """ # Step 1: Lead Time for Changes data @@ -987,10 +1128,12 @@ def generate_release_metrics(ctx, milestone, freeze_date, release_date): @task def create_schedule(_, version, freeze_date): + """Create confluence pages for the release schedule. + + Args: + freeze_date: Date when the code freeze was started. Expected format YYYY-MM-DD, like '2022-02-01' """ - Create confluence pages for the release schedule. - freeze_date - date when the code freeze was started. Expected format YYYY-MM-DD, like '2022-02-01' - """ + required_environment_variables = ["ATLASSIAN_USERNAME", "ATLASSIAN_PASSWORD"] if not all(key in os.environ for key in required_environment_variables): raise Exit(f"You must set {required_environment_variables} environment variables to use this task.", code=1) @@ -1052,36 +1195,38 @@ def check_for_changes(ctx, release_branch, warning_mode=False): """ Check if there was any modification on the release repositories since last release candidate. """ - next_version = next_rc_version(ctx, "7") - repo_data = generate_repo_data(warning_mode, next_version, release_branch) - changes = 'false' - for repo_name, repo in repo_data.items(): - head_commit = get_last_commit(ctx, repo_name, repo['branch']) - last_tag_commit, last_tag_name = get_last_release_tag(ctx, repo_name, next_version.tag_pattern()) - if last_tag_commit != "" and last_tag_commit != head_commit: - changes = 'true' - print(f"{repo_name} has new commits since {last_tag_name}", file=sys.stderr) - if warning_mode: - team = "agent-integrations" - emails = release_manager(next_version.clone(), team) - warn_new_commits(emails, team, repo['branch'], next_version) - else: - if repo_name not in ["datadog-agent", "integrations-core"]: - with clone(ctx, repo_name, repo['branch'], options="--filter=blob:none --no-checkout"): - # We can add the new commit now to be used by release candidate creation - print(f"Creating new tag {next_version} on {repo_name}", file=sys.stderr) - ctx.run(f"git tag {next_version}") - ctx.run(f"git push origin tag {next_version}") - # This repo has changes, the next check is not needed - continue - if repo_name != "datadog-agent" and last_tag_name != repo['previous_tag']: - changes = 'true' - print( - f"{repo_name} has a new tag {last_tag_name} since last release candidate (was {repo['previous_tag']})", - file=sys.stderr, - ) - # Send a value for the create_rc_pr.yml workflow - print(changes) + with agent_context(ctx, release_branch): + major_version = get_version_major(release_branch) + next_version = next_rc_version(ctx, major_version) + repo_data = generate_repo_data(ctx, warning_mode, next_version, release_branch) + changes = 'false' + for repo_name, repo in repo_data.items(): + head_commit = get_last_commit(ctx, repo_name, repo['branch']) + last_tag_commit, last_tag_name = get_last_release_tag(ctx, repo_name, next_version.tag_pattern()) + if last_tag_commit != "" and last_tag_commit != head_commit: + changes = 'true' + print(f"{repo_name} has new commits since {last_tag_name}", file=sys.stderr) + if warning_mode: + team = "agent-integrations" + emails = release_manager(next_version.clone(), team) + warn_new_commits(emails, team, repo['branch'], next_version) + else: + if repo_name not in ["datadog-agent", "integrations-core"]: + with clone(ctx, repo_name, repo['branch'], options="--filter=blob:none --no-checkout"): + # We can add the new commit now to be used by release candidate creation + print(f"Creating new tag {next_version} on {repo_name}", file=sys.stderr) + ctx.run(f"git tag {next_version}") + ctx.run(f"git push origin tag {next_version}") + # This repo has changes, the next check is not needed + continue + if repo_name != "datadog-agent" and last_tag_name != repo['previous_tag']: + changes = 'true' + print( + f"{repo_name} has a new tag {last_tag_name} since last release candidate (was {repo['previous_tag']})", + file=sys.stderr, + ) + # Send a value for the create_rc_pr.yml workflow + print(changes) @task @@ -1100,7 +1245,7 @@ def create_qa_cards(ctx, tag): @task -def create_github_release(_ctx, version, draft=True): +def create_github_release(ctx, release_branch, draft=True): """ Create a GitHub release for the given tag. """ @@ -1112,40 +1257,42 @@ def create_github_release(_ctx, version, draft=True): ) notes = [] + version = deduce_and_ask_version(ctx, release_branch) - for section, filename in sections: - text = pandoc.write(pandoc.read(file=filename), format="markdown_strict", options=["--wrap=none"]) + with agent_context(ctx, release_branch): + for section, filename in sections: + text = pandoc.write(pandoc.read(file=filename), format="markdown_strict", options=["--wrap=none"]) - header_found = False - lines = [] + header_found = False + lines = [] - # Extract the section for the given version - for line in text.splitlines(): - # Move to the right section - if line.startswith("## " + version): - header_found = True - continue + # Extract the section for the given version + for line in text.splitlines(): + # Move to the right section + if line.startswith("## " + version): + header_found = True + continue + + if header_found: + # Next version found, stop + if line.startswith("## "): + break + lines.append(line) + # if we found the header, add the section to the final release note if header_found: - # Next version found, stop - if line.startswith("## "): - break - lines.append(line) - - # if we found the header, add the section to the final release note - if header_found: - notes.append(f"# {section}") - notes.extend(lines) - - if not notes: - print(f"No release notes found for {version}") - raise Exit(code=1) - - github = GithubAPI() - release = github.create_release( - version, - "\n".join(notes), - draft=draft, - ) + notes.append(f"# {section}") + notes.extend(lines) + + if not notes: + print(f"No release notes found for {version}") + raise Exit(code=1) + + github = GithubAPI() + release = github.create_release( + version, + "\n".join(notes), + draft=draft, + ) - print(f"Link to the release note: {release.html_url}") + print(f"Link to the release note: {release.html_url}") diff --git a/tasks/unit_tests/release_tests.py b/tasks/unit_tests/release_tests.py index 0f52819ed6e4c..bf912ef27c930 100644 --- a/tasks/unit_tests/release_tests.py +++ b/tasks/unit_tests/release_tests.py @@ -7,7 +7,7 @@ from types import SimpleNamespace from unittest.mock import MagicMock, call, patch -from invoke import MockContext, Result +from invoke import Context, MockContext, Result from invoke.exceptions import Exit from tasks import release @@ -634,7 +634,7 @@ class TestGenerateRepoData(unittest.TestCase): def test_integrations_core_only_main(self): next_version = MagicMock() next_version.branch.return_value = "9.1.x" - repo_data = generate_repo_data(True, next_version, "main") + repo_data = generate_repo_data(Context(), True, next_version, "main") self.assertEqual(len(repo_data), 1) self.assertEqual("9.1.x", repo_data["integrations-core"]["branch"]) self.assertEqual("9.1.1-rc.0", repo_data["integrations-core"]["previous_tag"]) @@ -645,7 +645,7 @@ def test_integrations_core_only_main(self): def test_integrations_core_only_release(self): next_version = MagicMock() next_version.branch.return_value = "9.1.x" - repo_data = generate_repo_data(True, next_version, "9.1.x") + repo_data = generate_repo_data(Context(), True, next_version, "9.1.x") self.assertEqual(len(repo_data), 1) self.assertEqual("9.1.x", repo_data["integrations-core"]["branch"]) self.assertEqual("9.1.1-rc.0", repo_data["integrations-core"]["previous_tag"]) @@ -664,7 +664,7 @@ def test_integrations_core_only_release(self): def test_all_repos_default_branch(self): next_version = MagicMock() next_version.branch.return_value = "9.1.x" - repo_data = generate_repo_data(False, next_version, "main") + repo_data = generate_repo_data(Context(), False, next_version, "main") self.assertEqual(len(repo_data), 5) self.assertEqual("9.1.x", repo_data["integrations-core"]["branch"]) self.assertEqual("9.1.1-rc.0", repo_data["integrations-core"]["previous_tag"]) @@ -691,7 +691,7 @@ def test_all_repos_default_branch(self): def test_all_repos_release(self): next_version = MagicMock() next_version.branch.return_value = "9.1.x" - repo_data = generate_repo_data(False, next_version, "9.1.x") + repo_data = generate_repo_data(Context(), False, next_version, "9.1.x") self.assertEqual(len(repo_data), 5) self.assertEqual("9.1.x", repo_data["integrations-core"]["branch"]) self.assertEqual("9.1.x", repo_data["omnibus-software"]["branch"]) @@ -701,6 +701,7 @@ def test_all_repos_release(self): class TestCheckForChanges(unittest.TestCase): + @patch('tasks.release.agent_context') @patch('builtins.print') @patch('tasks.release.next_rc_version') @patch( @@ -715,7 +716,7 @@ class TestCheckForChanges(unittest.TestCase): } ), ) - def test_no_changes(self, version_mock, print_mock): + def test_no_changes(self, version_mock, print_mock, _): next = MagicMock() next.tag_pattern.return_value = "7.55.0*" next.__str__.return_value = "7.55.0-rc.2" @@ -757,6 +758,7 @@ def test_no_changes(self, version_mock, print_mock): release.check_for_changes(c, "main") print_mock.assert_called_with("false") + @patch('tasks.release.agent_context') @patch('builtins.print') @patch('tasks.release.next_rc_version') @patch( @@ -772,7 +774,7 @@ def test_no_changes(self, version_mock, print_mock): ), ) @patch('os.chdir', new=MagicMock()) - def test_changes_new_commit_first_repo(self, version_mock, print_mock): + def test_changes_new_commit_first_repo(self, version_mock, print_mock, _): with mock_git_clone(): next = MagicMock() next.tag_pattern.return_value = "7.55.0*" @@ -835,6 +837,7 @@ def test_changes_new_commit_first_repo(self, version_mock, print_mock): print_mock.assert_has_calls(calls) self.assertEqual(print_mock.call_count, 3) + @patch('tasks.release.agent_context') @patch('builtins.print') @patch('tasks.release.next_rc_version') @patch( @@ -850,7 +853,7 @@ def test_changes_new_commit_first_repo(self, version_mock, print_mock): ), ) @patch('os.chdir', new=MagicMock()) - def test_changes_new_commit_all_repo(self, version_mock, print_mock): + def test_changes_new_commit_all_repo(self, version_mock, print_mock, _): with mock_git_clone(): next = MagicMock() next.tag_pattern.return_value = "7.55.0*" @@ -919,6 +922,7 @@ def test_changes_new_commit_all_repo(self, version_mock, print_mock): print_mock.assert_has_calls(calls) self.assertEqual(print_mock.call_count, 9) + @patch('tasks.release.agent_context') @patch('builtins.print') @patch('tasks.release.next_rc_version') @patch( @@ -933,7 +937,7 @@ def test_changes_new_commit_all_repo(self, version_mock, print_mock): } ), ) - def test_changes_new_release_one_repo(self, version_mock, print_mock): + def test_changes_new_release_one_repo(self, version_mock, print_mock, _): next = MagicMock() next.tag_pattern.return_value = "7.55.0*" next.__str__.return_value = "7.55.0-rc.2" @@ -983,6 +987,7 @@ def test_changes_new_release_one_repo(self, version_mock, print_mock): print_mock.assert_has_calls(calls, any_order=True) self.assertEqual(print_mock.call_count, 2) + @patch('tasks.release.agent_context') @patch('builtins.print') @patch('tasks.release.next_rc_version') @patch( @@ -998,7 +1003,7 @@ def test_changes_new_release_one_repo(self, version_mock, print_mock): ), ) @patch('os.chdir', new=MagicMock()) - def test_changes_new_commit_second_repo_branch_out(self, version_mock, print_mock): + def test_changes_new_commit_second_repo_branch_out(self, version_mock, print_mock, _): with mock_git_clone(): next = MagicMock() next.tag_pattern.return_value = "7.55.0*" @@ -1062,6 +1067,7 @@ def test_changes_new_commit_second_repo_branch_out(self, version_mock, print_moc self.assertEqual(print_mock.call_count, 3) # def test_no_changes_warning(self, print_mock): + @patch('tasks.release.agent_context') @patch('builtins.print') @patch('tasks.release.next_rc_version') @patch( @@ -1072,7 +1078,7 @@ def test_changes_new_commit_second_repo_branch_out(self, version_mock, print_moc } ), ) - def test_no_changes_warning(self, version_mock, print_mock): + def test_no_changes_warning(self, version_mock, print_mock, _): next = MagicMock() next.tag_pattern.return_value = "7.55.0*" next.__str__.return_value = "7.55.0-rc.2" @@ -1090,6 +1096,7 @@ def test_no_changes_warning(self, version_mock, print_mock): release.check_for_changes(c, "main", True) print_mock.assert_called_with("false") + @patch('tasks.release.agent_context') @patch('builtins.print') @patch('tasks.release.next_rc_version') @patch( @@ -1102,7 +1109,7 @@ def test_no_changes_warning(self, version_mock, print_mock): ) @patch('tasks.release.release_manager', new=MagicMock(return_value="release_manager")) @patch('tasks.release.warn_new_commits', new=MagicMock()) - def test_changes_other_repo_warning(self, version_mock, print_mock): + def test_changes_other_repo_warning(self, version_mock, print_mock, _): next = MagicMock() next.tag_pattern.return_value = "7.55.0*" next.__str__.return_value = "7.55.0-rc.2" @@ -1120,6 +1127,7 @@ def test_changes_other_repo_warning(self, version_mock, print_mock): release.check_for_changes(c, "main", True) print_mock.assert_called_with("false") + @patch('tasks.release.agent_context') @patch('builtins.print') @patch('tasks.release.next_rc_version') @patch( @@ -1132,7 +1140,7 @@ def test_changes_other_repo_warning(self, version_mock, print_mock): ) @patch('tasks.release.release_manager', new=MagicMock(return_value="release_manager")) @patch('tasks.release.warn_new_commits', new=MagicMock()) - def test_changes_integrations_core_warning(self, version_mock, print_mock): + def test_changes_integrations_core_warning(self, version_mock, print_mock, _): next = MagicMock() next.tag_pattern.return_value = "7.55.0*" next.__str__.return_value = "7.55.0-rc.2" @@ -1155,6 +1163,7 @@ def test_changes_integrations_core_warning(self, version_mock, print_mock): print_mock.assert_has_calls(calls) self.assertEqual(print_mock.call_count, 2) + @patch('tasks.release.agent_context') @patch('builtins.print') @patch('tasks.release.next_rc_version') @patch( @@ -1167,7 +1176,7 @@ def test_changes_integrations_core_warning(self, version_mock, print_mock): ) @patch('tasks.release.release_manager', new=MagicMock(return_value="release_manager")) @patch('tasks.release.warn_new_commits', new=MagicMock()) - def test_changes_integrations_core_warning_branch_out(self, version_mock, print_mock): + def test_changes_integrations_core_warning_branch_out(self, version_mock, print_mock, _): next = MagicMock() next.tag_pattern.return_value = "7.55.0*" next.__str__.return_value = "7.55.0-rc.2" From cf461803fe15f5acaac159c02babcd37b1d920b1 Mon Sep 17 00:00:00 2001 From: Alexandre Yang Date: Fri, 6 Dec 2024 13:03:34 +0100 Subject: [PATCH 024/303] [HA Agent] Fix typo and use correct term (#31826) --- comp/haagent/def/component.go | 2 +- comp/haagent/impl/config.go | 2 +- comp/haagent/impl/haagent_test.go | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/comp/haagent/def/component.go b/comp/haagent/def/component.go index 7115988e5501b..bc5038265b76f 100644 --- a/comp/haagent/def/component.go +++ b/comp/haagent/def/component.go @@ -20,7 +20,7 @@ type Component interface { GetState() State // SetLeader takes the leader agent hostname as input, if it matches the current agent hostname, - // the isLeader state is set to true, otherwise false. + // the state is set to active, otherwise standby. SetLeader(leaderAgentHostname string) // ShouldRunIntegration returns true if the integration should be run diff --git a/comp/haagent/impl/config.go b/comp/haagent/impl/config.go index dc55f791264fc..2a6c4e20a8d12 100644 --- a/comp/haagent/impl/config.go +++ b/comp/haagent/impl/config.go @@ -10,7 +10,7 @@ import ( ) // validHaIntegrations represent the list of integrations that will be considered as -// an "HA Integration", meaning it will only run on the leader Agent. +// an "HA Integration", meaning it will only run on the active Agent. // At the moment, the list of HA Integrations is hardcoded here, but we might provide // more dynamic way to configure which integration should be considered HA Integration. var validHaIntegrations = map[string]bool{ diff --git a/comp/haagent/impl/haagent_test.go b/comp/haagent/impl/haagent_test.go index a83822de20431..88b1397f70456 100644 --- a/comp/haagent/impl/haagent_test.go +++ b/comp/haagent/impl/haagent_test.go @@ -57,7 +57,7 @@ func Test_GetGroup(t *testing.T) { assert.Equal(t, "my-group-01", haAgent.GetGroup()) } -func Test_IsLeader_SetLeader(t *testing.T) { +func Test_GetState(t *testing.T) { agentConfigs := map[string]interface{}{ "hostname": "my-agent-hostname", } @@ -201,7 +201,7 @@ func Test_haAgentImpl_ShouldRunIntegration(t *testing.T) { }, }, { - name: "ha agent enabled and agent is not leader", + name: "ha agent enabled and agent is not active", // should skip HA-integrations // should run "non HA integrations" agentConfigs: map[string]interface{}{ @@ -209,7 +209,7 @@ func Test_haAgentImpl_ShouldRunIntegration(t *testing.T) { "ha_agent.enabled": true, "ha_agent.group": testGroup, }, - leader: "another-agent-is-leader", + leader: "another-agent-is-active", expectShouldRunIntegration: map[string]bool{ "snmp": false, "cisco_aci": false, From 88c98ae502d042d0826a09369e2aa05a1055987a Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Fri, 6 Dec 2024 13:12:59 +0100 Subject: [PATCH 025/303] Rotate e2e tests API key (#31818) --- test/new-e2e/pkg/runner/parameters/store_aws.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/new-e2e/pkg/runner/parameters/store_aws.go b/test/new-e2e/pkg/runner/parameters/store_aws.go index 1a9ccfd55228a..7a2bc86aeea18 100644 --- a/test/new-e2e/pkg/runner/parameters/store_aws.go +++ b/test/new-e2e/pkg/runner/parameters/store_aws.go @@ -9,9 +9,10 @@ import ( "context" "errors" "fmt" - "github.com/DataDog/datadog-agent/test/new-e2e/pkg/utils/common" "strings" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/utils/common" + "github.com/aws/aws-sdk-go-v2/service/ssm" ssmTypes "github.com/aws/aws-sdk-go-v2/service/ssm/types" @@ -59,6 +60,6 @@ func (s awsStore) get(key StoreKey) (string, error) { // awsOverrides is a map of StoreKey to StoreKey used to override key only in AWS store var awsOverrides = map[StoreKey]StoreKey{ - APIKey: "api_key_2", + APIKey: "api_key_3", APPKey: "app_key_2", } From 6583e3ebf025cf04fa72da2e4275aa6dfe6e1e1c Mon Sep 17 00:00:00 2001 From: pducolin <45568537+pducolin@users.noreply.github.com> Date: Fri, 6 Dec 2024 13:42:28 +0100 Subject: [PATCH 026/303] [e2e] improve logs in UpdateEnv (#31804) --- test/new-e2e/pkg/e2e/suite.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/new-e2e/pkg/e2e/suite.go b/test/new-e2e/pkg/e2e/suite.go index e83a083f9d2be..bb15e92e7ce2e 100644 --- a/test/new-e2e/pkg/e2e/suite.go +++ b/test/new-e2e/pkg/e2e/suite.go @@ -281,6 +281,8 @@ func (bs *BaseSuite[Env]) reconcileEnv(targetProvisioners ProvisionerMap) error return nil } + bs.T().Logf("Updating environment with new provisioners") + logger := newTestLogger(bs.T()) ctx, cancel := bs.providerContext(createTimeout) defer cancel() @@ -293,6 +295,7 @@ func (bs *BaseSuite[Env]) reconcileEnv(targetProvisioners ProvisionerMap) error // Check for removed provisioners, we need to call delete on them first for id, provisioner := range bs.currentProvisioners { if _, found := targetProvisioners[id]; !found { + bs.T().Logf("Destroying stack %s with provisioner %s", bs.params.stackName, id) if err := provisioner.Destroy(ctx, bs.params.stackName, logger); err != nil { return fmt.Errorf("unable to delete stack: %s, provisioner %s, err: %v", bs.params.stackName, id, err) } @@ -305,6 +308,7 @@ func (bs *BaseSuite[Env]) reconcileEnv(targetProvisioners ProvisionerMap) error var provisionerResources RawResources var err error + bs.T().Logf("Provisioning environment stack %s with provisioner %s", bs.params.stackName, id) switch pType := provisioner.(type) { case TypedProvisioner[Env]: provisionerResources, err = pType.ProvisionEnv(ctx, bs.params.stackName, logger, newEnv) From caf881cfc72ca88f0568c7586bc58aa9dd97de90 Mon Sep 17 00:00:00 2001 From: Baptiste Foy Date: Fri, 6 Dec 2024 14:16:25 +0100 Subject: [PATCH 027/303] upgrade(installer): Uninstall deb/rpm agent when installing the OCI (#31784) --- pkg/fleet/installer/installer.go | 19 +++++-- pkg/fleet/installer/packages/datadog_agent.go | 20 ++++++-- .../packages/datadog_agent_windows.go | 5 ++ pkg/fleet/installer/packages/pkg_manager.go | 51 +++++++++++++++++++ test/new-e2e/tests/installer/host/host.go | 6 ++- .../installer/unix/package_agent_test.go | 8 ++- 6 files changed, 98 insertions(+), 11 deletions(-) create mode 100644 pkg/fleet/installer/packages/pkg_manager.go diff --git a/pkg/fleet/installer/installer.go b/pkg/fleet/installer/installer.go index 8000be3c5a261..d7cca9819b4da 100644 --- a/pkg/fleet/installer/installer.go +++ b/pkg/fleet/installer/installer.go @@ -160,7 +160,7 @@ func (i *installerImpl) IsInstalled(_ context.Context, pkg string) (bool, error) func (i *installerImpl) Install(ctx context.Context, url string, args []string) error { i.m.Lock() defer i.m.Unlock() - pkg, err := i.downloader.Download(ctx, url) + pkg, err := i.downloader.Download(ctx, url) // Downloads pkg metadata only if err != nil { return fmt.Errorf("could not download package: %w", err) } @@ -169,6 +169,10 @@ func (i *installerImpl) Install(ctx context.Context, url string, args []string) span.SetTag(ext.ResourceName, pkg.Name) span.SetTag("package_version", pkg.Version) } + err = i.preparePackage(ctx, pkg.Name, args) // Preinst + if err != nil { + return fmt.Errorf("could not prepare package: %w", err) + } dbPkg, err := i.db.GetPackage(pkg.Name) if err != nil && !errors.Is(err, db.ErrPackageNotFound) { return fmt.Errorf("could not get package: %w", err) @@ -203,11 +207,11 @@ func (i *installerImpl) Install(ctx context.Context, url string, args []string) if err != nil { return fmt.Errorf("could not create repository: %w", err) } - err = i.configurePackage(ctx, pkg.Name) + err = i.configurePackage(ctx, pkg.Name) // Config if err != nil { return fmt.Errorf("could not configure package: %w", err) } - err = i.setupPackage(ctx, pkg.Name, args) + err = i.setupPackage(ctx, pkg.Name, args) // Postinst if err != nil { return fmt.Errorf("could not setup package: %w", err) } @@ -615,6 +619,15 @@ func (i *installerImpl) promoteExperiment(ctx context.Context, pkg string) error } } +func (i *installerImpl) preparePackage(ctx context.Context, pkg string, _ []string) error { + switch pkg { + case packageDatadogAgent: + return packages.PrepareAgent(ctx) + default: + return nil + } +} + func (i *installerImpl) setupPackage(ctx context.Context, pkg string, args []string) error { switch pkg { case packageDatadogInstaller: diff --git a/pkg/fleet/installer/packages/datadog_agent.go b/pkg/fleet/installer/packages/datadog_agent.go index ad8b7c4fade4c..7236096bbf1e1 100644 --- a/pkg/fleet/installer/packages/datadog_agent.go +++ b/pkg/fleet/installer/packages/datadog_agent.go @@ -64,6 +64,22 @@ var ( } ) +// PrepareAgent prepares the machine to install the agent +func PrepareAgent(ctx context.Context) (err error) { + span, ctx := tracer.StartSpanFromContext(ctx, "prepare_agent") + defer func() { span.Finish(tracer.WithError(err)) }() + + // Check if the agent has been installed by a package manager, if yes remove it + if !oldAgentInstalled() { + return nil // Nothing to do + } + err = stopOldAgentUnits(ctx) + if err != nil { + return fmt.Errorf("failed to stop old agent units: %w", err) + } + return removeDebRPMPackage(ctx, agentPackage) +} + // SetupAgent installs and starts the agent func SetupAgent(ctx context.Context, _ []string) (err error) { span, ctx := tracer.StartSpanFromContext(ctx, "setup_agent") @@ -75,10 +91,6 @@ func SetupAgent(ctx context.Context, _ []string) (err error) { span.Finish(tracer.WithError(err)) }() - if err = stopOldAgentUnits(ctx); err != nil { - return err - } - for _, unit := range stableUnits { if err = loadUnit(ctx, unit); err != nil { return fmt.Errorf("failed to load %s: %v", unit, err) diff --git a/pkg/fleet/installer/packages/datadog_agent_windows.go b/pkg/fleet/installer/packages/datadog_agent_windows.go index 3000a96fe712d..d330ab434d0e0 100644 --- a/pkg/fleet/installer/packages/datadog_agent_windows.go +++ b/pkg/fleet/installer/packages/datadog_agent_windows.go @@ -21,6 +21,11 @@ const ( datadogAgent = "datadog-agent" ) +// PrepareAgent prepares the machine to install the agent +func PrepareAgent(_ context.Context) error { + return nil // No-op on Windows +} + // SetupAgent installs and starts the agent func SetupAgent(ctx context.Context, args []string) (err error) { span, _ := tracer.StartSpanFromContext(ctx, "setup_agent") diff --git a/pkg/fleet/installer/packages/pkg_manager.go b/pkg/fleet/installer/packages/pkg_manager.go new file mode 100644 index 0000000000000..e74dba210a015 --- /dev/null +++ b/pkg/fleet/installer/packages/pkg_manager.go @@ -0,0 +1,51 @@ +// 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. + +//go:build !windows + +package packages + +import ( + "bytes" + "context" + "fmt" + "os/exec" + + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" +) + +// removeDebRPMPackage removes a package installed via deb/rpm package manager +// It doesn't remove dependencies or purge as we want to keep existing configuration files +// and reinstall the package using the installer. +// Note: we don't run the pre/post remove scripts as we want to avoid surprises for older agent versions (like removing config) +func removeDebRPMPackage(ctx context.Context, pkg string) (err error) { + span, _ := tracer.StartSpanFromContext(ctx, "remove_deb_rpm_package") + defer func() { span.Finish(tracer.WithError(err)) }() + // Compute the right command depending on the package manager + var cmd *exec.Cmd + if _, pathErr := exec.LookPath("dpkg"); pathErr == nil { + // Doesn't fail if the package isn't installed + cmd = exec.Command("dpkg", "-r", "--no-triggers", agentPackage) + } else if _, pathErr := exec.LookPath("rpm"); pathErr == nil { + // Check if package exist, else the command will fail + pkgErr := exec.Command("rpm", "-q", agentPackage).Run() + if pkgErr == nil { + cmd = exec.Command("rpm", "-e", "--nodeps", "--noscripts", agentPackage) + } + } + + if cmd == nil { + // If we can't find a package manager or the package is not installed, ignore this step + return nil + } + + // Run the command + var buf bytes.Buffer + cmd.Stderr = &buf + if err := cmd.Run(); err != nil { + return fmt.Errorf("failed to uninstall deb/rpm package %s (%w): %s", pkg, err, buf.String()) + } + return nil +} diff --git a/test/new-e2e/tests/installer/host/host.go b/test/new-e2e/tests/installer/host/host.go index c98684ab498fa..79b43ef730fec 100644 --- a/test/new-e2e/tests/installer/host/host.go +++ b/test/new-e2e/tests/installer/host/host.go @@ -253,7 +253,9 @@ func (h *Host) AssertPackageNotInstalledByPackageManager(pkgs ...string) { for _, pkg := range pkgs { switch h.pkgManager { case "apt": - h.remote.MustExecute("! dpkg-query -l " + pkg) + // If a package is removed but not purged, it will be in the "rc" state (opposed to "ii" for installed) + // if it's been purged, the command will return an error + h.remote.MustExecute(fmt.Sprintf("dpkg-query -l %[1]s | grep '^rc' || ! dpkg-query -l %[1]s", pkg)) case "yum", "zypper": h.remote.MustExecute("! rpm -q " + pkg) default: @@ -647,7 +649,7 @@ func (s *State) AssertDirExists(path string, perms fs.FileMode, user string, gro func (s *State) AssertPathDoesNotExist(path string) { path = evalSymlinkPath(path, s.FS) _, ok := s.FS[path] - assert.False(s.t, ok, "something exists at path", path) + assert.False(s.t, ok, "something exists at path %s", path) } // AssertFileExistsAnyUser asserts that a file exists on the host with the given perms. diff --git a/test/new-e2e/tests/installer/unix/package_agent_test.go b/test/new-e2e/tests/installer/unix/package_agent_test.go index 571d7a87eae41..70ddeff75c676 100644 --- a/test/new-e2e/tests/installer/unix/package_agent_test.go +++ b/test/new-e2e/tests/installer/unix/package_agent_test.go @@ -113,7 +113,7 @@ func (s *packageAgentSuite) TestUpgrade_AgentDebRPM_to_OCI() { state = s.host.State() s.assertUnits(state, false) s.host.AssertPackageInstalledByInstaller("datadog-agent") - s.host.AssertPackageInstalledByPackageManager("datadog-agent") + s.host.AssertPackageNotInstalledByPackageManager("datadog-agent") } // TestUpgrade_Agent_OCI_then_DebRpm agent deb/rpm install while OCI one is installed @@ -422,7 +422,7 @@ func (s *packageAgentSuite) TestUpgrade_DisabledAgentDebRPM_to_OCI() { state = s.host.State() s.assertUnits(state, false) s.host.AssertPackageInstalledByInstaller("datadog-agent") - s.host.AssertPackageInstalledByPackageManager("datadog-agent") + s.host.AssertPackageNotInstalledByPackageManager("datadog-agent") s.host.Run("sudo systemctl show datadog-agent -p ExecStart | grep /opt/datadog-packages") } @@ -430,6 +430,7 @@ func (s *packageAgentSuite) TestUpgrade_DisabledAgentDebRPM_to_OCI() { func (s *packageAgentSuite) TestInstallWithLeftoverDebDir() { // create /opt/datadog-agent to simulate a disabled agent s.host.Run("sudo mkdir -p /opt/datadog-agent") + defer func() { s.host.Run("sudo rm -rf /opt/datadog-agent") }() // install OCI agent s.RunInstallScript(envForceInstall("datadog-agent")) @@ -451,6 +452,9 @@ func (s *packageAgentSuite) purgeAgentDebInstall() { default: s.T().Fatalf("unsupported package manager: %s", pkgManager) } + // Make sure everything is cleaned up -- there are tests where the package is + // removed but not purged so the directory remains + s.Env().RemoteHost.Execute("sudo rm -rf /opt/datadog-agent") } func (s *packageAgentSuite) installDebRPMAgent() { From 68415f12658292cb1773a0e7998b6712e5abbc0e Mon Sep 17 00:00:00 2001 From: Alexandre Yang Date: Fri, 6 Dec 2024 14:54:31 +0100 Subject: [PATCH 028/303] [HA Agent] Add datadog.agent.ha_agent.running metric (#31782) --- pkg/aggregator/aggregator.go | 13 ++++++ pkg/aggregator/aggregator_test.go | 72 +++++++++++++++++++++++++++++-- pkg/aggregator/sender_test.go | 2 +- 3 files changed, 82 insertions(+), 5 deletions(-) diff --git a/pkg/aggregator/aggregator.go b/pkg/aggregator/aggregator.go index e8ac4fd425d13..653a031194819 100644 --- a/pkg/aggregator/aggregator.go +++ b/pkg/aggregator/aggregator.go @@ -610,6 +610,19 @@ func (agg *BufferedAggregator) appendDefaultSeries(start time.Time, series metri SourceTypeName: "System", }) + if agg.haAgent.Enabled() { + haAgentTags := append(agg.tags(false), "agent_state:"+string(agg.haAgent.GetState())) + // Send along a metric to show if HA Agent is running with agent_state tag. + series.Append(&metrics.Serie{ + Name: fmt.Sprintf("datadog.%s.ha_agent.running", agg.agentName), + Points: []metrics.Point{{Value: float64(1), Ts: float64(start.Unix())}}, + Tags: tagset.CompositeTagsFromSlice(haAgentTags), + Host: agg.hostname, + MType: metrics.APIGaugeType, + SourceTypeName: "System", + }) + } + // Send along a metric that counts the number of times we dropped some payloads because we couldn't split them. series.Append(&metrics.Serie{ Name: fmt.Sprintf("n_o_i_n_d_e_x.datadog.%s.payload.dropped", agg.agentName), diff --git a/pkg/aggregator/aggregator_test.go b/pkg/aggregator/aggregator_test.go index a60e3055f2206..5a0676cbcb507 100644 --- a/pkg/aggregator/aggregator_test.go +++ b/pkg/aggregator/aggregator_test.go @@ -27,6 +27,7 @@ import ( "github.com/DataDog/datadog-agent/comp/forwarder/defaultforwarder" "github.com/DataDog/datadog-agent/comp/forwarder/eventplatform" orchestratorforwarder "github.com/DataDog/datadog-agent/comp/forwarder/orchestrator" + haagent "github.com/DataDog/datadog-agent/comp/haagent/def" haagentmock "github.com/DataDog/datadog-agent/comp/haagent/mock" compressionmock "github.com/DataDog/datadog-agent/comp/serializer/compression/fx-mock" checkid "github.com/DataDog/datadog-agent/pkg/collector/check/id" @@ -57,8 +58,11 @@ func initF() { tagsetTlm.reset() } -func testNewFlushTrigger(start time.Time, waitForSerializer bool) flushTrigger { - seriesSink := metrics.NewIterableSeries(func(_ *metrics.Serie) {}, 1000, 1000) +func testNewFlushTrigger(start time.Time, waitForSerializer bool, callback func(_ *metrics.Serie)) flushTrigger { + if callback == nil { + callback = func(_ *metrics.Serie) {} + } + seriesSink := metrics.NewIterableSeries(callback, 1000, 1000) flushedSketches := make(metrics.SketchSeriesList, 0) return flushTrigger{ @@ -130,7 +134,7 @@ func TestDeregisterCheckSampler(t *testing.T) { return agg.checkSamplers[checkID1].deregistered && !agg.checkSamplers[checkID2].deregistered }, time.Second, 10*time.Millisecond) - agg.Flush(testNewFlushTrigger(time.Now(), false)) + agg.Flush(testNewFlushTrigger(time.Now(), false, nil)) agg.mu.Lock() require.Len(t, agg.checkSamplers, 1) @@ -265,7 +269,7 @@ func TestDefaultData(t *testing.T) { s.On("SendSeries", series).Return(nil).Times(1) - agg.Flush(testNewFlushTrigger(start, false)) + agg.Flush(testNewFlushTrigger(start, false, nil)) s.AssertNotCalled(t, "SendEvents") s.AssertNotCalled(t, "SendSketch") @@ -273,6 +277,66 @@ func TestDefaultData(t *testing.T) { assert.Equal(t, uint64(0), tagsetTlm.hugeSeriesCount[0].Load()) } +func TestDefaultSeries(t *testing.T) { + s := &MockSerializerIterableSerie{} + taggerComponent := taggerMock.SetupFakeTagger(t) + + mockHaAgent := haagentmock.NewMockHaAgent().(haagentmock.Component) + mockHaAgent.SetEnabled(true) + mockHaAgent.SetState(haagent.Active) + + agg := NewBufferedAggregator(s, nil, mockHaAgent, taggerComponent, "hostname", DefaultFlushInterval) + + start := time.Now() + + // Check only the name for `datadog.agent.up` as the timestamp may not be the same. + agentUpMatcher := mock.MatchedBy(func(m servicecheck.ServiceChecks) bool { + require.Equal(t, 1, len(m)) + require.Equal(t, "datadog.agent.up", m[0].CheckName) + require.Equal(t, servicecheck.ServiceCheckOK, m[0].Status) + require.Equal(t, []string{"agent_group:group01"}, m[0].Tags) + require.Equal(t, agg.hostname, m[0].Host) + + return true + }) + s.On("SendServiceChecks", agentUpMatcher).Return(nil).Times(1) + + expectedSeries := metrics.Series{&metrics.Serie{ + Name: fmt.Sprintf("datadog.%s.running", flavor.GetFlavor()), + Points: []metrics.Point{{Value: 1, Ts: float64(start.Unix())}}, + Tags: tagset.CompositeTagsFromSlice([]string{"version:" + version.AgentVersion, "agent_group:group01"}), + Host: agg.hostname, + MType: metrics.APIGaugeType, + SourceTypeName: "System", + }, &metrics.Serie{ + Name: fmt.Sprintf("datadog.%s.ha_agent.running", agg.agentName), + Points: []metrics.Point{{Value: float64(1), Ts: float64(start.Unix())}}, + Tags: tagset.CompositeTagsFromSlice([]string{"agent_group:group01", "agent_state:standby"}), + Host: agg.hostname, + MType: metrics.APIGaugeType, + SourceTypeName: "System", + }, &metrics.Serie{ + Name: fmt.Sprintf("n_o_i_n_d_e_x.datadog.%s.payload.dropped", flavor.GetFlavor()), + Points: []metrics.Point{{Value: 0, Ts: float64(start.Unix())}}, + Host: agg.hostname, + Tags: tagset.CompositeTagsFromSlice([]string{"agent_group:group01"}), + MType: metrics.APIGaugeType, + SourceTypeName: "System", + NoIndex: true, + }} + + s.On("SendSeries", expectedSeries).Return(nil).Times(1) + + var flushedSeries metrics.Series + triggerInstance := testNewFlushTrigger(start, false, func(serie *metrics.Serie) { + flushedSeries = append(flushedSeries, serie) + }) + + agg.Flush(triggerInstance) + + assert.EqualValues(t, expectedSeries, flushedSeries) +} + func TestSeriesTooManyTags(t *testing.T) { // this test IS USING globals (tagsetTlm and recurrentSeries) but a local aggregator // - diff --git a/pkg/aggregator/sender_test.go b/pkg/aggregator/sender_test.go index 994cc96969d1c..ef7173f8a1bcc 100644 --- a/pkg/aggregator/sender_test.go +++ b/pkg/aggregator/sender_test.go @@ -180,7 +180,7 @@ func TestDestroySender(t *testing.T) { return aggregatorInstance.checkSamplers[checkID1].deregistered }, time.Second, 10*time.Millisecond) - aggregatorInstance.Flush(testNewFlushTrigger(time.Now(), false)) + aggregatorInstance.Flush(testNewFlushTrigger(time.Now(), false, nil)) assertAggSamplersLen(t, aggregatorInstance, 1) } From 35675c30fd1151f1d86a757c4ade99e081e71e13 Mon Sep 17 00:00:00 2001 From: Vickenty Fesunov Date: Fri, 6 Dec 2024 15:06:28 +0100 Subject: [PATCH 029/303] AMLII-2169 Activate BouncyCastle Java FIPS provider for FIPS images (#31827) --- .gitlab/container_build/docker_linux.yml | 4 ++-- Dockerfiles/agent/Dockerfile | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.gitlab/container_build/docker_linux.yml b/.gitlab/container_build/docker_linux.yml index c94f319627621..517cecdcf3b67 100644 --- a/.gitlab/container_build/docker_linux.yml +++ b/.gitlab/container_build/docker_linux.yml @@ -154,7 +154,7 @@ docker_build_fips_agent7_jmx: IMAGE: registry.ddbuild.io/ci/datadog-agent/agent BUILD_CONTEXT: Dockerfiles/agent TAG_SUFFIX: -7-fips-jmx - BUILD_ARG: --target test --build-arg WITH_JMX=true --build-arg DD_AGENT_ARTIFACT=datadog-fips-agent-7*-amd64.tar.xz + BUILD_ARG: --target test --build-arg WITH_JMX=true --build-arg WITH_JMX_FIPS=true --build-arg DD_AGENT_ARTIFACT=datadog-fips-agent-7*-amd64.tar.xz docker_build_fips_agent7_arm64_jmx: extends: [.docker_build_job_definition_arm64, .docker_build_artifact] @@ -167,7 +167,7 @@ docker_build_fips_agent7_arm64_jmx: IMAGE: registry.ddbuild.io/ci/datadog-agent/agent BUILD_CONTEXT: Dockerfiles/agent TAG_SUFFIX: -7-fips-jmx - BUILD_ARG: --target test --build-arg WITH_JMX=true --build-arg DD_AGENT_ARTIFACT=datadog-fips-agent-7*-arm64.tar.xz + BUILD_ARG: --target test --build-arg WITH_JMX=true --build-arg WITH_JMX_FIPS=true --build-arg DD_AGENT_ARTIFACT=datadog-fips-agent-7*-arm64.tar.xz # build agent7 UA image docker_build_ot_agent7: diff --git a/Dockerfiles/agent/Dockerfile b/Dockerfiles/agent/Dockerfile index 58ecd02ae3bb6..f43642f79e819 100644 --- a/Dockerfiles/agent/Dockerfile +++ b/Dockerfiles/agent/Dockerfile @@ -39,6 +39,7 @@ RUN gcc -pipe -Wall -Wextra -O2 -shared -fPIC -Wl,--version-script=/tmp/nosys.sy FROM baseimage AS extract ARG TARGETARCH ARG WITH_JMX +ARG WITH_JMX_FIPS ARG DD_AGENT_ARTIFACT=datadog-agent*-$TARGETARCH.tar.xz ARG GENERAL_ARTIFACTS_CACHE_BUCKET_URL @@ -96,6 +97,7 @@ RUN if [ -n "$WITH_JMX" ]; then cd /opt/bouncycastle-fips && mvn dependency:copy FROM baseimage AS release LABEL maintainer="Datadog " ARG WITH_JMX +ARG WITH_JMX_FIPS ARG DD_GIT_REPOSITORY_URL ARG DD_GIT_COMMIT_SHA ENV DOCKER_DD_AGENT=true \ @@ -196,6 +198,9 @@ COPY --from=extract /opt/bouncycastle-fips/target/dependency/*.jar /opt/bouncyca COPY --chmod=644 bouncycastle-fips/java.security /opt/bouncycastle-fips/ COPY --chmod=644 bouncycastle-fips/bc-fips.policy /opt/bouncycastle-fips/ RUN if [ -z "$WITH_JMX" ]; then rm -rf /opt/bouncycastle-fips; fi +# Configure Java to use BouncyCastle FIPS provider on JMX FIPS images. +# Double equals sign for java.security.properties istructs java to replace system defaults with the contents of the new file. +ENV JAVA_TOOL_OPTIONS="${WITH_JMX_FIPS:+--module-path=/opt/bouncycastle-fips -Djava.security.properties==/opt/bouncycastle-fips/java.security -Dpolicy.url.2=file:/opt/bouncycastle-fips/bc-fips.policy}" # Update if optional OTel Agent process should not run RUN if [ ! -f /opt/datadog-agent/embedded/bin/otel-agent ]; then \ From 4daa586489638c5f6df38499f0f6fa69cb182967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Fri, 6 Dec 2024 15:16:42 +0100 Subject: [PATCH 030/303] omnibus: reorder depencencies (#31802) --- omnibus/config/projects/agent.rb | 29 ++++---------- omnibus/config/software/agent-dependencies.rb | 22 ----------- .../software/datadog-agent-dependencies.rb | 38 ++++++++++++++++++- omnibus/config/software/datadog-agent.rb | 1 - omnibus/config/software/snmp-traps.rb | 1 - 5 files changed, 45 insertions(+), 46 deletions(-) delete mode 100644 omnibus/config/software/agent-dependencies.rb diff --git a/omnibus/config/projects/agent.rb b/omnibus/config/projects/agent.rb index 62a6afb6deaf7..b3ab9c10ae1ad 100644 --- a/omnibus/config/projects/agent.rb +++ b/omnibus/config/projects/agent.rb @@ -221,9 +221,17 @@ # ------------------------------------ if do_build + # Include traps db file in snmp.d/traps_db/ + dependency 'snmp-traps' + # Datadog agent dependency 'datadog-agent' + # This depends on the agent and must be added after it + if ENV['WINDOWS_DDPROCMON_DRIVER'] and not ENV['WINDOWS_DDPROCMON_DRIVER'].empty? + dependency 'datadog-security-agent-policies' + end + # System-probe if sysprobe_enabled? dependency 'system-probe' @@ -237,27 +245,6 @@ if linux_target? dependency 'datadog-security-agent-policies' - if fips_mode? - dependency 'openssl-fips-provider' - end - end - - # Include traps db file in snmp.d/traps_db/ - dependency 'snmp-traps' - - # Additional software - if windows_target? - if ENV['WINDOWS_DDNPM_DRIVER'] and not ENV['WINDOWS_DDNPM_DRIVER'].empty? - dependency 'datadog-windows-filter-driver' - end - if ENV['WINDOWS_APMINJECT_MODULE'] and not ENV['WINDOWS_APMINJECT_MODULE'].empty? - dependency 'datadog-windows-apminject' - end - if ENV['WINDOWS_DDPROCMON_DRIVER'] and not ENV['WINDOWS_DDPROCMON_DRIVER'].empty? - dependency 'datadog-windows-procmon-driver' - ## this is a duplicate of the above dependency in linux - dependency 'datadog-security-agent-policies' - end end # this dependency puts few files out of the omnibus install dir and move them diff --git a/omnibus/config/software/agent-dependencies.rb b/omnibus/config/software/agent-dependencies.rb deleted file mode 100644 index 125fd7a9525f0..0000000000000 --- a/omnibus/config/software/agent-dependencies.rb +++ /dev/null @@ -1,22 +0,0 @@ -name 'agent-dependencies' - -# Linux-specific dependencies -if linux_target? - dependency 'procps-ng' - dependency 'curl' -end - -# Bundled cacerts file (is this a good idea?) -dependency 'cacerts' - -# External agents -dependency 'jmxfetch' - -if linux_target? - dependency 'sds' -end - -# version manifest file -dependency 'version-manifest' - - diff --git a/omnibus/config/software/datadog-agent-dependencies.rb b/omnibus/config/software/datadog-agent-dependencies.rb index 3cac114d0578e..fd6712983b10b 100644 --- a/omnibus/config/software/datadog-agent-dependencies.rb +++ b/omnibus/config/software/datadog-agent-dependencies.rb @@ -2,6 +2,28 @@ description "Enforce building dependencies as soon as possible so they can be cached" +# Linux-specific dependencies +if linux_target? + dependency 'procps-ng' + dependency 'curl' + if fips_mode? + dependency 'openssl-fips-provider' + end +end + +# Bundled cacerts file (is this a good idea?) +dependency 'cacerts' + +# External agents +dependency 'jmxfetch' + +if linux_target? + dependency 'sds' +end + +# version manifest file +dependency 'version-manifest' + # Used for memory profiling with the `status py` agent subcommand dependency 'pympler' @@ -9,4 +31,18 @@ dependency "systemd" if linux_target? -dependency 'libpcap' if linux_target? and !heroku_target? # system-probe dependency \ No newline at end of file +dependency 'libpcap' if linux_target? and !heroku_target? # system-probe dependency + +# Additional software +if windows_target? + if ENV['WINDOWS_DDNPM_DRIVER'] and not ENV['WINDOWS_DDNPM_DRIVER'].empty? + dependency 'datadog-windows-filter-driver' + end + if ENV['WINDOWS_APMINJECT_MODULE'] and not ENV['WINDOWS_APMINJECT_MODULE'].empty? + dependency 'datadog-windows-apminject' + end + if ENV['WINDOWS_DDPROCMON_DRIVER'] and not ENV['WINDOWS_DDPROCMON_DRIVER'].empty? + dependency 'datadog-windows-procmon-driver' + end +end + diff --git a/omnibus/config/software/datadog-agent.rb b/omnibus/config/software/datadog-agent.rb index ecfe7cb0d4c7c..8f24178d2c07e 100644 --- a/omnibus/config/software/datadog-agent.rb +++ b/omnibus/config/software/datadog-agent.rb @@ -20,7 +20,6 @@ # especially at higher thread counts. dependency "libjemalloc" if linux_target? -dependency 'agent-dependencies' dependency 'datadog-agent-dependencies' source path: '..' diff --git a/omnibus/config/software/snmp-traps.rb b/omnibus/config/software/snmp-traps.rb index 1dc01d61b1680..5a021b01ed8d4 100644 --- a/omnibus/config/software/snmp-traps.rb +++ b/omnibus/config/software/snmp-traps.rb @@ -3,7 +3,6 @@ # Needs the configuration folder as created in datadog-agent dependency 'datadog-agent' -always_build true # For cache related purposes, it comes after datadog-agent source :url => "https://s3.amazonaws.com/dd-agent-omnibus/snmp_traps_db/dd_traps_db-#{version}.json.gz", :sha256 => "04fb9d43754c2656edf35f08fbad11ba8dc20d52654962933f3dd8f4d463b42c", From 2ee99e0efe6cc535b7d6272c6f7e0e206c343ab4 Mon Sep 17 00:00:00 2001 From: Jeremy Hanna Date: Fri, 6 Dec 2024 11:04:44 -0500 Subject: [PATCH 031/303] Set GOFIPS via build arg for docker env (#31808) --- .gitlab/container_build/docker_linux.yml | 8 ++++---- Dockerfiles/agent/Dockerfile | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.gitlab/container_build/docker_linux.yml b/.gitlab/container_build/docker_linux.yml index 517cecdcf3b67..4bd10a6be23ff 100644 --- a/.gitlab/container_build/docker_linux.yml +++ b/.gitlab/container_build/docker_linux.yml @@ -101,7 +101,7 @@ docker_build_fips_agent7: IMAGE: registry.ddbuild.io/ci/datadog-agent/agent BUILD_CONTEXT: Dockerfiles/agent TAG_SUFFIX: -7-fips - BUILD_ARG: --target test --build-arg DD_AGENT_ARTIFACT=datadog-fips-agent-7*-amd64.tar.xz + BUILD_ARG: --target test --build-arg FIPS_ENABLED=1 --build-arg DD_AGENT_ARTIFACT=datadog-fips-agent-7*-amd64.tar.xz docker_build_fips_agent7_arm64: extends: [.docker_build_job_definition_arm64, .docker_build_artifact] @@ -114,7 +114,7 @@ docker_build_fips_agent7_arm64: IMAGE: registry.ddbuild.io/ci/datadog-agent/agent BUILD_CONTEXT: Dockerfiles/agent TAG_SUFFIX: -7-fips - BUILD_ARG: --target test --build-arg DD_AGENT_ARTIFACT=datadog-fips-agent-7*-arm64.tar.xz + BUILD_ARG: --target test --build-arg FIPS_ENABLED=1 --build-arg DD_AGENT_ARTIFACT=datadog-fips-agent-7*-arm64.tar.xz # build agent7 jmx image docker_build_agent7_jmx: @@ -154,7 +154,7 @@ docker_build_fips_agent7_jmx: IMAGE: registry.ddbuild.io/ci/datadog-agent/agent BUILD_CONTEXT: Dockerfiles/agent TAG_SUFFIX: -7-fips-jmx - BUILD_ARG: --target test --build-arg WITH_JMX=true --build-arg WITH_JMX_FIPS=true --build-arg DD_AGENT_ARTIFACT=datadog-fips-agent-7*-amd64.tar.xz + BUILD_ARG: --target test --build-arg FIPS_ENABLED=1 --build-arg WITH_JMX=true --build-arg WITH_JMX_FIPS=true --build-arg DD_AGENT_ARTIFACT=datadog-fips-agent-7*-amd64.tar.xz docker_build_fips_agent7_arm64_jmx: extends: [.docker_build_job_definition_arm64, .docker_build_artifact] @@ -167,7 +167,7 @@ docker_build_fips_agent7_arm64_jmx: IMAGE: registry.ddbuild.io/ci/datadog-agent/agent BUILD_CONTEXT: Dockerfiles/agent TAG_SUFFIX: -7-fips-jmx - BUILD_ARG: --target test --build-arg WITH_JMX=true --build-arg WITH_JMX_FIPS=true --build-arg DD_AGENT_ARTIFACT=datadog-fips-agent-7*-arm64.tar.xz + BUILD_ARG: --target test --build-arg FIPS_ENABLED=1 --build-arg WITH_JMX=true --build-arg WITH_JMX_FIPS=true --build-arg DD_AGENT_ARTIFACT=datadog-fips-agent-7*-arm64.tar.xz # build agent7 UA image docker_build_ot_agent7: diff --git a/Dockerfiles/agent/Dockerfile b/Dockerfiles/agent/Dockerfile index f43642f79e819..072b832fb3f0a 100644 --- a/Dockerfiles/agent/Dockerfile +++ b/Dockerfiles/agent/Dockerfile @@ -96,6 +96,7 @@ RUN if [ -n "$WITH_JMX" ]; then cd /opt/bouncycastle-fips && mvn dependency:copy FROM baseimage AS release LABEL maintainer="Datadog " +ARG FIPS_ENABLED=0 ARG WITH_JMX ARG WITH_JMX_FIPS ARG DD_GIT_REPOSITORY_URL @@ -185,8 +186,8 @@ RUN [ "$(getent passwd dd-agent | cut -d: -f 3)" -eq 100 ] # Enable FIPS if needed RUN if [ -x /opt/datadog-agent/embedded/bin/fipsinstall.sh ]; then \ /opt/datadog-agent/embedded/bin/fipsinstall.sh; \ - export GOFIPS=1; \ fi +ENV GOFIPS=${FIPS_ENABLED} # Override the exit script by ours to fix --pid=host operations RUN mv /etc/s6/init/init-stage3 /etc/s6/init/init-stage3-original From 81092f177c80c9d7e57d037f48b4dd7b9c437a7e Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Fri, 6 Dec 2024 17:47:44 +0100 Subject: [PATCH 032/303] Fix build without clusterchecks build tag (#31707) Co-authored-by: Cedric Lamoriniere --- pkg/clusteragent/clusterchecks/handler_api_nocompile.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/clusteragent/clusterchecks/handler_api_nocompile.go b/pkg/clusteragent/clusterchecks/handler_api_nocompile.go index cd03f0938cecc..d66023e3bf585 100644 --- a/pkg/clusteragent/clusterchecks/handler_api_nocompile.go +++ b/pkg/clusteragent/clusterchecks/handler_api_nocompile.go @@ -13,6 +13,7 @@ import ( "errors" "github.com/DataDog/datadog-agent/comp/core/autodiscovery" + tagger "github.com/DataDog/datadog-agent/comp/core/tagger/def" "github.com/DataDog/datadog-agent/pkg/clusteragent/clusterchecks/types" ) @@ -31,7 +32,7 @@ func (h *Handler) GetState() (types.StateResponse, error) { } // NewHandler not implemented -func NewHandler(_ autodiscovery.Component) (*Handler, error) { +func NewHandler(_ autodiscovery.Component, _ tagger.Component) (*Handler, error) { return nil, ErrNotCompiled } From bf19c87fa6015930a4c36adae17fd1f57d7cafc6 Mon Sep 17 00:00:00 2001 From: Stuart Geipel Date: Fri, 6 Dec 2024 11:58:47 -0500 Subject: [PATCH 033/303] [ebpfless] Fix revive linter warnings in TCP processor (#31817) --- .../connection/ebpfless/tcp_processor.go | 48 ++-- .../ebpfless/tcp_processor_retransmit_test.go | 30 +-- .../ebpfless/tcp_processor_rtt_test.go | 4 +- .../connection/ebpfless/tcp_processor_test.go | 220 +++++++++--------- .../tracer/connection/ebpfless/tcp_utils.go | 36 +-- 5 files changed, 170 insertions(+), 168 deletions(-) diff --git a/pkg/network/tracer/connection/ebpfless/tcp_processor.go b/pkg/network/tracer/connection/ebpfless/tcp_processor.go index 500a89893eeb6..b312f460269ee 100644 --- a/pkg/network/tracer/connection/ebpfless/tcp_processor.go +++ b/pkg/network/tracer/connection/ebpfless/tcp_processor.go @@ -21,7 +21,7 @@ import ( ) type connectionState struct { - tcpState ConnStatus + tcpState connStatus // hasSentPacket is whether anything has been sent outgoing (aka whether maxSeqSent exists) hasSentPacket bool @@ -38,9 +38,9 @@ type connectionState struct { lastRemoteAck uint32 // localSynState is the status of the outgoing SYN handshake - localSynState SynState + localSynState synState // remoteSynState is the status of the incoming SYN handshake - remoteSynState SynState + remoteSynState synState // hasLocalFin is whether the outgoing side has FIN'd hasLocalFin bool @@ -54,11 +54,13 @@ type connectionState struct { rttTracker rttTracker } -type TCPProcessor struct { //nolint:revive // TODO +// TCPProcessor encapsulates TCP state tracking for the ebpfless tracer +type TCPProcessor struct { conns map[network.ConnectionTuple]connectionState } -func NewTCPProcessor() *TCPProcessor { //nolint:revive // TODO +// NewTCPProcessor constructs an empty TCPProcessor +func NewTCPProcessor() *TCPProcessor { return &TCPProcessor{ conns: map[network.ConnectionTuple]connectionState{}, } @@ -106,7 +108,7 @@ func checkInvalidTCP(tcp *layers.TCP) bool { return false } -func (t *TCPProcessor) updateSynFlag(conn *network.ConnectionStats, st *connectionState, pktType uint8, tcp *layers.TCP, payloadLen uint16) { //nolint:revive // TODO +func (t *TCPProcessor) updateSynFlag(conn *network.ConnectionStats, st *connectionState, pktType uint8, tcp *layers.TCP, _payloadLen uint16) { if tcp.RST { return } @@ -116,22 +118,22 @@ func (t *TCPProcessor) updateSynFlag(conn *network.ConnectionStats, st *connecti } else { st.remoteSynState.update(tcp.SYN, tcp.ACK) } - // if any SynState has progressed, move to attempted - if st.tcpState == ConnStatClosed && (st.localSynState != SynStateNone || st.remoteSynState != SynStateNone) { - st.tcpState = ConnStatAttempted + // if any synState has progressed, move to attempted + if st.tcpState == connStatClosed && (st.localSynState != synStateNone || st.remoteSynState != synStateNone) { + st.tcpState = connStatAttempted updateConnStatsForOpen(conn) } // if both synStates are ack'd, move to established - if st.tcpState == ConnStatAttempted && st.localSynState == SynStateAcked && st.remoteSynState == SynStateAcked { - st.tcpState = ConnStatEstablished + if st.tcpState == connStatAttempted && st.localSynState == synStateAcked && st.remoteSynState == synStateAcked { + st.tcpState = connStatEstablished conn.Monotonic.TCPEstablished++ } } -// updateTcpStats is designed to mirror the stat tracking in the windows driver's handleFlowProtocolTcp +// updateTCPStats is designed to mirror the stat tracking in the windows driver's handleFlowProtocolTcp // https://github.com/DataDog/datadog-windows-filter/blob/d7560d83eb627117521d631a4c05cd654a01987e/ddfilter/flow/flow_tcp.c#L91 -func (t *TCPProcessor) updateTcpStats(conn *network.ConnectionStats, st *connectionState, pktType uint8, tcp *layers.TCP, payloadLen uint16, timestampNs uint64) { //nolint:revive // TODO +func (t *TCPProcessor) updateTCPStats(conn *network.ConnectionStats, st *connectionState, pktType uint8, tcp *layers.TCP, payloadLen uint16, timestampNs uint64) { nextSeq := calcNextSeq(tcp, payloadLen) if pktType == unix.PACKET_OUTGOING { @@ -152,8 +154,8 @@ func (t *TCPProcessor) updateTcpStats(conn *network.ConnectionStats, st *connect ackOutdated := !st.hasLocalAck || isSeqBefore(st.lastLocalAck, tcp.Ack) if tcp.ACK && ackOutdated { - // wait until data comes in via SynStateAcked - if st.hasLocalAck && st.remoteSynState == SynStateAcked { + // wait until data comes in via synStateAcked + if st.hasLocalAck && st.remoteSynState == synStateAcked { ackDiff := tcp.Ack - st.lastLocalAck isFinAck := st.hasRemoteFin && tcp.Ack == st.remoteFinSeq if isFinAck { @@ -199,31 +201,31 @@ func (t *TCPProcessor) updateFinFlag(conn *network.ConnectionStats, st *connecti // if both fins have been sent and ack'd, then mark the connection closed localFinIsAcked := st.hasLocalFin && isSeqBeforeEq(st.localFinSeq, st.lastRemoteAck) remoteFinIsAcked := st.hasRemoteFin && isSeqBeforeEq(st.remoteFinSeq, st.lastLocalAck) - if st.tcpState == ConnStatEstablished && localFinIsAcked && remoteFinIsAcked { + if st.tcpState == connStatEstablished && localFinIsAcked && remoteFinIsAcked { *st = connectionState{ - tcpState: ConnStatClosed, + tcpState: connStatClosed, } conn.Monotonic.TCPClosed++ updateConnStatsForClose(conn) } } -func (t *TCPProcessor) updateRstFlag(conn *network.ConnectionStats, st *connectionState, pktType uint8, tcp *layers.TCP, payloadLen uint16) { //nolint:revive // TODO - if !tcp.RST || st.tcpState == ConnStatClosed { +func (t *TCPProcessor) updateRstFlag(conn *network.ConnectionStats, st *connectionState, _pktType uint8, tcp *layers.TCP, _payloadLen uint16) { + if !tcp.RST || st.tcpState == connStatClosed { return } reason := syscall.ECONNRESET - if st.tcpState == ConnStatAttempted { + if st.tcpState == connStatAttempted { reason = syscall.ECONNREFUSED } conn.TCPFailures[uint16(reason)]++ - if st.tcpState == ConnStatEstablished { + if st.tcpState == connStatEstablished { conn.Monotonic.TCPClosed++ } *st = connectionState{ - tcpState: ConnStatClosed, + tcpState: connStatClosed, } updateConnStatsForClose(conn) } @@ -251,7 +253,7 @@ func (t *TCPProcessor) Process(conn *network.ConnectionStats, timestampNs uint64 st := t.conns[conn.ConnectionTuple] t.updateSynFlag(conn, &st, pktType, tcp, payloadLen) - t.updateTcpStats(conn, &st, pktType, tcp, payloadLen, timestampNs) + t.updateTCPStats(conn, &st, pktType, tcp, payloadLen, timestampNs) t.updateFinFlag(conn, &st, pktType, tcp, payloadLen) t.updateRstFlag(conn, &st, pktType, tcp, payloadLen) diff --git a/pkg/network/tracer/connection/ebpfless/tcp_processor_retransmit_test.go b/pkg/network/tracer/connection/ebpfless/tcp_processor_retransmit_test.go index ecfdb22e1fc72..9082872964c42 100644 --- a/pkg/network/tracer/connection/ebpfless/tcp_processor_retransmit_test.go +++ b/pkg/network/tracer/connection/ebpfless/tcp_processor_retransmit_test.go @@ -67,7 +67,7 @@ func TestAllRetransmitsOutgoing(t *testing.T) { t.Run("retransmit SYN", func(t *testing.T) { traffic := retransmitNth(basicHandshake, 0) - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runPkts(traffic) require.Empty(t, f.conn.TCPFailures) @@ -77,7 +77,7 @@ func TestAllRetransmitsOutgoing(t *testing.T) { t.Run("retransmit data", func(t *testing.T) { traffic := retransmitNth(basicHandshake, 3) - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runPkts(traffic) require.Empty(t, f.conn.TCPFailures) @@ -87,7 +87,7 @@ func TestAllRetransmitsOutgoing(t *testing.T) { t.Run("retransmit FIN", func(t *testing.T) { traffic := retransmitNth(basicHandshake, 8) - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runPkts(traffic) require.Empty(t, f.conn.TCPFailures) @@ -130,7 +130,7 @@ func TestAllRetransmitsIncoming(t *testing.T) { t.Run("retransmit SYNACK", func(t *testing.T) { traffic := retransmitNth(basicHandshake, 1) - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runPkts(traffic) require.Empty(t, f.conn.TCPFailures) @@ -140,7 +140,7 @@ func TestAllRetransmitsIncoming(t *testing.T) { t.Run("retransmit data", func(t *testing.T) { traffic := retransmitNth(basicHandshake, 5) - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runPkts(traffic) require.Empty(t, f.conn.TCPFailures) @@ -150,7 +150,7 @@ func TestAllRetransmitsIncoming(t *testing.T) { t.Run("retransmit FIN", func(t *testing.T) { traffic := retransmitNth(basicHandshake, 6) - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runPkts(traffic) require.Empty(t, f.conn.TCPFailures) @@ -171,16 +171,16 @@ func TestRstTwice(t *testing.T) { pb.outgoing(0, 1, 1, RST|ACK), } - expectedClientStates := []ConnStatus{ - ConnStatAttempted, - ConnStatAttempted, - ConnStatEstablished, + expectedClientStates := []connStatus{ + connStatAttempted, + connStatAttempted, + connStatEstablished, // reset - ConnStatClosed, - ConnStatClosed, + connStatClosed, + connStatClosed, } - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runAgainstState(basicHandshake, expectedClientStates) // should count as a single failure @@ -220,7 +220,7 @@ func TestKeepAlivePacketsArentRetransmits(t *testing.T) { pb.outgoing(0, 2, 2, ACK), } - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runPkts(basicHandshake) require.Empty(t, f.conn.TCPFailures) @@ -255,7 +255,7 @@ func TestRetransmitMultipleSegments(t *testing.T) { pb.outgoing(0, 2, 2, ACK), } - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runPkts(traffic) require.Empty(t, f.conn.TCPFailures) diff --git a/pkg/network/tracer/connection/ebpfless/tcp_processor_rtt_test.go b/pkg/network/tracer/connection/ebpfless/tcp_processor_rtt_test.go index 7ff2eca99a352..356d1d1a9712b 100644 --- a/pkg/network/tracer/connection/ebpfless/tcp_processor_rtt_test.go +++ b/pkg/network/tracer/connection/ebpfless/tcp_processor_rtt_test.go @@ -101,7 +101,7 @@ func TestTcpProcessorRtt(t *testing.T) { // t=300 us, for a round trip of 100us synack.timestampNs = 300 * 1000 - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runPkt(syn) // round trip has not completed yet @@ -123,7 +123,7 @@ func TestTcpProcessorRttRetransmit(t *testing.T) { // t=300 us, for a round trip of 100us synack.timestampNs = 300 * 1000 - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runPkt(syn) // round trip has not completed yet diff --git a/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go b/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go index a558f073dc4ec..8656a73463d36 100644 --- a/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go +++ b/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go @@ -21,14 +21,14 @@ import ( "github.com/DataDog/datadog-agent/pkg/process/util" ) -var localhost net.IP = net.ParseIP("127.0.0.1") //nolint:revive // TODO -var remoteIP net.IP = net.ParseIP("12.34.56.78") //nolint:revive // TODO +var localhost = net.ParseIP("127.0.0.1") +var remoteIP = net.ParseIP("12.34.56.78") const ( minIhl = 5 defaultLocalPort = 12345 defaultRemotePort = 8080 - defaultNsId = 123 //nolint:revive // TODO + defaultNsID = 123 ) const ( @@ -79,7 +79,7 @@ type testCapture struct { } // TODO can this be merged with the logic creating scratchConns in ebpfless tracer? -func makeTcpStates(synPkt testCapture) *network.ConnectionStats { //nolint:revive // TODO +func makeTCPStates(synPkt testCapture) *network.ConnectionStats { var family network.ConnectionFamily var srcIP, dstIP net.IP if synPkt.ipv4 != nil && synPkt.ipv6 != nil { @@ -109,8 +109,8 @@ func makeTcpStates(synPkt testCapture) *network.ConnectionStats { //nolint:reviv ConnectionTuple: network.ConnectionTuple{ Source: util.AddressFromNetIP(srcIP), Dest: util.AddressFromNetIP(dstIP), - Pid: 0, // @stu we can't know this right - NetNS: defaultNsId, + Pid: 0, // packet capture does not have PID information. + NetNS: defaultNsID, SPort: uint16(synPkt.tcp.SrcPort), DPort: uint16(synPkt.tcp.DstPort), Type: network.TCP, @@ -165,7 +165,7 @@ func (pb packetBuilder) outgoing(payloadLen uint16, relSeq, relAck uint32, flags } } -func newTcpTestFixture(t *testing.T) *tcpTestFixture { //nolint:revive // TODO +func newTCPTestFixture(t *testing.T) *tcpTestFixture { return &tcpTestFixture{ t: t, tcp: NewTCPProcessor(), @@ -175,7 +175,7 @@ func newTcpTestFixture(t *testing.T) *tcpTestFixture { //nolint:revive // TODO func (fixture *tcpTestFixture) runPkt(pkt testCapture) { if fixture.conn == nil { - fixture.conn = makeTcpStates(pkt) + fixture.conn = makeTCPStates(pkt) } err := fixture.tcp.Process(fixture.conn, pkt.timestampNs, pkt.pktType, pkt.ipv4, pkt.ipv6, pkt.tcp) require.NoError(fixture.t, err) @@ -187,18 +187,18 @@ func (fixture *tcpTestFixture) runPkts(packets []testCapture) { //nolint:unused } } -func (fixture *tcpTestFixture) runAgainstState(packets []testCapture, expected []ConnStatus) { +func (fixture *tcpTestFixture) runAgainstState(packets []testCapture, expected []connStatus) { require.Equal(fixture.t, len(packets), len(expected), "packet length didn't match expected states length") var expectedStrs []string var actualStrs []string for i, pkt := range packets { - expectedStrs = append(expectedStrs, LabelForState(expected[i])) + expectedStrs = append(expectedStrs, labelForState(expected[i])) fixture.runPkt(pkt) connTuple := fixture.conn.ConnectionTuple actual := fixture.tcp.conns[connTuple].tcpState - actualStrs = append(actualStrs, LabelForState(actual)) + actualStrs = append(actualStrs, labelForState(actual)) } require.Equal(fixture.t, expectedStrs, actualStrs) } @@ -223,23 +223,23 @@ func testBasicHandshake(t *testing.T, pb packetBuilder) { pb.incoming(0, 347, 125, ACK), } - expectedClientStates := []ConnStatus{ - ConnStatAttempted, - ConnStatAttempted, + expectedClientStates := []connStatus{ + connStatAttempted, + connStatAttempted, // three-way handshake finishes here - ConnStatEstablished, - ConnStatEstablished, - ConnStatEstablished, - ConnStatEstablished, + connStatEstablished, + connStatEstablished, + connStatEstablished, + connStatEstablished, // passive close begins here - ConnStatEstablished, - ConnStatEstablished, - ConnStatEstablished, + connStatEstablished, + connStatEstablished, + connStatEstablished, // final FIN was ack'd - ConnStatClosed, + connStatClosed, } - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runAgainstState(basicHandshake, expectedClientStates) require.Empty(t, f.conn.TCPFailures) @@ -292,22 +292,22 @@ func testReversedBasicHandshake(t *testing.T, pb packetBuilder) { pb.outgoing(0, 347, 125, ACK), } - expectedClientStates := []ConnStatus{ - ConnStatAttempted, - ConnStatAttempted, + expectedClientStates := []connStatus{ + connStatAttempted, + connStatAttempted, // three-way handshake finishes here - ConnStatEstablished, - ConnStatEstablished, - ConnStatEstablished, - ConnStatEstablished, + connStatEstablished, + connStatEstablished, + connStatEstablished, + connStatEstablished, // active close begins here - ConnStatEstablished, - ConnStatEstablished, - ConnStatEstablished, - ConnStatClosed, + connStatEstablished, + connStatEstablished, + connStatEstablished, + connStatClosed, } - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runAgainstState(basicHandshake, expectedClientStates) require.Empty(t, f.conn.TCPFailures) @@ -359,21 +359,21 @@ func testCloseWaitState(t *testing.T, pb packetBuilder) { pb.incoming(0, 347, 224+42+1, ACK), } - expectedClientStates := []ConnStatus{ - ConnStatAttempted, - ConnStatAttempted, + expectedClientStates := []connStatus{ + connStatAttempted, + connStatAttempted, // three-way handshake finishes here - ConnStatEstablished, - ConnStatEstablished, + connStatEstablished, + connStatEstablished, // passive close begins here - ConnStatEstablished, - ConnStatEstablished, - ConnStatEstablished, - ConnStatEstablished, - ConnStatClosed, + connStatEstablished, + connStatEstablished, + connStatEstablished, + connStatEstablished, + connStatClosed, } - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runAgainstState(basicHandshake, expectedClientStates) require.Empty(t, f.conn.TCPFailures) @@ -427,23 +427,23 @@ func testFinWait2State(t *testing.T, pb packetBuilder) { pb.outgoing(0, 347, 225, ACK), } - expectedClientStates := []ConnStatus{ - ConnStatAttempted, - ConnStatAttempted, + expectedClientStates := []connStatus{ + connStatAttempted, + connStatAttempted, // three-way handshake finishes here - ConnStatEstablished, - ConnStatEstablished, - ConnStatEstablished, - ConnStatEstablished, + connStatEstablished, + connStatEstablished, + connStatEstablished, + connStatEstablished, // active close begins here - ConnStatEstablished, - ConnStatEstablished, - ConnStatEstablished, - ConnStatEstablished, - ConnStatClosed, + connStatEstablished, + connStatEstablished, + connStatEstablished, + connStatEstablished, + connStatClosed, } - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runAgainstState(basicHandshake, expectedClientStates) require.Empty(t, f.conn.TCPFailures) @@ -486,17 +486,17 @@ func TestImmediateFin(t *testing.T) { pb.outgoing(0, 2, 2, ACK), } - expectedClientStates := []ConnStatus{ - ConnStatAttempted, - ConnStatAttempted, - ConnStatEstablished, + expectedClientStates := []connStatus{ + connStatAttempted, + connStatAttempted, + connStatEstablished, // active close begins here - ConnStatEstablished, - ConnStatEstablished, - ConnStatClosed, + connStatEstablished, + connStatEstablished, + connStatClosed, } - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runAgainstState(basicHandshake, expectedClientStates) require.Empty(t, f.conn.TCPFailures) @@ -520,12 +520,12 @@ func TestConnRefusedSyn(t *testing.T) { pb.outgoing(0, 0, 0, RST|ACK), } - expectedClientStates := []ConnStatus{ - ConnStatAttempted, - ConnStatClosed, + expectedClientStates := []connStatus{ + connStatAttempted, + connStatClosed, } - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runAgainstState(basicHandshake, expectedClientStates) require.Equal(t, map[uint16]uint32{ @@ -552,13 +552,13 @@ func TestConnRefusedSynAck(t *testing.T) { pb.outgoing(0, 0, 0, RST|ACK), } - expectedClientStates := []ConnStatus{ - ConnStatAttempted, - ConnStatAttempted, - ConnStatClosed, + expectedClientStates := []connStatus{ + connStatAttempted, + connStatAttempted, + connStatClosed, } - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runAgainstState(basicHandshake, expectedClientStates) require.Equal(t, map[uint16]uint32{ @@ -587,15 +587,15 @@ func TestConnReset(t *testing.T) { pb.outgoing(0, 1, 1, RST|ACK), } - expectedClientStates := []ConnStatus{ - ConnStatAttempted, - ConnStatAttempted, - ConnStatEstablished, + expectedClientStates := []connStatus{ + connStatAttempted, + connStatAttempted, + connStatEstablished, // reset - ConnStatClosed, + connStatClosed, } - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runAgainstState(basicHandshake, expectedClientStates) require.Equal(t, map[uint16]uint32{ @@ -628,23 +628,23 @@ func TestConnectTwice(t *testing.T) { pb.outgoing(0, 2, 2, ACK), } - expectedClientStates := []ConnStatus{ - ConnStatAttempted, - ConnStatAttempted, - ConnStatEstablished, + expectedClientStates := []connStatus{ + connStatAttempted, + connStatAttempted, + connStatEstablished, // active close begins here - ConnStatEstablished, - ConnStatEstablished, - ConnStatClosed, + connStatEstablished, + connStatEstablished, + connStatClosed, } - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runAgainstState(basicHandshake, expectedClientStates) state := f.tcp.conns[f.conn.ConnectionTuple] // make sure the TCP state was erased after the connection was closed require.Equal(t, connectionState{ - tcpState: ConnStatClosed, + tcpState: connStatClosed, }, state) // second connection here @@ -677,18 +677,18 @@ func TestSimultaneousClose(t *testing.T) { pb.incoming(0, 2, 2, ACK), } - expectedClientStates := []ConnStatus{ - ConnStatAttempted, - ConnStatAttempted, - ConnStatEstablished, + expectedClientStates := []connStatus{ + connStatAttempted, + connStatAttempted, + connStatEstablished, // active close begins here - ConnStatEstablished, - ConnStatEstablished, - ConnStatEstablished, - ConnStatClosed, + connStatEstablished, + connStatEstablished, + connStatEstablished, + connStatClosed, } - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runAgainstState(basicHandshake, expectedClientStates) require.Empty(t, f.conn.TCPFailures) @@ -720,18 +720,18 @@ func TestUnusualAckSyn(t *testing.T) { pb.outgoing(0, 2, 2, ACK), } - expectedClientStates := []ConnStatus{ - ConnStatAttempted, - ConnStatAttempted, - ConnStatAttempted, - ConnStatEstablished, + expectedClientStates := []connStatus{ + connStatAttempted, + connStatAttempted, + connStatAttempted, + connStatEstablished, // active close begins here - ConnStatEstablished, - ConnStatEstablished, - ConnStatClosed, + connStatEstablished, + connStatEstablished, + connStatClosed, } - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) f.runAgainstState(basicHandshake, expectedClientStates) require.Empty(t, f.conn.TCPFailures) @@ -752,7 +752,7 @@ func TestUnusualAckSyn(t *testing.T) { func TestOpenCloseConn(t *testing.T) { pb := newPacketBuilder(lowerSeq, higherSeq) - f := newTcpTestFixture(t) + f := newTCPTestFixture(t) // send a SYN packet to kick things off f.runPkt(pb.incoming(0, 0, 0, SYN)) diff --git a/pkg/network/tracer/connection/ebpfless/tcp_utils.go b/pkg/network/tracer/connection/ebpfless/tcp_utils.go index 3a02ea3b09e29..1969fd85a5bc1 100644 --- a/pkg/network/tracer/connection/ebpfless/tcp_utils.go +++ b/pkg/network/tracer/connection/ebpfless/tcp_utils.go @@ -37,12 +37,12 @@ var statsTelemetry = struct { const tcpSeqMidpoint = 0x80000000 -type ConnStatus uint8 //nolint:revive // TODO +type connStatus uint8 const ( - ConnStatClosed ConnStatus = iota //nolint:revive // TODO - ConnStatAttempted //nolint:revive // TODO - ConnStatEstablished //nolint:revive // TODO + connStatClosed connStatus = iota + connStatAttempted + connStatEstablished ) var connStatusLabels = []string{ @@ -51,32 +51,32 @@ var connStatusLabels = []string{ "Established", } -type SynState uint8 //nolint:revive // TODO +type synState uint8 const ( - SynStateNone SynState = iota //nolint:revive // TODO - SynStateSent //nolint:revive // TODO - SynStateAcked //nolint:revive // TODO + synStateNone synState = iota + synStateSent + synStateAcked ) -func (ss *SynState) update(synFlag, ackFlag bool) { +func (ss *synState) update(synFlag, ackFlag bool) { // for simplicity, this does not consider the sequence number of the SYNs and ACKs. // if these matter in the future, change this to store SYN seq numbers - if *ss == SynStateNone && synFlag { - *ss = SynStateSent + if *ss == synStateNone && synFlag { + *ss = synStateSent } - if *ss == SynStateSent && ackFlag { - *ss = SynStateAcked + if *ss == synStateSent && ackFlag { + *ss = synStateAcked } // if we see ACK'd traffic but missed the SYN, assume the connection started before // the datadog-agent starts. - if *ss == SynStateNone && ackFlag { + if *ss == synStateNone && ackFlag { statsTelemetry.missedTCPConnections.Inc() - *ss = SynStateAcked + *ss = synStateAcked } } -func LabelForState(tcpState ConnStatus) string { //nolint:revive // TODO +func labelForState(tcpState connStatus) string { idx := int(tcpState) if idx < len(connStatusLabels) { return connStatusLabels[idx] @@ -105,7 +105,7 @@ func debugPacketDir(pktType uint8) string { } } -func debugTcpFlags(tcp *layers.TCP) string { //nolint:revive // TODO +func debugTCPFlags(tcp *layers.TCP) string { var flags []string if tcp.RST { flags = append(flags, "RST") @@ -123,5 +123,5 @@ func debugTcpFlags(tcp *layers.TCP) string { //nolint:revive // TODO } func debugPacketInfo(pktType uint8, tcp *layers.TCP, payloadLen uint16) string { - return fmt.Sprintf("pktType=%+v ports=(%+v, %+v) size=%d seq=%+v ack=%+v flags=%s", debugPacketDir(pktType), uint16(tcp.SrcPort), uint16(tcp.DstPort), payloadLen, tcp.Seq, tcp.Ack, debugTcpFlags(tcp)) + return fmt.Sprintf("pktType=%+v ports=(%+v, %+v) size=%d seq=%+v ack=%+v flags=%s", debugPacketDir(pktType), uint16(tcp.SrcPort), uint16(tcp.DstPort), payloadLen, tcp.Seq, tcp.Ack, debugTCPFlags(tcp)) } From 12815d619573492e1fed6ed7461059beb9dfcc60 Mon Sep 17 00:00:00 2001 From: Branden Clark Date: Fri, 6 Dec 2024 11:59:19 -0500 Subject: [PATCH 034/303] Build Windows FIPS Agent containers (#31727) --- .gitlab/container_build/docker_windows.yml | 16 ++ .../container_build/docker_windows_agent7.yml | 20 ++- .../dev_container_deploy/docker_windows.yml | 155 ++++++------------ Dockerfiles/agent/install-fips.ps1 | 19 ++- Dockerfiles/agent/windows/amd64/Dockerfile | 1 + 5 files changed, 101 insertions(+), 110 deletions(-) diff --git a/.gitlab/container_build/docker_windows.yml b/.gitlab/container_build/docker_windows.yml index 5beeea220c02e..f2402de687d30 100644 --- a/.gitlab/container_build/docker_windows.yml +++ b/.gitlab/container_build/docker_windows.yml @@ -62,5 +62,21 @@ BUILD_ARG: "--build-arg BASE_IMAGE=mcr.microsoft.com/powershell:windowsservercore-${VARIANT} --build-arg WITH_JMX=${WITH_JMX} --build-arg VARIANT=${VARIANT} --build-arg INSTALL_INFO=core-${VARIANT}" SERVERCORE: "-servercore" +.docker_build_fips_agent7_windows_common: + extends: + - .docker_build_agent7_windows_common + needs: + ["windows_msi_and_bosh_zip_x64-a7-fips", "build_windows_container_entrypoint"] + variables: + AGENT_ZIP: "datadog-fips-agent-7*-x86_64.zip" + BUILD_ARG: "--build-arg BASE_IMAGE=mcr.microsoft.com/powershell:lts-nanoserver-${VARIANT} --build-arg WITH_JMX=${WITH_JMX} --build-arg WITH_FIPS=true --build-arg VARIANT=${VARIANT} --build-arg INSTALL_INFO=nano-${VARIANT}-fips" + +.docker_build_fips_agent7_windows_servercore_common: + extends: + - .docker_build_fips_agent7_windows_common + variables: + BUILD_ARG: "--build-arg BASE_IMAGE=mcr.microsoft.com/powershell:windowsservercore-${VARIANT} --build-arg WITH_JMX=${WITH_JMX} --build-arg WITH_FIPS=true --build-arg VARIANT=${VARIANT} --build-arg INSTALL_INFO=core-${VARIANT}-fips" + SERVERCORE: "-servercore" + include: - .gitlab/container_build/docker_windows_agent7.yml diff --git a/.gitlab/container_build/docker_windows_agent7.yml b/.gitlab/container_build/docker_windows_agent7.yml index e8bf47cbba812..4a3c9393d5ba1 100644 --- a/.gitlab/container_build/docker_windows_agent7.yml +++ b/.gitlab/container_build/docker_windows_agent7.yml @@ -21,7 +21,6 @@ docker_build_agent7_windows2022_jmx: extends: - .docker_build_agent7_windows_common tags: ["runner:windows-docker", "windowsversion:2022"] - needs: ["windows_msi_and_bosh_zip_x64-a7", "build_windows_container_entrypoint"] variables: VARIANT: ltsc2022 TAG_SUFFIX: -7-jmx @@ -67,8 +66,25 @@ docker_build_agent7_windows2022_core_jmx: extends: - .docker_build_agent7_windows_servercore_common tags: ["runner:windows-docker", "windowsversion:2022"] - needs: ["windows_msi_and_bosh_zip_x64-a7", "build_windows_container_entrypoint"] variables: VARIANT: ltsc2022 TAG_SUFFIX: -7-jmx WITH_JMX: "true" + +docker_build_fips_agent7_windows2022_core: + extends: + - .docker_build_fips_agent7_windows_servercore_common + tags: ["runner:windows-docker", "windowsversion:2022"] + variables: + VARIANT: ltsc2022 + TAG_SUFFIX: "-7-fips" + WITH_JMX: "false" + +docker_build_fips_agent7_windows2022_core_jmx: + extends: + - .docker_build_fips_agent7_windows_servercore_common + tags: ["runner:windows-docker", "windowsversion:2022"] + variables: + VARIANT: ltsc2022 + TAG_SUFFIX: -7-fips-jmx + WITH_JMX: "true" diff --git a/.gitlab/dev_container_deploy/docker_windows.yml b/.gitlab/dev_container_deploy/docker_windows.yml index 734c81cacd36c..c219f4b7a44ec 100644 --- a/.gitlab/dev_container_deploy/docker_windows.yml +++ b/.gitlab/dev_container_deploy/docker_windows.yml @@ -2,11 +2,9 @@ include: - .gitlab/common/container_publish_job_templates.yml -dev_branch-a7-windows: +.dev_a7-windows-common: extends: .docker_publish_job_definition stage: dev_container_deploy - rules: - !reference [.manual] needs: - docker_build_agent7_windows1809 - docker_build_agent7_windows1809_jmx @@ -23,16 +21,16 @@ dev_branch-a7-windows: # Multi-arch - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7" IMG_SOURCES: "%BASE%-win1809-amd64,%BASE%-winltsc2022-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-win + IMG_DESTINATIONS: agent-dev:${IMG_DESTINATION_SLUG}-py3-win - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx" IMG_SOURCES: "%BASE%-win1809-amd64,%BASE%-winltsc2022-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-jmx-win + IMG_DESTINATIONS: agent-dev:${IMG_DESTINATION_SLUG}-py3-jmx-win - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7" IMG_SOURCES: "%BASE%-win1809-servercore-amd64,%BASE%-winltsc2022-servercore-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-win-servercore + IMG_DESTINATIONS: agent-dev:${IMG_DESTINATION_SLUG}-py3-win-servercore - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx" IMG_SOURCES: "%BASE%-win1809-servercore-amd64,%BASE%-winltsc2022-servercore-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-jmx-win-servercore + IMG_DESTINATIONS: agent-dev:${IMG_DESTINATION_SLUG}-py3-jmx-win-servercore # ltsc2019 - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7" IMG_SOURCES: "%BASE%-win1809-amd64" @@ -60,118 +58,63 @@ dev_branch-a7-windows: IMG_SOURCES: "%BASE%-winltsc2022-servercore-amd64" IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-jmx-win-servercore-ltsc2022 +dev_branch-a7-windows: + extends: .dev_a7-windows-common + rules: + !reference [.manual] + variables: + IMG_DESTINATION_SLUG: ${CI_COMMIT_REF_SLUG} + dev_master-a7-windows: - extends: .docker_publish_job_definition - stage: dev_container_deploy + extends: .dev_a7-windows-common rules: !reference [.on_main] - needs: - - docker_build_agent7_windows1809 - - docker_build_agent7_windows1809_jmx - - docker_build_agent7_windows1809_core - - docker_build_agent7_windows1809_core_jmx - - docker_build_agent7_windows2022 - - docker_build_agent7_windows2022_jmx - - docker_build_agent7_windows2022_core - - docker_build_agent7_windows2022_core_jmx variables: - IMG_REGISTRIES: dev - parallel: - matrix: - # Multi-arch - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7" - IMG_SOURCES: "%BASE%-win1809-amd64,%BASE%-winltsc2022-amd64" - IMG_DESTINATIONS: agent-dev:master-py3-win - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx" - IMG_SOURCES: "%BASE%-win1809-amd64,%BASE%-winltsc2022-amd64" - IMG_DESTINATIONS: agent-dev:master-py3-jmx-win - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7" - IMG_SOURCES: "%BASE%-win1809-servercore-amd64,%BASE%-winltsc2022-servercore-amd64" - IMG_DESTINATIONS: agent-dev:master-py3-win-servercore - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx" - IMG_SOURCES: "%BASE%-win1809-servercore-amd64,%BASE%-winltsc2022-servercore-amd64" - IMG_DESTINATIONS: agent-dev:master-py3-jmx-win-servercore - # ltsc2019 - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7" - IMG_SOURCES: "%BASE%-win1809-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-win-ltsc2019 - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx" - IMG_SOURCES: "%BASE%-win1809-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-jmx-win-ltsc2019 - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7" - IMG_SOURCES: "%BASE%-win1809-servercore-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-win-servercore-ltsc2019 - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx" - IMG_SOURCES: "%BASE%-win1809-servercore-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-jmx-win-servercore-ltsc2019 - # ltsc2022 - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7" - IMG_SOURCES: "%BASE%-winltsc2022-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-win-ltsc2022 - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx" - IMG_SOURCES: "%BASE%-winltsc2022-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-jmx-win-ltsc2022 - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7" - IMG_SOURCES: "%BASE%-winltsc2022-servercore-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-win-servercore-ltsc2022 - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx" - IMG_SOURCES: "%BASE%-winltsc2022-servercore-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-jmx-win-servercore-ltsc2022 + IMG_DESTINATION_SLUG: master dev_nightly-a7-windows: - extends: .docker_publish_job_definition - stage: dev_container_deploy + extends: .dev_a7-windows-common rules: !reference [.on_deploy_nightly_repo_branch] + variables: + IMG_DESTINATION_SLUG: nightly + +.dev_fips-a7-windows-common: + extends: .docker_publish_job_definition + stage: dev_container_deploy needs: - - docker_build_agent7_windows1809 - - docker_build_agent7_windows1809_jmx - - docker_build_agent7_windows1809_core - - docker_build_agent7_windows1809_core_jmx - - docker_build_agent7_windows2022 - - docker_build_agent7_windows2022_jmx - - docker_build_agent7_windows2022_core - - docker_build_agent7_windows2022_core_jmx + - docker_build_fips_agent7_windows2022_core + - docker_build_fips_agent7_windows2022_core_jmx variables: IMG_REGISTRIES: dev + # Only publish ltsc2022 servercore for now, that's all that's used by the integrations testing parallel: matrix: - # Multi-arch - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7" - IMG_SOURCES: "%BASE%-win1809-amd64,%BASE%-winltsc2022-amd64" - IMG_DESTINATIONS: agent-dev:nightly-${CI_COMMIT_SHORT_SHA}-py3-win - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx" - IMG_SOURCES: "%BASE%-win1809-amd64,%BASE%-winltsc2022-amd64" - IMG_DESTINATIONS: agent-dev:nightly-${CI_COMMIT_SHORT_SHA}-py3-jmx-win - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7" - IMG_SOURCES: "%BASE%-win1809-servercore-amd64,%BASE%-winltsc2022-servercore-amd64" - IMG_DESTINATIONS: agent-dev:nightly-${CI_COMMIT_SHORT_SHA}-py3-win-servercore - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx" - IMG_SOURCES: "%BASE%-win1809-servercore-amd64,%BASE%-winltsc2022-servercore-amd64" - IMG_DESTINATIONS: agent-dev:nightly-${CI_COMMIT_SHORT_SHA}-py3-jmx-win-servercore - # ltsc2019 - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7" - IMG_SOURCES: "%BASE%-win1809-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-win-ltsc2019 - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx" - IMG_SOURCES: "%BASE%-win1809-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-jmx-win-ltsc2019 - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7" - IMG_SOURCES: "%BASE%-win1809-servercore-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-win-servercore-ltsc2019 - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx" - IMG_SOURCES: "%BASE%-win1809-servercore-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-jmx-win-servercore-ltsc2019 # ltsc2022 - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7" - IMG_SOURCES: "%BASE%-winltsc2022-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-win-ltsc2022 - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx" - IMG_SOURCES: "%BASE%-winltsc2022-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-jmx-win-ltsc2022 - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7" + - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-fips" IMG_SOURCES: "%BASE%-winltsc2022-servercore-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-win-servercore-ltsc2022 - - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx" + IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-fips-win-servercore-ltsc2022 + - IMG_VARIABLES: "BASE=${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-fips-jmx" IMG_SOURCES: "%BASE%-winltsc2022-servercore-amd64" - IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-jmx-win-servercore-ltsc2022 + IMG_DESTINATIONS: agent-dev:${CI_COMMIT_REF_SLUG}-py3-fips-jmx-win-servercore-ltsc2022 + +dev_branch-fips-a7-windows: + extends: .dev_fips-a7-windows-common + rules: + !reference [.manual] + variables: + IMG_DESTINATION_SLUG: ${CI_COMMIT_REF_SLUG} + +dev_master-fips-a7-windows: + extends: .dev_fips-a7-windows-common + rules: + !reference [.on_main] + variables: + IMG_DESTINATION_SLUG: master + +dev_nightly-fips-a7-windows: + extends: .dev_fips-a7-windows-common + rules: + !reference [.on_deploy_nightly_repo_branch] + variables: + IMG_DESTINATION_SLUG: nightly diff --git a/Dockerfiles/agent/install-fips.ps1 b/Dockerfiles/agent/install-fips.ps1 index 70be3b0da44bb..05324776e9dda 100644 --- a/Dockerfiles/agent/install-fips.ps1 +++ b/Dockerfiles/agent/install-fips.ps1 @@ -1,5 +1,16 @@ $ErrorActionPreference = 'Stop' +# Removes temporary files for FIPS setup +function Remove-TempFiles { + Remove-Item -Force -Recurse \fips-build +} + +if ("$env:WITH_FIPS" -ne "true") { + # If FIPS is not enabled, skip the FIPS setup + Remove-TempFiles + exit 0 +} + $maven_sha512 = '8BEAC8D11EF208F1E2A8DF0682B9448A9A363D2AD13CA74AF43705549E72E74C9378823BF689287801CBBFC2F6EA9596201D19CCACFDFB682EE8A2FF4C4418BA' if ("$env:WITH_JMX" -ne "false") { @@ -18,6 +29,10 @@ if ("$env:WITH_JMX" -ne "false") { if (!$?) { Write-Error ("BouncyCastle self check failed with exit code: {0}" -f $LASTEXITCODE) } + cd \ } -cd \ -Remove-Item -Force -Recurse \fips-build + +# TODO: Run openssl fipsinstall command here when embedded Python work is completed +# HERE + +Remove-TempFiles diff --git a/Dockerfiles/agent/windows/amd64/Dockerfile b/Dockerfiles/agent/windows/amd64/Dockerfile index 275801062f047..72c7060810838 100755 --- a/Dockerfiles/agent/windows/amd64/Dockerfile +++ b/Dockerfiles/agent/windows/amd64/Dockerfile @@ -7,6 +7,7 @@ ARG WITH_JMX="false" ARG VARIANT="unknown" ARG INSTALL_INFO="unknown" ARG GENERAL_ARTIFACTS_CACHE_BUCKET_URL +ARG WITH_FIPS="false" LABEL maintainer "Datadog " From af201abc9475d7f37e028f4c03709466a450de3f Mon Sep 17 00:00:00 2001 From: Joachim Date: Fri, 6 Dec 2024 18:00:36 +0000 Subject: [PATCH 035/303] Bugfix - recognize PDB as K8s resource (#31839) --- pkg/orchestrator/model/types.go | 35 +++++++++++++++++---------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/pkg/orchestrator/model/types.go b/pkg/orchestrator/model/types.go index b8046b5ab73af..28687af8c460e 100644 --- a/pkg/orchestrator/model/types.go +++ b/pkg/orchestrator/model/types.go @@ -192,33 +192,34 @@ func (n NodeType) String() string { // Orchestrator returns the orchestrator name for a node type. func (n NodeType) Orchestrator() string { switch n { - case K8sCluster, + case K8sCR, + K8sCRD, + K8sCluster, + K8sClusterRole, + K8sClusterRoleBinding, K8sCronJob, - K8sDeployment, K8sDaemonSet, + K8sDeployment, + K8sHorizontalPodAutoscaler, + K8sIngress, K8sJob, + K8sLimitRange, + K8sNamespace, + K8sNetworkPolicy, K8sNode, - K8sPod, - K8sReplicaSet, - K8sService, - K8sStatefulSet, K8sPersistentVolume, K8sPersistentVolumeClaim, + K8sPod, + K8sPodDisruptionBudget, + K8sReplicaSet, K8sRole, K8sRoleBinding, - K8sClusterRole, - K8sClusterRoleBinding, + K8sService, K8sServiceAccount, - K8sIngress, - K8sCRD, - K8sCR, - K8sNamespace, - K8sVerticalPodAutoscaler, - K8sHorizontalPodAutoscaler, - K8sNetworkPolicy, - K8sLimitRange, + K8sStatefulSet, K8sStorageClass, - K8sUnsetType: + K8sUnsetType, + K8sVerticalPodAutoscaler: return "k8s" case ECSTask: return "ecs" From 4b5c8b9270fe4626702db6d66298a060176251d0 Mon Sep 17 00:00:00 2001 From: Rey Abolofia Date: Fri, 6 Dec 2024 20:29:28 +0100 Subject: [PATCH 036/303] [serverless] Support trace context propagation for ALB target groups with MultiValueHeaders (#31542) Co-authored-by: quietsato --- pkg/serverless/trace/propagation/carriers.go | 10 ++++ .../trace/propagation/carriers_test.go | 51 ++++++++++++++++++- pkg/serverless/trace/propagation/extractor.go | 2 +- .../trace/propagation/extractor_test.go | 18 +++++++ pkg/serverless/trigger/events/events.go | 9 ++-- pkg/serverless/trigger/extractor.go | 13 ++++- pkg/serverless/trigger/extractor_test.go | 19 +++++++ 7 files changed, 114 insertions(+), 8 deletions(-) diff --git a/pkg/serverless/trace/propagation/carriers.go b/pkg/serverless/trace/propagation/carriers.go index 9cfa1255baabb..ee2062664780e 100644 --- a/pkg/serverless/trace/propagation/carriers.go +++ b/pkg/serverless/trace/propagation/carriers.go @@ -253,6 +253,16 @@ func headersCarrier(hdrs map[string]string) (tracer.TextMapReader, error) { return tracer.TextMapCarrier(hdrs), nil } +// headersOrMultiheadersCarrier returns the tracer.TextMapReader used to extract +// trace context from a Headers field of form map[string]string or MultiValueHeaders +// field of form map[string][]string. +func headersOrMultiheadersCarrier(hdrs map[string]string, multiHdrs map[string][]string) (tracer.TextMapReader, error) { + if len(hdrs) > 0 { + return headersCarrier(hdrs) + } + return tracer.HTTPHeadersCarrier(multiHdrs), nil +} + // extractTraceContextFromStepFunctionContext extracts the execution ARN, state name, and state entered time and uses them to generate Trace ID and Parent ID // The logic is based on the trace context conversion in Logs To Traces, dd-trace-py, dd-trace-js, etc. func extractTraceContextFromStepFunctionContext(event events.StepFunctionPayload) (*TraceContext, error) { diff --git a/pkg/serverless/trace/propagation/carriers_test.go b/pkg/serverless/trace/propagation/carriers_test.go index c58b294b74e39..16e382343f15f 100644 --- a/pkg/serverless/trace/propagation/carriers_test.go +++ b/pkg/serverless/trace/propagation/carriers_test.go @@ -816,7 +816,7 @@ func TestHeadersCarrier(t *testing.T) { for _, tc := range testcases { t.Run(tc.name, func(t *testing.T) { tm, err := headersCarrier(tc.event) - t.Logf("rawPayloadCarrier returned TextMapReader=%#v error=%#v", tm, err) + t.Logf("headersCarrier returned TextMapReader=%#v error=%#v", tm, err) assert.Equal(t, tc.expErr != nil, err != nil) if tc.expErr != nil && err != nil { assert.Equal(t, tc.expErr.Error(), err.Error()) @@ -826,6 +826,55 @@ func TestHeadersCarrier(t *testing.T) { } } +func TestHeadersOrMultiheadersCarrier(t *testing.T) { + testcases := []struct { + name string + hdrs map[string]string + multiHdrs map[string][]string + expMap map[string]string + }{ + { + name: "nil-map", + hdrs: headersMapNone, + multiHdrs: toMultiValueHeaders(headersMapNone), + expMap: headersMapEmpty, + }, + { + name: "empty-map", + hdrs: headersMapEmpty, + multiHdrs: toMultiValueHeaders(headersMapEmpty), + expMap: headersMapEmpty, + }, + { + name: "headers-and-multiheaders", + hdrs: headersMapDD, + multiHdrs: toMultiValueHeaders(headersMapW3C), + expMap: headersMapDD, + }, + { + name: "just-headers", + hdrs: headersMapDD, + multiHdrs: toMultiValueHeaders(headersMapEmpty), + expMap: headersMapDD, + }, + { + name: "just-multiheaders", + hdrs: headersMapEmpty, + multiHdrs: toMultiValueHeaders(headersMapW3C), + expMap: headersMapW3C, + }, + } + + for _, tc := range testcases { + t.Run(tc.name, func(t *testing.T) { + tm, err := headersOrMultiheadersCarrier(tc.hdrs, tc.multiHdrs) + t.Logf("headersOrMultiheadersCarrier returned TextMapReader=%#v error=%#v", tm, err) + assert.Nil(t, err) + assert.Equal(t, tc.expMap, getMapFromCarrier(tm)) + }) + } +} + func Test_stringToDdSpanId(t *testing.T) { type args struct { execArn string diff --git a/pkg/serverless/trace/propagation/extractor.go b/pkg/serverless/trace/propagation/extractor.go index d6c756ae1693f..d9fe9b883275c 100644 --- a/pkg/serverless/trace/propagation/extractor.go +++ b/pkg/serverless/trace/propagation/extractor.go @@ -112,7 +112,7 @@ func (e Extractor) extract(event interface{}) (*TraceContext, error) { case events.APIGatewayCustomAuthorizerRequestTypeRequest: carrier, err = headersCarrier(ev.Headers) case events.ALBTargetGroupRequest: - carrier, err = headersCarrier(ev.Headers) + carrier, err = headersOrMultiheadersCarrier(ev.Headers, ev.MultiValueHeaders) case events.LambdaFunctionURLRequest: carrier, err = headersCarrier(ev.Headers) case events.StepFunctionPayload: diff --git a/pkg/serverless/trace/propagation/extractor_test.go b/pkg/serverless/trace/propagation/extractor_test.go index 8cdd07c6d9027..cdcb4bd39b3ec 100644 --- a/pkg/serverless/trace/propagation/extractor_test.go +++ b/pkg/serverless/trace/propagation/extractor_test.go @@ -176,6 +176,14 @@ var ( } ) +func toMultiValueHeaders(headers map[string]string) map[string][]string { + mvh := make(map[string][]string) + for k, v := range headers { + mvh[k] = []string{v} + } + return mvh +} + func TestNilPropagator(t *testing.T) { var extractor Extractor tc, err := extractor.Extract([]byte(`{"headers":` + headersAll + `}`)) @@ -533,6 +541,16 @@ func TestExtractorExtract(t *testing.T) { expCtx: ddTraceContext, expNoErr: true, }, + { + name: "ALBTargetGroupRequestMultiValueHeaders", + events: []interface{}{ + events.ALBTargetGroupRequest{ + MultiValueHeaders: toMultiValueHeaders(headersMapAll), + }, + }, + expCtx: ddTraceContext, + expNoErr: true, + }, // events.LambdaFunctionURLRequest: { diff --git a/pkg/serverless/trigger/events/events.go b/pkg/serverless/trigger/events/events.go index 03e4760b82044..cb55ea9691ba7 100644 --- a/pkg/serverless/trigger/events/events.go +++ b/pkg/serverless/trigger/events/events.go @@ -122,10 +122,11 @@ type APIGatewayCustomAuthorizerRequestTypeRequestContext struct { // ALBTargetGroupRequest mirrors events.ALBTargetGroupRequest type, removing // unused fields. type ALBTargetGroupRequest struct { - HTTPMethod string - Path string - Headers map[string]string - RequestContext ALBTargetGroupRequestContext + HTTPMethod string + Path string + Headers map[string]string + MultiValueHeaders map[string][]string + RequestContext ALBTargetGroupRequestContext } // ALBTargetGroupRequestContext mirrors events.ALBTargetGroupRequestContext diff --git a/pkg/serverless/trigger/extractor.go b/pkg/serverless/trigger/extractor.go index 1652c176245e3..6632628d69441 100644 --- a/pkg/serverless/trigger/extractor.go +++ b/pkg/serverless/trigger/extractor.go @@ -188,14 +188,23 @@ func GetTagsFromALBTargetGroupRequest(event events.ALBTargetGroupRequest) map[st httpTags := make(map[string]string) httpTags["http.url_details.path"] = event.Path httpTags["http.method"] = event.HTTPMethod + if event.Headers != nil { - if event.Headers["Referer"] != "" { - httpTags["http.referer"] = event.Headers["Referer"] + if r := event.Headers["Referer"]; r != "" { + httpTags["http.referer"] = r } if ua := event.Headers["User-Agent"]; ua != "" { httpTags["http.useragent"] = ua } + } else if event.MultiValueHeaders != nil { + if r := event.MultiValueHeaders["Referer"]; len(r) > 0 && r[0] != "" { + httpTags["http.referer"] = r[0] + } + if ua := event.MultiValueHeaders["User-Agent"]; len(ua) > 0 && ua[0] != "" { + httpTags["http.useragent"] = ua[0] + } } + return httpTags } diff --git a/pkg/serverless/trigger/extractor_test.go b/pkg/serverless/trigger/extractor_test.go index 34cb6f4b3c816..91234c92ed997 100644 --- a/pkg/serverless/trigger/extractor_test.go +++ b/pkg/serverless/trigger/extractor_test.go @@ -353,6 +353,25 @@ func TestGetTagsFromALBTargetGroupRequest(t *testing.T) { }, httpTags) } +func TestGetTagsFromALBTargetGroupRequestMultiValueHeaders(t *testing.T) { + event := events.ALBTargetGroupRequest{ + MultiValueHeaders: map[string][]string{ + "key": {"val"}, + "Referer": {"referer"}, + }, + Path: "path", + HTTPMethod: "http-method", + } + + httpTags := GetTagsFromALBTargetGroupRequest(event) + + assert.Equal(t, map[string]string{ + "http.url_details.path": "path", + "http.method": "http-method", + "http.referer": "referer", + }, httpTags) +} + func TestGetTagsFromFunctionURLRequest(t *testing.T) { event := events.LambdaFunctionURLRequest{ Headers: map[string]string{ From 858cb1cae75f20afd261ed5d4c8bca70bd6e0c3d Mon Sep 17 00:00:00 2001 From: Branden Clark Date: Fri, 6 Dec 2024 14:51:35 -0500 Subject: [PATCH 037/303] Deprecate Windows .bat scripts (#31732) --- .github/CODEOWNERS | 1 + .gitlab/package_build/installer.yml | 2 +- .gitlab/package_build/windows.yml | 7 +- Dockerfiles/agent/windows/README.md | 2 +- docs/dev/agent_omnibus.md | 6 +- tasks/__init__.py | 2 + tasks/winbuild.py | 71 +++++ tasks/winbuildscripts/Build-AgentPackages.ps1 | 83 ++++++ .../Build-InstallerPackages.ps1 | 72 ++++++ tasks/winbuildscripts/Build-OmnibusTarget.ps1 | 90 +++++++ tasks/winbuildscripts/Generate-OCIPackage.ps1 | 11 +- tasks/winbuildscripts/buildinstaller.bat | 59 ----- tasks/winbuildscripts/buildlocal.bat | 14 - tasks/winbuildscripts/buildwin.bat | 39 --- tasks/winbuildscripts/common.ps1 | 242 ++++++++++++++++++ tasks/winbuildscripts/dobuild.bat | 62 ----- tasks/winbuildscripts/libyajl2_install.ps1 | 26 -- 17 files changed, 576 insertions(+), 213 deletions(-) create mode 100644 tasks/winbuild.py create mode 100644 tasks/winbuildscripts/Build-AgentPackages.ps1 create mode 100644 tasks/winbuildscripts/Build-InstallerPackages.ps1 create mode 100644 tasks/winbuildscripts/Build-OmnibusTarget.ps1 delete mode 100644 tasks/winbuildscripts/buildinstaller.bat delete mode 100644 tasks/winbuildscripts/buildlocal.bat delete mode 100644 tasks/winbuildscripts/buildwin.bat create mode 100644 tasks/winbuildscripts/common.ps1 delete mode 100644 tasks/winbuildscripts/dobuild.bat delete mode 100644 tasks/winbuildscripts/libyajl2_install.ps1 diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ad6e11974b350..202c143c2da56 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -570,6 +570,7 @@ /tasks/sds.py @DataDog/agent-processing-and-routing /tasks/systray.py @DataDog/windows-agent /tasks/winbuildscripts/ @DataDog/windows-agent +/tasks/winbuild.py @DataDog/windows-agent /tasks/windows_resources.py @DataDog/windows-agent /tasks/components.py @DataDog/agent-shared-components /tasks/components_templates @DataDog/agent-shared-components diff --git a/.gitlab/package_build/installer.yml b/.gitlab/package_build/installer.yml index 443b2fe52318b..6ab10c1a19e62 100644 --- a/.gitlab/package_build/installer.yml +++ b/.gitlab/package_build/installer.yml @@ -220,7 +220,7 @@ windows-installer-amd64: -e USE_S3_CACHING="$USE_S3_CACHING" -e API_KEY_ORG2=${API_KEY_ORG2} registry.ddbuild.io/ci/datadog-agent-buildimages/windows_1809_${ARCH}${Env:DATADOG_AGENT_WINBUILDIMAGES_SUFFIX}:${Env:DATADOG_AGENT_WINBUILDIMAGES} - c:\mnt\tasks\winbuildscripts\buildinstaller.bat + powershell -C "c:\mnt\tasks\winbuildscripts\Build-InstallerPackages.ps1 -BuildOutOfSource 1 -InstallDeps 1 -CheckGoVersion 1" after_script: - '$_instance_id = (iwr -UseBasicParsing http://169.254.169.254/latest/meta-data/instance-id).content ; Write-Host "Running on instance $($_instance_id)"' artifacts: diff --git a/.gitlab/package_build/windows.yml b/.gitlab/package_build/windows.yml index 16734f170f1da..cb57ebafa617f 100644 --- a/.gitlab/package_build/windows.yml +++ b/.gitlab/package_build/windows.yml @@ -32,14 +32,13 @@ -e S3_OMNIBUS_CACHE_BUCKET="$S3_OMNIBUS_CACHE_BUCKET" -e USE_S3_CACHING="$USE_S3_CACHING" -e INTEGRATION_WHEELS_CACHE_BUCKET="$INTEGRATION_WHEELS_CACHE_BUCKET" - -e GO_VERSION_CHECK="true" -e BUNDLE_MIRROR__RUBYGEMS__ORG=${BUNDLE_MIRROR__RUBYGEMS__ORG} -e PIP_INDEX_URL=${PIP_INDEX_URL} -e API_KEY_ORG2=${API_KEY_ORG2} -e OMNIBUS_GIT_CACHE_DIR=${Env:TEMP}/${CI_PIPELINE_ID}/omnibus-git-cache -e AGENT_FLAVOR=${AGENT_FLAVOR} registry.ddbuild.io/ci/datadog-agent-buildimages/windows_1809_${ARCH}${Env:DATADOG_AGENT_WINBUILDIMAGES_SUFFIX}:${Env:DATADOG_AGENT_WINBUILDIMAGES} - c:\mnt\tasks\winbuildscripts\buildwin.bat + powershell -C "c:\mnt\tasks\winbuildscripts\Build-AgentPackages.ps1 -BuildOutOfSource 1 -InstallDeps 1 -CheckGoVersion 1" - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } - get-childitem omnibus\pkg - !reference [.upload_sbom_artifacts_windows] @@ -89,7 +88,7 @@ windows_zip_agent_binaries_x64-a7: needs: ["go_mod_tidy_check", "go_deps"] variables: ARCH: "x64" - OMNIBUS_TARGET: agent_binaries + OMNIBUS_TARGET: agent-binaries before_script: - set RELEASE_VERSION $RELEASE_VERSION_7 script: @@ -122,7 +121,7 @@ windows_zip_agent_binaries_x64-a7: -e PIP_INDEX_URL=${PIP_INDEX_URL} -e API_KEY_ORG2=${API_KEY_ORG2} registry.ddbuild.io/ci/datadog-agent-buildimages/windows_1809_${ARCH}${Env:DATADOG_AGENT_WINBUILDIMAGES_SUFFIX}:${Env:DATADOG_AGENT_WINBUILDIMAGES} - c:\mnt\tasks\winbuildscripts\buildwin.bat + powershell -C "c:\mnt\tasks\winbuildscripts\Build-OmnibusTarget.ps1 -BuildOutOfSource 1 -InstallDeps 1 -CheckGoVersion 1" - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } - get-childitem omnibus\pkg - !reference [.upload_sbom_artifacts_windows] diff --git a/Dockerfiles/agent/windows/README.md b/Dockerfiles/agent/windows/README.md index e33eeda9bd4e0..7c966fd0294c2 100644 --- a/Dockerfiles/agent/windows/README.md +++ b/Dockerfiles/agent/windows/README.md @@ -6,7 +6,7 @@ How to build the Agent docker image From the root of the repository, run the following command: ``` -docker run --rm -it -v "${pwd}:c:\mnt" -e OMNIBUS_TARGET=main -e MAJOR_VERSION=7 -e RELEASE_VERSION=nightly -e PY_RUNTIMES=3 datadog/agent-buildimages-windows_x64:1809 c:\mnt\tasks\winbuildscripts\buildwin.bat +docker run --rm -it -v "${pwd}:c:\mnt" -e OMNIBUS_TARGET=main -e MAJOR_VERSION=7 -e RELEASE_VERSION=nightly-a7 -e PY_RUNTIMES=3 datadog/agent-buildimages-windows_x64:1809 powershell -C "c:\mnt\tasks\winbuildscripts\Build-AgentPackages.ps1 -BuildOutOfSource 1 -InstallDeps 1 -CheckGoVersion 1" ``` The build artifacts will be in `omnibus\pkg`. diff --git a/docs/dev/agent_omnibus.md b/docs/dev/agent_omnibus.md index 68ff17b6e3724..421303cbfc173 100644 --- a/docs/dev/agent_omnibus.md +++ b/docs/dev/agent_omnibus.md @@ -90,7 +90,7 @@ Start a Powershell prompt and navigate to your local clone of the `datadog-agent Run the following command: ```powershell -docker run -v "$(Get-Location):c:\mnt" -e OMNIBUS_TARGET=main -e RELEASE_VERSION=nightly -e MAJOR_VERSION=7 -e TARGET_ARCH=x64 datadog/agent-buildimages-windows_x64:1809 c:\mnt\tasks\winbuildscripts\buildwin.bat +docker run -v "$(Get-Location):c:\mnt" -e OMNIBUS_TARGET=main -e RELEASE_VERSION=nightly-a7 -e MAJOR_VERSION=7 -e TARGET_ARCH=x64 datadog/agent-buildimages-windows_x64:1809 powershell -C "c:\mnt\tasks\winbuildscripts\Build-AgentPackages.ps1 -BuildOutOfSource 1 -InstallDeps 1 -CheckGoVersion 1" ``` Downloading the Docker image may take some time in the first run. @@ -100,7 +100,7 @@ Alternatively here's a small Powershell script to facilitate using the docker im param ( [int]$MAJOR_VERSION=7, $TARGET_ARCH="x64", - $RELEASE_VERSION="nightly", + $RELEASE_VERSION="nightly-a7", [bool]$RM_CONTAINER=$true, [bool]$DEBUG=$false ) @@ -113,7 +113,7 @@ $opts = "-e OMNIBUS_TARGET=main -e RELEASE_VERSION=$RELEASE_VERSION -e MAJOR_VER if ($DEBUG) { $opts += " -e DEBUG_CUSTOMACTION=yes " } -$cmd += " -m 8192M -v ""$(Get-Location):c:\mnt"" $opts datadog/agent-buildimages-windows_x64:1809 c:\mnt\tasks\winbuildscripts\buildwin.bat" +$cmd += " -m 8192M -v ""$(Get-Location):c:\mnt"" $opts datadog/agent-buildimages-windows_x64:1809 powershell -C ""c:\mnt\tasks\winbuildscripts\Build-AgentPackages.ps1 -BuildOutOfSource 1 -InstallDeps 1 -CheckGoVersion 1""" Write-Host $cmd Invoke-Expression -Command $cmd ``` diff --git a/tasks/__init__.py b/tasks/__init__.py index 44adcefb1dcad..d59a06de7463b 100644 --- a/tasks/__init__.py +++ b/tasks/__init__.py @@ -63,6 +63,7 @@ trace_agent, vim, vscode, + winbuild, worktree, ) from tasks.build_tags import audit_tag_impact, print_default_build_tags @@ -212,6 +213,7 @@ ns.add_collection(collector) ns.add_collection(invoke_unit_tests) ns.add_collection(debug) +ns.add_collection(winbuild) ns.add_collection(worktree) ns.configure( { diff --git a/tasks/winbuild.py b/tasks/winbuild.py new file mode 100644 index 0000000000000..66f0cb02b68a1 --- /dev/null +++ b/tasks/winbuild.py @@ -0,0 +1,71 @@ +import os +import shutil + +from invoke.tasks import task + +from tasks.flavor import AgentFlavor +from tasks.libs.common.utils import get_version +from tasks.msi import build as build_agent_msi +from tasks.msi import build_installer as build_installer_msi +from tasks.omnibus import build as omnibus_build + +# Output directory for package files +OUTPUT_PATH = os.path.join(os.getcwd(), "omnibus", "pkg") +# Omnibus stores files here, e.g. C:\opt\datadog-agent, C:\opt\dataog-installer +OPT_SOURCE_DIR = os.path.join('C:\\', 'opt') + + +@task +def agent_package( + ctx, + flavor=AgentFlavor.base.name, + release_version="nightly-a7", + skip_deps=False, +): + # Build agent + omnibus_build( + ctx, + flavor=flavor, + release_version=release_version, + skip_deps=skip_deps, + ) + + # Package Agent into MSI + build_agent_msi(ctx, release_version=release_version) + + # Package MSI into OCI + if AgentFlavor[flavor] == AgentFlavor.base: + ctx.run('powershell -C "./tasks/winbuildscripts/Generate-OCIPackage.ps1 -package datadog-agent"') + + +@task +def installer_package( + ctx, + release_version="nightly-a7", + skip_deps=False, +): + # Build installer + omnibus_build( + ctx, + release_version=release_version, + skip_deps=skip_deps, + target_project="installer", + ) + + # Package Insaller into MSI + build_installer_msi(ctx) + + # Package MSI into OCI + ctx.run('powershell -C "./tasks/winbuildscripts/Generate-OCIPackage.ps1 -package datadog-installer"') + + # Copy installer.exe to the output dir so it can be deployed as the bootstrapper + agent_version = get_version( + ctx, + include_git=True, + url_safe=True, + include_pipeline_id=True, + ) + shutil.copy2( + os.path.join(OPT_SOURCE_DIR, "datadog-installer\\datadog-installer.exe"), + os.path.join(OUTPUT_PATH, f"datadog-installer-{agent_version}-1-x86_64.exe"), + ) diff --git a/tasks/winbuildscripts/Build-AgentPackages.ps1 b/tasks/winbuildscripts/Build-AgentPackages.ps1 new file mode 100644 index 0000000000000..34c2188c8249b --- /dev/null +++ b/tasks/winbuildscripts/Build-AgentPackages.ps1 @@ -0,0 +1,83 @@ +<# +.SYNOPSIS +Builds the Datadog Agent packages for Windows. Builds everything with omnibus and packages the output into MSI, ZIP, and OCI. + +.DESCRIPTION +This script builds the Datadog Agent packages for Windows, with options to configure the build environment. + +.PARAMETER ReleaseVersion +Specifies the release version of the build. Default is the value of the environment variable RELEASE_VERSION. + +.PARAMETER Flavor +Specifies the flavor of the agent. Default is the value of the environment variable AGENT_FLAVOR. + +.PARAMETER BuildOutOfSource +Specifies whether to build out of source. Default is $false. + +Use this option in the CI to keep the job directory clean and avoid conflicts/stale data. +Use this option in Hyper-V based containers to improve build performance. + +.PARAMETER InstallDeps +Specifies whether to install dependencies (python requirements, go deps, etc.). Default is $true. + +.PARAMETER CheckGoVersion +Specifies whether to check the Go version. If not provided, it defaults to the value of the environment variable GO_VERSION_CHECK or $true if the environment variable is not set. + +.EXAMPLE +.\Build-AgentPackages.ps1 -InstallDeps $false + +.EXAMPLE +.\Build-AgentPackages.ps1 -BuildOutOfSource $true -InstallDeps $true -Flavor "fips" -CheckGoVersion $true + +.NOTES +This script should be run from the root of the repository. + +#> +param( + [bool] $BuildOutOfSource = $false, + [nullable[bool]] $CheckGoVersion, + [bool] $InstallDeps = $true, + [string] $ReleaseVersion = $env:RELEASE_VERSION, + [string] $Flavor = $env:AGENT_FLAVOR +) + +. "$PSScriptRoot\common.ps1" + +Invoke-BuildScript ` + -BuildOutOfSource $BuildOutOfSource ` + -InstallDeps $InstallDeps ` + -CheckGoVersion $CheckGoVersion ` + -Command { + $inv_args = @( + "--skip-deps" + ) + if ($ReleaseVersion) { + $inv_args += "--release-version" + $inv_args += $ReleaseVersion + $env:RELEASE_VERSION=$ReleaseVersion + } + + if ($Flavor) { + $inv_args += "--flavor" + $inv_args += $Flavor + $env:AGENT_FLAVOR=$Flavor + } + + Write-Host "inv -e winbuild.agent-package $inv_args" + inv -e winbuild.agent-package @inv_args + if ($LASTEXITCODE -ne 0) { + Write-Error "Failed to build the agent package" + exit 1 + } + + # Show the contents of the output package directories for debugging purposes + Get-ChildItem -Path C:\omnibus-ruby\pkg\ + Get-ChildItem -Path "C:\opt\datadog-agent\bin\agent\" + Get-ChildItem -Path ".\omnibus\pkg\" + + if ($BuildOutOfSource) { + # Copy the resulting package to the mnt directory + mkdir C:\mnt\omnibus\pkg -Force -ErrorAction Stop | Out-Null + Copy-Item -Path ".\omnibus\pkg\*" -Destination "C:\mnt\omnibus\pkg" -Force -ErrorAction Stop + } +} diff --git a/tasks/winbuildscripts/Build-InstallerPackages.ps1 b/tasks/winbuildscripts/Build-InstallerPackages.ps1 new file mode 100644 index 0000000000000..bf381a8ef5f8a --- /dev/null +++ b/tasks/winbuildscripts/Build-InstallerPackages.ps1 @@ -0,0 +1,72 @@ +<# +.SYNOPSIS +Builds the Datadog Installer packages for Windows. Builds everything with omnibus and packages the output into MSI, ZIP, and OCI. + +.DESCRIPTION +This script builds the Datadog Installer packages for Windows, with options to configure the build environment. + +.PARAMETER BuildOutOfSource +Specifies whether to build out of source. Default is $false. + +Use this option in the CI to keep the job directory clean and avoid conflicts/stale data. +Use this option in Hyper-V based containers to improve build performance. + +.PARAMETER InstallDeps +Specifies whether to install dependencies (python requirements, go deps, etc.). Default is $true. + +.PARAMETER ReleaseVersion +Specifies the release version of the build. Default is the value of the environment variable RELEASE_VERSION. + +.PARAMETER CheckGoVersion +Specifies whether to check the Go version. If not provided, it defaults to the value of the environment variable GO_VERSION_CHECK or $true if the environment variable is not set. + +.EXAMPLE +.\Build-InstallerPackages.ps1 -InstallDeps $false + +.EXAMPLE +.\Build-InstallerPackages.ps1 -BuildOutOfSource $true -InstallDeps $true -CheckGoVersion $true + +.NOTES +This script should be run from the root of the repository. + +#> +param( + [bool] $BuildOutOfSource = $false, + [nullable[bool]] $CheckGoVersion, + [bool] $InstallDeps = $true, + [string] $ReleaseVersion = $env:RELEASE_VERSION +) + +. "$PSScriptRoot\common.ps1" + +Invoke-BuildScript ` + -BuildOutOfSource $BuildOutOfSource ` + -InstallDeps $InstallDeps ` + -CheckGoVersion $CheckGoVersion ` + -Command { + $inv_args = @( + "--skip-deps" + ) + if ($ReleaseVersion) { + $inv_args += "--release-version" + $inv_args += $ReleaseVersion + } + + Write-Host "inv -e winbuild.installer-package $inv_args" + inv -e winbuild.installer-package @inv_args + if ($LASTEXITCODE -ne 0) { + Write-Error "Failed to build the agent package" + exit 1 + } + + # Show the contents of the output package directories for debugging purposes + Get-ChildItem -Path C:\omnibus-ruby\pkg\ + Get-ChildItem -Path C:\opt\datadog-installer + Get-ChildItem -Path ".\omnibus\pkg\" + + if ($BuildOutOfSource) { + # Copy the resulting package to the mnt directory + mkdir C:\mnt\omnibus\pkg -Force -ErrorAction Stop | Out-Null + Copy-Item -Path ".\omnibus\pkg\*" -Destination "C:\mnt\omnibus\pkg" -Force -ErrorAction Stop + } +} diff --git a/tasks/winbuildscripts/Build-OmnibusTarget.ps1 b/tasks/winbuildscripts/Build-OmnibusTarget.ps1 new file mode 100644 index 0000000000000..50dfc63f30e23 --- /dev/null +++ b/tasks/winbuildscripts/Build-OmnibusTarget.ps1 @@ -0,0 +1,90 @@ +<# +.SYNOPSIS +Builds an Omnibus project for Windows. + +.DESCRIPTION +This script builds an Omnibus Project for Windows, with options to configure the build environment. + +.PARAMETER ReleaseVersion +Specifies the release version of the build. Default is the value of the environment variable RELEASE_VERSION. + +.PARAMETER Flavor +Specifies the flavor of the agent. Default is the value of the environment variable AGENT_FLAVOR. + +.PARAMETER BuildOutOfSource +Specifies whether to build out of source. Default is $false. + +Use this option in the CI to keep the job directory clean and avoid conflicts/stale data. +Use this option in Hyper-V based containers to improve build performance. + +.PARAMETER InstallDeps +Specifies whether to install dependencies (python requirements, go deps, etc.). Default is $true. + +.PARAMETER CheckGoVersion +Specifies whether to check the Go version. If not provided, it defaults to the value of the environment variable GO_VERSION_CHECK or $true if the environment variable is not set. + +.PARAMETER TargetProject +Specifies the target project for the build. This parameter is mandatory and defaults to the value of the environment variable OMNIBUS_TARGET. + +.EXAMPLE +.\Build-OmnibusTarget.ps1 -InstallDeps $false + +.EXAMPLE +.\Build-OmnibusTarget.ps1 -BuildOutOfSource $true -InstallDeps $true -Flavor "fips" -CheckGoVersion $true + +.NOTES +This script should be run from the root of the repository. + +#> +param( + [bool] $BuildOutOfSource = $false, + [nullable[bool]] $CheckGoVersion, + [bool] $InstallDeps = $true, + [string] $ReleaseVersion = $env:RELEASE_VERSION, + [string] $TargetProject = $env:OMNIBUS_TARGET +) + +. "$PSScriptRoot\common.ps1" + +Invoke-BuildScript ` + -BuildOutOfSource $BuildOutOfSource ` + -InstallDeps $InstallDeps ` + -CheckGoVersion $CheckGoVersion ` + -Command { + $inv_args = @( + "--skip-deps" + ) + if ($ReleaseVersion) { + $inv_args += "--release-version" + $inv_args += $ReleaseVersion + $env:RELEASE_VERSION=$ReleaseVersion + } + + if ($TargetProject) { + $inv_args += "--target-project" + $inv_args += $TargetProject + $env:OMNIBUS_TARGET=$TargetProject + } else { + Write-Error "Target project is required" + Write-Error "To build the (default) Agent package, use Build-AgentPackages.ps1 instead" + exit 1 + } + + Write-Host "inv -e omnibus.build $inv_args" + inv -e omnibus.build @inv_args + if ($LASTEXITCODE -ne 0) { + Write-Error "Failed to build the agent package" + exit 1 + } + + # Show the contents of the output package directories for debugging purposes + Get-ChildItem -Path C:\omnibus-ruby\pkg\ + Get-ChildItem -Path "C:\opt\datadog-agent\bin\agent\" + Get-ChildItem -Path ".\omnibus\pkg\" + + if ($BuildOutOfSource) { + # Copy the resulting package to the mnt directory + mkdir C:\mnt\omnibus\pkg -Force -ErrorAction Stop | Out-Null + Copy-Item -Path ".\omnibus\pkg\*" -Destination "C:\mnt\omnibus\pkg" -Force -ErrorAction Stop + } +} diff --git a/tasks/winbuildscripts/Generate-OCIPackage.ps1 b/tasks/winbuildscripts/Generate-OCIPackage.ps1 index ee48f4badc9fe..8b64223788b3e 100644 --- a/tasks/winbuildscripts/Generate-OCIPackage.ps1 +++ b/tasks/winbuildscripts/Generate-OCIPackage.ps1 @@ -1,11 +1,10 @@ Param( [Parameter(Mandatory=$true)] [string] $package, - [string] $version + [string] $version, + [string] $omnibusOutput = "$(Get-Location)\omnibus\pkg\" ) -$omnibusOutput = "$($Env:REPO_ROOT)\omnibus\pkg\" - if (-not (Test-Path C:\tools\datadog-package.exe)) { Write-Host "Downloading datadog-package.exe" (New-Object System.Net.WebClient).DownloadFile("https://dd-agent-omnibus.s3.amazonaws.com/datadog-package.exe", "C:\\tools\\datadog-package.exe") @@ -26,10 +25,14 @@ if (Test-Path $omnibusOutput\$packageName) { # datadog-package takes a folder as input and will package everything in that, so copy the msi to its own folder Remove-Item -Recurse -Force C:\oci-pkg -ErrorAction SilentlyContinue -New-Item -ItemType Directory C:\oci-pkg +New-Item -ItemType Directory C:\oci-pkg | Out-Null Copy-Item (Get-ChildItem $omnibusOutput\${package}-${version}-x86_64.msi).FullName -Destination C:\oci-pkg\${package}-${version}-x86_64.msi # The argument --archive-path ".\omnibus\pkg\datadog-agent-${version}.tar.gz" is currently broken and has no effects & C:\tools\datadog-package.exe create --package $package --os windows --arch amd64 --archive --version $version C:\oci-pkg +if ($LASTEXITCODE -ne 0) { + Write-Error "Failed to create OCI package" + exit 1 +} Move-Item ${package}-${version}-windows-amd64.tar $omnibusOutput\$packageName diff --git a/tasks/winbuildscripts/buildinstaller.bat b/tasks/winbuildscripts/buildinstaller.bat deleted file mode 100644 index bd41ccad5dc2a..0000000000000 --- a/tasks/winbuildscripts/buildinstaller.bat +++ /dev/null @@ -1,59 +0,0 @@ -if not exist c:\mnt\ goto nomntdir -@echo on -@echo c:\mnt found, continuing -@echo PARAMS %* -@echo RELEASE_VERSION %RELEASE_VERSION% - -set BUILD_ROOT=c:\buildroot -set REPO_ROOT=%BUILD_ROOT%\datadog-agent -mkdir %REPO_ROOT% -if not exist %REPO_ROOT% exit /b 2 -cd %REPO_ROOT% || exit /b 3 -xcopy /e/s/h/q c:\mnt\*.* || exit /b 4 - -call %BUILD_ROOT%\tasks\winbuildscripts\extract-modcache.bat %REPO_ROOT% modcache - -set OMNIBUS_BUILD=omnibus.build -@rem OMNIBUS_TARGET is also used in the C# code to only produce the .cmd for the Datadog Installer (instead of for both the Agent installer and the Datadog installer). -@rem It's not strictly needed, as we will only invoke the .cmd for the Datadog Installer in the invoke task build-installer, but it's a good practice to be consistent. -set OMNIBUS_TARGET=installer -set OMNIBUS_ARGS=%OMNIBUS_ARGS% --target-project %OMNIBUS_TARGET% -@rem Have to use arcane syntax to store AGENT_VERSION, see https://ss64.com/nt/for_cmd.html -FOR /F "tokens=*" %%g IN ('inv agent.version --url-safe --major-version 7') do (SET AGENT_VERSION=%%g) - -if DEFINED GOMODCACHE set OMNIBUS_ARGS=%OMNIBUS_ARGS% --go-mod-cache %GOMODCACHE% -if DEFINED USE_S3_CACHING set OMNIBUS_ARGS=%OMNIBUS_ARGS% %USE_S3_CACHING% - -SET PATH=%PATH%;%GOPATH%/bin -REM AGENT_MSI_OUTDIR is always overridden in msi.py - -@echo GOPATH %GOPATH% -@echo PATH %PATH% -@echo VSTUDIO_ROOT %VSTUDIO_ROOT% - -call ridk enable -pip3 install -r requirements.txt - -@echo "inv -e %OMNIBUS_BUILD% %OMNIBUS_ARGS% --skip-deps --release-version %RELEASE_VERSION%" -inv -e %OMNIBUS_BUILD% %OMNIBUS_ARGS% --skip-deps --release-version %RELEASE_VERSION% || exit /b 1 -inv -e msi.build-installer || exit /b 2 - -Powershell -C "./tasks/winbuildscripts/Generate-OCIPackage.ps1 -package 'datadog-installer'" - -REM show output package directories (for debugging) -dir \omnibus-ruby\pkg\ -dir C:\opt\datadog-installer\ -dir %REPO_ROOT%\omnibus\pkg\ - -REM copy resulting packages to expected location for collection by gitlab. -if not exist c:\mnt\omnibus\pkg\ mkdir c:\mnt\omnibus\pkg\ || exit /b 5 -copy %REPO_ROOT%\omnibus\pkg\* c:\mnt\omnibus\pkg\ || exit /b 6 -REM Save the installer.exe for bootstrapping -copy C:\opt\datadog-installer\datadog-installer.exe c:\mnt\omnibus\pkg\datadog-installer-%AGENT_VERSION%-1-x86_64.exe || exit /b 7 - -goto :EOF - -:nomntdir -@echo directory not mounted, parameters incorrect -exit /b 1 -goto :EOF diff --git a/tasks/winbuildscripts/buildlocal.bat b/tasks/winbuildscripts/buildlocal.bat deleted file mode 100644 index c2aaab3b4bfa8..0000000000000 --- a/tasks/winbuildscripts/buildlocal.bat +++ /dev/null @@ -1,14 +0,0 @@ -@echo RELEASE_VERSION %RELEASE_VERSION% -@echo MAJOR_VERSION %MAJOR_VERSION% - -REM set up variables for local build. -REM assumes attempting to build A7/x64 nightly -REM assumes target directory is mounted in the container -REM (vs. copied in as in CI build) -if NOT DEFINED RELEASE_VERSION set RELEASE_VERSION=nightly -if NOT DEFINED MAJOR_VERSION set MAJOR_VERSION=7 -if NOT DEFINED CI_JOB_ID set CI_JOB_ID=1 -if NOT DEFINED TARGET_ARCH set TARGET_ARCH=x64 - -call %~dp0dobuild.bat -if not %ERRORLEVEL% == 0 @echo "Build failed %ERRORLEVEL%" diff --git a/tasks/winbuildscripts/buildwin.bat b/tasks/winbuildscripts/buildwin.bat deleted file mode 100644 index e23c72d579db4..0000000000000 --- a/tasks/winbuildscripts/buildwin.bat +++ /dev/null @@ -1,39 +0,0 @@ -if not exist c:\mnt\ goto nomntdir -@echo on -@echo c:\mnt found, continuing - -set BUILD_ROOT=c:\buildroot -mkdir %BUILD_ROOT%\datadog-agent -if not exist %BUILD_ROOT%\datadog-agent exit /b 2 -cd %BUILD_ROOT%\datadog-agent || exit /b 3 -xcopy /e/s/h/q c:\mnt\*.* || exit /b 4 - -call %BUILD_ROOT%\datadog-agent\tasks\winbuildscripts\extract-modcache.bat %BUILD_ROOT%\datadog-agent modcache - -REM -REM after copying files in from the host, execute the build -REM using `dobuild.bat` -REM -call %BUILD_ROOT%\datadog-agent\tasks\winbuildscripts\dobuild.bat %* -if not %ERRORLEVEL% == 0 exit /b %ERRORLEVEL% - -REM show output package directories (for debugging) -dir \omnibus-ruby\pkg\ - -dir %BUILD_ROOT%\datadog-agent\omnibus\pkg\ - -REM copy resulting packages to expected location for collection by gitlab. -if not exist c:\mnt\omnibus\pkg\ mkdir c:\mnt\omnibus\pkg\ || exit /b 5 -copy %BUILD_ROOT%\datadog-agent\omnibus\pkg\* c:\mnt\omnibus\pkg\ || exit /b 6 - -REM show output binary directories (for debugging) -dir C:\opt\datadog-agent\bin\agent\ - -goto :EOF - -:nomntdir -@echo directory not mounted, parameters incorrect -exit /b 1 -goto :EOF - - diff --git a/tasks/winbuildscripts/common.ps1 b/tasks/winbuildscripts/common.ps1 new file mode 100644 index 0000000000000..35ef863d57535 --- /dev/null +++ b/tasks/winbuildscripts/common.ps1 @@ -0,0 +1,242 @@ +<# +.SYNOPSIS +Copies files from C:\mnt into C:\buildroot\datadog-agent and sets the current directory to the buildroot. + +.PARAMETER buildroot +Specifies the root directory where the files will be copied to. The default value is "c:\buildroot". + +.NOTES +This function is typically used in the context of building and running scripts within a containerized environment to +ensure that the files are copied to the container filesystem before running the build scripts. This is useful for +keeping the source clean and can provide speed improvements for hyper-v based containers. +See also, issue with job cross-contamination due to improperly cancelled jobs: https://datadoghq.atlassian.net/browse/CIEXE-143 +#> +function Enter-BuildRoot() { + param( + [string] $buildroot = "c:\buildroot" + ) + if (-Not (Test-Path -Path "c:\mnt")) { + Write-Error "C:\mnt directory not mounted, parameters incorrect" + exit 1 + } + + # copy to buildroot + mkdir -Force "$buildroot\datadog-agent" -ErrorAction Stop | Out-Null + if (-Not (Test-Path -Path "$buildroot\datadog-agent")) { + Write-Error "Failed to create buildroot directory" + exit 2 + } + + # copy the repository into the container filesystem + Write-Host "Switching to buildroot $buildroot\datadog-agent" + Push-Location "$buildroot\datadog-agent" -ErrorAction Stop -StackName AgentBuildRoot + xcopy /e/s/h/q c:\mnt\*.* +} + +<# +.SYNOPSIS +Leaves the buildroot directory and returns to the original working directory. +#> +function Exit-BuildRoot() { + Write-Host "Leaving buildroot" + Pop-Location -StackName AgentBuildRoot +} + +<# +.SYNOPSIS +Expands the Go module cache from an archive file. + +.DESCRIPTION +This function expands the Go module cache from an archive file located in the specified root directory. +It extracts the contents of the archive file into the Go module cache directory defined by the GOMODCACHE environment variable. + +.PARAMETER root +The root directory where the tar.xz file is located. Defaults to the current location. + +.PARAMETER modcache +The base name (without extension) of the file to be expanded. Expected values are `modcache` and `modcache_tools`. + +.NOTES +If the GOMODCACHE environment variable is not set, the function will skip the expansion process. + +.EXAMPLE +Expand-ModCache -modcache "modcache" +This will expand the modcache file located at "\modcache.tar.xz" into the Go module cache directory. + +#> +function Expand-ModCache() { + param( + [string] $root = (Get-Location).Path, + [ValidateSet('modcache', 'modcache_tools')] + [string] $modcache + ) + + $MODCACHE_ROOT = $root + $MODCACHE_FILE_ROOT = $modcache + $MODCACHE_XZ_FILE = Join-Path $MODCACHE_ROOT "$MODCACHE_FILE_ROOT.tar.xz" + $MODCACHE_TAR_FILE = Join-Path $MODCACHE_ROOT "$MODCACHE_FILE_ROOT.tar" + + if (-not $env:GOMODCACHE) { + Write-Host "GOMODCACHE environment variable not set, skipping expansion of mod cache files" + return + } + + Write-Host "MODCACHE_XZ_FILE $MODCACHE_XZ_FILE MODCACHE_TAR_FILE $MODCACHE_TAR_FILE GOMODCACHE $env:GOMODCACHE" + if (Test-Path $MODCACHE_XZ_FILE) { + Write-Host "Extracting modcache file $MODCACHE_XZ_FILE" + & 7z.exe x $MODCACHE_XZ_FILE -o"$MODCACHE_ROOT" -bt + if ($LASTEXITCODE -ne 0) { + Write-Error "Failed to extract $MODCACHE_XZ_FILE" + exit 1 + } + Get-ChildItem $MODCACHE_TAR_FILE + # Use -aoa to allow overwriting existing files + # This shouldn't have any negative impact: since modules are + # stored per version and hash, files that get replaced will + # get replaced by the same files + & 7z.exe x $MODCACHE_TAR_FILE -o"$env:GOMODCACHE\cache" -aoa -bt + if ($LASTEXITCODE -ne 0) { + Write-Error "Failed to extract $MODCACHE_XZ_FILE" + exit 1 + } + Write-Host "Modcache extracted" + } else { + Write-Host "Modcache XZ file $MODCACHE_XZ_FILE not found, dependencies will be downloaded" + } + + if (Test-Path $MODCACHE_XZ_FILE) { + Write-Host "Deleting modcache tar.xz $MODCACHE_XZ_FILE" + Remove-Item -Force $MODCACHE_XZ_FILE + } + if (Test-Path $MODCACHE_TAR_FILE) { + Write-Host "Deleting modcache tar $MODCACHE_TAR_FILE" + Remove-Item -Force $MODCACHE_TAR_FILE + } +} + +function Install-Deps() { + Write-Host "Installing python requirements" + pip3.exe install -r .\requirements.txt + Write-Host "Installing go dependencies" + inv -e deps +} + +function Enable-DevEnv() { + # Add go bin to PATH for golangci-lint and other go tools + if (-Not $env:GOPATH) { + Write-Host "GOPATH not set, setting to C:\dev\go" + $env:GOPATH = "C:\dev\go" + } + $env:PATH = "$env:GOPATH\bin;$env:PATH" + + # Enable ruby/msys environment, for mingw, make, etc. + ridk enable +} + +<# +.SYNOPSIS +Converts a string value to a boolean value based on specific conditions. + +.DESCRIPTION +This function takes a string input and a default boolean value. +- If the input string is null or empty, it returns the default boolean value. +- If the input string is "true", "yes", or "1" (case insensitive), it returns $true. +- Otherwise, it returns $false. +#> +function Convert-StringToBool() { + param( + [string] $Value, + [bool] $DefaultValue + ) + + if ([string]::IsNullOrEmpty($Value)) { + return $DefaultValue + } + + if ($Value.ToLower() -eq "true") { + return $true + } + + if ($Value.ToLower() -eq "yes" -or $Value -eq "1") { + return $true + } + + return $false +} + +<# +.SYNOPSIS +Invokes a build script with optional parameters for build environment configuration. + +.DESCRIPTION +The Invoke-BuildScript function sets up the build environment, optionally installs dependencies, checks the Go version, and executes a provided script block. It supports building out of source and restores the original working directory upon completion. + +.PARAMETER buildroot +Specifies the root directory for the build. Default is "c:\buildroot". + +.PARAMETER BuildOutOfSource +Specifies whether to build out of source. Default is $false. + +Use this option in the CI to keep the job directory clean and avoid conflicts/stale data. +Use this option in Hyper-V based containers to improve build performance. + +.PARAMETER InstallDeps +Specifies whether to install dependencies (python requirements, go deps, etc.). Default is $true. + +.PARAMETER CheckGoVersion +Specifies whether to check the Go version. If not provided, it defaults to the value of the environment variable GO_VERSION_CHECK or $true if the environment variable is not set. + +.PARAMETER Command +A script block containing the commands to execute as part of the build process. + +.EXAMPLE +Invoke-BuildScript -buildroot "c:\mybuild" -BuildOutOfSource $true -Command { ./build.ps1 } + +#> +function Invoke-BuildScript { + param( + [string] $buildroot = "c:\buildroot", + [bool] $BuildOutOfSource = $false, + [bool] $InstallDeps = $true, + [nullable[bool]] $CheckGoVersion, + [ScriptBlock] $Command = {$null} + ) + + try { + if ($null -eq $CheckGoVersion) { + $CheckGoVersion = Convert-StringToBool -Value $env:GO_VERSION_CHECK -default $true + } + + if ($BuildOutOfSource) { + Enter-BuildRoot + } + + Expand-ModCache -modcache modcache + + Enable-DevEnv + + if ($InstallDeps) { + Install-Deps + } + + if ($CheckGoVersion) { + inv -e check-go-version + if ($LASTEXITCODE -ne 0) { + Write-Error "Go version check failed" + exit 1 + } + } + + # Execute the provided ScriptBlock/Command + & $Command + + } finally { + # This finally block is executed regardless of whether the try block completes successfully, throws an exception, + # or uses `exit` to terminate the script. + + if ($BuildOutOfSource) { + # Restore the original working directory + Exit-BuildRoot + } + } +} diff --git a/tasks/winbuildscripts/dobuild.bat b/tasks/winbuildscripts/dobuild.bat deleted file mode 100644 index 0ed92222f1f71..0000000000000 --- a/tasks/winbuildscripts/dobuild.bat +++ /dev/null @@ -1,62 +0,0 @@ -@echo PARAMS %* -@echo RELEASE_VERSION %RELEASE_VERSION% -@echo MAJOR_VERSION %MAJOR_VERSION% -@echo GO_VERSION_CHECK %GO_VERSION_CHECK% - -if NOT DEFINED RELEASE_VERSION set RELEASE_VERSION=%~1 -if NOT DEFINED MAJOR_VERSION set MAJOR_VERSION=%~2 -if NOT DEFINED GO_VERSION_CHECK set GO_VERSION_CHECK=%~4 - -set OMNIBUS_BUILD=omnibus.build - -if "%OMNIBUS_TARGET%" == "" set OMNIBUS_TARGET=main -if "%OMNIBUS_TARGET%" == "iot" set OMNIBUS_ARGS=--flavor iot -if "%OMNIBUS_TARGET%" == "dogstatsd" set OMNIBUS_ARGS=--target-project dogstatsd -if "%OMNIBUS_TARGET%" == "agent_binaries" set OMNIBUS_ARGS=%OMNIBUS_ARGS% --target-project agent-binaries -if "%AGENT_FLAVOR%" == "fips" set OMNIBUS_ARGS=--flavor fips - -if DEFINED GOMODCACHE set OMNIBUS_ARGS=%OMNIBUS_ARGS% --go-mod-cache %GOMODCACHE% -if DEFINED USE_S3_CACHING set OMNIBUS_ARGS=%OMNIBUS_ARGS% %USE_S3_CACHING% - -set REPO_ROOT=%~p0\..\.. -pushd . -cd %REPO_ROOT% || exit /b 100 - -SET PATH=%PATH%;%GOPATH%\bin - -@echo GOPATH %GOPATH% -@echo PATH %PATH% -@echo VSTUDIO_ROOT %VSTUDIO_ROOT% - -REM Section to pre-install libyajl2 gem with fix for gcc10 compatibility -Powershell -C "ridk enable; ./tasks/winbuildscripts/libyajl2_install.ps1" - - -if "%TARGET_ARCH%" == "x64" ( - @echo IN x64 BRANCH - call ridk enable -) - - -pip3 install -r requirements.txt || exit /b 120 - -inv -e deps || exit /b 130 -if "%GO_VERSION_CHECK%" == "true" ( - inv -e check-go-version || exit /b 140 -) - -@echo "inv -e %OMNIBUS_BUILD% %OMNIBUS_ARGS% --skip-deps --release-version %RELEASE_VERSION%" -inv -e %OMNIBUS_BUILD% %OMNIBUS_ARGS% --skip-deps --release-version %RELEASE_VERSION% || exit /b 150 - -REM only build MSI for main targets for now. -if "%OMNIBUS_TARGET%" == "main" ( - @echo "inv -e msi.build --release-version %RELEASE_VERSION% - inv -e msi.build --release-version %RELEASE_VERSION% || exit /b 160 -) - -REM Build the OCI package for the Agent 7 only. -if %MAJOR_VERSION% == 7 ( - Powershell -C "./tasks/winbuildscripts/Generate-OCIPackage.ps1 -package 'datadog-agent'" -) - -popd diff --git a/tasks/winbuildscripts/libyajl2_install.ps1 b/tasks/winbuildscripts/libyajl2_install.ps1 deleted file mode 100644 index a978c004ffcbd..0000000000000 --- a/tasks/winbuildscripts/libyajl2_install.ps1 +++ /dev/null @@ -1,26 +0,0 @@ -pushd . -New-Item -Force -Path c:\tmp -ItemType Directory -cd \tmp - -# Clone the repo; recursive is needed to pick up the submodule inside -git clone --depth 1 --branch 1.2.0 --recursive https://github.com/DataDog/libyajl2-gem libyajl2 -cd libyajl2 - -# Remove existing rake install, we don't need it and its version is too high -gem uninstall -x rake - -# We don't need the development_extras group, we're not running tests -bundle config set --local without 'development_extras' - -# Install dev dependencies - maybe --path should be used to do a local install, but unsure how this will affect the next commands -bundle install - -# Prepare the repo -rake prep -# Install the gem -gem build ./libyajl2.gemspec -gem install ./libyajl2-1.2.0.gem - -# Cleanup -popd -Remove-Item -Recurse -Force c:\tmp\libyajl2 \ No newline at end of file From d255f0cadcbc8a5d657119249f1baa9892f45a8e Mon Sep 17 00:00:00 2001 From: Seth Samuel Date: Fri, 6 Dec 2024 15:25:22 -0500 Subject: [PATCH 038/303] Query Aurora instances per cluster (#31846) --- pkg/databasemonitoring/aws/aurora.go | 77 ++++++++++--------- pkg/databasemonitoring/aws/aurora_test.go | 12 ++- ...nstances-per-cluster-8481d23d9e432e1a.yaml | 12 +++ 3 files changed, 63 insertions(+), 38 deletions(-) create mode 100644 releasenotes/notes/query-aurora-instances-per-cluster-8481d23d9e432e1a.yaml diff --git a/pkg/databasemonitoring/aws/aurora.go b/pkg/databasemonitoring/aws/aurora.go index 590de926ce977..6e5b25198b20d 100644 --- a/pkg/databasemonitoring/aws/aurora.go +++ b/pkg/databasemonitoring/aws/aurora.go @@ -45,45 +45,50 @@ func (c *Client) GetAuroraClusterEndpoints(ctx context.Context, dbClusterIdentif if len(dbClusterIdentifiers) == 0 { return nil, fmt.Errorf("at least one database cluster identifier is required") } - clusterInstances, err := c.client.DescribeDBInstances(ctx, - &rds.DescribeDBInstancesInput{ - Filters: []types.Filter{ - { - Name: aws.String("db-cluster-id"), - Values: dbClusterIdentifiers, - }, - }, - }) - if err != nil { - return nil, fmt.Errorf("error running GetAuroraClusterEndpoints %v", err) - } clusters := make(map[string]*AuroraCluster, 0) - for _, db := range clusterInstances.DBInstances { - if db.Endpoint != nil && db.DBClusterIdentifier != nil { - if db.Endpoint.Address == nil || db.DBInstanceStatus == nil || strings.ToLower(*db.DBInstanceStatus) != "available" { - continue - } - // Add to list of instances for the cluster - instance := &Instance{ - Endpoint: *db.Endpoint.Address, - } - // Set if IAM is configured for the endpoint - if db.IAMDatabaseAuthenticationEnabled != nil { - instance.IamEnabled = *db.IAMDatabaseAuthenticationEnabled - } - // Set the port, if it is known - if db.Endpoint.Port != nil { - instance.Port = *db.Endpoint.Port - } - if db.Engine != nil { - instance.Engine = *db.Engine - } - if _, ok := clusters[*db.DBClusterIdentifier]; !ok { - clusters[*db.DBClusterIdentifier] = &AuroraCluster{ - Instances: make([]*Instance, 0), + + for _, clusterID := range dbClusterIdentifiers { + // TODO: Seth Samuel: This method is not paginated, so if there are more than 100 instances in a cluster, we will only get the first 100 + // We should add pagination support to this method at some point + clusterInstances, err := c.client.DescribeDBInstances(ctx, + &rds.DescribeDBInstancesInput{ + Filters: []types.Filter{ + { + Name: aws.String("db-cluster-id"), + Values: []string{clusterID}, + }, + }, + }) + if err != nil { + return nil, fmt.Errorf("error running GetAuroraClusterEndpoints %v", err) + } + for _, db := range clusterInstances.DBInstances { + if db.Endpoint != nil && db.DBClusterIdentifier != nil { + if db.Endpoint.Address == nil || db.DBInstanceStatus == nil || strings.ToLower(*db.DBInstanceStatus) != "available" { + continue + } + // Add to list of instances for the cluster + instance := &Instance{ + Endpoint: *db.Endpoint.Address, + } + // Set if IAM is configured for the endpoint + if db.IAMDatabaseAuthenticationEnabled != nil { + instance.IamEnabled = *db.IAMDatabaseAuthenticationEnabled + } + // Set the port, if it is known + if db.Endpoint.Port != nil { + instance.Port = *db.Endpoint.Port + } + if db.Engine != nil { + instance.Engine = *db.Engine + } + if _, ok := clusters[*db.DBClusterIdentifier]; !ok { + clusters[*db.DBClusterIdentifier] = &AuroraCluster{ + Instances: make([]*Instance, 0), + } } + clusters[*db.DBClusterIdentifier].Instances = append(clusters[*db.DBClusterIdentifier].Instances, instance) } - clusters[*db.DBClusterIdentifier].Instances = append(clusters[*db.DBClusterIdentifier].Instances, instance) } } if len(clusters) == 0 { diff --git a/pkg/databasemonitoring/aws/aurora_test.go b/pkg/databasemonitoring/aws/aurora_test.go index 64869b7a1d4f6..4fd364ad3da49 100644 --- a/pkg/databasemonitoring/aws/aurora_test.go +++ b/pkg/databasemonitoring/aws/aurora_test.go @@ -211,7 +211,7 @@ func TestGetAuroraClusterEndpoints(t *testing.T) { { name: "multiple cluster ids returns single endpoint from API", configureClient: func(k *MockrdsService) { - k.EXPECT().DescribeDBInstances(gomock.Any(), createDescribeDBInstancesRequest([]string{"test-cluster", "test-cluster-2"})).Return(&rds.DescribeDBInstancesOutput{ + k.EXPECT().DescribeDBInstances(gomock.Any(), createDescribeDBInstancesRequest([]string{"test-cluster"})).Return(&rds.DescribeDBInstancesOutput{ DBInstances: []types.DBInstance{ { Endpoint: &types.Endpoint{ @@ -226,6 +226,9 @@ func TestGetAuroraClusterEndpoints(t *testing.T) { }, }, }, nil).Times(1) + k.EXPECT().DescribeDBInstances(gomock.Any(), createDescribeDBInstancesRequest([]string{"test-cluster-2"})).Return(&rds.DescribeDBInstancesOutput{ + DBInstances: []types.DBInstance{}, + }, nil).Times(1) }, clusterIDs: []string{"test-cluster", "test-cluster-2"}, expectedAuroraClusterEndpoints: map[string]*AuroraCluster{ @@ -244,7 +247,7 @@ func TestGetAuroraClusterEndpoints(t *testing.T) { { name: "multiple cluster ids returns many endpoints from API", configureClient: func(k *MockrdsService) { - k.EXPECT().DescribeDBInstances(gomock.Any(), createDescribeDBInstancesRequest([]string{"test-cluster", "test-cluster-2"})).Return(&rds.DescribeDBInstancesOutput{ + k.EXPECT().DescribeDBInstances(gomock.Any(), createDescribeDBInstancesRequest([]string{"test-cluster"})).Return(&rds.DescribeDBInstancesOutput{ DBInstances: []types.DBInstance{ { Endpoint: &types.Endpoint{ @@ -268,6 +271,11 @@ func TestGetAuroraClusterEndpoints(t *testing.T) { DBInstanceStatus: aws.String("available"), Engine: aws.String("aurora-postgresql"), }, + }, + }, nil).Times(1) + + k.EXPECT().DescribeDBInstances(gomock.Any(), createDescribeDBInstancesRequest([]string{"test-cluster-2"})).Return(&rds.DescribeDBInstancesOutput{ + DBInstances: []types.DBInstance{ { Endpoint: &types.Endpoint{ Address: aws.String("test-endpoint-3"), diff --git a/releasenotes/notes/query-aurora-instances-per-cluster-8481d23d9e432e1a.yaml b/releasenotes/notes/query-aurora-instances-per-cluster-8481d23d9e432e1a.yaml new file mode 100644 index 0000000000000..0bbafb416a868 --- /dev/null +++ b/releasenotes/notes/query-aurora-instances-per-cluster-8481d23d9e432e1a.yaml @@ -0,0 +1,12 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + Query Aurora instances per cluster to allow up to 100 instances per cluster + rather than 100 instances total. From 6ae9f79ff1d0067e485fb16e607308931a7799e7 Mon Sep 17 00:00:00 2001 From: Branden Clark Date: Fri, 6 Dec 2024 15:52:34 -0500 Subject: [PATCH 039/303] Update CODEOWNERS (#31850) --- .github/CODEOWNERS | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 202c143c2da56..4f6fc8357ea4e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -76,7 +76,7 @@ /.gitlab/deps_fetch/* @DataDog/agent-devx-infra /.gitlab/e2e/* @DataDog/agent-devx-infra @DataDog/agent-devx-loops /.gitlab/e2e_testing_deploy/* @DataDog/agent-devx-loops @DataDog/agent-devx-infra -/.gitlab/e2e_install_packages/* @DataDog/agent-delivery +/.gitlab/e2e_install_packages/* @DataDog/agent-delivery @DataDog/container-ecosystems /.gitlab/e2e_pre_test/* @DataDog/agent-devx-infra @DataDog/agent-devx-loops /.gitlab/kernel_matrix_testing/* @DataDog/agent-devx-infra @DataDog/ebpf-platform /.gitlab/lint/* @DataDog/agent-devx-infra @@ -131,13 +131,12 @@ /.gitlab/deps_build/ @DataDog/ebpf-platform @DataDog/agent-delivery @DataDog/windows-agent -/.gitlab/e2e_install_packages/windows.yml @DataDog/container-ecosystems @DataDog/agent-delivery @DataDog/windows-agent +/.gitlab/e2e_install_packages/windows.yml @DataDog/agent-delivery @DataDog/container-ecosystems @DataDog/windows-agent /.gitlab/common/ @DataDog/agent-devx-infra /.gitlab/common/test_infra_version.yml @DataDog/agent-devx-loops @DataDog/agent-devx-infra /.gitlab/e2e/e2e.yml @DataDog/container-integrations @DataDog/agent-devx-loops -/.gitlab/e2e_install_packages @DataDog/container-ecosystems @DataDog/agent-delivery /.gitlab/container_build/fakeintake.yml @DataDog/agent-e2e-testing @DataDog/agent-devx-loops /.gitlab/binary_build/fakeintake.yml @DataDog/agent-e2e-testing @DataDog/agent-devx-loops From 07187c133020064fafea30b3451a91b8a00e72cd Mon Sep 17 00:00:00 2001 From: Stanley Liu Date: Fri, 6 Dec 2024 16:16:24 -0500 Subject: [PATCH 040/303] Add apm_config.additional_endpoints to authorized config paths (#31851) --- comp/api/api/def/component.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/comp/api/api/def/component.go b/comp/api/api/def/component.go index 7bd2f7f716670..02c3aae88a231 100644 --- a/comp/api/api/def/component.go +++ b/comp/api/api/def/component.go @@ -48,7 +48,7 @@ type AuthorizedSet map[string]struct{} // config API. var AuthorizedConfigPathsCore = buildAuthorizedSet( "api_key", "site", "dd_url", "logs_config.dd_url", - "additional_endpoints", "logs_config.additional_endpoints", + "additional_endpoints", "logs_config.additional_endpoints", "apm_config.additional_endpoints", ) func buildAuthorizedSet(paths ...string) AuthorizedSet { From 00f8f5b1597ef887a062b8b2ecc3a18cc4be1e5e Mon Sep 17 00:00:00 2001 From: Adel Haj Hassan <41540817+adel121@users.noreply.github.com> Date: Sun, 8 Dec 2024 00:00:41 +0100 Subject: [PATCH 041/303] [CONTP-535] optimise tagger server chunking function by processing chunks in place (#31837) --- comp/core/tagger/server/README.md | 77 +++++++++++++++++++ comp/core/tagger/server/server.go | 27 ++++--- comp/core/tagger/server/util.go | 67 ++++++++++++---- .../core/tagger/server/util_benchmark_test.go | 48 ++++++++++++ comp/core/tagger/server/util_test.go | 75 ++++++++++++------ 5 files changed, 244 insertions(+), 50 deletions(-) create mode 100644 comp/core/tagger/server/README.md create mode 100644 comp/core/tagger/server/util_benchmark_test.go diff --git a/comp/core/tagger/server/README.md b/comp/core/tagger/server/README.md new file mode 100644 index 0000000000000..60e1c0cd90014 --- /dev/null +++ b/comp/core/tagger/server/README.md @@ -0,0 +1,77 @@ +## Introduction + +This package server implements a gRPC server that streams Tagger entities to remote tagger clients. + +## Behaviour + +When a client connects to the tagger grpc server, the server creates a subscription to the local tagger in order to stream tags. + +Before streaming new tag events, the server sends an initial burst to the client over the stream. This initial burst contains a snapshot of the tagger content. After the initial burst has been processed, the server will stream new tag events to the client based on the filters provided in the streaming request. + +### Cutting Events into chunks + +Sending very large messages over the grpc stream can cause the message to be dropped or rejected by the client. The limit is 4MB by default. + +To avoid such scenarios, especially when sending the initial burst, the server cuts each message into small chunks that can be easily transmitted over the stream. + +This logic is implemented in the `util.go` folder. + +We provide 2 implementations: +- `processChunksWithSplit`: splits an event slice into a small chunks where each chunk contains a contiguous slice of events. It then processes the generated chunks sequentially. This will load all chunks into memory (stored in a slice) and then return them. +- `processChunksInPlace`: this has a similar functionality as `processChunksWithSplit`, but it is more optimized in terms of memory and cpu because it processes chunks in place without any extra memory allocation. + +We keep both implementations for at least release candidate to ensure everything works well and be able to quickly revert in case of regressions. + +#### Benchmark Testing + +Benchmark tests show that using lazy chunking results in significant memory and cpu improvement: + +Go to `util_benchmark_test.go`: + +``` +// with processChunksFunc = processChunksWithSplit[int] +go test -bench BenchmarkProcessChunks -benchmem -count 6 -benchtime 100x > old.txt + +// with processChunksFunc = processChunksInPlace[int] +go test -bench BenchmarkProcessChunks -benchmem -count 6 -benchtime 100x > new.txt + +// Compare results +benchstat old.txt new.txt + +goos: linux +goarch: arm64 +pkg: github.com/DataDog/datadog-agent/comp/core/tagger/server + │ old.txt │ new.txt │ + │ sec/op │ sec/op vs base │ +ProcessChunks/100-items-10 2399.5n ± 47% 239.8n ± 4% -90.01% (p=0.002 n=6) +ProcessChunks/1000-items-10 35.072µ ± 13% 2.344µ ± 11% -93.32% (p=0.002 n=6) +ProcessChunks/10000-items-10 365.19µ ± 5% 22.56µ ± 18% -93.82% (p=0.002 n=6) +ProcessChunks/100000-items-10 3435.1µ ± 7% 222.5µ ± 16% -93.52% (p=0.002 n=6) +ProcessChunks/1000000-items-10 29.059m ± 9% 2.219m ± 31% -92.36% (p=0.002 n=6) +geomean 314.3µ 22.87µ -92.72% + + │ old.txt │ new.txt │ + │ B/op │ B/op vs base │ +ProcessChunks/100-items-10 2.969Ki ± 0% 0.000Ki ± 0% -100.00% (p=0.002 n=6) +ProcessChunks/1000-items-10 29.02Ki ± 0% 0.00Ki ± 0% -100.00% (p=0.002 n=6) +ProcessChunks/10000-items-10 370.7Ki ± 0% 0.0Ki ± 0% -100.00% (p=0.002 n=6) +ProcessChunks/100000-items-10 4.165Mi ± 0% 0.000Mi ± 0% -100.00% (p=0.002 n=6) +ProcessChunks/1000000-items-10 44.65Mi ± 0% 0.00Mi ± 0% -100.00% (p=0.002 n=6) +geomean 362.1Ki ? ¹ ² +¹ summaries must be >0 to compute geomean +² ratios must be >0 to compute geomean + + │ old.txt │ new.txt │ + │ allocs/op │ allocs/op vs base │ +ProcessChunks/100-items-10 81.00 ± 0% 0.00 ± 0% -100.00% (p=0.002 n=6) +ProcessChunks/1000-items-10 759.0 ± 0% 0.0 ± 0% -100.00% (p=0.002 n=6) +ProcessChunks/10000-items-10 7.514k ± 0% 0.000k ± 0% -100.00% (p=0.002 n=6) +ProcessChunks/100000-items-10 75.02k ± 0% 0.00k ± 0% -100.00% (p=0.002 n=6) +ProcessChunks/1000000-items-10 750.0k ± 0% 0.0k ± 0% -100.00% (p=0.002 n=6) +geomean 7.638k ? ¹ ² +¹ summaries must be >0 to compute geomean +² ratios must be >0 to compute geomean +``` + + + diff --git a/comp/core/tagger/server/server.go b/comp/core/tagger/server/server.go index 58c4ef2a0667c..5e323c43c7ee2 100644 --- a/comp/core/tagger/server/server.go +++ b/comp/core/tagger/server/server.go @@ -77,6 +77,15 @@ func (s *Server) TaggerStreamEntities(in *pb.StreamTagsRequest, out pb.AgentSecu ticker := time.NewTicker(streamKeepAliveInterval) defer ticker.Stop() + + sendFunc := func(chunk []*pb.StreamTagsEvent) error { + return grpc.DoWithTimeout(func() error { + return out.Send(&pb.StreamTagsResponse{ + Events: chunk, + }) + }, taggerStreamSendTimeout) + } + for { select { case events, ok := <-subscription.EventsChan(): @@ -98,20 +107,10 @@ func (s *Server) TaggerStreamEntities(in *pb.StreamTagsRequest, out pb.AgentSecu responseEvents = append(responseEvents, e) } - // Split events into chunks and send each one - chunks := splitEvents(responseEvents, s.maxEventSize) - for _, chunk := range chunks { - err = grpc.DoWithTimeout(func() error { - return out.Send(&pb.StreamTagsResponse{ - Events: chunk, - }) - }, taggerStreamSendTimeout) - - if err != nil { - log.Warnf("error sending tagger event: %s", err) - s.taggerComponent.GetTaggerTelemetryStore().ServerStreamErrors.Inc() - return err - } + if err := processChunksInPlace(responseEvents, s.maxEventSize, computeTagsEventInBytes, sendFunc); err != nil { + log.Warnf("error sending tagger event: %s", err) + s.taggerComponent.GetTaggerTelemetryStore().ServerStreamErrors.Inc() + return err } case <-out.Context().Done(): diff --git a/comp/core/tagger/server/util.go b/comp/core/tagger/server/util.go index 28fc2c54a1f3d..538c71b4dc05e 100644 --- a/comp/core/tagger/server/util.go +++ b/comp/core/tagger/server/util.go @@ -11,15 +11,44 @@ import ( pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo/core" ) -// splitBySize splits the given slice into contiguous non-overlapping subslices such that -// the size of each sub-slice is at most maxChunkSize. -// The size of each item is calculated using computeSize +type sizeComputerFunc[T any] func(T) int + +type consumeChunkFunc[T any] func(T) error + +// computeProtoEventSize returns the size of a tags stream event in bytes +func computeTagsEventInBytes(event *pb.StreamTagsEvent) int { return proto.Size(event) } + +// processChunksInPlace splits the passed slice into contiguous chunks such that the total size of each chunk is at most maxChunkSize +// and applies the consume function to each of these chunks // -// This function assumes that the size of each single item of the initial slice is not larger than maxChunkSize -func splitBySize[T any](slice []T, maxChunkSize int, computeSize func(T) int) [][]T { +// The size of an item is computed with computeSize +// If an item has a size large than maxChunkSize, it is placed in a singleton chunk (chunk with one item) +// +// The consume function is applied to different chunks in-place, without any need extra memory allocation +func processChunksInPlace[T any](slice []T, maxChunkSize int, computeSize sizeComputerFunc[T], consume consumeChunkFunc[[]T]) error { + idx := 0 + for idx < len(slice) { + chunkSize := computeSize(slice[idx]) + j := idx + 1 + + for j < len(slice) { + eventSize := computeSize(slice[j]) + if chunkSize+eventSize > maxChunkSize { + break + } + chunkSize += eventSize + j++ + } + + if err := consume(slice[idx:j]); err != nil { + return err + } + idx = j + } + return nil +} - // TODO: return an iter.Seq[[]T] instead of [][]T once we upgrade to golang v1.23 - // returning iter.Seq[[]T] has better performance in terms of memory consumption +func splitBySize[T any](slice []T, maxChunkSize int, computeSize func(T) int) [][]T { var chunks [][]T currentChunk := []T{} currentSize := 0 @@ -40,11 +69,21 @@ func splitBySize[T any](slice []T, maxChunkSize int, computeSize func(T) int) [] return chunks } -// splitEvents splits the array of events to chunks with at most maxChunkSize each -func splitEvents(events []*pb.StreamTagsEvent, maxChunkSize int) [][]*pb.StreamTagsEvent { - return splitBySize( - events, - maxChunkSize, - func(event *pb.StreamTagsEvent) int { return proto.Size(event) }, - ) +// processChunksWithSplit splits the passed slice into contiguous chunks such that the total size of each chunk is at most maxChunkSize +// and then applies the consume function to each of these chunks +// +// The size of an item is computed with computeSize +// If an item has a size large than maxChunkSize, it is placed in a singleton chunk (chunk with one item) +// +// Prefer using processChunksInPlace for better CPU and memory performance. This implementation is only kept for benchmarking purposes. +func processChunksWithSplit[T any](slice []T, maxChunkSize int, computeSize sizeComputerFunc[T], consume consumeChunkFunc[[]T]) error { + chunks := splitBySize(slice, maxChunkSize, computeSize) + + for _, chunk := range chunks { + if err := consume(chunk); err != nil { + return err + } + } + + return nil } diff --git a/comp/core/tagger/server/util_benchmark_test.go b/comp/core/tagger/server/util_benchmark_test.go new file mode 100644 index 0000000000000..49ccd243d7365 --- /dev/null +++ b/comp/core/tagger/server/util_benchmark_test.go @@ -0,0 +1,48 @@ +// 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 2024-present Datadog, Inc. + +package server + +import ( + "fmt" + "testing" +) + +var benchmarkSizes = []int{100, 1000, 10000, 100000, 1000000} + +const maxChunkSize = 4 +const mockItemSize = 1 + +var global []int + +func createBaseBenchmarkSlice(size int) []int { + var baseBenchmarkSlice = make([]int, size) + for i := range size { + baseBenchmarkSlice[i] = i + } + return baseBenchmarkSlice +} + +func mockComputeSize(int) int { return mockItemSize } + +func BenchmarkProcessChunks(b *testing.B) { + b.ReportAllocs() + for _, size := range benchmarkSizes { + b.Run(fmt.Sprintf("%d-items", size), func(b *testing.B) { + + // Point this to the implementation you want to benchmark + var processChunksFunc = processChunksInPlace[int] + + items := createBaseBenchmarkSlice(size) + var local []int + + b.ResetTimer() + for i := 0; i < b.N; i++ { + _ = processChunksFunc(items, maxChunkSize, mockComputeSize, func(t []int) error { local = t; return nil }) + } + global = local + }) + } +} diff --git a/comp/core/tagger/server/util_test.go b/comp/core/tagger/server/util_test.go index 76f94c4988630..7a8b979b30157 100644 --- a/comp/core/tagger/server/util_test.go +++ b/comp/core/tagger/server/util_test.go @@ -6,6 +6,7 @@ package server import ( + "reflect" "testing" "github.com/stretchr/testify/assert" @@ -16,18 +17,35 @@ type mockStreamTagsEvent struct { size int } -func TestSplitEvents(t *testing.T) { +var computeSize = func(e mockStreamTagsEvent) int { + return e.size +} + +func getConsumeFunc(slice *[][]int) consumeChunkFunc[[]mockStreamTagsEvent] { + return func(chunk []mockStreamTagsEvent) error { + ids := make([]int, 0, len(chunk)) + for _, item := range chunk { + ids = append(ids, item.id) + } + + *slice = append(*slice, ids) + return nil + } +} + +func Test(t *testing.T) { + testCases := []struct { name string events []mockStreamTagsEvent maxChunkSize int - expected [][]mockStreamTagsEvent // Expecting indices of events in chunks for easier comparison + expected [][]int // Expecting id's of events in chunks for easier comparison }{ { name: "Empty input", events: []mockStreamTagsEvent{}, maxChunkSize: 100, - expected: nil, // No chunks expected + expected: [][]int{}, }, { name: "Single event within chunk size", @@ -35,9 +53,9 @@ func TestSplitEvents(t *testing.T) { {id: 1, size: 50}, // Mock event with size 50 }, maxChunkSize: 100, - expected: [][]mockStreamTagsEvent{ + expected: [][]int{ { - {id: 1, size: 50}, // One chunk with one event + 1, // One chunk with one event }, }, }, @@ -47,9 +65,9 @@ func TestSplitEvents(t *testing.T) { {id: 1, size: 20}, {id: 2, size: 30}, {id: 3, size: 40}, // Total size = 90 }, maxChunkSize: 100, - expected: [][]mockStreamTagsEvent{ + expected: [][]int{ { - {id: 1, size: 20}, {id: 2, size: 30}, {id: 3, size: 40}, // All events fit in one chunk + 1, 2, 3, // All events fit in one chunk }, }, }, @@ -59,13 +77,12 @@ func TestSplitEvents(t *testing.T) { {id: 1, size: 40}, {id: 2, size: 50}, {id: 3, size: 60}, // Total size = 150 }, maxChunkSize: 100, - expected: [][]mockStreamTagsEvent{ + expected: [][]int{ { - {id: 1, size: 40}, - {id: 2, size: 50}, + 1, 2, }, { - {id: 3, size: 60}, + 3, }, // Last event in second chunk }, }, @@ -75,8 +92,8 @@ func TestSplitEvents(t *testing.T) { {id: 1, size: 50}, {id: 2, size: 50}, // Total size = 100 }, maxChunkSize: 100, - expected: [][]mockStreamTagsEvent{ - {{id: 1, size: 50}, {id: 2, size: 50}}, // Both events fit exactly in one chunk + expected: [][]int{ + {1, 2}, // Both events fit exactly in one chunk }, }, { @@ -85,21 +102,35 @@ func TestSplitEvents(t *testing.T) { {id: 1, size: 100}, {id: 2, size: 101}, // One exactly fits, one exceeds }, maxChunkSize: 100, - expected: [][]mockStreamTagsEvent{ - { - {id: 1, size: 100}, - }, - { - {id: 2, size: 101}, - }, + expected: [][]int{ + {1}, {2}, + }, + }, + { + name: "Multiple items exceeding max chunk size", + events: []mockStreamTagsEvent{ + {id: 1, size: 100}, {id: 2, size: 101}, {id: 3, size: 101}, + }, + maxChunkSize: 100, + expected: [][]int{ + {1}, {2}, {3}, }, }, } for _, testCase := range testCases { t.Run(testCase.name, func(t *testing.T) { - chunks := splitBySize(testCase.events, testCase.maxChunkSize, func(e mockStreamTagsEvent) int { return e.size }) - assert.Equal(t, testCase.expected, chunks) + slice := make([][]int, 0, len(testCase.expected)) + processChunksInPlace(testCase.events, testCase.maxChunkSize, computeSize, getConsumeFunc(&slice)) + if len(testCase.expected) > 0 || len(slice) > 0 { + assert.Truef(t, reflect.DeepEqual(testCase.expected, slice), "expected %v, found %v", testCase.expected, slice) + } + + slice = make([][]int, 0, len(testCase.expected)) + processChunksWithSplit(testCase.events, testCase.maxChunkSize, computeSize, getConsumeFunc(&slice)) + if len(testCase.expected) > 0 || len(slice) > 0 { + assert.Truef(t, reflect.DeepEqual(testCase.expected, slice), "expected %v, found %v", testCase.expected, slice) + } }) } } From b08c03dc0cfd3b7c05e3e1225e3a0549b97be712 Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Sun, 8 Dec 2024 13:04:03 +0100 Subject: [PATCH 042/303] pkg/languagedetection: extract mock function from privileged detector (#31860) Co-authored-by: Guy Arbitman --- .../privileged/privileged_detector.go | 8 ------ .../privileged_detector_testutil.go | 25 +++++++++++++++++++ 2 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 pkg/languagedetection/privileged/privileged_detector_testutil.go diff --git a/pkg/languagedetection/privileged/privileged_detector.go b/pkg/languagedetection/privileged/privileged_detector.go index b6447ea310c14..2e09103a99aa8 100644 --- a/pkg/languagedetection/privileged/privileged_detector.go +++ b/pkg/languagedetection/privileged/privileged_detector.go @@ -18,7 +18,6 @@ import ( "strconv" "sync" "syscall" - "testing" "github.com/hashicorp/golang-lru/v2/simplelru" @@ -107,13 +106,6 @@ func (l *LanguageDetector) DetectWithPrivileges(procs []languagemodels.Process) return languages } -// MockPrivilegedDetectors is used in tests to inject mock tests. It should be called before `DetectWithPrivileges` -func MockPrivilegedDetectors(t *testing.T, newDetectors []languagemodels.Detector) { - oldDetectors := detectorsWithPrivilege - t.Cleanup(func() { detectorsWithPrivilege = oldDetectors }) - detectorsWithPrivilege = newDetectors -} - func (l *LanguageDetector) getBinID(process languagemodels.Process) (binaryID, error) { procPath := filepath.Join(l.hostProc, strconv.Itoa(int(process.GetPid()))) exePath := filepath.Join(procPath, "exe") diff --git a/pkg/languagedetection/privileged/privileged_detector_testutil.go b/pkg/languagedetection/privileged/privileged_detector_testutil.go new file mode 100644 index 0000000000000..1810dd8006164 --- /dev/null +++ b/pkg/languagedetection/privileged/privileged_detector_testutil.go @@ -0,0 +1,25 @@ +// 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 2024-present Datadog, Inc. + +//go:build linux && test + +// Package privileged implements language detection that relies on elevated permissions. +// +// An example of privileged language detection would be binary analysis, where the binary must be +// inspected to determine the language it was compiled from. +package privileged + +import ( + "testing" + + "github.com/DataDog/datadog-agent/pkg/languagedetection/languagemodels" +) + +// MockPrivilegedDetectors is used in tests to inject mock tests. It should be called before `DetectWithPrivileges` +func MockPrivilegedDetectors(t *testing.T, newDetectors []languagemodels.Detector) { + oldDetectors := detectorsWithPrivilege + t.Cleanup(func() { detectorsWithPrivilege = oldDetectors }) + detectorsWithPrivilege = newDetectors +} From 512bca5b18e2481d0048924a3c4c6fbc2756704c Mon Sep 17 00:00:00 2001 From: Guy Arbitman Date: Sun, 8 Dec 2024 15:22:18 +0200 Subject: [PATCH 043/303] usm: Move helper function to its only usage (#31862) --- pkg/network/usm/sharedlibraries/watcher.go | 28 +++++++++++++++++++++- pkg/process/monitor/process_monitor.go | 26 -------------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/pkg/network/usm/sharedlibraries/watcher.go b/pkg/network/usm/sharedlibraries/watcher.go index ca44117d63772..f23673fc6c24e 100644 --- a/pkg/network/usm/sharedlibraries/watcher.go +++ b/pkg/network/usm/sharedlibraries/watcher.go @@ -275,7 +275,7 @@ func (w *Watcher) Start() { return case <-processSync.C: processSet := w.registry.GetRegisteredProcesses() - deletedPids := monitor.FindDeletedProcesses(processSet) + deletedPids := findDeletedProcesses(processSet) for deletedPid := range deletedPids { _ = w.registry.Unregister(deletedPid) } @@ -290,3 +290,29 @@ func (w *Watcher) Start() { utils.AddAttacher(consts.USMModuleName, "native", w) } + +// findDeletedProcesses returns the terminated PIDs from the given map. +func findDeletedProcesses[V any](pids map[uint32]V) map[uint32]struct{} { + existingPids := make(map[uint32]struct{}, len(pids)) + + procIter := func(pid int) error { + if _, exists := pids[uint32(pid)]; exists { + existingPids[uint32(pid)] = struct{}{} + } + return nil + } + // Scanning already running processes + if err := kernel.WithAllProcs(kernel.ProcFSRoot(), procIter); err != nil { + return nil + } + + res := make(map[uint32]struct{}, len(pids)-len(existingPids)) + for pid := range pids { + if _, exists := existingPids[pid]; exists { + continue + } + res[pid] = struct{}{} + } + + return res +} diff --git a/pkg/process/monitor/process_monitor.go b/pkg/process/monitor/process_monitor.go index 1b9e30eb1ec84..8710aa63e324f 100644 --- a/pkg/process/monitor/process_monitor.go +++ b/pkg/process/monitor/process_monitor.go @@ -487,32 +487,6 @@ func (pm *ProcessMonitor) Stop() { pm.processExitCallbacksMutex.Unlock() } -// FindDeletedProcesses returns the terminated PIDs from the given map. -func FindDeletedProcesses[V any](pids map[uint32]V) map[uint32]struct{} { - existingPids := make(map[uint32]struct{}, len(pids)) - - procIter := func(pid int) error { - if _, exists := pids[uint32(pid)]; exists { - existingPids[uint32(pid)] = struct{}{} - } - return nil - } - // Scanning already running processes - if err := kernel.WithAllProcs(kernel.ProcFSRoot(), procIter); err != nil { - return nil - } - - res := make(map[uint32]struct{}, len(pids)-len(existingPids)) - for pid := range pids { - if _, exists := existingPids[pid]; exists { - continue - } - res[pid] = struct{}{} - } - - return res -} - // Event defines the event used by the process monitor type Event struct { Type model.EventType From b027f60e9e1129550c7ee0a272d22a75720f4a78 Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Mon, 9 Dec 2024 09:51:18 +0100 Subject: [PATCH 044/303] refactor(package_size): Move code to a python invoke task (#31578) --- .gitlab/JOBOWNERS | 1 + .gitlab/pkg_metrics/pkg_metrics.yml | 29 ++++ tasks/libs/common/git.py | 2 +- tasks/libs/package/size.py | 93 ++++++++++- tasks/libs/package/utils.py | 76 +++++++++ tasks/package.py | 46 ++--- tasks/unit_tests/package_lib_tests.py | 157 +++++++++++++++++- tasks/unit_tests/package_tests.py | 81 +++++++++ tasks/unit_tests/testdata/package_sizes.json | 44 +++++ .../testdata/package_sizes_real.json | 1 + .../packages/datadog-agent-7.aarch64.rpm | 0 .../packages/datadog-agent-7.x86_64.rpm | 0 .../packages/datadog-agent_7_arm64.deb | 0 .../packages/datadog-dogstatsd-7.x86_64.rpm | 0 .../packages/datadog-dogstatsd_7_amd64.deb | 0 .../packages/datadog-dogstatsd_7_arm64.deb | 0 .../packages/datadog-heroku-agent_7_amd64.deb | 0 .../packages/datadog-iot-agent-7.aarch64.rpm | 0 .../packages/datadog-iot-agent-7.x86_64.rpm | 0 .../packages/datadog-iot-agent_7_amd64.deb | 0 .../packages/datadog-iot-agent_7_arm64.deb | 0 21 files changed, 506 insertions(+), 24 deletions(-) create mode 100644 tasks/libs/package/utils.py create mode 100644 tasks/unit_tests/package_tests.py create mode 100644 tasks/unit_tests/testdata/package_sizes.json create mode 100644 tasks/unit_tests/testdata/package_sizes_real.json create mode 100644 tasks/unit_tests/testdata/packages/datadog-agent-7.aarch64.rpm create mode 100644 tasks/unit_tests/testdata/packages/datadog-agent-7.x86_64.rpm create mode 100644 tasks/unit_tests/testdata/packages/datadog-agent_7_arm64.deb create mode 100644 tasks/unit_tests/testdata/packages/datadog-dogstatsd-7.x86_64.rpm create mode 100644 tasks/unit_tests/testdata/packages/datadog-dogstatsd_7_amd64.deb create mode 100644 tasks/unit_tests/testdata/packages/datadog-dogstatsd_7_arm64.deb create mode 100644 tasks/unit_tests/testdata/packages/datadog-heroku-agent_7_amd64.deb create mode 100644 tasks/unit_tests/testdata/packages/datadog-iot-agent-7.aarch64.rpm create mode 100644 tasks/unit_tests/testdata/packages/datadog-iot-agent-7.x86_64.rpm create mode 100644 tasks/unit_tests/testdata/packages/datadog-iot-agent_7_amd64.deb create mode 100644 tasks/unit_tests/testdata/packages/datadog-iot-agent_7_arm64.deb diff --git a/.gitlab/JOBOWNERS b/.gitlab/JOBOWNERS index 9cf4e21fc84de..9cb87462dca48 100644 --- a/.gitlab/JOBOWNERS +++ b/.gitlab/JOBOWNERS @@ -67,6 +67,7 @@ iot_agent_suse* @DataDog/agent-delivery dogstatsd_suse* @DataDog/agent-delivery agent_oci* @DataDog/agent-delivery installer_oci* @DataDog/agent-delivery +new_check_pkg_size @DataDog/agent-delivery # Testing package deploy deploy_deb_testing* @DataDog/agent-delivery diff --git a/.gitlab/pkg_metrics/pkg_metrics.yml b/.gitlab/pkg_metrics/pkg_metrics.yml index bb62a727a570a..e8616c61247a2 100644 --- a/.gitlab/pkg_metrics/pkg_metrics.yml +++ b/.gitlab/pkg_metrics/pkg_metrics.yml @@ -179,3 +179,32 @@ check_pkg_size-arm64-a7: ["datadog-iot-agent"]="10000000" ["datadog-dogstatsd"]="10000000" ) + +new_check_pkg_size: + stage: pkg_metrics + image: registry.ddbuild.io/ci/datadog-agent-buildimages/deb_x64$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES + tags: ["arch:amd64"] + rules: + - !reference [.except_mergequeue] + - when: on_success + allow_failure: true + needs: + - agent_deb-x64-a7 + - iot_agent_deb-x64 + - dogstatsd_deb-x64 + - agent_heroku_deb-x64-a7 + - agent_rpm-x64-a7 + - iot_agent_rpm-x64 + - dogstatsd_rpm-x64 + - agent_suse-x64-a7 + - dogstatsd_suse-x64 + - iot_agent_suse-x64 + - agent_deb-arm64-a7 + - iot_agent_deb-arm64 + - dogstatsd_deb-arm64 + - agent_rpm-arm64-a7 + - iot_agent_rpm-arm64 + script: + - ls -l $OMNIBUS_PACKAGE_DIR + - ls -l $OMNIBUS_PACKAGE_DIR_SUSE + - inv package.check-size diff --git a/tasks/libs/common/git.py b/tasks/libs/common/git.py index 44f5c5a684cfa..dfff77eda03f7 100644 --- a/tasks/libs/common/git.py +++ b/tasks/libs/common/git.py @@ -117,7 +117,7 @@ def get_default_branch(major: int | None = None): def get_common_ancestor(ctx, branch, base=None) -> str: - base = base or get_default_branch() + base = base or f"origin/{get_default_branch()}" return ctx.run(f"git merge-base {branch} {base}", hide=True).stdout.strip() diff --git a/tasks/libs/package/size.py b/tasks/libs/package/size.py index 5f564c91837f2..cae0353453f7d 100644 --- a/tasks/libs/package/size.py +++ b/tasks/libs/package/size.py @@ -1,10 +1,15 @@ import os +import sys import tempfile from datetime import datetime -from tasks.libs.common.color import color_message +from invoke import Exit + +from tasks.libs.common.color import Color, color_message from tasks.libs.common.constants import ORIGIN_CATEGORY, ORIGIN_PRODUCT, ORIGIN_SERVICE +from tasks.libs.common.git import get_common_ancestor, get_current_branch, get_default_branch from tasks.libs.common.utils import get_metric_origin +from tasks.libs.package.utils import get_package_path DEBIAN_OS = "debian" CENTOS_OS = "centos" @@ -31,6 +36,26 @@ }, } +PACKAGE_SIZE_TEMPLATE = { + 'amd64': { + 'datadog-agent': {'deb': 140000000}, + 'datadog-iot-agent': {'deb': 10000000}, + 'datadog-dogstatsd': {'deb': 10000000}, + 'datadog-heroku-agent': {'deb': 70000000}, + }, + 'x86_64': { + 'datadog-agent': {'rpm': 140000000, 'suse': 140000000}, + 'datadog-iot-agent': {'rpm': 10000000, 'suse': 10000000}, + 'datadog-dogstatsd': {'rpm': 10000000, 'suse': 10000000}, + }, + 'arm64': { + 'datadog-agent': {'deb': 140000000}, + 'datadog-iot-agent': {'deb': 10000000}, + 'datadog-dogstatsd': {'deb': 10000000}, + }, + 'aarch64': {'datadog-agent': {'rpm': 140000000}, 'datadog-iot-agent': {'rpm': 10000000}}, +} + def extract_deb_package(ctx, package_path, extract_dir): ctx.run(f"dpkg -x {package_path} {extract_dir} > /dev/null") @@ -132,3 +157,69 @@ def compute_package_size_metrics( ) return series + + +def compare(ctx, package_sizes, arch, flavor, os_name, threshold): + """ + Compare (or update) a package size with the ancestor package size. + """ + mb = 1000000 + if os_name == 'suse': + dir = os.environ['OMNIBUS_PACKAGE_DIR_SUSE'] + path = f'{dir}/{flavor}-7*{arch}.rpm' + else: + dir = os.environ['OMNIBUS_PACKAGE_DIR'] + separator = '_' if os_name == 'deb' else '-' + path = f'{dir}/{flavor}{separator}7*{arch}.{os_name}' + package_size = _get_uncompressed_size(ctx, get_package_path(path), os_name) + branch = get_current_branch(ctx) + ancestor = get_common_ancestor(ctx, branch) + if branch == get_default_branch(): + package_sizes[ancestor][arch][flavor][os_name] = package_size + return + previous_size = get_previous_size(package_sizes, ancestor, arch, flavor, os_name) + diff = package_size - previous_size + + # For printing purposes + new_package_size_mb = package_size / mb + stable_package_size_mb = previous_size / mb + threshold_mb = threshold / mb + diff_mb = diff / mb + message = f"""{flavor}-{arch}-{os_name} size increase is OK: + New package size is {new_package_size_mb:.2f}MB + Ancestor package ({ancestor}) size is {stable_package_size_mb:.2f}MB + Diff is {diff_mb:.2f}MB (max allowed diff: {threshold_mb:.2f}MB)""" + + if diff > threshold: + print(color_message(message.replace('OK', 'too large'), Color.RED), file=sys.stderr) + raise Exit(code=1) + + print(message) + + +def get_previous_size(package_sizes, ancestor, arch, flavor, os_name): + """ + Get the size of the package for the given ancestor, or the earliest ancestor if the given ancestor is not found. + """ + if ancestor in package_sizes: + commit = ancestor + else: + commit = min(package_sizes, key=lambda x: package_sizes[x]['timestamp']) + return package_sizes[commit][arch][flavor][os_name] + + +def _get_uncompressed_size(ctx, package, os_name): + if os_name == 'deb': + return _get_deb_uncompressed_size(ctx, package) + else: + return _get_rpm_uncompressed_size(ctx, package) + + +def _get_deb_uncompressed_size(ctx, package): + # the size returned by dpkg is a number of bytes divided by 1024 + # so we multiply it back to get the same unit as RPM or stat + return int(ctx.run(f'dpkg-deb --info {package} | grep Installed-Size | cut -d : -f 2 | xargs').stdout) * 1024 + + +def _get_rpm_uncompressed_size(ctx, package): + return int(ctx.run(f'rpm -qip {package} | grep Size | cut -d : -f 2 | xargs').stdout) diff --git a/tasks/libs/package/utils.py b/tasks/libs/package/utils.py new file mode 100644 index 0000000000000..ba5448ad666c7 --- /dev/null +++ b/tasks/libs/package/utils.py @@ -0,0 +1,76 @@ +import glob +import json + +from invoke import Exit, UnexpectedExit + +from tasks.libs.common.color import color_message +from tasks.libs.notify.utils import AWS_S3_CP_CMD + +PACKAGE_SIZE_S3_CI_BUCKET_URL = "s3://dd-ci-artefacts-build-stable/datadog-agent/package_size" + + +def get_package_path(glob_pattern): + package_paths = glob.glob(glob_pattern) + if len(package_paths) > 1: + raise Exit(code=1, message=color_message(f"Too many files matching {glob_pattern}: {package_paths}", "red")) + elif len(package_paths) == 0: + raise Exit(code=1, message=color_message(f"Couldn't find any file matching {glob_pattern}", "red")) + + return package_paths[0] + + +def list_packages(template, parent=""): + """ + Recursively parse the template to generate the argument list for the compare task + """ + packs = [] + parent = parent if parent else [] + for key, value in template.items(): + if isinstance(value, dict): + packs += list_packages(value, parent + [key]) + else: + if key != "timestamp": + packs.append(parent + [key, value]) + return packs + + +def retrieve_package_sizes(ctx, package_size_file: str, distant: bool = True): + """ + Retrieve the stored document in aws s3, or create it + The content of the file is the following: + { + "c0ae34b1": { + "timestamp": "1582230020", + "amd64": { + "datadog-agent": { + "deb": 123456, + "rpm": 123456, + "suse": 123456}}} + """ + try: + if distant: + ctx.run( + f"{AWS_S3_CP_CMD} {PACKAGE_SIZE_S3_CI_BUCKET_URL}/{package_size_file} {package_size_file}", + hide=True, + ) + with open(package_size_file) as f: + package_sizes = json.load(f) + except UnexpectedExit as e: + if "404" in e.result.stderr: + package_sizes = {} + else: + raise e + return package_sizes + + +def upload_package_sizes(ctx, package_sizes: dict, package_size_file: str, distant: bool = True): + """ + Save the package_sizes dict to a file and upload it to the CI bucket + """ + with open(package_size_file, "w") as f: + json.dump(package_sizes, f) + if distant: + ctx.run( + f"{AWS_S3_CP_CMD} {package_size_file} {PACKAGE_SIZE_S3_CI_BUCKET_URL}/{package_size_file}", + hide="stdout", + ) diff --git a/tasks/package.py b/tasks/package.py index ee1dc1adabbf0..4e9a859ae8850 100644 --- a/tasks/package.py +++ b/tasks/package.py @@ -1,31 +1,37 @@ -import glob import os +from datetime import datetime from invoke import task from invoke.exceptions import Exit from tasks.libs.common.color import color_message -from tasks.libs.package.size import compute_package_size_metrics +from tasks.libs.common.git import get_common_ancestor, get_current_branch, get_default_branch +from tasks.libs.package.size import ( + PACKAGE_SIZE_TEMPLATE, + _get_deb_uncompressed_size, + _get_rpm_uncompressed_size, + compare, + compute_package_size_metrics, +) +from tasks.libs.package.utils import get_package_path, list_packages, retrieve_package_sizes, upload_package_sizes -def get_package_path(glob_pattern): - package_paths = glob.glob(glob_pattern) - if len(package_paths) > 1: - raise Exit(code=1, message=color_message(f"Too many files matching {glob_pattern}: {package_paths}", "red")) - elif len(package_paths) == 0: - raise Exit(code=1, message=color_message(f"Couldn't find any file matching {glob_pattern}", "red")) - - return package_paths[0] - - -def _get_deb_uncompressed_size(ctx, package): - # the size returned by dpkg is a number of bytes divided by 1024 - # so we multiply it back to get the same unit as RPM or stat - return int(ctx.run(f'dpkg-deb --info {package} | grep Installed-Size | cut -d : -f 2 | xargs').stdout) * 1024 - - -def _get_rpm_uncompressed_size(ctx, package): - return int(ctx.run(f'rpm -qip {package} | grep Size | cut -d : -f 2 | xargs').stdout) +@task +def check_size(ctx, filename: str = 'package_sizes.json', dry_run: bool = False): + package_sizes = retrieve_package_sizes(ctx, filename, distant=not dry_run) + if get_current_branch(ctx) == get_default_branch(): + # Initialize to default values + ancestor = get_common_ancestor(ctx, get_default_branch()) + if ancestor in package_sizes: + # The test already ran on this commit + return + package_sizes[ancestor] = PACKAGE_SIZE_TEMPLATE + package_sizes[ancestor]['timestamp'] = int(datetime.now().timestamp()) + # Check size of packages + for package_info in list_packages(PACKAGE_SIZE_TEMPLATE): + compare(ctx, package_sizes, *package_info) + if get_current_branch(ctx) == get_default_branch(): + upload_package_sizes(ctx, package_sizes, filename, distant=not dry_run) @task diff --git a/tasks/unit_tests/package_lib_tests.py b/tasks/unit_tests/package_lib_tests.py index ba637931b2ded..0ae56501c3439 100644 --- a/tasks/unit_tests/package_lib_tests.py +++ b/tasks/unit_tests/package_lib_tests.py @@ -1,9 +1,19 @@ +import json +import sys import unittest from unittest.mock import MagicMock, patch -from invoke import MockContext +from invoke import Exit, MockContext, Result -from tasks.libs.package.size import SCANNED_BINARIES, compute_package_size_metrics +from tasks.libs.package.size import ( + PACKAGE_SIZE_TEMPLATE, + SCANNED_BINARIES, + _get_uncompressed_size, + compare, + compute_package_size_metrics, + get_previous_size, +) +from tasks.libs.package.utils import list_packages class TestProduceSizeStats(unittest.TestCase): @@ -94,3 +104,146 @@ def test_compute_size_invalid_flavor(self): bucket_branch=test_branch, arch=test_arch, ) + + +class TestListPackages(unittest.TestCase): + def test_no_package(self): + template = {} + self.assertEqual(list_packages(template), []) + + def test_single_package(self): + template = {"key": "value"} + self.assertEqual(list_packages(template), [["key", "value"]]) + + def test_multiple_packages(self): + template = {"key": {"key2": 42}} + self.assertEqual(list_packages(template), [["key", "key2", 42]]) + + def test_ignore_timestamp_root(self): + template = {"key": {"key2": 42}, "timestamp": 1234567890} + self.assertEqual(list_packages(template), [["key", "key2", 42]]) + + def test_ignore_timestamp_nested(self): + template = {"key": {"key2": 42, "timestamp": 1234567890}} + self.assertEqual(list_packages(template), [["key", "key2", 42]]) + + +class TestGetPreviousSize(unittest.TestCase): + package_sizes = {} + + def setUp(self) -> None: + with open('tasks/unit_tests/testdata/package_sizes.json') as f: + self.package_sizes = json.load(f) + + def test_is_ancestor(self): + self.assertEqual(get_previous_size(self.package_sizes, "grand_ma", "artdeco", "cherry", 'fibula'), 42) + + def test_is_other_ancestor(self): + self.assertEqual(get_previous_size(self.package_sizes, "pa", "artdeco", "cherry", 'fibula'), 3) + + def test_is_not_ancestor(self): + self.assertEqual(get_previous_size(self.package_sizes, "grandPa", "artdeco", "cherry", 'fibula'), 42) + + +class TestGetUncompressedSize(unittest.TestCase): + def test_get_deb_uncompressed_size(self): + flavor = 'datadog-agent.deb' + c = MockContext(run={f"dpkg-deb --info {flavor} | grep Installed-Size | cut -d : -f 2 | xargs": Result(42)}) + self.assertEqual(_get_uncompressed_size(c, flavor, 'deb'), 43008) + + def test_get_rpm_uncompressed_size(self): + flavor = 'datadog-agent.rpm' + c = MockContext(run={f"rpm -qip {flavor} | grep Size | cut -d : -f 2 | xargs": Result(42)}) + self.assertEqual(_get_uncompressed_size(c, flavor, 'rpm'), 42) + + def test_get_suse_uncompressed_size(self): + flavor = 'datadog-agent.rpm' + c = MockContext(run={f"rpm -qip {flavor} | grep Size | cut -d : -f 2 | xargs": Result(69)}) + self.assertEqual(_get_uncompressed_size(c, flavor, 'suse'), 69) + + +class TestCompare(unittest.TestCase): + package_sizes = {} + pkg_root = 'tasks/unit_tests/testdata/packages' + + def setUp(self) -> None: + with open('tasks/unit_tests/testdata/package_sizes.json') as f: + self.package_sizes = json.load(f) + + @patch.dict('os.environ', {'OMNIBUS_PACKAGE_DIR': 'tasks/unit_tests/testdata/packages'}) + @patch('builtins.print') + def test_on_main(self, mock_print): + flavor, arch, os_name = 'datadog-heroku-agent', 'amd64', 'deb' + c = MockContext( + run={ + 'git rev-parse --abbrev-ref HEAD': Result('main'), + 'git merge-base main origin/main': Result('12345'), + f"dpkg-deb --info {self.pkg_root}/{flavor}_7_{arch}.{os_name} | grep Installed-Size | cut -d : -f 2 | xargs": Result( + 42 + ), + } + ) + self.package_sizes['12345'] = PACKAGE_SIZE_TEMPLATE + self.assertEqual(self.package_sizes['12345'][arch][flavor][os_name], 70000000) + compare(c, self.package_sizes, arch, flavor, os_name, 2001) + self.assertEqual(self.package_sizes['12345'][arch][flavor][os_name], 43008) + mock_print.assert_not_called() + + @patch.dict('os.environ', {'OMNIBUS_PACKAGE_DIR_SUSE': 'tasks/unit_tests/testdata/packages'}) + @patch('builtins.print') + def test_on_branch_ok(self, mock_print): + flavor, arch, os_name = 'datadog-agent', 'aarch64', 'suse' + c = MockContext( + run={ + 'git rev-parse --abbrev-ref HEAD': Result('pikachu'), + 'git merge-base pikachu origin/main': Result('25'), + f"rpm -qip {self.pkg_root}/{flavor}-7.{arch}.rpm | grep Size | cut -d : -f 2 | xargs": Result(69000000), + } + ) + compare(c, self.package_sizes, arch, flavor, os_name, 70000000) + mock_print.assert_called_with(f"""{flavor}-{arch}-{os_name} size increase is OK: + New package size is 69.00MB + Ancestor package (25) size is 68.00MB + Diff is 1.00MB (max allowed diff: 70.00MB)""") + + @patch.dict('os.environ', {'OMNIBUS_PACKAGE_DIR': 'tasks/unit_tests/testdata/packages'}) + @patch('builtins.print') + def test_on_branch_ok_rpm(self, mock_print): + flavor, arch, os_name = 'datadog-iot-agent', 'x86_64', 'rpm' + c = MockContext( + run={ + 'git rev-parse --abbrev-ref HEAD': Result('pikachu'), + 'git merge-base pikachu origin/main': Result('25'), + f"rpm -qip {self.pkg_root}/{flavor}-7.{arch}.{os_name} | grep Size | cut -d : -f 2 | xargs": Result( + 69000000 + ), + } + ) + compare(c, self.package_sizes, arch, flavor, os_name, 70000000) + mock_print.assert_called_with(f"""{flavor}-{arch}-{os_name} size increase is OK: + New package size is 69.00MB + Ancestor package (25) size is 78.00MB + Diff is -9.00MB (max allowed diff: 70.00MB)""") + + @patch.dict('os.environ', {'OMNIBUS_PACKAGE_DIR_SUSE': 'tasks/unit_tests/testdata/packages'}) + @patch('builtins.print') + def test_on_branch_ko(self, mock_print): + flavor, arch, os_name = 'datadog-agent', 'aarch64', 'suse' + c = MockContext( + run={ + 'git rev-parse --abbrev-ref HEAD': Result('pikachu'), + 'git merge-base pikachu origin/main': Result('25'), + f"rpm -qip {self.pkg_root}/{flavor}-7.{arch}.rpm | grep Size | cut -d : -f 2 | xargs": Result( + 139000000 + ), + } + ) + with self.assertRaises(Exit): + compare(c, self.package_sizes, arch, flavor, os_name, 70000000) + mock_print.assert_called_with( + """\x1b[91mdatadog-agent-aarch64-suse size increase is too large: + New package size is 139.00MB + Ancestor package (25) size is 68.00MB + Diff is 71.00MB (max allowed diff: 70.00MB)\x1b[0m""", + file=sys.stderr, + ) diff --git a/tasks/unit_tests/package_tests.py b/tasks/unit_tests/package_tests.py new file mode 100644 index 0000000000000..912c1ce53a912 --- /dev/null +++ b/tasks/unit_tests/package_tests.py @@ -0,0 +1,81 @@ +import json +import unittest +from unittest.mock import MagicMock, patch + +from invoke import Context, Exit, MockContext, Result + +from tasks.package import check_size + + +class TestCheckSize(unittest.TestCase): + @patch.dict( + 'os.environ', + { + 'OMNIBUS_PACKAGE_DIR': 'tasks/unit_tests/testdata/packages', + 'OMNIBUS_PACKAGE_DIR_SUSE': 'tasks/unit_tests/testdata/packages', + }, + ) + @patch('tasks.libs.package.size.get_package_path', new=MagicMock(return_value='datadog-agent')) + def test_dev_branch_ko(self): + flavor = 'datadog-agent' + c = MockContext( + run={ + 'git rev-parse --abbrev-ref HEAD': Result('pikachu'), + 'git merge-base pikachu origin/main': Result('25'), + f"dpkg-deb --info {flavor} | grep Installed-Size | cut -d : -f 2 | xargs": Result(42), + f"rpm -qip {flavor} | grep Size | cut -d : -f 2 | xargs": Result(69000000), + } + ) + with self.assertRaises(Exit): + check_size(c, filename='tasks/unit_tests/testdata/package_sizes_real.json', dry_run=True) + + @patch('builtins.print') + @patch.dict( + 'os.environ', + { + 'OMNIBUS_PACKAGE_DIR': 'tasks/unit_tests/testdata/packages', + 'OMNIBUS_PACKAGE_DIR_SUSE': 'tasks/unit_tests/testdata/packages', + }, + ) + @patch('tasks.libs.package.size.get_package_path', new=MagicMock(return_value='datadog-agent')) + def test_dev_branch_ok(self, print_mock): + flavor = 'datadog-agent' + c = MockContext( + run={ + 'git rev-parse --abbrev-ref HEAD': Result('pikachu'), + 'git merge-base pikachu origin/main': Result('25'), + f"dpkg-deb --info {flavor} | grep Installed-Size | cut -d : -f 2 | xargs": Result(42), + f"rpm -qip {flavor} | grep Size | cut -d : -f 2 | xargs": Result(20000000), + } + ) + check_size(c, filename='tasks/unit_tests/testdata/package_sizes_real.json', dry_run=True) + print_mock.assert_called() + self.assertEqual(print_mock.call_count, 15) + + @patch('builtins.print') + @patch.dict( + 'os.environ', + { + 'OMNIBUS_PACKAGE_DIR': 'tasks/unit_tests/testdata/packages', + 'OMNIBUS_PACKAGE_DIR_SUSE': 'tasks/unit_tests/testdata/packages', + }, + ) + @patch('tasks.libs.package.size.get_package_path', new=MagicMock(return_value='datadog-agent')) + def test_main_branch_ok(self, print_mock): + flavor = 'datadog-agent' + c = MockContext( + run={ + 'git rev-parse --abbrev-ref HEAD': Result('main'), + 'git merge-base main origin/main': Result('25'), + f"dpkg-deb --info {flavor} | grep Installed-Size | cut -d : -f 2 | xargs": Result(42), + f"rpm -qip {flavor} | grep Size | cut -d : -f 2 | xargs": Result(20000000), + } + ) + check_size(c, filename='tasks/unit_tests/testdata/package_sizes_real.json', dry_run=True) + with open('tasks/unit_tests/testdata/package_sizes_real.json') as f: + new_sizes = json.load(f) + self.assertIn('25', new_sizes) + self.assertEqual(new_sizes['25']['x86_64']['datadog-agent']['rpm'], 20000000) + self.assertEqual(new_sizes['25']['arm64']['datadog-iot-agent']['deb'], 43008) + ctx = Context() + ctx.run("git checkout -- tasks/unit_tests/testdata/package_sizes_real.json") diff --git a/tasks/unit_tests/testdata/package_sizes.json b/tasks/unit_tests/testdata/package_sizes.json new file mode 100644 index 0000000000000..2aade2e8320fa --- /dev/null +++ b/tasks/unit_tests/testdata/package_sizes.json @@ -0,0 +1,44 @@ +{ + "grand_ma": { + "timestamp": -810907200, + "artdeco": { + "cherry": { + "fibula" : 42, + "ulna" : 2 + }, + "apple": { + "patella" : 4 + } + } + }, + "ma": { + "timestamp": 159192000, + "gothic": { + "vanilla": { + "fabella" : 5 + } + } + }, + "pa": { + "timestamp": -14182940, + "artdeco": { + "cherry": { + "fibula" : 3, + "ulna" : 6 + } + } + }, + "25": { + "timestamp": 0, + "aarch64": { + "datadog-agent": { + "suse" : 68000000 + } + }, + "x86_64": { + "datadog-iot-agent": { + "rpm" : 78000000 + } + } + } +} diff --git a/tasks/unit_tests/testdata/package_sizes_real.json b/tasks/unit_tests/testdata/package_sizes_real.json new file mode 100644 index 0000000000000..e24ed4d2bc98d --- /dev/null +++ b/tasks/unit_tests/testdata/package_sizes_real.json @@ -0,0 +1 @@ +{"12345": {"timestamp": 1732804637, "amd64": {"datadog-agent": {"deb": 140000000}, "datadog-iot-agent": {"deb": 10000000}, "datadog-dogstatsd": {"deb": 10000000}, "datadog-heroku-agent": {"deb": 70000000}}, "x86_64": {"datadog-agent": {"rpm": 140000000, "suse": 140000000}, "datadog-iot-agent": {"rpm": 10000000, "suse": 10000000}, "datadog-dogstatsd": {"rpm": 10000000, "suse": 10000000}}, "arm64": {"datadog-agent": {"deb": 140000000}, "datadog-iot-agent": {"deb": 10000000}, "datadog-dogstatsd": {"deb": 10000000}}, "aarch64": {"datadog-agent": {"rpm": 140000000}, "datadog-iot-agent": {"rpm": 10000000}}}} \ No newline at end of file diff --git a/tasks/unit_tests/testdata/packages/datadog-agent-7.aarch64.rpm b/tasks/unit_tests/testdata/packages/datadog-agent-7.aarch64.rpm new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/tasks/unit_tests/testdata/packages/datadog-agent-7.x86_64.rpm b/tasks/unit_tests/testdata/packages/datadog-agent-7.x86_64.rpm new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/tasks/unit_tests/testdata/packages/datadog-agent_7_arm64.deb b/tasks/unit_tests/testdata/packages/datadog-agent_7_arm64.deb new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/tasks/unit_tests/testdata/packages/datadog-dogstatsd-7.x86_64.rpm b/tasks/unit_tests/testdata/packages/datadog-dogstatsd-7.x86_64.rpm new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/tasks/unit_tests/testdata/packages/datadog-dogstatsd_7_amd64.deb b/tasks/unit_tests/testdata/packages/datadog-dogstatsd_7_amd64.deb new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/tasks/unit_tests/testdata/packages/datadog-dogstatsd_7_arm64.deb b/tasks/unit_tests/testdata/packages/datadog-dogstatsd_7_arm64.deb new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/tasks/unit_tests/testdata/packages/datadog-heroku-agent_7_amd64.deb b/tasks/unit_tests/testdata/packages/datadog-heroku-agent_7_amd64.deb new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/tasks/unit_tests/testdata/packages/datadog-iot-agent-7.aarch64.rpm b/tasks/unit_tests/testdata/packages/datadog-iot-agent-7.aarch64.rpm new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/tasks/unit_tests/testdata/packages/datadog-iot-agent-7.x86_64.rpm b/tasks/unit_tests/testdata/packages/datadog-iot-agent-7.x86_64.rpm new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/tasks/unit_tests/testdata/packages/datadog-iot-agent_7_amd64.deb b/tasks/unit_tests/testdata/packages/datadog-iot-agent_7_amd64.deb new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/tasks/unit_tests/testdata/packages/datadog-iot-agent_7_arm64.deb b/tasks/unit_tests/testdata/packages/datadog-iot-agent_7_arm64.deb new file mode 100644 index 0000000000000..e69de29bb2d1d From 2491564a64949ebc3a9bdf2d1f273442f283da1a Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Mon, 9 Dec 2024 09:51:25 +0100 Subject: [PATCH 045/303] [CWS] small optimizations to regex parsing in SECL (#31792) --- pkg/security/secl/compiler/eval/strings.go | 4 +- .../secl/compiler/eval/strings_test.go | 38 ++++++++++++++----- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/pkg/security/secl/compiler/eval/strings.go b/pkg/security/secl/compiler/eval/strings.go index 13b2a9a6491ab..751d86db6a015 100644 --- a/pkg/security/secl/compiler/eval/strings.go +++ b/pkg/security/secl/compiler/eval/strings.go @@ -123,7 +123,7 @@ type RegexpStringMatcher struct { re *regexp.Regexp } -var stringBigOrRe = regexp.MustCompile(`^\.\*\(([a-zA-Z_|]+)\)\.\*$`) +var stringBigOrRe = regexp.MustCompile(`^(?:\.\*)?\(([a-zA-Z_|]+)\)(?:\.\*)?$`) // Compile a regular expression based pattern func (r *RegexpStringMatcher) Compile(pattern string, caseInsensitive bool) error { @@ -135,7 +135,7 @@ func (r *RegexpStringMatcher) Compile(pattern string, caseInsensitive bool) erro } } - if caseInsensitive { + if caseInsensitive && !strings.HasPrefix(pattern, "(?i)") { pattern = "(?i)" + pattern } diff --git a/pkg/security/secl/compiler/eval/strings_test.go b/pkg/security/secl/compiler/eval/strings_test.go index 181864bac1bc8..a09be87afbc24 100644 --- a/pkg/security/secl/compiler/eval/strings_test.go +++ b/pkg/security/secl/compiler/eval/strings_test.go @@ -260,17 +260,35 @@ func TestRegexp(t *testing.T) { } func BenchmarkRegexpEvaluator(b *testing.B) { - pattern := ".*(restore|recovery|readme|instruction|how_to|ransom).*" + b.Run("with stars", func(b *testing.B) { + pattern := ".*(restore|recovery|readme|instruction|how_to|ransom).*" - var matcher RegexpStringMatcher - if err := matcher.Compile(pattern, false); err != nil { - b.Fatal(err) - } + var matcher RegexpStringMatcher + if err := matcher.Compile(pattern, false); err != nil { + b.Fatal(err) + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + if !matcher.Matches("123ransom456.txt") { + b.Fatal("unexpected result") + } + } + }) - b.ResetTimer() - for i := 0; i < b.N; i++ { - if !matcher.Matches("123ransom456.txt") { - b.Fatal("unexpected result") + b.Run("without stars", func(b *testing.B) { + pattern := "(restore|recovery|readme|instruction|how_to|ransom)" + + var matcher RegexpStringMatcher + if err := matcher.Compile(pattern, false); err != nil { + b.Fatal(err) + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + if !matcher.Matches("123ransom456.txt") { + b.Fatal("unexpected result") + } } - } + }) } From 88a8e04543920cb3e57b4bf22d477b9396c09456 Mon Sep 17 00:00:00 2001 From: "Duong (Yoon)" <47346352+DDuongNguyen@users.noreply.github.com> Date: Mon, 9 Dec 2024 04:40:54 -0500 Subject: [PATCH 046/303] [AMLII-2184] http1 and http2 regression cases (#31539) --- .../conf.d/disk-listener.d/conf.yaml | 5 +++ .../datadog-agent/datadog.yaml | 21 ++++++++++ .../experiment.yaml | 39 +++++++++++++++++++ .../lading/lading.yaml | 27 +++++++++++++ .../conf.d/disk-listener.d/conf.yaml | 5 +++ .../datadog-agent/datadog.yaml | 21 ++++++++++ .../experiment.yaml | 39 +++++++++++++++++++ .../lading/lading.yaml | 27 +++++++++++++ 8 files changed, 184 insertions(+) create mode 100644 test/regression/cases/file_to_blackhole_0ms_latency_http1/datadog-agent/conf.d/disk-listener.d/conf.yaml create mode 100644 test/regression/cases/file_to_blackhole_0ms_latency_http1/datadog-agent/datadog.yaml create mode 100644 test/regression/cases/file_to_blackhole_0ms_latency_http1/experiment.yaml create mode 100644 test/regression/cases/file_to_blackhole_0ms_latency_http1/lading/lading.yaml create mode 100644 test/regression/cases/file_to_blackhole_0ms_latency_http2/datadog-agent/conf.d/disk-listener.d/conf.yaml create mode 100644 test/regression/cases/file_to_blackhole_0ms_latency_http2/datadog-agent/datadog.yaml create mode 100644 test/regression/cases/file_to_blackhole_0ms_latency_http2/experiment.yaml create mode 100644 test/regression/cases/file_to_blackhole_0ms_latency_http2/lading/lading.yaml diff --git a/test/regression/cases/file_to_blackhole_0ms_latency_http1/datadog-agent/conf.d/disk-listener.d/conf.yaml b/test/regression/cases/file_to_blackhole_0ms_latency_http1/datadog-agent/conf.d/disk-listener.d/conf.yaml new file mode 100644 index 0000000000000..ec51a59de1c46 --- /dev/null +++ b/test/regression/cases/file_to_blackhole_0ms_latency_http1/datadog-agent/conf.d/disk-listener.d/conf.yaml @@ -0,0 +1,5 @@ +logs: + - type: file + path: "/smp-shared/*.log" + service: "my-service" + source: "my-client-app" diff --git a/test/regression/cases/file_to_blackhole_0ms_latency_http1/datadog-agent/datadog.yaml b/test/regression/cases/file_to_blackhole_0ms_latency_http1/datadog-agent/datadog.yaml new file mode 100644 index 0000000000000..667ce4d27223f --- /dev/null +++ b/test/regression/cases/file_to_blackhole_0ms_latency_http1/datadog-agent/datadog.yaml @@ -0,0 +1,21 @@ +auth_token_file_path: /tmp/agent-auth-token + +# Disable cloud detection. This stops the Agent from poking around the +# execution environment & network. This is particularly important if the target +# has network access. +cloud_provider_metadata: [] + +dd_url: http://127.0.0.1:9091 + +logs_enabled: true +logs_config: + logs_dd_url: 127.0.0.1:9092 + http_protocol: http1 + file_scan_period: 1 + logs_no_ssl: true + force_use_http: true + +process_config.process_dd_url: http://localhost:9093 + +telemetry.enabled: true +telemetry.checks: '*' diff --git a/test/regression/cases/file_to_blackhole_0ms_latency_http1/experiment.yaml b/test/regression/cases/file_to_blackhole_0ms_latency_http1/experiment.yaml new file mode 100644 index 0000000000000..c51505add2bb6 --- /dev/null +++ b/test/regression/cases/file_to_blackhole_0ms_latency_http1/experiment.yaml @@ -0,0 +1,39 @@ +optimization_goal: egress_throughput +erratic: false + +target: + name: datadog-agent + command: /bin/entrypoint.sh + cpu_allotment: 8 + memory_allotment: 1.5GiB + + environment: + DD_API_KEY: 00000001 + DD_HOSTNAME: smp-regression + + profiling_environment: + DD_INTERNAL_PROFILING_BLOCK_PROFILE_RATE: 10000 + DD_INTERNAL_PROFILING_CPU_DURATION: 1m + DD_INTERNAL_PROFILING_DELTA_PROFILES: true + DD_INTERNAL_PROFILING_ENABLED: true + DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true + DD_INTERNAL_PROFILING_MUTEX_PROFILE_FRACTION: 10 + DD_INTERNAL_PROFILING_PERIOD: 1m + DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket + DD_PROFILING_EXECUTION_TRACE_ENABLED: true + DD_PROFILING_EXECUTION_TRACE_PERIOD: 1m + DD_PROFILING_WAIT_PROFILE: true + +checks: + - name: memory_usage + description: "Memory usage" + bounds: + series: total_rss_bytes + # The machine has 12GiB free. + upper_bound: 1.2GiB + + - name: lost_bytes + description: "Available bytes not polled by log Agent" + bounds: + series: lost_bytes + upper_bound: 0KiB diff --git a/test/regression/cases/file_to_blackhole_0ms_latency_http1/lading/lading.yaml b/test/regression/cases/file_to_blackhole_0ms_latency_http1/lading/lading.yaml new file mode 100644 index 0000000000000..639cdb3b546aa --- /dev/null +++ b/test/regression/cases/file_to_blackhole_0ms_latency_http1/lading/lading.yaml @@ -0,0 +1,27 @@ +generator: + - file_gen: + logrotate_fs: + seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, + 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] + load_profile: + constant: 10MB + concurrent_logs: 1 + maximum_bytes_per_log: 500MB + total_rotations: 5 + max_depth: 0 + variant: "ascii" + maximum_prebuild_cache_size_bytes: 300MB + mount_point: /smp-shared + +blackhole: + - http: + binding_addr: "127.0.0.1:9091" + - http: + binding_addr: "127.0.0.1:9092" + response_delay_millis: 0 + - http: + binding_addr: "127.0.0.1:9093" + +target_metrics: + - prometheus: + uri: "http://127.0.0.1:5000/telemetry" diff --git a/test/regression/cases/file_to_blackhole_0ms_latency_http2/datadog-agent/conf.d/disk-listener.d/conf.yaml b/test/regression/cases/file_to_blackhole_0ms_latency_http2/datadog-agent/conf.d/disk-listener.d/conf.yaml new file mode 100644 index 0000000000000..ec51a59de1c46 --- /dev/null +++ b/test/regression/cases/file_to_blackhole_0ms_latency_http2/datadog-agent/conf.d/disk-listener.d/conf.yaml @@ -0,0 +1,5 @@ +logs: + - type: file + path: "/smp-shared/*.log" + service: "my-service" + source: "my-client-app" diff --git a/test/regression/cases/file_to_blackhole_0ms_latency_http2/datadog-agent/datadog.yaml b/test/regression/cases/file_to_blackhole_0ms_latency_http2/datadog-agent/datadog.yaml new file mode 100644 index 0000000000000..efe55170e4dc9 --- /dev/null +++ b/test/regression/cases/file_to_blackhole_0ms_latency_http2/datadog-agent/datadog.yaml @@ -0,0 +1,21 @@ +auth_token_file_path: /tmp/agent-auth-token + +# Disable cloud detection. This stops the Agent from poking around the +# execution environment & network. This is particularly important if the target +# has network access. +cloud_provider_metadata: [] + +dd_url: http://127.0.0.1:9091 + +logs_enabled: true +logs_config: + logs_dd_url: 127.0.0.1:9092 + http_protocol: auto + file_scan_period: 1 + logs_no_ssl: true + force_use_http: true + +process_config.process_dd_url: http://localhost:9093 + +telemetry.enabled: true +telemetry.checks: '*' diff --git a/test/regression/cases/file_to_blackhole_0ms_latency_http2/experiment.yaml b/test/regression/cases/file_to_blackhole_0ms_latency_http2/experiment.yaml new file mode 100644 index 0000000000000..c51505add2bb6 --- /dev/null +++ b/test/regression/cases/file_to_blackhole_0ms_latency_http2/experiment.yaml @@ -0,0 +1,39 @@ +optimization_goal: egress_throughput +erratic: false + +target: + name: datadog-agent + command: /bin/entrypoint.sh + cpu_allotment: 8 + memory_allotment: 1.5GiB + + environment: + DD_API_KEY: 00000001 + DD_HOSTNAME: smp-regression + + profiling_environment: + DD_INTERNAL_PROFILING_BLOCK_PROFILE_RATE: 10000 + DD_INTERNAL_PROFILING_CPU_DURATION: 1m + DD_INTERNAL_PROFILING_DELTA_PROFILES: true + DD_INTERNAL_PROFILING_ENABLED: true + DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true + DD_INTERNAL_PROFILING_MUTEX_PROFILE_FRACTION: 10 + DD_INTERNAL_PROFILING_PERIOD: 1m + DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket + DD_PROFILING_EXECUTION_TRACE_ENABLED: true + DD_PROFILING_EXECUTION_TRACE_PERIOD: 1m + DD_PROFILING_WAIT_PROFILE: true + +checks: + - name: memory_usage + description: "Memory usage" + bounds: + series: total_rss_bytes + # The machine has 12GiB free. + upper_bound: 1.2GiB + + - name: lost_bytes + description: "Available bytes not polled by log Agent" + bounds: + series: lost_bytes + upper_bound: 0KiB diff --git a/test/regression/cases/file_to_blackhole_0ms_latency_http2/lading/lading.yaml b/test/regression/cases/file_to_blackhole_0ms_latency_http2/lading/lading.yaml new file mode 100644 index 0000000000000..639cdb3b546aa --- /dev/null +++ b/test/regression/cases/file_to_blackhole_0ms_latency_http2/lading/lading.yaml @@ -0,0 +1,27 @@ +generator: + - file_gen: + logrotate_fs: + seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, + 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] + load_profile: + constant: 10MB + concurrent_logs: 1 + maximum_bytes_per_log: 500MB + total_rotations: 5 + max_depth: 0 + variant: "ascii" + maximum_prebuild_cache_size_bytes: 300MB + mount_point: /smp-shared + +blackhole: + - http: + binding_addr: "127.0.0.1:9091" + - http: + binding_addr: "127.0.0.1:9092" + response_delay_millis: 0 + - http: + binding_addr: "127.0.0.1:9093" + +target_metrics: + - prometheus: + uri: "http://127.0.0.1:5000/telemetry" From 5bbb3fc1b22a982f6d264f749b9c630579428179 Mon Sep 17 00:00:00 2001 From: Alexandre Yang Date: Mon, 9 Dec 2024 11:15:25 +0100 Subject: [PATCH 047/303] [HA Agent] e2e test for datadog.agent.ha_agent.running metric (#31835) --- test/new-e2e/tests/ha-agent/haagent_test.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/test/new-e2e/tests/ha-agent/haagent_test.go b/test/new-e2e/tests/ha-agent/haagent_test.go index bdf4e33790007..2dc700bec2be8 100644 --- a/test/new-e2e/tests/ha-agent/haagent_test.go +++ b/test/new-e2e/tests/ha-agent/haagent_test.go @@ -41,8 +41,9 @@ log_level: debug )) } -func (s *haAgentTestSuite) TestHaAgentGroupTagPresentOnDatadogAgentRunningMetric() { +func (s *haAgentTestSuite) TestHaAgentRunningMetrics() { fakeClient := s.Env().FakeIntake.Client() + s.EventuallyWithT(func(c *assert.CollectT) { s.T().Log("try assert datadog.agent.running metric") metrics, err := fakeClient.FilterMetrics("datadog.agent.running") @@ -57,6 +58,21 @@ func (s *haAgentTestSuite) TestHaAgentGroupTagPresentOnDatadogAgentRunningMetric require.NoError(c, err) assert.NotEmpty(c, metrics) }, 5*time.Minute, 3*time.Second) + + s.EventuallyWithT(func(c *assert.CollectT) { + s.T().Log("try assert datadog.agent.ha_agent.running metric") + metrics, err := fakeClient.FilterMetrics("datadog.agent.ha_agent.running") + require.NoError(c, err) + assert.NotEmpty(c, metrics) + for _, metric := range metrics { + s.T().Logf(" datadog.agent.ha_agent.running metric tags: %+v", metric.Tags) + } + + tags := []string{"agent_group:test-group01", "agent_state:unknown"} + metrics, err = fakeClient.FilterMetrics("datadog.agent.ha_agent.running", fakeintakeclient.WithTags[*aggregator.MetricSeries](tags)) + require.NoError(c, err) + assert.NotEmpty(c, metrics) + }, 5*time.Minute, 3*time.Second) } func (s *haAgentTestSuite) TestHaAgentAddedToRCListeners() { From 3bdaa27c2b3c3809831d167f453f092c4b00d3c9 Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Mon, 9 Dec 2024 11:17:40 +0100 Subject: [PATCH 048/303] add missing `test` build tag on testing utility files (#31859) --- comp/aggregator/diagnosesendermanager/component_mock.go | 2 ++ comp/snmptraps/oidresolver/oidresolverimpl/mock.go | 2 ++ pkg/network/protocols/amqp/server.go | 2 ++ pkg/network/protocols/mongo/server.go | 2 ++ pkg/network/protocols/mysql/server.go | 2 ++ pkg/network/protocols/redis/server.go | 3 +-- pkg/network/usm/monitor_testutil.go | 2 +- pkg/security/secl/rules/testutil.go | 2 ++ pkg/util/dmi/dmi_mock.go | 2 +- pkg/util/dmi/no_dmi_mock.go | 2 +- 10 files changed, 16 insertions(+), 5 deletions(-) diff --git a/comp/aggregator/diagnosesendermanager/component_mock.go b/comp/aggregator/diagnosesendermanager/component_mock.go index 73c87ebe6caee..1d1e2cd662b0b 100644 --- a/comp/aggregator/diagnosesendermanager/component_mock.go +++ b/comp/aggregator/diagnosesendermanager/component_mock.go @@ -3,6 +3,8 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2023-present Datadog, Inc. +//go:build test + // Package diagnosesendermanager defines the sender manager for the local diagnose check package diagnosesendermanager diff --git a/comp/snmptraps/oidresolver/oidresolverimpl/mock.go b/comp/snmptraps/oidresolver/oidresolverimpl/mock.go index 865e74fd56163..e9c259a876a08 100644 --- a/comp/snmptraps/oidresolver/oidresolverimpl/mock.go +++ b/comp/snmptraps/oidresolver/oidresolverimpl/mock.go @@ -3,6 +3,8 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2022-present Datadog, Inc. +//go:build test + package oidresolverimpl import ( diff --git a/pkg/network/protocols/amqp/server.go b/pkg/network/protocols/amqp/server.go index fd343ab5a29ae..31a2fd6286313 100644 --- a/pkg/network/protocols/amqp/server.go +++ b/pkg/network/protocols/amqp/server.go @@ -3,6 +3,8 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. +//go:build test + package amqp import ( diff --git a/pkg/network/protocols/mongo/server.go b/pkg/network/protocols/mongo/server.go index cc9bf63b55545..5537f67b6a588 100644 --- a/pkg/network/protocols/mongo/server.go +++ b/pkg/network/protocols/mongo/server.go @@ -3,6 +3,8 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. +//go:build test + package mongo import ( diff --git a/pkg/network/protocols/mysql/server.go b/pkg/network/protocols/mysql/server.go index 423ca963943e7..a152e704bd8fd 100644 --- a/pkg/network/protocols/mysql/server.go +++ b/pkg/network/protocols/mysql/server.go @@ -3,6 +3,8 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. +//go:build test + package mysql import ( diff --git a/pkg/network/protocols/redis/server.go b/pkg/network/protocols/redis/server.go index 58e645a42b3fd..3c5b4f6ed7b8d 100644 --- a/pkg/network/protocols/redis/server.go +++ b/pkg/network/protocols/redis/server.go @@ -3,10 +3,9 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -// Package redis provides a Redis client to interact with a Redis server. - //go:build test +// Package redis provides a Redis client to interact with a Redis server. package redis import ( diff --git a/pkg/network/usm/monitor_testutil.go b/pkg/network/usm/monitor_testutil.go index bbf01267af343..48f63271ed5ab 100644 --- a/pkg/network/usm/monitor_testutil.go +++ b/pkg/network/usm/monitor_testutil.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build linux_bpf +//go:build linux_bpf && test package usm diff --git a/pkg/security/secl/rules/testutil.go b/pkg/security/secl/rules/testutil.go index 2631662e7b2fe..aea0ab0779d96 100644 --- a/pkg/security/secl/rules/testutil.go +++ b/pkg/security/secl/rules/testutil.go @@ -3,6 +3,8 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. +//go:build test + // Package rules holds rules related files package rules diff --git a/pkg/util/dmi/dmi_mock.go b/pkg/util/dmi/dmi_mock.go index 5bdd5325248b2..fa838328ab9c1 100644 --- a/pkg/util/dmi/dmi_mock.go +++ b/pkg/util/dmi/dmi_mock.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build !windows && !serverless +//go:build !windows && !serverless && test package dmi diff --git a/pkg/util/dmi/no_dmi_mock.go b/pkg/util/dmi/no_dmi_mock.go index 947edcc79a393..a28da41a3becd 100644 --- a/pkg/util/dmi/no_dmi_mock.go +++ b/pkg/util/dmi/no_dmi_mock.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build windows || serverless +//go:build (windows || serverless) && test package dmi From feb37a10a39be0f721b150e2f8b0af019349b20e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lian=20Raimbault?= <161456554+CelianR@users.noreply.github.com> Date: Mon, 9 Dec 2024 05:19:27 -0500 Subject: [PATCH 049/303] Fix pipeline cancel retries (#31869) --- tasks/libs/ciproviders/gitlab_api.py | 7 +++++++ tasks/libs/pipeline/tools.py | 4 ++-- tasks/pipeline.py | 7 ++++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/tasks/libs/ciproviders/gitlab_api.py b/tasks/libs/ciproviders/gitlab_api.py index 03ba1e58c8003..cb4e42644e7c6 100644 --- a/tasks/libs/ciproviders/gitlab_api.py +++ b/tasks/libs/ciproviders/gitlab_api.py @@ -119,6 +119,13 @@ def refresh_pipeline(pipeline: ProjectPipeline): pipeline.refresh() +@retry_function('cancel pipeline #{0.id}', retry_delay=5) +def cancel_pipeline(pipeline: ProjectPipeline): + """Cancels a pipeline, retries if there is an error.""" + + pipeline.cancel() + + class GitlabCIDiff: def __init__( self, diff --git a/tasks/libs/pipeline/tools.py b/tasks/libs/pipeline/tools.py index 2cab6a42d28b5..ce425eb700317 100644 --- a/tasks/libs/pipeline/tools.py +++ b/tasks/libs/pipeline/tools.py @@ -11,7 +11,7 @@ from gitlab.exceptions import GitlabJobPlayError from gitlab.v4.objects import Project, ProjectJob, ProjectPipeline -from tasks.libs.ciproviders.gitlab_api import refresh_pipeline +from tasks.libs.ciproviders.gitlab_api import cancel_pipeline, refresh_pipeline from tasks.libs.common.color import Color, color_message from tasks.libs.common.git import get_default_branch from tasks.libs.common.user_interactions import yes_no_question @@ -64,7 +64,7 @@ def cancel_pipelines_with_confirmation(repo: Project, pipelines: list[ProjectPip ) if yes_no_question("Do you want to cancel this pipeline?", color="orange", default=True): - pipeline.cancel() + cancel_pipeline(pipeline) print(f"Pipeline {color_message(pipeline.id, 'bold')} has been cancelled.\n") else: print(f"Pipeline {color_message(pipeline.id, 'bold')} will keep running.\n") diff --git a/tasks/pipeline.py b/tasks/pipeline.py index 8d63109fee536..bff7b05b8b1ab 100644 --- a/tasks/pipeline.py +++ b/tasks/pipeline.py @@ -13,6 +13,7 @@ from tasks.libs.ciproviders.github_api import GithubAPI from tasks.libs.ciproviders.gitlab_api import ( + cancel_pipeline, get_gitlab_bot_token, get_gitlab_repo, gitlab_configuration_is_modified, @@ -865,7 +866,7 @@ def test_merge_queue(ctx): # Clean up print("Cleaning up") if success: - pipeline.cancel() + cancel_pipeline(pipeline) pr.edit(state="closed") ctx.run(f"git checkout {current_branch}", hide=True) ctx.run(f"git branch -D {test_default}", hide=True) @@ -929,7 +930,7 @@ def compare_to_itself(ctx): if attempt == max_attempts - 1: # Clean up the branch and possible pipelines for pipeline in pipelines: - pipeline.cancel() + cancel_pipeline(pipeline) ctx.run(f"git checkout {current_branch}", hide=True) ctx.run(f"git branch -D {new_branch}", hide=True) ctx.run(f"git push origin :{new_branch}", hide=True) @@ -946,7 +947,7 @@ def compare_to_itself(ctx): # Clean up print("Cleaning up the pipelines") for pipeline in pipelines: - pipeline.cancel() + cancel_pipeline(pipeline) print("Cleaning up git") ctx.run(f"git checkout {current_branch}", hide=True) ctx.run(f"git branch -D {new_branch}", hide=True) From 61aa61b86ac48a41ab41ecb10b6d7d0f43b751af Mon Sep 17 00:00:00 2001 From: Gabriel Dos Santos <91925154+gabedos@users.noreply.github.com> Date: Mon, 9 Dec 2024 12:05:34 +0100 Subject: [PATCH 050/303] [bug] flake pod parse testing (#31871) --- .../collectors/util/kubernetes_resource_parsers/pod_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod_test.go b/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod_test.go index 2f5e8e0c941a0..5f604e3568220 100644 --- a/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod_test.go +++ b/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod_test.go @@ -8,6 +8,7 @@ package kubernetesresourceparsers import ( + "reflect" "testing" "github.com/stretchr/testify/assert" @@ -16,11 +17,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" - "github.com/DataDog/datadog-agent/pkg/util/testutil/flake" ) func TestPodParser_Parse(t *testing.T) { - flake.Mark(t) filterAnnotations := []string{"ignoreAnnotation"} parser, err := NewPodParser(filterAnnotations) @@ -126,5 +125,6 @@ func TestPodParser_Parse(t *testing.T) { QOSClass: "Guaranteed", } - assert.Equal(t, expected, parsed) + assert.True(t, reflect.DeepEqual(expected, parsed), + "Expected: %v, Actual: %v", expected, parsed) } From 92bf0e8cf9db418c17677fc235ea0f367cdc77d2 Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Mon, 9 Dec 2024 12:09:55 +0100 Subject: [PATCH 051/303] fix(assign_issue): Use the correct option name (#31867) --- .github/workflows/assign_issue.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/assign_issue.yml b/.github/workflows/assign_issue.yml index be9db6209604b..f752788cf64c8 100644 --- a/.github/workflows/assign_issue.yml +++ b/.github/workflows/assign_issue.yml @@ -27,4 +27,4 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - inv -e issue.assign-owner --issue ${{ github.event.issue.number }} + inv -e issue.assign-owner -i ${{ github.event.issue.number }} From 8619535c19ac43fe3a9b39b78dd3b92348d3ac4c Mon Sep 17 00:00:00 2001 From: Guy Arbitman Date: Mon, 9 Dec 2024 14:11:59 +0200 Subject: [PATCH 052/303] event monitor: tests: Allow setting cached hostname (#31863) --- pkg/ebpf/uprobes/attacher_test.go | 2 ++ pkg/eventmonitor/consumers/testutil/testutil.go | 4 +++- pkg/network/usm/monitor_tls_test.go | 2 ++ pkg/network/usm/sharedlibraries/watcher_test.go | 5 +++-- pkg/process/monitor/process_monitor_test.go | 2 ++ pkg/security/utils/hostname_testutil.go | 15 +++++++++++++++ 6 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 pkg/security/utils/hostname_testutil.go diff --git a/pkg/ebpf/uprobes/attacher_test.go b/pkg/ebpf/uprobes/attacher_test.go index abad66f8778f2..26428868c1d70 100644 --- a/pkg/ebpf/uprobes/attacher_test.go +++ b/pkg/ebpf/uprobes/attacher_test.go @@ -34,6 +34,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/network/usm/utils" "github.com/DataDog/datadog-agent/pkg/process/monitor" procmontestutil "github.com/DataDog/datadog-agent/pkg/process/monitor/testutil" + secutils "github.com/DataDog/datadog-agent/pkg/security/utils" "github.com/DataDog/datadog-agent/pkg/util/kernel" ) @@ -799,6 +800,7 @@ func launchProcessMonitor(t *testing.T, useEventStream bool) *monitor.ProcessMon t.Cleanup(pm.Stop) require.NoError(t, pm.Initialize(useEventStream)) if useEventStream { + secutils.SetCachedHostname("test-hostname") eventmonitortestutil.StartEventMonitor(t, procmontestutil.RegisterProcessMonitorEventConsumer) } diff --git a/pkg/eventmonitor/consumers/testutil/testutil.go b/pkg/eventmonitor/consumers/testutil/testutil.go index 4ed3b9fb2a1ea..871cf780b0089 100644 --- a/pkg/eventmonitor/consumers/testutil/testutil.go +++ b/pkg/eventmonitor/consumers/testutil/testutil.go @@ -15,8 +15,8 @@ import ( "github.com/DataDog/datadog-agent/pkg/eventmonitor" "github.com/DataDog/datadog-agent/pkg/eventmonitor/consumers" - eventtestutil "github.com/DataDog/datadog-agent/pkg/eventmonitor/testutil" + "github.com/DataDog/datadog-agent/pkg/security/utils" ) const defaultChanSize = 100 @@ -25,6 +25,8 @@ const defaultChanSize = 100 // created for testing. This function should be called in tests that require a ProcessConsumer. func NewTestProcessConsumer(t *testing.T) *consumers.ProcessConsumer { var pc *consumers.ProcessConsumer + // Set fake hostname to avoid fetching it from the core agent. + utils.SetCachedHostname("test-hostname") eventtestutil.StartEventMonitor(t, func(t *testing.T, evm *eventmonitor.EventMonitor) { var err error eventTypes := []consumers.ProcessConsumerEventTypes{consumers.ExecEventType, consumers.ExitEventType} diff --git a/pkg/network/usm/monitor_tls_test.go b/pkg/network/usm/monitor_tls_test.go index a4fd5924bd630..322f9be425da4 100644 --- a/pkg/network/usm/monitor_tls_test.go +++ b/pkg/network/usm/monitor_tls_test.go @@ -45,6 +45,7 @@ import ( usmtestutil "github.com/DataDog/datadog-agent/pkg/network/usm/testutil" "github.com/DataDog/datadog-agent/pkg/network/usm/utils" procmontestutil "github.com/DataDog/datadog-agent/pkg/process/monitor/testutil" + secutils "github.com/DataDog/datadog-agent/pkg/security/utils" globalutils "github.com/DataDog/datadog-agent/pkg/util/testutil" dockerutils "github.com/DataDog/datadog-agent/pkg/util/testutil/docker" ) @@ -869,6 +870,7 @@ func setupUSMTLSMonitor(t *testing.T, cfg *config.Config) *Monitor { require.NoError(t, err) require.NoError(t, usmMonitor.Start()) if cfg.EnableUSMEventStream && usmconfig.NeedProcessMonitor(cfg) { + secutils.SetCachedHostname("test-hostname") eventmonitortestutil.StartEventMonitor(t, procmontestutil.RegisterProcessMonitorEventConsumer) } t.Cleanup(usmMonitor.Stop) diff --git a/pkg/network/usm/sharedlibraries/watcher_test.go b/pkg/network/usm/sharedlibraries/watcher_test.go index ec8eddb5f8edf..ca401e180fc50 100644 --- a/pkg/network/usm/sharedlibraries/watcher_test.go +++ b/pkg/network/usm/sharedlibraries/watcher_test.go @@ -21,9 +21,8 @@ import ( "time" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/suite" - "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" "github.com/DataDog/datadog-agent/pkg/ebpf/ebpftest" "github.com/DataDog/datadog-agent/pkg/ebpf/prebuilt" @@ -33,6 +32,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/network/usm/utils" "github.com/DataDog/datadog-agent/pkg/process/monitor" procmontestutil "github.com/DataDog/datadog-agent/pkg/process/monitor/testutil" + secutils "github.com/DataDog/datadog-agent/pkg/security/utils" "github.com/DataDog/datadog-agent/pkg/util/kernel" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -42,6 +42,7 @@ func launchProcessMonitor(t *testing.T, useEventStream bool) { t.Cleanup(pm.Stop) require.NoError(t, pm.Initialize(useEventStream)) if useEventStream { + secutils.SetCachedHostname("test-hostname") eventmonitortestutil.StartEventMonitor(t, procmontestutil.RegisterProcessMonitorEventConsumer) } } diff --git a/pkg/process/monitor/process_monitor_test.go b/pkg/process/monitor/process_monitor_test.go index b6cc085089e74..0fe9e80bd21cb 100644 --- a/pkg/process/monitor/process_monitor_test.go +++ b/pkg/process/monitor/process_monitor_test.go @@ -22,6 +22,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/eventmonitor" eventmonitortestutil "github.com/DataDog/datadog-agent/pkg/eventmonitor/testutil" "github.com/DataDog/datadog-agent/pkg/network/protocols/telemetry" + "github.com/DataDog/datadog-agent/pkg/security/utils" "github.com/DataDog/datadog-agent/pkg/util" "github.com/DataDog/datadog-agent/pkg/util/kernel" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -55,6 +56,7 @@ func waitForProcessMonitor(t *testing.T, pm *ProcessMonitor) { func initializePM(t *testing.T, pm *ProcessMonitor, useEventStream bool) { require.NoError(t, pm.Initialize(useEventStream)) if useEventStream { + utils.SetCachedHostname("test-hostname") eventmonitortestutil.StartEventMonitor(t, func(t *testing.T, evm *eventmonitor.EventMonitor) { // Can't use the implementation in procmontestutil due to import cycles procmonconsumer, err := NewProcessMonitorEventConsumer(evm) diff --git a/pkg/security/utils/hostname_testutil.go b/pkg/security/utils/hostname_testutil.go new file mode 100644 index 0000000000000..e8b180e1665b6 --- /dev/null +++ b/pkg/security/utils/hostname_testutil.go @@ -0,0 +1,15 @@ +// 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 2024-present Datadog, Inc. + +//go:build test + +package utils + +// SetCachedHostname test utility to set the cached hostname, to avoid fetching it from the core agent. +func SetCachedHostname(name string) { + hostnameLock.Lock() + cachedHostname = name + hostnameLock.Unlock() +} From 09ef14cb519acddee4102017b9b8c911dd067fcb Mon Sep 17 00:00:00 2001 From: maxime mouial Date: Mon, 9 Dec 2024 14:19:17 +0100 Subject: [PATCH 053/303] Fix diff around default and known settings (#31658) --- pkg/config/model/viper.go | 2 +- pkg/config/nodetreemodel/config.go | 80 +++++++++++++------ pkg/config/nodetreemodel/config_test.go | 14 +++- pkg/config/nodetreemodel/getter.go | 51 +++++++++++- pkg/config/nodetreemodel/getter_test.go | 24 +++++- pkg/config/nodetreemodel/read_config_file.go | 37 ++++++--- .../nodetreemodel/read_config_file_test.go | 2 +- pkg/config/setup/config.go | 11 ++- pkg/config/setup/config_test.go | 7 +- pkg/config/teeconfig/teeconfig.go | 80 ++++++++++--------- 10 files changed, 214 insertions(+), 94 deletions(-) diff --git a/pkg/config/model/viper.go b/pkg/config/model/viper.go index eeb4b65492e70..5742b4c06520b 100644 --- a/pkg/config/model/viper.go +++ b/pkg/config/model/viper.go @@ -852,7 +852,7 @@ func (c *safeConfig) GetProxies() *Proxy { if c.Viper.GetBool("fips.enabled") { return nil } - if !c.Viper.IsSet("proxy.http") && !c.Viper.IsSet("proxy.https") && !c.Viper.IsSet("proxy.no_proxy") { + if c.Viper.GetString("proxy.http") == "" && c.Viper.GetString("proxy.https") == "" && len(c.Viper.GetStringSlice("proxy.no_proxy")) == 0 { return nil } p := &Proxy{ diff --git a/pkg/config/nodetreemodel/config.go b/pkg/config/nodetreemodel/config.go index 9e293bb9a7592..3d09ddc016eba 100644 --- a/pkg/config/nodetreemodel/config.go +++ b/pkg/config/nodetreemodel/config.go @@ -51,6 +51,18 @@ type ntmConfig struct { // Bellow are all the different configuration layers. Each layers represents a source for our configuration. // They are merge into the 'root' tree following order of importance (see pkg/model/viper.go:sourcesPriority). + // schema holds all the settings with or without value. Settings are added to the schema through BindEnv and + // SetDefault. + // + // This solved the difference between 'AllKeysLowercased' which returns the configuration schema and + // 'AllSettings' which only returns settings with a value. + // + // A setting register with BindEnv without default might not have a value depending on the environment. Such + // settings are part of the schema but won't appear in the configuration (through Get, AllSettings, ...). This + // mimic the behavior from Viper. Once we enfore a default value for all settings we will be able to merge + // 'schema' and 'defaults' fields. + schema InnerNode + // defaults contains the settings with a default value defaults InnerNode // unknown contains the settings set at runtime from unknown source. This should only evey be used by tests. @@ -131,11 +143,11 @@ func (c *ntmConfig) OnUpdate(callback model.NotificationReceiver) { c.notificationReceivers = append(c.notificationReceivers, callback) } -func (c *ntmConfig) setDefault(key string, value interface{}) { +func (c *ntmConfig) addToSchema(key string, source model.Source) { parts := splitKey(key) - // TODO: Ensure that for default tree, setting nil to a node will not override - // an existing value - _, _ = c.defaults.SetAt(parts, value, model.SourceDefault) + _, _ = c.schema.SetAt(parts, nil, source) + + c.addToKnownKeys(key) } func (c *ntmConfig) getTreeBySource(source model.Source) (InnerNode, error) { @@ -179,7 +191,7 @@ func (c *ntmConfig) Set(key string, newValue interface{}, source model.Source) { key = strings.ToLower(key) c.Lock() - previousValue := c.leafAtPath(key).Get() + previousValue := c.leafAtPathFromNode(key, c.root).Get() parts := splitKey(key) @@ -221,8 +233,12 @@ func (c *ntmConfig) SetDefault(key string, value interface{}) { panic("cannot SetDefault() once the config has been marked as ready for use") } key = strings.ToLower(key) - c.knownKeys[key] = struct{}{} - c.setDefault(key, value) + c.addToSchema(key, model.SourceDefault) + + parts := splitKey(key) + // TODO: Ensure that for default tree, setting nil to a node will not override + // an existing value + _, _ = c.defaults.SetAt(parts, value, model.SourceDefault) } // UnsetForSource unsets a config entry for a given source @@ -232,7 +248,19 @@ func (c *ntmConfig) UnsetForSource(_key string, _source model.Source) { c.Unlock() } -// SetKnown adds a key to the set of known valid config keys +func (c *ntmConfig) addToKnownKeys(key string) { + base := "" + keyParts := splitKey(key) + for _, part := range keyParts { + base = joinKey(base, part) + c.knownKeys[base] = struct{}{} + } +} + +// SetKnown adds a key to the set of known valid config keys. +// +// Important: this doesn't add the key to the schema. The "known keys" are a legacy feature we inherited from our Viper +// wrapper. Once all settings have a default we'll be able to remove this concept entirely. func (c *ntmConfig) SetKnown(key string) { c.Lock() defer c.Unlock() @@ -240,8 +268,7 @@ func (c *ntmConfig) SetKnown(key string) { panic("cannot SetKnown() once the config has been marked as ready for use") } - key = strings.ToLower(key) - c.knownKeys[key] = struct{}{} + c.addToKnownKeys(key) } // IsKnown returns whether a key is known @@ -273,6 +300,7 @@ func (c *ntmConfig) checkKnownKey(key string) { } func (c *ntmConfig) mergeAllLayers() error { + // We intentionally don't merge the schema layer as it hold no values treeList := []InnerNode{ c.defaults, c.unknown, @@ -324,7 +352,7 @@ func (c *ntmConfig) BuildSchema() { if err := c.mergeAllLayers(); err != nil { c.warnings = append(c.warnings, err.Error()) } - c.allSettings = computeAllSettings(c.defaults, "") + c.allSettings = computeAllSettings(c.schema, "") } // Stringify stringifies the config, but only with the test build tag @@ -409,7 +437,21 @@ func (c *ntmConfig) IsSet(key string) bool { c.RLock() defer c.RUnlock() - return c.IsKnown(key) + if !c.isReady() { + log.Errorf("attempt to read key before config is constructed: %s", key) + return false + } + + pathParts := splitKey(key) + var curr Node = c.root + for _, part := range pathParts { + next, err := curr.GetChild(part) + if err != nil { + return false + } + curr = next + } + return true } // AllKeysLowercased returns all keys lower-cased from the default tree, but not keys that are merely marked as known @@ -420,16 +462,7 @@ func (c *ntmConfig) AllKeysLowercased() []string { return slices.Clone(c.allSettings) } -func (c *ntmConfig) leafAtPath(key string) LeafNode { - return c.leafAtPathFromNode(key, c.root) -} - func (c *ntmConfig) leafAtPathFromNode(key string, curr Node) LeafNode { - if !c.isReady() { - log.Errorf("attempt to read key before config is constructed: %s", key) - return missingLeaf - } - pathParts := splitKey(key) for _, part := range pathParts { next, err := curr.GetChild(part) @@ -496,8 +529,7 @@ func (c *ntmConfig) BindEnv(key string, envvars ...string) { c.configEnvVars[envvar] = key } - c.knownKeys[key] = struct{}{} - c.setDefault(key, nil) + c.addToSchema(key, model.SourceEnvVar) } // SetEnvKeyReplacer binds a replacer function for keys @@ -706,6 +738,7 @@ func NewConfig(name string, envPrefix string, envKeyReplacer *strings.Replacer) knownKeys: map[string]struct{}{}, allSettings: []string{}, unknownKeys: map[string]struct{}{}, + schema: newInnerNode(nil), defaults: newInnerNode(nil), file: newInnerNode(nil), unknown: newInnerNode(nil), @@ -716,6 +749,7 @@ func NewConfig(name string, envPrefix string, envKeyReplacer *strings.Replacer) fleetPolicies: newInnerNode(nil), cli: newInnerNode(nil), envTransform: make(map[string]func(string) interface{}), + configName: "datadog", } config.SetConfigName(name) diff --git a/pkg/config/nodetreemodel/config_test.go b/pkg/config/nodetreemodel/config_test.go index c9f87747e2345..dfba602113411 100644 --- a/pkg/config/nodetreemodel/config_test.go +++ b/pkg/config/nodetreemodel/config_test.go @@ -64,13 +64,13 @@ secret_backend_command: ./my_secret_fetcher.sh { description: "nested setting from env var works", setting: "network_path.collector.input_chan_size", - expectValue: "23456", + expectValue: 23456, expectSource: model.SourceEnvVar, }, { description: "top-level setting from env var works", setting: "secret_backend_timeout", - expectValue: "60", // TODO: cfg.Get returns string because this is an env var + expectValue: 60, expectSource: model.SourceEnvVar, }, { @@ -326,13 +326,21 @@ func TestIsSet(t *testing.T) { cfg := NewConfig("test", "TEST", nil) cfg.SetDefault("a", 0) cfg.SetDefault("b", 0) + cfg.SetKnown("c") cfg.BuildSchema() cfg.Set("b", 123, model.SourceAgentRuntime) - assert.True(t, cfg.IsSet("b")) assert.True(t, cfg.IsSet("a")) + assert.True(t, cfg.IsSet("b")) + assert.False(t, cfg.IsSet("c")) + + assert.True(t, cfg.IsKnown("a")) + assert.True(t, cfg.IsKnown("b")) + assert.True(t, cfg.IsKnown("c")) + assert.False(t, cfg.IsSet("unknown")) + assert.False(t, cfg.IsKnown("unknown")) } func TestAllKeysLowercased(t *testing.T) { diff --git a/pkg/config/nodetreemodel/getter.go b/pkg/config/nodetreemodel/getter.go index 454bbe2b885aa..450271f001f95 100644 --- a/pkg/config/nodetreemodel/getter.go +++ b/pkg/config/nodetreemodel/getter.go @@ -16,6 +16,15 @@ import ( "golang.org/x/exp/slices" ) +func (c *ntmConfig) leafAtPath(key string) LeafNode { + if !c.isReady() { + log.Errorf("attempt to read key before config is constructed: %s", key) + return missingLeaf + } + + return c.leafAtPathFromNode(key, c.root) +} + // GetKnownKeysLowercased returns all the keys that meet at least one of these criteria: // 1) have a default, 2) have an environment variable binded or 3) have been SetKnown() // Note that it returns the keys lowercased. @@ -71,16 +80,50 @@ func (c *ntmConfig) GetProxies() *model.Proxy { return c.proxies } +func (c *ntmConfig) inferTypeFromDefault(key string, value interface{}) (interface{}, error) { + // Viper infer the type from the default value for Get. This reproduce the same behavior. + // Once all settings have a default value we could move this logic where we load data into the config rather + // than out. + defaultNode := c.leafAtPathFromNode(key, c.defaults) + if defaultNode != missingLeaf { + switch defaultNode.Get().(type) { + case bool: + return cast.ToBoolE(value) + case string: + return cast.ToStringE(value) + case int32, int16, int8, int: + return cast.ToIntE(value) + case int64: + return cast.ToInt64E(value) + case float64, float32: + return cast.ToFloat64E(value) + case time.Time: + return cast.ToTimeE(value) + case time.Duration: + return cast.ToDurationE(value) + case []string: + return cast.ToStringSliceE(value) + } + } + + // NOTE: should only need to deepcopy for `Get`, because it can be an arbitrary value, + // and we shouldn't ever return complex types like maps and slices that could be modified + // by callers accidentally or on purpose. By copying, the caller may modify the result safetly + return deepcopy.Copy(value), nil +} + // Get returns a copy of the value for the given key func (c *ntmConfig) Get(key string) interface{} { c.RLock() defer c.RUnlock() c.checkKnownKey(key) val := c.leafAtPath(key).Get() - // NOTE: should only need to deepcopy for `Get`, because it can be an arbitrary value, - // and we shouldn't ever return complex types like maps and slices that could be modified - // by callers accidentally or on purpose. By copying, the caller may modify the result safetly - return deepcopy.Copy(val) + + val, err := c.inferTypeFromDefault(key, val) + if err != nil { + log.Warnf("failed to get configuration value for key %q: %s", key, err) + } + return val } // GetAllSources returns all values for a key for each source in sorted from lower to higher priority diff --git a/pkg/config/nodetreemodel/getter_test.go b/pkg/config/nodetreemodel/getter_test.go index fc5bf9b3d583e..3c05bffc40d27 100644 --- a/pkg/config/nodetreemodel/getter_test.go +++ b/pkg/config/nodetreemodel/getter_test.go @@ -24,7 +24,10 @@ func TestGetKnownKeysLowercased(t *testing.T) { assert.Equal(t, map[string]interface{}{ "a": struct{}{}, + "b": struct{}{}, "b.c": struct{}{}, + "d": struct{}{}, + "d.e": struct{}{}, "d.e.f": struct{}{}, }, cfg.GetKnownKeysLowercased()) @@ -37,8 +40,25 @@ func TestGet(t *testing.T) { assert.Equal(t, 1234, cfg.Get("a")) - cfg.Set("a", "test", model.SourceAgentRuntime) - assert.Equal(t, "test", cfg.Get("a")) + cfg.Set("a", 9876, model.SourceAgentRuntime) + assert.Equal(t, 9876, cfg.Get("a")) + + assert.Equal(t, nil, cfg.Get("does_not_exists")) +} + +func TestGetCastToDefault(t *testing.T) { + cfg := NewConfig("test", "", nil) + cfg.SetDefault("a", []string{}) + cfg.BuildSchema() + + // This test that we mimic viper's behavior on Get where we convert the value from the config to the same type + // from the default. + + cfg.Set("a", 9876, model.SourceAgentRuntime) + assert.Equal(t, []string{"9876"}, cfg.Get("a")) + + cfg.Set("a", "a b c", model.SourceAgentRuntime) + assert.Equal(t, []string{"a", "b", "c"}, cfg.Get("a")) assert.Equal(t, nil, cfg.Get("does_not_exists")) } diff --git a/pkg/config/nodetreemodel/read_config_file.go b/pkg/config/nodetreemodel/read_config_file.go index c829ff6837aeb..8354a012376b0 100644 --- a/pkg/config/nodetreemodel/read_config_file.go +++ b/pkg/config/nodetreemodel/read_config_file.go @@ -9,6 +9,7 @@ import ( "fmt" "io" "os" + "path/filepath" "reflect" "strings" @@ -17,11 +18,16 @@ import ( "gopkg.in/yaml.v2" ) -func (c *ntmConfig) getConfigFile() string { +func (c *ntmConfig) findConfigFile() { if c.configFile == "" { - return "datadog.yaml" + for _, path := range c.configPaths { + configFilePath := filepath.Join(path, c.configName+".yaml") + if _, err := os.Stat(configFilePath); err == nil { + c.configFile = configFilePath + return + } + } } - return c.configFile } // ReadInConfig wraps Viper for concurrent access @@ -33,7 +39,8 @@ func (c *ntmConfig) ReadInConfig() error { c.Lock() defer c.Unlock() - err := c.readInConfig(c.getConfigFile()) + c.findConfigFile() + err := c.readInConfig(c.configFile) if err != nil { return err } @@ -76,10 +83,14 @@ func (c *ntmConfig) readInConfig(filePath string) error { func (c *ntmConfig) readConfigurationContent(target InnerNode, content []byte) error { var obj map[string]interface{} - if err := yaml.Unmarshal(content, &obj); err != nil { - return err + + if strictErr := yaml.UnmarshalStrict(content, &obj); strictErr != nil { + log.Errorf("warning reading config file: %v\n", strictErr) + if err := yaml.Unmarshal(content, &obj); err != nil { + return err + } } - c.warnings = append(c.warnings, loadYamlInto(c.defaults, target, obj, "")...) + c.warnings = append(c.warnings, loadYamlInto(c.schema, target, obj, "")...) return nil } @@ -113,7 +124,7 @@ func toMapStringInterface(data any, path string) (map[string]interface{}, error) // // The function traverses a object loaded from YAML, checking if each node is known within the configuration. // If known, the value from the YAML blob is imported into the 'dest' tree. If unknown, a warning will be created. -func loadYamlInto(defaults InnerNode, dest InnerNode, data map[string]interface{}, path string) []string { +func loadYamlInto(schema InnerNode, dest InnerNode, data map[string]interface{}, path string) []string { if path != "" { path = path + "." } @@ -123,15 +134,15 @@ func loadYamlInto(defaults InnerNode, dest InnerNode, data map[string]interface{ key = strings.ToLower(key) curPath := path + key - // check if the key is know in the defaults - defaultNode, err := defaults.GetChild(key) + // check if the key is know in the schema + schemaNode, err := schema.GetChild(key) if err != nil { warnings = append(warnings, fmt.Sprintf("unknown key from YAML: %s", curPath)) continue } // if the default is a leaf we create a new leaf in dest - if _, isLeaf := defaultNode.(LeafNode); isLeaf { + if _, isLeaf := schemaNode.(LeafNode); isLeaf { // check that dest don't have a inner leaf under that name c, _ := dest.GetChild(key) if _, ok := c.(InnerNode); ok { @@ -148,8 +159,8 @@ func loadYamlInto(defaults InnerNode, dest InnerNode, data map[string]interface{ warnings = append(warnings, err.Error()) } - // by now we know defaultNode is an InnerNode - defaultNext, _ := defaultNode.(InnerNode) + // by now we know schemaNode is an InnerNode + defaultNext, _ := schemaNode.(InnerNode) if !dest.HasChild(key) { destInner := newInnerNode(nil) diff --git a/pkg/config/nodetreemodel/read_config_file_test.go b/pkg/config/nodetreemodel/read_config_file_test.go index 3b68045071be1..4a9281c289065 100644 --- a/pkg/config/nodetreemodel/read_config_file_test.go +++ b/pkg/config/nodetreemodel/read_config_file_test.go @@ -151,7 +151,7 @@ c: cfg.SetDefault("a", "apple") cfg.SetDefault("b", 123) - cfg.SetDefault("c.d", true) + cfg.SetDefault("c.d", 1) cfg.SetDefault("c.e.f", 456) cfg.BuildSchema() diff --git a/pkg/config/setup/config.go b/pkg/config/setup/config.go index 73648316c5f4c..a9c74bb2765fa 100644 --- a/pkg/config/setup/config.go +++ b/pkg/config/setup/config.go @@ -1038,7 +1038,10 @@ func agent(config pkgconfigmodel.Setup) { config.BindEnv("dd_url", "DD_DD_URL", "DD_URL") config.BindEnvAndSetDefault("app_key", "") config.BindEnvAndSetDefault("cloud_provider_metadata", []string{"aws", "gcp", "azure", "alibaba", "oracle", "ibm"}) - config.SetDefault("proxy", nil) + config.SetDefault("proxy.http", "") + config.SetDefault("proxy.https", "") + config.SetDefault("proxy.no_proxy", []string{}) + config.BindEnvAndSetDefault("skip_ssl_validation", false) config.BindEnvAndSetDefault("sslkeylogfile", "") config.BindEnv("tls_handshake_timeout") @@ -1121,10 +1124,6 @@ func agent(config pkgconfigmodel.Setup) { config.BindEnvAndSetDefault("GUI_port", defaultGuiPort) config.BindEnvAndSetDefault("GUI_session_expiration", 0) - config.SetKnown("proxy.http") - config.SetKnown("proxy.https") - config.SetKnown("proxy.no_proxy") - // Core agent (disabled for Error Tracking Standalone, Logs Collection Only) config.BindEnvAndSetDefault("core_agent.enabled", true) pkgconfigmodel.AddOverrideFunc(toggleDefaultPayloads) @@ -1331,7 +1330,7 @@ func serverless(config pkgconfigmodel.Setup) { config.BindEnvAndSetDefault("capture_lambda_payload_max_depth", 10) config.BindEnvAndSetDefault("serverless.trace_enabled", true, "DD_TRACE_ENABLED") config.BindEnvAndSetDefault("serverless.trace_managed_services", true, "DD_TRACE_MANAGED_SERVICES") - config.BindEnvAndSetDefault("serverless.service_mapping", nil, "DD_SERVICE_MAPPING") + config.BindEnvAndSetDefault("serverless.service_mapping", "", "DD_SERVICE_MAPPING") } func forwarder(config pkgconfigmodel.Setup) { diff --git a/pkg/config/setup/config_test.go b/pkg/config/setup/config_test.go index 1421770758180..c9713b2fccd9c 100644 --- a/pkg/config/setup/config_test.go +++ b/pkg/config/setup/config_test.go @@ -243,7 +243,7 @@ func TestProxy(t *testing.T) { { name: "no values", tests: func(t *testing.T, config pkgconfigmodel.Config) { - assert.Nil(t, config.Get("proxy")) + assert.Equal(t, map[string]interface{}{"http": "", "https": "", "no_proxy": []interface{}{}}, config.Get("proxy")) assert.Nil(t, config.GetProxies()) }, proxyForCloudMetadata: true, @@ -373,7 +373,7 @@ func TestProxy(t *testing.T) { proxyForCloudMetadata: true, }, { - name: "proxy withou no_proxy", + name: "proxy without no_proxy", setup: func(t *testing.T, _ pkgconfigmodel.Config) { t.Setenv("DD_PROXY_HTTP", "http_url") t.Setenv("DD_PROXY_HTTPS", "https_url") @@ -385,7 +385,8 @@ func TestProxy(t *testing.T) { HTTPS: "https_url", }, config.GetProxies()) - assert.Equal(t, []interface{}{}, config.Get("proxy.no_proxy")) + fmt.Printf("%#v\n", config.Get("proxy.no_proxy")) + assert.Equal(t, []string(nil), config.Get("proxy.no_proxy")) }, proxyForCloudMetadata: true, }, diff --git a/pkg/config/teeconfig/teeconfig.go b/pkg/config/teeconfig/teeconfig.go index efbc1c44b8e82..ba787dd5db77b 100644 --- a/pkg/config/teeconfig/teeconfig.go +++ b/pkg/config/teeconfig/teeconfig.go @@ -7,9 +7,11 @@ package teeconfig import ( + "fmt" "io" "reflect" "runtime" + "slices" "strings" "time" @@ -25,6 +27,12 @@ type teeConfig struct { compare model.Config } +func getLocation(nbStack int) string { + _, file, line, _ := runtime.Caller(nbStack + 1) + fileParts := strings.Split(file, "DataDog/datadog-agent/") + return fmt.Sprintf("%s:%d", fileParts[len(fileParts)-1], line) +} + // NewTeeConfig constructs a new teeConfig func NewTeeConfig(baseline, compare model.Config) model.Config { return &teeConfig{baseline: baseline, compare: compare} @@ -84,7 +92,7 @@ func (t *teeConfig) IsKnown(key string) bool { func (t *teeConfig) GetKnownKeysLowercased() map[string]interface{} { base := t.baseline.GetKnownKeysLowercased() compare := t.compare.GetKnownKeysLowercased() - compareResult("", "GetKnownKeysLowercased", base, compare) + t.compareResult("", "GetKnownKeysLowercased", base, compare) return base } @@ -125,7 +133,7 @@ func (t *teeConfig) IsSet(key string) bool { base := t.baseline.IsSet(key) compare := t.compare.IsSet(key) if base != compare { - log.Warnf("difference in config: IsSet(%s) -> base: %v | compare %v", key, base, compare) + log.Warnf("difference in config: IsSet(%s) -> base[%s]: %v | compare[%s]: %v | from %s", key, t.baseline.GetSource(key), base, t.compare.GetSource(key), compare, getLocation(1)) } return base } @@ -134,21 +142,22 @@ func (t *teeConfig) AllKeysLowercased() []string { base := t.baseline.AllKeysLowercased() compare := t.compare.AllKeysLowercased() if !reflect.DeepEqual(base, compare) { - log.Warnf("difference in config: allkeyslowercased() -> base len: %d | compare len: %d", len(base), len(compare)) + log.Warnf("difference in config: AllKeysLowercased() -> base len: %d | compare len: %d", len(base), len(compare)) i := 0 j := 0 for i < len(base) && j < len(compare) { - if base[i] != compare[j] { + if base[i] == compare[j] { i++ j++ continue } - log.Warnf("difference in config: allkeyslowercased() -> base[%d]: %v | compare[%d]: %v", i, base[i], j, compare[j]) if strings.Compare(base[i], compare[j]) == -1 { + log.Warnf("difference in config: allkeyslowercased() missing key in compare -> base[%d]: %#v", i, base[i]) i++ } else { + log.Warnf("difference in config: allkeyslowercased() extra key in compare -> --- | compare[%d]: %#v", j, compare[j]) j++ } } @@ -156,27 +165,25 @@ func (t *teeConfig) AllKeysLowercased() []string { return base } -func compareResult(key, method string, base, compare interface{}) interface{} { +func (t *teeConfig) compareResult(key, method string, base, compare interface{}) { if !reflect.DeepEqual(base, compare) { - _, file, line, _ := runtime.Caller(2) - fileParts := strings.Split(file, "DataDog/datadog-agent/") - log.Warnf("difference in config: %s(%s) -> base: %v | compare %v from %s:%d", method, key, base, compare, fileParts[len(fileParts)-1], line) + log.Warnf("difference in config: %s(%s) -> base[%s]: %#v | compare[%s] %#v | from %s", method, key, t.baseline.GetSource(key), base, t.compare.GetSource(key), compare, getLocation(2)) } - return compare } // Get wraps Viper for concurrent access func (t *teeConfig) Get(key string) interface{} { base := t.baseline.Get(key) compare := t.compare.Get(key) - return compareResult(key, "Get", base, compare) + t.compareResult(key, "Get", base, compare) + return base } // GetAllSources returns the value of a key for each source func (t *teeConfig) GetAllSources(key string) []model.ValueWithSource { base := t.baseline.GetAllSources(key) compare := t.compare.GetAllSources(key) - compareResult(key, "GetAllSources", base, compare) + t.compareResult(key, "GetAllSources", base, compare) return base } @@ -184,7 +191,7 @@ func (t *teeConfig) GetAllSources(key string) []model.ValueWithSource { func (t *teeConfig) GetString(key string) string { base := t.baseline.GetString(key) compare := t.compare.GetString(key) - compareResult(key, "GetString", base, compare) + t.compareResult(key, "GetString", base, compare) return base } @@ -193,7 +200,7 @@ func (t *teeConfig) GetString(key string) string { func (t *teeConfig) GetBool(key string) bool { base := t.baseline.GetBool(key) compare := t.compare.GetBool(key) - compareResult(key, "GetBool", base, compare) + t.compareResult(key, "GetBool", base, compare) return base } @@ -202,7 +209,7 @@ func (t *teeConfig) GetBool(key string) bool { func (t *teeConfig) GetInt(key string) int { base := t.baseline.GetInt(key) compare := t.compare.GetInt(key) - compareResult(key, "GetInt", base, compare) + t.compareResult(key, "GetInt", base, compare) return base } @@ -211,7 +218,7 @@ func (t *teeConfig) GetInt(key string) int { func (t *teeConfig) GetInt32(key string) int32 { base := t.baseline.GetInt32(key) compare := t.compare.GetInt32(key) - compareResult(key, "GetInt32", base, compare) + t.compareResult(key, "GetInt32", base, compare) return base } @@ -220,7 +227,7 @@ func (t *teeConfig) GetInt32(key string) int32 { func (t *teeConfig) GetInt64(key string) int64 { base := t.baseline.GetInt64(key) compare := t.compare.GetInt64(key) - compareResult(key, "GetInt64", base, compare) + t.compareResult(key, "GetInt64", base, compare) return base } @@ -229,7 +236,7 @@ func (t *teeConfig) GetInt64(key string) int64 { func (t *teeConfig) GetFloat64(key string) float64 { base := t.baseline.GetFloat64(key) compare := t.compare.GetFloat64(key) - compareResult(key, "GetFloat64", base, compare) + t.compareResult(key, "GetFloat64", base, compare) return base } @@ -238,7 +245,7 @@ func (t *teeConfig) GetFloat64(key string) float64 { func (t *teeConfig) GetDuration(key string) time.Duration { base := t.baseline.GetDuration(key) compare := t.compare.GetDuration(key) - compareResult(key, "GetDuration", base, compare) + t.compareResult(key, "GetDuration", base, compare) return base } @@ -247,7 +254,7 @@ func (t *teeConfig) GetDuration(key string) time.Duration { func (t *teeConfig) GetStringSlice(key string) []string { base := t.baseline.GetStringSlice(key) compare := t.compare.GetStringSlice(key) - compareResult(key, "GetStringSlice", base, compare) + t.compareResult(key, "GetStringSlice", base, compare) return base } @@ -256,7 +263,7 @@ func (t *teeConfig) GetStringSlice(key string) []string { func (t *teeConfig) GetFloat64Slice(key string) []float64 { base := t.baseline.GetFloat64Slice(key) compare := t.compare.GetFloat64Slice(key) - compareResult(key, "GetFloat64Slice", base, compare) + t.compareResult(key, "GetFloat64Slice", base, compare) return base } @@ -265,7 +272,7 @@ func (t *teeConfig) GetFloat64Slice(key string) []float64 { func (t *teeConfig) GetStringMap(key string) map[string]interface{} { base := t.baseline.GetStringMap(key) compare := t.compare.GetStringMap(key) - compareResult(key, "GetStringMap", base, compare) + t.compareResult(key, "GetStringMap", base, compare) return base } @@ -274,7 +281,7 @@ func (t *teeConfig) GetStringMap(key string) map[string]interface{} { func (t *teeConfig) GetStringMapString(key string) map[string]string { base := t.baseline.GetStringMapString(key) compare := t.compare.GetStringMapString(key) - compareResult(key, "GetStringMapString", base, compare) + t.compareResult(key, "GetStringMapString", base, compare) return base } @@ -283,7 +290,7 @@ func (t *teeConfig) GetStringMapString(key string) map[string]string { func (t *teeConfig) GetStringMapStringSlice(key string) map[string][]string { base := t.baseline.GetStringMapStringSlice(key) compare := t.compare.GetStringMapStringSlice(key) - compareResult(key, "GetStringMapStringSlice", base, compare) + t.compareResult(key, "GetStringMapStringSlice", base, compare) return base } @@ -292,7 +299,7 @@ func (t *teeConfig) GetStringMapStringSlice(key string) map[string][]string { func (t *teeConfig) GetSizeInBytes(key string) uint { base := t.baseline.GetSizeInBytes(key) compare := t.compare.GetSizeInBytes(key) - compareResult(key, "GetSizeInBytes", base, compare) + t.compareResult(key, "GetSizeInBytes", base, compare) return base } @@ -301,7 +308,7 @@ func (t *teeConfig) GetSizeInBytes(key string) uint { func (t *teeConfig) GetSource(key string) model.Source { base := t.baseline.GetSource(key) compare := t.compare.GetSource(key) - compareResult(key, "GetSource", base, compare) + t.compareResult(key, "GetSource", base, compare) return base } @@ -386,7 +393,7 @@ func (t *teeConfig) AllSettings() map[string]interface{} { continue } if !reflect.DeepEqual(base[key], compare[key]) { - log.Warnf("\titem %s: %v | %v", key, base[key], compare[key]) + log.Warnf("\titem %s: %#v | %#v", key, base[key], compare[key]) } log.Flush() } @@ -399,7 +406,7 @@ func (t *teeConfig) AllSettings() map[string]interface{} { func (t *teeConfig) AllSettingsWithoutDefault() map[string]interface{} { base := t.baseline.AllSettingsWithoutDefault() compare := t.compare.AllSettingsWithoutDefault() - compareResult("", "AllSettingsWithoutDefault", base, compare) + t.compareResult("", "AllSettingsWithoutDefault", base, compare) return base } @@ -408,7 +415,7 @@ func (t *teeConfig) AllSettingsWithoutDefault() map[string]interface{} { func (t *teeConfig) AllSettingsBySource() map[model.Source]interface{} { base := t.baseline.AllSettingsBySource() compare := t.compare.AllSettingsBySource() - compareResult("", "AllSettingsBySource", base, compare) + t.compareResult("", "AllSettingsBySource", base, compare) return base } @@ -454,21 +461,18 @@ func (t *teeConfig) SetConfigType(in string) { func (t *teeConfig) ConfigFileUsed() string { base := t.baseline.ConfigFileUsed() compare := t.compare.ConfigFileUsed() - compareResult("", "ConfigFileUsed", base, compare) + t.compareResult("", "ConfigFileUsed", base, compare) return base } -//func (t *teeConfig) SetTypeByDefaultValue(in bool) { -// t.baseline.SetTypeByDefaultValue(in) -// t.compare.SetTypeByDefaultValue(in) -//} - // GetEnvVars implements the Config interface func (t *teeConfig) GetEnvVars() []string { base := t.baseline.GetEnvVars() compare := t.compare.GetEnvVars() - compareResult("", "GetEnvVars", base, compare) + slices.Sort(base) + slices.Sort(compare) + t.compareResult("", "GetEnvVars", base, compare) return base } @@ -495,13 +499,13 @@ func (t *teeConfig) Stringify(source model.Source) string { func (t *teeConfig) GetProxies() *model.Proxy { base := t.baseline.GetProxies() compare := t.compare.GetProxies() - compareResult("", "GetProxies", base, compare) + t.compareResult("", "GetProxies", base, compare) return base } func (t *teeConfig) ExtraConfigFilesUsed() []string { base := t.baseline.ExtraConfigFilesUsed() compare := t.compare.ExtraConfigFilesUsed() - compareResult("", "ExtraConfigFilesUsed", base, compare) + t.compareResult("", "ExtraConfigFilesUsed", base, compare) return base } From d9a4c787c54377f67d89a397b4db6ec8f71019a9 Mon Sep 17 00:00:00 2001 From: Arthur Bellal Date: Mon, 9 Dec 2024 14:55:24 +0100 Subject: [PATCH 054/303] (fleet) downloader flavors (#31840) --- .gitattributes | 47 +++++----- .gitlab/package_build/installer.yml | 3 +- cmd/installer-downloader/main.go | 86 ++++++++++++++++-- .../subcommands/installer/command.go | 26 ++---- .../telemetry/telemetryimpl/telemetry.go | 5 +- pkg/fleet/bootstrapper/bootstrapper.go | 2 +- pkg/fleet/installer/default_packages.go | 2 +- pkg/fleet/installer/default_packages_test.go | 2 +- pkg/fleet/installer/fixtures/README.md | 19 ++++ .../{internal => installer}/fixtures/fs.go | 0 .../oci-layout-simple-v1-linux2-amd128.tar | Bin .../fixtures/oci-layout-simple-v1.tar | Bin .../fixtures/oci-layout-simple-v2.tar | Bin .../fixtures/server.go | 2 +- .../simple-v1-config/datadog.yaml.example | 0 .../fixtures/simple-v1/executable.sh | 0 .../fixtures/simple-v1/file.txt | 0 .../simple-v2-config/datadog.yaml.example | 0 .../fixtures/simple-v2/executable-new.sh | 0 pkg/fleet/installer/installer.go | 2 +- pkg/fleet/installer/installer_test.go | 4 +- .../{internal => installer}/oci/download.go | 2 +- .../oci/download_test.go | 2 +- .../{internal => installer}/oci/mirror.go | 0 .../oci/mirror_test.go | 2 +- pkg/fleet/installer/setup/common/config.go | 2 +- pkg/fleet/installer/setup/setup.go | 20 ++-- pkg/fleet/{internal => installer}/tar/tar.go | 0 pkg/fleet/internal/bootstrap/bootstrap_nix.go | 2 +- .../internal/bootstrap/bootstrap_windows.go | 2 +- pkg/fleet/internal/fixtures/README.md | 19 ---- pkg/fleet/telemetry/telemetry.go | 17 +++- tasks/installer.py | 15 ++- 33 files changed, 184 insertions(+), 99 deletions(-) create mode 100644 pkg/fleet/installer/fixtures/README.md rename pkg/fleet/{internal => installer}/fixtures/fs.go (100%) rename pkg/fleet/{internal => installer}/fixtures/oci-layout-simple-v1-linux2-amd128.tar (100%) rename pkg/fleet/{internal => installer}/fixtures/oci-layout-simple-v1.tar (100%) rename pkg/fleet/{internal => installer}/fixtures/oci-layout-simple-v2.tar (100%) rename pkg/fleet/{internal => installer}/fixtures/server.go (98%) rename pkg/fleet/{internal => installer}/fixtures/simple-v1-config/datadog.yaml.example (100%) rename pkg/fleet/{internal => installer}/fixtures/simple-v1/executable.sh (100%) rename pkg/fleet/{internal => installer}/fixtures/simple-v1/file.txt (100%) rename pkg/fleet/{internal => installer}/fixtures/simple-v2-config/datadog.yaml.example (100%) rename pkg/fleet/{internal => installer}/fixtures/simple-v2/executable-new.sh (100%) rename pkg/fleet/{internal => installer}/oci/download.go (99%) rename pkg/fleet/{internal => installer}/oci/download_test.go (99%) rename pkg/fleet/{internal => installer}/oci/mirror.go (100%) rename pkg/fleet/{internal => installer}/oci/mirror_test.go (97%) rename pkg/fleet/{internal => installer}/tar/tar.go (100%) delete mode 100644 pkg/fleet/internal/fixtures/README.md diff --git a/.gitattributes b/.gitattributes index 0b7a4b14e7cf1..9b3d026858313 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10,7 +10,7 @@ go.sum -diff -merge linguist-generated=true pkg/security/probe/constantfetch/btfhub/constants.json -diff -merge linguist-generated=true pkg/security/seclwin/** -diff -merge linguist-generated=true # Fixtures should have LF line endings because they are checked against OCI packages built on Linux -pkg/fleet/internal/fixtures/** text=auto eol=lf +pkg/fleet/installer/fixtures/** text=auto eol=lf # Fix `git diff` when running on the below file formats. # Our windows build image uses MinGit which tries to use the astextplain diff algorithm (https://git-scm.com/docs/gitattributes#_setting_the_internal_diff_algorithm). @@ -27,26 +27,25 @@ pkg/fleet/internal/fixtures/** text=auto eol=lf # textconv = astextplain # ``` - -*.doc diff -*.DOC diff -*.docx diff -*.DOCX diff -*.docm diff -*.DOCM diff -*.dot diff -*.DOT diff -*.dotx diff -*.DOTX diff -*.dotm diff -*.DOTM diff -*.pdf diff -*.PDF diff -*.rtf diff -*.RTF diff -*.ods diff -*.ODS diff -*.odf diff -*.ODF diff -*.odt diff -*.ODT diff +*.doc diff +*.DOC diff +*.docx diff +*.DOCX diff +*.docm diff +*.DOCM diff +*.dot diff +*.DOT diff +*.dotx diff +*.DOTX diff +*.dotm diff +*.DOTM diff +*.pdf diff +*.PDF diff +*.rtf diff +*.RTF diff +*.ods diff +*.ODS diff +*.odf diff +*.ODF diff +*.odt diff +*.ODT diff diff --git a/.gitlab/package_build/installer.yml b/.gitlab/package_build/installer.yml index 6ab10c1a19e62..154392b246469 100644 --- a/.gitlab/package_build/installer.yml +++ b/.gitlab/package_build/installer.yml @@ -103,7 +103,8 @@ installer-install-scripts: - !reference [.retrieve_linux_go_deps] - echo "About to build for $RELEASE_VERSION" - mkdir -p $OMNIBUS_PACKAGE_DIR - - inv -e installer.build-linux-script && mv ./bin/installer/install.sh $OMNIBUS_PACKAGE_DIR/install-djm.sh + - inv -e installer.build-linux-script "databricks" "$RELEASE_VERSION" + - mv ./bin/installer/install-*.sh $OMNIBUS_PACKAGE_DIR/ - ls -la $OMNIBUS_PACKAGE_DIR artifacts: expire_in: 2 weeks diff --git a/cmd/installer-downloader/main.go b/cmd/installer-downloader/main.go index f964080a4315b..db35a6c337519 100644 --- a/cmd/installer-downloader/main.go +++ b/cmd/installer-downloader/main.go @@ -7,20 +7,94 @@ package main import ( + "context" "fmt" "os" + "os/exec" + "path/filepath" - "github.com/DataDog/datadog-agent/cmd/installer/subcommands/installer" "github.com/DataDog/datadog-agent/cmd/installer/user" - "github.com/DataDog/datadog-agent/cmd/internal/runcmd" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/oci" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" +) + +const ( + installerPackage = "datadog-installer" + installerBinPath = "bin/installer/installer" +) + +var ( + // Version is the version of the installer to download. + Version string + // Flavor is the flavor of the setup to run. + Flavor string ) func main() { + if Version == "" || Flavor == "" { + fmt.Fprintln(os.Stderr, "Version and Flavor must be set at build time.") + os.Exit(1) + } if !user.IsRoot() { - fmt.Fprintln(os.Stderr, "This command requires root privileges.") + fmt.Fprintln(os.Stderr, "This installer requires root privileges.") os.Exit(1) } - cmd := installer.BootstrapCommand() - cmd.SilenceUsage = true - os.Exit(runcmd.Run(cmd)) + env := env.FromEnv() + ctx := context.Background() + + t := telemetry.NewTelemetry(env.HTTPClient(), env.APIKey, env.Site, fmt.Sprintf("datadog-installer-downloader-%s", Flavor)) + _ = t.Start(ctx) + defer func() { _ = t.Stop(ctx) }() + var err error + span, ctx := telemetry.StartSpanFromEnv(ctx, "downloader") + defer func() { span.Finish(tracer.WithError(err)) }() + err = runDownloader(ctx, env, Version, Flavor) + if err != nil { + fmt.Fprintf(os.Stderr, "Installation failed: %v\n", err) + os.Exit(1) + } +} + +func runDownloader(ctx context.Context, env *env.Env, version string, flavor string) error { + downloaderPath, err := os.Executable() + if err != nil { + return fmt.Errorf("failed to get executable path: %w", err) + } + tmpDir, err := os.MkdirTemp(filepath.Dir(downloaderPath), "datadog-installer") + if err != nil { + return fmt.Errorf("failed to create temporary directory: %w", err) + } + defer os.RemoveAll(tmpDir) + err = downloadInstaller(ctx, env, version, tmpDir) + if err != nil { + return fmt.Errorf("failed to download installer: %w", err) + } + cmd := exec.CommandContext(ctx, filepath.Join(tmpDir, installerBinPath), "setup", "--flavor", flavor) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + cmd.Env = os.Environ() + err = cmd.Run() + if err != nil { + return fmt.Errorf("failed to run installer: %w", err) + } + return nil +} + +func downloadInstaller(ctx context.Context, env *env.Env, version string, tmpDir string) error { + url := oci.PackageURL(env, installerPackage, version) + downloader := oci.NewDownloader(env, env.HTTPClient()) + downloadedPackage, err := downloader.Download(ctx, url) + if err != nil { + return fmt.Errorf("failed to download installer package: %w", err) + } + if downloadedPackage.Name != installerPackage { + return fmt.Errorf("unexpected package name: %s, expected %s", downloadedPackage.Name, installerPackage) + } + err = downloadedPackage.ExtractLayers(oci.DatadogPackageLayerMediaType, tmpDir) + if err != nil { + return fmt.Errorf("failed to extract layers: %w", err) + } + return nil } diff --git a/cmd/installer/subcommands/installer/command.go b/cmd/installer/subcommands/installer/command.go index 7b898b0579cdb..186367fc20b42 100644 --- a/cmd/installer/subcommands/installer/command.go +++ b/cmd/installer/subcommands/installer/command.go @@ -96,7 +96,7 @@ type cmd struct { func newCmd(operation string) *cmd { env := env.FromEnv() t := newTelemetry(env) - span, ctx := newSpan(operation) + span, ctx := telemetry.StartSpanFromEnv(context.Background(), operation) setInstallerUmask(span) return &cmd{ t: t, @@ -226,12 +226,8 @@ func newTelemetry(env *env.Env) *telemetry.Telemetry { if site == "" { site = config.Site } - t, err := telemetry.NewTelemetry(env.HTTPClient(), apiKey, site, "datadog-installer") // No sampling rules for commands - if err != nil { - fmt.Printf("failed to initialize telemetry: %v\n", err) - return nil - } - err = t.Start(context.Background()) + t := telemetry.NewTelemetry(env.HTTPClient(), apiKey, site, "datadog-installer") // No sampling rules for commands + err := t.Start(context.Background()) if err != nil { fmt.Printf("failed to start telemetry: %v\n", err) return nil @@ -239,15 +235,6 @@ func newTelemetry(env *env.Env) *telemetry.Telemetry { return t } -func newSpan(operationName string) (ddtrace.Span, context.Context) { - var spanOptions []ddtrace.StartSpanOption - spanContext, ok := telemetry.SpanContextFromEnv() - if ok { - spanOptions = append(spanOptions, tracer.ChildOf(spanContext)) - } - return tracer.StartSpanFromContext(context.Background(), operationName, spanOptions...) -} - func versionCommand() *cobra.Command { return &cobra.Command{ Use: "version", @@ -287,6 +274,7 @@ func bootstrapCommand() *cobra.Command { } func setupCommand() *cobra.Command { + flavor := "" cmd := &cobra.Command{ Use: "setup", Hidden: true, @@ -294,9 +282,13 @@ func setupCommand() *cobra.Command { RunE: func(_ *cobra.Command, _ []string) (err error) { cmd := newCmd("setup") defer func() { cmd.Stop(err) }() - return setup.Setup(cmd.ctx, cmd.env) + if flavor == "" { + return setup.Agent7InstallScript(cmd.ctx, cmd.env) + } + return setup.Setup(cmd.ctx, cmd.env, flavor) }, } + cmd.Flags().StringVar(&flavor, "flavor", "", "The setup flavor") return cmd } diff --git a/comp/updater/telemetry/telemetryimpl/telemetry.go b/comp/updater/telemetry/telemetryimpl/telemetry.go index cf19e681c5708..d8f961e8398e6 100644 --- a/comp/updater/telemetry/telemetryimpl/telemetry.go +++ b/comp/updater/telemetry/telemetryimpl/telemetry.go @@ -38,16 +38,13 @@ func newTelemetry(deps dependencies) (telemetry.Component, error) { client := &http.Client{ Transport: httputils.CreateHTTPTransport(deps.Config), } - telemetry, err := fleettelemetry.NewTelemetry(client, utils.SanitizeAPIKey(deps.Config.GetString("api_key")), deps.Config.GetString("site"), "datadog-installer-daemon", + telemetry := fleettelemetry.NewTelemetry(client, utils.SanitizeAPIKey(deps.Config.GetString("api_key")), deps.Config.GetString("site"), "datadog-installer-daemon", fleettelemetry.WithSamplingRules( tracer.NameServiceRule("cdn.*", "datadog-installer-daemon", 0.1), tracer.NameServiceRule("*garbage_collect*", "datadog-installer-daemon", 0.05), tracer.NameServiceRule("HTTPClient.*", "datadog-installer-daemon", 0.05), ), ) - if err != nil { - return nil, err - } deps.Lc.Append(fx.Hook{OnStart: telemetry.Start, OnStop: telemetry.Stop}) return telemetry, nil } diff --git a/pkg/fleet/bootstrapper/bootstrapper.go b/pkg/fleet/bootstrapper/bootstrapper.go index e935a6cadc649..fed97034722d1 100644 --- a/pkg/fleet/bootstrapper/bootstrapper.go +++ b/pkg/fleet/bootstrapper/bootstrapper.go @@ -11,9 +11,9 @@ import ( "fmt" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/oci" "github.com/DataDog/datadog-agent/pkg/fleet/internal/bootstrap" "github.com/DataDog/datadog-agent/pkg/fleet/internal/exec" - "github.com/DataDog/datadog-agent/pkg/fleet/internal/oci" "github.com/DataDog/datadog-agent/pkg/fleet/internal/paths" ) diff --git a/pkg/fleet/installer/default_packages.go b/pkg/fleet/installer/default_packages.go index 66c7017f42bac..04b4828e6eeb9 100644 --- a/pkg/fleet/installer/default_packages.go +++ b/pkg/fleet/installer/default_packages.go @@ -11,7 +11,7 @@ import ( "strings" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" - "github.com/DataDog/datadog-agent/pkg/fleet/internal/oci" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/oci" ) // Package represents a package known to the installer diff --git a/pkg/fleet/installer/default_packages_test.go b/pkg/fleet/installer/default_packages_test.go index e17645ec7cefb..f454dbd1ab165 100644 --- a/pkg/fleet/installer/default_packages_test.go +++ b/pkg/fleet/installer/default_packages_test.go @@ -9,7 +9,7 @@ import ( "testing" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" - "github.com/DataDog/datadog-agent/pkg/fleet/internal/oci" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/oci" "github.com/stretchr/testify/assert" ) diff --git a/pkg/fleet/installer/fixtures/README.md b/pkg/fleet/installer/fixtures/README.md new file mode 100644 index 0000000000000..792fb38a15da8 --- /dev/null +++ b/pkg/fleet/installer/fixtures/README.md @@ -0,0 +1,19 @@ +# Datadog Package fixtures + +This directory contains a few examples of Datadog Packages for use in the +updater tests. + +*simple-v1* +```bash +datadog-package create --archive --version "v1" --archive-path "pkg/fleet/installer/fixtures/oci-layout-simple-v1.tar" --package "simple" --configs pkg/fleet/installer/fixtures/simple-v1-config pkg/fleet/installer/fixtures/simple-v1 +``` + +*simple-v2* +```bash +datadog-package create --archive --version "v2" --archive-path "pkg/fleet/installer/fixtures/oci-layout-simple-v2.tar" --package "simple" --configs pkg/fleet/installer/fixtures/simple-v2-config pkg/fleet/installer/fixtures/simple-v2 +``` + +*simple-v1-linux2-amd128* +```bash +datadog-package create --archive --version "v1" --os "linux2" --arch "amd128" --archive-path "pkg/fleet/installer/fixtures/oci-layout-simple-v1-linux2-amd128.tar" --package "simple" pkg/fleet/installer/fixtures/simple-v1 +``` diff --git a/pkg/fleet/internal/fixtures/fs.go b/pkg/fleet/installer/fixtures/fs.go similarity index 100% rename from pkg/fleet/internal/fixtures/fs.go rename to pkg/fleet/installer/fixtures/fs.go diff --git a/pkg/fleet/internal/fixtures/oci-layout-simple-v1-linux2-amd128.tar b/pkg/fleet/installer/fixtures/oci-layout-simple-v1-linux2-amd128.tar similarity index 100% rename from pkg/fleet/internal/fixtures/oci-layout-simple-v1-linux2-amd128.tar rename to pkg/fleet/installer/fixtures/oci-layout-simple-v1-linux2-amd128.tar diff --git a/pkg/fleet/internal/fixtures/oci-layout-simple-v1.tar b/pkg/fleet/installer/fixtures/oci-layout-simple-v1.tar similarity index 100% rename from pkg/fleet/internal/fixtures/oci-layout-simple-v1.tar rename to pkg/fleet/installer/fixtures/oci-layout-simple-v1.tar diff --git a/pkg/fleet/internal/fixtures/oci-layout-simple-v2.tar b/pkg/fleet/installer/fixtures/oci-layout-simple-v2.tar similarity index 100% rename from pkg/fleet/internal/fixtures/oci-layout-simple-v2.tar rename to pkg/fleet/installer/fixtures/oci-layout-simple-v2.tar diff --git a/pkg/fleet/internal/fixtures/server.go b/pkg/fleet/installer/fixtures/server.go similarity index 98% rename from pkg/fleet/internal/fixtures/server.go rename to pkg/fleet/installer/fixtures/server.go index cdb1fb6b7323c..bdeba97c5997e 100644 --- a/pkg/fleet/internal/fixtures/server.go +++ b/pkg/fleet/installer/fixtures/server.go @@ -18,7 +18,7 @@ import ( "strings" "testing" - "github.com/DataDog/datadog-agent/pkg/fleet/internal/tar" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/tar" "github.com/google/go-containerregistry/pkg/name" "github.com/google/go-containerregistry/pkg/registry" "github.com/google/go-containerregistry/pkg/v1/layout" diff --git a/pkg/fleet/internal/fixtures/simple-v1-config/datadog.yaml.example b/pkg/fleet/installer/fixtures/simple-v1-config/datadog.yaml.example similarity index 100% rename from pkg/fleet/internal/fixtures/simple-v1-config/datadog.yaml.example rename to pkg/fleet/installer/fixtures/simple-v1-config/datadog.yaml.example diff --git a/pkg/fleet/internal/fixtures/simple-v1/executable.sh b/pkg/fleet/installer/fixtures/simple-v1/executable.sh similarity index 100% rename from pkg/fleet/internal/fixtures/simple-v1/executable.sh rename to pkg/fleet/installer/fixtures/simple-v1/executable.sh diff --git a/pkg/fleet/internal/fixtures/simple-v1/file.txt b/pkg/fleet/installer/fixtures/simple-v1/file.txt similarity index 100% rename from pkg/fleet/internal/fixtures/simple-v1/file.txt rename to pkg/fleet/installer/fixtures/simple-v1/file.txt diff --git a/pkg/fleet/internal/fixtures/simple-v2-config/datadog.yaml.example b/pkg/fleet/installer/fixtures/simple-v2-config/datadog.yaml.example similarity index 100% rename from pkg/fleet/internal/fixtures/simple-v2-config/datadog.yaml.example rename to pkg/fleet/installer/fixtures/simple-v2-config/datadog.yaml.example diff --git a/pkg/fleet/internal/fixtures/simple-v2/executable-new.sh b/pkg/fleet/installer/fixtures/simple-v2/executable-new.sh similarity index 100% rename from pkg/fleet/internal/fixtures/simple-v2/executable-new.sh rename to pkg/fleet/installer/fixtures/simple-v2/executable-new.sh diff --git a/pkg/fleet/installer/installer.go b/pkg/fleet/installer/installer.go index d7cca9819b4da..e43e0cfaae4d2 100644 --- a/pkg/fleet/installer/installer.go +++ b/pkg/fleet/installer/installer.go @@ -22,10 +22,10 @@ import ( "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" installerErrors "github.com/DataDog/datadog-agent/pkg/fleet/installer/errors" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/oci" "github.com/DataDog/datadog-agent/pkg/fleet/installer/packages" "github.com/DataDog/datadog-agent/pkg/fleet/installer/repository" "github.com/DataDog/datadog-agent/pkg/fleet/internal/db" - "github.com/DataDog/datadog-agent/pkg/fleet/internal/oci" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" diff --git a/pkg/fleet/installer/installer_test.go b/pkg/fleet/installer/installer_test.go index 9ab772b32dc0f..a98deece97ee0 100644 --- a/pkg/fleet/installer/installer_test.go +++ b/pkg/fleet/installer/installer_test.go @@ -17,10 +17,10 @@ import ( "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/fixtures" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/oci" "github.com/DataDog/datadog-agent/pkg/fleet/installer/repository" "github.com/DataDog/datadog-agent/pkg/fleet/internal/db" - "github.com/DataDog/datadog-agent/pkg/fleet/internal/fixtures" - "github.com/DataDog/datadog-agent/pkg/fleet/internal/oci" ) var testCtx = context.TODO() diff --git a/pkg/fleet/internal/oci/download.go b/pkg/fleet/installer/oci/download.go similarity index 99% rename from pkg/fleet/internal/oci/download.go rename to pkg/fleet/installer/oci/download.go index a03f7917d27df..1ddff40e37238 100644 --- a/pkg/fleet/internal/oci/download.go +++ b/pkg/fleet/installer/oci/download.go @@ -35,7 +35,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" installerErrors "github.com/DataDog/datadog-agent/pkg/fleet/installer/errors" - "github.com/DataDog/datadog-agent/pkg/fleet/internal/tar" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/tar" "github.com/DataDog/datadog-agent/pkg/util/log" ) diff --git a/pkg/fleet/internal/oci/download_test.go b/pkg/fleet/installer/oci/download_test.go similarity index 99% rename from pkg/fleet/internal/oci/download_test.go rename to pkg/fleet/installer/oci/download_test.go index e3c9b61916145..44d6462aaf4f9 100644 --- a/pkg/fleet/internal/oci/download_test.go +++ b/pkg/fleet/installer/oci/download_test.go @@ -19,7 +19,7 @@ import ( "golang.org/x/net/http2" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" - "github.com/DataDog/datadog-agent/pkg/fleet/internal/fixtures" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/fixtures" "github.com/google/go-containerregistry/pkg/authn" oci "github.com/google/go-containerregistry/pkg/v1" "github.com/google/go-containerregistry/pkg/v1/google" diff --git a/pkg/fleet/internal/oci/mirror.go b/pkg/fleet/installer/oci/mirror.go similarity index 100% rename from pkg/fleet/internal/oci/mirror.go rename to pkg/fleet/installer/oci/mirror.go diff --git a/pkg/fleet/internal/oci/mirror_test.go b/pkg/fleet/installer/oci/mirror_test.go similarity index 97% rename from pkg/fleet/internal/oci/mirror_test.go rename to pkg/fleet/installer/oci/mirror_test.go index cee744c5fcbff..1a59f9d85a6db 100644 --- a/pkg/fleet/internal/oci/mirror_test.go +++ b/pkg/fleet/installer/oci/mirror_test.go @@ -12,7 +12,7 @@ import ( "strings" "testing" - "github.com/DataDog/datadog-agent/pkg/fleet/internal/fixtures" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/fixtures" "github.com/stretchr/testify/require" ) diff --git a/pkg/fleet/installer/setup/common/config.go b/pkg/fleet/installer/setup/common/config.go index d025311d5e15e..5ec929682808b 100644 --- a/pkg/fleet/installer/setup/common/config.go +++ b/pkg/fleet/installer/setup/common/config.go @@ -15,9 +15,9 @@ import ( "path/filepath" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/oci" "github.com/DataDog/datadog-agent/pkg/fleet/installer/packages" "github.com/DataDog/datadog-agent/pkg/fleet/internal/exec" - "github.com/DataDog/datadog-agent/pkg/fleet/internal/oci" "github.com/DataDog/datadog-agent/pkg/fleet/internal/paths" "gopkg.in/yaml.v2" ) diff --git a/pkg/fleet/installer/setup/setup.go b/pkg/fleet/installer/setup/setup.go index 313b12e2782d5..376abc751eaf5 100644 --- a/pkg/fleet/installer/setup/setup.go +++ b/pkg/fleet/installer/setup/setup.go @@ -9,7 +9,6 @@ package setup import ( "context" "fmt" - "os" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" "github.com/DataDog/datadog-agent/pkg/fleet/installer/setup/djm" @@ -17,16 +16,23 @@ import ( "github.com/DataDog/datadog-agent/pkg/fleet/internal/paths" ) -// Setup is the main function to resolve packages to install and install them -func Setup(ctx context.Context, env *env.Env) error { - if os.Getenv("DD_DJM_FLAVOR") == "databricks" { +const ( + // FlavorDatabricks is the flavor for the Data Jobs Monitoring databricks setup. + FlavorDatabricks = "databricks" +) + +// Setup installs Datadog. +func Setup(ctx context.Context, env *env.Env, flavor string) error { + switch flavor { + case FlavorDatabricks: return djm.SetupDatabricks(ctx, env) + default: + return fmt.Errorf("unknown setup flavor %s", flavor) } - - return defaultSetup(ctx, env) } -func defaultSetup(ctx context.Context, env *env.Env) error { +// Agent7InstallScript is the setup used by the agent7 install script. +func Agent7InstallScript(ctx context.Context, env *env.Env) error { cmd := exec.NewInstallerExec(env, paths.StableInstallerPath) defaultPackages, err := cmd.DefaultPackages(ctx) if err != nil { diff --git a/pkg/fleet/internal/tar/tar.go b/pkg/fleet/installer/tar/tar.go similarity index 100% rename from pkg/fleet/internal/tar/tar.go rename to pkg/fleet/installer/tar/tar.go diff --git a/pkg/fleet/internal/bootstrap/bootstrap_nix.go b/pkg/fleet/internal/bootstrap/bootstrap_nix.go index fbc9817f0783c..cf085c2379e33 100644 --- a/pkg/fleet/internal/bootstrap/bootstrap_nix.go +++ b/pkg/fleet/internal/bootstrap/bootstrap_nix.go @@ -17,8 +17,8 @@ import ( "github.com/DataDog/datadog-agent/pkg/fleet/internal/paths" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/oci" "github.com/DataDog/datadog-agent/pkg/fleet/internal/exec" - "github.com/DataDog/datadog-agent/pkg/fleet/internal/oci" ) func install(ctx context.Context, env *env.Env, url string, experiment bool) error { diff --git a/pkg/fleet/internal/bootstrap/bootstrap_windows.go b/pkg/fleet/internal/bootstrap/bootstrap_windows.go index c3d867f959db2..6990ec77cf042 100644 --- a/pkg/fleet/internal/bootstrap/bootstrap_windows.go +++ b/pkg/fleet/internal/bootstrap/bootstrap_windows.go @@ -18,8 +18,8 @@ import ( "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" "github.com/DataDog/datadog-agent/pkg/fleet/internal/paths" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/oci" iexec "github.com/DataDog/datadog-agent/pkg/fleet/internal/exec" - "github.com/DataDog/datadog-agent/pkg/fleet/internal/oci" ) func install(ctx context.Context, env *env.Env, url string, experiment bool) error { diff --git a/pkg/fleet/internal/fixtures/README.md b/pkg/fleet/internal/fixtures/README.md deleted file mode 100644 index 4aad4996bed08..0000000000000 --- a/pkg/fleet/internal/fixtures/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Datadog Package fixtures - -This directory contains a few examples of Datadog Packages for use in the -updater tests. - -*simple-v1* -```bash -datadog-package create --archive --version "v1" --archive-path "pkg/fleet/internal/fixtures/oci-layout-simple-v1.tar" --package "simple" --configs pkg/fleet/internal/fixtures/simple-v1-config pkg/fleet/internal/fixtures/simple-v1 -``` - -*simple-v2* -```bash -datadog-package create --archive --version "v2" --archive-path "pkg/fleet/internal/fixtures/oci-layout-simple-v2.tar" --package "simple" --configs pkg/fleet/internal/fixtures/simple-v2-config pkg/fleet/internal/fixtures/simple-v2 -``` - -*simple-v1-linux2-amd128* -```bash -datadog-package create --archive --version "v1" --os "linux2" --arch "amd128" --archive-path "pkg/fleet/internal/fixtures/oci-layout-simple-v1-linux2-amd128.tar" --package "simple" pkg/fleet/internal/fixtures/simple-v1 -``` diff --git a/pkg/fleet/telemetry/telemetry.go b/pkg/fleet/telemetry/telemetry.go index 842ea1b678cbd..b63bdfb0de764 100644 --- a/pkg/fleet/telemetry/telemetry.go +++ b/pkg/fleet/telemetry/telemetry.go @@ -59,7 +59,7 @@ type Telemetry struct { type Option func(*Telemetry) // NewTelemetry creates a new telemetry instance -func NewTelemetry(client *http.Client, apiKey string, site string, service string, opts ...Option) (*Telemetry, error) { +func NewTelemetry(client *http.Client, apiKey string, site string, service string, opts ...Option) *Telemetry { endpoint := &traceconfig.Endpoint{ Host: fmt.Sprintf("https://%s.%s", telemetrySubdomain, strings.TrimSpace(site)), APIKey: apiKey, @@ -81,7 +81,7 @@ func NewTelemetry(client *http.Client, apiKey string, site string, service strin opt(t) } t.server.Handler = t.handler() - return t, nil + return t } // Start starts the telemetry @@ -205,8 +205,17 @@ func (addr) String() string { return "local" } -// SpanContextFromEnv injects the traceID and parentID from the environment into the context if available. -func SpanContextFromEnv() (ddtrace.SpanContext, bool) { +// StartSpanFromEnv starts a span using the environment variables to find the parent span. +func StartSpanFromEnv(ctx context.Context, operationName string, spanOptions ...ddtrace.StartSpanOption) (ddtrace.Span, context.Context) { + spanContext, ok := spanContextFromEnv() + if ok { + spanOptions = append([]ddtrace.StartSpanOption{tracer.ChildOf(spanContext)}, spanOptions...) + } + return tracer.StartSpanFromContext(ctx, operationName, spanOptions...) +} + +// spanContextFromEnv injects the traceID and parentID from the environment into the context if available. +func spanContextFromEnv() (ddtrace.SpanContext, bool) { traceID := os.Getenv(EnvTraceID) parentID := os.Getenv(EnvParentID) ctxCarrier := tracer.TextMapCarrier{ diff --git a/tasks/installer.py b/tasks/installer.py index e3554723a5f41..7429a1eaf3148 100644 --- a/tasks/installer.py +++ b/tasks/installer.py @@ -16,8 +16,9 @@ DIR_BIN = os.path.join(".", "bin", "installer") INSTALLER_BIN = os.path.join(DIR_BIN, bin_name("installer")) DOWNLOADER_BIN = os.path.join(DIR_BIN, bin_name("downloader")) -INSTALL_SCRIPT = os.path.join(DIR_BIN, "install.sh") INSTALL_SCRIPT_TEMPLATE = os.path.join("pkg", "fleet", "installer", "setup", "install.sh") +DOWNLOADER_MAIN_PACKAGE = "cmd/installer-downloader" + MAJOR_VERSION = '7' @@ -76,14 +77,18 @@ def build( @task def build_downloader( ctx, + flavor, + version, os="linux", arch="amd64", ): ''' Builds the installer downloader binary. ''' + version_flag = f'-X main.Version={version}' + flavor_flag = f'-X main.Flavor={flavor}' ctx.run( - f'go build -ldflags="-s -w" -o {DOWNLOADER_BIN} {REPO_PATH}/cmd/installer-downloader', + f'go build -ldflags="-s -w {version_flag} {flavor_flag}" -o {DOWNLOADER_BIN} {REPO_PATH}/{DOWNLOADER_MAIN_PACKAGE}', env={'GOOS': os, 'GOARCH': arch, 'CGO_ENABLED': '0'}, ) @@ -91,6 +96,8 @@ def build_downloader( @task def build_linux_script( ctx, + flavor, + version, ): ''' Builds the linux script that is used to install the agent on linux. @@ -101,7 +108,7 @@ def build_linux_script( archs = ['amd64', 'arm64'] for arch in archs: - build_downloader(ctx, os='linux', arch=arch) + build_downloader(ctx, flavor=flavor, version=version, os='linux', arch=arch) with open(DOWNLOADER_BIN, 'rb') as f: encoded_bin = base64.encodebytes(f.read()).decode('utf-8') install_script = install_script.replace(f'DOWNLOADER_BIN_{arch.upper()}', encoded_bin) @@ -109,7 +116,7 @@ def build_linux_script( commit_sha = ctx.run('git rev-parse HEAD', hide=True).stdout.strip() install_script = install_script.replace('INSTALLER_COMMIT', commit_sha) - with open(INSTALL_SCRIPT, 'w') as f: + with open(os.path.join(DIR_BIN, f'install-{flavor}.sh'), 'w') as f: f.write(install_script) From 4f9e172fbeab787906d974ba7855222953a0ea0d Mon Sep 17 00:00:00 2001 From: Usama Saqib Date: Mon, 9 Dec 2024 15:07:57 +0100 Subject: [PATCH 055/303] Add rocky 9.4 to KMT platforms (#31880) --- test/new-e2e/system-probe/config/platforms.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/new-e2e/system-probe/config/platforms.json b/test/new-e2e/system-probe/config/platforms.json index 9249144d9ded9..9229b46f9476e 100644 --- a/test/new-e2e/system-probe/config/platforms.json +++ b/test/new-e2e/system-probe/config/platforms.json @@ -257,6 +257,14 @@ "alt_version_names": [ "oracular" ] + }, + "rocky_9.4": { + "os_name": "Rocky Linux", + "os_id": "rocky", + "kernel": "5.14.0-503.15.1.el9_5", + "os_version": "9.4", + "image": "rocky-9.4-x86_64.qcow2.xz", + "image_version": "20241209_f6a14db0" } }, "arm64": { @@ -486,6 +494,14 @@ "alt_version_names": [ "oracular" ] + }, + "rocky_9.4": { + "os_name": "Rocky Linux", + "os_id": "rocky", + "kernel": "5.14.0-503.15.1.el9_5", + "os_version": "9.4", + "image": "rocky-9.4-arm64.qcow2.xz", + "image_version": "20241209_f6a14db0" } } } \ No newline at end of file From 495529f72483db90db16d1170240b3c8fb64a941 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Mathieu?= Date: Mon, 9 Dec 2024 15:49:25 +0100 Subject: [PATCH 056/303] logs/sds: fallback on default excluded keywords if no included keywords available. (#29981) Co-authored-by: jszwedko --- pkg/logs/sds/scanner.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/pkg/logs/sds/scanner.go b/pkg/logs/sds/scanner.go index b0caf689efbfd..9b86f478321c0 100644 --- a/pkg/logs/sds/scanner.go +++ b/pkg/logs/sds/scanner.go @@ -313,13 +313,19 @@ func interpretRCRule(userRule RuleConfig, standardRule StandardRuleConfig, defau } // If the "Use recommended keywords" checkbox has been checked, we use the default - // included keywords available in the rule (curated by Datadog). + // included keywords available in the rule (curated by Datadog), if not included keywords + // exist, fallback on using the default excluded keywords. // Otherwise: // If some included keywords have been manually filled by the user, we use them // Else we start using the default excluded keywords. if userRule.IncludedKeywords.UseRecommendedKeywords { - // default included keywords - extraConfig.ProximityKeywords = sds.CreateProximityKeywordsConfig(defaults.IncludedKeywordsCharCount, defToUse.DefaultIncludedKeywords, nil) + // default included keywords if any + if len(defToUse.DefaultIncludedKeywords) > 0 { + extraConfig.ProximityKeywords = sds.CreateProximityKeywordsConfig(defaults.IncludedKeywordsCharCount, defToUse.DefaultIncludedKeywords, nil) + } else if len(defaults.ExcludedKeywords) > 0 && defaults.ExcludedKeywordsCharCount > 0 { + // otherwise fallback on default excluded keywords + extraConfig.ProximityKeywords = sds.CreateProximityKeywordsConfig(defaults.ExcludedKeywordsCharCount, nil, defaults.ExcludedKeywords) + } } else { if len(userRule.IncludedKeywords.Keywords) > 0 && userRule.IncludedKeywords.CharacterCount > 0 { // user provided included keywords From 40a840dfadd6a4744da510792af666ec36769c6d Mon Sep 17 00:00:00 2001 From: Branden Clark Date: Mon, 9 Dec 2024 10:10:15 -0500 Subject: [PATCH 057/303] Add initial Windows E2E FIPS package test/support (#31771) --- .gitlab/e2e_install_packages/windows.yml | 46 ++++--- .gitlab/e2e_testing_deploy/e2e_deploy.yml | 21 +++ .../windows/base_agent_installer_suite.go | 5 + .../tests/windows/common/agent/package.go | 127 ++++++++++++++---- test/new-e2e/tests/windows/common/policy.go | 46 +++++++ test/new-e2e/tests/windows/common/registry.go | 17 +++ .../tests/windows/fips-test/fips_test.go | 123 +++++++++++++++++ .../tests/windows/install-test/npm_test.go | 2 +- .../windows/install-test/upgrade_test.go | 6 +- 9 files changed, 346 insertions(+), 47 deletions(-) create mode 100644 test/new-e2e/tests/windows/common/policy.go create mode 100644 test/new-e2e/tests/windows/fips-test/fips_test.go diff --git a/.gitlab/e2e_install_packages/windows.yml b/.gitlab/e2e_install_packages/windows.yml index f4575d0159f8c..86958e1a9c9ad 100644 --- a/.gitlab/e2e_install_packages/windows.yml +++ b/.gitlab/e2e_install_packages/windows.yml @@ -1,10 +1,9 @@ # NOTE: If a new job is added, be sure to upate .gitlab/e2e_test_junit_upload.yml -.new-e2e_windows_msi: +.new-e2e_with_version: variables: - TARGETS: ./tests/windows/install-test + WINDOWS_AGENT_ARCH: "x86_64" TEAM: windows-agent - EXTRA_PARAMS: --run "$E2E_MSI_TEST$" extends: - .new_e2e_template before_script: @@ -17,19 +16,18 @@ - export LAST_STABLE_VERSION=$(invoke release.get-release-json-value "last_stable::7" --no-worktree) - !reference [.new_e2e_template, script] +.new-e2e_windows_msi: + variables: + TARGETS: ./tests/windows/install-test + EXTRA_PARAMS: --run "$E2E_MSI_TEST$" + extends: + - .new-e2e_with_version + .new-e2e_windows_domain_test: variables: TARGETS: ./tests/windows/domain-test - TEAM: windows-agent - before_script: - # WINDOWS_AGENT_VERSION is used to verify the installed agent version - # Must run before new_e2e_template changes the aws profile - - WINDOWS_AGENT_VERSION=$(invoke agent.version) || exit $?; export WINDOWS_AGENT_VERSION - - !reference [.new_e2e_template, before_script] - script: - # LAST_STABLE_VERSION is used for upgrade test - - export LAST_STABLE_VERSION=$(invoke release.get-release-json-value "last_stable::7" --no-worktree) - - !reference [.new_e2e_template, script] + extends: + - .new-e2e_with_version .new-e2e_windows_installer_v7_tests: parallel: @@ -72,8 +70,6 @@ new-e2e_windows_powershell_module_test: # Agent 7 .new-e2e_windows_a7_x86_64: - variables: - WINDOWS_AGENT_ARCH: "x86_64" extends: - .new-e2e_windows_msi - .new-e2e_agent_a7 @@ -95,10 +91,7 @@ new-e2e-windows-agent-msi-windows-server-a7-x86_64: new-e2e-windows-agent-domain-tests-a7-x86_64: stage: e2e_install_packages - variables: - WINDOWS_AGENT_ARCH: "x86_64" extends: - - .new_e2e_template - .new-e2e_windows_domain_test - .new-e2e_agent_a7 needs: @@ -110,6 +103,23 @@ new-e2e-windows-agent-domain-tests-a7-x86_64: - !reference [.manual] timeout: 1h15m +new-e2e-windows-agent-a7-x86_64-fips: + stage: e2e_install_packages + variables: + WINDOWS_AGENT_FLAVOR: "fips" + TARGETS: ./tests/windows/fips-test + extends: + - .new-e2e_with_version + - .new-e2e_agent_a7 + needs: + - !reference [.needs_new_e2e_template] + - deploy_windows_testing-a7-fips + rules: + - !reference [.on_deploy] + - !reference [.on_e2e_or_windows_installer_changes] + - !reference [.manual] + timeout: 1h15m + ## single test for PRs ## skipped if the full tests are running new-e2e-windows-agent-msi-upgrade-windows-server-a7-x86_64: diff --git a/.gitlab/e2e_testing_deploy/e2e_deploy.yml b/.gitlab/e2e_testing_deploy/e2e_deploy.yml index 45be38a825a5d..d47fcb6748da3 100644 --- a/.gitlab/e2e_testing_deploy/e2e_deploy.yml +++ b/.gitlab/e2e_testing_deploy/e2e_deploy.yml @@ -192,3 +192,24 @@ deploy_windows_testing-a7: $OMNIBUS_PACKAGE_DIR s3://$WIN_S3_BUCKET/$WINDOWS_TESTING_S3_BUCKET_A7 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers full=id=3a6e02b08553fd157ae3fb918945dd1eaae5a1aa818940381ef07a430cf25732 + +deploy_windows_testing-a7-fips: + rules: + - !reference [.except_no_tests_no_deploy] + - !reference [.except_mergequeue] + - when: on_success + stage: e2e_deploy + image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES + tags: ["arch:amd64"] + needs: + ["lint_windows-x64", "windows_msi_and_bosh_zip_x64-a7-fips"] + before_script: + - ls $OMNIBUS_PACKAGE_DIR + script: + - $S3_CP_CMD + --recursive + --exclude "*" + --include "datadog-fips-agent-7.*.msi" + $OMNIBUS_PACKAGE_DIR s3://$WIN_S3_BUCKET/$WINDOWS_TESTING_S3_BUCKET_A7 + --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers + full=id=3a6e02b08553fd157ae3fb918945dd1eaae5a1aa818940381ef07a430cf25732 diff --git a/test/new-e2e/tests/windows/base_agent_installer_suite.go b/test/new-e2e/tests/windows/base_agent_installer_suite.go index 5f2f6809d33b0..b73ba6d22ace5 100644 --- a/test/new-e2e/tests/windows/base_agent_installer_suite.go +++ b/test/new-e2e/tests/windows/base_agent_installer_suite.go @@ -56,6 +56,11 @@ func (b *BaseAgentInstallerSuite[Env]) SetupSuite() { b.BaseSuite.SetupSuite() var err error + b.OutputDir, err = b.CreateTestOutputDir() + if err != nil { + b.T().Fatalf("should get output dir") + } + b.AgentPackage, err = windowsAgent.GetPackageFromEnv() if err != nil { b.T().Fatalf("failed to get MSI URL from env: %v", err) diff --git a/test/new-e2e/tests/windows/common/agent/package.go b/test/new-e2e/tests/windows/common/agent/package.go index 8e3f867f41a80..5fd6497c2f0b1 100644 --- a/test/new-e2e/tests/windows/common/agent/package.go +++ b/test/new-e2e/tests/windows/common/agent/package.go @@ -18,14 +18,19 @@ import ( ) const ( - defaultMajorVersion = "7" - defaultArch = "x86_64" - agentInstallerListProductName = "datadog-agent" - agentS3BucketRelease = "ddagent-windows-stable" - betaChannel = "beta" - betaURL = "https://s3.amazonaws.com/dd-agent-mstesting/builds/beta/installers_v2.json" - stableChannel = "stable" - stableURL = "https://ddagent-windows-stable.s3.amazonaws.com/installers_v2.json" + defaultMajorVersion = "7" + defaultArch = "x86_64" + defaultFlavor = "base" + agentS3BucketRelease = "ddagent-windows-stable" + betaChannel = "beta" + betaURL = "https://s3.amazonaws.com/dd-agent-mstesting/builds/beta/installers_v2.json" + stableChannel = "stable" + stableURL = "https://ddagent-windows-stable.s3.amazonaws.com/installers_v2.json" +) + +// Environment variable constants +const ( + PackageFlavorEnvVar = "WINDOWS_AGENT_FLAVOR" ) // Package contains identifying information about an Agent MSI package. @@ -40,6 +45,8 @@ type Package struct { Arch string // URL is the URL the MSI can be downloaded from URL string + // Flavor is the Agent Flavor (e.g. `base`, `fips`, `iot``) + Flavor string } // AgentVersion returns a string containing version number and the pre only, e.g. `0.0.0-beta.1` @@ -50,33 +57,61 @@ func (p *Package) AgentVersion() string { } // GetBetaMSIURL returns the URL for the beta agent MSI +// // majorVersion: 6, 7 // arch: x86_64 -func GetBetaMSIURL(version string, arch string) (string, error) { - return GetMSIURL(betaChannel, version, arch) +// flavor: base, fips +func GetBetaMSIURL(version string, arch string, flavor string) (string, error) { + return GetMSIURL(betaChannel, version, arch, flavor) } // GetStableMSIURL returns the URL for the stable agent MSI +// // majorVersion: 6, 7 // arch: x86_64 -func GetStableMSIURL(version string, arch string) (string, error) { - return GetMSIURL(stableChannel, version, arch) +// flavor: base, fips +func GetStableMSIURL(version string, arch string, flavor string) (string, error) { + return GetMSIURL(stableChannel, version, arch, flavor) } // GetMSIURL returns the URL for the agent MSI +// // channel: beta, stable // majorVersion: 6, 7 // arch: x86_64 -func GetMSIURL(channel string, version string, arch string) (string, error) { +// flavor: base, fips +func GetMSIURL(channel string, version string, arch string, flavor string) (string, error) { channelURL, err := GetChannelURL(channel) if err != nil { return "", err } - return installers.GetProductURL(channelURL, agentInstallerListProductName, version, arch) + productName, err := GetFlavorProductName(flavor) + if err != nil { + return "", err + } + + return installers.GetProductURL(channelURL, productName, version, arch) +} + +// GetFlavorProductName returns the product name for the flavor +// +// flavor: base, fips +func GetFlavorProductName(flavor string) (string, error) { + switch flavor { + case "": + return "datadog-agent", nil + case "base": + return "datadog-agent", nil + case "fips": + return "datadog-fips-agent", nil + default: + return "", fmt.Errorf("unknown flavor %v", flavor) + } } // GetChannelURL returns the URL for the channel name +// // channel: beta, stable func GetChannelURL(channel string) (string, error) { if strings.EqualFold(channel, betaChannel) { @@ -89,21 +124,32 @@ func GetChannelURL(channel string) (string, error) { } // GetLatestMSIURL returns the URL for the latest agent MSI +// // majorVersion: 6, 7 // arch: x86_64 -func GetLatestMSIURL(majorVersion string, arch string) string { +func GetLatestMSIURL(majorVersion string, arch string, flavor string) (string, error) { // why do we use amd64 for the latest URL and x86_64 everywhere else? if arch == "x86_64" { arch = "amd64" } - return fmt.Sprintf(`https://s3.amazonaws.com/`+agentS3BucketRelease+`/datadog-agent-%s-latest.%s.msi`, - majorVersion, arch) + productName, err := GetFlavorProductName(flavor) + if err != nil { + return "", err + } + return fmt.Sprintf(`https://s3.amazonaws.com/`+agentS3BucketRelease+`/%s-%s-latest.%s.msi`, + productName, majorVersion, arch), nil } // GetPipelineMSIURL returns the URL for the agent MSI built by the pipeline +// // majorVersion: 6, 7 // arch: x86_64 -func GetPipelineMSIURL(pipelineID string, majorVersion string, arch string) (string, error) { +// flavor: base, fips +func GetPipelineMSIURL(pipelineID string, majorVersion string, arch string, flavor string) (string, error) { + productName, err := GetFlavorProductName(flavor) + if err != nil { + return "", err + } // Manual URL example: https://s3.amazonaws.com/dd-agent-mstesting?prefix=pipelines/A7/25309493 fmt.Printf("Looking for agent MSI for pipeline majorVersion %v %v\n", majorVersion, pipelineID) artifactURL, err := pipeline.GetPipelineArtifact(pipelineID, pipeline.AgentS3BucketTesting, majorVersion, func(artifact string) bool { @@ -114,9 +160,10 @@ func GetPipelineMSIURL(pipelineID string, majorVersion string, arch string) (str // TODO: CIREL-1970 // Example: datadog-agent-7.52.0-1-x86_64.msi // Example: datadog-agent-7.53.0-devel.git.512.41b1225.pipeline.30353507-1-x86_64.msi - if !strings.Contains(artifact, fmt.Sprintf("datadog-agent-%s", majorVersion)) { + if !strings.Contains(artifact, fmt.Sprintf("%s-%s", productName, majorVersion)) { return false } + // Not all pipelines include the pipeline ID in the artifact name, but if it is there then match against it if strings.Contains(artifact, "pipeline.") && !strings.Contains(artifact, fmt.Sprintf("pipeline.%s", pipelineID)) { @@ -129,7 +176,7 @@ func GetPipelineMSIURL(pipelineID string, majorVersion string, arch string) (str return true }) if err != nil { - return "", fmt.Errorf("no agent MSI found for pipeline %v and arch %v: %w", pipelineID, arch, err) + return "", fmt.Errorf("no agent MSI found for pipeline %v arch %v flavor: %v: %w", pipelineID, arch, flavor, err) } return artifactURL, nil } @@ -148,6 +195,20 @@ func LookupChannelFromEnv() (string, bool) { return stableChannel, false } +// LookupFlavorFromEnv looks at environment variables to select the agent flavor, if the value +// is found it is returned along with true, otherwise an empty string and false are returned. +// +// WINDOWS_AGENT_FLAVOR: base, fips +// +// Default Flavor: base +func LookupFlavorFromEnv() (string, bool) { + flavor := os.Getenv(PackageFlavorEnvVar) + if flavor != "" { + return flavor, true + } + return defaultFlavor, false +} + // LookupVersionFromEnv looks at environment variabes to select the agent version, if the value // is found it is returned along with true, otherwise a default value and false are returned. // @@ -217,7 +278,7 @@ func LookupChannelURLFromEnv() (string, bool) { // // The returned Package contains the MSI URL and other identifying information. // Some Package fields will be populated but may not be related to the returned URL. -// For example, if a URL is provided directly, the Channel, Version, and Arch fields +// For example, if a URL is provided directly, the Channel, Version, Arch, and Flavor fields // have no effect on the returned URL. They are returned anyway so they can be used for // other purposes, such as logging, stack name, instance options, test assertions, etc. // @@ -235,6 +296,8 @@ func LookupChannelURLFromEnv() (string, bool) { // // WINDOWS_AGENT_ARCH: The arch of the agent, x86_64 // +// WINDOWS_AGENT_FLAVOR: The flavor of the agent, base or fips +// // If a channel is not provided and the version contains `-rc.`, the beta channel is used. // // See other Lookup*FromEnv functions for more options and details. @@ -245,6 +308,7 @@ func GetPackageFromEnv() (*Package, error) { channel, channelFound := LookupChannelFromEnv() version, _ := LookupVersionFromEnv() arch, _ := LookupArchFromEnv() + flavor, _ := LookupFlavorFromEnv() pipelineID, pipelineIDFound := os.LookupEnv("E2E_PIPELINE_ID") majorVersion := strings.Split(version, ".")[0] @@ -267,12 +331,13 @@ func GetPackageFromEnv() (*Package, error) { Version: version, Arch: arch, URL: url, + Flavor: flavor, }, nil } // check if we should use the URL from a specific CI pipeline if pipelineIDFound { - url, err := GetPipelineMSIURL(pipelineID, majorVersion, arch) + url, err := GetPipelineMSIURL(pipelineID, majorVersion, arch, flavor) if err != nil { return nil, err } @@ -281,6 +346,7 @@ func GetPackageFromEnv() (*Package, error) { Version: version, Arch: arch, URL: url, + Flavor: flavor, }, nil } @@ -295,7 +361,11 @@ func GetPackageFromEnv() (*Package, error) { } } // Get MSI URL - url, err := installers.GetProductURL(channelURL, agentInstallerListProductName, version, arch) + productName, err := GetFlavorProductName(flavor) + if err != nil { + return nil, err + } + url, err := installers.GetProductURL(channelURL, productName, version, arch) if err != nil { return nil, err } @@ -304,16 +374,21 @@ func GetPackageFromEnv() (*Package, error) { Version: version, Arch: arch, URL: url, + Flavor: flavor, }, nil } // Default to latest stable - url = GetLatestMSIURL(majorVersion, arch) + url, err = GetLatestMSIURL(majorVersion, arch, flavor) + if err != nil { + return nil, err + } return &Package{ Channel: stableChannel, Version: version, Arch: arch, URL: url, + Flavor: flavor, }, nil } @@ -329,6 +404,7 @@ func GetPackageFromEnv() (*Package, error) { // invoke release.get-release-json-value "last_stable::$AGENT_MAJOR_VERSION" func GetLastStablePackageFromEnv() (*Package, error) { arch, _ := LookupArchFromEnv() + flavor, _ := LookupFlavorFromEnv() ver := os.Getenv("LAST_STABLE_VERSION") if ver == "" { return nil, fmt.Errorf("LAST_STABLE_VERSION is not set") @@ -341,7 +417,7 @@ func GetLastStablePackageFromEnv() (*Package, error) { url := os.Getenv("LAST_STABLE_WINDOWS_AGENT_MSI_URL") if url == "" { // Manual URL not provided, lookup the URL using the version - url, err = GetStableMSIURL(ver, arch) + url, err = GetStableMSIURL(ver, arch, flavor) if err != nil { return nil, err } @@ -352,5 +428,6 @@ func GetLastStablePackageFromEnv() (*Package, error) { Version: ver, Arch: arch, URL: url, + Flavor: flavor, }, nil } diff --git a/test/new-e2e/tests/windows/common/policy.go b/test/new-e2e/tests/windows/common/policy.go new file mode 100644 index 0000000000000..df50d64375790 --- /dev/null +++ b/test/new-e2e/tests/windows/common/policy.go @@ -0,0 +1,46 @@ +// 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 2023-present Datadog, Inc. + +package common + +import ( + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" +) + +// setFIPSAlgorithmPolicy configures local security policy to enable or disable FIPS mode. +// +// The setting is applied system-wide and does NOT require a reboot. +// This setting may be overridden by group policy. +// +// https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/system-cryptography-use-fips-compliant-algorithms-for-encryption-hashing-and-signing +func setFIPSAlgorithmPolicy(host *components.RemoteHost, enabled bool) error { + path := `HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy` + valueName := "Enabled" + value := 0 + if enabled { + value = 1 + } + return SetRegistryDWORDValue(host, path, valueName, value) +} + +// EnableFIPSMode enables FIPS mode on the host. +// +// The setting is applied system-wide and does NOT require a reboot. +// This setting may be overridden by group policy. +// +// https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/system-cryptography-use-fips-compliant-algorithms-for-encryption-hashing-and-signing +func EnableFIPSMode(host *components.RemoteHost) error { + return setFIPSAlgorithmPolicy(host, true) +} + +// DisableFIPSMode disables FIPS mode on the host. +// +// The setting is applied system-wide and does NOT require a reboot. +// This setting may be overridden by group policy. +// +// https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/system-cryptography-use-fips-compliant-algorithms-for-encryption-hashing-and-signing +func DisableFIPSMode(host *components.RemoteHost) error { + return setFIPSAlgorithmPolicy(host, false) +} diff --git a/test/new-e2e/tests/windows/common/registry.go b/test/new-e2e/tests/windows/common/registry.go index 19c44f530f02d..0957c3510251f 100644 --- a/test/new-e2e/tests/windows/common/registry.go +++ b/test/new-e2e/tests/windows/common/registry.go @@ -38,3 +38,20 @@ func DeleteRegistryKey(host *components.RemoteHost, path string) error { _, err := host.Execute(cmd) return err } + +// SetRegistryDWORDValue sets, creating if necessary, a DWORD value at the specified path +func SetRegistryDWORDValue(host *components.RemoteHost, path string, name string, value int) error { + return SetTypedRegistryValue(host, path, name, fmt.Sprintf("%d", value), "DWORD") +} + +// SetTypedRegistryValue sets, creating if necessary, the value at the specified path with the specified type +// +// https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-itemproperty?view=powershell-7.4#-type +func SetTypedRegistryValue(host *components.RemoteHost, path string, name string, value string, typeName string) error { + cmd := fmt.Sprintf("New-Item -Path '%s' -Force; Set-ItemProperty -Path '%s' -Name '%s' -Value '%s' -Type '%s'", path, path, name, value, typeName) + _, err := host.Execute(cmd) + if err != nil { + return err + } + return nil +} diff --git a/test/new-e2e/tests/windows/fips-test/fips_test.go b/test/new-e2e/tests/windows/fips-test/fips_test.go new file mode 100644 index 0000000000000..e46be55c5a941 --- /dev/null +++ b/test/new-e2e/tests/windows/fips-test/fips_test.go @@ -0,0 +1,123 @@ +// 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 fipstest +package fipstest + +import ( + "fmt" + "os" + "path/filepath" + + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" + awsHostWindows "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/host/windows" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/utils/e2e/client" + "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows" + windowsCommon "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows/common" + windowsAgent "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows/common/agent" + + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +type fipsAgentSuite struct { + windows.BaseAgentInstallerSuite[environments.WindowsHost] + + installPath string +} + +func TestFIPSAgent(t *testing.T) { + opts := []e2e.SuiteOption{e2e.WithProvisioner(awsHostWindows.ProvisionerNoAgentNoFakeIntake())} + s := &fipsAgentSuite{} + e2e.Run(t, s, opts...) +} + +func (s *fipsAgentSuite) SetupSuite() { + // Default to using FIPS Agent package + if _, set := windowsAgent.LookupFlavorFromEnv(); !set { + os.Setenv(windowsAgent.PackageFlavorEnvVar, "fips") + } + + s.BaseAgentInstallerSuite.SetupSuite() + host := s.Env().RemoteHost + var err error + + // Enable FIPS mode before installing the Agent to make sure that works + err = windowsCommon.EnableFIPSMode(host) + require.NoError(s.T(), err) + + // Install Agent (With FIPS mode enabled) + _, err = s.InstallAgent(host, windowsAgent.WithPackage(s.AgentPackage)) + require.NoError(s.T(), err) + + s.installPath, err = windowsAgent.GetInstallPathFromRegistry(host) + require.NoError(s.T(), err) +} + +func (s *fipsAgentSuite) TestWithSystemFIPSDisabled() { + host := s.Env().RemoteHost + windowsCommon.DisableFIPSMode(host) + + s.Run("version command", func() { + s.Run("gofips enabled", func() { + _, err := s.execAgentCommandWithFIPS("version") + assertErrorContainsFIPSPanic(s.T(), err, "agent should panic when GOFIPS=1 but system FIPS is disabled") + }) + + s.Run("gofips disabled", func() { + _, err := s.execAgentCommand("version") + require.NoError(s.T(), err) + }) + }) +} + +func (s *fipsAgentSuite) TestWithSystemFIPSEnabled() { + host := s.Env().RemoteHost + windowsCommon.EnableFIPSMode(host) + + s.Run("version command", func() { + s.Run("gofips enabled", func() { + _, err := s.execAgentCommandWithFIPS("version") + require.NoError(s.T(), err) + }) + + s.Run("gofips disabled", func() { + _, err := s.execAgentCommand("version") + require.NoError(s.T(), err) + }) + }) +} + +func (s *fipsAgentSuite) execAgentCommand(command string, options ...client.ExecuteOption) (string, error) { + host := s.Env().RemoteHost + + require.NotEmpty(s.T(), s.installPath) + agentPath := filepath.Join(s.installPath, "bin", "agent.exe") + + cmd := fmt.Sprintf(`& "%s" %s`, agentPath, command) + return host.Execute(cmd, options...) +} + +func (s *fipsAgentSuite) execAgentCommandWithFIPS(command string) (string, error) { + // There isn't support for appending env vars to client.ExecuteOption, so + // this function doesn't accept any other options. + + // Setting GOFIPS=1 causes the Windows FIPS Agent to panic if the system is not in FIPS mode. + // This setting does NOT control whether the FIPS Agent uses FIPS-compliant crypto libraries, + // the System-level setting determines that. + // https://github.com/microsoft/go/tree/microsoft/main/eng/doc/fips#windows-fips-mode-cng + vars := client.EnvVar{ + "GOFIPS": "1", + } + + return s.execAgentCommand(command, client.WithEnvVariables(vars)) +} + +func assertErrorContainsFIPSPanic(t *testing.T, err error, args ...interface{}) bool { + return assert.ErrorContains(t, err, "panic: cngcrypto: not in FIPS mode", args...) +} diff --git a/test/new-e2e/tests/windows/install-test/npm_test.go b/test/new-e2e/tests/windows/install-test/npm_test.go index cefec1f51b626..ecd8ffcd56129 100644 --- a/test/new-e2e/tests/windows/install-test/npm_test.go +++ b/test/new-e2e/tests/windows/install-test/npm_test.go @@ -149,7 +149,7 @@ func (s *testNPMInstallSuite) TearDownSuite() { func (s *testNPMInstallSuite) installPreviousAgentVersion(vm *components.RemoteHost, options ...windowsAgent.InstallAgentOption) { if s.url == "" { - url, err := windowsAgent.GetStableMSIURL(s.previousVersion, "x86_64") + url, err := windowsAgent.GetStableMSIURL(s.previousVersion, "x86_64", "") s.Require().NoError(err, "should get MSI URL for version %s", s.previousVersion) s.url = url } diff --git a/test/new-e2e/tests/windows/install-test/upgrade_test.go b/test/new-e2e/tests/windows/install-test/upgrade_test.go index 851b6a739f376..4f274dbccea1f 100644 --- a/test/new-e2e/tests/windows/install-test/upgrade_test.go +++ b/test/new-e2e/tests/windows/install-test/upgrade_test.go @@ -142,7 +142,7 @@ func (s *testUpgradeRollbackWithoutCWSSuite) SetupSuite() { Version: fmt.Sprintf("%s.51.0-1", majorVersion), Arch: "x86_64", } - s.previousAgentPackage.URL, err = windowsAgent.GetStableMSIURL(s.previousAgentPackage.Version, s.previousAgentPackage.Arch) + s.previousAgentPackage.URL, err = windowsAgent.GetStableMSIURL(s.previousAgentPackage.Version, s.previousAgentPackage.Arch, "") s.Require().NoError(err, "should get stable agent package URL") } @@ -282,7 +282,7 @@ func TestUpgradeFromV5(t *testing.T) { s.agent5Package = &windowsAgent.Package{ Version: "5.32.8-1", } - s.agent5Package.URL, err = windowsAgent.GetStableMSIURL(s.agent5Package.Version, "x86_64") + s.agent5Package.URL, err = windowsAgent.GetStableMSIURL(s.agent5Package.Version, "x86_64", "") require.NoError(t, err) run(t, s) } @@ -375,7 +375,7 @@ func TestUpgradeFromV6(t *testing.T) { Version: "6.53.0-1", Arch: "x86_64", } - s.previousAgentPackge.URL, err = windowsAgent.GetStableMSIURL(s.previousAgentPackge.Version, s.previousAgentPackge.Arch) + s.previousAgentPackge.URL, err = windowsAgent.GetStableMSIURL(s.previousAgentPackge.Version, s.previousAgentPackge.Arch, "") require.NoError(t, err) run(t, s) } From 86aa47af3eb8121086b6b41b029105c9d4d15daf Mon Sep 17 00:00:00 2001 From: Andrew Glaude Date: Mon, 9 Dec 2024 11:19:08 -0500 Subject: [PATCH 058/303] Only start telemetryForwarder when we start the receiver (APMSP-1633) (#31813) --- pkg/trace/api/api.go | 2 ++ pkg/trace/api/telemetry.go | 1 - pkg/trace/api/telemetry_test.go | 12 ++++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/pkg/trace/api/api.go b/pkg/trace/api/api.go index 9ad40058faf82..c74ecbb137fb9 100644 --- a/pkg/trace/api/api.go +++ b/pkg/trace/api/api.go @@ -235,6 +235,8 @@ func getConfiguredEVPRequestTimeoutDuration(conf *config.AgentConfig) time.Durat // Start starts doing the HTTP server and is ready to receive traces func (r *HTTPReceiver) Start() { + r.telemetryForwarder.start() + if !r.conf.ReceiverEnabled { log.Debug("HTTP Server is off: HTTPReceiver is disabled.") return diff --git a/pkg/trace/api/telemetry.go b/pkg/trace/api/telemetry.go index a45ac4105042f..5408f3db40e1c 100644 --- a/pkg/trace/api/telemetry.go +++ b/pkg/trace/api/telemetry.go @@ -123,7 +123,6 @@ func NewTelemetryForwarder(conf *config.AgentConfig, containerIDProvider IDProvi statsd: statsd, logger: log.NewThrottled(5, 10*time.Second), } - forwarder.start() return forwarder } diff --git a/pkg/trace/api/telemetry_test.go b/pkg/trace/api/telemetry_test.go index 3608436d83aae..b9a0930507687 100644 --- a/pkg/trace/api/telemetry_test.go +++ b/pkg/trace/api/telemetry_test.go @@ -99,6 +99,7 @@ func TestTelemetryBasicProxyRequest(t *testing.T) { return []string{"key:test\nvalue"}, nil } recv := newTestReceiverFromConfig(cfg) + recv.telemetryForwarder.start() recv.telemetryForwarder.containerIDProvider = getTestContainerIDProvider() assertSendRequest(t, recv, endpointCalled) @@ -121,6 +122,7 @@ func TestGoogleCloudRun(t *testing.T) { cfg.GlobalTags["service_name"] = "test_service" cfg.GlobalTags["origin"] = "cloudrun" recv := newTestReceiverFromConfig(cfg) + recv.telemetryForwarder.start() assertSendRequest(t, recv, endpointCalled) } @@ -145,6 +147,7 @@ func TestAzureAppService(t *testing.T) { cfg.GlobalTags["app_name"] = "test_app" cfg.GlobalTags["origin"] = "appservice" recv := newTestReceiverFromConfig(cfg) + recv.telemetryForwarder.start() assertSendRequest(t, recv, endpointCalled) } @@ -169,6 +172,7 @@ func TestAzureContainerApp(t *testing.T) { cfg.GlobalTags["app_name"] = "test_app" cfg.GlobalTags["origin"] = "containerapp" recv := newTestReceiverFromConfig(cfg) + recv.telemetryForwarder.start() assertSendRequest(t, recv, endpointCalled) } @@ -202,6 +206,7 @@ func TestAWSFargate(t *testing.T) { return []string{"task_arn:test_ARN"}, nil } recv := newTestReceiverFromConfig(cfg) + recv.telemetryForwarder.start() recv.telemetryForwarder.containerIDProvider = getTestContainerIDProvider() assertSendRequest(t, recv, endpointCalled) @@ -256,6 +261,7 @@ func TestTelemetryProxyMultipleEndpoints(t *testing.T) { cfg.GlobalTags[functionARNKeyTag] = "test_ARN" recv := newTestReceiverFromConfig(cfg) + recv.telemetryForwarder.start() req, rec := newRequestRecorder(t) recv.buildMux().ServeHTTP(rec, req) @@ -315,6 +321,7 @@ func TestMaxInflightBytes(t *testing.T) { cfg := getTestConfig(srv.URL) recv := newTestReceiverFromConfig(cfg) + recv.telemetryForwarder.start() recv.telemetryForwarder.maxInflightBytes = 100 mux := recv.buildMux() @@ -359,6 +366,7 @@ func TestInflightBytesReset(t *testing.T) { cfg := getTestConfig(srv.URL) recv := newTestReceiverFromConfig(cfg) + recv.telemetryForwarder.start() recv.telemetryForwarder.maxInflightBytes = 100 mux := recv.buildMux() @@ -417,6 +425,7 @@ func TestActualServer(t *testing.T) { cfg := getTestConfig(intakeMockServer.URL) r := newTestReceiverFromConfig(cfg) + r.telemetryForwarder.start() // We call this manually here to avoid starting the entire test receiver logs := bytes.Buffer{} prevLogger := log.SetLogger(log.NewBufferLogger(&logs)) defer log.SetLogger(prevLogger) @@ -445,6 +454,7 @@ func TestTelemetryConfig(t *testing.T) { cfg := config.New() cfg.Endpoints[0].APIKey = "api_key" recv := newTestReceiverFromConfig(cfg) + recv.telemetryForwarder.start() req, rec := newRequestRecorder(t) recv.buildMux().ServeHTTP(rec, req) @@ -463,6 +473,7 @@ func TestTelemetryConfig(t *testing.T) { Host: "111://malformed.dd_url.com", }} recv := newTestReceiverFromConfig(cfg) + recv.telemetryForwarder.start() req, rec := newRequestRecorder(t) recv.buildMux().ServeHTTP(rec, req) @@ -486,6 +497,7 @@ func TestTelemetryConfig(t *testing.T) { Host: srv.URL, }} recv := newTestReceiverFromConfig(cfg) + recv.telemetryForwarder.start() req, rec := newRequestRecorder(t) recv.buildMux().ServeHTTP(rec, req) From 952f4b2bc1b854e5e949da235353002cab8979ee Mon Sep 17 00:00:00 2001 From: Dustin Long Date: Mon, 9 Dec 2024 11:31:50 -0500 Subject: [PATCH 059/303] Implement UnsetForSource method (#31733) --- pkg/config/model/viper.go | 15 ++- pkg/config/nodetreemodel/config.go | 80 ++++++++++++- pkg/config/nodetreemodel/config_test.go | 142 +++++++++++++++++++++++ pkg/config/nodetreemodel/inner_node.go | 10 +- pkg/config/nodetreemodel/leaf_node.go | 6 +- pkg/config/nodetreemodel/missing_node.go | 2 +- pkg/config/nodetreemodel/node.go | 3 +- pkg/config/nodetreemodel/struct_node.go | 3 + 8 files changed, 247 insertions(+), 14 deletions(-) diff --git a/pkg/config/model/viper.go b/pkg/config/model/viper.go index 5742b4c06520b..a977863b7368d 100644 --- a/pkg/config/model/viper.go +++ b/pkg/config/model/viper.go @@ -91,9 +91,18 @@ type ValueWithSource struct { Value interface{} } -// IsGreaterOrEqualThan returns true if the current source is of higher priority than the one given as a parameter -func (s Source) IsGreaterOrEqualThan(x Source) bool { - return sourcesPriority[s] >= sourcesPriority[x] +// IsGreaterThan returns true if the current source is of higher priority than the one given as a parameter +func (s Source) IsGreaterThan(x Source) bool { + return sourcesPriority[s] > sourcesPriority[x] +} + +// PreviousSource returns the source before the current one, or Default (lowest priority) if there isn't one +func (s Source) PreviousSource() Source { + previous := sourcesPriority[s] + if previous == 0 { + return sources[previous] + } + return sources[previous-1] } // String casts Source into a string diff --git a/pkg/config/nodetreemodel/config.go b/pkg/config/nodetreemodel/config.go index 3d09ddc016eba..e2f6c4b8f7139 100644 --- a/pkg/config/nodetreemodel/config.go +++ b/pkg/config/nodetreemodel/config.go @@ -241,11 +241,83 @@ func (c *ntmConfig) SetDefault(key string, value interface{}) { _, _ = c.defaults.SetAt(parts, value, model.SourceDefault) } +func (c *ntmConfig) findPreviousSourceNode(key string, source model.Source) (Node, error) { + iter := source + for iter != model.SourceDefault { + iter = iter.PreviousSource() + tree, err := c.getTreeBySource(iter) + if err != nil { + return nil, err + } + node := c.leafAtPathFromNode(key, tree) + if _, isMissing := node.(*missingLeafImpl); !isMissing { + return node, nil + } + } + return nil, ErrNotFound +} + // UnsetForSource unsets a config entry for a given source -func (c *ntmConfig) UnsetForSource(_key string, _source model.Source) { +func (c *ntmConfig) UnsetForSource(key string, source model.Source) { c.Lock() - c.logErrorNotImplemented("UnsetForSource") - c.Unlock() + defer c.Unlock() + + // Remove it from the original source tree + tree, err := c.getTreeBySource(source) + if err != nil { + log.Errorf("%s", err) + return + } + parentNode, childName, err := c.parentOfNode(tree, key) + if err != nil { + return + } + // Only remove if the setting is a leaf + if child, err := parentNode.GetChild(childName); err == nil { + if _, ok := child.(LeafNode); ok { + parentNode.RemoveChild(childName) + } else { + log.Errorf("cannot remove setting %q, not a leaf", key) + return + } + } + + // If the node in the merged tree doesn't match the source we expect, we're done + if c.leafAtPathFromNode(key, c.root).Source() != source { + return + } + + // Find what the previous value used to be, based upon the previous source + prevNode, err := c.findPreviousSourceNode(key, source) + if err != nil { + return + } + + // Get the parent node of the leaf we're unsetting + parentNode, childName, err = c.parentOfNode(c.root, key) + if err != nil { + return + } + // Replace the child with the node from the previous layer + parentNode.InsertChildNode(childName, prevNode.Clone()) +} + +func (c *ntmConfig) parentOfNode(node Node, key string) (InnerNode, string, error) { + parts := splitKey(key) + lastPart := parts[len(parts)-1] + parts = parts[:len(parts)-1] + var err error + for _, p := range parts { + node, err = node.GetChild(p) + if err != nil { + return nil, "", err + } + } + innerNode, ok := node.(InnerNode) + if !ok { + return nil, "", ErrNotFound + } + return innerNode, lastPart, nil } func (c *ntmConfig) addToKnownKeys(key string) { @@ -609,7 +681,7 @@ func (c *ntmConfig) AllSettingsWithoutDefault() map[string]interface{} { defer c.RUnlock() // We only want to include leaf with a source higher than SourceDefault - return c.root.DumpSettings(func(source model.Source) bool { return source.IsGreaterOrEqualThan(model.SourceUnknown) }) + return c.root.DumpSettings(func(source model.Source) bool { return source.IsGreaterThan(model.SourceDefault) }) } // AllSettingsBySource returns the settings from each source (file, env vars, ...) diff --git a/pkg/config/nodetreemodel/config_test.go b/pkg/config/nodetreemodel/config_test.go index dfba602113411..4738b4e446767 100644 --- a/pkg/config/nodetreemodel/config_test.go +++ b/pkg/config/nodetreemodel/config_test.go @@ -433,3 +433,145 @@ server_timeout val:30, source:default` assert.Equal(t, expect, txt) } + +func TestUnsetForSource(t *testing.T) { + // env source, highest priority + os.Setenv("TEST_NETWORK_PATH_COLLECTOR_INPUT_CHAN_SIZE", "23456") + os.Setenv("TEST_NETWORK_PATH_COLLECTOR_PATHTEST_CONTEXTS_LIMIT", "654321") + os.Setenv("TEST_NETWORK_PATH_COLLECTOR_PROCESSING_CHAN_SIZE", "78900") + // file source, medium priority + configData := `network_path: + collector: + workers: 6 + pathtest_contexts_limit: 43210 + processing_chan_size: 45678` + // default source, lowest priority + cfg := NewConfig("test", "TEST", strings.NewReplacer(".", "_")) + cfg.BindEnvAndSetDefault("network_path.collector.input_chan_size", 100000) + cfg.BindEnvAndSetDefault("network_path.collector.pathtest_contexts_limit", 100000) + cfg.BindEnvAndSetDefault("network_path.collector.processing_chan_size", 100000) + cfg.BindEnvAndSetDefault("network_path.collector.workers", 4) + + cfg.BuildSchema() + err := cfg.ReadConfig(strings.NewReader(configData)) + require.NoError(t, err) + + // The merged config + txt := cfg.(*ntmConfig).Stringify("root") + expect := `network_path + collector + input_chan_size + val:23456, source:environment-variable + pathtest_contexts_limit + val:654321, source:environment-variable + processing_chan_size + val:78900, source:environment-variable + workers + val:6, source:file` + assert.Equal(t, expect, txt) + + // No change if source doesn't match + cfg.UnsetForSource("network_path.collector.input_chan_size", model.SourceFile) + assert.Equal(t, expect, txt) + + // No change if setting is not a leaf + cfg.UnsetForSource("network_path", model.SourceEnvVar) + assert.Equal(t, expect, txt) + + // No change if setting is not found + cfg.UnsetForSource("network_path.unknown", model.SourceEnvVar) + assert.Equal(t, expect, txt) + + // Remove a setting from the env source, nothing in the file source, it goes to default + cfg.UnsetForSource("network_path.collector.input_chan_size", model.SourceEnvVar) + txt = cfg.(*ntmConfig).Stringify("root") + expect = `network_path + collector + input_chan_size + val:100000, source:default + pathtest_contexts_limit + val:654321, source:environment-variable + processing_chan_size + val:78900, source:environment-variable + workers + val:6, source:file` + assert.Equal(t, expect, txt) + + // Remove a setting from the file source, it goes to default + cfg.UnsetForSource("network_path.collector.workers", model.SourceFile) + txt = cfg.(*ntmConfig).Stringify("root") + expect = `network_path + collector + input_chan_size + val:100000, source:default + pathtest_contexts_limit + val:654321, source:environment-variable + processing_chan_size + val:78900, source:environment-variable + workers + val:4, source:default` + assert.Equal(t, expect, txt) + + // Removing a setting from the env source, it goes to file source + cfg.UnsetForSource("network_path.collector.processing_chan_size", model.SourceEnvVar) + txt = cfg.(*ntmConfig).Stringify("root") + expect = `network_path + collector + input_chan_size + val:100000, source:default + pathtest_contexts_limit + val:654321, source:environment-variable + processing_chan_size + val:45678, source:file + workers + val:4, source:default` + assert.Equal(t, expect, txt) + + // Then remove it from the file source as well, leaving the default source + cfg.UnsetForSource("network_path.collector.processing_chan_size", model.SourceFile) + txt = cfg.(*ntmConfig).Stringify("root") + expect = `network_path + collector + input_chan_size + val:100000, source:default + pathtest_contexts_limit + val:654321, source:environment-variable + processing_chan_size + val:100000, source:default + workers + val:4, source:default` + assert.Equal(t, expect, txt) + + // Check the file layer in isolation + fileTxt := cfg.(*ntmConfig).Stringify(model.SourceFile) + fileExpect := `network_path + collector + pathtest_contexts_limit + val:43210, source:file` + assert.Equal(t, fileExpect, fileTxt) + + // Removing from the file source first does not change the merged value, because it uses env layer + cfg.UnsetForSource("network_path.collector.pathtest_contexts_limit", model.SourceFile) + assert.Equal(t, expect, txt) + + // But the file layer itself has been modified + fileTxt = cfg.(*ntmConfig).Stringify(model.SourceFile) + fileExpect = `network_path + collector` + assert.Equal(t, fileExpect, fileTxt) + + // Finally, remove it from the env layer + cfg.UnsetForSource("network_path.collector.pathtest_contexts_limit", model.SourceEnvVar) + txt = cfg.(*ntmConfig).Stringify("root") + expect = `network_path + collector + input_chan_size + val:100000, source:default + pathtest_contexts_limit + val:100000, source:default + processing_chan_size + val:100000, source:default + workers + val:4, source:default` + assert.Equal(t, expect, txt) +} diff --git a/pkg/config/nodetreemodel/inner_node.go b/pkg/config/nodetreemodel/inner_node.go index d531dc1d7facb..dd0c4bee914c1 100644 --- a/pkg/config/nodetreemodel/inner_node.go +++ b/pkg/config/nodetreemodel/inner_node.go @@ -88,7 +88,7 @@ func (n *innerNode) Merge(src InnerNode) error { } if srcIsLeaf { - if srcLeaf.SourceGreaterOrEqual(dstLeaf.Source()) { + if srcLeaf.Source() == dstLeaf.Source() || srcLeaf.SourceGreaterThan(dstLeaf.Source()) { n.children[name] = srcLeaf.Clone() } } else { @@ -132,7 +132,7 @@ func (n *innerNode) SetAt(key []string, value interface{}, source model.Source) } if leaf, ok := node.(LeafNode); ok { - if source.IsGreaterOrEqualThan(leaf.Source()) { + if source == leaf.Source() || source.IsGreaterThan(leaf.Source()) { n.children[part] = newLeafNode(value, source) return true, nil } @@ -163,6 +163,12 @@ func (n *innerNode) InsertChildNode(name string, node Node) { n.makeRemapCase() } +// RemoveChild removes a node from the current node +func (n *innerNode) RemoveChild(name string) { + delete(n.children, name) + n.makeRemapCase() +} + // DumpSettings clone the entire tree starting from the node into a map based on the leaf source. // // The selector will be call with the source of each leaf to determine if it should be included in the dump. diff --git a/pkg/config/nodetreemodel/leaf_node.go b/pkg/config/nodetreemodel/leaf_node.go index 45a6391248bd4..3140145d521f7 100644 --- a/pkg/config/nodetreemodel/leaf_node.go +++ b/pkg/config/nodetreemodel/leaf_node.go @@ -43,10 +43,10 @@ func (n *leafNodeImpl) Clone() Node { return newLeafNode(n.val, n.source) } -// SourceGreaterOrEqual returns true if the source of the current node is greater or equal to the one given as a +// SourceGreaterThan returns true if the source of the current node is greater than the one given as a // parameter -func (n *leafNodeImpl) SourceGreaterOrEqual(source model.Source) bool { - return n.source.IsGreaterOrEqualThan(source) +func (n *leafNodeImpl) SourceGreaterThan(source model.Source) bool { + return n.source.IsGreaterThan(source) } // GetChild returns an error because a leaf has no children diff --git a/pkg/config/nodetreemodel/missing_node.go b/pkg/config/nodetreemodel/missing_node.go index 52d68f0112ef9..d6a2ad640d8af 100644 --- a/pkg/config/nodetreemodel/missing_node.go +++ b/pkg/config/nodetreemodel/missing_node.go @@ -38,6 +38,6 @@ func (m *missingLeafImpl) Clone() Node { return m } -func (m *missingLeafImpl) SourceGreaterOrEqual(model.Source) bool { +func (m *missingLeafImpl) SourceGreaterThan(model.Source) bool { return false } diff --git a/pkg/config/nodetreemodel/node.go b/pkg/config/nodetreemodel/node.go index 97007efa50198..469f0d89cfedd 100644 --- a/pkg/config/nodetreemodel/node.go +++ b/pkg/config/nodetreemodel/node.go @@ -96,6 +96,7 @@ type InnerNode interface { Merge(InnerNode) error SetAt([]string, interface{}, model.Source) (bool, error) InsertChildNode(string, Node) + RemoveChild(string) makeRemapCase() DumpSettings(func(model.Source) bool) map[string]interface{} } @@ -105,5 +106,5 @@ type LeafNode interface { Node Get() interface{} Source() model.Source - SourceGreaterOrEqual(model.Source) bool + SourceGreaterThan(model.Source) bool } diff --git a/pkg/config/nodetreemodel/struct_node.go b/pkg/config/nodetreemodel/struct_node.go index 30fa47ce1c12b..511235381c35a 100644 --- a/pkg/config/nodetreemodel/struct_node.go +++ b/pkg/config/nodetreemodel/struct_node.go @@ -74,6 +74,9 @@ func (n *structNodeImpl) SetAt([]string, interface{}, model.Source) (bool, error // InsertChildNode is not implemented for a leaf node func (n *structNodeImpl) InsertChildNode(string, Node) {} +// RemoveChild is not implemented for struct node +func (n *structNodeImpl) RemoveChild(string) {} + // makeRemapCase not implemented func (n *structNodeImpl) makeRemapCase() {} From 94679d8b5fb02b7e8cd15af96e799e71fab761b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20Juli=C3=A1n?= Date: Mon, 9 Dec 2024 18:05:08 +0100 Subject: [PATCH 060/303] fix(podresources): detect API availability client creation (#31806) --- .../env/environment_container_features.go | 2 ++ pkg/config/env/environment_containers.go | 21 +++++++++++++++++-- pkg/util/kubernetes/kubelet/kubelet.go | 12 ++++++----- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/pkg/config/env/environment_container_features.go b/pkg/config/env/environment_container_features.go index 1601a47696da5..ffced09b49c61 100644 --- a/pkg/config/env/environment_container_features.go +++ b/pkg/config/env/environment_container_features.go @@ -31,4 +31,6 @@ const ( CloudFoundry Feature = "cloudfoundry" // Podman containers storage path accessible Podman Feature = "podman" + // PodResources socket present + PodResources Feature = "podresources" ) diff --git a/pkg/config/env/environment_containers.go b/pkg/config/env/environment_containers.go index 9ddc1cdfcab62..7dbb0cf9ce58f 100644 --- a/pkg/config/env/environment_containers.go +++ b/pkg/config/env/environment_containers.go @@ -46,6 +46,7 @@ func init() { registerFeature(ECSOrchestratorExplorer) registerFeature(CloudFoundry) registerFeature(Podman) + registerFeature(PodResources) } // IsAnyContainerFeaturePresent checks if any of known container features is present @@ -69,6 +70,7 @@ func detectContainerFeatures(features FeatureMap, cfg model.Reader) { detectAWSEnvironments(features, cfg) detectCloudFoundry(features, cfg) detectPodman(features, cfg) + detectPodResources(features, cfg) } func detectKubernetes(features FeatureMap, cfg model.Reader) { @@ -96,7 +98,7 @@ func detectDocker(features FeatureMap) { // Even though it does not modify configuration, using the OverrideFunc mechanism for uniformity model.AddOverrideFunc(func(model.Config) { - os.Setenv("DOCKER_HOST", getDefaultDockerSocketType()+defaultDockerSocketPath) + os.Setenv("DOCKER_HOST", getDefaultSocketPrefix()+defaultDockerSocketPath) }) break } @@ -226,6 +228,21 @@ func detectPodman(features FeatureMap, cfg model.Reader) { } } +func detectPodResources(features FeatureMap, cfg model.Reader) { + // We only check the path from config. Default socket path is defined in the config + socketPath := getDefaultSocketPrefix() + cfg.GetString("kubernetes_kubelet_podresources_socket") + + exists, reachable := socket.IsAvailable(socketPath, socketTimeout) + if exists && reachable { + log.Infof("Agent found PodResources socket at %s", socketPath) + features[PodResources] = struct{}{} + } else if exists && !reachable { + log.Infof("Agent found PodResources socket at %s but socket not reachable (permissions?)", socketPath) + } else { + log.Infof("Agent did not find PodResources socket at %s", socketPath) + } +} + func getHostMountPrefixes() []string { if IsContainerized() { return []string{"", defaultHostMountPrefix} @@ -233,7 +250,7 @@ func getHostMountPrefixes() []string { return []string{""} } -func getDefaultDockerSocketType() string { +func getDefaultSocketPrefix() string { if runtime.GOOS == "windows" { return winNamedPipePrefix } diff --git a/pkg/util/kubernetes/kubelet/kubelet.go b/pkg/util/kubernetes/kubelet/kubelet.go index 5708841967134..d44e8074be936 100644 --- a/pkg/util/kubernetes/kubelet/kubelet.go +++ b/pkg/util/kubernetes/kubelet/kubelet.go @@ -15,6 +15,7 @@ import ( "sync" "time" + "github.com/DataDog/datadog-agent/pkg/config/env" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/errors" "github.com/DataDog/datadog-agent/pkg/util/cache" @@ -84,9 +85,11 @@ func (ku *KubeUtil) init() error { } } - ku.podResourcesClient, err = NewPodResourcesClient(pkgconfigsetup.Datadog()) - if err != nil { - log.Warnf("Failed to create pod resources client, resource data will not be available: %s", err) + if env.IsFeaturePresent(env.PodResources) { + ku.podResourcesClient, err = NewPodResourcesClient(pkgconfigsetup.Datadog()) + if err != nil { + log.Warnf("Failed to create pod resources client, resource data will not be available: %s", err) + } } return nil @@ -214,8 +217,7 @@ func (ku *KubeUtil) getLocalPodList(ctx context.Context) (*PodList, error) { err = ku.addContainerResourcesData(ctx, pods.Items) if err != nil { - // TODO: Switch back to error level once the socket issue is fixed. - log.Debugf("Error adding container resources data: %s", err) + log.Errorf("Error adding container resources data: %s", err) } // ensure we dont have nil pods From 0b3f726f2a98fd5f3fbf4008399a67314806dbcf Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Mon, 9 Dec 2024 18:17:43 +0100 Subject: [PATCH 061/303] feat(package_size): Display the package size message in the PR (#31832) --- .gitlab/pkg_metrics/pkg_metrics.yml | 3 +- tasks/libs/package/size.py | 72 +++++++-------- tasks/libs/package/utils.py | 30 +++++++ tasks/package.py | 37 ++++++-- tasks/unit_tests/package_lib_tests.py | 87 ++++++++++--------- tasks/unit_tests/package_tests.py | 24 ++--- .../testdata/package_sizes_real.json | 2 +- 7 files changed, 153 insertions(+), 102 deletions(-) diff --git a/.gitlab/pkg_metrics/pkg_metrics.yml b/.gitlab/pkg_metrics/pkg_metrics.yml index e8616c61247a2..ceed774b62f41 100644 --- a/.gitlab/pkg_metrics/pkg_metrics.yml +++ b/.gitlab/pkg_metrics/pkg_metrics.yml @@ -205,6 +205,5 @@ new_check_pkg_size: - agent_rpm-arm64-a7 - iot_agent_rpm-arm64 script: - - ls -l $OMNIBUS_PACKAGE_DIR - - ls -l $OMNIBUS_PACKAGE_DIR_SUSE + - !reference [.setup_agent_github_app] - inv package.check-size diff --git a/tasks/libs/package/size.py b/tasks/libs/package/size.py index cae0353453f7d..dad67823d3223 100644 --- a/tasks/libs/package/size.py +++ b/tasks/libs/package/size.py @@ -3,11 +3,9 @@ import tempfile from datetime import datetime -from invoke import Exit - from tasks.libs.common.color import Color, color_message from tasks.libs.common.constants import ORIGIN_CATEGORY, ORIGIN_PRODUCT, ORIGIN_SERVICE -from tasks.libs.common.git import get_common_ancestor, get_current_branch, get_default_branch +from tasks.libs.common.git import get_default_branch from tasks.libs.common.utils import get_metric_origin from tasks.libs.package.utils import get_package_path @@ -36,24 +34,25 @@ }, } +# The below template contains the relative increase threshold for each package type PACKAGE_SIZE_TEMPLATE = { 'amd64': { - 'datadog-agent': {'deb': 140000000}, - 'datadog-iot-agent': {'deb': 10000000}, - 'datadog-dogstatsd': {'deb': 10000000}, - 'datadog-heroku-agent': {'deb': 70000000}, + 'datadog-agent': {'deb': 140 * pow(10, 6)}, + 'datadog-iot-agent': {'deb': 10 * pow(10, 6)}, + 'datadog-dogstatsd': {'deb': 10 * pow(10, 6)}, + 'datadog-heroku-agent': {'deb': 70 * pow(10, 6)}, }, 'x86_64': { - 'datadog-agent': {'rpm': 140000000, 'suse': 140000000}, - 'datadog-iot-agent': {'rpm': 10000000, 'suse': 10000000}, - 'datadog-dogstatsd': {'rpm': 10000000, 'suse': 10000000}, + 'datadog-agent': {'rpm': 140 * pow(10, 6), 'suse': 140 * pow(10, 6)}, + 'datadog-iot-agent': {'rpm': 10 * pow(10, 6), 'suse': 10 * pow(10, 6)}, + 'datadog-dogstatsd': {'rpm': 10 * pow(10, 6), 'suse': 10 * pow(10, 6)}, }, 'arm64': { - 'datadog-agent': {'deb': 140000000}, - 'datadog-iot-agent': {'deb': 10000000}, - 'datadog-dogstatsd': {'deb': 10000000}, + 'datadog-agent': {'deb': 140 * pow(10, 6)}, + 'datadog-iot-agent': {'deb': 10 * pow(10, 6)}, + 'datadog-dogstatsd': {'deb': 10 * pow(10, 6)}, }, - 'aarch64': {'datadog-agent': {'rpm': 140000000}, 'datadog-iot-agent': {'rpm': 10000000}}, + 'aarch64': {'datadog-agent': {'rpm': 140 * pow(10, 6)}, 'datadog-iot-agent': {'rpm': 10 * pow(10, 6)}}, } @@ -159,11 +158,10 @@ def compute_package_size_metrics( return series -def compare(ctx, package_sizes, arch, flavor, os_name, threshold): +def compare(ctx, package_sizes, ancestor, arch, flavor, os_name, threshold): """ Compare (or update) a package size with the ancestor package size. """ - mb = 1000000 if os_name == 'suse': dir = os.environ['OMNIBUS_PACKAGE_DIR_SUSE'] path = f'{dir}/{flavor}-7*{arch}.rpm' @@ -172,40 +170,25 @@ def compare(ctx, package_sizes, arch, flavor, os_name, threshold): separator = '_' if os_name == 'deb' else '-' path = f'{dir}/{flavor}{separator}7*{arch}.{os_name}' package_size = _get_uncompressed_size(ctx, get_package_path(path), os_name) - branch = get_current_branch(ctx) - ancestor = get_common_ancestor(ctx, branch) - if branch == get_default_branch(): + if os.environ['CI_COMMIT_REF_NAME'] == get_default_branch(): package_sizes[ancestor][arch][flavor][os_name] = package_size return - previous_size = get_previous_size(package_sizes, ancestor, arch, flavor, os_name) + previous_size = package_sizes[ancestor][arch][flavor][os_name] diff = package_size - previous_size - # For printing purposes - new_package_size_mb = package_size / mb - stable_package_size_mb = previous_size / mb - threshold_mb = threshold / mb - diff_mb = diff / mb - message = f"""{flavor}-{arch}-{os_name} size increase is OK: - New package size is {new_package_size_mb:.2f}MB - Ancestor package ({ancestor}) size is {stable_package_size_mb:.2f}MB - Diff is {diff_mb:.2f}MB (max allowed diff: {threshold_mb:.2f}MB)""" + message = f"{flavor}-{arch}-{os_name} size {mb(package_size)} is OK: {mb(diff)} diff with previous {mb(previous_size)} (max: {mb(threshold)})" if diff > threshold: + emoji = "❌" print(color_message(message.replace('OK', 'too large'), Color.RED), file=sys.stderr) - raise Exit(code=1) - - print(message) + else: + emoji = "✅" if diff <= 0 else "⚠️" + print(message) + return f"|{flavor}-{arch}-{os_name}|{mb(diff)}|{emoji}|{mb(package_size)}|{mb(previous_size)}|{mb(threshold)}|" -def get_previous_size(package_sizes, ancestor, arch, flavor, os_name): - """ - Get the size of the package for the given ancestor, or the earliest ancestor if the given ancestor is not found. - """ - if ancestor in package_sizes: - commit = ancestor - else: - commit = min(package_sizes, key=lambda x: package_sizes[x]['timestamp']) - return package_sizes[commit][arch][flavor][os_name] +def mb(value): + return f"{value / 1000000:.2f}MB" def _get_uncompressed_size(ctx, package, os_name): @@ -218,8 +201,11 @@ def _get_uncompressed_size(ctx, package, os_name): def _get_deb_uncompressed_size(ctx, package): # the size returned by dpkg is a number of bytes divided by 1024 # so we multiply it back to get the same unit as RPM or stat - return int(ctx.run(f'dpkg-deb --info {package} | grep Installed-Size | cut -d : -f 2 | xargs').stdout) * 1024 + return ( + int(ctx.run(f'dpkg-deb --info {package} | grep Installed-Size | cut -d : -f 2 | xargs', hide=True).stdout) + * 1024 + ) def _get_rpm_uncompressed_size(ctx, package): - return int(ctx.run(f'rpm -qip {package} | grep Size | cut -d : -f 2 | xargs').stdout) + return int(ctx.run(f'rpm -qip {package} | grep Size | cut -d : -f 2 | xargs', hide=True).stdout) diff --git a/tasks/libs/package/utils.py b/tasks/libs/package/utils.py index ba5448ad666c7..298901732c33e 100644 --- a/tasks/libs/package/utils.py +++ b/tasks/libs/package/utils.py @@ -3,7 +3,9 @@ from invoke import Exit, UnexpectedExit +from tasks.github_tasks import pr_commenter from tasks.libs.common.color import color_message +from tasks.libs.common.git import get_common_ancestor from tasks.libs.notify.utils import AWS_S3_CP_CMD PACKAGE_SIZE_S3_CI_BUCKET_URL = "s3://dd-ci-artefacts-build-stable/datadog-agent/package_size" @@ -74,3 +76,31 @@ def upload_package_sizes(ctx, package_sizes: dict, package_size_file: str, dista f"{AWS_S3_CP_CMD} {package_size_file} {PACKAGE_SIZE_S3_CI_BUCKET_URL}/{package_size_file}", hide="stdout", ) + + +def get_ancestor(ctx, package_sizes, on_main): + """ + Get the common ancestor between HEAD and the default branch + Return the most recent commit if the ancestor is not found in the package_size file + """ + ancestor = get_common_ancestor(ctx, "HEAD") + if not on_main and ancestor not in package_sizes: + return min(package_sizes, key=lambda x: package_sizes[x]['timestamp']) + return ancestor + + +def display_message(ctx, ancestor, rows, decision): + is_open = '' if "Passed" in decision else ' open' + message = f"""Comparison with [ancestor](https://github.com/DataDog/datadog-agent/commit/{ancestor}) `{ancestor}` + + Diff per package + +|package|diff|status|size|ancestor|threshold| +|--|--|--|--|--|--| +{rows} + + +## Decision +{decision} +""" + pr_commenter(ctx, title="Package size comparison", body=message) diff --git a/tasks/package.py b/tasks/package.py index 4e9a859ae8850..307624be2f2f2 100644 --- a/tasks/package.py +++ b/tasks/package.py @@ -4,8 +4,8 @@ from invoke import task from invoke.exceptions import Exit -from tasks.libs.common.color import color_message -from tasks.libs.common.git import get_common_ancestor, get_current_branch, get_default_branch +from tasks.libs.common.color import Color, color_message +from tasks.libs.common.git import get_default_branch from tasks.libs.package.size import ( PACKAGE_SIZE_TEMPLATE, _get_deb_uncompressed_size, @@ -13,25 +13,48 @@ compare, compute_package_size_metrics, ) -from tasks.libs.package.utils import get_package_path, list_packages, retrieve_package_sizes, upload_package_sizes +from tasks.libs.package.utils import ( + display_message, + get_ancestor, + get_package_path, + list_packages, + retrieve_package_sizes, + upload_package_sizes, +) @task def check_size(ctx, filename: str = 'package_sizes.json', dry_run: bool = False): package_sizes = retrieve_package_sizes(ctx, filename, distant=not dry_run) - if get_current_branch(ctx) == get_default_branch(): + on_main = os.environ['CI_COMMIT_REF_NAME'] == get_default_branch() + ancestor = get_ancestor(ctx, package_sizes, on_main) + if on_main: # Initialize to default values - ancestor = get_common_ancestor(ctx, get_default_branch()) if ancestor in package_sizes: # The test already ran on this commit return package_sizes[ancestor] = PACKAGE_SIZE_TEMPLATE package_sizes[ancestor]['timestamp'] = int(datetime.now().timestamp()) # Check size of packages + print( + color_message(f"Checking package sizes from {os.environ['CI_COMMIT_REF_NAME']} against {ancestor}", Color.BLUE) + ) + size_table = "" for package_info in list_packages(PACKAGE_SIZE_TEMPLATE): - compare(ctx, package_sizes, *package_info) - if get_current_branch(ctx) == get_default_branch(): + size_table += f"{compare(ctx, package_sizes, ancestor, *package_info)}\n" + + if on_main: upload_package_sizes(ctx, package_sizes, filename, distant=not dry_run) + else: + if "❌" in size_table: + decision = "❌ Failed" + elif "⚠️" in size_table: + decision = "⚠️ Warning" + else: + decision = "✅ Passed" + display_message(ctx, ancestor, size_table, decision) + if "Failed" in decision: + raise Exit(code=1) @task diff --git a/tasks/unit_tests/package_lib_tests.py b/tasks/unit_tests/package_lib_tests.py index 0ae56501c3439..57816701fd07c 100644 --- a/tasks/unit_tests/package_lib_tests.py +++ b/tasks/unit_tests/package_lib_tests.py @@ -3,7 +3,7 @@ import unittest from unittest.mock import MagicMock, patch -from invoke import Exit, MockContext, Result +from invoke import MockContext, Result from tasks.libs.package.size import ( PACKAGE_SIZE_TEMPLATE, @@ -11,9 +11,8 @@ _get_uncompressed_size, compare, compute_package_size_metrics, - get_previous_size, ) -from tasks.libs.package.utils import list_packages +from tasks.libs.package.utils import get_ancestor, list_packages class TestProduceSizeStats(unittest.TestCase): @@ -135,14 +134,20 @@ def setUp(self) -> None: with open('tasks/unit_tests/testdata/package_sizes.json') as f: self.package_sizes = json.load(f) - def test_is_ancestor(self): - self.assertEqual(get_previous_size(self.package_sizes, "grand_ma", "artdeco", "cherry", 'fibula'), 42) + @patch.dict('os.environ', {'CI_COMMIT_REF_NAME': 'puppet'}) + def test_found_on_dev(self): + c = MockContext(run={'git merge-base HEAD origin/main': Result('grand_ma')}) + self.assertEqual(get_ancestor(c, self.package_sizes, False), "grand_ma") - def test_is_other_ancestor(self): - self.assertEqual(get_previous_size(self.package_sizes, "pa", "artdeco", "cherry", 'fibula'), 3) + @patch.dict('os.environ', {'CI_COMMIT_REF_NAME': 'puppet'}) + def test_not_found_on_dev(self): + c = MockContext(run={'git merge-base HEAD origin/main': Result('grand_pa')}) + self.assertEqual(get_ancestor(c, self.package_sizes, False), "grand_ma") - def test_is_not_ancestor(self): - self.assertEqual(get_previous_size(self.package_sizes, "grandPa", "artdeco", "cherry", 'fibula'), 42) + @patch.dict('os.environ', {'CI_COMMIT_REF_NAME': 'main'}) + def test_on_main(self): + c = MockContext(run={'git merge-base HEAD origin/main': Result('kirk')}) + self.assertEqual(get_ancestor(c, self.package_sizes, True), "kirk") class TestGetUncompressedSize(unittest.TestCase): @@ -170,14 +175,15 @@ def setUp(self) -> None: with open('tasks/unit_tests/testdata/package_sizes.json') as f: self.package_sizes = json.load(f) - @patch.dict('os.environ', {'OMNIBUS_PACKAGE_DIR': 'tasks/unit_tests/testdata/packages'}) + @patch.dict( + 'os.environ', {'OMNIBUS_PACKAGE_DIR': 'tasks/unit_tests/testdata/packages', 'CI_COMMIT_REF_NAME': 'main'} + ) @patch('builtins.print') def test_on_main(self, mock_print): flavor, arch, os_name = 'datadog-heroku-agent', 'amd64', 'deb' c = MockContext( run={ - 'git rev-parse --abbrev-ref HEAD': Result('main'), - 'git merge-base main origin/main': Result('12345'), + 'git merge-base HEAD origin/main': Result('12345'), f"dpkg-deb --info {self.pkg_root}/{flavor}_7_{arch}.{os_name} | grep Installed-Size | cut -d : -f 2 | xargs": Result( 42 ), @@ -185,65 +191,68 @@ def test_on_main(self, mock_print): ) self.package_sizes['12345'] = PACKAGE_SIZE_TEMPLATE self.assertEqual(self.package_sizes['12345'][arch][flavor][os_name], 70000000) - compare(c, self.package_sizes, arch, flavor, os_name, 2001) + res = compare(c, self.package_sizes, '12345', arch, flavor, os_name, 2001) + self.assertIsNone(res) self.assertEqual(self.package_sizes['12345'][arch][flavor][os_name], 43008) mock_print.assert_not_called() - @patch.dict('os.environ', {'OMNIBUS_PACKAGE_DIR_SUSE': 'tasks/unit_tests/testdata/packages'}) + @patch.dict( + 'os.environ', + {'OMNIBUS_PACKAGE_DIR_SUSE': 'tasks/unit_tests/testdata/packages', 'CI_COMMIT_REF_NAME': 'pikachu'}, + ) @patch('builtins.print') - def test_on_branch_ok(self, mock_print): + def test_on_branch_warning(self, mock_print): flavor, arch, os_name = 'datadog-agent', 'aarch64', 'suse' c = MockContext( run={ - 'git rev-parse --abbrev-ref HEAD': Result('pikachu'), - 'git merge-base pikachu origin/main': Result('25'), + 'git merge-base HEAD origin/main': Result('25'), f"rpm -qip {self.pkg_root}/{flavor}-7.{arch}.rpm | grep Size | cut -d : -f 2 | xargs": Result(69000000), } ) - compare(c, self.package_sizes, arch, flavor, os_name, 70000000) - mock_print.assert_called_with(f"""{flavor}-{arch}-{os_name} size increase is OK: - New package size is 69.00MB - Ancestor package (25) size is 68.00MB - Diff is 1.00MB (max allowed diff: 70.00MB)""") + res = compare(c, self.package_sizes, '25', arch, flavor, os_name, 70000000) + self.assertEqual(res, "|datadog-agent-aarch64-suse|1.00MB|⚠️|69.00MB|68.00MB|70.00MB|") + mock_print.assert_called_with( + f"{flavor}-{arch}-{os_name} size 69.00MB is OK: 1.00MB diff with previous 68.00MB (max: 70.00MB)" + ) - @patch.dict('os.environ', {'OMNIBUS_PACKAGE_DIR': 'tasks/unit_tests/testdata/packages'}) + @patch.dict( + 'os.environ', {'OMNIBUS_PACKAGE_DIR': 'tasks/unit_tests/testdata/packages', 'CI_COMMIT_REF_NAME': 'pikachu'} + ) @patch('builtins.print') def test_on_branch_ok_rpm(self, mock_print): flavor, arch, os_name = 'datadog-iot-agent', 'x86_64', 'rpm' c = MockContext( run={ - 'git rev-parse --abbrev-ref HEAD': Result('pikachu'), - 'git merge-base pikachu origin/main': Result('25'), + 'git merge-base HEAD origin/main': Result('25'), f"rpm -qip {self.pkg_root}/{flavor}-7.{arch}.{os_name} | grep Size | cut -d : -f 2 | xargs": Result( 69000000 ), } ) - compare(c, self.package_sizes, arch, flavor, os_name, 70000000) - mock_print.assert_called_with(f"""{flavor}-{arch}-{os_name} size increase is OK: - New package size is 69.00MB - Ancestor package (25) size is 78.00MB - Diff is -9.00MB (max allowed diff: 70.00MB)""") + res = compare(c, self.package_sizes, '25', arch, flavor, os_name, 70000000) + self.assertEqual(res, "|datadog-iot-agent-x86_64-rpm|-9.00MB|✅|69.00MB|78.00MB|70.00MB|") + mock_print.assert_called_with( + f"{flavor}-{arch}-{os_name} size 69.00MB is OK: -9.00MB diff with previous 78.00MB (max: 70.00MB)" + ) - @patch.dict('os.environ', {'OMNIBUS_PACKAGE_DIR_SUSE': 'tasks/unit_tests/testdata/packages'}) + @patch.dict( + 'os.environ', + {'OMNIBUS_PACKAGE_DIR_SUSE': 'tasks/unit_tests/testdata/packages', 'CI_COMMIT_REF_NAME': 'pikachu'}, + ) @patch('builtins.print') def test_on_branch_ko(self, mock_print): flavor, arch, os_name = 'datadog-agent', 'aarch64', 'suse' c = MockContext( run={ - 'git rev-parse --abbrev-ref HEAD': Result('pikachu'), - 'git merge-base pikachu origin/main': Result('25'), + 'git merge-base HEAD origin/main': Result('25'), f"rpm -qip {self.pkg_root}/{flavor}-7.{arch}.rpm | grep Size | cut -d : -f 2 | xargs": Result( 139000000 ), } ) - with self.assertRaises(Exit): - compare(c, self.package_sizes, arch, flavor, os_name, 70000000) + res = compare(c, self.package_sizes, '25', arch, flavor, os_name, 70000000) + self.assertEqual(res, "|datadog-agent-aarch64-suse|71.00MB|❌|139.00MB|68.00MB|70.00MB|") mock_print.assert_called_with( - """\x1b[91mdatadog-agent-aarch64-suse size increase is too large: - New package size is 139.00MB - Ancestor package (25) size is 68.00MB - Diff is 71.00MB (max allowed diff: 70.00MB)\x1b[0m""", + "\x1b[91mdatadog-agent-aarch64-suse size 139.00MB is too large: 71.00MB diff with previous 68.00MB (max: 70.00MB)\x1b[0m", file=sys.stderr, ) diff --git a/tasks/unit_tests/package_tests.py b/tasks/unit_tests/package_tests.py index 912c1ce53a912..b1698695b8e5e 100644 --- a/tasks/unit_tests/package_tests.py +++ b/tasks/unit_tests/package_tests.py @@ -13,15 +13,16 @@ class TestCheckSize(unittest.TestCase): { 'OMNIBUS_PACKAGE_DIR': 'tasks/unit_tests/testdata/packages', 'OMNIBUS_PACKAGE_DIR_SUSE': 'tasks/unit_tests/testdata/packages', + 'CI_COMMIT_REF_NAME': 'pikachu', }, ) @patch('tasks.libs.package.size.get_package_path', new=MagicMock(return_value='datadog-agent')) + @patch('tasks.package.display_message', new=MagicMock()) def test_dev_branch_ko(self): flavor = 'datadog-agent' c = MockContext( run={ - 'git rev-parse --abbrev-ref HEAD': Result('pikachu'), - 'git merge-base pikachu origin/main': Result('25'), + 'git merge-base HEAD origin/main': Result('25'), f"dpkg-deb --info {flavor} | grep Installed-Size | cut -d : -f 2 | xargs": Result(42), f"rpm -qip {flavor} | grep Size | cut -d : -f 2 | xargs": Result(69000000), } @@ -35,38 +36,41 @@ def test_dev_branch_ko(self): { 'OMNIBUS_PACKAGE_DIR': 'tasks/unit_tests/testdata/packages', 'OMNIBUS_PACKAGE_DIR_SUSE': 'tasks/unit_tests/testdata/packages', + 'CI_COMMIT_REF_NAME': 'pikachu', }, ) @patch('tasks.libs.package.size.get_package_path', new=MagicMock(return_value='datadog-agent')) - def test_dev_branch_ok(self, print_mock): + @patch('tasks.package.display_message', new=MagicMock()) + @patch('tasks.package.upload_package_sizes') + def test_dev_branch_ok(self, upload_mock, print_mock): flavor = 'datadog-agent' c = MockContext( run={ - 'git rev-parse --abbrev-ref HEAD': Result('pikachu'), - 'git merge-base pikachu origin/main': Result('25'), + 'git merge-base HEAD origin/main': Result('25'), f"dpkg-deb --info {flavor} | grep Installed-Size | cut -d : -f 2 | xargs": Result(42), f"rpm -qip {flavor} | grep Size | cut -d : -f 2 | xargs": Result(20000000), } ) check_size(c, filename='tasks/unit_tests/testdata/package_sizes_real.json', dry_run=True) print_mock.assert_called() - self.assertEqual(print_mock.call_count, 15) + self.assertEqual(print_mock.call_count, 16) + upload_mock.assert_not_called() - @patch('builtins.print') @patch.dict( 'os.environ', { 'OMNIBUS_PACKAGE_DIR': 'tasks/unit_tests/testdata/packages', 'OMNIBUS_PACKAGE_DIR_SUSE': 'tasks/unit_tests/testdata/packages', + 'CI_COMMIT_REF_NAME': 'main', }, ) @patch('tasks.libs.package.size.get_package_path', new=MagicMock(return_value='datadog-agent')) - def test_main_branch_ok(self, print_mock): + @patch('tasks.package.display_message', new=MagicMock()) + def test_main_branch_ok(self): flavor = 'datadog-agent' c = MockContext( run={ - 'git rev-parse --abbrev-ref HEAD': Result('main'), - 'git merge-base main origin/main': Result('25'), + 'git merge-base HEAD origin/main': Result('25'), f"dpkg-deb --info {flavor} | grep Installed-Size | cut -d : -f 2 | xargs": Result(42), f"rpm -qip {flavor} | grep Size | cut -d : -f 2 | xargs": Result(20000000), } diff --git a/tasks/unit_tests/testdata/package_sizes_real.json b/tasks/unit_tests/testdata/package_sizes_real.json index e24ed4d2bc98d..39f8858b13e0b 100644 --- a/tasks/unit_tests/testdata/package_sizes_real.json +++ b/tasks/unit_tests/testdata/package_sizes_real.json @@ -1 +1 @@ -{"12345": {"timestamp": 1732804637, "amd64": {"datadog-agent": {"deb": 140000000}, "datadog-iot-agent": {"deb": 10000000}, "datadog-dogstatsd": {"deb": 10000000}, "datadog-heroku-agent": {"deb": 70000000}}, "x86_64": {"datadog-agent": {"rpm": 140000000, "suse": 140000000}, "datadog-iot-agent": {"rpm": 10000000, "suse": 10000000}, "datadog-dogstatsd": {"rpm": 10000000, "suse": 10000000}}, "arm64": {"datadog-agent": {"deb": 140000000}, "datadog-iot-agent": {"deb": 10000000}, "datadog-dogstatsd": {"deb": 10000000}}, "aarch64": {"datadog-agent": {"rpm": 140000000}, "datadog-iot-agent": {"rpm": 10000000}}}} \ No newline at end of file +{"12345": {"timestamp": 1732804637, "amd64": {"datadog-agent": {"deb": 140000000}, "datadog-iot-agent": {"deb": 10000000}, "datadog-dogstatsd": {"deb": 10000000}, "datadog-heroku-agent": {"deb": 70000000}}, "x86_64": {"datadog-agent": {"rpm": 140000000, "suse": 140000000}, "datadog-iot-agent": {"rpm": 10000000, "suse": 10000000}, "datadog-dogstatsd": {"rpm": 10000000, "suse": 10000000}}, "arm64": {"datadog-agent": {"deb": 140000000}, "datadog-iot-agent": {"deb": 10000000}, "datadog-dogstatsd": {"deb": 10000000}}, "aarch64": {"datadog-agent": {"rpm": 140000000}, "datadog-iot-agent": {"rpm": 10000000}}}} From c5069b54c0645677da73fcaf0765bbf6c898c8e1 Mon Sep 17 00:00:00 2001 From: Stan Rozenraukh Date: Mon, 9 Dec 2024 12:32:07 -0500 Subject: [PATCH 062/303] Only set INSTALLATION environment variables when doing injection (#31503) Co-authored-by: Rosa Trieu <107086888+rtrieu@users.noreply.github.com> --- .../auto_instrumentation.go | 4 +- .../auto_instrumentation_test.go | 44 ++----------------- ...disabled-no-env-vars-135252f0eb8ddef4.yaml | 5 +++ 3 files changed, 12 insertions(+), 41 deletions(-) create mode 100644 releasenotes-dca/notes/admission-controller-disabled-no-env-vars-135252f0eb8ddef4.yaml diff --git a/pkg/clusteragent/admission/mutate/autoinstrumentation/auto_instrumentation.go b/pkg/clusteragent/admission/mutate/autoinstrumentation/auto_instrumentation.go index b25289c3a1d31..a3d1aff6b6afa 100644 --- a/pkg/clusteragent/admission/mutate/autoinstrumentation/auto_instrumentation.go +++ b/pkg/clusteragent/admission/mutate/autoinstrumentation/auto_instrumentation.go @@ -157,7 +157,6 @@ func (w *Webhook) inject(pod *corev1.Pod, ns string, _ dynamic.Interface) (bool, if pod.Namespace == "" { pod.Namespace = ns } - injectApmTelemetryConfig(pod) if !w.isPodEligible(pod) { return false, nil @@ -371,6 +370,9 @@ func (s libInfoSource) mutatePod(pod *corev1.Pod) error { Name: instrumentationInstallTypeEnvVarName, Value: s.injectionType(), }) + + injectApmTelemetryConfig(pod) + return nil } diff --git a/pkg/clusteragent/admission/mutate/autoinstrumentation/auto_instrumentation_test.go b/pkg/clusteragent/admission/mutate/autoinstrumentation/auto_instrumentation_test.go index 2db44b4acbb6a..97dda98d33174 100644 --- a/pkg/clusteragent/admission/mutate/autoinstrumentation/auto_instrumentation_test.go +++ b/pkg/clusteragent/admission/mutate/autoinstrumentation/auto_instrumentation_test.go @@ -2307,16 +2307,7 @@ func TestInjectAutoInstrumentation(t *testing.T) { "admission.datadoghq.com/enabled": "false", }, }.Create(), - expectedEnvs: []corev1.EnvVar{ - { - Name: "DD_INSTRUMENTATION_INSTALL_TIME", - Value: installTime, - }, - { - Name: "DD_INSTRUMENTATION_INSTALL_ID", - Value: uuid, - }, - }, + expectedEnvs: nil, expectedInjectedLibraries: map[string]string{}, expectedSecurityContext: &corev1.SecurityContext{}, wantErr: false, @@ -2415,16 +2406,7 @@ func TestInjectAutoInstrumentation(t *testing.T) { ParentKind: "replicaset", ParentName: "test-deployment-123", }.Create(), - expectedEnvs: []corev1.EnvVar{ - { - Name: "DD_INSTRUMENTATION_INSTALL_TIME", - Value: installTime, - }, - { - Name: "DD_INSTRUMENTATION_INSTALL_ID", - Value: uuid, - }, - }, + expectedEnvs: nil, expectedInjectedLibraries: map[string]string{}, expectedSecurityContext: &corev1.SecurityContext{}, wantErr: false, @@ -2495,16 +2477,7 @@ func TestInjectAutoInstrumentation(t *testing.T) { ParentKind: "replicaset", ParentName: "test-deployment-123", }.Create(), - expectedEnvs: []corev1.EnvVar{ - { - Name: "DD_INSTRUMENTATION_INSTALL_TIME", - Value: installTime, - }, - { - Name: "DD_INSTRUMENTATION_INSTALL_ID", - Value: uuid, - }, - }, + expectedEnvs: nil, expectedInjectedLibraries: map[string]string{}, expectedSecurityContext: &corev1.SecurityContext{}, wantErr: false, @@ -2517,16 +2490,7 @@ func TestInjectAutoInstrumentation(t *testing.T) { ParentKind: "replicaset", ParentName: "test-deployment-123", }.Create(), - expectedEnvs: []corev1.EnvVar{ - { - Name: "DD_INSTRUMENTATION_INSTALL_TIME", - Value: installTime, - }, - { - Name: "DD_INSTRUMENTATION_INSTALL_ID", - Value: uuid, - }, - }, + expectedEnvs: nil, expectedInjectedLibraries: map[string]string{}, expectedSecurityContext: &corev1.SecurityContext{}, wantErr: false, diff --git a/releasenotes-dca/notes/admission-controller-disabled-no-env-vars-135252f0eb8ddef4.yaml b/releasenotes-dca/notes/admission-controller-disabled-no-env-vars-135252f0eb8ddef4.yaml new file mode 100644 index 0000000000000..763bb18a91d83 --- /dev/null +++ b/releasenotes-dca/notes/admission-controller-disabled-no-env-vars-135252f0eb8ddef4.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + The auto-instrumentation webhook no longer injects the default environment + variables when disabled. From b2fbed91df80d72c08950b8433e6981c3bc660b0 Mon Sep 17 00:00:00 2001 From: Florent Clarret Date: Mon, 9 Dec 2024 19:08:39 +0100 Subject: [PATCH 063/303] Fix the Create RC PR Workflow (#31892) --- .github/workflows/create_rc_pr.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/create_rc_pr.yml b/.github/workflows/create_rc_pr.yml index 874944a0fe95d..5539dc44532b1 100644 --- a/.github/workflows/create_rc_pr.yml +++ b/.github/workflows/create_rc_pr.yml @@ -62,8 +62,6 @@ jobs: - name: Checkout release branch uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 with: - ref: ${{ matrix.value }} - fetch-depth: 0 persist-credentials: true - name: Install python From 426d979ee9ba40fe4cb65a28067a4d4fdcf022c1 Mon Sep 17 00:00:00 2001 From: Adel Haj Hassan <41540817+adel121@users.noreply.github.com> Date: Mon, 9 Dec 2024 19:49:12 +0100 Subject: [PATCH 064/303] [CONTP-521] use a hybrid health check for wlm kubeapiserver collector (#31876) --- .../core/healthprobe/impl/healthprobe_test.go | 3 ++- .../internal/kubeapiserver/kubeapiserver.go | 2 +- pkg/status/health/global.go | 16 +++++++------ pkg/status/health/health.go | 23 ++++++++----------- pkg/status/health/health_test.go | 6 ++--- pkg/status/health/options.go | 15 ++++++++++++ 6 files changed, 40 insertions(+), 25 deletions(-) create mode 100644 pkg/status/health/options.go diff --git a/comp/core/healthprobe/impl/healthprobe_test.go b/comp/core/healthprobe/impl/healthprobe_test.go index 0dc9b5d271bad..7774e42043765 100644 --- a/comp/core/healthprobe/impl/healthprobe_test.go +++ b/comp/core/healthprobe/impl/healthprobe_test.go @@ -13,11 +13,12 @@ import ( "net/http/httptest" "testing" + "github.com/stretchr/testify/assert" + healthprobeComponent "github.com/DataDog/datadog-agent/comp/core/healthprobe/def" logmock "github.com/DataDog/datadog-agent/comp/core/log/mock" compdef "github.com/DataDog/datadog-agent/comp/def" "github.com/DataDog/datadog-agent/pkg/status/health" - "github.com/stretchr/testify/assert" ) func TestServer(t *testing.T) { diff --git a/comp/core/workloadmeta/collectors/internal/kubeapiserver/kubeapiserver.go b/comp/core/workloadmeta/collectors/internal/kubeapiserver/kubeapiserver.go index 0666db1755b75..7def82fc21d9b 100644 --- a/comp/core/workloadmeta/collectors/internal/kubeapiserver/kubeapiserver.go +++ b/comp/core/workloadmeta/collectors/internal/kubeapiserver/kubeapiserver.go @@ -224,7 +224,7 @@ func runStartupCheck(ctx context.Context, stores []*reflectorStore) { // There is no way to ensure liveness correctly as it would need to be plugged inside the // inner loop of Reflector. // However, we add Startup when we got at least some data. - startupHealthCheck := health.RegisterStartup(componentName) + startupHealthCheck := health.RegisterReadiness(componentName, health.Once) // Checked synced, in its own scope to cleanly un-reference the syncTimer { diff --git a/pkg/status/health/global.go b/pkg/status/health/global.go index 32af425cbe111..9f6c031f22128 100644 --- a/pkg/status/health/global.go +++ b/pkg/status/health/global.go @@ -12,21 +12,23 @@ import ( var readinessAndLivenessCatalog = newCatalog() var readinessOnlyCatalog = newCatalog() -var startupOnlyCatalog = newStartupCatalog() +var startupOnlyCatalog = newCatalog() // RegisterReadiness registers a component for readiness check with the default 30 seconds timeout, returns a token -func RegisterReadiness(name string) *Handle { - return readinessOnlyCatalog.register(name) +func RegisterReadiness(name string, options ...Option) *Handle { + return readinessOnlyCatalog.register(name, options...) } // RegisterLiveness registers a component for liveness check with the default 30 seconds timeout, returns a token -func RegisterLiveness(name string) *Handle { - return readinessAndLivenessCatalog.register(name) +func RegisterLiveness(name string, options ...Option) *Handle { + return readinessAndLivenessCatalog.register(name, options...) } // RegisterStartup registers a component for startup check, returns a token -func RegisterStartup(name string) *Handle { - return startupOnlyCatalog.register(name) +func RegisterStartup(name string, options ...Option) *Handle { + // Startup health checks are registered with Once option because, by design, they should stop being checked + // once they are marked as healthy once + return startupOnlyCatalog.register(name, append(options, Once)...) } // Deregister a component from the healthcheck diff --git a/pkg/status/health/health.go b/pkg/status/health/health.go index 7e3e3327bb794..0b1a0e8a69c96 100644 --- a/pkg/status/health/health.go +++ b/pkg/status/health/health.go @@ -29,33 +29,25 @@ type component struct { name string healthChan chan time.Time healthy bool + // if set to true, once the check is healthy, we mark it as healthy forever and we stop checking it + once bool } type catalog struct { sync.RWMutex components map[*Handle]*component latestRun time.Time - startup bool } func newCatalog() *catalog { return &catalog{ components: make(map[*Handle]*component), latestRun: time.Now(), // Start healthy - startup: false, - } -} - -func newStartupCatalog() *catalog { - return &catalog{ - components: make(map[*Handle]*component), - latestRun: time.Now(), // Start healthy - startup: true, } } // register a component with the default 30 seconds timeout, returns a token -func (c *catalog) register(name string) *Handle { +func (c *catalog) register(name string, options ...Option) *Handle { c.Lock() defer c.Unlock() @@ -68,6 +60,11 @@ func (c *catalog) register(name string) *Handle { healthChan: make(chan time.Time, bufferSize), healthy: false, } + + for _, option := range options { + option(component) + } + h := &Handle{ C: component.healthChan, } @@ -107,8 +104,8 @@ func (c *catalog) pingComponents(healthDeadline time.Time) bool { c.Lock() defer c.Unlock() for _, component := range c.components { - // In startup mode, we skip already healthy components. - if c.startup && component.healthy { + // We skip components that are registered to be skipped once they pass once + if component.healthy && component.once { continue } select { diff --git a/pkg/status/health/health_test.go b/pkg/status/health/health_test.go index f1d934fb157e5..37a57773a1d73 100644 --- a/pkg/status/health/health_test.go +++ b/pkg/status/health/health_test.go @@ -124,9 +124,9 @@ func TestGetHealthy(t *testing.T) { assert.Len(t, status.Unhealthy, 0) } -func TestStartupCatalog(t *testing.T) { - cat := newStartupCatalog() - token := cat.register("test1") +func TestCatalogWithOnceComponent(t *testing.T) { + cat := newCatalog() + token := cat.register("test1", Once) // Start unhealthy status := cat.getStatus() diff --git a/pkg/status/health/options.go b/pkg/status/health/options.go new file mode 100644 index 0000000000000..c2182a6a3d485 --- /dev/null +++ b/pkg/status/health/options.go @@ -0,0 +1,15 @@ +// 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 health implements the internal healthcheck +package health + +// Option represents the application of an option to a component's health check +type Option func(*component) + +// Once has the effect of not checking the health of a component once it has been marked healthy once +func Once(c *component) { + c.once = true +} From cefb01ce6f8d35672b2fca8dc3cd8939fc1dff0b Mon Sep 17 00:00:00 2001 From: sabrina lu Date: Mon, 9 Dec 2024 14:01:49 -0500 Subject: [PATCH 065/303] add agent onboarding as codeowners to install related files (#31893) --- .github/CODEOWNERS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4f6fc8357ea4e..cd6fe7ade112c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -25,7 +25,7 @@ /CHANGELOG.rst @DataDog/agent-delivery /CHANGELOG-DCA.rst @DataDog/container-integrations @DataDog/container-platform -/CHANGELOG-INSTALLSCRIPT.rst @DataDog/agent-delivery +/CHANGELOG-INSTALLSCRIPT.rst @DataDog/agent-delivery @DataDog/container-ecosystems /*.md @DataDog/agent-devx-infra @DataDog/documentation /NOTICE @DataDog/agent-delivery @DataDog/documentation @@ -91,7 +91,7 @@ /.gitlab/binary_build/include.yml @DataDog/agent-devx-infra /.gitlab/binary_build/linux.yml @DataDog/agent-devx-infra @DataDog/agent-delivery /.gitlab/functional_test/include.yml @DataDog/agent-devx-infra -/.gitlab/install_script_testing/install_script_testing.yml @DataDog/agent-delivery +/.gitlab/install_script_testing/install_script_testing.yml @DataDog/agent-delivery @DataDog/container-ecosystems /.gitlab/integration_test/dogstatsd.yml @DataDog/agent-devx-infra @DataDog/agent-metrics-logs /.gitlab/integration_test/include.yml @DataDog/agent-devx-infra /.gitlab/integration_test/linux.yml @DataDog/agent-devx-infra From e08947533be88e02dba2fcde55055d5495bff9d9 Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Mon, 9 Dec 2024 20:42:01 +0100 Subject: [PATCH 066/303] [CWS] remove watch dir option from directory provider (#31884) Co-authored-by: Sandra (neko) <165049174+neko-dd@users.noreply.github.com> --- .../subcommands/runtime/command.go | 4 +- .../subcommands/runtime/command.go | 4 +- pkg/config/setup/system_probe_cws.go | 1 - pkg/security/config/config.go | 3 - pkg/security/rules/engine.go | 2 +- pkg/security/secl/go.mod | 1 - pkg/security/secl/go.sum | 2 - pkg/security/secl/rules/policy_dir.go | 98 +------------------ pkg/security/secl/rules/policy_test.go | 12 +-- pkg/security/tests/module_tester.go | 2 +- ...ove-watch-dir-option-f8faee4937353316.yaml | 13 +++ 11 files changed, 29 insertions(+), 113 deletions(-) create mode 100644 releasenotes/notes/cws-remove-watch-dir-option-f8faee4937353316.yaml diff --git a/cmd/security-agent/subcommands/runtime/command.go b/cmd/security-agent/subcommands/runtime/command.go index 0b32529c60d36..08bbdcea4c787 100644 --- a/cmd/security-agent/subcommands/runtime/command.go +++ b/cmd/security-agent/subcommands/runtime/command.go @@ -472,7 +472,7 @@ func checkPoliciesLocal(args *checkPoliciesCliParams, writer io.Writer) error { }, } - provider, err := rules.NewPoliciesDirProvider(args.dir, false) + provider, err := rules.NewPoliciesDirProvider(args.dir) if err != nil { return err } @@ -611,7 +611,7 @@ func evalRule(_ log.Component, _ config.Component, _ secrets.Component, evalArgs }, } - provider, err := rules.NewPoliciesDirProvider(policiesDir, false) + provider, err := rules.NewPoliciesDirProvider(policiesDir) if err != nil { return err } diff --git a/cmd/system-probe/subcommands/runtime/command.go b/cmd/system-probe/subcommands/runtime/command.go index e6030500a9b17..e0d17e16d0a2e 100644 --- a/cmd/system-probe/subcommands/runtime/command.go +++ b/cmd/system-probe/subcommands/runtime/command.go @@ -466,7 +466,7 @@ func checkPoliciesLocal(args *checkPoliciesCliParams, writer io.Writer) error { }, } - provider, err := rules.NewPoliciesDirProvider(args.dir, false) + provider, err := rules.NewPoliciesDirProvider(args.dir) if err != nil { return err } @@ -583,7 +583,7 @@ func evalRule(_ log.Component, _ config.Component, _ secrets.Component, evalArgs }, } - provider, err := rules.NewPoliciesDirProvider(policiesDir, false) + provider, err := rules.NewPoliciesDirProvider(policiesDir) if err != nil { return err } diff --git a/pkg/config/setup/system_probe_cws.go b/pkg/config/setup/system_probe_cws.go index b72d72df3c971..d2cc6276907d3 100644 --- a/pkg/config/setup/system_probe_cws.go +++ b/pkg/config/setup/system_probe_cws.go @@ -20,7 +20,6 @@ func initCWSSystemProbeConfig(cfg pkgconfigmodel.Config) { // CWS - general config cfg.BindEnvAndSetDefault("runtime_security_config.enabled", false) cfg.BindEnv("runtime_security_config.fim_enabled") - cfg.BindEnvAndSetDefault("runtime_security_config.policies.watch_dir", false) cfg.BindEnvAndSetDefault("runtime_security_config.policies.monitor.enabled", false) cfg.BindEnvAndSetDefault("runtime_security_config.policies.monitor.per_rule_enabled", false) cfg.BindEnvAndSetDefault("runtime_security_config.policies.monitor.report_internal_policies", false) diff --git a/pkg/security/config/config.go b/pkg/security/config/config.go index fc9cbcecc6a4b..ab6b0b6b591e1 100644 --- a/pkg/security/config/config.go +++ b/pkg/security/config/config.go @@ -45,8 +45,6 @@ type RuntimeSecurityConfig struct { RuntimeEnabled bool // PoliciesDir defines the folder in which the policy files are located PoliciesDir string - // WatchPoliciesDir activate policy dir inotify - WatchPoliciesDir bool // PolicyMonitorEnabled enable policy monitoring PolicyMonitorEnabled bool // PolicyMonitorPerRuleEnabled enabled per-rule policy monitoring @@ -353,7 +351,6 @@ func NewRuntimeSecurityConfig() (*RuntimeSecurityConfig, error) { // policy & ruleset PoliciesDir: pkgconfigsetup.SystemProbe().GetString("runtime_security_config.policies.dir"), - WatchPoliciesDir: pkgconfigsetup.SystemProbe().GetBool("runtime_security_config.policies.watch_dir"), PolicyMonitorEnabled: pkgconfigsetup.SystemProbe().GetBool("runtime_security_config.policies.monitor.enabled"), PolicyMonitorPerRuleEnabled: pkgconfigsetup.SystemProbe().GetBool("runtime_security_config.policies.monitor.per_rule_enabled"), PolicyMonitorReportInternalPolicies: pkgconfigsetup.SystemProbe().GetBool("runtime_security_config.policies.monitor.report_internal_policies"), diff --git a/pkg/security/rules/engine.go b/pkg/security/rules/engine.go index 6b0f98fd15666..ffb73244b6c2d 100644 --- a/pkg/security/rules/engine.go +++ b/pkg/security/rules/engine.go @@ -377,7 +377,7 @@ func (e *RuleEngine) gatherDefaultPolicyProviders() []rules.PolicyProvider { } // directory policy provider - if provider, err := rules.NewPoliciesDirProvider(e.config.PoliciesDir, e.config.WatchPoliciesDir); err != nil { + if provider, err := rules.NewPoliciesDirProvider(e.config.PoliciesDir); err != nil { seclog.Errorf("failed to load local policies: %s", err) } else { policyProviders = append(policyProviders, provider) diff --git a/pkg/security/secl/go.mod b/pkg/security/secl/go.mod index 9c3d225dcdad1..e5f0a3c820483 100644 --- a/pkg/security/secl/go.mod +++ b/pkg/security/secl/go.mod @@ -8,7 +8,6 @@ require ( github.com/alecthomas/participle v0.7.1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc github.com/fatih/structtag v1.2.0 - github.com/fsnotify/fsnotify v1.8.0 github.com/google/go-cmp v0.6.0 github.com/google/gopacket v1.1.19 github.com/hashicorp/go-multierror v1.1.1 diff --git a/pkg/security/secl/go.sum b/pkg/security/secl/go.sum index 18391dc2e1b6e..0c694b56983cf 100644 --- a/pkg/security/secl/go.sum +++ b/pkg/security/secl/go.sum @@ -17,8 +17,6 @@ github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4 github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= -github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= diff --git a/pkg/security/secl/rules/policy_dir.go b/pkg/security/secl/rules/policy_dir.go index 119f31a40f461..f1c31ca699b46 100644 --- a/pkg/security/secl/rules/policy_dir.go +++ b/pkg/security/secl/rules/policy_dir.go @@ -7,12 +7,10 @@ package rules import ( - "context" "os" "path/filepath" "sort" - "github.com/fsnotify/fsnotify" "github.com/hashicorp/go-multierror" ) @@ -25,17 +23,10 @@ var _ PolicyProvider = (*PoliciesDirProvider)(nil) // PoliciesDirProvider defines a new policy dir provider type PoliciesDirProvider struct { PoliciesDir string - - onNewPoliciesReadyCb func() - cancelFnc func() - watcher *fsnotify.Watcher - watchedFiles []string } // SetOnNewPoliciesReadyCb implements the policy provider interface -func (p *PoliciesDirProvider) SetOnNewPoliciesReadyCb(cb func()) { - p.onNewPoliciesReadyCb = cb -} +func (p *PoliciesDirProvider) SetOnNewPoliciesReadyCb(_ func()) {} // Start starts the policy dir provider func (p *PoliciesDirProvider) Start() {} @@ -92,14 +83,6 @@ func (p *PoliciesDirProvider) LoadPolicies(macroFilters []MacroFilter, ruleFilte errs = multierror.Append(errs, err) } - // remove oldest watched files - if p.watcher != nil { - for _, watched := range p.watchedFiles { - _ = p.watcher.Remove(watched) - } - p.watchedFiles = p.watchedFiles[0:0] - } - // Load and parse policies for _, filename := range policyFiles { policy, err := p.loadPolicy(filename, macroFilters, ruleFilters) @@ -112,14 +95,6 @@ func (p *PoliciesDirProvider) LoadPolicies(macroFilters []MacroFilter, ruleFilte } policies = append(policies, policy) - - if p.watcher != nil { - if err := p.watcher.Add(filename); err != nil { - errs = multierror.Append(errs, err) - } else { - p.watchedFiles = append(p.watchedFiles, filename) - } - } } return policies, errs @@ -127,79 +102,14 @@ func (p *PoliciesDirProvider) LoadPolicies(macroFilters []MacroFilter, ruleFilte // Close stops policy provider interface func (p *PoliciesDirProvider) Close() error { - if p.cancelFnc != nil { - p.cancelFnc() - } - - if p.watcher != nil { - p.watcher.Close() - } return nil } -func filesEqual(a []string, b []string) bool { - if len(a) != len(b) { - return false - } - for i, v := range a { - if v != b[i] { - return false - } - } - return true -} - -func (p *PoliciesDirProvider) watch(ctx context.Context) { - go func() { - for { - select { - case <-ctx.Done(): - return - case event, ok := <-p.watcher.Events: - if !ok { - return - } - - if event.Op&(fsnotify.Create|fsnotify.Remove) > 0 { - files, _ := p.getPolicyFiles() - if !filesEqual(files, p.watchedFiles) { - p.onNewPoliciesReadyCb() - } - } else if event.Op&fsnotify.Write > 0 && filepath.Ext(event.Name) == policyExtension { - p.onNewPoliciesReadyCb() - } - case _, ok := <-p.watcher.Errors: - if !ok { - return - } - } - } - }() -} - // NewPoliciesDirProvider returns providers for the given policies dir -func NewPoliciesDirProvider(policiesDir string, watch bool) (*PoliciesDirProvider, error) { - p := &PoliciesDirProvider{ +func NewPoliciesDirProvider(policiesDir string) (*PoliciesDirProvider, error) { + return &PoliciesDirProvider{ PoliciesDir: policiesDir, - } - - if watch { - var err error - if p.watcher, err = fsnotify.NewWatcher(); err != nil { - return nil, err - } - - if err := p.watcher.Add(policiesDir); err != nil { - p.watcher.Close() - return nil, err - } - - var ctx context.Context - ctx, p.cancelFnc = context.WithCancel(context.Background()) - go p.watch(ctx) - } - - return p, nil + }, nil } // Type returns the type of policy dir provider diff --git a/pkg/security/secl/rules/policy_test.go b/pkg/security/secl/rules/policy_test.go index e6252c10593f1..da1fda9740860 100644 --- a/pkg/security/secl/rules/policy_test.go +++ b/pkg/security/secl/rules/policy_test.go @@ -75,7 +75,7 @@ func TestMacroMerge(t *testing.T) { event.SetFieldValue("open.file.path", "/tmp/test") event.SetFieldValue("process.comm", "/usr/bin/vi") - provider, err := NewPoliciesDirProvider(tmpDir, false) + provider, err := NewPoliciesDirProvider(tmpDir) if err != nil { t.Fatal(err) } @@ -150,7 +150,7 @@ func TestRuleMerge(t *testing.T) { t.Fatal(err) } - provider, err := NewPoliciesDirProvider(tmpDir, false) + provider, err := NewPoliciesDirProvider(tmpDir) if err != nil { t.Fatal(err) } @@ -284,7 +284,7 @@ func TestActionSetVariable(t *testing.T) { t.Fatal(err) } - provider, err := NewPoliciesDirProvider(tmpDir, false) + provider, err := NewPoliciesDirProvider(tmpDir) if err != nil { t.Fatal(err) } @@ -354,7 +354,7 @@ func TestActionSetVariableTTL(t *testing.T) { t.Fatal(err) } - provider, err := NewPoliciesDirProvider(tmpDir, false) + provider, err := NewPoliciesDirProvider(tmpDir) if err != nil { t.Fatal(err) } @@ -420,7 +420,7 @@ func TestActionSetVariableConflict(t *testing.T) { t.Fatal(err) } - provider, err := NewPoliciesDirProvider(tmpDir, false) + provider, err := NewPoliciesDirProvider(tmpDir) if err != nil { t.Fatal(err) } @@ -441,7 +441,7 @@ func loadPolicy(t *testing.T, testPolicy *PolicyDef, policyOpts PolicyLoaderOpts t.Fatal(err) } - provider, err := NewPoliciesDirProvider(tmpDir, false) + provider, err := NewPoliciesDirProvider(tmpDir) if err != nil { t.Fatal(err) } diff --git a/pkg/security/tests/module_tester.go b/pkg/security/tests/module_tester.go index 22711615cc70f..0b01cbcd72d49 100644 --- a/pkg/security/tests/module_tester.go +++ b/pkg/security/tests/module_tester.go @@ -118,7 +118,7 @@ func (tm *testModule) reloadPolicies() error { log.Debugf("reload policies with cfgDir: %s", commonCfgDir) bundledPolicyProvider := bundled.NewPolicyProvider(tm.eventMonitor.Probe.Config.RuntimeSecurity) - policyDirProvider, err := rules.NewPoliciesDirProvider(commonCfgDir, false) + policyDirProvider, err := rules.NewPoliciesDirProvider(commonCfgDir) if err != nil { return err } diff --git a/releasenotes/notes/cws-remove-watch-dir-option-f8faee4937353316.yaml b/releasenotes/notes/cws-remove-watch-dir-option-f8faee4937353316.yaml new file mode 100644 index 0000000000000..320f7e164f786 --- /dev/null +++ b/releasenotes/notes/cws-remove-watch-dir-option-f8faee4937353316.yaml @@ -0,0 +1,13 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +deprecations: + - | + CWS: the `runtime_security_config.policies.watch_dir` option has been removed. + Use remote configuration for dynamically updating policies, or send + the `SIGHUP` signal to the `system-probe` process to reload the policies. From 4f0073dbe2585abdc01c50d1188c3609c6bcf3f9 Mon Sep 17 00:00:00 2001 From: Jack Phillips Date: Mon, 9 Dec 2024 16:02:16 -0500 Subject: [PATCH 067/303] Update filesystem permission to restrict access to datadog user (#31770) Co-authored-by: Branden Clark Co-authored-by: Rosa Trieu <107086888+rtrieu@users.noreply.github.com> --- comp/api/authtoken/go.mod | 6 +- comp/core/config/go.mod | 6 +- comp/core/log/impl-trace/go.mod | 6 +- comp/core/log/impl/go.mod | 6 +- comp/core/log/mock/go.mod | 4 +- comp/core/status/statusimpl/go.mod | 6 +- comp/forwarder/defaultforwarder/go.mod | 6 +- .../orchestrator/orchestratorinterface/go.mod | 6 +- comp/logs/agent/config/go.mod | 6 +- comp/otelcol/converter/impl/go.mod | 6 +- comp/otelcol/ddflareextension/impl/go.mod | 6 +- comp/otelcol/logsagentpipeline/go.mod | 6 +- .../logsagentpipelineimpl/go.mod | 6 +- .../exporter/datadogexporter/go.mod | 6 +- .../exporter/logsagentexporter/go.mod | 6 +- .../exporter/serializerexporter/go.mod | 6 +- comp/otelcol/otlp/testutil/go.mod | 6 +- comp/serializer/compression/go.mod | 6 +- go.mod | 6 +- pkg/api/go.mod | 6 +- pkg/config/env/go.mod | 6 +- pkg/config/mock/go.mod | 6 +- pkg/config/remote/go.mod | 6 +- pkg/config/setup/go.mod | 6 +- pkg/config/utils/go.mod | 6 +- pkg/logs/auditor/go.mod | 6 +- pkg/logs/client/go.mod | 6 +- pkg/logs/diagnostic/go.mod | 6 +- pkg/logs/message/go.mod | 6 +- pkg/logs/pipeline/go.mod | 6 +- pkg/logs/processor/go.mod | 6 +- pkg/logs/sds/go.mod | 6 +- pkg/logs/sender/go.mod | 6 +- pkg/logs/sources/go.mod | 6 +- pkg/logs/util/testutils/go.mod | 6 +- pkg/metrics/go.mod | 6 +- pkg/serializer/go.mod | 6 +- pkg/util/filesystem/go.mod | 7 +- pkg/util/filesystem/go.sum | 1 - pkg/util/filesystem/permission_windows.go | 31 +++----- .../filesystem/permission_windows_test.go | 73 +++++++++++++++++++ pkg/util/flavor/go.mod | 6 +- pkg/util/grpc/go.mod | 6 +- pkg/util/http/go.mod | 6 +- pkg/util/log/setup/go.mod | 6 +- pkg/util/system/go.mod | 6 +- pkg/util/winutil/service.go | 17 +++++ pkg/util/winutil/users.go | 51 +++++++++++++ pkg/util/winutil/users_test.go | 26 +++++++ ...ns-to-dduser-windows-6e9940175f9130ff.yaml | 12 +++ test/otel/go.mod | 6 +- 51 files changed, 324 insertions(+), 150 deletions(-) create mode 100644 pkg/util/filesystem/permission_windows_test.go create mode 100644 releasenotes/notes/file-permissions-to-dduser-windows-6e9940175f9130ff.yaml diff --git a/comp/api/authtoken/go.mod b/comp/api/authtoken/go.mod index 532d1be88a5c4..233f326a297d1 100644 --- a/comp/api/authtoken/go.mod +++ b/comp/api/authtoken/go.mod @@ -68,13 +68,13 @@ require ( github.com/DataDog/datadog-agent/pkg/util/executable v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/log/setup v0.58.0-devel // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/comp/core/config/go.mod b/comp/core/config/go.mod index 2973aa62895a7..bed15530c21b9 100644 --- a/comp/core/config/go.mod +++ b/comp/core/config/go.mod @@ -42,7 +42,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/defaultpaths v0.0.0-00010101000000-000000000000 github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 github.com/DataDog/viper v1.13.5 github.com/stretchr/testify v1.10.0 go.uber.org/fx v1.23.0 @@ -60,9 +60,9 @@ require ( github.com/DataDog/datadog-agent/pkg/util/executable v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/comp/core/log/impl-trace/go.mod b/comp/core/log/impl-trace/go.mod index 46dbc7aba09c2..2ee9571d6657a 100644 --- a/comp/core/log/impl-trace/go.mod +++ b/comp/core/log/impl-trace/go.mod @@ -45,7 +45,7 @@ require ( github.com/DataDog/datadog-agent/pkg/config/env v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/fxutil v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect; v2.6 github.com/stretchr/testify v1.10.0 go.uber.org/fx v1.23.0 // indirect @@ -72,10 +72,10 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/comp/core/log/impl/go.mod b/comp/core/log/impl/go.mod index 116cf25e6c584..9d9c721ce2ba8 100644 --- a/comp/core/log/impl/go.mod +++ b/comp/core/log/impl/go.mod @@ -39,7 +39,7 @@ require ( github.com/DataDog/datadog-agent/comp/core/log/def v0.0.0-00010101000000-000000000000 github.com/DataDog/datadog-agent/comp/def v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/config/mock v0.59.0 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/util/log/setup v0.0.0-00010101000000-000000000000 github.com/stretchr/testify v1.10.0 ) @@ -61,10 +61,10 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/comp/core/log/mock/go.mod b/comp/core/log/mock/go.mod index 96c709d9f2f32..f8515313b702d 100644 --- a/comp/core/log/mock/go.mod +++ b/comp/core/log/mock/go.mod @@ -31,7 +31,7 @@ replace ( require ( github.com/DataDog/datadog-agent/comp/core/log/def v0.0.0-00010101000000-000000000000 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/util/log/setup v0.0.0-00010101000000-000000000000 github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 ) @@ -40,7 +40,7 @@ require ( github.com/DataDog/datadog-agent/pkg/config/model v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/config/nodetreemodel v0.60.0-devel // indirect github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.60.0-devel // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect diff --git a/comp/core/status/statusimpl/go.mod b/comp/core/status/statusimpl/go.mod index bc13e9cf4a943..600683ed2cceb 100644 --- a/comp/core/status/statusimpl/go.mod +++ b/comp/core/status/statusimpl/go.mod @@ -70,14 +70,14 @@ require ( github.com/DataDog/datadog-agent/pkg/util/executable v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/log/setup v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/comp/forwarder/defaultforwarder/go.mod b/comp/forwarder/defaultforwarder/go.mod index a6e6b5f2297da..55d901ebce30c 100644 --- a/comp/forwarder/defaultforwarder/go.mod +++ b/comp/forwarder/defaultforwarder/go.mod @@ -71,7 +71,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/fxutil v0.57.1 github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 github.com/DataDog/datadog-agent/pkg/version v0.57.1 github.com/golang/protobuf v1.5.4 github.com/hashicorp/go-multierror v1.1.1 @@ -94,12 +94,12 @@ require ( github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.60.0-devel // indirect github.com/DataDog/datadog-agent/pkg/util/executable v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/log/setup v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/beorn7/perks v1.0.1 // indirect diff --git a/comp/forwarder/orchestrator/orchestratorinterface/go.mod b/comp/forwarder/orchestrator/orchestratorinterface/go.mod index d5f8d766d32f6..63ef4e9d8c4a8 100644 --- a/comp/forwarder/orchestrator/orchestratorinterface/go.mod +++ b/comp/forwarder/orchestrator/orchestratorinterface/go.mod @@ -94,13 +94,13 @@ require ( github.com/DataDog/datadog-agent/pkg/util/fxutil v0.57.1 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.57.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/comp/logs/agent/config/go.mod b/comp/logs/agent/config/go.mod index 91137e7bcc76c..733a8bf8b17c7 100644 --- a/comp/logs/agent/config/go.mod +++ b/comp/logs/agent/config/go.mod @@ -43,7 +43,7 @@ require ( github.com/DataDog/datadog-agent/pkg/config/structure v0.59.0 github.com/DataDog/datadog-agent/pkg/config/utils v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 github.com/DataDog/viper v1.13.5 github.com/stretchr/testify v1.10.0 @@ -64,10 +64,10 @@ require ( github.com/DataDog/datadog-agent/pkg/util/filesystem v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/comp/otelcol/converter/impl/go.mod b/comp/otelcol/converter/impl/go.mod index b321ff5db70ad..f4c649d45be37 100644 --- a/comp/otelcol/converter/impl/go.mod +++ b/comp/otelcol/converter/impl/go.mod @@ -69,13 +69,13 @@ require ( github.com/DataDog/datadog-agent/pkg/util/filesystem v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.2 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/comp/otelcol/ddflareextension/impl/go.mod b/comp/otelcol/ddflareextension/impl/go.mod index 6c75776d13338..5f0036a040fb9 100644 --- a/comp/otelcol/ddflareextension/impl/go.mod +++ b/comp/otelcol/ddflareextension/impl/go.mod @@ -251,17 +251,17 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/http v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/json v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/log/setup v0.58.0-devel // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/sort v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/startstop v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-api-client-go/v2 v2.31.0 // indirect github.com/DataDog/datadog-go/v5 v5.5.0 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect diff --git a/comp/otelcol/logsagentpipeline/go.mod b/comp/otelcol/logsagentpipeline/go.mod index 0b8f861795c6c..40a8e60d9efba 100644 --- a/comp/otelcol/logsagentpipeline/go.mod +++ b/comp/otelcol/logsagentpipeline/go.mod @@ -96,15 +96,15 @@ require ( github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/startstop v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/viper v1.13.5 // indirect diff --git a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod index ca80a71894cb3..25af1fd191eb1 100644 --- a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod +++ b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod @@ -112,14 +112,14 @@ require ( github.com/DataDog/datadog-agent/pkg/util/filesystem v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/log/setup v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/viper v1.13.5 // indirect diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod index 109071e12c948..1fbae2bae0cf9 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod @@ -186,16 +186,16 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/json v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/sort v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/startstop v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.57.1 // indirect github.com/DataDog/datadog-api-client-go/v2 v2.31.0 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod index 63514d6b9afdb..b2fc1508016cf 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod @@ -47,7 +47,7 @@ require ( github.com/DataDog/datadog-agent/comp/otelcol/otlp/testutil v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/message v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/sources v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0 github.com/stormcat24/protodep v0.1.8 @@ -80,13 +80,13 @@ require ( github.com/DataDog/datadog-agent/pkg/util/executable v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/datadog-api-client-go/v2 v2.31.0 // indirect github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0 // indirect diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod index 1ca371316a075..f469f0ac3856a 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod @@ -68,7 +68,7 @@ require ( github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/serializer v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/tagset v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0 github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 @@ -129,11 +129,11 @@ require ( github.com/DataDog/datadog-agent/pkg/util/json v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/sort v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.57.1 // indirect github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect diff --git a/comp/otelcol/otlp/testutil/go.mod b/comp/otelcol/otlp/testutil/go.mod index 023eadca279c9..08136f64f178e 100644 --- a/comp/otelcol/otlp/testutil/go.mod +++ b/comp/otelcol/otlp/testutil/go.mod @@ -55,13 +55,13 @@ require ( github.com/DataDog/datadog-agent/pkg/util/executable v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/comp/serializer/compression/go.mod b/comp/serializer/compression/go.mod index 9e8574fe77f13..7575544de493a 100644 --- a/comp/serializer/compression/go.mod +++ b/comp/serializer/compression/go.mod @@ -36,7 +36,7 @@ replace ( require ( github.com/DataDog/datadog-agent/comp/core/config v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/zstd v1.5.6 ) @@ -58,10 +58,10 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/go.mod b/go.mod index 2c8473f077cef..c6af83af3b80c 100644 --- a/go.mod +++ b/go.mod @@ -154,9 +154,9 @@ require ( github.com/DataDog/datadog-agent/pkg/security/secl v0.56.0 github.com/DataDog/datadog-agent/pkg/trace v0.59.0 github.com/DataDog/datadog-agent/pkg/util/cgroups v0.59.0 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 github.com/DataDog/datadog-go/v5 v5.5.0 github.com/DataDog/datadog-operator v0.7.1-0.20241024104907-734366f3c0d1 github.com/DataDog/ebpf-manager v0.7.4 @@ -728,7 +728,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 github.com/DataDog/datadog-agent/pkg/util/testutil v0.59.0 github.com/DataDog/datadog-agent/pkg/util/uuid v0.59.0 - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 github.com/DataDog/datadog-agent/pkg/version v0.59.0 github.com/DataDog/go-libddwaf/v3 v3.5.1 github.com/DataDog/go-sqllexer v0.0.17 diff --git a/pkg/api/go.mod b/pkg/api/go.mod index b30cc5d081999..28a2032095417 100644 --- a/pkg/api/go.mod +++ b/pkg/api/go.mod @@ -43,7 +43,7 @@ require ( github.com/DataDog/datadog-agent/pkg/config/model v0.59.0 github.com/DataDog/datadog-agent/pkg/config/utils v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/filesystem v0.59.0 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 github.com/stretchr/testify v1.10.0 ) @@ -64,9 +64,9 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/pkg/config/env/go.mod b/pkg/config/env/go.mod index 7188be93ca23d..2d26e478fd4e7 100644 --- a/pkg/config/env/go.mod +++ b/pkg/config/env/go.mod @@ -8,18 +8,20 @@ replace ( github.com/DataDog/datadog-agent/pkg/util/log => ../../util/log/ github.com/DataDog/datadog-agent/pkg/util/scrubber => ../../util/scrubber/ github.com/DataDog/datadog-agent/pkg/util/system/socket => ../../util/system/socket/ + github.com/DataDog/datadog-agent/pkg/util/winutil => ../../util/winutil ) require ( github.com/DataDog/datadog-agent/pkg/config/model v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/filesystem v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/util/system/socket v0.56.0-rc.3 github.com/stretchr/testify v1.10.0 ) require ( - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/pkg/config/mock/go.mod b/pkg/config/mock/go.mod index 041266bf69dff..9fc526fc2c5de 100644 --- a/pkg/config/mock/go.mod +++ b/pkg/config/mock/go.mod @@ -45,13 +45,13 @@ require ( github.com/DataDog/datadog-agent/pkg/util/executable v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/pkg/config/remote/go.mod b/pkg/config/remote/go.mod index 5a00e0b18ab42..ab537bc1eb918 100644 --- a/pkg/config/remote/go.mod +++ b/pkg/config/remote/go.mod @@ -50,7 +50,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/grpc v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/util/uuid v0.56.0-rc.3 github.com/Masterminds/semver v1.5.0 github.com/benbjohnson/clock v1.3.5 @@ -83,7 +83,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/datadog-go/v5 v5.5.0 // indirect github.com/DataDog/go-libddwaf/v3 v3.5.1 // indirect @@ -121,7 +121,7 @@ require ( ) require ( - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/go-tuf v1.1.0-0.5.2 github.com/DataDog/viper v1.13.5 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/pkg/config/setup/go.mod b/pkg/config/setup/go.mod index c6855f5379f0f..772c6b0ee8e53 100644 --- a/pkg/config/setup/go.mod +++ b/pkg/config/setup/go.mod @@ -44,11 +44,11 @@ require ( github.com/DataDog/datadog-agent/pkg/util/executable v0.59.0 github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 github.com/stretchr/testify v1.10.0 go.uber.org/fx v1.23.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/pkg/config/utils/go.mod b/pkg/config/utils/go.mod index 4c39a2d8c2f78..0f4f9537ccb9f 100644 --- a/pkg/config/utils/go.mod +++ b/pkg/config/utils/go.mod @@ -38,7 +38,7 @@ require ( github.com/DataDog/datadog-agent/pkg/config/model v0.59.0 github.com/DataDog/datadog-agent/pkg/config/setup v0.59.0 github.com/DataDog/datadog-agent/pkg/config/structure v0.59.0 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 github.com/stretchr/testify v1.10.0 ) @@ -54,10 +54,10 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/pkg/logs/auditor/go.mod b/pkg/logs/auditor/go.mod index 9f000ce69c516..0ea48c9e7895a 100644 --- a/pkg/logs/auditor/go.mod +++ b/pkg/logs/auditor/go.mod @@ -47,7 +47,7 @@ require ( github.com/DataDog/datadog-agent/pkg/logs/message v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/sources v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/status/health v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/stretchr/testify v1.10.0 ) @@ -66,11 +66,11 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/pkg/logs/client/go.mod b/pkg/logs/client/go.mod index 9f0ec05367e17..cac2a5ce40f32 100644 --- a/pkg/logs/client/go.mod +++ b/pkg/logs/client/go.mod @@ -60,7 +60,7 @@ require ( github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 github.com/stretchr/testify v1.10.0 golang.org/x/net v0.31.0 @@ -84,11 +84,11 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/benbjohnson/clock v1.3.5 // indirect diff --git a/pkg/logs/diagnostic/go.mod b/pkg/logs/diagnostic/go.mod index e5350d717dc74..7f3357f60d406 100644 --- a/pkg/logs/diagnostic/go.mod +++ b/pkg/logs/diagnostic/go.mod @@ -67,14 +67,14 @@ require ( github.com/DataDog/datadog-agent/pkg/util/filesystem v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/pkg/logs/message/go.mod b/pkg/logs/message/go.mod index a7acc1d3319f8..b4b0ab2e615ed 100644 --- a/pkg/logs/message/go.mod +++ b/pkg/logs/message/go.mod @@ -42,7 +42,7 @@ replace ( require ( github.com/DataDog/datadog-agent/comp/logs/agent/config v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/sources v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/stretchr/testify v1.10.0 ) @@ -62,11 +62,11 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/pkg/logs/pipeline/go.mod b/pkg/logs/pipeline/go.mod index aa3225348e8e9..06f20a79a4199 100644 --- a/pkg/logs/pipeline/go.mod +++ b/pkg/logs/pipeline/go.mod @@ -71,7 +71,7 @@ require ( github.com/DataDog/datadog-agent/pkg/logs/sender v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/status/statusinterface v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/status/health v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/util/startstop v0.56.0-rc.3 github.com/hashicorp/go-multierror v1.1.1 github.com/stretchr/testify v1.10.0 @@ -100,11 +100,11 @@ require ( github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/viper v1.13.5 // indirect diff --git a/pkg/logs/processor/go.mod b/pkg/logs/processor/go.mod index 42339476936cc..858475c3a8a54 100644 --- a/pkg/logs/processor/go.mod +++ b/pkg/logs/processor/go.mod @@ -57,7 +57,7 @@ require ( github.com/DataDog/datadog-agent/pkg/logs/metrics v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/sds v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/sources v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/stretchr/testify v1.10.0 ) @@ -80,11 +80,11 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/viper v1.13.5 // indirect diff --git a/pkg/logs/sds/go.mod b/pkg/logs/sds/go.mod index b9c7c9706a849..c6f00cb1cf5e7 100644 --- a/pkg/logs/sds/go.mod +++ b/pkg/logs/sds/go.mod @@ -52,7 +52,7 @@ require ( github.com/DataDog/datadog-agent/pkg/config/model v0.59.0 github.com/DataDog/datadog-agent/pkg/logs/message v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 github.com/stretchr/testify v1.10.0 ) @@ -77,11 +77,11 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/pkg/logs/sender/go.mod b/pkg/logs/sender/go.mod index 085c081f2774e..2f438b2f0cc86 100644 --- a/pkg/logs/sender/go.mod +++ b/pkg/logs/sender/go.mod @@ -59,7 +59,7 @@ require ( github.com/DataDog/datadog-agent/pkg/logs/sources v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/status/statusinterface v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/benbjohnson/clock v1.3.5 github.com/stretchr/testify v1.10.0 ) @@ -84,11 +84,11 @@ require ( github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/pkg/logs/sources/go.mod b/pkg/logs/sources/go.mod index b81f5d609a906..a73c178af0286 100644 --- a/pkg/logs/sources/go.mod +++ b/pkg/logs/sources/go.mod @@ -41,7 +41,7 @@ replace ( require ( github.com/DataDog/datadog-agent/comp/logs/agent/config v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/status/utils v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 github.com/stretchr/testify v1.10.0 ) @@ -61,10 +61,10 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/pkg/logs/util/testutils/go.mod b/pkg/logs/util/testutils/go.mod index d7bbeef948cbb..d2aa1b59f3e82 100644 --- a/pkg/logs/util/testutils/go.mod +++ b/pkg/logs/util/testutils/go.mod @@ -58,14 +58,14 @@ require ( github.com/DataDog/datadog-agent/pkg/util/executable v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/pkg/metrics/go.mod b/pkg/metrics/go.mod index 2129bb8455c09..198885497f0b9 100644 --- a/pkg/metrics/go.mod +++ b/pkg/metrics/go.mod @@ -46,7 +46,7 @@ require ( github.com/DataDog/datadog-agent/pkg/tagset v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/buf v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 github.com/stretchr/testify v1.10.0 go.uber.org/atomic v1.11.0 @@ -67,11 +67,11 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/sort v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/pkg/serializer/go.mod b/pkg/serializer/go.mod index 5e0bd3938c766..4b6353199d174 100644 --- a/pkg/serializer/go.mod +++ b/pkg/serializer/go.mod @@ -77,7 +77,7 @@ require ( github.com/DataDog/datadog-agent/pkg/tagset v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/json v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/version v0.57.1 github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 github.com/gogo/protobuf v1.3.2 @@ -116,11 +116,11 @@ require ( github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/sort v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect github.com/DataDog/viper v1.13.5 // indirect diff --git a/pkg/util/filesystem/go.mod b/pkg/util/filesystem/go.mod index 1753d7310cddd..d1fbed28429ae 100644 --- a/pkg/util/filesystem/go.mod +++ b/pkg/util/filesystem/go.mod @@ -5,11 +5,13 @@ go 1.22.0 replace ( github.com/DataDog/datadog-agent/pkg/util/log => ../log/ github.com/DataDog/datadog-agent/pkg/util/scrubber => ../scrubber/ + github.com/DataDog/datadog-agent/pkg/util/winutil => ../winutil/ ) require ( - github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 github.com/shirou/gopsutil/v3 v3.24.5 github.com/stretchr/testify v1.10.0 @@ -17,11 +19,10 @@ require ( ) require ( - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/go-ole/go-ole v1.3.0 // indirect - github.com/kr/text v0.2.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect diff --git a/pkg/util/filesystem/go.sum b/pkg/util/filesystem/go.sum index e3cc0b7e589e0..7bde33aa41ad5 100644 --- a/pkg/util/filesystem/go.sum +++ b/pkg/util/filesystem/go.sum @@ -1,6 +1,5 @@ github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1c8PVE1PubbNx3mjUr09OqWGCs= github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= diff --git a/pkg/util/filesystem/permission_windows.go b/pkg/util/filesystem/permission_windows.go index 2ae2929ce1809..43819ee0be97c 100644 --- a/pkg/util/filesystem/permission_windows.go +++ b/pkg/util/filesystem/permission_windows.go @@ -8,15 +8,16 @@ package filesystem import ( "fmt" - "syscall" "github.com/hectane/go-acl" "golang.org/x/sys/windows" + + "github.com/DataDog/datadog-agent/pkg/util/winutil" ) // Permission handles permissions for Unix and Windows type Permission struct { - currentUserSid *windows.SID + ddUserSid *windows.SID administratorSid *windows.SID systemSid *windows.SID } @@ -32,32 +33,24 @@ func NewPermission() (*Permission, error) { return nil, err } - currentUserSid, err := getCurrentUserSid() + ddUserSid, err := getDatadogUserSid() if err != nil { - return nil, fmt.Errorf("Unable to get current user sid %v", err) + return nil, fmt.Errorf("unable to get datadog user sid %v", err) } return &Permission{ - currentUserSid: currentUserSid, + ddUserSid: ddUserSid, administratorSid: administratorSid, systemSid: systemSid, }, nil } -func getCurrentUserSid() (*windows.SID, error) { - token, err := syscall.OpenCurrentProcessToken() - if err != nil { - return nil, fmt.Errorf("Couldn't get process token %v", err) - } - defer token.Close() - user, err := token.GetTokenUser() - if err != nil { - return nil, fmt.Errorf("Couldn't get token user %v", err) - } - sidString, err := user.User.Sid.String() +func getDatadogUserSid() (*windows.SID, error) { + ddUserSid, err := winutil.GetDDAgentUserSID() if err != nil { - return nil, fmt.Errorf("Couldn't get user sid string %v", err) + // falls back to current user on failure + return winutil.GetSidFromUser() } - return windows.StringToSid(sidString) + return ddUserSid, nil } // RestrictAccessToUser update the ACL of a file so only the current user and ADMIN/SYSTEM can access it @@ -68,7 +61,7 @@ func (p *Permission) RestrictAccessToUser(path string) error { false, // don't inherit acl.GrantSid(windows.GENERIC_ALL, p.administratorSid), acl.GrantSid(windows.GENERIC_ALL, p.systemSid), - acl.GrantSid(windows.GENERIC_ALL, p.currentUserSid)) + acl.GrantSid(windows.GENERIC_ALL, p.ddUserSid)) } // RemoveAccessToOtherUsers on Windows this function calls RestrictAccessToUser diff --git a/pkg/util/filesystem/permission_windows_test.go b/pkg/util/filesystem/permission_windows_test.go new file mode 100644 index 0000000000000..61921718cd37f --- /dev/null +++ b/pkg/util/filesystem/permission_windows_test.go @@ -0,0 +1,73 @@ +// 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. + +//go:build windows + +package filesystem + +import ( + "os" + "path/filepath" + "testing" + "unsafe" + + "github.com/stretchr/testify/require" + "golang.org/x/sys/windows" +) + +func TestRemoveAccessToOtherUsers(t *testing.T) { + + p, err := NewPermission() + require.NoError(t, err) + + root := t.TempDir() + + t.Log(root) + + testFile := filepath.Join(root, "file") + testDir := filepath.Join(root, "dir") + + err = os.WriteFile(testFile, []byte("test"), 0777) + require.NoError(t, err) + err = os.Mkdir(testDir, 0777) + require.NoError(t, err) + + err = p.RemoveAccessToOtherUsers(testFile) + require.NoError(t, err) + + // Assert the permissions for the file + assertPermissions(t, testFile, p) + + err = p.RemoveAccessToOtherUsers(testDir) + require.NoError(t, err) + + // Assert the permissions for the directory + assertPermissions(t, testDir, p) +} + +func assertPermissions(t *testing.T, path string, p *Permission) { + sd, err := windows.GetNamedSecurityInfo( + path, + windows.SE_FILE_OBJECT, + windows.DACL_SECURITY_INFORMATION, + ) + require.NoError(t, err) + + dacl, _, err := sd.DACL() + require.NoError(t, err) + + aceCount := int(dacl.AceCount) + for i := 0; i < aceCount; i++ { + var ace *windows.ACCESS_ALLOWED_ACE + err := windows.GetAce(dacl, uint32(i), &ace) + require.NoError(t, err) + + var sid *windows.SID = (*windows.SID)(unsafe.Pointer(&ace.SidStart)) + + if !sid.Equals(p.ddUserSid) && !sid.Equals(p.administratorSid) && !sid.Equals(p.systemSid) { + t.Errorf("Unexpected SID with access: %v", sid) + } + } +} diff --git a/pkg/util/flavor/go.mod b/pkg/util/flavor/go.mod index bb7190a4d241c..dabdfd9bcee13 100644 --- a/pkg/util/flavor/go.mod +++ b/pkg/util/flavor/go.mod @@ -46,13 +46,13 @@ require ( github.com/DataDog/datadog-agent/pkg/util/executable v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/filesystem v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/pkg/util/grpc/go.mod b/pkg/util/grpc/go.mod index b058dd317dd34..bdbb97d385501 100644 --- a/pkg/util/grpc/go.mod +++ b/pkg/util/grpc/go.mod @@ -37,7 +37,7 @@ replace ( require ( github.com/DataDog/datadog-agent/pkg/api v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 github.com/stretchr/testify v1.10.0 @@ -61,10 +61,10 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/pkg/util/http/go.mod b/pkg/util/http/go.mod index 0d248d6101c9f..e4699e99baf5e 100644 --- a/pkg/util/http/go.mod +++ b/pkg/util/http/go.mod @@ -33,7 +33,7 @@ replace ( require ( github.com/DataDog/datadog-agent/pkg/config/mock v0.59.0 github.com/DataDog/datadog-agent/pkg/config/model v0.59.0 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/stretchr/testify v1.10.0 golang.org/x/net v0.31.0 ) @@ -51,10 +51,10 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/pkg/util/log/setup/go.mod b/pkg/util/log/setup/go.mod index 8eb352e5a4570..1d7dfdbbb7c8b 100644 --- a/pkg/util/log/setup/go.mod +++ b/pkg/util/log/setup/go.mod @@ -33,7 +33,7 @@ replace ( require ( github.com/DataDog/datadog-agent/pkg/config/mock v0.59.0 github.com/DataDog/datadog-agent/pkg/config/model v0.59.0 - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 github.com/stretchr/testify v1.10.0 ) @@ -51,10 +51,10 @@ require ( github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/pkg/util/system/go.mod b/pkg/util/system/go.mod index db28f3923c003..8ec61475312c9 100644 --- a/pkg/util/system/go.mod +++ b/pkg/util/system/go.mod @@ -13,10 +13,10 @@ replace ( require ( github.com/DataDog/datadog-agent/pkg/util/filesystem v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/testutil v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/winutil v0.56.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 github.com/shirou/gopsutil/v3 v3.24.5 github.com/stretchr/testify v1.10.0 go.uber.org/atomic v1.11.0 @@ -24,7 +24,7 @@ require ( ) require ( - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/go-ole/go-ole v1.3.0 // indirect diff --git a/pkg/util/winutil/service.go b/pkg/util/winutil/service.go index 11bc407bb0f43..22387fd89ea28 100644 --- a/pkg/util/winutil/service.go +++ b/pkg/util/winutil/service.go @@ -419,3 +419,20 @@ func IsServiceRunning(serviceName string) (running bool, err error) { } return (status.State == windows.SERVICE_RUNNING), nil } + +// GetServiceUser returns the service user for the given service +func GetServiceUser(serviceName string) (string, error) { + manager, service, err := openManagerService(serviceName, windows.SERVICE_QUERY_CONFIG) + if err != nil { + return "", err + } + defer closeManagerService(manager, service) + + serviceConfig, err := service.Config() + if err != nil { + return "", fmt.Errorf("could not retrieve config for %s: %w", serviceName, err) + } + + return serviceConfig.ServiceStartName, nil + +} diff --git a/pkg/util/winutil/users.go b/pkg/util/winutil/users.go index 7026b76507ebb..be17fe6a7cdb2 100644 --- a/pkg/util/winutil/users.go +++ b/pkg/util/winutil/users.go @@ -8,6 +8,7 @@ package winutil import ( "fmt" + "strings" "syscall" "golang.org/x/sys/windows" @@ -75,3 +76,53 @@ func GetLocalSystemSID() (*windows.SID, error) { return localSystem, err } + +// GetServiceUserSID returns the SID of the specified service account +func GetServiceUserSID(service string) (*windows.SID, error) { + // get config for datadogagent service + user, err := GetServiceUser(service) + if err != nil { + return nil, fmt.Errorf("could not get datadogagent service user: %s", err) + } + + username, err := getUserFromServiceUser(user) + if err != nil { + return nil, err + } + + // Manually map some aliases that SCM uses and are not recognized by the + // security subsystem (`LookupAccountName()` will fail) + // https://learn.microsoft.com/en-us/windows/win32/services/service-user-accounts + if username == "LocalSystem" { + return windows.StringToSid("S-1-5-18") + } + + // get the SID for the user account + sid, _, _, err := windows.LookupSID("", username) + return sid, err +} + +func getUserFromServiceUser(user string) (string, error) { + var domain, username string + parts := strings.SplitN(user, "\\", 2) + if len(parts) == 1 { + username = user + } else if len(parts) == 2 { + domain = parts[0] + if domain == "." { + username = parts[1] + } else { + username = user + } + } else { + return "", fmt.Errorf("could not parse user: %s", user) + } + + return username, nil + +} + +// GetDDAgentUserSID returns the SID of the DataDog Agent account +func GetDDAgentUserSID() (*windows.SID, error) { + return GetServiceUserSID("datadogagent") +} diff --git a/pkg/util/winutil/users_test.go b/pkg/util/winutil/users_test.go index d541eeb4e1ff8..d1941003bfda4 100644 --- a/pkg/util/winutil/users_test.go +++ b/pkg/util/winutil/users_test.go @@ -11,6 +11,8 @@ import ( "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "golang.org/x/sys/windows" ) func TestGetSidFromUser(t *testing.T) { @@ -19,3 +21,27 @@ func TestGetSidFromUser(t *testing.T) { assert.Nil(t, err) assert.NotNil(t, sid) } + +func TestGetServiceUserSID(t *testing.T) { + // create LocalService SID + serviceSid, err := windows.StringToSid("S-1-5-19") + require.NoError(t, err) + + // get the SID for the EventLog service (has LocalService as its user) + sid, err := GetServiceUserSID("EventLog") + require.NoError(t, err) + assert.NotNil(t, sid) + assert.True(t, windows.EqualSid(sid, serviceSid)) + t.Logf("The SID found was: %v", sid) + + // create LocalSystem SID + systemSid, err := windows.StringToSid("S-1-5-18") + require.NoError(t, err) + + // get the SID for the BITS service (has LocalSystem as its user) + sid, err = GetServiceUserSID("BITS") + require.NoError(t, err) + assert.NotNil(t, sid) + assert.True(t, windows.EqualSid(sid, systemSid)) + t.Logf("The SID found was: %v", sid) +} diff --git a/releasenotes/notes/file-permissions-to-dduser-windows-6e9940175f9130ff.yaml b/releasenotes/notes/file-permissions-to-dduser-windows-6e9940175f9130ff.yaml new file mode 100644 index 0000000000000..45e2515092583 --- /dev/null +++ b/releasenotes/notes/file-permissions-to-dduser-windows-6e9940175f9130ff.yaml @@ -0,0 +1,12 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + Fix Windows file permissions on authToken to give access to the Datadog user even when privilege processes create it. + diff --git a/test/otel/go.mod b/test/otel/go.mod index 7fb2f3b6d5f1e..dd0663ecebd79 100644 --- a/test/otel/go.mod +++ b/test/otel/go.mod @@ -164,15 +164,15 @@ require ( github.com/DataDog/datadog-agent/pkg/util/fxutil v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/hostname/validate v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 // indirect - github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/startstop v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect github.com/DataDog/datadog-api-client-go/v2 v2.31.0 // indirect github.com/DataDog/datadog-go/v5 v5.5.0 // indirect From 0744b78e72154436a2b6a533abb5c80be831eea5 Mon Sep 17 00:00:00 2001 From: yuri-lipnesh Date: Mon, 9 Dec 2024 17:46:30 -0500 Subject: [PATCH 068/303] [usm] system-probe, add Postgres message counters to the eBPF module (#31104) --- .../ebpf/c/protocols/postgres/decoding-maps.h | 4 + .../ebpf/c/protocols/postgres/decoding.h | 101 ++++++++-- pkg/network/ebpf/c/protocols/postgres/types.h | 25 ++- pkg/network/protocols/ebpf_types.go | 6 +- pkg/network/protocols/ebpf_types_linux.go | 4 +- pkg/network/protocols/postgres/ebpf/types.go | 8 +- .../protocols/postgres/ebpf/types_linux.go | 11 +- pkg/network/protocols/postgres/protocol.go | 83 +++++++- pkg/network/protocols/postgres/telemetry.go | 47 +++++ pkg/network/protocols/telemetry/metric.go | 14 ++ pkg/network/usm/postgres_monitor_test.go | 177 +++++++++++++++++- 11 files changed, 437 insertions(+), 43 deletions(-) diff --git a/pkg/network/ebpf/c/protocols/postgres/decoding-maps.h b/pkg/network/ebpf/c/protocols/postgres/decoding-maps.h index 67288e1243f9e..3ccbd67e52466 100644 --- a/pkg/network/ebpf/c/protocols/postgres/decoding-maps.h +++ b/pkg/network/ebpf/c/protocols/postgres/decoding-maps.h @@ -15,4 +15,8 @@ BPF_PERCPU_ARRAY_MAP(postgres_scratch_buffer, postgres_event_t, 1) // Maintains the current state of tail calls for each Postgres message. BPF_PERCPU_ARRAY_MAP(postgres_iterations, postgres_tail_call_state_t, 1) +// Postgres telemetry maps in kernel provide empirical statistics on the number of processed Postgres messages. +// Key 0 for plaintext traffic, key 1 for encrypted traffic. +BPF_ARRAY_MAP(postgres_telemetry, postgres_kernel_msg_count_t, 2) + #endif diff --git a/pkg/network/ebpf/c/protocols/postgres/decoding.h b/pkg/network/ebpf/c/protocols/postgres/decoding.h index 300ca6ba949a9..3f5e6d489376e 100644 --- a/pkg/network/ebpf/c/protocols/postgres/decoding.h +++ b/pkg/network/ebpf/c/protocols/postgres/decoding.h @@ -108,6 +108,48 @@ static int __always_inline skip_string(pktbuf_t pkt, int message_len) { return SKIP_STRING_FAILED; } +// Return a pointer to the postgres telemetry record in the corresponding map. +static __always_inline void* get_pg_msg_counts_map(pktbuf_t pkt) { + const __u32 plain_key = 0; + const __u32 tls_key = 1; + + pktbuf_map_lookup_option_t pg_telemetry_lookup_opt[] = { + [PKTBUF_SKB] = { + .map = &postgres_telemetry, + .key = (void*)&plain_key, + }, + [PKTBUF_TLS] = { + .map = &postgres_telemetry, + .key = (void*)&tls_key, + }, + }; + return pktbuf_map_lookup(pkt, pg_telemetry_lookup_opt); +} + +// update_msg_count_telemetry increases the corresponding counter of the telemetry bucket. +static __always_inline void update_msg_count_telemetry(postgres_kernel_msg_count_t* pg_msg_counts, __u8 count) { + // This line can be interpreted as a step function of the difference, multiplied by the difference itself. + // The step function of the difference returns 0 if the difference is negative and 1 if it is positive. + // As a result, if the difference is negative, the output will be 0; if the difference is positive, + // the output will equal the difference. + count = count < PG_KERNEL_MSG_COUNT_FIRST_BUCKET ? 0 : count - PG_KERNEL_MSG_COUNT_FIRST_BUCKET; + + // This line functions as a ceiling operation, ensuring that if the count is not a multiple of the bucket size, + // it is rounded up to the next bucket. Since eBPF does not support floating-point numbers, the implementation + // adds (bucket size - 1) to the count and then divides the result by the bucket size. + // This effectively simulates the ceiling function. + __u8 bucket_idx = (count + PG_KERNEL_MSG_COUNT_BUCKET_SIZE - 1) / PG_KERNEL_MSG_COUNT_BUCKET_SIZE; + + // This line ensures that the bucket index stays within the range of 0 to PG_KERNEL_MSG_COUNT_NUM_BUCKETS. + // While not strictly necessary, we include this check to satisfy the verifier and to explicitly define a lower bound. + bucket_idx = bucket_idx < 0 ? 0 : bucket_idx; + + // This line ensures that the bucket index remains within the range of 0 to PG_KERNEL_MSG_COUNT_NUM_BUCKETS, + // preventing any possibility of exceeding the upper bound. + bucket_idx = bucket_idx >= PG_KERNEL_MSG_COUNT_NUM_BUCKETS ? PG_KERNEL_MSG_COUNT_NUM_BUCKETS-1 : bucket_idx; + __sync_fetch_and_add(&pg_msg_counts->msg_count_buckets[bucket_idx], 1); +} + // Reads the first message header and decides what to do based on the // message tag. If the message is a new query, it stores the query in the in-flight map. // If the message is a parse message, we tail call to the dedicated process_parse_message program. @@ -148,7 +190,7 @@ static __always_inline void postgres_handle_message(pktbuf_t pkt, conn_tuple_t * return; } - iteration_value->iteration = 0; + iteration_value->total_msg_count = 0; iteration_value->data_off = 0; pktbuf_tail_call_option_t handle_response_tail_call_array[] = { [PKTBUF_SKB] = { @@ -197,10 +239,10 @@ static __always_inline void postgres_handle_parse_message(pktbuf_t pkt, conn_tup // Handles Postgres command complete messages by examining packet data for both plaintext and TLS traffic. // This function handles multiple messages within a single packet, processing up to POSTGRES_MAX_MESSAGES_PER_TAIL_CALL -// messages per call. When more messages exist beyond this limit, it uses tail call chaining (up to -// POSTGRES_MAX_TAIL_CALLS_FOR_MAX_MESSAGES) to continue processing. -static __always_inline bool handle_response(pktbuf_t pkt, conn_tuple_t conn_tuple) { +// messages per call. When more messages exist beyond this limit, it uses tail call chaining to continue processing. +static __always_inline bool handle_response(pktbuf_t pkt, conn_tuple_t conn_tuple, postgres_kernel_msg_count_t* pg_msg_counts) { const __u32 zero = 0; + bool read_result = false; bool found_command_complete = false; struct pg_message_header header; @@ -210,7 +252,7 @@ static __always_inline bool handle_response(pktbuf_t pkt, conn_tuple_t conn_tupl return 0; } - if (iteration_value->iteration >= POSTGRES_MAX_TAIL_CALLS_FOR_MAX_MESSAGES) { + if (iteration_value->total_msg_count >= (POSTGRES_MAX_TOTAL_MESSAGES - 1)) { return 0; } @@ -225,13 +267,14 @@ static __always_inline bool handle_response(pktbuf_t pkt, conn_tuple_t conn_tupl return 0; } + __u8 messages_count = 0; #pragma unroll(POSTGRES_MAX_MESSAGES_PER_TAIL_CALL) - for (__u32 iteration = 0; iteration < POSTGRES_MAX_MESSAGES_PER_TAIL_CALL; ++iteration) { - if (!read_message_header(pkt, &header)) { + for (; messages_count < POSTGRES_MAX_MESSAGES_PER_TAIL_CALL; ++messages_count) { + read_result = read_message_header(pkt, &header); + if (read_result != true) { break; } if (header.message_tag == POSTGRES_COMMAND_COMPLETE_MAGIC_BYTE) { - handle_command_complete(&conn_tuple, transaction); found_command_complete = true; break; } @@ -240,20 +283,35 @@ static __always_inline bool handle_response(pktbuf_t pkt, conn_tuple_t conn_tupl // the message tag. So we need to add 1 to the message length to jump over the entire message. pktbuf_advance(pkt, header.message_len + 1); } + iteration_value->total_msg_count += messages_count; if (found_command_complete) { + handle_command_complete(&conn_tuple, transaction); + update_msg_count_telemetry(pg_msg_counts, iteration_value->total_msg_count); + return 0; } - // We didn't find a command complete message, so we need to continue processing the packet. - // We save the current data offset and increment the iteration counter. - iteration_value->iteration += 1; - iteration_value->data_off = pktbuf_data_offset(pkt); - // If the maximum number of tail calls has been reached, we can skip invoking the next tail call. - if (iteration_value->iteration >= POSTGRES_MAX_TAIL_CALLS_FOR_MAX_MESSAGES) { + if (iteration_value->total_msg_count >= (POSTGRES_MAX_TOTAL_MESSAGES - 1)) { + // reached max messages, add counter and stop iterating. + __sync_fetch_and_add(&pg_msg_counts->reached_max_messages, 1); + return 0; + } + if (pktbuf_data_offset(pkt) == pktbuf_data_end(pkt)) { + // stop the iterator if the end of the TCP packet is reached. + update_msg_count_telemetry(pg_msg_counts, iteration_value->total_msg_count); + return 0; + } + if (read_result == false) { + // the packet was fragmented, add counter stop iterating. + __sync_fetch_and_add(&pg_msg_counts->fragmented_packets, 1); return 0; } + // We didn't find a command complete message, so we need to continue processing the packet. + // We save the current data offset. + iteration_value->data_off = pktbuf_data_offset(pkt); + pktbuf_tail_call_option_t handle_response_tail_call_array[] = { [PKTBUF_SKB] = { .prog_array_map = &protocols_progs, @@ -315,7 +373,11 @@ int socket__postgres_handle_response(struct __sk_buff* skb) { normalize_tuple(&conn_tuple); pktbuf_t pkt = pktbuf_from_skb(skb, &skb_info); - handle_response(pkt, conn_tuple); + postgres_kernel_msg_count_t* pg_msg_counts = get_pg_msg_counts_map(pkt); + if (pg_msg_counts == NULL) { + return 0; + } + handle_response(pkt, conn_tuple, pg_msg_counts); return 0; } @@ -406,10 +468,15 @@ int uprobe__postgres_tls_handle_response(struct pt_regs *ctx) { return 0; } + pktbuf_t pkt = pktbuf_from_tls(ctx, args); + postgres_kernel_msg_count_t* pg_msg_counts = get_pg_msg_counts_map(pkt); + if (pg_msg_counts == NULL) { + return 0; + } + // Copying the tuple to the stack to handle verifier issues on kernel 4.14. conn_tuple_t tup = args->tup; - pktbuf_t pkt = pktbuf_from_tls(ctx, args); - handle_response(pkt, tup); + handle_response(pkt, tup, pg_msg_counts); return 0; } diff --git a/pkg/network/ebpf/c/protocols/postgres/types.h b/pkg/network/ebpf/c/protocols/postgres/types.h index 0e88332dc78a7..6f0abf951ddaf 100644 --- a/pkg/network/ebpf/c/protocols/postgres/types.h +++ b/pkg/network/ebpf/c/protocols/postgres/types.h @@ -7,10 +7,13 @@ #define POSTGRES_BUFFER_SIZE 160 // Represents the maximum number of tail calls we can use to process a single message. -#define POSTGRES_MAX_TAIL_CALLS_FOR_MAX_MESSAGES 1 +#define POSTGRES_MAX_TAIL_CALLS_FOR_MAX_MESSAGES 3 // Represents the maximum number of messages we process in a single tail call. -#define POSTGRES_MAX_MESSAGES_PER_TAIL_CALL 80 +#define POSTGRES_MAX_MESSAGES_PER_TAIL_CALL 60 + +// maximum number of messages to fetch +#define POSTGRES_MAX_TOTAL_MESSAGES (POSTGRES_MAX_TAIL_CALLS_FOR_MAX_MESSAGES * POSTGRES_MAX_MESSAGES_PER_TAIL_CALL) // Postgres transaction information we store in the kernel. typedef struct { @@ -30,10 +33,26 @@ typedef struct { } postgres_event_t; typedef struct { - __u8 iteration; + __u8 total_msg_count; // Saving the packet data offset is crucial for maintaining the current read position and ensuring proper utilization // of tail calls. __u32 data_off; } postgres_tail_call_state_t; +// Postgres communication operates via a continuous message stream. +// Gather empirical statistics on the number of messages processed by the program. +// These statistics enable optimization of the monitoring code. +// Collect counters for each subsequent bucket. +// bucket 0: count 0 to 100, bucket 1: 100 to 119, bucket 2: 120 to 139 etc. +#define PG_KERNEL_MSG_COUNT_NUM_BUCKETS 5 +#define PG_KERNEL_MSG_COUNT_BUCKET_SIZE 20 +#define PG_KERNEL_MSG_COUNT_FIRST_BUCKET 100 + +// This structure stores statistics about the number of Postgres messages in a TCP packet. +typedef struct { + __u64 reached_max_messages; + __u64 fragmented_packets; + __u64 msg_count_buckets[PG_KERNEL_MSG_COUNT_NUM_BUCKETS]; +} postgres_kernel_msg_count_t; + #endif diff --git a/pkg/network/protocols/ebpf_types.go b/pkg/network/protocols/ebpf_types.go index 57bdb4539bf5e..c5b90864ee74e 100644 --- a/pkg/network/protocols/ebpf_types.go +++ b/pkg/network/protocols/ebpf_types.go @@ -19,10 +19,8 @@ const ( ) const ( - // PostgresMaxMessagesPerTailCall is the maximum number of messages that can be processed in a single tail call in our Postgres decoding solution - PostgresMaxMessagesPerTailCall = C.POSTGRES_MAX_MESSAGES_PER_TAIL_CALL - // PostgresMaxTailCalls is the maximum number of tail calls that can be made in our Postgres decoding solution - PostgresMaxTailCalls = C.POSTGRES_MAX_TAIL_CALLS_FOR_MAX_MESSAGES + // PostgresMaxTotalMessages is the maximum number of Postgres messages processed by the eBPF program. + PostgresMaxTotalMessages = C.POSTGRES_MAX_TOTAL_MESSAGES ) // DispatcherProgramType is a C type to represent the eBPF programs used for tail calls. diff --git a/pkg/network/protocols/ebpf_types_linux.go b/pkg/network/protocols/ebpf_types_linux.go index ae855cfe48b77..8cc9c663dc3d5 100644 --- a/pkg/network/protocols/ebpf_types_linux.go +++ b/pkg/network/protocols/ebpf_types_linux.go @@ -10,9 +10,7 @@ const ( ) const ( - PostgresMaxMessagesPerTailCall = 0x50 - - PostgresMaxTailCalls = 0x1 + PostgresMaxTotalMessages = 0xb4 ) type DispatcherProgramType uint32 diff --git a/pkg/network/protocols/postgres/ebpf/types.go b/pkg/network/protocols/postgres/ebpf/types.go index 7c615186958e4..63071b914e5a7 100644 --- a/pkg/network/protocols/postgres/ebpf/types.go +++ b/pkg/network/protocols/postgres/ebpf/types.go @@ -9,6 +9,7 @@ package ebpf /* #include "../../ebpf/c/protocols/postgres/types.h" +#include "../../ebpf/c/protocols/postgres/defs.h" #include "../../ebpf/c/protocols/classification/defs.h" */ import "C" @@ -19,7 +20,12 @@ type ConnTuple = C.conn_tuple_t type EbpfEvent C.postgres_event_t type EbpfTx C.postgres_transaction_t +type PostgresKernelMsgCount C.postgres_kernel_msg_count_t const ( - BufferSize = C.POSTGRES_BUFFER_SIZE + BufferSize = C.POSTGRES_BUFFER_SIZE + MsgCountBucketSize = C.PG_KERNEL_MSG_COUNT_BUCKET_SIZE + MsgCountNumBuckets = C.PG_KERNEL_MSG_COUNT_NUM_BUCKETS + MsgCountFirstBucket = C.PG_KERNEL_MSG_COUNT_FIRST_BUCKET + MsgCountMaxTotal = C.POSTGRES_MAX_TOTAL_MESSAGES ) diff --git a/pkg/network/protocols/postgres/ebpf/types_linux.go b/pkg/network/protocols/postgres/ebpf/types_linux.go index 9b0097a2b5f9d..9413ee269ac20 100644 --- a/pkg/network/protocols/postgres/ebpf/types_linux.go +++ b/pkg/network/protocols/postgres/ebpf/types_linux.go @@ -27,7 +27,16 @@ type EbpfTx struct { Tags uint8 Pad_cgo_0 [3]byte } +type PostgresKernelMsgCount struct { + Reached_max_messages uint64 + Fragmented_packets uint64 + Msg_count_buckets [5]uint64 +} const ( - BufferSize = 0xa0 + BufferSize = 0xa0 + MsgCountBucketSize = 0x14 + MsgCountNumBuckets = 0x5 + MsgCountFirstBucket = 0x64 + MsgCountMaxTotal = 0xb4 ) diff --git a/pkg/network/protocols/postgres/protocol.go b/pkg/network/protocols/postgres/protocol.go index 6bc245896a91a..c0d7aa37a6747 100644 --- a/pkg/network/protocols/postgres/protocol.go +++ b/pkg/network/protocols/postgres/protocol.go @@ -9,6 +9,7 @@ package postgres import ( "io" + "time" "unsafe" "github.com/cilium/ebpf" @@ -28,6 +29,8 @@ import ( ) const ( + // KernelTelemetryMap is the map for getting kernel metrics + KernelTelemetryMap = "postgres_telemetry" // InFlightMap is the name of the in-flight map. InFlightMap = "postgres_in_flight" scratchBufferMap = "postgres_scratch_buffer" @@ -44,11 +47,13 @@ const ( // protocol holds the state of the postgres protocol monitoring. type protocol struct { - cfg *config.Config - telemetry *Telemetry - eventsConsumer *events.Consumer[postgresebpf.EbpfEvent] - mapCleaner *ddebpf.MapCleaner[netebpf.ConnTuple, postgresebpf.EbpfTx] - statskeeper *StatKeeper + cfg *config.Config + telemetry *Telemetry + eventsConsumer *events.Consumer[postgresebpf.EbpfEvent] + mapCleaner *ddebpf.MapCleaner[netebpf.ConnTuple, postgresebpf.EbpfTx] + statskeeper *StatKeeper + kernelTelemetry *kernelTelemetry // retrieves Postgres metrics from kernel + kernelTelemetryStopCh chan struct{} } // Spec is the protocol spec for the postgres protocol. @@ -133,9 +138,11 @@ func newPostgresProtocol(cfg *config.Config) (protocols.Protocol, error) { } return &protocol{ - cfg: cfg, - telemetry: NewTelemetry(cfg), - statskeeper: NewStatkeeper(cfg), + cfg: cfg, + telemetry: NewTelemetry(cfg), + statskeeper: NewStatkeeper(cfg), + kernelTelemetry: newKernelTelemetry(), + kernelTelemetryStopCh: make(chan struct{}), }, nil } @@ -175,6 +182,7 @@ func (p *protocol) PreStart(mgr *manager.Manager) (err error) { func (p *protocol) PostStart(mgr *manager.Manager) error { // Setup map cleaner after manager start. p.setupMapCleaner(mgr) + p.startKernelTelemetry(mgr) return nil } @@ -186,11 +194,16 @@ func (p *protocol) Stop(*manager.Manager) { if p.eventsConsumer != nil { p.eventsConsumer.Stop() } + if p.kernelTelemetryStopCh != nil { + close(p.kernelTelemetryStopCh) + } } // DumpMaps dumps map contents for debugging. func (p *protocol) DumpMaps(w io.Writer, mapName string, currentMap *ebpf.Map) { - if mapName == InFlightMap { // maps/postgres_in_flight (BPF_MAP_TYPE_HASH), key ConnTuple, value EbpfTx + switch mapName { + case InFlightMap: + // maps/postgres_in_flight (BPF_MAP_TYPE_HASH), key ConnTuple, value EbpfTx var key netebpf.ConnTuple var value postgresebpf.EbpfTx protocols.WriteMapDumpHeader(w, currentMap, mapName, key, value) @@ -198,12 +211,27 @@ func (p *protocol) DumpMaps(w io.Writer, mapName string, currentMap *ebpf.Map) { for iter.Next(unsafe.Pointer(&key), unsafe.Pointer(&value)) { spew.Fdump(w, key, value) } + case KernelTelemetryMap: + // postgres_msg_count (BPF_ARRAY_MAP), key 0 and 1, value PostgresKernelMsgCount + plainKey := uint32(0) + tlsKey := uint32(1) + + var value postgresebpf.PostgresKernelMsgCount + protocols.WriteMapDumpHeader(w, currentMap, mapName, plainKey, value) + if err := currentMap.Lookup(unsafe.Pointer(&plainKey), unsafe.Pointer(&value)); err == nil { + spew.Fdump(w, plainKey, value) + } + protocols.WriteMapDumpHeader(w, currentMap, mapName, tlsKey, value) + if err := currentMap.Lookup(unsafe.Pointer(&tlsKey), unsafe.Pointer(&value)); err == nil { + spew.Fdump(w, tlsKey, value) + } } } // GetStats returns a map of Postgres stats. func (p *protocol) GetStats() *protocols.ProtocolStats { p.eventsConsumer.Sync() + p.kernelTelemetry.Log() return &protocols.ProtocolStats{ Type: protocols.Postgres, @@ -250,3 +278,40 @@ func (p *protocol) setupMapCleaner(mgr *manager.Manager) { p.mapCleaner = mapCleaner } + +func (p *protocol) startKernelTelemetry(mgr *manager.Manager) { + telemetryMap, err := protocols.GetMap(mgr, KernelTelemetryMap) + if err != nil { + log.Errorf("couldnt find kernel telemetry map: %s, error: %v", telemetryMap, err) + return + } + + plainKey := uint32(0) + tlsKey := uint32(1) + pgKernelMsgCount := &postgresebpf.PostgresKernelMsgCount{} + ticker := time.NewTicker(30 * time.Second) + + go func() { + defer ticker.Stop() + + for { + select { + case <-ticker.C: + if err := telemetryMap.Lookup(unsafe.Pointer(&plainKey), unsafe.Pointer(pgKernelMsgCount)); err != nil { + log.Errorf("unable to lookup %q map: %s", KernelTelemetryMap, err) + return + } + p.kernelTelemetry.update(pgKernelMsgCount, false) + + if err := telemetryMap.Lookup(unsafe.Pointer(&tlsKey), unsafe.Pointer(pgKernelMsgCount)); err != nil { + log.Errorf("unable to lookup %q map: %s", KernelTelemetryMap, err) + return + } + p.kernelTelemetry.update(pgKernelMsgCount, true) + + case <-p.kernelTelemetryStopCh: + return + } + } + }() +} diff --git a/pkg/network/protocols/postgres/telemetry.go b/pkg/network/protocols/postgres/telemetry.go index cc17b902c24ea..d8cb08725a80e 100644 --- a/pkg/network/protocols/postgres/telemetry.go +++ b/pkg/network/protocols/postgres/telemetry.go @@ -9,6 +9,7 @@ package postgres import ( "fmt" + "strconv" "github.com/cihub/seelog" @@ -178,3 +179,49 @@ func (t *Telemetry) Log() { log.Debugf("postgres stats summary: %s", t.metricGroup.Summary()) } } + +// kernelTelemetry provides empirical kernel statistics about the number of messages in each TCP packet +type kernelTelemetry struct { + metricGroup *libtelemetry.MetricGroup + reachedMaxMessages *libtelemetry.TLSAwareCounter + fragmentedPackets *libtelemetry.TLSAwareCounter + msgCountBuckets [ebpf.MsgCountNumBuckets]*libtelemetry.TLSAwareCounter // Postgres messages counters divided into buckets +} + +// newKernelTelemetry this is the Postgres message counter store. +func newKernelTelemetry() *kernelTelemetry { + metricGroup := libtelemetry.NewMetricGroup("usm.postgres", libtelemetry.OptStatsd) + kernelTel := &kernelTelemetry{ + metricGroup: metricGroup, + } + kernelTel.reachedMaxMessages = libtelemetry.NewTLSAwareCounter(metricGroup, "max_messages") + kernelTel.fragmentedPackets = libtelemetry.NewTLSAwareCounter(metricGroup, "incomplete_messages") + + for i := range kernelTel.msgCountBuckets { + kernelTel.msgCountBuckets[i] = libtelemetry.NewTLSAwareCounter(metricGroup, "messages_count_bucket_"+strconv.Itoa(i+1)) + } + return kernelTel +} + +// update the postgres message counter store with new counters from the kernel, return immediately if nothing to add. +func (t *kernelTelemetry) update(kernCounts *ebpf.PostgresKernelMsgCount, isTLS bool) { + if kernCounts == nil { + return + } + + t.reachedMaxMessages.Set(int64(kernCounts.Reached_max_messages), isTLS) + t.fragmentedPackets.Set(int64(kernCounts.Fragmented_packets), isTLS) + + for i := range t.msgCountBuckets { + v := kernCounts.Msg_count_buckets[i] + t.msgCountBuckets[i].Set(int64(v), isTLS) + } +} + +// Log logs summary of telemetry +func (t *kernelTelemetry) Log() { + if log.ShouldLog(seelog.DebugLvl) { + s := t.metricGroup.Summary() + log.Debugf("postgres kernel telemetry, summary: %s", s) + } +} diff --git a/pkg/network/protocols/telemetry/metric.go b/pkg/network/protocols/telemetry/metric.go index 46aa226351278..56ce64a1b00b8 100644 --- a/pkg/network/protocols/telemetry/metric.go +++ b/pkg/network/protocols/telemetry/metric.go @@ -26,6 +26,11 @@ func NewCounter(name string, tagsAndOptions ...string) *Counter { return globalRegistry.FindOrCreate(c).(*Counter) } +// Set value atomically +func (c *Counter) Set(v int64) { + c.value.Store(v) +} + // Add value atomically func (c *Counter) Add(v int64) { if v > 0 { @@ -118,6 +123,15 @@ func NewTLSAwareCounter(metricGroup *MetricGroup, metricName string, tags ...str } } +// Set Sets the given value to the counter based on the encryption. +func (c *TLSAwareCounter) Set(v int64, isTLS bool) { + if isTLS { + c.counterTLS.Set(v) + return + } + c.counterPlain.Set(v) +} + // Add adds the given delta to the counter based on the encryption. func (c *TLSAwareCounter) Add(delta int64, isTLS bool) { if isTLS { diff --git a/pkg/network/usm/postgres_monitor_test.go b/pkg/network/usm/postgres_monitor_test.go index 76c616beff5bd..9198448f99468 100644 --- a/pkg/network/usm/postgres_monitor_test.go +++ b/pkg/network/usm/postgres_monitor_test.go @@ -16,8 +16,10 @@ import ( "sync" "testing" "time" + "unsafe" "github.com/jackc/pgx/v5/pgproto3" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" @@ -47,7 +49,6 @@ const ( alterTableQuery = "ALTER TABLE dummy ADD test VARCHAR(255);" truncateTableQuery = "TRUNCATE TABLE dummy" showQuery = "SHOW search_path" - maxSupportedMessages = protocols.PostgresMaxMessagesPerTailCall * protocols.PostgresMaxTailCalls ) var ( @@ -591,7 +592,7 @@ func testDecoding(t *testing.T, isTLS bool) { }, // The purpose of this test is to validate the POSTGRES_MAX_MESSAGES_PER_TAIL_CALL * POSTGRES_MAX_TAIL_CALLS_FOR_MAX_MESSAGES limit. { - name: "validate supporting max supported messages limit", + name: "validate max supported messages limit", preMonitorSetup: func(t *testing.T, ctx pgTestContext) { pg, err := postgres.NewPGXClient(postgres.ConnectionOptions{ ServerAddress: ctx.serverAddress, @@ -607,7 +608,7 @@ func testDecoding(t *testing.T, isTLS bool) { ctx.extras["pg"] = pg require.NoError(t, pg.RunQuery(createTableQuery)) // We reduce the limit by 2 messages because the protocol adds messages at the beginning of the maximum message response. - require.NoError(t, pg.RunQuery(createInsertQuery(generateTestValues(1, maxSupportedMessages-3)...))) + require.NoError(t, pg.RunQuery(createInsertQuery(generateTestValues(1, protocols.PostgresMaxTotalMessages-3)...))) require.NoError(t, pg.RunQuery(selectAllQuery)) }, validation: func(t *testing.T, _ pgTestContext, monitor *Monitor) { @@ -623,7 +624,7 @@ func testDecoding(t *testing.T, isTLS bool) { // This test validates that when we exceed the POSTGRES_MAX_MESSAGES_PER_TAIL_CALL * POSTGRES_MAX_TAIL_CALLS_FOR_MAX_MESSAGES limit, // the request is not captured as we will miss the response.In this case, it applies to the SELECT query. { - name: "validate exceeding max supported messages limit is not supported", + name: "exceeding max supported messages limit", preMonitorSetup: func(t *testing.T, ctx pgTestContext) { pg, err := postgres.NewPGXClient(postgres.ConnectionOptions{ ServerAddress: ctx.serverAddress, @@ -638,7 +639,7 @@ func testDecoding(t *testing.T, isTLS bool) { require.NoError(t, pg.Ping()) ctx.extras["pg"] = pg require.NoError(t, pg.RunQuery(createTableQuery)) - require.NoError(t, pg.RunQuery(createInsertQuery(generateTestValues(1, maxSupportedMessages+1)...))) + require.NoError(t, pg.RunQuery(createInsertQuery(generateTestValues(1, protocols.PostgresMaxTotalMessages+1)...))) require.NoError(t, pg.RunQuery(selectAllQuery)) }, validation: func(t *testing.T, _ pgTestContext, monitor *Monitor) { @@ -890,3 +891,169 @@ func createFragment(fragment []byte) [ebpf.BufferSize]byte { copy(b[:], fragment) return b } + +func (s *postgresProtocolParsingSuite) TestKernelTelemetry() { + t := s.T() + tests := []struct { + name string + isTLS bool + }{ + { + name: "without TLS", + isTLS: false, + }, + { + name: "with TLS", + isTLS: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.isTLS && !gotlstestutil.GoTLSSupported(t, config.New()) { + t.Skip("GoTLS not supported for this setup") + } + testKernelMessagesCount(t, tt.isTLS) + }) + } +} + +// testKernelMessagesCount check postgres kernel messages count. +func testKernelMessagesCount(t *testing.T, isTLS bool) { + serverHost := "127.0.0.1" + serverAddress := net.JoinHostPort(serverHost, postgresPort) + require.NoError(t, postgres.RunServer(t, serverHost, postgresPort, isTLS)) + waitForPostgresServer(t, serverAddress, isTLS) + + monitor := setupUSMTLSMonitor(t, getPostgresDefaultTestConfiguration(isTLS)) + if isTLS { + utils.WaitForProgramsToBeTraced(t, consts.USMModuleName, GoTLSAttacherName, os.Getpid(), utils.ManualTracingFallbackEnabled) + } + pgClient := setupPGClient(t, serverAddress, isTLS) + t.Cleanup(func() { + if pgClient != nil { + _ = pgClient.RunQuery(dropTableQuery) + pgClient.Close() + pgClient = nil + } + }) + + createLargeTable(t, pgClient, ebpf.MsgCountFirstBucket+ebpf.MsgCountBucketSize*ebpf.MsgCountNumBuckets) + expectedBuckets := [ebpf.MsgCountNumBuckets]bool{} + + for i := 0; i < ebpf.MsgCountNumBuckets; i++ { + testName := fmt.Sprintf("kernel messages count bucket[%d]", i) + t.Run(testName, func(t *testing.T) { + + expectedBuckets[i] = true + cleanProtocolMaps(t, "postgres", monitor.ebpfProgram.Manager.Manager) + + require.NoError(t, monitor.Resume()) + if i == 0 { + // first bucket, it counts upto ebpf.MsgCountFirstBucketMax messages + // subtract three messages ('bind', 'row description' and 'ready') + require.NoError(t, pgClient.RunQuery(generateSelectLimitQuery(ebpf.MsgCountFirstBucket-3))) + } else { + limitCount := ebpf.MsgCountFirstBucket + i*ebpf.MsgCountBucketSize - 3 + require.NoError(t, pgClient.RunQuery(generateSelectLimitQuery(limitCount))) + } + require.NoError(t, monitor.Pause()) + + validateKernelBuckets(t, monitor, isTLS, expectedBuckets) + if i > 0 { + // clear current bucket except the first one, which is always non-empty. + expectedBuckets[i] = false + } + }) + } + + t.Run("exceed max buckets", func(t *testing.T) { + + cleanProtocolMaps(t, "postgres", monitor.ebpfProgram.Manager.Manager) + require.NoError(t, monitor.Resume()) + + require.NoError(t, pgClient.RunQuery(generateSelectLimitQuery(ebpf.MsgCountMaxTotal))) + require.NoError(t, monitor.Pause()) + + validateKernelExceedingMax(t, monitor, isTLS) + }) +} + +func setupPGClient(t *testing.T, serverAddress string, isTLS bool) *postgres.PGXClient { + pg, err := postgres.NewPGXClient(postgres.ConnectionOptions{ + ServerAddress: serverAddress, + EnableTLS: isTLS, + }) + require.NoError(t, err) + require.NoError(t, pg.Ping()) + return pg +} + +// createLargeTable runs a postgres query to create a table large enough to retrieve long responses later. +func createLargeTable(t *testing.T, pg *postgres.PGXClient, tableValuesCount int) { + require.NoError(t, pg.RunQuery(createTableQuery)) + require.NoError(t, pg.RunQuery(createInsertQuery(generateTestValues(0, tableValuesCount)...))) +} + +// validateKernel Checking telemetry data received for a postgres query +func validateKernelBuckets(t *testing.T, monitor *Monitor, tls bool, expected [ebpf.MsgCountNumBuckets]bool) { + var actual *ebpf.PostgresKernelMsgCount + assert.Eventually(t, func() bool { + found, err := getKernelTelemetry(monitor, tls) + if err != nil { + return false + } + actual = found + return compareMessagesCount(found, expected) + }, time.Second*2, time.Millisecond*100) + if t.Failed() { + t.Logf("expected telemetry:\n %+v;\nactual telemetry:\n %+v", expected, actual) + ebpftest.DumpMapsTestHelper(t, monitor.DumpMaps, postgres.KernelTelemetryMap) + } +} + +// getKernelTelemetry returns statistics obtained from the kernel +func getKernelTelemetry(monitor *Monitor, isTLS bool) (*ebpf.PostgresKernelMsgCount, error) { + pgKernelTelemetry := &ebpf.PostgresKernelMsgCount{} + mapName := postgres.KernelTelemetryMap + key := uint32(0) + if isTLS { + key = uint32(1) + } + mp, _, err := monitor.ebpfProgram.GetMap(mapName) + if err != nil { + return nil, fmt.Errorf("unable to get %q map: %s", mapName, err) + } + if err := mp.Lookup(unsafe.Pointer(&key), unsafe.Pointer(pgKernelTelemetry)); err != nil { + return nil, fmt.Errorf("unable to lookup %q map: %s", mapName, err) + } + return pgKernelTelemetry, nil +} + +// compareMessagesCount returns true if the expected bucket is non-empty +func compareMessagesCount(found *ebpf.PostgresKernelMsgCount, expected [ebpf.MsgCountNumBuckets]bool) bool { + for i := range expected { + if expected[i] && found.Msg_count_buckets[i] == 0 { + return false + } + if !expected[i] && found.Msg_count_buckets[i] > 0 { + return false + } + } + return true +} + +// validateKernelExceedingMax check for exceeding the maximum number of buckets +func validateKernelExceedingMax(t *testing.T, monitor *Monitor, tls bool) { + var actual *ebpf.PostgresKernelMsgCount + assert.Eventually(t, func() bool { + found, err := getKernelTelemetry(monitor, tls) + if err != nil { + return false + } + actual = found + return found.Reached_max_messages > 0 + }, time.Second*2, time.Millisecond*100) + if t.Failed() { + t.Logf("expected non-zero max messages, actual telemetry:\n %+v", actual) + } +} From 5e3a9d7cbe4c2d1f6a1ba917b8d45e1c1448b0a8 Mon Sep 17 00:00:00 2001 From: Guy Arbitman Date: Tue, 10 Dec 2024 08:20:18 +0200 Subject: [PATCH 069/303] Fix require.Eventually gotchas (#31861) --- pkg/network/dns/snooper_test.go | 8 +- .../testutil/testdns/test_dns_server.go | 12 +- pkg/network/tracer/tracer_linux_test.go | 236 ++++++++---------- pkg/network/tracer/tracer_test.go | 97 +++---- pkg/network/usm/kafka_monitor_test.go | 8 +- .../usm/tests/tracer_usm_linux_test.go | 25 +- 6 files changed, 186 insertions(+), 200 deletions(-) diff --git a/pkg/network/dns/snooper_test.go b/pkg/network/dns/snooper_test.go index 3a0d334c80488..a6c1383a9ddcc 100644 --- a/pkg/network/dns/snooper_test.go +++ b/pkg/network/dns/snooper_test.go @@ -230,7 +230,7 @@ func TestDNSFailedResponseCount(t *testing.T) { "nonexistenent.net.com", "missingdomain.com", } - queryIP, queryPort, reps, _ := testdns.SendDNSQueries(t, domains, testdns.GetServerIP(t), "tcp") + queryIP, queryPort, reps, _ := testdns.SendDNSQueries(domains, testdns.GetServerIP(t), "tcp") for _, rep := range reps { require.NotNil(t, rep) require.Equal(t, rep.Rcode, mdns.RcodeNameError) // All the queries should have failed @@ -281,7 +281,7 @@ func TestDNSOverNonPort53(t *testing.T) { shutdown, port := newTestServer(t, localhost, "udp") defer shutdown() - queryIP, queryPort, reps, err := testdns.SendDNSQueriesOnPort(t, domains, net.ParseIP(localhost), strconv.Itoa(int(port)), "udp") + queryIP, queryPort, reps, err := testdns.SendDNSQueriesOnPort(domains, net.ParseIP(localhost), strconv.Itoa(int(port)), "udp") require.NoError(t, err) require.NotNil(t, reps[0]) @@ -334,7 +334,7 @@ func TestDNSOverUDPTimeoutCount(t *testing.T) { invalidServerIP := "8.8.8.90" domainQueried := "agafsdfsdasdfsd" - queryIP, queryPort, reps, err := testdns.SendDNSQueries(t, []string{domainQueried}, net.ParseIP(invalidServerIP), "udp") + queryIP, queryPort, reps, err := testdns.SendDNSQueries([]string{domainQueried}, net.ParseIP(invalidServerIP), "udp") require.ErrorIs(t, err, os.ErrDeadlineExceeded, "error should be i/o timeout") require.Len(t, reps, 1) require.Nil(t, reps[0]) @@ -358,7 +358,7 @@ func TestDNSOverUDPTimeoutCountWithoutDomain(t *testing.T) { invalidServerIP := "8.8.8.90" domainQueried := "agafsdfsdasdfsd" - queryIP, queryPort, reps, err := testdns.SendDNSQueries(t, []string{domainQueried}, net.ParseIP(invalidServerIP), "udp") + queryIP, queryPort, reps, err := testdns.SendDNSQueries([]string{domainQueried}, net.ParseIP(invalidServerIP), "udp") require.ErrorIs(t, err, os.ErrDeadlineExceeded, "error should be i/o timeout") require.Len(t, reps, 1) require.Nil(t, reps[0]) diff --git a/pkg/network/tracer/testutil/testdns/test_dns_server.go b/pkg/network/tracer/testutil/testdns/test_dns_server.go index 48c4e2fe670fe..05745479b4073 100644 --- a/pkg/network/tracer/testutil/testdns/test_dns_server.go +++ b/pkg/network/tracer/testutil/testdns/test_dns_server.go @@ -131,8 +131,7 @@ func respond(req *dns.Msg, writer dns.ResponseWriter, record string) { } // SendDNSQueriesOnPort makes a DNS query for every domain provided, on the given serverIP, port, and protocol. -func SendDNSQueriesOnPort(t *testing.T, domains []string, serverIP net.IP, port string, protocol string) (string, int, []*dns.Msg, error) { - t.Helper() +func SendDNSQueriesOnPort(domains []string, serverIP net.IP, port string, protocol string) (string, int, []*dns.Msg, error) { dnsClient := dns.Client{Net: protocol, Timeout: 3 * time.Second} dnsHost := net.JoinHostPort(serverIP.String(), port) conn, err := dnsClient.Dial(dnsHost) @@ -168,24 +167,21 @@ func SendDNSQueriesOnPort(t *testing.T, domains []string, serverIP net.IP, port // SendDNSQueriesAndCheckError is a simple helper that requires no errors to be present when calling SendDNSQueries func SendDNSQueriesAndCheckError( - t *testing.T, + t require.TestingT, domains []string, serverIP net.IP, protocol string, ) (string, int, []*dns.Msg) { - t.Helper() - ip, port, resp, err := SendDNSQueries(t, domains, serverIP, protocol) + ip, port, resp, err := SendDNSQueries(domains, serverIP, protocol) require.NoError(t, err) return ip, port, resp } // SendDNSQueries is a simple helper that calls SendDNSQueriesOnPort with port 53 func SendDNSQueries( - t *testing.T, domains []string, serverIP net.IP, protocol string, ) (string, int, []*dns.Msg, error) { - t.Helper() - return SendDNSQueriesOnPort(t, domains, serverIP, "53", protocol) + return SendDNSQueriesOnPort(domains, serverIP, "53", protocol) } diff --git a/pkg/network/tracer/tracer_linux_test.go b/pkg/network/tracer/tracer_linux_test.go index 5897839fb2c41..d90928d560da8 100644 --- a/pkg/network/tracer/tracer_linux_test.go +++ b/pkg/network/tracer/tracer_linux_test.go @@ -174,7 +174,7 @@ func (s *TracerSuite) TestTCPRetransmit() { var conn *network.ConnectionStats require.EventuallyWithT(t, func(ct *assert.CollectT) { // Iterate through active connections until we find connection created above, and confirm send + recv counts - connections := getConnections(t, tr) + connections := getConnections(ct, tr) ok := false conn, ok = findConnection(c.LocalAddr(), c.RemoteAddr(), connections) @@ -185,7 +185,7 @@ func (s *TracerSuite) TestTCPRetransmit() { assert.Equal(ct, 100*clientMessageSize, int(conn.Monotonic.SentBytes)) assert.Equal(ct, serverMessageSize, int(conn.Monotonic.RecvBytes)) if !tr.config.EnableEbpfless { - assert.Equal(t, os.Getpid(), int(conn.Pid)) + assert.Equal(ct, os.Getpid(), int(conn.Pid)) } assert.Equal(ct, addrPort(server.Address()), int(conn.DPort)) @@ -308,7 +308,7 @@ func (s *TracerSuite) TestTCPRTT() { require.EventuallyWithT(t, func(ct *assert.CollectT) { // Fetch connection matching source and target address - allConnections := getConnections(t, tr) + allConnections := getConnections(ct, tr) conn, ok := findConnection(c.LocalAddr(), c.RemoteAddr(), allConnections) if !assert.True(ct, ok) { return @@ -478,7 +478,7 @@ func (s *TracerSuite) TestConntrackExpiration() { return } - connections := getConnections(t, tr) + connections := getConnections(collect, tr) t.Log(connections) // for debugging failures var ok bool conn, ok = findConnection(c.LocalAddr(), c.RemoteAddr(), connections) @@ -541,10 +541,11 @@ func (s *TracerSuite) TestConntrackDelays() { _, err = c.Write([]byte("ping")) require.NoError(t, err) - require.Eventually(t, func() bool { - connections := getConnections(t, tr) + require.EventuallyWithT(t, func(collect *assert.CollectT) { + connections := getConnections(collect, tr) conn, ok := findConnection(c.LocalAddr(), c.RemoteAddr(), connections) - return ok && tr.conntracker.GetTranslationForConn(&conn.ConnectionTuple) != nil + require.True(collect, ok) + require.NotNil(collect, tr.conntracker.GetTranslationForConn(&conn.ConnectionTuple)) }, 3*time.Second, 100*time.Millisecond, "failed to find connection with translation") // write newline so server connections will exit @@ -629,7 +630,7 @@ func (s *TracerSuite) TestUnconnectedUDPSendIPv6() { require.NoError(t, err) require.EventuallyWithT(t, func(ct *assert.CollectT) { - connections := getConnections(t, tr) + connections := getConnections(ct, tr) outgoing := network.FilterConnections(connections, func(cs network.ConnectionStats) bool { if cs.Type != network.UDP { return false @@ -726,7 +727,7 @@ func (s *TracerSuite) TestGatewayLookupEnabled() { var clientIP string var clientPort int require.EventuallyWithT(t, func(c *assert.CollectT) { - clientIP, clientPort, _, err = testdns.SendDNSQueries(t, []string{"google.com"}, dnsAddr, "udp") + clientIP, clientPort, _, err = testdns.SendDNSQueries([]string{"google.com"}, dnsAddr, "udp") assert.NoError(c, err) }, 6*time.Second, 100*time.Millisecond, "failed to send dns query") @@ -783,7 +784,7 @@ func (s *TracerSuite) TestGatewayLookupSubnetLookupError() { var clientIP string var clientPort int require.EventuallyWithT(t, func(c *assert.CollectT) { - clientIP, clientPort, _, err = testdns.SendDNSQueries(t, []string{destDomain}, destAddr, "udp") + clientIP, clientPort, _, err = testdns.SendDNSQueries([]string{destDomain}, destAddr, "udp") assert.NoError(c, err) }, 6*time.Second, 100*time.Millisecond, "failed to send dns query") @@ -798,7 +799,7 @@ func (s *TracerSuite) TestGatewayLookupSubnetLookupError() { require.Nil(t, c.Via) require.EventuallyWithT(t, func(c *assert.CollectT) { - clientIP, clientPort, _, err = testdns.SendDNSQueries(t, []string{destDomain}, destAddr, "udp") + clientIP, clientPort, _, err = testdns.SendDNSQueries([]string{destDomain}, destAddr, "udp") assert.NoError(c, err) }, 6*time.Second, 100*time.Millisecond, "failed to send dns query") @@ -906,12 +907,13 @@ func (s *TracerSuite) TestGatewayLookupCrossNamespace() { _, err = c.Write([]byte("foo")) require.NoError(t, err) - require.Eventually(t, func() bool { + require.EventuallyWithT(t, func(collect *assert.CollectT) { var ok bool - conns := getConnections(t, tr) + conns := getConnections(collect, tr) t.Log(conns) conn, ok = findConnection(c.LocalAddr(), c.RemoteAddr(), conns) - return ok && conn.Direction == network.OUTGOING + require.True(collect, ok) + require.Equal(collect, network.OUTGOING, conn.Direction) }, 3*time.Second, 100*time.Millisecond) // conn.Via should be nil, since traffic is local @@ -939,12 +941,13 @@ func (s *TracerSuite) TestGatewayLookupCrossNamespace() { require.NoError(t, err) var conn *network.ConnectionStats - require.Eventually(t, func() bool { + require.EventuallyWithT(t, func(collect *assert.CollectT) { var ok bool - conns := getConnections(t, tr) + conns := getConnections(collect, tr) t.Log(conns) conn, ok = findConnection(c.LocalAddr(), c.RemoteAddr(), conns) - return ok && conn.Direction == network.OUTGOING + require.True(collect, ok) + require.Equal(collect, network.OUTGOING, conn.Direction) }, 3*time.Second, 100*time.Millisecond) // traffic is local, so Via field should not be set @@ -957,7 +960,7 @@ func (s *TracerSuite) TestGatewayLookupCrossNamespace() { var clientPort int require.EventuallyWithT(t, func(c *assert.CollectT) { kernel.WithNS(test2Ns, func() error { - clientIP, clientPort, _, err = testdns.SendDNSQueries(t, []string{"google.com"}, dnsAddr, "udp") + clientIP, clientPort, _, err = testdns.SendDNSQueries([]string{"google.com"}, dnsAddr, "udp") return nil }) assert.NoError(c, err) @@ -969,10 +972,11 @@ func (s *TracerSuite) TestGatewayLookupCrossNamespace() { iif := ipRouteGet(t, "", dnsClientAddr.IP.String(), nil) ifi := ipRouteGet(t, dnsClientAddr.IP.String(), dnsAddr.String(), iif) - require.Eventually(t, func() bool { + require.EventuallyWithT(t, func(collect *assert.CollectT) { var ok bool - conn, ok = findConnection(dnsClientAddr, dnsServerAddr, getConnections(t, tr)) - return ok && conn.Direction == network.OUTGOING + conn, ok = findConnection(dnsClientAddr, dnsServerAddr, getConnections(collect, tr)) + require.True(collect, ok) + require.Equal(collect, network.OUTGOING, conn.Direction) }, 3*time.Second, 100*time.Millisecond) require.NotNil(t, conn.Via) @@ -1012,16 +1016,15 @@ func (s *TracerSuite) TestConnectionAssured() { require.NoError(t, err) } - var conn *network.ConnectionStats - require.Eventually(t, func() bool { - conns := getConnections(t, tr) - var ok bool - conn, ok = findConnection(c.LocalAddr(), c.RemoteAddr(), conns) - return ok && conn.Monotonic.SentBytes > 0 && conn.Monotonic.RecvBytes > 0 + require.EventuallyWithT(t, func(collect *assert.CollectT) { + conns := getConnections(collect, tr) + conn, ok := findConnection(c.LocalAddr(), c.RemoteAddr(), conns) + require.True(collect, ok) + require.Positive(collect, conn.Monotonic.SentBytes) + require.Positive(collect, conn.Monotonic.RecvBytes) + // verify the connection is marked as assured + require.True(collect, conn.IsAssured) }, 3*time.Second, 100*time.Millisecond, "could not find udp connection") - - // verify the connection is marked as assured - require.True(t, conn.IsAssured) } func (s *TracerSuite) TestConnectionNotAssured() { @@ -1047,16 +1050,15 @@ func (s *TracerSuite) TestConnectionNotAssured() { _, err = c.Write(genPayload(clientMessageSize)) require.NoError(t, err) - var conn *network.ConnectionStats - require.Eventually(t, func() bool { - conns := getConnections(t, tr) - var ok bool - conn, ok = findConnection(c.LocalAddr(), c.RemoteAddr(), conns) - return ok && conn.Monotonic.SentBytes > 0 && conn.Monotonic.RecvBytes == 0 + require.EventuallyWithT(t, func(collect *assert.CollectT) { + conns := getConnections(collect, tr) + conn, ok := findConnection(c.LocalAddr(), c.RemoteAddr(), conns) + require.True(collect, ok) + require.Positive(collect, conn.Monotonic.SentBytes) + require.Zero(collect, conn.Monotonic.RecvBytes) + // verify the connection is marked as not assured + require.False(collect, conn.IsAssured) }, 3*time.Second, 100*time.Millisecond, "could not find udp connection") - - // verify the connection is marked as not assured - require.False(t, conn.IsAssured) } func (s *TracerSuite) TestUDPConnExpiryTimeout() { @@ -1111,19 +1113,15 @@ func (s *TracerSuite) TestDNATIntraHostIntegration() { }) var incoming, outgoing *network.ConnectionStats - require.Eventually(t, func() bool { + require.EventuallyWithT(t, func(collect *assert.CollectT) { _, err = conn.Write([]byte("ping")) - if !assert.NoError(t, err, "error writing in client") { - return false - } + require.NoError(collect, err) bs := make([]byte, 4) _, err = conn.Read(bs) - if !assert.NoError(t, err) { - return false - } + require.NoError(collect, err) - conns := getConnections(t, tr) + conns := getConnections(collect, tr) t.Log(conns) outgoing, _ = findConnection(conn.LocalAddr(), conn.RemoteAddr(), conns) @@ -1131,7 +1129,9 @@ func (s *TracerSuite) TestDNATIntraHostIntegration() { t.Logf("incoming: %+v, outgoing: %+v", incoming, outgoing) - return outgoing != nil && incoming != nil && outgoing.IPTranslation != nil + require.NotNil(collect, outgoing) + require.NotNil(collect, incoming) + require.NotNil(collect, outgoing.IPTranslation) }, 3*time.Second, 100*time.Millisecond, "failed to get both incoming and outgoing connection") assert.True(t, outgoing.IntraHost, "did not find outgoing connection classified as local: %v", outgoing) @@ -1175,13 +1175,13 @@ func (s *TracerSuite) TestSelfConnect() { t.Logf("port is %d", port) - require.Eventually(t, func() bool { - conns := network.FilterConnections(getConnections(t, tr), func(cs network.ConnectionStats) bool { + require.EventuallyWithT(t, func(collect *assert.CollectT) { + conns := network.FilterConnections(getConnections(collect, tr), func(cs network.ConnectionStats) bool { return cs.SPort == uint16(port) && cs.DPort == uint16(port) && cs.Source.IsLoopback() && cs.Dest.IsLoopback() }) t.Logf("connections: %v", conns) - return len(conns) == 2 + require.Len(collect, conns, 2) }, 5*time.Second, 100*time.Millisecond, "could not find expected number of tcp connections, expected: 2") } @@ -1277,8 +1277,8 @@ func testUDPPeekCount(t *testing.T, udpnet, ip string) { var incoming *network.ConnectionStats var outgoing *network.ConnectionStats - require.Eventuallyf(t, func() bool { - conns := getConnections(t, tr) + require.EventuallyWithTf(t, func(collect *assert.CollectT) { + conns := getConnections(collect, tr) if outgoing == nil { outgoing, _ = findConnection(c.LocalAddr(), c.RemoteAddr(), conns) } @@ -1286,7 +1286,8 @@ func testUDPPeekCount(t *testing.T, udpnet, ip string) { incoming, _ = findConnection(c.RemoteAddr(), c.LocalAddr(), conns) } - return outgoing != nil && incoming != nil + require.NotNil(collect, outgoing) + require.NotNil(collect, incoming) }, 3*time.Second, 100*time.Millisecond, "couldn't find incoming and outgoing connections matching") m := outgoing.Monotonic @@ -1343,8 +1344,8 @@ func testUDPPacketSumming(t *testing.T, udpnet, ip string) { var incoming *network.ConnectionStats var outgoing *network.ConnectionStats - require.Eventuallyf(t, func() bool { - conns := getConnections(t, tr) + require.EventuallyWithTf(t, func(collect *assert.CollectT) { + conns := getConnections(collect, tr) if outgoing == nil { outgoing, _ = findConnection(c.LocalAddr(), c.RemoteAddr(), conns) } @@ -1352,7 +1353,8 @@ func testUDPPacketSumming(t *testing.T, udpnet, ip string) { incoming, _ = findConnection(c.RemoteAddr(), c.LocalAddr(), conns) } - return outgoing != nil && incoming != nil + require.NotNil(collect, outgoing) + require.NotNil(collect, incoming) }, 3*time.Second, 100*time.Millisecond, "couldn't find incoming and outgoing connections matching") m := outgoing.Monotonic @@ -1407,8 +1409,8 @@ func (s *TracerSuite) TestUDPPythonReusePort() { t.Logf("port is %d", port) conns := map[network.ConnectionTuple]network.ConnectionStats{} - require.Eventually(t, func() bool { - _conns := network.FilterConnections(getConnections(t, tr), func(cs network.ConnectionStats) bool { + require.EventuallyWithT(t, func(collect *assert.CollectT) { + _conns := network.FilterConnections(getConnections(collect, tr), func(cs network.ConnectionStats) bool { return cs.Type == network.UDP && cs.Source.IsLoopback() && cs.Dest.IsLoopback() && @@ -1421,7 +1423,7 @@ func (s *TracerSuite) TestUDPPythonReusePort() { t.Log(conns) - return len(conns) == 4 + require.Len(collect, conns, 4) }, 3*time.Second, 100*time.Millisecond, "could not find expected number of udp connections, expected: 4") var incoming, outgoing []network.ConnectionStats @@ -1781,15 +1783,12 @@ func (s *TracerSuite) TestSendfileError() { c.Close() - var conn *network.ConnectionStats - require.Eventually(t, func() bool { - conns := getConnections(t, tr) - var ok bool - conn, ok = findConnection(c.LocalAddr(), c.RemoteAddr(), conns) - return ok + require.EventuallyWithT(t, func(collect *assert.CollectT) { + conns := getConnections(collect, tr) + conn, ok := findConnection(c.LocalAddr(), c.RemoteAddr(), conns) + require.True(collect, ok) + require.Equalf(collect, int64(0), int64(conn.Monotonic.SentBytes), "sendfile data wasn't properly traced") }, 3*time.Second, 100*time.Millisecond, "couldn't find connection used by sendfile(2)") - - assert.Equalf(t, int64(0), int64(conn.Monotonic.SentBytes), "sendfile data wasn't properly traced") } func sendFile(t *testing.T, c SyscallConn, f *os.File, offset *int64, count int) (int, error) { @@ -1881,15 +1880,12 @@ func (s *TracerSuite) TestShortWrite() { c, err := net.FileConn(f) require.NoError(t, err) - var conn *network.ConnectionStats - require.Eventually(t, func() bool { - conns := getConnections(t, tr) - var ok bool - conn, ok = findConnection(c.LocalAddr(), c.RemoteAddr(), conns) - return ok + require.EventuallyWithT(t, func(collect *assert.CollectT) { + conns := getConnections(collect, tr) + conn, ok := findConnection(c.LocalAddr(), c.RemoteAddr(), conns) + require.True(collect, ok) + require.Equal(collect, sent, conn.Monotonic.SentBytes) }, 3*time.Second, 100*time.Millisecond, "couldn't find connection used by short write") - - assert.Equal(t, sent, conn.Monotonic.SentBytes) } func (s *TracerSuite) TestKprobeAttachWithKprobeEvents() { @@ -1972,14 +1968,11 @@ func (s *TracerSuite) TestBlockingReadCounts() { assert.Equal(collect, 6, read) }, 10*time.Second, 100*time.Millisecond, "failed to get required bytes") - var conn *network.ConnectionStats - require.Eventually(t, func() bool { - var found bool - conn, found = findConnection(c.(*net.TCPConn).LocalAddr(), c.(*net.TCPConn).RemoteAddr(), getConnections(t, tr)) - return found + require.EventuallyWithT(t, func(collect *assert.CollectT) { + conn, found := findConnection(c.(*net.TCPConn).LocalAddr(), c.(*net.TCPConn).RemoteAddr(), getConnections(collect, tr)) + require.True(collect, found) + require.Equal(collect, uint64(read), conn.Monotonic.RecvBytes) }, 3*time.Second, 100*time.Millisecond) - - assert.Equal(t, uint64(read), conn.Monotonic.RecvBytes) } func (s *TracerSuite) TestPreexistingConnectionDirection() { @@ -2020,15 +2013,16 @@ func (s *TracerSuite) TestPreexistingConnectionDirection() { c.Close() var incoming, outgoing *network.ConnectionStats - require.Eventually(t, func() bool { - connections := getConnections(t, tr) + require.EventuallyWithT(t, func(collect *assert.CollectT) { + connections := getConnections(collect, tr) if outgoing == nil { outgoing, _ = findConnection(c.LocalAddr(), c.RemoteAddr(), connections) } if incoming == nil { incoming, _ = findConnection(c.RemoteAddr(), c.LocalAddr(), connections) } - return incoming != nil && outgoing != nil + require.NotNil(collect, outgoing) + require.NotNil(collect, incoming) }, 3*time.Second, 100*time.Millisecond, "could not find connection incoming and outgoing connections") m := outgoing.Monotonic @@ -2136,14 +2130,12 @@ func (s *TracerSuite) TestUDPIncomingDirectionFix() { raddr, err := net.ResolveUDPAddr("udp", server.address) require.NoError(t, err) - var conn *network.ConnectionStats - require.Eventually(t, func() bool { - conns := getConnections(t, tr) - conn, _ = findConnection(net.UDPAddrFromAddrPort(ap), raddr, conns) - return conn != nil + require.EventuallyWithT(t, func(collect *assert.CollectT) { + conns := getConnections(collect, tr) + conn, _ := findConnection(net.UDPAddrFromAddrPort(ap), raddr, conns) + require.NotNil(collect, conn) + require.Equal(collect, network.OUTGOING, conn.Direction) }, 3*time.Second, 100*time.Millisecond) - - assert.Equal(t, network.OUTGOING, conn.Direction) } func TestEbpfConntrackerFallback(t *testing.T) { @@ -2413,31 +2405,24 @@ LOOP: // get connections, the client connection will still // not be in the closed state, so duration will the // timestamp of when it was created - var conn *network.ConnectionStats require.EventuallyWithT(t, func(collect *assert.CollectT) { - conns := getConnections(t, tr) - var found bool - conn, found = findConnection(c.LocalAddr(), srv.Addr(), conns) - assert.True(collect, found, "could not find connection") - + conns := getConnections(collect, tr) + conn, found := findConnection(c.LocalAddr(), srv.Addr(), conns) + require.True(collect, found, "could not find connection") + // all we can do is verify it is > 0 + require.Greater(collect, conn.Duration, time.Duration(0)) }, 3*time.Second, 100*time.Millisecond, "could not find connection") - // all we can do is verify it is > 0 - assert.Greater(t, conn.Duration, time.Duration(0)) require.NoError(t, c.Close(), "error closing client connection") require.EventuallyWithT(t, func(collect *assert.CollectT) { - var found bool - conn, found = findConnection(c.LocalAddr(), srv.Addr(), getConnections(t, tr)) - if !assert.True(collect, found, "could not find connection") { - return - } - assert.True(collect, conn.IsClosed, "connection should be closed") + conn, found := findConnection(c.LocalAddr(), srv.Addr(), getConnections(t, tr)) + require.True(collect, found, "could not find connection") + require.True(collect, conn.IsClosed, "connection should be closed") + // after closing the client connection, the duration should be + // updated to a value between 1s and 2s + require.Greater(collect, conn.Duration, time.Second, "connection duration should be between 1 and 2 seconds") + require.Less(collect, conn.Duration, 2*time.Second, "connection duration should be between 1 and 2 seconds") }, 3*time.Second, 100*time.Millisecond, "could not find closed connection") - - // after closing the client connection, the duration should be - // updated to a value between 1s and 2s - assert.Greater(t, conn.Duration, time.Second, "connection duration should be between 1 and 2 seconds") - assert.Less(t, conn.Duration, 2*time.Second, "connection duration should be between 1 and 2 seconds") } var failedConnectionsBuildModes = map[ebpftest.BuildMode]struct{}{ @@ -2503,19 +2488,17 @@ func (s *TracerSuite) TestTCPFailureConnectionTimeout() { localAddr := fmt.Sprintf("127.0.0.1:%d", port) // Check if the connection was recorded as failed due to timeout - var conn *network.ConnectionStats - require.Eventually(t, func() bool { - conns := getConnections(t, tr) + require.EventuallyWithT(t, func(collect *assert.CollectT) { + conns := getConnections(collect, tr) // 110 is the errno for ETIMEDOUT - conn = findFailedConnection(t, localAddr, srvAddr, conns, 110) - return conn != nil + conn := findFailedConnection(t, localAddr, srvAddr, conns, 110) + require.NotNil(collect, conn) + assert.Equal(collect, uint32(0), conn.TCPFailures[104], "expected 0 connection reset") + assert.Equal(collect, uint32(0), conn.TCPFailures[111], "expected 0 connection refused") + assert.Equal(collect, uint32(1), conn.TCPFailures[110], "expected 1 connection timeout") + assert.Equal(collect, uint64(0), conn.Monotonic.SentBytes, "expected 0 bytes sent") + assert.Equal(collect, uint64(0), conn.Monotonic.RecvBytes, "expected 0 bytes received") }, 3*time.Second, 100*time.Millisecond, "Failed connection not recorded properly") - - assert.Equal(t, uint32(0), conn.TCPFailures[104], "expected 0 connection reset") - assert.Equal(t, uint32(0), conn.TCPFailures[111], "expected 0 connection refused") - assert.Equal(t, uint32(1), conn.TCPFailures[110], "expected 1 connection timeout") - assert.Equal(t, uint64(0), conn.Monotonic.SentBytes, "expected 0 bytes sent") - assert.Equal(t, uint64(0), conn.Monotonic.RecvBytes, "expected 0 bytes received") } func (s *TracerSuite) TestTCPFailureConnectionResetWithDNAT() { @@ -2561,10 +2544,11 @@ func (s *TracerSuite) TestTCPFailureConnectionResetWithDNAT() { // Check if the connection was recorded as reset var conn *network.ConnectionStats - require.Eventually(t, func() bool { + require.EventuallyWithT(t, func(collect *assert.CollectT) { // 104 is the errno for ECONNRESET - conn = findFailedConnection(t, c.LocalAddr().String(), serverAddr, getConnections(t, tr), 104) - return conn != nil + // findFailedConnection gets `t` as it needs to log, it does not assert so no conversion is needed. + conn = findFailedConnection(t, c.LocalAddr().String(), serverAddr, getConnections(collect, tr), 104) + require.NotNil(collect, conn) }, 3*time.Second, 100*time.Millisecond, "Failed connection not recorded properly") require.NoError(t, c.Close(), "error closing client connection") diff --git a/pkg/network/tracer/tracer_test.go b/pkg/network/tracer/tracer_test.go index b032aabe44c5f..a108e11363fef 100644 --- a/pkg/network/tracer/tracer_test.go +++ b/pkg/network/tracer/tracer_test.go @@ -198,12 +198,13 @@ func (s *TracerSuite) TestTCPSendAndReceive() { require.NoError(t, err) var conn *network.ConnectionStats - require.Eventually(t, func() bool { + require.EventuallyWithT(t, func(collect *assert.CollectT) { // Iterate through active connections until we find connection created above, and confirm send + recv counts - connections := getConnections(t, tr) + connections := getConnections(collect, tr) var ok bool conn, ok = findConnection(c.LocalAddr(), c.RemoteAddr(), connections) - return conn != nil && ok + require.True(collect, ok) + require.NotNil(collect, conn) }, 3*time.Second, 100*time.Millisecond, "failed to find connection") m := conn.Monotonic @@ -246,10 +247,10 @@ func (s *TracerSuite) TestTCPShortLived() { c.Close() var conn *network.ConnectionStats - require.Eventually(t, func() bool { + require.EventuallyWithT(t, func(collect *assert.CollectT) { var ok bool - conn, ok = findConnection(c.LocalAddr(), c.RemoteAddr(), getConnections(t, tr)) - return ok + conn, ok = findConnection(c.LocalAddr(), c.RemoteAddr(), getConnections(collect, tr)) + require.True(collect, ok) }, 3*time.Second, 100*time.Millisecond, "connection not found") m := conn.Monotonic @@ -399,14 +400,15 @@ func (s *TracerSuite) TestTCPConnsReported() { var reverse *network.ConnectionStats var okForward, okReverse bool // for ebpfless, it takes time for the packet capture to arrive, so poll - require.Eventually(t, func() bool { + require.EventuallyWithT(t, func(collect *assert.CollectT) { // Test - connections := getConnections(t, tr) + connections := getConnections(collect, tr) // Server-side forward, okForward = findConnection(c.RemoteAddr(), c.LocalAddr(), connections) + require.True(collect, okForward) // Client-side reverse, okReverse = findConnection(c.LocalAddr(), c.RemoteAddr(), connections) - return okForward && okReverse + require.True(collect, okReverse) }, 3*time.Second, 100*time.Millisecond, "connection not found") assert.Equal(t, network.INCOMING, forward.Direction) @@ -470,7 +472,7 @@ func testUDPSendAndReceive(t *testing.T, tr *Tracer, addr string) { // Iterate through active connections until we find connection created above, and confirm send + recv counts require.EventuallyWithT(t, func(ct *assert.CollectT) { // use t instead of ct because getConnections uses require (not assert), and we get a better error message - connections := getConnections(t, tr) + connections := getConnections(ct, tr) incoming, ok := findConnection(c.RemoteAddr(), c.LocalAddr(), connections) if assert.True(ct, ok, "unable to find incoming connection") { assert.Equal(ct, network.INCOMING, incoming.Direction) @@ -482,12 +484,12 @@ func testUDPSendAndReceive(t *testing.T, tr *Tracer, addr string) { } outgoing, ok := findConnection(c.LocalAddr(), c.RemoteAddr(), connections) - if assert.True(t, ok, "unable to find outgoing connection") { - assert.Equal(t, network.OUTGOING, outgoing.Direction) + if assert.True(ct, ok, "unable to find outgoing connection") { + assert.Equal(ct, network.OUTGOING, outgoing.Direction) - assert.Equal(t, clientMessageSize, int(outgoing.Monotonic.SentBytes), "outgoing sent") - assert.Equal(t, serverMessageSize, int(outgoing.Monotonic.RecvBytes), "outgoing recv") - assert.True(t, outgoing.IntraHost, "outgoing intrahost") + assert.Equal(ct, clientMessageSize, int(outgoing.Monotonic.SentBytes), "outgoing sent") + assert.Equal(ct, serverMessageSize, int(outgoing.Monotonic.RecvBytes), "outgoing recv") + assert.True(ct, outgoing.IntraHost, "outgoing intrahost") } }, 3*time.Second, 100*time.Millisecond) @@ -579,14 +581,14 @@ func (s *TracerSuite) TestLocalDNSCollectionEnabled() { assert.NoError(t, err) // Iterate through active connections making sure theres at least one connection - require.Eventually(t, func() bool { - for _, c := range getConnections(t, tr).Conns { + require.EventuallyWithT(t, func(collect *assert.CollectT) { + for _, c := range getConnections(collect, tr).Conns { if isLocalDNS(c) { - return true + return } } - return false + require.Fail(collect, "could not find connection") }, 3*time.Second, 100*time.Millisecond, "could not find connection") } @@ -651,15 +653,15 @@ func (s *TracerSuite) TestShouldExcludeEmptyStatsConnection() { assert.NoError(t, err) var zeroConn network.ConnectionStats - require.Eventually(t, func() bool { - cxs := getConnections(t, tr) + require.EventuallyWithT(t, func(collect *assert.CollectT) { + cxs := getConnections(collect, tr) for _, c := range cxs.Conns { if c.Dest.String() == "127.0.0.1" && c.DPort == 80 { zeroConn = c - return true + return } } - return false + require.Fail(collect, "could not find connection") }, 2*time.Second, 100*time.Millisecond) // next call should not have the same connection @@ -1094,9 +1096,9 @@ func (s *TracerSuite) TestTCPEstablished() { var ok bool // for ebpfless, wait for the packet capture to appear - require.Eventually(t, func() bool { - conn, ok = findConnection(laddr, raddr, getConnections(t, tr)) - return ok + require.EventuallyWithT(t, func(collect *assert.CollectT) { + conn, ok = findConnection(laddr, raddr, getConnections(collect, tr)) + require.True(collect, ok) }, 3*time.Second, 100*time.Millisecond, "couldn't find connection") require.True(t, ok) @@ -1106,10 +1108,10 @@ func (s *TracerSuite) TestTCPEstablished() { c.Close() // Wait for the connection to be sent from the perf buffer - require.Eventually(t, func() bool { + require.EventuallyWithT(t, func(collect *assert.CollectT) { var ok bool - conn, ok = findConnection(laddr, raddr, getConnections(t, tr)) - return ok + conn, ok = findConnection(laddr, raddr, getConnections(collect, tr)) + require.True(collect, ok) }, 3*time.Second, 100*time.Millisecond, "couldn't find connection") require.True(t, ok) @@ -1140,10 +1142,10 @@ func (s *TracerSuite) TestTCPEstablishedPreExistingConn() { // Wait for the connection to be sent from the perf buffer var conn *network.ConnectionStats - require.Eventually(t, func() bool { + require.EventuallyWithT(t, func(collect *assert.CollectT) { var ok bool - conn, ok = findConnection(laddr, raddr, getConnections(t, tr)) - return ok + conn, ok = findConnection(laddr, raddr, getConnections(collect, tr)) + require.True(collect, ok) }, 3*time.Second, 100*time.Millisecond, "couldn't find connection") m := conn.Monotonic @@ -1167,7 +1169,7 @@ func (s *TracerSuite) TestUnconnectedUDPSendIPv4() { require.NoError(t, err) require.EventuallyWithT(t, func(ct *assert.CollectT) { - connections := getConnections(t, tr) + connections := getConnections(ct, tr) outgoing := network.FilterConnections(connections, func(cs network.ConnectionStats) bool { return cs.DPort == uint16(remotePort) }) @@ -1198,7 +1200,7 @@ func (s *TracerSuite) TestConnectedUDPSendIPv6() { var outgoing []network.ConnectionStats require.EventuallyWithT(t, func(ct *assert.CollectT) { - connections := getConnections(t, tr) + connections := getConnections(ct, tr) outgoing = network.FilterConnections(connections, func(cs network.ConnectionStats) bool { return cs.DPort == uint16(remotePort) }) @@ -1247,8 +1249,8 @@ func (s *TracerSuite) TestTCPDirection() { // Iterate through active connections until we find connection created above var outgoingConns []network.ConnectionStats var incomingConns []network.ConnectionStats - require.Eventuallyf(t, func() bool { - conns := getConnections(t, tr) + require.EventuallyWithTf(t, func(collect *assert.CollectT) { + conns := getConnections(collect, tr) if len(outgoingConns) == 0 { outgoingConns = network.FilterConnections(conns, func(cs network.ConnectionStats) bool { return fmt.Sprintf("%s:%d", cs.Dest, cs.DPort) == serverAddr @@ -1260,7 +1262,8 @@ func (s *TracerSuite) TestTCPDirection() { }) } - return len(outgoingConns) == 1 && len(incomingConns) == 1 + require.Len(collect, outgoingConns, 1) + require.Len(collect, incomingConns, 1) }, 3*time.Second, 10*time.Millisecond, "couldn't find incoming and outgoing http connections matching: %s", serverAddr) // Verify connection directions @@ -1290,11 +1293,11 @@ func (s *TracerSuite) TestTCPFailureConnectionRefused() { // Check if the connection was recorded as refused var foundConn *network.ConnectionStats - require.Eventually(t, func() bool { - conns := getConnections(t, tr) + require.EventuallyWithT(t, func(collect *assert.CollectT) { + conns := getConnections(collect, tr) // Check for the refusal record foundConn = findFailedConnectionByRemoteAddr(srvAddr, conns, 111) - return foundConn != nil + require.NotNil(collect, foundConn) }, 3*time.Second, 100*time.Millisecond, "Failed connection not recorded properly") assert.Equal(t, uint32(1), foundConn.TCPFailures[111], "expected 1 connection refused") @@ -1342,10 +1345,11 @@ func (s *TracerSuite) TestTCPFailureConnectionResetWithData() { // Check if the connection was recorded as reset var conn *network.ConnectionStats - require.Eventually(t, func() bool { + require.EventuallyWithT(t, func(collect *assert.CollectT) { // 104 is the errno for ECONNRESET - conn = findFailedConnection(t, c.LocalAddr().String(), serverAddr, getConnections(t, tr), 104) - return conn != nil + // findFailedConnection needs `t` for logging, hence no need to pass `collect`. + conn = findFailedConnection(t, c.LocalAddr().String(), serverAddr, getConnections(collect, tr), 104) + require.NotNil(collect, conn) }, 3*time.Second, 100*time.Millisecond, "Failed connection not recorded properly") require.NoError(t, c.Close(), "error closing client connection") @@ -1391,11 +1395,12 @@ func (s *TracerSuite) TestTCPFailureConnectionResetNoData() { // Check if the connection was recorded as reset var conn *network.ConnectionStats - require.Eventually(t, func() bool { - conns := getConnections(t, tr) + require.EventuallyWithT(t, func(collect *assert.CollectT) { + conns := getConnections(collect, tr) // 104 is the errno for ECONNRESET + // findFailedConnection needs `t` for logging, hence no need to pass `collect`. conn = findFailedConnection(t, c.LocalAddr().String(), serverAddr, conns, 104) - return conn != nil + require.NotNil(collect, conn) }, 3*time.Second, 100*time.Millisecond, "Failed connection not recorded properly") require.NoError(t, c.Close(), "error closing client connection") diff --git a/pkg/network/usm/kafka_monitor_test.go b/pkg/network/usm/kafka_monitor_test.go index 645db1e3bc064..c4f3e30c08ad4 100644 --- a/pkg/network/usm/kafka_monitor_test.go +++ b/pkg/network/usm/kafka_monitor_test.go @@ -521,14 +521,14 @@ func (s *KafkaProtocolParsingSuite) testKafkaProtocolParsing(t *testing.T, tls b require.NoError(t, client.Client.ProduceSync(ctxTimeout, record).FirstErr(), "record had a produce error while synchronously producing") var telemetryMap *kafka.RawKernelTelemetry - require.Eventually(t, func() bool { + require.EventuallyWithT(t, func(collect *assert.CollectT) { telemetryMap, err = kafka.GetKernelTelemetryMap(monitor.ebpfProgram.Manager.Manager) - require.NoError(t, err) + require.NoError(collect, err) // Ensure that the other buckets remain unchanged before verifying the expected bucket. for idx := 0; idx < kafka.TopicNameBuckets; idx++ { if idx != tt.expectedBucketIndex { - require.Equal(t, currentRawKernelTelemetry.Topic_name_size_buckets[idx], + require.Equal(collect, currentRawKernelTelemetry.Topic_name_size_buckets[idx], telemetryMap.Topic_name_size_buckets[idx], "Expected bucket (%d) to remain unchanged", idx) } @@ -536,7 +536,7 @@ func (s *KafkaProtocolParsingSuite) testKafkaProtocolParsing(t *testing.T, tls b // Verify that the expected bucket contains the correct number of occurrences. expectedNumberOfOccurrences := fixCount(2) // (1 produce request + 1 fetch request) - return uint64(expectedNumberOfOccurrences)+currentRawKernelTelemetry.Topic_name_size_buckets[tt.expectedBucketIndex] == telemetryMap.Topic_name_size_buckets[tt.expectedBucketIndex] + require.Equal(collect, uint64(expectedNumberOfOccurrences)+currentRawKernelTelemetry.Topic_name_size_buckets[tt.expectedBucketIndex], telemetryMap.Topic_name_size_buckets[tt.expectedBucketIndex]) }, time.Second*3, time.Millisecond*100) // Update the current raw kernel telemetry for the next iteration diff --git a/pkg/network/usm/tests/tracer_usm_linux_test.go b/pkg/network/usm/tests/tracer_usm_linux_test.go index cb7cf47e30e4a..5cbbef2763777 100644 --- a/pkg/network/usm/tests/tracer_usm_linux_test.go +++ b/pkg/network/usm/tests/tracer_usm_linux_test.go @@ -429,15 +429,15 @@ func (s *USMSuite) TestIgnoreTLSClassificationIfApplicationProtocolWasDetected() // Perform the TLS handshake require.NoError(t, tlsConn.Handshake()) - - require.Eventually(t, func() bool { - payload := getConnections(t, tr) + require.EventuallyWithT(t, func(collect *assert.CollectT) { + payload := getConnections(collect, tr) for _, c := range payload.Conns { if c.DPort == srvPortU16 || c.SPort == srvPortU16 { - return c.ProtocolStack.Contains(protocols.TLS) == tt.shouldBeTLS + require.Equal(collect, c.ProtocolStack.Contains(protocols.TLS), tt.shouldBeTLS) + return } } - return false + require.Fail(collect, "") }, 10*time.Second, 100*time.Millisecond) }) } @@ -502,14 +502,14 @@ func (s *USMSuite) TestTLSClassification() { }, validation: func(t *testing.T, tr *tracer.Tracer) { // Iterate through active connections until we find connection created above - require.Eventuallyf(t, func() bool { - payload := getConnections(t, tr) + require.EventuallyWithTf(t, func(collect *assert.CollectT) { + payload := getConnections(collect, tr) for _, c := range payload.Conns { if c.DPort == port && c.ProtocolStack.Contains(protocols.TLS) { - return true + return } } - return false + require.Fail(collect, "") }, 4*time.Second, 100*time.Millisecond, "couldn't find TLS connection matching: dst port %v", portAsString) }, }) @@ -574,8 +574,8 @@ func (s *USMSuite) TestTLSClassificationAlreadyRunning() { // Iterate through active connections until we find connection created above var foundIncoming, foundOutgoing bool - require.Eventuallyf(t, func() bool { - payload := getConnections(t, tr) + require.EventuallyWithTf(t, func(collect *assert.CollectT) { + payload := getConnections(collect, tr) for _, c := range payload.Conns { if !foundIncoming && c.DPort == uint16(portAsValue) && c.ProtocolStack.Contains(protocols.TLS) { @@ -586,7 +586,8 @@ func (s *USMSuite) TestTLSClassificationAlreadyRunning() { foundOutgoing = true } } - return foundIncoming && foundOutgoing + require.True(collect, foundIncoming) + require.True(collect, foundOutgoing) }, 4*time.Second, 100*time.Millisecond, "couldn't find matching TLS connection") } From 6615d8d6d1ba839ed20fce6448aa65c1911d79f6 Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Tue, 10 Dec 2024 08:56:16 +0100 Subject: [PATCH 070/303] [CWS] add `rocky_9.4` to CWS KMT tested platforms (#31886) --- .../kernel_matrix_testing/security_agent.yml | 41 +++++++++++++++---- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/.gitlab/kernel_matrix_testing/security_agent.yml b/.gitlab/kernel_matrix_testing/security_agent.yml index 26e9293844e9e..b7f4b80cc6ed1 100644 --- a/.gitlab/kernel_matrix_testing/security_agent.yml +++ b/.gitlab/kernel_matrix_testing/security_agent.yml @@ -147,6 +147,7 @@ kmt_run_secagent_tests_x64: - "oracle_9.3" - "rocky_8.5" - "rocky_9.3" + - "rocky_9.4" - "opensuse_15.3" - "opensuse_15.5" - "suse_12.5" @@ -268,6 +269,7 @@ kmt_run_secagent_tests_x64_docker: - "oracle_9.3" - "rocky_8.5" - "rocky_9.3" + - "rocky_9.4" TEST_SET: [cws_docker] after_script: - !reference [.collect_outcomes_kmt] @@ -301,6 +303,7 @@ kmt_run_secagent_tests_arm64: - "oracle_9.3" - "rocky_8.5" - "rocky_9.3" + - "rocky_9.4" - "opensuse_15.5" TEST_SET: [cws_host] after_script: @@ -395,6 +398,7 @@ kmt_run_secagent_tests_arm64_docker: - "oracle_9.3" - "rocky_8.5" - "rocky_9.3" + - "rocky_9.4" TEST_SET: ["cws_docker"] after_script: - !reference [.collect_outcomes_kmt] @@ -407,35 +411,54 @@ kmt_run_secagent_tests_arm64_docker: variables: TEST_COMPONENT: security-agent -kmt_secagent_cleanup_arm64: - when: always +.kmt_secagent_tests_join: + stage: kernel_matrix_testing_cleanup + rules: !reference [.on_security_agent_changes_or_manual] + image: registry.ddbuild.io/ci/datadog-agent-buildimages/system-probe_arm64$DATADOG_AGENT_SYSPROBE_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_SYSPROBE_BUILDIMAGES + tags: ["arch:arm64"] + script: + - echo "nothing to do here" + +kmt_secagent_tests_join_arm64: extends: - - .kmt_secagent_cleanup + - .kmt_secagent_tests_join needs: - - kmt_setup_env_secagent_arm64 - kmt_run_secagent_tests_arm64 - kmt_run_secagent_tests_arm64_ad - kmt_run_secagent_tests_arm64_ebpfless - kmt_run_secagent_tests_arm64_fentry - kmt_run_secagent_tests_arm64_docker - - upload_dependencies_secagent_arm64 + +kmt_secagent_cleanup_arm64: + when: always + extends: + - .kmt_secagent_cleanup + needs: + - kmt_setup_env_secagent_arm64 + - kmt_secagent_tests_join_arm64 - upload_secagent_tests_arm64 variables: ARCH: arm64 INSTANCE_TYPE: "m6gd.metal" -kmt_secagent_cleanup_x64: - when: always +kmt_secagent_tests_join_x64: extends: - - .kmt_secagent_cleanup + - .kmt_secagent_tests_join needs: - - kmt_setup_env_secagent_x64 - kmt_run_secagent_tests_x64 - kmt_run_secagent_tests_x64_required - kmt_run_secagent_tests_x64_ad - kmt_run_secagent_tests_x64_ebpfless - kmt_run_secagent_tests_x64_fentry - kmt_run_secagent_tests_x64_docker + +kmt_secagent_cleanup_x64: + when: always + extends: + - .kmt_secagent_cleanup + needs: + - kmt_setup_env_secagent_x64 + - kmt_secagent_tests_join_x64 - upload_dependencies_secagent_x64 - upload_secagent_tests_x64 variables: From 27d7ef8cfc37bdf9801b4bf8922c43ada21d500e Mon Sep 17 00:00:00 2001 From: pducolin <45568537+pducolin@users.noreply.github.com> Date: Tue, 10 Dec 2024 09:01:31 +0100 Subject: [PATCH 071/303] [tasks] add download link to update python (#31831) --- tasks/libs/common/utils.py | 12 ++++++++++++ tasks/setup.py | 15 ++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/tasks/libs/common/utils.py b/tasks/libs/common/utils.py index 175b6d848d4d7..56e96ba23403f 100644 --- a/tasks/libs/common/utils.py +++ b/tasks/libs/common/utils.py @@ -661,3 +661,15 @@ def agent_working_directory(): from tasks.libs.common.worktree import LOCAL_DIRECTORY, WORKTREE_DIRECTORY, is_worktree return WORKTREE_DIRECTORY if is_worktree() else LOCAL_DIRECTORY + + +def is_macos(): + return sys.platform == 'darwin' + + +def is_linux(): + return sys.platform.startswith('linux') + + +def is_windows(): + return sys.platform == 'win32' diff --git a/tasks/setup.py b/tasks/setup.py index 5e1eeee98d1f1..cf75c396f5779 100644 --- a/tasks/setup.py +++ b/tasks/setup.py @@ -19,7 +19,7 @@ from tasks.libs.common.color import Color, color_message from tasks.libs.common.git import get_default_branch from tasks.libs.common.status import Status -from tasks.libs.common.utils import running_in_pyapp +from tasks.libs.common.utils import is_linux, is_windows, running_in_pyapp if TYPE_CHECKING: from collections.abc import Generator @@ -145,10 +145,15 @@ def check_python_version(_ctx) -> SetupResult: status = Status.OK if tuple(sys.version_info)[:2] != tuple(int(d) for d in expected_version.split(".")): status = Status.FAIL - message = ( - f"Python version is {sys.version_info[0]}.{sys.version_info[1]}.{sys.version_info[2]}. " - "Please update your environment: https://datadoghq.dev/datadog-agent/setup/#python-dependencies" - ) + install_message = f"Please install Python {expected_version} with 'brew install python@{expected_version}'" + if is_windows(): + install_message = f"Please install Python {expected_version} from https://www.python.org/downloads/windows/" + elif is_linux(): + install_message = ( + f"Please install Python {expected_version} with 'sudo apt-get install python{expected_version}-dev'" + ) + + message = f"Python version out of date, current is {sys.version_info[0]}.{sys.version_info[1]} while expected is {expected_version}.\n{install_message}" return SetupResult("Check Python version", status, message) From d8125d7aa9970af55741c7425af86bb348562586 Mon Sep 17 00:00:00 2001 From: Guy Arbitman Date: Tue, 10 Dec 2024 10:28:14 +0200 Subject: [PATCH 072/303] usm: process monitor: Increase number of runners (#31878) --- pkg/process/monitor/process_monitor.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/process/monitor/process_monitor.go b/pkg/process/monitor/process_monitor.go index 8710aa63e324f..57c174840b66e 100644 --- a/pkg/process/monitor/process_monitor.go +++ b/pkg/process/monitor/process_monitor.go @@ -221,7 +221,10 @@ func (pm *ProcessMonitor) initNetlinkProcessEventMonitor() error { // initCallbackRunner runs multiple workers that run tasks sent over a queue. func (pm *ProcessMonitor) initCallbackRunner() { - cpuNum := runtime.NumVCPU() + cpuNum, err := kernel.PossibleCPUs() + if err != nil { + cpuNum = runtime.NumVCPU() + } pm.callbackRunner = make(chan func(), pendingCallbacksQueueSize) pm.callbackRunnerStopChannel = make(chan struct{}) pm.callbackRunnersWG.Add(cpuNum) From e70c007014b58d371c4494566eb39361d57dd872 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Tue, 10 Dec 2024 09:28:22 +0100 Subject: [PATCH 073/303] omnibus: snmp-traps: drop dependency on datadog-agent (#31868) --- omnibus/config/projects/agent.rb | 3 --- omnibus/config/software/datadog-agent-dependencies.rb | 3 +++ omnibus/config/software/datadog-agent.rb | 3 ++- omnibus/config/software/snmp-traps.rb | 3 --- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/omnibus/config/projects/agent.rb b/omnibus/config/projects/agent.rb index b3ab9c10ae1ad..51bacc89a45d0 100644 --- a/omnibus/config/projects/agent.rb +++ b/omnibus/config/projects/agent.rb @@ -221,9 +221,6 @@ # ------------------------------------ if do_build - # Include traps db file in snmp.d/traps_db/ - dependency 'snmp-traps' - # Datadog agent dependency 'datadog-agent' diff --git a/omnibus/config/software/datadog-agent-dependencies.rb b/omnibus/config/software/datadog-agent-dependencies.rb index fd6712983b10b..fc34796e2fa4b 100644 --- a/omnibus/config/software/datadog-agent-dependencies.rb +++ b/omnibus/config/software/datadog-agent-dependencies.rb @@ -33,6 +33,9 @@ dependency 'libpcap' if linux_target? and !heroku_target? # system-probe dependency +# Include traps db file in snmp.d/traps_db/ +dependency 'snmp-traps' + # Additional software if windows_target? if ENV['WINDOWS_DDNPM_DRIVER'] and not ENV['WINDOWS_DDNPM_DRIVER'].empty? diff --git a/omnibus/config/software/datadog-agent.rb b/omnibus/config/software/datadog-agent.rb index 8f24178d2c07e..a05e3b71bd877 100644 --- a/omnibus/config/software/datadog-agent.rb +++ b/omnibus/config/software/datadog-agent.rb @@ -120,7 +120,8 @@ # move around bin and config files move 'bin/agent/dist/datadog.yaml', "#{conf_dir}/datadog.yaml.example" - move 'bin/agent/dist/conf.d', "#{conf_dir}/" + copy 'bin/agent/dist/conf.d/.', "#{conf_dir}" + delete 'bin/agent/dist/conf.d' unless windows_target? copy 'bin/agent', "#{install_dir}/bin/" diff --git a/omnibus/config/software/snmp-traps.rb b/omnibus/config/software/snmp-traps.rb index 5a021b01ed8d4..bb13fc542fd3b 100644 --- a/omnibus/config/software/snmp-traps.rb +++ b/omnibus/config/software/snmp-traps.rb @@ -1,9 +1,6 @@ name "snmp-traps" default_version "0.4.0" -# Needs the configuration folder as created in datadog-agent -dependency 'datadog-agent' - source :url => "https://s3.amazonaws.com/dd-agent-omnibus/snmp_traps_db/dd_traps_db-#{version}.json.gz", :sha256 => "04fb9d43754c2656edf35f08fbad11ba8dc20d52654962933f3dd8f4d463b42c", :target_filename => "dd_traps_db.json.gz" From 5ad43ca4c34e476d4757045fabdcf5ed9288dd52 Mon Sep 17 00:00:00 2001 From: Guy Arbitman Date: Tue, 10 Dec 2024 10:55:55 +0200 Subject: [PATCH 074/303] usm: process monitor: reuse consumers.NewProcessConsumer (#31864) --- cmd/system-probe/modules/eventmonitor.go | 7 +- .../modules/eventmonitor_linux.go | 28 ++++++- .../modules/eventmonitor_windows.go | 4 +- pkg/ebpf/uprobes/attacher_test.go | 7 +- pkg/network/usm/monitor_tls_test.go | 8 +- .../usm/sharedlibraries/watcher_test.go | 7 +- pkg/process/monitor/process_monitor.go | 79 +++---------------- pkg/process/monitor/process_monitor_test.go | 30 +++---- pkg/process/monitor/testutil/testutil.go | 27 ------- 9 files changed, 55 insertions(+), 142 deletions(-) delete mode 100644 pkg/process/monitor/testutil/testutil.go diff --git a/cmd/system-probe/modules/eventmonitor.go b/cmd/system-probe/modules/eventmonitor.go index f74b13bec36af..41707ad513dec 100644 --- a/cmd/system-probe/modules/eventmonitor.go +++ b/cmd/system-probe/modules/eventmonitor.go @@ -85,14 +85,9 @@ func createEventMonitorModule(_ *sysconfigtypes.Config, deps module.FactoryDepen netconfig := netconfig.New() if netconfig.EnableUSMEventStream { - procmonconsumer, err := createProcessMonitorConsumer(evm, netconfig) - if err != nil { + if err := createProcessMonitorConsumer(evm, netconfig); err != nil { return nil, err } - if procmonconsumer != nil { - evm.RegisterEventConsumer(procmonconsumer) - log.Info("USM process monitoring consumer initialized") - } } gpucfg := gpuconfig.New() diff --git a/cmd/system-probe/modules/eventmonitor_linux.go b/cmd/system-probe/modules/eventmonitor_linux.go index 498e3b9feb92d..a3ee2f33666da 100644 --- a/cmd/system-probe/modules/eventmonitor_linux.go +++ b/cmd/system-probe/modules/eventmonitor_linux.go @@ -11,11 +11,13 @@ import ( "github.com/DataDog/datadog-agent/cmd/system-probe/api/module" "github.com/DataDog/datadog-agent/cmd/system-probe/config" "github.com/DataDog/datadog-agent/pkg/eventmonitor" + "github.com/DataDog/datadog-agent/pkg/eventmonitor/consumers" netconfig "github.com/DataDog/datadog-agent/pkg/network/config" usmconfig "github.com/DataDog/datadog-agent/pkg/network/usm/config" usmstate "github.com/DataDog/datadog-agent/pkg/network/usm/state" - procmon "github.com/DataDog/datadog-agent/pkg/process/monitor" + "github.com/DataDog/datadog-agent/pkg/process/monitor" secconfig "github.com/DataDog/datadog-agent/pkg/security/config" + "github.com/DataDog/datadog-agent/pkg/util/log" ) // EventMonitor - Event monitor Factory @@ -28,10 +30,28 @@ var EventMonitor = module.Factory{ }, } -func createProcessMonitorConsumer(evm *eventmonitor.EventMonitor, config *netconfig.Config) (eventmonitor.EventConsumer, error) { +const ( + eventMonitorID = "PROCESS_MONITOR" + eventMonitorChannelSize = 500 +) + +var ( + eventTypes = []consumers.ProcessConsumerEventTypes{ + consumers.ExecEventType, + consumers.ExitEventType, + } +) + +func createProcessMonitorConsumer(evm *eventmonitor.EventMonitor, config *netconfig.Config) error { if !usmconfig.IsUSMSupportedAndEnabled(config) || !usmconfig.NeedProcessMonitor(config) || usmstate.Get() != usmstate.Running { - return nil, nil + return nil } - return procmon.NewProcessMonitorEventConsumer(evm) + consumer, err := consumers.NewProcessConsumer(eventMonitorID, eventMonitorChannelSize, eventTypes, evm) + if err != nil { + return err + } + monitor.InitializeEventConsumer(consumer) + log.Info("USM process monitoring consumer initialized") + return nil } diff --git a/cmd/system-probe/modules/eventmonitor_windows.go b/cmd/system-probe/modules/eventmonitor_windows.go index 870c707f8f3e7..7ec627c076d67 100644 --- a/cmd/system-probe/modules/eventmonitor_windows.go +++ b/cmd/system-probe/modules/eventmonitor_windows.go @@ -21,8 +21,8 @@ var EventMonitor = module.Factory{ Fn: createEventMonitorModule, } -func createProcessMonitorConsumer(_ *eventmonitor.EventMonitor, _ *netconfig.Config) (eventmonitor.EventConsumer, error) { - return nil, nil +func createProcessMonitorConsumer(_ *eventmonitor.EventMonitor, _ *netconfig.Config) error { + return nil } func createGPUProcessEventConsumer(_ *eventmonitor.EventMonitor) error { diff --git a/pkg/ebpf/uprobes/attacher_test.go b/pkg/ebpf/uprobes/attacher_test.go index 26428868c1d70..be848bb5c6afb 100644 --- a/pkg/ebpf/uprobes/attacher_test.go +++ b/pkg/ebpf/uprobes/attacher_test.go @@ -27,14 +27,12 @@ import ( "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode" "github.com/DataDog/datadog-agent/pkg/ebpf/ebpftest" "github.com/DataDog/datadog-agent/pkg/ebpf/prebuilt" - eventmonitortestutil "github.com/DataDog/datadog-agent/pkg/eventmonitor/testutil" + "github.com/DataDog/datadog-agent/pkg/eventmonitor/consumers/testutil" "github.com/DataDog/datadog-agent/pkg/network/go/bininspect" "github.com/DataDog/datadog-agent/pkg/network/usm/sharedlibraries" fileopener "github.com/DataDog/datadog-agent/pkg/network/usm/sharedlibraries/testutil" "github.com/DataDog/datadog-agent/pkg/network/usm/utils" "github.com/DataDog/datadog-agent/pkg/process/monitor" - procmontestutil "github.com/DataDog/datadog-agent/pkg/process/monitor/testutil" - secutils "github.com/DataDog/datadog-agent/pkg/security/utils" "github.com/DataDog/datadog-agent/pkg/util/kernel" ) @@ -800,8 +798,7 @@ func launchProcessMonitor(t *testing.T, useEventStream bool) *monitor.ProcessMon t.Cleanup(pm.Stop) require.NoError(t, pm.Initialize(useEventStream)) if useEventStream { - secutils.SetCachedHostname("test-hostname") - eventmonitortestutil.StartEventMonitor(t, procmontestutil.RegisterProcessMonitorEventConsumer) + monitor.InitializeEventConsumer(testutil.NewTestProcessConsumer(t)) } return pm diff --git a/pkg/network/usm/monitor_tls_test.go b/pkg/network/usm/monitor_tls_test.go index 322f9be425da4..44ca4244b07a1 100644 --- a/pkg/network/usm/monitor_tls_test.go +++ b/pkg/network/usm/monitor_tls_test.go @@ -31,7 +31,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/ebpf/ebpftest" "github.com/DataDog/datadog-agent/pkg/ebpf/prebuilt" - eventmonitortestutil "github.com/DataDog/datadog-agent/pkg/eventmonitor/testutil" + consumerstestutil "github.com/DataDog/datadog-agent/pkg/eventmonitor/consumers/testutil" "github.com/DataDog/datadog-agent/pkg/network" "github.com/DataDog/datadog-agent/pkg/network/config" "github.com/DataDog/datadog-agent/pkg/network/protocols" @@ -44,8 +44,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/network/usm/consts" usmtestutil "github.com/DataDog/datadog-agent/pkg/network/usm/testutil" "github.com/DataDog/datadog-agent/pkg/network/usm/utils" - procmontestutil "github.com/DataDog/datadog-agent/pkg/process/monitor/testutil" - secutils "github.com/DataDog/datadog-agent/pkg/security/utils" + "github.com/DataDog/datadog-agent/pkg/process/monitor" globalutils "github.com/DataDog/datadog-agent/pkg/util/testutil" dockerutils "github.com/DataDog/datadog-agent/pkg/util/testutil/docker" ) @@ -870,8 +869,7 @@ func setupUSMTLSMonitor(t *testing.T, cfg *config.Config) *Monitor { require.NoError(t, err) require.NoError(t, usmMonitor.Start()) if cfg.EnableUSMEventStream && usmconfig.NeedProcessMonitor(cfg) { - secutils.SetCachedHostname("test-hostname") - eventmonitortestutil.StartEventMonitor(t, procmontestutil.RegisterProcessMonitorEventConsumer) + monitor.InitializeEventConsumer(consumerstestutil.NewTestProcessConsumer(t)) } t.Cleanup(usmMonitor.Stop) t.Cleanup(utils.ResetDebugger) diff --git a/pkg/network/usm/sharedlibraries/watcher_test.go b/pkg/network/usm/sharedlibraries/watcher_test.go index ca401e180fc50..7af5b82782fe3 100644 --- a/pkg/network/usm/sharedlibraries/watcher_test.go +++ b/pkg/network/usm/sharedlibraries/watcher_test.go @@ -26,13 +26,11 @@ import ( "github.com/DataDog/datadog-agent/pkg/ebpf/ebpftest" "github.com/DataDog/datadog-agent/pkg/ebpf/prebuilt" - eventmonitortestutil "github.com/DataDog/datadog-agent/pkg/eventmonitor/testutil" + "github.com/DataDog/datadog-agent/pkg/eventmonitor/consumers/testutil" usmconfig "github.com/DataDog/datadog-agent/pkg/network/usm/config" fileopener "github.com/DataDog/datadog-agent/pkg/network/usm/sharedlibraries/testutil" "github.com/DataDog/datadog-agent/pkg/network/usm/utils" "github.com/DataDog/datadog-agent/pkg/process/monitor" - procmontestutil "github.com/DataDog/datadog-agent/pkg/process/monitor/testutil" - secutils "github.com/DataDog/datadog-agent/pkg/security/utils" "github.com/DataDog/datadog-agent/pkg/util/kernel" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -42,8 +40,7 @@ func launchProcessMonitor(t *testing.T, useEventStream bool) { t.Cleanup(pm.Stop) require.NoError(t, pm.Initialize(useEventStream)) if useEventStream { - secutils.SetCachedHostname("test-hostname") - eventmonitortestutil.StartEventMonitor(t, procmontestutil.RegisterProcessMonitorEventConsumer) + monitor.InitializeEventConsumer(testutil.NewTestProcessConsumer(t)) } } diff --git a/pkg/process/monitor/process_monitor.go b/pkg/process/monitor/process_monitor.go index 57c174840b66e..8dbdefc99a822 100644 --- a/pkg/process/monitor/process_monitor.go +++ b/pkg/process/monitor/process_monitor.go @@ -18,10 +18,9 @@ import ( "github.com/vishvananda/netlink" "go.uber.org/atomic" - "github.com/DataDog/datadog-agent/pkg/eventmonitor" + "github.com/DataDog/datadog-agent/pkg/eventmonitor/consumers" "github.com/DataDog/datadog-agent/pkg/network/protocols/telemetry" "github.com/DataDog/datadog-agent/pkg/runtime" - "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/util/kernel" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -490,76 +489,20 @@ func (pm *ProcessMonitor) Stop() { pm.processExitCallbacksMutex.Unlock() } -// Event defines the event used by the process monitor -type Event struct { - Type model.EventType - Pid uint32 -} - -// EventConsumer defines an event consumer to handle event monitor events in the -// process monitor -type EventConsumer struct{} - -// NewProcessMonitorEventConsumer returns a new process monitor event consumer -func NewProcessMonitorEventConsumer(em *eventmonitor.EventMonitor) (*EventConsumer, error) { - consumer := &EventConsumer{} - err := em.AddEventConsumerHandler(consumer) - return consumer, err -} - -// ChanSize returns the channel size used by this consumer -func (ec *EventConsumer) ChanSize() int { - return 500 -} - -// ID returns the ID of this consumer -func (ec *EventConsumer) ID() string { - return "PROCESS_MONITOR" -} - -// Start the consumer -func (ec *EventConsumer) Start() error { - return nil -} - -// Stop the consumer -func (ec *EventConsumer) Stop() { -} - -// EventTypes returns the event types handled by this consumer -func (ec *EventConsumer) EventTypes() []model.EventType { - return []model.EventType{ - model.ExecEventType, - model.ExitEventType, - } -} - -// HandleEvent handles events received from the event monitor -func (ec *EventConsumer) HandleEvent(event any) { - sevent, ok := event.(*Event) - if !ok { - return - } - - processMonitor.tel.events.Add(1) - switch sevent.Type { - case model.ExecEventType: +// InitializeEventConsumer initializes the event consumer with the event handling. +func InitializeEventConsumer(consumer *consumers.ProcessConsumer) { + consumer.SubscribeExec(func(pid uint32) { + processMonitor.tel.events.Add(1) processMonitor.tel.exec.Add(1) if processMonitor.hasExecCallbacks.Load() { - processMonitor.handleProcessExec(sevent.Pid) + processMonitor.handleProcessExec(pid) } - case model.ExitEventType: + }) + consumer.SubscribeExit(func(pid uint32) { + processMonitor.tel.events.Add(1) processMonitor.tel.exit.Add(1) if processMonitor.hasExitCallbacks.Load() { - processMonitor.handleProcessExit(sevent.Pid) + processMonitor.handleProcessExit(pid) } - } -} - -// Copy should copy the given event or return nil to discard it -func (ec *EventConsumer) Copy(event *model.Event) any { - return &Event{ - Type: event.GetEventType(), - Pid: event.GetProcessPid(), - } + }) } diff --git a/pkg/process/monitor/process_monitor_test.go b/pkg/process/monitor/process_monitor_test.go index 0fe9e80bd21cb..c03cf721aaafc 100644 --- a/pkg/process/monitor/process_monitor_test.go +++ b/pkg/process/monitor/process_monitor_test.go @@ -19,13 +19,10 @@ import ( "github.com/vishvananda/netns" "go.uber.org/atomic" - "github.com/DataDog/datadog-agent/pkg/eventmonitor" - eventmonitortestutil "github.com/DataDog/datadog-agent/pkg/eventmonitor/testutil" + "github.com/DataDog/datadog-agent/pkg/eventmonitor/consumers/testutil" "github.com/DataDog/datadog-agent/pkg/network/protocols/telemetry" - "github.com/DataDog/datadog-agent/pkg/security/utils" "github.com/DataDog/datadog-agent/pkg/util" "github.com/DataDog/datadog-agent/pkg/util/kernel" - "github.com/DataDog/datadog-agent/pkg/util/log" ) func getProcessMonitor(t *testing.T) *ProcessMonitor { @@ -40,12 +37,12 @@ func getProcessMonitor(t *testing.T) *ProcessMonitor { func waitForProcessMonitor(t *testing.T, pm *ProcessMonitor) { execCounter := atomic.NewInt32(0) execCallback := func(_ uint32) { execCounter.Inc() } - registerCallback(t, pm, true, (*ProcessCallback)(&execCallback)) + registerCallback(t, pm, true, &execCallback) exitCounter := atomic.NewInt32(0) // Sanity subscribing a callback. exitCallback := func(_ uint32) { exitCounter.Inc() } - registerCallback(t, pm, false, (*ProcessCallback)(&exitCallback)) + registerCallback(t, pm, false, &exitCallback) require.Eventually(t, func() bool { _ = exec.Command("/bin/echo").Run() @@ -56,14 +53,7 @@ func waitForProcessMonitor(t *testing.T, pm *ProcessMonitor) { func initializePM(t *testing.T, pm *ProcessMonitor, useEventStream bool) { require.NoError(t, pm.Initialize(useEventStream)) if useEventStream { - utils.SetCachedHostname("test-hostname") - eventmonitortestutil.StartEventMonitor(t, func(t *testing.T, evm *eventmonitor.EventMonitor) { - // Can't use the implementation in procmontestutil due to import cycles - procmonconsumer, err := NewProcessMonitorEventConsumer(evm) - require.NoError(t, err) - evm.RegisterEventConsumer(procmonconsumer) - log.Info("process monitoring test consumer initialized") - }) + InitializeEventConsumer(testutil.NewTestProcessConsumer(t)) } waitForProcessMonitor(t, pm) } @@ -113,7 +103,7 @@ func (s *processMonitorSuite) TestProcessMonitorSanity() { defer execsMutex.Unlock() execs[pid] = struct{}{} } - registerCallback(t, pm, true, (*ProcessCallback)(&callback)) + registerCallback(t, pm, true, &callback) exitMutex := sync.RWMutex{} exits := make(map[uint32]struct{}) @@ -122,7 +112,7 @@ func (s *processMonitorSuite) TestProcessMonitorSanity() { defer exitMutex.Unlock() exits[pid] = struct{}{} } - registerCallback(t, pm, false, (*ProcessCallback)(&exitCallback)) + registerCallback(t, pm, false, &exitCallback) initializePM(t, pm, s.useEventStream) cmd := exec.Command(testBinaryPath, "test") @@ -182,7 +172,7 @@ func (s *processMonitorSuite) TestProcessRegisterMultipleCallbacks() { defer execCountersMutexes[i].Unlock() c[pid] = struct{}{} } - registerCallback(t, pm, true, (*ProcessCallback)(&callback)) + registerCallback(t, pm, true, &callback) exitCountersMutexes[i] = sync.RWMutex{} exitCounters[i] = make(map[uint32]struct{}) @@ -193,7 +183,7 @@ func (s *processMonitorSuite) TestProcessRegisterMultipleCallbacks() { defer exitCountersMutexes[i].Unlock() exitc[pid] = struct{}{} } - registerCallback(t, pm, false, (*ProcessCallback)(&exitCallback)) + registerCallback(t, pm, false, &exitCallback) } initializePM(t, pm, s.useEventStream) @@ -252,10 +242,10 @@ func (s *processMonitorSuite) TestProcessMonitorInNamespace() { pm := getProcessMonitor(t) callback := func(pid uint32) { execSet.Store(pid, struct{}{}) } - registerCallback(t, pm, true, (*ProcessCallback)(&callback)) + registerCallback(t, pm, true, &callback) exitCallback := func(pid uint32) { exitSet.Store(pid, struct{}{}) } - registerCallback(t, pm, false, (*ProcessCallback)(&exitCallback)) + registerCallback(t, pm, false, &exitCallback) monNs, err := netns.New() require.NoError(t, err, "could not create network namespace for process monitor") diff --git a/pkg/process/monitor/testutil/testutil.go b/pkg/process/monitor/testutil/testutil.go deleted file mode 100644 index d270faec3968f..0000000000000 --- a/pkg/process/monitor/testutil/testutil.go +++ /dev/null @@ -1,27 +0,0 @@ -// 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. - -//go:build linux && test - -// Package testutil provides utilities for testing the process monitor -package testutil - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/DataDog/datadog-agent/pkg/eventmonitor" - procmon "github.com/DataDog/datadog-agent/pkg/process/monitor" - "github.com/DataDog/datadog-agent/pkg/util/log" -) - -// RegisterProcessMonitorEventConsumer registers the process monitor consumer to an EventMonitor -func RegisterProcessMonitorEventConsumer(t *testing.T, evm *eventmonitor.EventMonitor) { - procmonconsumer, err := procmon.NewProcessMonitorEventConsumer(evm) - require.NoError(t, err) - evm.RegisterEventConsumer(procmonconsumer) - log.Info("process monitoring test consumer initialized") -} From 7c1a13b48c98a3782396bd2390edaf199a67ca77 Mon Sep 17 00:00:00 2001 From: Guy Arbitman Date: Tue, 10 Dec 2024 11:09:50 +0200 Subject: [PATCH 075/303] usm: sowatcher: Cut instruction cout by 90% (#31947) --- pkg/network/ebpf/c/shared-libraries/probes.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pkg/network/ebpf/c/shared-libraries/probes.h b/pkg/network/ebpf/c/shared-libraries/probes.h index 7a71650cdba5e..a33e228a63b26 100644 --- a/pkg/network/ebpf/c/shared-libraries/probes.h +++ b/pkg/network/ebpf/c/shared-libraries/probes.h @@ -23,10 +23,9 @@ static __always_inline void do_sys_open_helper_enter(const char *filename) { // Find the null character and clean up the garbage following it #pragma unroll for (int i = 0; i < LIB_PATH_MAX_SIZE; i++) { - if (path.len) { - path.buf[i] = 0; - } else if (path.buf[i] == 0) { + if (path.buf[i] == 0) { path.len = i; + break; } } } else { From 4f89621f4eb0e48640f666ddcff92845e31ab6bc Mon Sep 17 00:00:00 2001 From: Steven Blumenthal Date: Tue, 10 Dec 2024 10:26:24 +0100 Subject: [PATCH 076/303] Increase default kube_cache_sync_timeout_seconds from 5 to 10 seconds (#31877) --- flakes.yaml | 2 ++ pkg/config/setup/config.go | 2 +- test/new-e2e/tests/containers/dump_cluster_state.go | 5 +++-- test/new-e2e/tests/containers/k8s_test.go | 3 --- test/new-e2e/tests/containers/kindvm_test.go | 3 --- 5 files changed, 6 insertions(+), 9 deletions(-) diff --git a/flakes.yaml b/flakes.yaml index ab2af6b55f3ea..49c403b802517 100644 --- a/flakes.yaml +++ b/flakes.yaml @@ -11,3 +11,5 @@ test/new-e2e/tests/containers: - TestECSSuite/TestCPU/metric___container.cpu.usage{^ecs_container_name:stress-ng$} - TestEKSSuite/TestCPU/metric___container.cpu.usage{^kube_deployment:stress-ng$,^kube_namespace:workload-cpustress$} - TestKindSuite/TestCPU/metric___container.cpu.usage{^kube_deployment:stress-ng$,^kube_namespace:workload-cpustress$} + - TestKindSuite/TestAdmissionControllerWithAutoDetectedLanguage + - TestKindSuite diff --git a/pkg/config/setup/config.go b/pkg/config/setup/config.go index a9c74bb2765fa..563f4230a866e 100644 --- a/pkg/config/setup/config.go +++ b/pkg/config/setup/config.go @@ -490,7 +490,7 @@ func InitConfig(config pkgconfigmodel.Setup) { config.BindEnvAndSetDefault("leader_election_default_resource", "configmap") config.BindEnvAndSetDefault("leader_election_release_on_shutdown", true) config.BindEnvAndSetDefault("kube_resources_namespace", "") - config.BindEnvAndSetDefault("kube_cache_sync_timeout_seconds", 5) + config.BindEnvAndSetDefault("kube_cache_sync_timeout_seconds", 10) // Datadog cluster agent config.BindEnvAndSetDefault("cluster_agent.enabled", false) diff --git a/test/new-e2e/tests/containers/dump_cluster_state.go b/test/new-e2e/tests/containers/dump_cluster_state.go index ddf546d889d09..a1d0eeb97928c 100644 --- a/test/new-e2e/tests/containers/dump_cluster_state.go +++ b/test/new-e2e/tests/containers/dump_cluster_state.go @@ -17,7 +17,6 @@ import ( "strings" "sync" - "github.com/DataDog/datadog-agent/pkg/util/pointer" awsconfig "github.com/aws/aws-sdk-go-v2/config" awsec2 "github.com/aws/aws-sdk-go-v2/service/ec2" awsec2types "github.com/aws/aws-sdk-go-v2/service/ec2/types" @@ -34,6 +33,8 @@ import ( clientcmdapi "k8s.io/client-go/tools/clientcmd/api" kubectlget "k8s.io/kubectl/pkg/cmd/get" kubectlutil "k8s.io/kubectl/pkg/cmd/util" + + "github.com/DataDog/datadog-agent/pkg/util/pointer" ) func dumpEKSClusterState(ctx context.Context, name string) (ret string) { @@ -287,7 +288,7 @@ func dumpK8sClusterState(ctx context.Context, kubeconfig *clientcmdapi.Config, o getCmd.SetErr(out) getCmd.SetContext(ctx) getCmd.SetArgs([]string{ - "nodes,all", + "nodes,mutatingwebhookconfiguration,validatingwebhookconfiguration,all", "--all-namespaces", "-o", "wide", diff --git a/test/new-e2e/tests/containers/k8s_test.go b/test/new-e2e/tests/containers/k8s_test.go index fbb1195a976c3..fb235f979c951 100644 --- a/test/new-e2e/tests/containers/k8s_test.go +++ b/test/new-e2e/tests/containers/k8s_test.go @@ -19,7 +19,6 @@ import ( "gopkg.in/zorkian/go-datadog-api.v2" "github.com/DataDog/datadog-agent/pkg/util/pointer" - "github.com/DataDog/datadog-agent/pkg/util/testutil/flake" "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/components" @@ -993,8 +992,6 @@ func (suite *k8sSuite) TestAdmissionControllerWithLibraryAnnotation() { } func (suite *k8sSuite) TestAdmissionControllerWithAutoDetectedLanguage() { - // CONTINT-4009 - flake.Mark(suite.T()) suite.testAdmissionControllerPod("workload-mutated-lib-injection", "mutated-with-auto-detected-language", "python", true) } diff --git a/test/new-e2e/tests/containers/kindvm_test.go b/test/new-e2e/tests/containers/kindvm_test.go index 08e327fced435..5282e6fd65e34 100644 --- a/test/new-e2e/tests/containers/kindvm_test.go +++ b/test/new-e2e/tests/containers/kindvm_test.go @@ -10,8 +10,6 @@ import ( "encoding/json" "testing" - "github.com/DataDog/datadog-agent/pkg/util/testutil/flake" - "github.com/DataDog/test-infra-definitions/scenarios/aws/kindvm" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" @@ -28,7 +26,6 @@ type kindSuite struct { } func TestKindSuite(t *testing.T) { - flake.Mark(t) suite.Run(t, &kindSuite{}) } From a7ba9110c9023ca31f2c5e913a7ff98ab31a9a5b Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Tue, 10 Dec 2024 10:51:13 +0100 Subject: [PATCH 077/303] fix(assign_issue): Add the required slack token (#31949) --- .github/workflows/assign_issue.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/assign_issue.yml b/.github/workflows/assign_issue.yml index f752788cf64c8..0230f9d7c4d6f 100644 --- a/.github/workflows/assign_issue.yml +++ b/.github/workflows/assign_issue.yml @@ -26,5 +26,6 @@ jobs: - name: Assign issue env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SLACK_API_TOKEN : ${{ secrets.SLACK_DATADOG_AGENT_BOT_TOKEN }} run: | inv -e issue.assign-owner -i ${{ github.event.issue.number }} From bcfd6abb95c101caf619f5b2290a27b489ab3056 Mon Sep 17 00:00:00 2001 From: Brian Floersch Date: Tue, 10 Dec 2024 11:35:36 +0100 Subject: [PATCH 078/303] Make # of log pipelines configurable and default to GOMAXPROCS (#31190) Co-authored-by: Srdjan Grubor --- comp/logs/agent/agentimpl/agent_core_init.go | 2 +- comp/logs/agent/agentimpl/agent_serverless_init.go | 2 +- comp/logs/agent/config/constants.go | 5 ----- .../otelcol/logsagentpipeline/logsagentpipelineimpl/agent.go | 2 +- pkg/compliance/reporter.go | 2 +- pkg/config/setup/config.go | 4 ++++ pkg/security/reporter/reporter.go | 2 +- 7 files changed, 9 insertions(+), 10 deletions(-) diff --git a/comp/logs/agent/agentimpl/agent_core_init.go b/comp/logs/agent/agentimpl/agent_core_init.go index 37d5c029cf0f6..fae9804bae9b8 100644 --- a/comp/logs/agent/agentimpl/agent_core_init.go +++ b/comp/logs/agent/agentimpl/agent_core_init.go @@ -46,7 +46,7 @@ func (a *logAgent) SetupPipeline(processingRules []*config.ProcessingRule, wmeta diagnosticMessageReceiver := diagnostic.NewBufferedMessageReceiver(nil, a.hostname) // setup the pipeline provider that provides pairs of processor and sender - pipelineProvider := pipeline.NewProvider(config.NumberOfPipelines, auditor, diagnosticMessageReceiver, processingRules, a.endpoints, destinationsCtx, NewStatusProvider(), a.hostname, a.config) + pipelineProvider := pipeline.NewProvider(a.config.GetInt("logs_config.pipelines"), auditor, diagnosticMessageReceiver, processingRules, a.endpoints, destinationsCtx, NewStatusProvider(), a.hostname, a.config) // setup the launchers lnchrs := launchers.NewLaunchers(a.sources, pipelineProvider, auditor, a.tracker) diff --git a/comp/logs/agent/agentimpl/agent_serverless_init.go b/comp/logs/agent/agentimpl/agent_serverless_init.go index 31dbf3e41d2dc..67711def14029 100644 --- a/comp/logs/agent/agentimpl/agent_serverless_init.go +++ b/comp/logs/agent/agentimpl/agent_serverless_init.go @@ -49,7 +49,7 @@ func (a *logAgent) SetupPipeline( destinationsCtx := client.NewDestinationsContext() // setup the pipeline provider that provides pairs of processor and sender - pipelineProvider := pipeline.NewServerlessProvider(config.NumberOfPipelines, a.auditor, diagnosticMessageReceiver, processingRules, a.endpoints, destinationsCtx, NewStatusProvider(), a.hostname, a.config) + pipelineProvider := pipeline.NewServerlessProvider(a.config.GetInt("logs_config.pipelines"), a.auditor, diagnosticMessageReceiver, processingRules, a.endpoints, destinationsCtx, NewStatusProvider(), a.hostname, a.config) lnchrs := launchers.NewLaunchers(a.sources, pipelineProvider, a.auditor, a.tracker) lnchrs.AddLauncher(channel.NewLauncher()) diff --git a/comp/logs/agent/config/constants.go b/comp/logs/agent/config/constants.go index ae9a0d74680f0..a66b989366370 100644 --- a/comp/logs/agent/config/constants.go +++ b/comp/logs/agent/config/constants.go @@ -5,11 +5,6 @@ package config -// Pipeline constraints -const ( - NumberOfPipelines = 4 -) - const ( // DateFormat is the default date format. DateFormat = "2006-01-02T15:04:05.000000000Z" diff --git a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/agent.go b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/agent.go index d1910d28db034..b014d5b31689e 100644 --- a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/agent.go +++ b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/agent.go @@ -210,7 +210,7 @@ func (a *Agent) SetupPipeline( destinationsCtx := client.NewDestinationsContext() // setup the pipeline provider that provides pairs of processor and sender - pipelineProvider := pipeline.NewProvider(config.NumberOfPipelines, auditor, &diagnostic.NoopMessageReceiver{}, processingRules, a.endpoints, destinationsCtx, NewStatusProvider(), a.hostname, a.config) + pipelineProvider := pipeline.NewProvider(a.config.GetInt("logs_config.pipelines"), auditor, &diagnostic.NoopMessageReceiver{}, processingRules, a.endpoints, destinationsCtx, NewStatusProvider(), a.hostname, a.config) a.auditor = auditor a.destinationsCtx = destinationsCtx diff --git a/pkg/compliance/reporter.go b/pkg/compliance/reporter.go index 501ca6f10bc43..cf59ee9043489 100644 --- a/pkg/compliance/reporter.go +++ b/pkg/compliance/reporter.go @@ -44,7 +44,7 @@ func NewLogReporter(hostname string, sourceName, sourceType string, endpoints *c auditor.Start() // setup the pipeline provider that provides pairs of processor and sender - pipelineProvider := pipeline.NewProvider(config.NumberOfPipelines, auditor, &diagnostic.NoopMessageReceiver{}, nil, endpoints, dstcontext, agentimpl.NewStatusProvider(), hostnameimpl.NewHostnameService(), pkgconfigsetup.Datadog()) + pipelineProvider := pipeline.NewProvider(4, auditor, &diagnostic.NoopMessageReceiver{}, nil, endpoints, dstcontext, agentimpl.NewStatusProvider(), hostnameimpl.NewHostnameService(), pkgconfigsetup.Datadog()) pipelineProvider.Start() logSource := sources.NewLogSource( diff --git a/pkg/config/setup/config.go b/pkg/config/setup/config.go index 563f4230a866e..a19de1ebed171 100644 --- a/pkg/config/setup/config.go +++ b/pkg/config/setup/config.go @@ -1572,6 +1572,10 @@ func logsagent(config pkgconfigmodel.Setup) { // Add a tag to logs that are truncated by the agent config.BindEnvAndSetDefault("logs_config.tag_truncated_logs", false) + // Number of logs pipeline instances. Defaults to number of logical CPU cores as defined by GOMAXPROCS or 4, whichever is lower. + logsPipelines := min(4, runtime.GOMAXPROCS(0)) + config.BindEnvAndSetDefault("logs_config.pipelines", logsPipelines) + // If true, the agent looks for container logs in the location used by podman, rather // than docker. This is a temporary configuration parameter to support podman logs until // a more substantial refactor of autodiscovery is made to determine this automatically. diff --git a/pkg/security/reporter/reporter.go b/pkg/security/reporter/reporter.go index 1c8a4f71bf5a0..227f94ac456ed 100644 --- a/pkg/security/reporter/reporter.go +++ b/pkg/security/reporter/reporter.go @@ -52,7 +52,7 @@ func newReporter(hostname string, stopper startstop.Stopper, sourceName, sourceT stopper.Add(auditor) // setup the pipeline provider that provides pairs of processor and sender - pipelineProvider := pipeline.NewProvider(logsconfig.NumberOfPipelines, auditor, &diagnostic.NoopMessageReceiver{}, nil, endpoints, context, agentimpl.NewStatusProvider(), hostnameimpl.NewHostnameService(), pkgconfigsetup.Datadog()) + pipelineProvider := pipeline.NewProvider(4, auditor, &diagnostic.NoopMessageReceiver{}, nil, endpoints, context, agentimpl.NewStatusProvider(), hostnameimpl.NewHostnameService(), pkgconfigsetup.Datadog()) pipelineProvider.Start() stopper.Add(pipelineProvider) From fdbee01da61702d171ffe826745011a9c05d0e92 Mon Sep 17 00:00:00 2001 From: Florent Clarret Date: Tue, 10 Dec 2024 12:28:56 +0100 Subject: [PATCH 079/303] Update release.json (#31952) --- release.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release.json b/release.json index 6c42ba0c2fe30..24cb211dbbdc3 100644 --- a/release.json +++ b/release.json @@ -3,7 +3,7 @@ "current_milestone": "7.62.0", "last_stable": { "6": "6.53.0", - "7": "7.59.0" + "7": "7.59.1" }, "nightly": { "INTEGRATIONS_CORE_VERSION": "master", From 6778936cf2c1983bcb921c26f90fe30ed6bb9125 Mon Sep 17 00:00:00 2001 From: Arthur Bellal Date: Tue, 10 Dec 2024 12:42:06 +0100 Subject: [PATCH 080/303] (fleet) small optmisation to the installer script (#31953) --- pkg/fleet/installer/setup/install.sh | 24 ++++++++++++------------ tasks/installer.py | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/pkg/fleet/installer/setup/install.sh b/pkg/fleet/installer/setup/install.sh index 440e8b71acf1d..d76e790de910f 100644 --- a/pkg/fleet/installer/setup/install.sh +++ b/pkg/fleet/installer/setup/install.sh @@ -22,10 +22,10 @@ install() { $sudo_cmd mkdir -p "${tmp_dir}" case "$(uname -m)" in x86_64) - echo "${downloader_bin_linux_amd64}" | base64 -d | $sudo_cmd tee "${downloader_path}" >/dev/null + write_installer_amd64 "$sudo_cmd" "$downloader_path" ;; aarch64) - echo "${downloader_bin_linux_arm64}" | base64 -d | $sudo_cmd tee "${downloader_path}" >/dev/null + write_installer_arm64 "$sudo_cmd" "$downloader_path" ;; esac $sudo_cmd chmod +x "${downloader_path}" @@ -37,16 +37,16 @@ install() { # Embedded binaries used to install Datadog. # Source: https://github.com/DataDog/datadog-agent/tree/INSTALLER_COMMIT/pkg/fleet/installer # DO NOT EDIT THIS SECTION MANUALLY. -downloader_bin_linux_amd64=$( - cat </dev/null +} +write_installer_arm64() { + local sudo_cmd=$1 + local path=$2 + base64 -d <<<"DOWNLOADER_BIN_LINUX_ARM64" | $sudo_cmd tee "${path}" >/dev/null +} install "$@" exit 0 diff --git a/tasks/installer.py b/tasks/installer.py index 7429a1eaf3148..9e758a96a3bac 100644 --- a/tasks/installer.py +++ b/tasks/installer.py @@ -111,7 +111,7 @@ def build_linux_script( build_downloader(ctx, flavor=flavor, version=version, os='linux', arch=arch) with open(DOWNLOADER_BIN, 'rb') as f: encoded_bin = base64.encodebytes(f.read()).decode('utf-8') - install_script = install_script.replace(f'DOWNLOADER_BIN_{arch.upper()}', encoded_bin) + install_script = install_script.replace(f'DOWNLOADER_BIN_LINUX_{arch.upper()}', encoded_bin) commit_sha = ctx.run('git rev-parse HEAD', hide=True).stdout.strip() install_script = install_script.replace('INSTALLER_COMMIT', commit_sha) From 3911e67300941f3b1a6910a1883f13bd28e403f3 Mon Sep 17 00:00:00 2001 From: Vincent Whitchurch Date: Tue, 10 Dec 2024 13:44:10 +0100 Subject: [PATCH 081/303] usm: test: Do not use splice in transparent proxy (#31955) --- .../external_unix_proxy_server.go | 4 +- .../testutil/proxy/unix_transparent_proxy.go | 57 ++++++++++++++++++- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/pkg/network/tracer/testutil/proxy/external_unix_proxy_server/external_unix_proxy_server.go b/pkg/network/tracer/testutil/proxy/external_unix_proxy_server/external_unix_proxy_server.go index 8ef7f164ae5b2..1f077d0717746 100644 --- a/pkg/network/tracer/testutil/proxy/external_unix_proxy_server/external_unix_proxy_server.go +++ b/pkg/network/tracer/testutil/proxy/external_unix_proxy_server/external_unix_proxy_server.go @@ -22,11 +22,13 @@ func main() { var unixPath string var useTLS bool var useControl bool + var useSplice bool flag.StringVar(&remoteAddr, "remote", "", "Remote server address to forward connections to") flag.StringVar(&unixPath, "unix", "/tmp/transparent.sock", "A local unix socket to listen on") flag.BoolVar(&useTLS, "tls", false, "Use TLS to connect to the remote server") flag.BoolVar(&useControl, "control", false, "Use control messages") + flag.BoolVar(&useSplice, "splice", false, "Use splice(2) to transfer data") // Parse command-line flags flag.Parse() @@ -34,7 +36,7 @@ func main() { done := make(chan os.Signal, 1) signal.Notify(done, syscall.SIGINT) - srv := proxy.NewUnixTransparentProxyServer(unixPath, remoteAddr, useTLS, useControl) + srv := proxy.NewUnixTransparentProxyServer(unixPath, remoteAddr, useTLS, useControl, useSplice) defer srv.Stop() if err := srv.Run(); err != nil { diff --git a/pkg/network/tracer/testutil/proxy/unix_transparent_proxy.go b/pkg/network/tracer/testutil/proxy/unix_transparent_proxy.go index 0d19319837b2b..9109b9e0d0756 100644 --- a/pkg/network/tracer/testutil/proxy/unix_transparent_proxy.go +++ b/pkg/network/tracer/testutil/proxy/unix_transparent_proxy.go @@ -43,6 +43,8 @@ type UnixTransparentProxyServer struct { useTLS bool // useControl indicates whether the proxy should expect control messages on the client socket useControl bool + // useSplice indicates whether splice(2) should be used to transfer data between the sockets + useSplice bool // isReady is a flag indicating whether the server is ready to accept connections. isReady atomic.Bool // wg is a wait group used to wait for the server to stop. @@ -52,12 +54,13 @@ type UnixTransparentProxyServer struct { } // NewUnixTransparentProxyServer returns a new instance of a UnixTransparentProxyServer. -func NewUnixTransparentProxyServer(unixPath, remoteAddr string, useTLS, useControl bool) *UnixTransparentProxyServer { +func NewUnixTransparentProxyServer(unixPath, remoteAddr string, useTLS, useControl bool, useSplice bool) *UnixTransparentProxyServer { return &UnixTransparentProxyServer{ unixPath: unixPath, remoteAddr: remoteAddr, useTLS: useTLS, useControl: useControl, + useSplice: useSplice, } } @@ -124,6 +127,51 @@ func WaitForConnectionReady(unixSocket string) error { return fmt.Errorf("could not connect %q after %d retries (after %v)", unixSocket, connectionRetries, connectionRetryInterval*connectionRetries) } +// copyWithoutSplice is based on io.copyBuffer() in the standard library with +// the WriteTo/ReadFrom usage removed (to remove the use of splice(2)) and the +// internal errors replaced (since they are inaccessible from here). +func copyWithoutSplice(dst io.Writer, src io.Reader, buf []byte) (written int64, err error) { + if buf == nil { + size := 32 * 1024 + if l, ok := src.(*io.LimitedReader); ok && int64(size) > l.N { + if l.N < 1 { + size = 1 + } else { + size = int(l.N) + } + } + buf = make([]byte, size) + } + for { + nr, er := src.Read(buf) + if nr > 0 { + nw, ew := dst.Write(buf[0:nr]) + if nw < 0 || nr < nw { + nw = 0 + if ew == nil { + ew = errors.New("invalid write result") + } + } + written += int64(nw) + if ew != nil { + err = ew + break + } + if nr != nw { + err = io.ErrShortWrite + break + } + } + if er != nil { + if er != io.EOF { + err = er + } + break + } + } + return written, err +} + // handleConnection handles a new connection, by forwarding all traffic to the remote address. func (p *UnixTransparentProxyServer) handleConnection(unixSocketConn net.Conn) { defer unixSocketConn.Close() @@ -219,7 +267,12 @@ func (p *UnixTransparentProxyServer) handleConnection(unixSocketConn net.Conn) { if cleanup != nil { defer cleanup() } - _, _ = io.Copy(dst, src) + + if p.useSplice { + _, _ = io.Copy(dst, src) + } else { + _, _ = copyWithoutSplice(dst, src, nil) + } } // If the unix socket is closed, we can close the remote as well. From 8d89378971e1074a64be7313c3bba7034a91fcc4 Mon Sep 17 00:00:00 2001 From: pducolin <45568537+pducolin@users.noreply.github.com> Date: Tue, 10 Dec 2024 13:48:47 +0100 Subject: [PATCH 082/303] [github] run pr-merge task only on PRs targeting main (#31956) --- .github/workflows/report-merged-pr.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/report-merged-pr.yml b/.github/workflows/report-merged-pr.yml index de4cfe0cb01b9..feefb3c5446bd 100644 --- a/.github/workflows/report-merged-pr.yml +++ b/.github/workflows/report-merged-pr.yml @@ -4,6 +4,8 @@ name: Report Merged PR on: pull_request: + branches: + - main types: [closed] permissions: {} From f0211e154ff254b01a16d09a8f770c2536a8c9c4 Mon Sep 17 00:00:00 2001 From: Guillaume Pagnoux Date: Tue, 10 Dec 2024 14:35:48 +0100 Subject: [PATCH 083/303] discovery: fix "too many open files" issue (#31957) --- .../servicediscovery/module/comm.go | 6 +-- .../servicediscovery/module/comm_test.go | 21 +++------- .../servicediscovery/module/envs_test.go | 17 +++----- .../module/ignore_proc_test.go | 7 +--- .../servicediscovery/module/impl_linux.go | 40 +++++-------------- .../module/impl_linux_test.go | 16 -------- .../servicediscovery/module/stat.go | 6 +-- 7 files changed, 27 insertions(+), 86 deletions(-) diff --git a/pkg/collector/corechecks/servicediscovery/module/comm.go b/pkg/collector/corechecks/servicediscovery/module/comm.go index 7b513080aef18..675eac0d2f246 100644 --- a/pkg/collector/corechecks/servicediscovery/module/comm.go +++ b/pkg/collector/corechecks/servicediscovery/module/comm.go @@ -13,8 +13,6 @@ import ( "strconv" "strings" - "github.com/shirou/gopsutil/v3/process" - "github.com/DataDog/datadog-agent/pkg/util/kernel" ddsync "github.com/DataDog/datadog-agent/pkg/util/sync" ) @@ -41,11 +39,11 @@ var ( ) // shouldIgnoreComm returns true if process should be ignored -func (s *discovery) shouldIgnoreComm(proc *process.Process) bool { +func (s *discovery) shouldIgnoreComm(pid int32) bool { if s.config.ignoreComms == nil { return false } - commPath := kernel.HostProc(strconv.Itoa(int(proc.Pid)), "comm") + commPath := kernel.HostProc(strconv.Itoa(int(pid)), "comm") file, err := os.Open(commPath) if err != nil { return true diff --git a/pkg/collector/corechecks/servicediscovery/module/comm_test.go b/pkg/collector/corechecks/servicediscovery/module/comm_test.go index 1bc296913ecf3..23568d19ecd2c 100644 --- a/pkg/collector/corechecks/servicediscovery/module/comm_test.go +++ b/pkg/collector/corechecks/servicediscovery/module/comm_test.go @@ -137,16 +137,10 @@ func TestShouldIgnoreComm(t *testing.T) { _ = cmd.Process.Kill() }) - var proc *process.Process require.EventuallyWithT(t, func(collect *assert.CollectT) { - proc, err = customNewProcess(int32(cmd.Process.Pid)) - assert.NoError(collect, err) - }, 2*time.Second, 100*time.Millisecond) - - require.EventuallyWithT(t, func(collect *assert.CollectT) { - ignore := discovery.shouldIgnoreComm(proc) + ignore := discovery.shouldIgnoreComm(int32(cmd.Process.Pid)) assert.Equal(collect, test.ignore, ignore) - }, 500*time.Millisecond, 100*time.Millisecond) + }, 2*time.Second, 100*time.Millisecond) }) } } @@ -193,9 +187,8 @@ func BenchmarkProcName(b *testing.B) { for i := 0; i < b.N; i++ { // create a new process on each iteration to eliminate name caching from the calculation - proc, err := customNewProcess(int32(cmd.Process.Pid)) - if err != nil { - b.Fatal(err) + proc := &process.Process{ + Pid: int32(cmd.Process.Pid), } comm, err := proc.Name() if err != nil { @@ -216,11 +209,7 @@ func BenchmarkShouldIgnoreComm(b *testing.B) { b.ReportAllocs() for i := 0; i < b.N; i++ { - proc, err := customNewProcess(int32(cmd.Process.Pid)) - if err != nil { - b.Fatal(err) - } - ok := discovery.shouldIgnoreComm(proc) + ok := discovery.shouldIgnoreComm(int32(cmd.Process.Pid)) if ok { b.Fatalf("process should not have been ignored") } diff --git a/pkg/collector/corechecks/servicediscovery/module/envs_test.go b/pkg/collector/corechecks/servicediscovery/module/envs_test.go index 31cb3c8816fe7..3d2987797ff0a 100644 --- a/pkg/collector/corechecks/servicediscovery/module/envs_test.go +++ b/pkg/collector/corechecks/servicediscovery/module/envs_test.go @@ -151,15 +151,12 @@ func TestTargetEnvs(t *testing.T) { // BenchmarkGetEnvs benchmarks reading of all environment variables from /proc//environ. func BenchmarkGetEnvs(b *testing.B) { - proc, err := customNewProcess(int32(os.Getpid())) - if err != nil { - return - } + proc := &process.Process{Pid: int32(os.Getpid())} + b.ResetTimer() b.ReportAllocs() for i := 0; i < b.N; i++ { - _, err = getEnvs(proc) - if err != nil { + if _, err := getEnvs(proc); err != nil { return } } @@ -167,16 +164,12 @@ func BenchmarkGetEnvs(b *testing.B) { // BenchmarkGetEnvsTarget benchmarks reading of target environment variables only from /proc//environ. func BenchmarkGetEnvsTarget(b *testing.B) { - proc, err := customNewProcess(int32(os.Getpid())) - if err != nil { - return - } + proc := &process.Process{Pid: int32(os.Getpid())} b.ResetTimer() b.ReportAllocs() for i := 0; i < b.N; i++ { - _, err = getTargetEnvs(proc) - if err != nil { + if _, err := getTargetEnvs(proc); err != nil { return } } diff --git a/pkg/collector/corechecks/servicediscovery/module/ignore_proc_test.go b/pkg/collector/corechecks/servicediscovery/module/ignore_proc_test.go index 90d0dc9d8dcb3..317455f84fbbe 100644 --- a/pkg/collector/corechecks/servicediscovery/module/ignore_proc_test.go +++ b/pkg/collector/corechecks/servicediscovery/module/ignore_proc_test.go @@ -69,12 +69,9 @@ func TestShouldIgnorePid(t *testing.T) { discovery := newDiscovery(nil) require.NotEmpty(t, discovery) - proc, err := customNewProcess(int32(cmd.Process.Pid)) - require.NoError(t, err) - require.EventuallyWithT(t, func(collect *assert.CollectT) { // wait until the service name becomes available - info, err := discovery.getServiceInfo(proc) + info, err := discovery.getServiceInfo(int32(cmd.Process.Pid)) assert.NoError(collect, err) assert.Equal(collect, test.service, info.ddServiceName) }, 3*time.Second, 100*time.Millisecond) @@ -92,7 +89,7 @@ func TestShouldIgnorePid(t *testing.T) { } // check saved pid to ignore - ignore := discovery.shouldIgnorePid(proc.Pid) + ignore := discovery.shouldIgnorePid(int32(cmd.Process.Pid)) require.Equal(t, test.ignore, ignore) }) } diff --git a/pkg/collector/corechecks/servicediscovery/module/impl_linux.go b/pkg/collector/corechecks/servicediscovery/module/impl_linux.go index 8c2b276d8f56b..c70f64efeae37 100644 --- a/pkg/collector/corechecks/servicediscovery/module/impl_linux.go +++ b/pkg/collector/corechecks/servicediscovery/module/impl_linux.go @@ -383,7 +383,11 @@ func (s *discovery) cleanIgnoredPids(alivePids map[int32]struct{}) { // getServiceInfo gets the service information for a process using the // servicedetector module. -func (s *discovery) getServiceInfo(proc *process.Process) (*serviceInfo, error) { +func (s *discovery) getServiceInfo(pid int32) (*serviceInfo, error) { + proc := &process.Process{ + Pid: pid, + } + cmdline, err := proc.CmdlineSlice() if err != nil { return nil, err @@ -432,39 +436,17 @@ func (s *discovery) getServiceInfo(proc *process.Process) (*serviceInfo, error) }, nil } -// customNewProcess is the same implementation as process.NewProcess but without calling CreateTimeWithContext, which -// is not needed and costly for the discovery module. -func customNewProcess(pid int32) (*process.Process, error) { - p := &process.Process{ - Pid: pid, - } - - exists, err := process.PidExists(pid) - if err != nil { - return p, err - } - if !exists { - return p, process.ErrorProcessNotRunning - } - return p, nil -} - // maxNumberOfPorts is the maximum number of listening ports which we report per // service. const maxNumberOfPorts = 50 // getService gets information for a single service. func (s *discovery) getService(context parsingContext, pid int32) *model.Service { - proc, err := customNewProcess(pid) - if err != nil { - return nil - } - - if s.shouldIgnorePid(proc.Pid) { + if s.shouldIgnorePid(pid) { return nil } - if s.shouldIgnoreComm(proc) { - s.addIgnoredPid(proc.Pid) + if s.shouldIgnoreComm(pid) { + s.addIgnoredPid(pid) return nil } @@ -523,7 +505,7 @@ func (s *discovery) getService(context parsingContext, pid int32) *model.Service ports = ports[:maxNumberOfPorts] } - rss, err := getRSS(proc) + rss, err := getRSS(pid) if err != nil { return nil } @@ -535,7 +517,7 @@ func (s *discovery) getService(context parsingContext, pid int32) *model.Service if ok { info = cached } else { - info, err = s.getServiceInfo(proc) + info, err = s.getServiceInfo(pid) if err != nil { return nil } @@ -550,7 +532,7 @@ func (s *discovery) getService(context parsingContext, pid int32) *model.Service name = info.generatedName } if s.shouldIgnoreService(name) { - s.addIgnoredPid(proc.Pid) + s.addIgnoredPid(pid) return nil } diff --git a/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go b/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go index e584b9816c474..6970f36651c8f 100644 --- a/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go +++ b/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go @@ -1025,22 +1025,6 @@ func TestTagsPriority(t *testing.T) { } } -func BenchmarkOldProcess(b *testing.B) { - b.ResetTimer() - b.ReportAllocs() - for i := 0; i < b.N; i++ { - process.NewProcess(int32(os.Getpid())) - } -} - -func BenchmarkNewProcess(b *testing.B) { - b.ResetTimer() - b.ReportAllocs() - for i := 0; i < b.N; i++ { - customNewProcess(int32(os.Getpid())) - } -} - func getSocketsOld(p *process.Process) ([]uint64, error) { FDs, err := p.OpenFiles() if err != nil { diff --git a/pkg/collector/corechecks/servicediscovery/module/stat.go b/pkg/collector/corechecks/servicediscovery/module/stat.go index ca894aaf0e727..9ea526f7f829d 100644 --- a/pkg/collector/corechecks/servicediscovery/module/stat.go +++ b/pkg/collector/corechecks/servicediscovery/module/stat.go @@ -16,8 +16,6 @@ import ( "strconv" "strings" - "github.com/shirou/gopsutil/v3/process" - "github.com/DataDog/datadog-agent/pkg/util/kernel" ) @@ -28,8 +26,8 @@ var pageSize = uint64(os.Getpagesize()) // getRSS returns the RSS for the process, in bytes. Compare MemoryInfo() in // gopsutil which does the same thing but which parses several other fields // which we're not interested in. -func getRSS(proc *process.Process) (uint64, error) { - statmPath := kernel.HostProc(strconv.Itoa(int(proc.Pid)), "statm") +func getRSS(pid int32) (uint64, error) { + statmPath := kernel.HostProc(strconv.Itoa(int(pid)), "statm") // This file is very small so just read it fully. contents, err := os.ReadFile(statmPath) From 5978d29b02cacc50288b20660816495bacd94448 Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:20:25 +0100 Subject: [PATCH 084/303] Refactor configuration to be able to pass a different SSH key per cloud provider (#31482) --- .gitlab/e2e/e2e.yml | 23 ++++++++++-- test/new-e2e/pkg/runner/configmap.go | 29 +++++++++------ test/new-e2e/pkg/runner/configmap_test.go | 20 +++++----- test/new-e2e/pkg/runner/parameters/const.go | 37 ++++++++++++++++--- .../runner/parameters/store_config_file.go | 35 ++++++++++++++++-- .../parameters/store_config_file_test.go | 4 +- .../pkg/runner/parameters/store_env.go | 12 ++++-- test/new-e2e/pkg/utils/e2e/client/docker.go | 2 +- test/new-e2e/pkg/utils/e2e/client/host.go | 6 +-- 9 files changed, 125 insertions(+), 43 deletions(-) diff --git a/.gitlab/e2e/e2e.yml b/.gitlab/e2e/e2e.yml index 092ef165d6231..9892eef7c2cb2 100644 --- a/.gitlab/e2e/e2e.yml +++ b/.gitlab/e2e/e2e.yml @@ -14,8 +14,16 @@ - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E profile >> ~/.aws/config || exit $? - export AWS_PROFILE=agent-qa-ci # Now all `aws` commands target the agent-qa profile - - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_public_key_rsa > $E2E_PUBLIC_KEY_PATH || exit $? - - touch $E2E_PRIVATE_KEY_PATH && chmod 600 $E2E_PRIVATE_KEY_PATH && $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_key_rsa > $E2E_PRIVATE_KEY_PATH || exit $? + # TODO: ADXT-768: Create new secret with different ssh key for the different cloud providers + # SSH Key retrieval for AWS + - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_public_key_rsa > $E2E_AWS_PUBLIC_KEY_PATH || exit $? + - touch $E2E_AWS_PRIVATE_KEY_PATH && chmod 600 $E2E_AWS_PRIVATE_KEY_PATH && $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_key_rsa > $E2E_AWS_PRIVATE_KEY_PATH || exit $? + # SSH Key retrieval for Azure + - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_public_key_rsa > $E2E_AZURE_PUBLIC_KEY_PATH || exit $? + - touch $E2E_AZURE_PRIVATE_KEY_PATH && chmod 600 $E2E_AZURE_PRIVATE_KEY_PATH && $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_key_rsa > $E2E_AZURE_PRIVATE_KEY_PATH || exit $? + # SSH Key retrieval for GCP + - $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_public_key_rsa > $E2E_GCP_PUBLIC_KEY_PATH || exit $? + - touch $E2E_GCP_PRIVATE_KEY_PATH && chmod 600 $E2E_GCP_PRIVATE_KEY_PATH && $CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_QA_E2E ssh_key_rsa > $E2E_GCP_PRIVATE_KEY_PATH || exit $? # Use S3 backend - pulumi login "s3://dd-pulumi-state?region=us-east-1&awssdk=v2&profile=$AWS_PROFILE" # Setup Azure credentials. https://www.pulumi.com/registry/packages/azure-native/installation-configuration/#set-configuration-using-pulumi-config @@ -35,9 +43,16 @@ KUBERNETES_MEMORY_REQUEST: 12Gi KUBERNETES_MEMORY_LIMIT: 16Gi KUBERNETES_CPU_REQUEST: 6 - E2E_PUBLIC_KEY_PATH: /tmp/agent-qa-ssh-key.pub - E2E_PRIVATE_KEY_PATH: /tmp/agent-qa-ssh-key + # AWS SSH Key configuration + E2E_AWS_PUBLIC_KEY_PATH: /tmp/agent-qa-aws-ssh-key.pub + E2E_AWS_PRIVATE_KEY_PATH: /tmp/agent-qa-aws-ssh-key E2E_KEY_PAIR_NAME: datadog-agent-ci-rsa + # Azure SSH Key configuration + E2E_AZURE_PUBLIC_KEY_PATH: /tmp/agent-qa-azure-ssh-key.pub + E2E_AZURE_PRIVATE_KEY_PATH: /tmp/agent-qa-azure-ssh-key + # GCP SSH Key configuration + E2E_GCP_PUBLIC_KEY_PATH: /tmp/agent-qa-gcp-ssh-key.pub + E2E_GCP_PRIVATE_KEY_PATH: /tmp/agent-qa-gcp-ssh-key E2E_PIPELINE_ID: $CI_PIPELINE_ID E2E_COMMIT_SHA: $CI_COMMIT_SHORT_SHA E2E_OUTPUT_DIR: $CI_PROJECT_DIR/e2e-output diff --git a/test/new-e2e/pkg/runner/configmap.go b/test/new-e2e/pkg/runner/configmap.go index bb4fd0a9fb0f7..9541320664572 100644 --- a/test/new-e2e/pkg/runner/configmap.go +++ b/test/new-e2e/pkg/runner/configmap.go @@ -127,14 +127,19 @@ func BuildStackParameters(profile Profile, scenarioConfig ConfigMap) (ConfigMap, // Parameters from profile cm.Set(InfraEnvironmentVariables, profile.EnvironmentNames(), false) params := map[parameters.StoreKey][]string{ - parameters.KeyPairName: {AWSKeyPairName}, - parameters.PublicKeyPath: {AWSPublicKeyPath, AzurePublicKeyPath, GCPPublicKeyPath, LocalPublicKeyPath}, - parameters.PrivateKeyPath: {AWSPrivateKeyPath, AzurePrivateKeyPath, GCPPrivateKeyPath}, - parameters.ExtraResourcesTags: {InfraExtraResourcesTags}, - parameters.PipelineID: {AgentPipelineID}, - parameters.MajorVersion: {AgentMajorVersion}, - parameters.CommitSHA: {AgentCommitSHA}, - parameters.InitOnly: {InfraInitOnly}, + parameters.KeyPairName: {AWSKeyPairName}, + parameters.AWSPublicKeyPath: {AWSPublicKeyPath}, + parameters.AzurePublicKeyPath: {AzurePublicKeyPath}, + parameters.GCPPublicKeyPath: {GCPPublicKeyPath}, + parameters.AWSPrivateKeyPath: {AWSPrivateKeyPath}, + parameters.AzurePrivateKeyPath: {AzurePrivateKeyPath}, + parameters.GCPPrivateKeyPath: {GCPPrivateKeyPath}, + parameters.LocalPublicKeyPath: {LocalPublicKeyPath}, + parameters.ExtraResourcesTags: {InfraExtraResourcesTags}, + parameters.PipelineID: {AgentPipelineID}, + parameters.MajorVersion: {AgentMajorVersion}, + parameters.CommitSHA: {AgentCommitSHA}, + parameters.InitOnly: {InfraInitOnly}, } for storeKey, configMapKeys := range params { @@ -149,9 +154,11 @@ func BuildStackParameters(profile Profile, scenarioConfig ConfigMap) (ConfigMap, // Secret parameters from profile store secretParams := map[parameters.StoreKey][]string{ - parameters.APIKey: {AgentAPIKey}, - parameters.APPKey: {AgentAPPKey}, - parameters.PrivateKeyPassword: {AWSPrivateKeyPassword, AzurePrivateKeyPassword, GCPPrivateKeyPassword}, + parameters.APIKey: {AgentAPIKey}, + parameters.APPKey: {AgentAPPKey}, + parameters.AWSPrivateKeyPassword: {AWSPrivateKeyPassword}, + parameters.AzurePrivateKeyPassword: {AzurePrivateKeyPassword}, + parameters.GCPPrivateKeyPassword: {GCPPrivateKeyPassword}, } for storeKey, configMapKeys := range secretParams { diff --git a/test/new-e2e/pkg/runner/configmap_test.go b/test/new-e2e/pkg/runner/configmap_test.go index 2e9bf966a53a2..23b02f0a0156c 100644 --- a/test/new-e2e/pkg/runner/configmap_test.go +++ b/test/new-e2e/pkg/runner/configmap_test.go @@ -37,16 +37,16 @@ func Test_BuildStackParameters(t *testing.T) { "ddinfra:env": auto.ConfigValue{Value: "", Secret: false}, "ddinfra:extraResourcesTags": auto.ConfigValue{Value: "extra_resources_tags", Secret: false}, "ddinfra:initOnly": auto.ConfigValue{Value: "init_only", Secret: false}, - "ddinfra:aws/defaultPublicKeyPath": auto.ConfigValue{Value: "public_key_path", Secret: false}, - "ddinfra:aws/defaultPrivateKeyPath": auto.ConfigValue{Value: "private_key_path", Secret: false}, - "ddinfra:aws/defaultPrivateKeyPassword": auto.ConfigValue{Value: "private_key_password", Secret: true}, - "ddinfra:az/defaultPublicKeyPath": auto.ConfigValue{Value: "public_key_path", Secret: false}, - "ddinfra:az/defaultPrivateKeyPath": auto.ConfigValue{Value: "private_key_path", Secret: false}, - "ddinfra:az/defaultPrivateKeyPassword": auto.ConfigValue{Value: "private_key_password", Secret: true}, - "ddinfra:gcp/defaultPublicKeyPath": auto.ConfigValue{Value: "public_key_path", Secret: false}, - "ddinfra:gcp/defaultPrivateKeyPath": auto.ConfigValue{Value: "private_key_path", Secret: false}, - "ddinfra:gcp/defaultPrivateKeyPassword": auto.ConfigValue{Value: "private_key_password", Secret: true}, - "ddinfra:local/defaultPublicKeyPath": auto.ConfigValue{Value: "public_key_path", Secret: false}, + "ddinfra:aws/defaultPublicKeyPath": auto.ConfigValue{Value: "aws_public_key_path", Secret: false}, + "ddinfra:aws/defaultPrivateKeyPath": auto.ConfigValue{Value: "aws_private_key_path", Secret: false}, + "ddinfra:aws/defaultPrivateKeyPassword": auto.ConfigValue{Value: "aws_private_key_password", Secret: true}, + "ddinfra:az/defaultPublicKeyPath": auto.ConfigValue{Value: "azure_public_key_path", Secret: false}, + "ddinfra:az/defaultPrivateKeyPath": auto.ConfigValue{Value: "azure_private_key_path", Secret: false}, + "ddinfra:az/defaultPrivateKeyPassword": auto.ConfigValue{Value: "azure_private_key_password", Secret: true}, + "ddinfra:gcp/defaultPublicKeyPath": auto.ConfigValue{Value: "gcp_public_key_path", Secret: false}, + "ddinfra:gcp/defaultPrivateKeyPath": auto.ConfigValue{Value: "gcp_private_key_path", Secret: false}, + "ddinfra:gcp/defaultPrivateKeyPassword": auto.ConfigValue{Value: "gcp_private_key_password", Secret: true}, + "ddinfra:local/defaultPublicKeyPath": auto.ConfigValue{Value: "local_public_key_path", Secret: false}, "ddagent:pipeline_id": auto.ConfigValue{Value: "pipeline_id", Secret: false}, "ddagent:commit_sha": auto.ConfigValue{Value: "commit_sha", Secret: false}, "ddagent:majorVersion": auto.ConfigValue{Value: "major_version", Secret: false}, diff --git a/test/new-e2e/pkg/runner/parameters/const.go b/test/new-e2e/pkg/runner/parameters/const.go index c23c1502946b6..227abac7f651f 100644 --- a/test/new-e2e/pkg/runner/parameters/const.go +++ b/test/new-e2e/pkg/runner/parameters/const.go @@ -5,6 +5,8 @@ package parameters +import "github.com/DataDog/test-infra-definitions/components" + // StoreKey alias to string type StoreKey string @@ -19,14 +21,28 @@ const ( ExtraResourcesTags StoreKey = "extra_resources_tags" // KeyPairName aws keypairname, used to access EC2 instances KeyPairName StoreKey = "key_pair_name" - // PrivateKeyPassword private ssh key password - PrivateKeyPassword StoreKey = "private_key_password" - // PrivateKeyPath private ssh key path - PrivateKeyPath StoreKey = "private_key_path" + // AWSPrivateKeyPassword private ssh key password + AWSPrivateKeyPassword StoreKey = StoreKey(components.CloudProviderAWS + PrivateKeyPasswordSuffix) + // AWSPrivateKeyPath private ssh key path + AWSPrivateKeyPath StoreKey = StoreKey(components.CloudProviderAWS + PrivateKeyPathSuffix) // Profile aws profile name Profile StoreKey = "profile" - // PublicKeyPath public ssh key path - PublicKeyPath StoreKey = "public_key_path" + // AWSPublicKeyPath public ssh key path + AWSPublicKeyPath StoreKey = StoreKey(components.CloudProviderAWS + PublicKeyPathSuffix) + //AzurePrivateKeyPassword private ssh key password + AzurePrivateKeyPassword StoreKey = StoreKey(components.CloudProviderAzure + PrivateKeyPasswordSuffix) + //AzurePrivateKeyPath private ssh key path + AzurePrivateKeyPath StoreKey = StoreKey(components.CloudProviderAzure + PrivateKeyPathSuffix) + //AzurePublicKeyPath public ssh key path + AzurePublicKeyPath StoreKey = StoreKey(components.CloudProviderAzure + PublicKeyPathSuffix) + //GCPPrivateKeyPassword private ssh key password + GCPPrivateKeyPassword StoreKey = StoreKey(components.CloudProviderGCP + PrivateKeyPasswordSuffix) + //GCPPrivateKeyPath private ssh key path + GCPPrivateKeyPath StoreKey = StoreKey(components.CloudProviderGCP + PrivateKeyPathSuffix) + //GCPPublicKeyPath public ssh key path + GCPPublicKeyPath StoreKey = StoreKey(components.CloudProviderGCP + PublicKeyPathSuffix) + // LocalPublicKeyPath public ssh key path + LocalPublicKeyPath StoreKey = "local_public_key_path" // PulumiPassword config file parameter name PulumiPassword StoreKey = "pulumi_password" // SkipDeleteOnFailure keep the stack on test failure @@ -56,3 +72,12 @@ const ( // MajorVersion config flag parameter name MajorVersion StoreKey = "major_version" ) + +const ( + // PrivateKeyPathSuffix private ssh key path suffix + PrivateKeyPathSuffix = "_private_key_path" + // PublicKeyPathSuffix public ssh key path suffix + PublicKeyPathSuffix = "_public_key_path" + // PrivateKeyPasswordSuffix private ssh key password suffix + PrivateKeyPasswordSuffix = "_private_key_password" +) diff --git a/test/new-e2e/pkg/runner/parameters/store_config_file.go b/test/new-e2e/pkg/runner/parameters/store_config_file.go index e9f20051e3708..8fd564adfb636 100644 --- a/test/new-e2e/pkg/runner/parameters/store_config_file.go +++ b/test/new-e2e/pkg/runner/parameters/store_config_file.go @@ -38,6 +38,8 @@ type Config struct { type ConfigParams struct { AWS AWS `yaml:"aws"` Azure Azure `yaml:"azure"` + GCP GCP `yaml:"gcp"` + Local Local `yaml:"local"` Agent Agent `yaml:"agent"` OutputDir string `yaml:"outputDir"` Pulumi Pulumi `yaml:"pulumi"` @@ -62,6 +64,19 @@ type Azure struct { PrivateKeyPassword string `yaml:"privateKeyPassword"` } +// GCP instance contains GCP related parameters +type GCP struct { + Account string `yaml:"account"` + PublicKeyPath string `yaml:"publicKeyPath"` + PrivateKeyPath string `yaml:"privateKeyPath"` + PrivateKeyPassword string `yaml:"privateKeyPassword"` +} + +// Local instance contains local related parameters +type Local struct { + PublicKeyPath string `yaml:"publicKeyPath"` +} + // Agent instance contains agent related parameters type Agent struct { APIKey string `yaml:"apiKey"` @@ -135,12 +150,26 @@ func (s configFileValueStore) get(key StoreKey) (string, error) { value = s.config.ConfigParams.Agent.APPKey case KeyPairName: value = s.config.ConfigParams.AWS.KeyPairName - case PublicKeyPath: + case AWSPublicKeyPath: value = s.config.ConfigParams.AWS.PublicKeyPath - case PrivateKeyPath: + case AWSPrivateKeyPath: value = s.config.ConfigParams.AWS.PrivateKeyPath - case PrivateKeyPassword: + case AWSPrivateKeyPassword: value = s.config.ConfigParams.AWS.PrivateKeyPassword + case AzurePrivateKeyPassword: + value = s.config.ConfigParams.Azure.PrivateKeyPassword + case AzurePrivateKeyPath: + value = s.config.ConfigParams.Azure.PrivateKeyPath + case AzurePublicKeyPath: + value = s.config.ConfigParams.Azure.PublicKeyPath + case GCPPrivateKeyPassword: + value = s.config.ConfigParams.GCP.PrivateKeyPassword + case GCPPrivateKeyPath: + value = s.config.ConfigParams.GCP.PrivateKeyPath + case GCPPublicKeyPath: + value = s.config.ConfigParams.GCP.PublicKeyPath + case LocalPublicKeyPath: + value = s.config.ConfigParams.Local.PublicKeyPath case StackParameters: value = s.stackParamsJSON case ExtraResourcesTags: diff --git a/test/new-e2e/pkg/runner/parameters/store_config_file_test.go b/test/new-e2e/pkg/runner/parameters/store_config_file_test.go index 68826e44f3b67..0c99a5a6d7314 100644 --- a/test/new-e2e/pkg/runner/parameters/store_config_file_test.go +++ b/test/new-e2e/pkg/runner/parameters/store_config_file_test.go @@ -52,7 +52,7 @@ func Test_NewConfigFileStore(t *testing.T) { assert.NoError(t, err) assert.Equal(t, "totoro", value) - value, err = store.Get(PublicKeyPath) + value, err = store.Get(AWSPublicKeyPath) assert.NoError(t, err) assert.Equal(t, "/Users/totoro/.ssh/id_rsa.pub", value) @@ -81,7 +81,7 @@ func Test_NewConfigFileStoreNoAWSAccount(t *testing.T) { assert.NoError(t, err) assert.Equal(t, "totoro", value) - value, err = store.Get(PublicKeyPath) + value, err = store.Get(AWSPublicKeyPath) assert.NoError(t, err) assert.Equal(t, "/Users/totoro/.ssh/id_rsa.pub", value) diff --git a/test/new-e2e/pkg/runner/parameters/store_env.go b/test/new-e2e/pkg/runner/parameters/store_env.go index 6e43128a2af69..1aba3ce15de34 100644 --- a/test/new-e2e/pkg/runner/parameters/store_env.go +++ b/test/new-e2e/pkg/runner/parameters/store_env.go @@ -19,10 +19,16 @@ var envVariablesByStoreKey = map[StoreKey]string{ Environments: "E2E_ENVIRONMENTS", ExtraResourcesTags: "E2E_EXTRA_RESOURCES_TAGS", KeyPairName: "E2E_KEY_PAIR_NAME", - PrivateKeyPassword: "E2E_PRIVATE_KEY_PASSWORD", - PrivateKeyPath: "E2E_PRIVATE_KEY_PATH", + AWSPrivateKeyPassword: "E2E_AWS_PRIVATE_KEY_PASSWORD", + AWSPrivateKeyPath: "E2E_AWS_PRIVATE_KEY_PATH", Profile: "E2E_PROFILE", - PublicKeyPath: "E2E_PUBLIC_KEY_PATH", + AWSPublicKeyPath: "E2E_AWS_PUBLIC_KEY_PATH", + AzurePrivateKeyPath: "E2E_AZURE_PRIVATE_KEY_PATH", + AzurePublicKeyPath: "E2E_AZURE_PUBLIC_KEY_PATH", + AzurePrivateKeyPassword: "E2E_AZURE_PRIVATE_KEY_PASSWORD", + GCPPrivateKeyPath: "E2E_GCP_PRIVATE_KEY_PATH", + GCPPublicKeyPath: "E2E_GCP_PUBLIC_KEY_PATH", + GCPPrivateKeyPassword: "E2E_GCP_PRIVATE_KEY_PASSWORD", PulumiPassword: "E2E_PULUMI_PASSWORD", SkipDeleteOnFailure: "E2E_SKIP_DELETE_ON_FAILURE", StackParameters: "E2E_STACK_PARAMS", diff --git a/test/new-e2e/pkg/utils/e2e/client/docker.go b/test/new-e2e/pkg/utils/e2e/client/docker.go index b31aba4ce7e85..1235bc56c0c2a 100644 --- a/test/new-e2e/pkg/utils/e2e/client/docker.go +++ b/test/new-e2e/pkg/utils/e2e/client/docker.go @@ -40,7 +40,7 @@ func NewDocker(t *testing.T, dockerOutput docker.ManagerOutput) (*Docker, error) sshOpts := []string{"-o", "StrictHostKeyChecking no"} - privateKeyPath, err := runner.GetProfile().ParamStore().GetWithDefault(parameters.PrivateKeyPath, "") + privateKeyPath, err := runner.GetProfile().ParamStore().GetWithDefault(parameters.StoreKey(dockerOutput.Host.CloudProvider+parameters.PrivateKeyPathSuffix), "") if err != nil { return nil, err } diff --git a/test/new-e2e/pkg/utils/e2e/client/host.go b/test/new-e2e/pkg/utils/e2e/client/host.go index e446f56ff32db..ad0f1e0eb8557 100644 --- a/test/new-e2e/pkg/utils/e2e/client/host.go +++ b/test/new-e2e/pkg/utils/e2e/client/host.go @@ -65,12 +65,12 @@ type Host struct { // reconnect retry logic func NewHost(context e2e.Context, hostOutput remote.HostOutput) (*Host, error) { var privateSSHKey []byte - privateKeyPath, err := runner.GetProfile().ParamStore().GetWithDefault(parameters.PrivateKeyPath, "") + + privateKeyPath, err := runner.GetProfile().ParamStore().GetWithDefault(parameters.StoreKey(hostOutput.CloudProvider+parameters.PrivateKeyPathSuffix), "") if err != nil { return nil, err } - - privateKeyPassword, err := runner.GetProfile().SecretStore().GetWithDefault(parameters.PrivateKeyPassword, "") + privateKeyPassword, err := runner.GetProfile().SecretStore().GetWithDefault(parameters.StoreKey(hostOutput.CloudProvider+parameters.PrivateKeyPasswordSuffix), "") if err != nil { return nil, err } From 357c34f5aad3ff5cbf0fdb911e0af7ffe55612b2 Mon Sep 17 00:00:00 2001 From: Jonathan Ribas Date: Tue, 10 Dec 2024 16:05:29 +0100 Subject: [PATCH 085/303] [CWS] Lower ptrace tracee resolution issue log level (#31950) --- pkg/security/probe/probe_ebpf.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/security/probe/probe_ebpf.go b/pkg/security/probe/probe_ebpf.go index c51e920adf851..1bb574938bfdd 100644 --- a/pkg/security/probe/probe_ebpf.go +++ b/pkg/security/probe/probe_ebpf.go @@ -1097,7 +1097,7 @@ func (p *EBPFProbe) handleEvent(CPU int, data []byte) { } else { pid, err := utils.TryToResolveTraceePid(event.ProcessContext.Process.Pid, event.PTrace.NSPID) if err != nil { - seclog.Errorf("PTrace err: %v", err) + seclog.Infof("PTrace err: %v", err) return } pidToResolve = pid From 6eeac68a54e5d43501d1fd0d5b1b4898ba3f71a6 Mon Sep 17 00:00:00 2001 From: Ryan Date: Tue, 10 Dec 2024 10:09:22 -0500 Subject: [PATCH 086/303] Remove flake designation from darwin-based dogstatsd tests (#31890) --- comp/dogstatsd/server/server_util_test.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/comp/dogstatsd/server/server_util_test.go b/comp/dogstatsd/server/server_util_test.go index 33355d4cbc982..f2c542f45c0e0 100644 --- a/comp/dogstatsd/server/server_util_test.go +++ b/comp/dogstatsd/server/server_util_test.go @@ -8,14 +8,12 @@ package server import ( - "runtime" "testing" "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/metrics/event" "github.com/DataDog/datadog-agent/pkg/metrics/servicecheck" - "github.com/DataDog/datadog-agent/pkg/util/testutil/flake" "go.uber.org/fx" @@ -77,10 +75,6 @@ func fulfillDeps(t testing.TB) serverDeps { } func fulfillDepsWithConfigOverride(t testing.TB, overrides map[string]interface{}) serverDeps { - // TODO: https://datadoghq.atlassian.net/browse/AMLII-1948 - if runtime.GOOS == "darwin" { - flake.Mark(t) - } return fxutil.Test[serverDeps](t, fx.Options( core.MockBundle(), serverdebugimpl.MockModule(), From e476cb30619e6e9c0ee7afa3649c8b124874f54b Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Tue, 10 Dec 2024 16:12:14 +0100 Subject: [PATCH 087/303] When running in CI, scrub e2e tests output to avoid leaking keys (#31902) Co-authored-by: pducolin <45568537+pducolin@users.noreply.github.com> --- tasks/new_e2e_tests.py | 9 ++++++++- tasks/tools/gotest-scrubbed.sh | 6 ++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100755 tasks/tools/gotest-scrubbed.sh diff --git a/tasks/new_e2e_tests.py b/tasks/new_e2e_tests.py index 4b0aef5a214a4..6b16dd799eaf9 100644 --- a/tasks/new_e2e_tests.py +++ b/tasks/new_e2e_tests.py @@ -108,7 +108,14 @@ def run( test_run_arg = f"-run {test_run_name}" cmd = f'gotestsum --format {gotestsum_format} ' - cmd += '{junit_file_flag} {json_flag} --packages="{packages}" -- -ldflags="-X {REPO_PATH}/test/new-e2e/tests/containers.GitCommit={commit}" {verbose} -mod={go_mod} -vet=off -timeout {timeout} -tags "{go_build_tags}" {nocache} {run} {skip} {test_run_arg} -args {osversion} {platform} {major_version} {arch} {flavor} {cws_supported_osversion} {src_agent_version} {dest_agent_version} {keep_stacks} {extra_flags}' + scrubber_raw_command = "" + # Scrub the test output to avoid leaking API or APP keys when running in the CI + if running_in_ci(): + scrubber_raw_command = ( + # Using custom go command piped with scrubber sed instructions https://github.com/gotestyourself/gotestsum#custom-go-test-command + f"--raw-command {os.path.join(os.path.dirname(__file__), 'tools', 'gotest-scrubbed.sh')} {{packages}}" + ) + cmd += f'{{junit_file_flag}} {{json_flag}} --packages="{{packages}}" {scrubber_raw_command} -- -ldflags="-X {{REPO_PATH}}/test/new-e2e/tests/containers.GitCommit={{commit}}" {{verbose}} -mod={{go_mod}} -vet=off -timeout {{timeout}} -tags "{{go_build_tags}}" {{nocache}} {{run}} {{skip}} {{test_run_arg}} -args {{osversion}} {{platform}} {{major_version}} {{arch}} {{flavor}} {{cws_supported_osversion}} {{src_agent_version}} {{dest_agent_version}} {{keep_stacks}} {{extra_flags}}' args = { "go_mod": "readonly", diff --git a/tasks/tools/gotest-scrubbed.sh b/tasks/tools/gotest-scrubbed.sh new file mode 100755 index 0000000000000..2000005289fae --- /dev/null +++ b/tasks/tools/gotest-scrubbed.sh @@ -0,0 +1,6 @@ +#!/bin/bash +### This script is used to run go test and scrub the output, the command can be used as follow: +### ./gotest-scrubbed.sh -- +go test -json "$1" "${@:3}" | +sed -E 's/\b[a-fA-F0-9]{27}([a-fA-F0-9]{5})\b/**************************\1/g' | # Scrub API keys +sed -E 's/\b[a-fA-F0-9]{35}([a-fA-F0-9]{5})\b/************************************\1/g' # Scrub APP keys From 04e117d5975a185843812b0829788e1e5b06dc72 Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Tue, 10 Dec 2024 16:12:22 +0100 Subject: [PATCH 088/303] Post process e2e tests logs to make them more readable (#31615) --- .gitlab/e2e/e2e.yml | 4 +- .gitlab/e2e_install_packages/common.yml | 5 ++ tasks/new_e2e_tests.py | 114 +++++++++++++++++++++++- 3 files changed, 121 insertions(+), 2 deletions(-) diff --git a/.gitlab/e2e/e2e.yml b/.gitlab/e2e/e2e.yml index 9892eef7c2cb2..3f0b2c313389e 100644 --- a/.gitlab/e2e/e2e.yml +++ b/.gitlab/e2e/e2e.yml @@ -57,8 +57,9 @@ E2E_COMMIT_SHA: $CI_COMMIT_SHORT_SHA E2E_OUTPUT_DIR: $CI_PROJECT_DIR/e2e-output EXTERNAL_LINKS_PATH: external_links_$CI_JOB_ID.json + E2E_LOGS_PROCESSING_TEST_DEPTH: 1 script: - - inv -e new-e2e-tests.run --targets $TARGETS -c ddagent:imagePullRegistry=669783387624.dkr.ecr.us-east-1.amazonaws.com -c ddagent:imagePullUsername=AWS -c ddagent:imagePullPassword=$(aws ecr get-login-password) --junit-tar junit-${CI_JOB_ID}.tgz ${EXTRA_PARAMS} --test-washer + - inv -e new-e2e-tests.run --targets $TARGETS -c ddagent:imagePullRegistry=669783387624.dkr.ecr.us-east-1.amazonaws.com -c ddagent:imagePullUsername=AWS -c ddagent:imagePullPassword=$(aws ecr get-login-password) --junit-tar junit-${CI_JOB_ID}.tgz ${EXTRA_PARAMS} --test-washer --logs-folder=$E2E_OUTPUT_DIR/logs --logs-post-processing --logs-post-processing-test-depth=$E2E_LOGS_PROCESSING_TEST_DEPTH after_script: - $CI_PROJECT_DIR/tools/ci/junit_upload.sh artifacts: @@ -403,6 +404,7 @@ new-e2e-installer: TARGETS: ./tests/installer/unix TEAM: fleet FLEET_INSTALL_METHOD: "install_script" + E2E_LOGS_PROCESSING_TEST_DEPTH: 2 new-e2e-installer-windows: extends: .new_e2e_template diff --git a/.gitlab/e2e_install_packages/common.yml b/.gitlab/e2e_install_packages/common.yml index 8985150b3ff14..965f5c67ce6f8 100644 --- a/.gitlab/e2e_install_packages/common.yml +++ b/.gitlab/e2e_install_packages/common.yml @@ -9,6 +9,7 @@ TARGETS: ./tests/agent-platform/install-script TEAM: agent-delivery EXTRA_PARAMS: --osversion $E2E_OSVERS --platform $E2E_PLATFORM --cws-supported-osversion $E2E_CWS_SUPPORTED_OSVERS --arch $E2E_ARCH --flavor $FLAVOR --no-verbose + E2E_LOGS_PROCESSING_TEST_DEPTH: 2 # We use a single test suite and run all the platforms test as subtest .new-e2e_step_by_step: stage: e2e_install_packages @@ -16,6 +17,7 @@ TARGETS: ./tests/agent-platform/step-by-step TEAM: agent-delivery EXTRA_PARAMS: --osversion $E2E_OSVERS --platform $E2E_PLATFORM --cws-supported-osversion $E2E_CWS_SUPPORTED_OSVERS --arch $E2E_ARCH --flavor $FLAVOR + E2E_LOGS_PROCESSING_TEST_DEPTH: 2 # We use a single test suite and run all the platforms test as subtest .new-e2e_script_upgrade7: stage: e2e_install_packages @@ -23,6 +25,7 @@ TARGETS: ./tests/agent-platform/upgrade TEAM: agent-delivery EXTRA_PARAMS: --osversion $E2E_OSVERS --platform $E2E_PLATFORM --arch $E2E_ARCH --flavor $FLAVOR + E2E_LOGS_PROCESSING_TEST_DEPTH: 2 # We use a single test suite and run all the platforms test as subtest parallel: matrix: - START_MAJOR_VERSION: [5, 6, 7] @@ -37,6 +40,7 @@ TARGETS: ./tests/agent-platform/persisting-integrations TEAM: agent-delivery EXTRA_PARAMS: --osversion $E2E_OSVERS --platform $E2E_PLATFORM --arch $E2E_ARCH --flavor $FLAVOR + E2E_LOGS_PROCESSING_TEST_DEPTH: 2 # We use a single test suite and run all the platforms test as subtest script: - DATADOG_AGENT_API_KEY=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $INSTALL_SCRIPT_API_KEY_ORG2 token) || exit $?; export DATADOG_AGENT_API_KEY - inv -e new-e2e-tests.run --targets $TARGETS --junit-tar "junit-${CI_JOB_ID}.tgz" ${EXTRA_PARAMS} --src-agent-version 7 --test-washer @@ -47,6 +51,7 @@ TARGETS: ./tests/agent-platform/rpm TEAM: agent-delivery EXTRA_PARAMS: --osversion $E2E_OSVERS --platform $E2E_PLATFORM --arch $E2E_ARCH + E2E_LOGS_PROCESSING_TEST_DEPTH: 2 # We use a single test suite and run all the platforms test as subtest script: - DATADOG_AGENT_API_KEY=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $INSTALL_SCRIPT_API_KEY_ORG2 token) || exit $?; export DATADOG_AGENT_API_KEY - inv -e new-e2e-tests.run --targets $TARGETS --junit-tar "junit-${CI_JOB_ID}.tgz" ${EXTRA_PARAMS} --test-washer diff --git a/tasks/new_e2e_tests.py b/tasks/new_e2e_tests.py index 6b16dd799eaf9..74f027afd1582 100644 --- a/tasks/new_e2e_tests.py +++ b/tasks/new_e2e_tests.py @@ -23,7 +23,7 @@ from tasks.libs.common.git import get_commit_sha from tasks.libs.common.go import download_go_dependencies from tasks.libs.common.gomodules import get_default_modules -from tasks.libs.common.utils import REPO_PATH, color_message, running_in_ci +from tasks.libs.common.utils import REPO_PATH, color_message, gitlab_section, running_in_ci from tasks.tools.e2e_stacks import destroy_remote_stack @@ -66,6 +66,9 @@ def run( test_washer=False, agent_image="", cluster_agent_image="", + logs_post_processing=False, + logs_post_processing_test_depth=1, + logs_folder="e2e_logs", ): """ Run E2E Tests based on test-infra-definitions infrastructure provisioning. @@ -171,6 +174,27 @@ def run( 'You can also add `E2E_DEV_MODE="true"` to run in dev mode which will leave the environment up after the tests.' ) + if logs_post_processing: + if len(test_res) == 1: + post_processed_output = post_process_output( + test_res[0].result_json_path, test_depth=logs_post_processing_test_depth + ) + + os.makedirs(logs_folder, exist_ok=True) + write_result_to_log_files(post_processed_output, logs_folder) + try: + pretty_print_logs(post_processed_output) + except TooManyLogsError: + print( + color_message("WARNING", "yellow") + + f": Too many logs to print, skipping logs printing to avoid Gitlab collapse. You can find your logs properly organized in the job artifacts: https://gitlab.ddbuild.io/DataDog/datadog-agent/-/jobs/{os.getenv('CI_JOB_ID')}/artifacts/browse/e2e-output/logs/" + ) + else: + print( + color_message("WARNING", "yellow") + + f": Logs post processing expect only test result for test/new-e2e module. Skipping because result contains test for {len(test_res)} modules." + ) + if not success: raise Exit(code=1) @@ -260,6 +284,94 @@ def cleanup_remote_stacks(ctx, stack_regex, pulumi_backend): print(f"Failed to destroy stack {stack}") +def post_process_output(path: str, test_depth: int = 1): + """ + Post process the test results to add the test run name + path: path to the test result json file + test_depth: depth of the test name to consider + + By default the test_depth is set to 1, which means that the logs will be splitted depending on the test suite name. + If we use a single test suite to run multiple tests we can increase the test_depth to split the logs per test. + For example with: + TestPackages/run_ubuntu + TestPackages/run_centos + TestPackages/run_debian + We should set test_depth to 2 to avoid mixing all the logs of the different tested platform + """ + + def is_parent(parent: list[str], child: list[str]) -> bool: + for i in range(len(parent)): + if parent[i] != child[i]: + return False + return True + + logs_per_test = {} + with open(path) as f: + all_lines = f.readlines() + + # Initalize logs_per_test with all test names + for line in all_lines: + json_line = json.loads(line) + if "Package" not in json_line or "Test" not in json_line or "Output" not in json_line: + continue + splitted_test = json_line["Test"].split("/") + if len(splitted_test) < test_depth: + continue + if json_line["Package"] not in logs_per_test: + logs_per_test[json_line["Package"]] = {} + + test_name = splitted_test[: min(test_depth, len(splitted_test))] + logs_per_test[json_line["Package"]]["/".join(test_name)] = [] + + for line in all_lines: + json_line = json.loads(line) + if "Package" not in json_line or "Test" not in json_line or "Output" not in json_line: + continue + + if "===" in json_line["Output"]: # Ignore these lines that are produced when running test concurrently + continue + + splitted_test = json_line["Test"].split("/") + + if len(splitted_test) < test_depth: # Append logs to all children tests + for test_name in logs_per_test[json_line["Package"]]: + if is_parent(splitted_test, test_name.split("/")): + logs_per_test[json_line["Package"]][test_name].append(json_line["Output"]) + continue + + logs_per_test[json_line["Package"]]["/".join(splitted_test[:test_depth])].append(json_line["Output"]) + return logs_per_test + + +def write_result_to_log_files(logs_per_test, log_folder): + for package, tests in logs_per_test.items(): + for test, logs in tests.items(): + sanitized_package_name = re.sub(r"[^\w_. -]", "_", package) + sanitized_test_name = re.sub(r"[^\w_. -]", "_", test) + with open(f"{log_folder}/{sanitized_package_name}.{sanitized_test_name}.log", "w") as f: + f.write("".join(logs)) + + +class TooManyLogsError(Exception): + pass + + +def pretty_print_logs(logs_per_test, max_size=250000): + # Compute size in bytes of what we are about to print. If it exceeds max_size, we skip printing because it will make the Gitlab logs almost completely collapsed. + # By default Gitlab has a limit of 500KB per job log, so we want to avoid printing too much. + size = 0 + for _, tests in logs_per_test.items(): + for _, logs in tests.items(): + size += len("".join(logs).encode()) + if size > max_size and running_in_ci(): + raise TooManyLogsError + for package, tests in logs_per_test.items(): + for test, logs in tests.items(): + with gitlab_section("Complete logs for " + package + "." + test, collapsed=True): + print("Complete logs for " + package + "." + test) + print("".join(logs)) + + @task def deps(ctx, verbose=False): """ From 92cf9c4fb7c5cd2589604e45bd3f8ea890b53bc2 Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Tue, 10 Dec 2024 16:19:17 +0100 Subject: [PATCH 089/303] feat(assign_owner): Send to correct channel and improve message (#31954) --- tasks/issue.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/tasks/issue.py b/tasks/issue.py index 3d3f80161fdd4..4cd05c97abcdc 100644 --- a/tasks/issue.py +++ b/tasks/issue.py @@ -25,9 +25,16 @@ def assign_owner(_, issue_id, dry_run=False): from slack_sdk import WebClient client = WebClient(os.environ['SLACK_API_TOKEN']) - channel = GITHUB_SLACK_MAP.get(owner.lower(), '#agent-ask-anything') - message = f':githubstatus_partial_outage: *New Community Issue*\n{issue.title} <{issue.html_url}|{gh.repo.name}#{issue_id}>' - message += "\nThe assignation to your team was done automatically, using issue content and title. Please redirect if needed." + channel = next( + (chan for team, chan in GITHUB_SLACK_MAP.items() if owner.lower() in team), '#agent-ask-anything' + ) + message = f':githubstatus_partial_outage: *New Community Issue*\n{issue.title} <{issue.html_url}|{gh.repo.name}#{issue_id}>\n' + if channel == '#agent-ask-anything': + message += "The CI bot failed to assign this issue to a team.\nPlease assign it manually." + else: + message += ( + "Your team was assigned automatically, using the issue content and title.\nPlease redirect if needed." + ) client.chat_postMessage(channel=channel, text=message) return owner From 03a3f1c80d4e360ca636b99818995e371fa3deff Mon Sep 17 00:00:00 2001 From: Gustavo Caso Date: Tue, 10 Dec 2024 16:32:22 +0100 Subject: [PATCH 090/303] Support components multiple implementation for package name (#31551) --- comp/core/log/impl-systemprobe/systemprobe_logger.go | 4 ++-- .../log/impl-systemprobe/systemprobe_logger_test.go | 2 +- comp/core/log/impl-trace/trace_logger.go | 4 ++-- comp/core/log/impl-trace/trace_logger_test.go | 2 +- comp/core/tagger/impl-remote/remote.go | 4 ++-- comp/core/tagger/impl-remote/remote_test.go | 2 +- comp/core/tagger/impl-remote/tagstore.go | 2 +- comp/core/tagger/impl-remote/tagstore_test.go | 2 +- comp/dogstatsd/replay/impl-noop/noop.go | 4 ++-- comp/otelcol/collector/impl-pipeline/flare_filler.go | 4 ++-- .../collector/impl-pipeline/flare_filler_test.go | 4 ++-- comp/otelcol/collector/impl-pipeline/no_otlp.go | 4 ++-- comp/otelcol/collector/impl-pipeline/pipeline.go | 4 ++-- comp/otelcol/collector/impl-pipeline/status.go | 2 +- comp/otelcol/collector/impl-pipeline/status_test.go | 2 +- comp/rdnsquerier/impl-none/none.go | 4 ++-- comp/serializer/compression/impl-noop/no_strategy.go | 4 ++-- comp/serializer/compression/impl-zlib/zlib_strategy.go | 4 ++-- comp/serializer/compression/impl-zstd/zstd_strategy.go | 7 ++++--- comp/trace/compression/impl-gzip/gzip.go | 4 ++-- comp/trace/compression/impl-zstd/zstd.go | 4 ++-- docs/public/components/creating-components.md | 10 +++++----- tasks/components.py | 9 ++++++--- tasks/unit_tests/components_tests.py | 1 + .../components_src/comp/multiple/impl-one/multiple.go | 2 +- .../components_src/comp/multiple/impl-two/multiple.go | 2 +- 26 files changed, 51 insertions(+), 46 deletions(-) diff --git a/comp/core/log/impl-systemprobe/systemprobe_logger.go b/comp/core/log/impl-systemprobe/systemprobe_logger.go index 8457442cc1c93..5cbf8dc21e5de 100644 --- a/comp/core/log/impl-systemprobe/systemprobe_logger.go +++ b/comp/core/log/impl-systemprobe/systemprobe_logger.go @@ -3,8 +3,8 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -// Package logimpl implements a component to handle logging internal to the agent for system-probe. -package logimpl +// Package systemprobeimpl implements a component to handle logging internal to the agent for system-probe. +package systemprobeimpl import ( "context" diff --git a/comp/core/log/impl-systemprobe/systemprobe_logger_test.go b/comp/core/log/impl-systemprobe/systemprobe_logger_test.go index e6a2c6682a593..3ad4e5dad9198 100644 --- a/comp/core/log/impl-systemprobe/systemprobe_logger_test.go +++ b/comp/core/log/impl-systemprobe/systemprobe_logger_test.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package logimpl +package systemprobeimpl import ( "testing" diff --git a/comp/core/log/impl-trace/trace_logger.go b/comp/core/log/impl-trace/trace_logger.go index 71f4f32fdbf45..cbbc8fe5d8a0d 100644 --- a/comp/core/log/impl-trace/trace_logger.go +++ b/comp/core/log/impl-trace/trace_logger.go @@ -3,8 +3,8 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -// Package logimpl provides a component that implements the log.Component for the trace-agent logger -package logimpl +// Package traceimpl provides a component that implements the log.Component for the trace-agent logger +package traceimpl import ( "context" diff --git a/comp/core/log/impl-trace/trace_logger_test.go b/comp/core/log/impl-trace/trace_logger_test.go index 8e074becb0772..83c5a18d14aa2 100644 --- a/comp/core/log/impl-trace/trace_logger_test.go +++ b/comp/core/log/impl-trace/trace_logger_test.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package logimpl +package traceimpl import ( "testing" diff --git a/comp/core/tagger/impl-remote/remote.go b/comp/core/tagger/impl-remote/remote.go index c5a1fb6dad36c..b1a77165f18a9 100644 --- a/comp/core/tagger/impl-remote/remote.go +++ b/comp/core/tagger/impl-remote/remote.go @@ -3,8 +3,8 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -// Package remotetaggerimpl implements a remote Tagger. -package remotetaggerimpl +// Package remoteimpl implements a remote Tagger. +package remoteimpl import ( "context" diff --git a/comp/core/tagger/impl-remote/remote_test.go b/comp/core/tagger/impl-remote/remote_test.go index 48c00d8006bf7..c19b8f5fe1336 100644 --- a/comp/core/tagger/impl-remote/remote_test.go +++ b/comp/core/tagger/impl-remote/remote_test.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package remotetaggerimpl +package remoteimpl import ( "context" diff --git a/comp/core/tagger/impl-remote/tagstore.go b/comp/core/tagger/impl-remote/tagstore.go index de354cf070ad6..11f189ae6da90 100644 --- a/comp/core/tagger/impl-remote/tagstore.go +++ b/comp/core/tagger/impl-remote/tagstore.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package remotetaggerimpl +package remoteimpl import ( "sync" diff --git a/comp/core/tagger/impl-remote/tagstore_test.go b/comp/core/tagger/impl-remote/tagstore_test.go index 8cd92107d56cc..ce2a226ed5dd8 100644 --- a/comp/core/tagger/impl-remote/tagstore_test.go +++ b/comp/core/tagger/impl-remote/tagstore_test.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package remotetaggerimpl +package remoteimpl import ( "testing" diff --git a/comp/dogstatsd/replay/impl-noop/noop.go b/comp/dogstatsd/replay/impl-noop/noop.go index 100d295a8bd0b..06e4985e0ace0 100644 --- a/comp/dogstatsd/replay/impl-noop/noop.go +++ b/comp/dogstatsd/replay/impl-noop/noop.go @@ -3,8 +3,8 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-2021 Datadog, Inc. -// Package replayimpl implements a no-op version of the component -package replayimpl +// Package noopimpl implements a no-op version of the component +package noopimpl import ( "sync" diff --git a/comp/otelcol/collector/impl-pipeline/flare_filler.go b/comp/otelcol/collector/impl-pipeline/flare_filler.go index 97378486d1a22..8c170152f98ca 100644 --- a/comp/otelcol/collector/impl-pipeline/flare_filler.go +++ b/comp/otelcol/collector/impl-pipeline/flare_filler.go @@ -5,8 +5,8 @@ //go:build otlp -// Package collectorimpl implements the collector component -package collectorimpl +// Package pipelineimpl implements the collector component +package pipelineimpl import ( "encoding/json" diff --git a/comp/otelcol/collector/impl-pipeline/flare_filler_test.go b/comp/otelcol/collector/impl-pipeline/flare_filler_test.go index ed98632b0f171..93075929746d4 100644 --- a/comp/otelcol/collector/impl-pipeline/flare_filler_test.go +++ b/comp/otelcol/collector/impl-pipeline/flare_filler_test.go @@ -6,8 +6,8 @@ //go:build test && otlp // +build test,otlp -// Package collectorimpl implements the collector component -package collectorimpl +// Package pipelineimpl implements the collector component +package pipelineimpl import ( "bytes" diff --git a/comp/otelcol/collector/impl-pipeline/no_otlp.go b/comp/otelcol/collector/impl-pipeline/no_otlp.go index c1e5ae7c03789..60f1295ee33aa 100644 --- a/comp/otelcol/collector/impl-pipeline/no_otlp.go +++ b/comp/otelcol/collector/impl-pipeline/no_otlp.go @@ -5,8 +5,8 @@ //go:build !otlp -// Package collectorimpl contains a no-op implementation of the collector -package collectorimpl +// Package pipelineimpl contains a no-op implementation of the collector +package pipelineimpl import ( collector "github.com/DataDog/datadog-agent/comp/otelcol/collector/def" diff --git a/comp/otelcol/collector/impl-pipeline/pipeline.go b/comp/otelcol/collector/impl-pipeline/pipeline.go index ab46ab875bcff..34cd92d133ed8 100644 --- a/comp/otelcol/collector/impl-pipeline/pipeline.go +++ b/comp/otelcol/collector/impl-pipeline/pipeline.go @@ -5,8 +5,8 @@ //go:build otlp -// Package collectorimpl implements the collector component -package collectorimpl +// Package pipelineimpl implements the collector component +package pipelineimpl import ( "context" diff --git a/comp/otelcol/collector/impl-pipeline/status.go b/comp/otelcol/collector/impl-pipeline/status.go index e3c0b01791bc1..a94bb76a0e5dd 100644 --- a/comp/otelcol/collector/impl-pipeline/status.go +++ b/comp/otelcol/collector/impl-pipeline/status.go @@ -5,7 +5,7 @@ //go:build otlp -package collectorimpl +package pipelineimpl import ( "embed" diff --git a/comp/otelcol/collector/impl-pipeline/status_test.go b/comp/otelcol/collector/impl-pipeline/status_test.go index 0e9b6a82e364b..8ae735534ed69 100644 --- a/comp/otelcol/collector/impl-pipeline/status_test.go +++ b/comp/otelcol/collector/impl-pipeline/status_test.go @@ -5,7 +5,7 @@ //go:build otlp && test -package collectorimpl +package pipelineimpl import ( "bytes" diff --git a/comp/rdnsquerier/impl-none/none.go b/comp/rdnsquerier/impl-none/none.go index 0b7f1022f1eb9..014306826c989 100644 --- a/comp/rdnsquerier/impl-none/none.go +++ b/comp/rdnsquerier/impl-none/none.go @@ -3,8 +3,8 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2024-present Datadog, Inc. -// Package rdnsquerierimpl provides the noop rdnsquerier component -package rdnsquerierimpl +// Package noneimpl provides the noop rdnsquerier component +package noneimpl import ( "context" diff --git a/comp/serializer/compression/impl-noop/no_strategy.go b/comp/serializer/compression/impl-noop/no_strategy.go index 45523952b4ca2..3c092a8a536d4 100644 --- a/comp/serializer/compression/impl-noop/no_strategy.go +++ b/comp/serializer/compression/impl-noop/no_strategy.go @@ -3,8 +3,8 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -// Package compressionimpl provides a set of functions for compressing with zlib / zstd -package compressionimpl +// Package noopimpl provides a set of functions for compressing with zlib / zstd +package noopimpl import ( "bytes" diff --git a/comp/serializer/compression/impl-zlib/zlib_strategy.go b/comp/serializer/compression/impl-zlib/zlib_strategy.go index 2bbe1a99d1a09..0bd47af4f91fc 100644 --- a/comp/serializer/compression/impl-zlib/zlib_strategy.go +++ b/comp/serializer/compression/impl-zlib/zlib_strategy.go @@ -3,8 +3,8 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -// Package compressionimpl provides a set of functions for compressing with zlib -package compressionimpl +// Package zlibimpl provides a set of functions for compressing with zlib +package zlibimpl import ( "bytes" diff --git a/comp/serializer/compression/impl-zstd/zstd_strategy.go b/comp/serializer/compression/impl-zstd/zstd_strategy.go index 994135a0889cd..3b90737bbfce8 100644 --- a/comp/serializer/compression/impl-zstd/zstd_strategy.go +++ b/comp/serializer/compression/impl-zstd/zstd_strategy.go @@ -3,14 +3,15 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -// Package compressionimpl provides a set of functions for compressing with zstd -package compressionimpl +// Package zstdimpl provides a set of functions for compressing with zstd +package zstdimpl import ( "bytes" - compression "github.com/DataDog/datadog-agent/comp/serializer/compression/def" "github.com/DataDog/zstd" + + compression "github.com/DataDog/datadog-agent/comp/serializer/compression/def" ) // Requires contains the compression level for zstd compression diff --git a/comp/trace/compression/impl-gzip/gzip.go b/comp/trace/compression/impl-gzip/gzip.go index eada290dae873..4a7943bde1f03 100644 --- a/comp/trace/compression/impl-gzip/gzip.go +++ b/comp/trace/compression/impl-gzip/gzip.go @@ -3,8 +3,8 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2024-present Datadog, Inc. -// Package compressionimpl implements the compression component interface -package compressionimpl +// Package gzipimpl implements the compression component interface +package gzipimpl import ( "compress/gzip" diff --git a/comp/trace/compression/impl-zstd/zstd.go b/comp/trace/compression/impl-zstd/zstd.go index d418d4362f8b2..fc43c47cb0886 100644 --- a/comp/trace/compression/impl-zstd/zstd.go +++ b/comp/trace/compression/impl-zstd/zstd.go @@ -3,8 +3,8 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2024-present Datadog, Inc. -// Package compressionimpl implements the compression component interface -package compressionimpl +// Package zstdimpl implements the compression component interface +package zstdimpl import ( "io" diff --git a/docs/public/components/creating-components.md b/docs/public/components/creating-components.md index aa54f63cb3590..2fe844b7175d4 100644 --- a/docs/public/components/creating-components.md +++ b/docs/public/components/creating-components.md @@ -114,11 +114,11 @@ internally by each component (more on this [here TODO]()). --> ### The impl folders The `impl` folder is where the component implementation is written. The details of component implementation are up to the developer. -The only requirements are that the package name follows the pattern `impl` and that there is a public instantiation function called `NewComponent`. +The only requirements are that the package name follows the pattern `impl` for the regular implementation or `impl` for the alternative implementation, and that there is a public instantiation function called `NewComponent`. === ":octicons-file-code-16: comp/compression/impl-zstd/compressor.go" ```go - package compressionimpl + package zstdimpl // NewComponent returns a new ZSTD implementation for the compression component func NewComponent(reqs Requires) Provides { @@ -134,7 +134,7 @@ In this example, the compression component must access the configuration compone === ":octicons-file-code-16: comp/compression/impl-zstd/compressor.go" ```go - package compressionimpl + package zstdimpl import ( "fmt" @@ -160,7 +160,7 @@ In this example, the compression component must access the configuration compone For the output of the component, populate the `Provides` struct with the return values. === ":octicons-file-code-16: comp/compression/impl-zstd/compressor.go" ```go - package compressionimpl + package zstdimpl import ( // Always import the component def folder, so that you can return a 'compression.Component' type. @@ -180,7 +180,7 @@ All together, the component code looks like the following: === ":octicons-file-code-16: comp/compression/impl-zstd/compressor.go" ```go - package compressionimpl + package zstdimpl import ( "fmt" diff --git a/tasks/components.py b/tasks/components.py index c534d63c56b83..fc5b04806ce04 100644 --- a/tasks/components.py +++ b/tasks/components.py @@ -96,8 +96,6 @@ def has_type_component(content) -> bool: 'comp/core/configsync/configsyncimpl', 'comp/core/gui/guiimpl', 'comp/core/hostname/hostnameimpl', - 'comp/core/log/logimpl', - 'comp/core/log/tracelogimpl', 'comp/core/pid/pidimpl', 'comp/core/secrets/secretsimpl', 'comp/core/settings/settingsimpl', @@ -165,7 +163,6 @@ def has_type_component(content) -> bool: # Please do not add a new component to this list. components_missing_implementation_folder = [ "comp/dogstatsd/statsd", - "comp/core/tagger", "comp/forwarder/orchestrator/orchestratorinterface", "comp/core/hostname/hostnameinterface", ] @@ -233,6 +230,12 @@ def check_component_contents_and_file_hiearchy(comp): for src_file in locate_nontest_source_files(impl_folders): pkgname = parse_package_name(src_file) expectname = comp.name + 'impl' + + for part in src_file.parts: + if "impl-" in part: + parts = part.split("-") + expectname = parts[1] + 'impl' + if pkgname != expectname: return f"** {src_file} has wrong package name '{pkgname}', must be '{expectname}'" if comp.path in ignore_fx_import: diff --git a/tasks/unit_tests/components_tests.py b/tasks/unit_tests/components_tests.py index e5d02cab45530..b6b29acc68164 100644 --- a/tasks/unit_tests/components_tests.py +++ b/tasks/unit_tests/components_tests.py @@ -214,6 +214,7 @@ def test_validate_component_implementation(self): implfolder = os.path.join(comps[3].path, 'impl') newfolder = os.path.join(comps[3].path, 'impl-alt') + replace_line(filename, 'package newstyleimpl', 'package altimpl') shutil.move(implfolder, newfolder) comps, _ = components.get_components_and_bundles() diff --git a/tasks/unit_tests/testdata/components_src/comp/multiple/impl-one/multiple.go b/tasks/unit_tests/testdata/components_src/comp/multiple/impl-one/multiple.go index 19e6f23129500..ac4b78b3aeb69 100644 --- a/tasks/unit_tests/testdata/components_src/comp/multiple/impl-one/multiple.go +++ b/tasks/unit_tests/testdata/components_src/comp/multiple/impl-one/multiple.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package multipleimpl +package oneimpl import ( multiple "github.com/DataDog/datadog-agent/comp/multiple/def" diff --git a/tasks/unit_tests/testdata/components_src/comp/multiple/impl-two/multiple.go b/tasks/unit_tests/testdata/components_src/comp/multiple/impl-two/multiple.go index 6ca0f53345424..5be15c220b450 100644 --- a/tasks/unit_tests/testdata/components_src/comp/multiple/impl-two/multiple.go +++ b/tasks/unit_tests/testdata/components_src/comp/multiple/impl-two/multiple.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package multipleimpl +package twoimpl import ( multiple "github.com/DataDog/datadog-agent/comp/multiple/def" From 0b42e2bb62e2d1c0e66f03d6558efb9d99591ee9 Mon Sep 17 00:00:00 2001 From: Dmytro Yurchenko <88330911+ddyurchenko@users.noreply.github.com> Date: Tue, 10 Dec 2024 16:34:53 +0100 Subject: [PATCH 091/303] ci: Fix CODEOWNERS due to team split (#31896) --- .github/CODEOWNERS | 2 +- tasks/libs/pipeline/github_slack_map.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index cd6fe7ade112c..f9c09434f61c7 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -118,7 +118,7 @@ /.gitlab/binary_build/system_probe.yml @DataDog/ebpf-platform @DataDog/agent-delivery /.gitlab/binary_build/windows.yml @DataDog/agent-delivery @DataDog/windows-agent -/.gitlab/benchmarks/ @DataDog/agent-devx-infra @DataDog/apm-reliability-and-performance @DataDog/agent-apm +/.gitlab/benchmarks/ @DataDog/agent-devx-infra @DataDog/apm-ecosystems-performance @DataDog/agent-apm /.gitlab/deploy_containers/ @DataDog/container-integrations @DataDog/agent-delivery /.gitlab/deploy_dca/ @DataDog/container-integrations @DataDog/agent-delivery diff --git a/tasks/libs/pipeline/github_slack_map.yaml b/tasks/libs/pipeline/github_slack_map.yaml index fd021cf169528..1eebefe479b21 100644 --- a/tasks/libs/pipeline/github_slack_map.yaml +++ b/tasks/libs/pipeline/github_slack_map.yaml @@ -44,5 +44,5 @@ '@datadog/agent-devx-infra': '#agent-devx-ops' '@datadog/agent-devx-loops': '#agent-devx-ops' '@datadog/apm-onboarding': '#apm-onboarding' -'@datadog/apm-reliability-and-performance': '#apm-ecosystems-reliability' +'@datadog/apm-ecosystems-performance': '#apm-benchmarking-platform' '@DataDog/container-ecosystems': '#container-ecosystems-ops' From 385f25a20c537acf97b3c5c008d1173a290a5ff0 Mon Sep 17 00:00:00 2001 From: Ken Schneider <103530259+ken-schneider@users.noreply.github.com> Date: Tue, 10 Dec 2024 10:54:42 -0500 Subject: [PATCH 092/303] [NETPATH-371] Move common functions to separate package, create separate testutils package (#31819) --- pkg/networkpath/traceroute/common/common.go | 160 ++++++++++++ .../traceroute/common/common_test.go | 117 +++++++++ pkg/networkpath/traceroute/runner/runner.go | 3 +- pkg/networkpath/traceroute/tcp/tcpv4.go | 22 -- pkg/networkpath/traceroute/tcp/tcpv4_unix.go | 13 +- .../traceroute/tcp/tcpv4_windows.go | 13 +- pkg/networkpath/traceroute/tcp/utils.go | 125 +--------- pkg/networkpath/traceroute/tcp/utils_test.go | 235 +----------------- pkg/networkpath/traceroute/tcp/utils_unix.go | 11 +- .../traceroute/tcp/utils_unix_test.go | 10 +- .../traceroute/tcp/utils_windows.go | 9 +- .../traceroute/tcp/utils_windows_test.go | 5 +- pkg/networkpath/traceroute/testutils/doc.go | 7 + .../traceroute/testutils/testutils.go | 150 +++++++++++ 14 files changed, 481 insertions(+), 399 deletions(-) create mode 100644 pkg/networkpath/traceroute/common/common.go create mode 100644 pkg/networkpath/traceroute/common/common_test.go create mode 100644 pkg/networkpath/traceroute/testutils/doc.go create mode 100644 pkg/networkpath/traceroute/testutils/testutils.go diff --git a/pkg/networkpath/traceroute/common/common.go b/pkg/networkpath/traceroute/common/common.go new file mode 100644 index 0000000000000..c7622fa391891 --- /dev/null +++ b/pkg/networkpath/traceroute/common/common.go @@ -0,0 +1,160 @@ +// 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 common contains common functionality for both TCP and UDP +// traceroute implementations +package common + +import ( + "fmt" + "net" + "strconv" + "time" + + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/google/gopacket" + "github.com/google/gopacket/layers" + "golang.org/x/net/ipv4" +) + +const ( + // IPProtoICMP is the IP protocol number for ICMP + // we create our own constant here because there are + // different imports for the constant in different + // operating systems + IPProtoICMP = 1 +) + +type ( + // Results encapsulates a response from the + // traceroute + Results struct { + Source net.IP + SourcePort uint16 + Target net.IP + DstPort uint16 + Hops []*Hop + } + + // Hop encapsulates information about a single + // hop in a traceroute + Hop struct { + IP net.IP + Port uint16 + ICMPType layers.ICMPv4TypeCode + RTT time.Duration + IsDest bool + } + + // CanceledError is sent when a listener + // is canceled + CanceledError string + + // ICMPResponse encapsulates the data from + // an ICMP response packet needed for matching + ICMPResponse struct { + SrcIP net.IP + DstIP net.IP + TypeCode layers.ICMPv4TypeCode + InnerSrcIP net.IP + InnerDstIP net.IP + InnerSrcPort uint16 + InnerDstPort uint16 + InnerSeqNum uint32 + } +) + +func (c CanceledError) Error() string { + return string(c) +} + +// LocalAddrForHost takes in a destionation IP and port and returns the local +// address that should be used to connect to the destination +func LocalAddrForHost(destIP net.IP, destPort uint16) (*net.UDPAddr, error) { + // this is a quick way to get the local address for connecting to the host + // using UDP as the network type to avoid actually creating a connection to + // the host, just get the OS to give us a local IP and local ephemeral port + conn, err := net.Dial("udp4", net.JoinHostPort(destIP.String(), strconv.Itoa(int(destPort)))) + if err != nil { + return nil, err + } + defer conn.Close() + localAddr := conn.LocalAddr() + + localUDPAddr, ok := localAddr.(*net.UDPAddr) + if !ok { + return nil, fmt.Errorf("invalid address type for %s: want %T, got %T", localAddr, localUDPAddr, localAddr) + } + + return localUDPAddr, nil +} + +// ParseICMP takes in an IPv4 header and payload and tries to convert to an ICMP +// message, it returns all the fields from the packet we need to validate it's the response +// we're looking for +func ParseICMP(header *ipv4.Header, payload []byte) (*ICMPResponse, error) { + // in addition to parsing, it is probably not a bad idea to do some validation + // so we can ignore the ICMP packets we don't care about + icmpResponse := ICMPResponse{} + + if header.Protocol != IPProtoICMP || header.Version != 4 || + header.Src == nil || header.Dst == nil { + return nil, fmt.Errorf("invalid IP header for ICMP packet: %+v", header) + } + icmpResponse.SrcIP = header.Src + icmpResponse.DstIP = header.Dst + + var icmpv4Layer layers.ICMPv4 + decoded := []gopacket.LayerType{} + icmpParser := gopacket.NewDecodingLayerParser(layers.LayerTypeICMPv4, &icmpv4Layer) + icmpParser.IgnoreUnsupported = true // ignore unsupported layers, we will decode them in the next step + if err := icmpParser.DecodeLayers(payload, &decoded); err != nil { + return nil, fmt.Errorf("failed to decode ICMP packet: %w", err) + } + // since we ignore unsupported layers, we need to check if we actually decoded + // anything + if len(decoded) < 1 { + return nil, fmt.Errorf("failed to decode ICMP packet, no layers decoded") + } + icmpResponse.TypeCode = icmpv4Layer.TypeCode + + var icmpPayload []byte + if len(icmpv4Layer.Payload) < 40 { + log.Tracef("Payload length %d is less than 40, extending...\n", len(icmpv4Layer.Payload)) + icmpPayload = make([]byte, 40) + copy(icmpPayload, icmpv4Layer.Payload) + // we have to set this in order for the TCP + // parser to work + icmpPayload[32] = 5 << 4 // set data offset + } else { + icmpPayload = icmpv4Layer.Payload + } + + // a separate parser is needed to decode the inner IP and TCP headers because + // gopacket doesn't support this type of nesting in a single decoder + var innerIPLayer layers.IPv4 + var innerTCPLayer layers.TCP + innerIPParser := gopacket.NewDecodingLayerParser(layers.LayerTypeIPv4, &innerIPLayer, &innerTCPLayer) + if err := innerIPParser.DecodeLayers(icmpPayload, &decoded); err != nil { + return nil, fmt.Errorf("failed to decode inner ICMP payload: %w", err) + } + icmpResponse.InnerSrcIP = innerIPLayer.SrcIP + icmpResponse.InnerDstIP = innerIPLayer.DstIP + icmpResponse.InnerSrcPort = uint16(innerTCPLayer.SrcPort) + icmpResponse.InnerDstPort = uint16(innerTCPLayer.DstPort) + icmpResponse.InnerSeqNum = innerTCPLayer.Seq + + return &icmpResponse, nil +} + +// ICMPMatch checks if an ICMP response matches the expected response +// based on the local and remote IP, port, and sequence number +func ICMPMatch(localIP net.IP, localPort uint16, remoteIP net.IP, remotePort uint16, seqNum uint32, response *ICMPResponse) bool { + return localIP.Equal(response.InnerSrcIP) && + remoteIP.Equal(response.InnerDstIP) && + localPort == response.InnerSrcPort && + remotePort == response.InnerDstPort && + seqNum == response.InnerSeqNum +} diff --git a/pkg/networkpath/traceroute/common/common_test.go b/pkg/networkpath/traceroute/common/common_test.go new file mode 100644 index 0000000000000..aa6f6cfdf24cb --- /dev/null +++ b/pkg/networkpath/traceroute/common/common_test.go @@ -0,0 +1,117 @@ +// 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. + +//go:build test + +package common + +import ( + "net" + "testing" + + "github.com/DataDog/datadog-agent/pkg/networkpath/traceroute/testutils" + "github.com/google/gopacket/layers" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "golang.org/x/net/ipv4" +) + +var ( + srcIP = net.ParseIP("1.2.3.4") + dstIP = net.ParseIP("5.6.7.8") + + innerSrcIP = net.ParseIP("10.0.0.1") + innerDstIP = net.ParseIP("192.168.1.1") +) + +func Test_parseICMP(t *testing.T) { + ipv4Header := testutils.CreateMockIPv4Header(srcIP, dstIP, 1) + icmpLayer := testutils.CreateMockICMPLayer(layers.ICMPv4CodeTTLExceeded) + innerIPv4Layer := testutils.CreateMockIPv4Layer(innerSrcIP, innerDstIP, layers.IPProtocolTCP) + innerTCPLayer := testutils.CreateMockTCPLayer(12345, 443, 28394, 12737, true, true, true) + + tt := []struct { + description string + inHeader *ipv4.Header + inPayload []byte + expected *ICMPResponse + errMsg string + }{ + { + description: "empty IPv4 layer should return an error", + inHeader: &ipv4.Header{}, + inPayload: []byte{}, + expected: nil, + errMsg: "invalid IP header for ICMP packet", + }, + { + description: "missing ICMP layer should return an error", + inHeader: ipv4Header, + inPayload: []byte{}, + expected: nil, + errMsg: "failed to decode ICMP packet", + }, + { + description: "missing inner layers should return an error", + inHeader: ipv4Header, + inPayload: testutils.CreateMockICMPPacket(nil, icmpLayer, nil, nil, false), + expected: nil, + errMsg: "failed to decode inner ICMP payload", + }, + { + description: "ICMP packet with partial TCP header should create icmpResponse", + inHeader: ipv4Header, + inPayload: testutils.CreateMockICMPPacket(nil, icmpLayer, innerIPv4Layer, innerTCPLayer, true), + expected: &ICMPResponse{ + SrcIP: srcIP, + DstIP: dstIP, + InnerSrcIP: innerSrcIP, + InnerDstIP: innerDstIP, + InnerSrcPort: 12345, + InnerDstPort: 443, + InnerSeqNum: 28394, + }, + errMsg: "", + }, + { + description: "full ICMP packet should create icmpResponse", + inHeader: ipv4Header, + inPayload: testutils.CreateMockICMPPacket(nil, icmpLayer, innerIPv4Layer, innerTCPLayer, true), + expected: &ICMPResponse{ + SrcIP: srcIP, + DstIP: dstIP, + InnerSrcIP: innerSrcIP, + InnerDstIP: innerDstIP, + InnerSrcPort: 12345, + InnerDstPort: 443, + InnerSeqNum: 28394, + }, + errMsg: "", + }, + } + + for _, test := range tt { + t.Run(test.description, func(t *testing.T) { + actual, err := ParseICMP(test.inHeader, test.inPayload) + if test.errMsg != "" { + require.Error(t, err) + assert.Contains(t, err.Error(), test.errMsg) + assert.Nil(t, actual) + return + } + require.Nil(t, err) + require.NotNil(t, actual) + // assert.Equal doesn't handle net.IP well + assert.Equal(t, testutils.StructFieldCount(test.expected), testutils.StructFieldCount(actual)) + assert.Truef(t, test.expected.SrcIP.Equal(actual.SrcIP), "mismatch source IPs: expected %s, got %s", test.expected.SrcIP.String(), actual.SrcIP.String()) + assert.Truef(t, test.expected.DstIP.Equal(actual.DstIP), "mismatch dest IPs: expected %s, got %s", test.expected.DstIP.String(), actual.DstIP.String()) + assert.Truef(t, test.expected.InnerSrcIP.Equal(actual.InnerSrcIP), "mismatch inner source IPs: expected %s, got %s", test.expected.InnerSrcIP.String(), actual.InnerSrcIP.String()) + assert.Truef(t, test.expected.InnerDstIP.Equal(actual.InnerDstIP), "mismatch inner dest IPs: expected %s, got %s", test.expected.InnerDstIP.String(), actual.InnerDstIP.String()) + assert.Equal(t, test.expected.InnerSrcPort, actual.InnerSrcPort) + assert.Equal(t, test.expected.InnerDstPort, actual.InnerDstPort) + assert.Equal(t, test.expected.InnerSeqNum, actual.InnerSeqNum) + }) + } +} diff --git a/pkg/networkpath/traceroute/runner/runner.go b/pkg/networkpath/traceroute/runner/runner.go index 9087b66b4eb8a..b8240ee6db3cd 100644 --- a/pkg/networkpath/traceroute/runner/runner.go +++ b/pkg/networkpath/traceroute/runner/runner.go @@ -24,6 +24,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/network" "github.com/DataDog/datadog-agent/pkg/networkpath/payload" + "github.com/DataDog/datadog-agent/pkg/networkpath/traceroute/common" "github.com/DataDog/datadog-agent/pkg/networkpath/traceroute/config" "github.com/DataDog/datadog-agent/pkg/networkpath/traceroute/tcp" "github.com/DataDog/datadog-agent/pkg/process/util" @@ -222,7 +223,7 @@ func (r *Runner) runTCP(cfg config.Config, hname string, target net.IP, maxTTL u return pathResult, nil } -func (r *Runner) processTCPResults(res *tcp.Results, hname string, destinationHost string, destinationPort uint16, destinationIP net.IP) (payload.NetworkPath, error) { +func (r *Runner) processTCPResults(res *common.Results, hname string, destinationHost string, destinationPort uint16, destinationIP net.IP) (payload.NetworkPath, error) { traceroutePath := payload.NetworkPath{ AgentVersion: version.AgentVersion, PathtraceID: payload.NewPathtraceID(), diff --git a/pkg/networkpath/traceroute/tcp/tcpv4.go b/pkg/networkpath/traceroute/tcp/tcpv4.go index 64484f9c0ad60..ca38edf21cf4c 100644 --- a/pkg/networkpath/traceroute/tcp/tcpv4.go +++ b/pkg/networkpath/traceroute/tcp/tcpv4.go @@ -9,8 +9,6 @@ package tcp import ( "net" "time" - - "github.com/google/gopacket/layers" ) type ( @@ -27,26 +25,6 @@ type ( Delay time.Duration // delay between sending packets (not applicable if we go the serial send/receive route) Timeout time.Duration // full timeout for all packets } - - // Results encapsulates a response from the TCP - // traceroute - Results struct { - Source net.IP - SourcePort uint16 - Target net.IP - DstPort uint16 - Hops []*Hop - } - - // Hop encapsulates information about a single - // hop in a TCP traceroute - Hop struct { - IP net.IP - Port uint16 - ICMPType layers.ICMPv4TypeCode - RTT time.Duration - IsDest bool - } ) // Close doesn't to anything yet, but we should diff --git a/pkg/networkpath/traceroute/tcp/tcpv4_unix.go b/pkg/networkpath/traceroute/tcp/tcpv4_unix.go index 32cf7e19ee11e..f5859d056e00e 100644 --- a/pkg/networkpath/traceroute/tcp/tcpv4_unix.go +++ b/pkg/networkpath/traceroute/tcp/tcpv4_unix.go @@ -16,15 +16,16 @@ import ( "golang.org/x/net/ipv4" + "github.com/DataDog/datadog-agent/pkg/networkpath/traceroute/common" "github.com/DataDog/datadog-agent/pkg/util/log" ) // TracerouteSequential runs a traceroute sequentially where a packet is // sent and we wait for a response before sending the next packet -func (t *TCPv4) TracerouteSequential() (*Results, error) { +func (t *TCPv4) TracerouteSequential() (*common.Results, error) { // Get local address for the interface that connects to this // host and store in in the probe - addr, err := localAddrForHost(t.Target, t.DestPort) + addr, err := common.LocalAddrForHost(t.Target, t.DestPort) if err != nil { return nil, fmt.Errorf("failed to get local address for target: %w", err) } @@ -71,7 +72,7 @@ func (t *TCPv4) TracerouteSequential() (*Results, error) { } // hops should be of length # of hops - hops := make([]*Hop, 0, t.MaxTTL-t.MinTTL) + hops := make([]*common.Hop, 0, t.MaxTTL-t.MinTTL) for i := int(t.MinTTL); i <= int(t.MaxTTL); i++ { seqNumber := rand.Uint32() @@ -88,7 +89,7 @@ func (t *TCPv4) TracerouteSequential() (*Results, error) { } } - return &Results{ + return &common.Results{ Source: t.srcIP, SourcePort: t.srcPort, Target: t.Target, @@ -97,7 +98,7 @@ func (t *TCPv4) TracerouteSequential() (*Results, error) { }, nil } -func (t *TCPv4) sendAndReceive(rawIcmpConn *ipv4.RawConn, rawTCPConn *ipv4.RawConn, ttl int, seqNum uint32, timeout time.Duration) (*Hop, error) { +func (t *TCPv4) sendAndReceive(rawIcmpConn *ipv4.RawConn, rawTCPConn *ipv4.RawConn, ttl int, seqNum uint32, timeout time.Duration) (*common.Hop, error) { tcpHeader, tcpPacket, err := createRawTCPSyn(t.srcIP, t.srcPort, t.Target, t.DestPort, seqNum, ttl) if err != nil { log.Errorf("failed to create TCP packet with TTL: %d, error: %s", ttl, err.Error()) @@ -122,7 +123,7 @@ func (t *TCPv4) sendAndReceive(rawIcmpConn *ipv4.RawConn, rawTCPConn *ipv4.RawCo rtt = end.Sub(start) } - return &Hop{ + return &common.Hop{ IP: hopIP, Port: hopPort, ICMPType: icmpType, diff --git a/pkg/networkpath/traceroute/tcp/tcpv4_windows.go b/pkg/networkpath/traceroute/tcp/tcpv4_windows.go index 3067695b0e559..e9eb74cae702f 100644 --- a/pkg/networkpath/traceroute/tcp/tcpv4_windows.go +++ b/pkg/networkpath/traceroute/tcp/tcpv4_windows.go @@ -14,6 +14,7 @@ import ( "golang.org/x/sys/windows" + "github.com/DataDog/datadog-agent/pkg/networkpath/traceroute/common" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -67,14 +68,14 @@ func createRawSocket() (*winrawsocket, error) { // TracerouteSequential runs a traceroute sequentially where a packet is // sent and we wait for a response before sending the next packet -func (t *TCPv4) TracerouteSequential() (*Results, error) { +func (t *TCPv4) TracerouteSequential() (*common.Results, error) { log.Debugf("Running traceroute to %+v", t) // Get local address for the interface that connects to this // host and store in in the probe // // TODO: do this once for the probe and hang on to the // listener until we decide to close the probe - addr, err := localAddrForHost(t.Target, t.DestPort) + addr, err := common.LocalAddrForHost(t.Target, t.DestPort) if err != nil { return nil, fmt.Errorf("failed to get local address for target: %w", err) } @@ -87,7 +88,7 @@ func (t *TCPv4) TracerouteSequential() (*Results, error) { } defer rs.close() - hops := make([]*Hop, 0, int(t.MaxTTL-t.MinTTL)+1) + hops := make([]*common.Hop, 0, int(t.MaxTTL-t.MinTTL)+1) for i := int(t.MinTTL); i <= int(t.MaxTTL); i++ { seqNumber := rand.Uint32() @@ -104,7 +105,7 @@ func (t *TCPv4) TracerouteSequential() (*Results, error) { } } - return &Results{ + return &common.Results{ Source: t.srcIP, SourcePort: t.srcPort, Target: t.Target, @@ -113,7 +114,7 @@ func (t *TCPv4) TracerouteSequential() (*Results, error) { }, nil } -func (t *TCPv4) sendAndReceive(rs *winrawsocket, ttl int, seqNum uint32, timeout time.Duration) (*Hop, error) { +func (t *TCPv4) sendAndReceive(rs *winrawsocket, ttl int, seqNum uint32, timeout time.Duration) (*common.Hop, error) { _, buffer, _, err := createRawTCPSynBuffer(t.srcIP, t.srcPort, t.Target, t.DestPort, seqNum, ttl) if err != nil { log.Errorf("failed to create TCP packet with TTL: %d, error: %s", ttl, err.Error()) @@ -138,7 +139,7 @@ func (t *TCPv4) sendAndReceive(rs *winrawsocket, ttl int, seqNum uint32, timeout rtt = end.Sub(start) } - return &Hop{ + return &common.Hop{ IP: hopIP, Port: hopPort, ICMPType: icmpType, diff --git a/pkg/networkpath/traceroute/tcp/utils.go b/pkg/networkpath/traceroute/tcp/utils.go index ae7d507f23940..3bd9e437e90c7 100644 --- a/pkg/networkpath/traceroute/tcp/utils.go +++ b/pkg/networkpath/traceroute/tcp/utils.go @@ -8,46 +8,14 @@ package tcp import ( "fmt" "net" - "strconv" + "syscall" - "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/google/gopacket" "github.com/google/gopacket/layers" "golang.org/x/net/ipv4" ) -const ( - // ACK is the acknowledge TCP flag - ACK = 1 << 4 - // RST is the reset TCP flag - RST = 1 << 2 - // SYN is the synchronization TCP flag - SYN = 1 << 1 - - // IPProtoICMP is the ICMP protocol number - IPProtoICMP = 1 - // IPProtoTCP is the TCP protocol number - IPProtoTCP = 6 -) - type ( - // canceledError is sent when a listener - // is canceled - canceledError string - - // icmpResponse encapsulates the data from - // an ICMP response packet needed for matching - icmpResponse struct { - SrcIP net.IP - DstIP net.IP - TypeCode layers.ICMPv4TypeCode - InnerSrcIP net.IP - InnerDstIP net.IP - InnerSrcPort uint16 - InnerDstPort uint16 - InnerSeqNum uint32 - } - // tcpResponse encapsulates the data from a // TCP response needed for matching tcpResponse struct { @@ -57,25 +25,6 @@ type ( } ) -func localAddrForHost(destIP net.IP, destPort uint16) (*net.UDPAddr, error) { - // this is a quick way to get the local address for connecting to the host - // using UDP as the network type to avoid actually creating a connection to - // the host, just get the OS to give us a local IP and local ephemeral port - conn, err := net.Dial("udp4", net.JoinHostPort(destIP.String(), strconv.Itoa(int(destPort)))) - if err != nil { - return nil, err - } - defer conn.Close() - localAddr := conn.LocalAddr() - - localUDPAddr, ok := localAddr.(*net.UDPAddr) - if !ok { - return nil, fmt.Errorf("invalid address type for %s: want %T, got %T", localAddr, localUDPAddr, localAddr) - } - - return localUDPAddr, nil -} - // reserveLocalPort reserves an ephemeral TCP port // and returns both the listener and port because the // listener should be held until the port is no longer @@ -145,64 +94,6 @@ func createRawTCPSynBuffer(sourceIP net.IP, sourcePort uint16, destIP net.IP, de return &ipHdr, packet, 20, nil } -// parseICMP takes in an IPv4 header and payload and tries to convert to an ICMP -// message, it returns all the fields from the packet we need to validate it's the response -// we're looking for -func parseICMP(header *ipv4.Header, payload []byte) (*icmpResponse, error) { - // in addition to parsing, it is probably not a bad idea to do some validation - // so we can ignore the ICMP packets we don't care about - icmpResponse := icmpResponse{} - - if header.Protocol != IPProtoICMP || header.Version != 4 || - header.Src == nil || header.Dst == nil { - return nil, fmt.Errorf("invalid IP header for ICMP packet: %+v", header) - } - icmpResponse.SrcIP = header.Src - icmpResponse.DstIP = header.Dst - - var icmpv4Layer layers.ICMPv4 - decoded := []gopacket.LayerType{} - icmpParser := gopacket.NewDecodingLayerParser(layers.LayerTypeICMPv4, &icmpv4Layer) - icmpParser.IgnoreUnsupported = true // ignore unsupported layers, we will decode them in the next step - if err := icmpParser.DecodeLayers(payload, &decoded); err != nil { - return nil, fmt.Errorf("failed to decode ICMP packet: %w", err) - } - // since we ignore unsupported layers, we need to check if we actually decoded - // anything - if len(decoded) < 1 { - return nil, fmt.Errorf("failed to decode ICMP packet, no layers decoded") - } - icmpResponse.TypeCode = icmpv4Layer.TypeCode - - var icmpPayload []byte - if len(icmpv4Layer.Payload) < 40 { - log.Tracef("Payload length %d is less than 40, extending...\n", len(icmpv4Layer.Payload)) - icmpPayload = make([]byte, 40) - copy(icmpPayload, icmpv4Layer.Payload) - // we have to set this in order for the TCP - // parser to work - icmpPayload[32] = 5 << 4 // set data offset - } else { - icmpPayload = icmpv4Layer.Payload - } - - // a separate parser is needed to decode the inner IP and TCP headers because - // gopacket doesn't support this type of nesting in a single decoder - var innerIPLayer layers.IPv4 - var innerTCPLayer layers.TCP - innerIPParser := gopacket.NewDecodingLayerParser(layers.LayerTypeIPv4, &innerIPLayer, &innerTCPLayer) - if err := innerIPParser.DecodeLayers(icmpPayload, &decoded); err != nil { - return nil, fmt.Errorf("failed to decode inner ICMP payload: %w", err) - } - icmpResponse.InnerSrcIP = innerIPLayer.SrcIP - icmpResponse.InnerDstIP = innerIPLayer.DstIP - icmpResponse.InnerSrcPort = uint16(innerTCPLayer.SrcPort) - icmpResponse.InnerDstPort = uint16(innerTCPLayer.DstPort) - icmpResponse.InnerSeqNum = innerTCPLayer.Seq - - return &icmpResponse, nil -} - type tcpParser struct { layer layers.TCP decoded []gopacket.LayerType @@ -216,7 +107,7 @@ func newTCPParser() *tcpParser { } func (tp *tcpParser) parseTCP(header *ipv4.Header, payload []byte) (*tcpResponse, error) { - if header.Protocol != IPProtoTCP || header.Version != 4 || + if header.Protocol != syscall.IPPROTO_TCP || header.Version != 4 || header.Src == nil || header.Dst == nil { return nil, fmt.Errorf("invalid IP header for TCP packet: %+v", header) } @@ -236,14 +127,6 @@ func (tp *tcpParser) parseTCP(header *ipv4.Header, payload []byte) (*tcpResponse return resp, nil } -func icmpMatch(localIP net.IP, localPort uint16, remoteIP net.IP, remotePort uint16, seqNum uint32, response *icmpResponse) bool { - return localIP.Equal(response.InnerSrcIP) && - remoteIP.Equal(response.InnerDstIP) && - localPort == response.InnerSrcPort && - remotePort == response.InnerDstPort && - seqNum == response.InnerSeqNum -} - func tcpMatch(localIP net.IP, localPort uint16, remoteIP net.IP, remotePort uint16, seqNum uint32, response *tcpResponse) bool { flagsCheck := (response.TCPResponse.SYN && response.TCPResponse.ACK) || response.TCPResponse.RST sourcePort := uint16(response.TCPResponse.SrcPort) @@ -256,7 +139,3 @@ func tcpMatch(localIP net.IP, localPort uint16, remoteIP net.IP, remotePort uint seqNum == response.TCPResponse.Ack-1 && flagsCheck } - -func (c canceledError) Error() string { - return string(c) -} diff --git a/pkg/networkpath/traceroute/tcp/utils_test.go b/pkg/networkpath/traceroute/tcp/utils_test.go index d79cda12ac5da..5b344df71ec16 100644 --- a/pkg/networkpath/traceroute/tcp/utils_test.go +++ b/pkg/networkpath/traceroute/tcp/utils_test.go @@ -10,15 +10,14 @@ package tcp import ( "fmt" "net" - "reflect" "runtime" "testing" - "github.com/google/gopacket" - "github.com/google/gopacket/layers" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "golang.org/x/net/ipv4" + + "github.com/DataDog/datadog-agent/pkg/networkpath/traceroute/testutils" ) var ( @@ -113,102 +112,12 @@ func Test_createRawTCPSynBuffer(t *testing.T) { assert.Equal(t, expectedPktBytes, pktBytes) } -func Test_parseICMP(t *testing.T) { - ipv4Header := createMockIPv4Header(srcIP, dstIP, 1) - icmpLayer := createMockICMPLayer(layers.ICMPv4CodeTTLExceeded) - innerIPv4Layer := createMockIPv4Layer(innerSrcIP, innerDstIP, layers.IPProtocolTCP) - innerTCPLayer := createMockTCPLayer(12345, 443, 28394, 12737, true, true, true) - - tt := []struct { - description string - inHeader *ipv4.Header - inPayload []byte - expected *icmpResponse - errMsg string - }{ - { - description: "empty IPv4 layer should return an error", - inHeader: &ipv4.Header{}, - inPayload: []byte{}, - expected: nil, - errMsg: "invalid IP header for ICMP packet", - }, - { - description: "missing ICMP layer should return an error", - inHeader: ipv4Header, - inPayload: []byte{}, - expected: nil, - errMsg: "failed to decode ICMP packet", - }, - { - description: "missing inner layers should return an error", - inHeader: ipv4Header, - inPayload: createMockICMPPacket(nil, icmpLayer, nil, nil, false), - expected: nil, - errMsg: "failed to decode inner ICMP payload", - }, - { - description: "ICMP packet with partial TCP header should create icmpResponse", - inHeader: ipv4Header, - inPayload: createMockICMPPacket(nil, icmpLayer, innerIPv4Layer, innerTCPLayer, true), - expected: &icmpResponse{ - SrcIP: srcIP, - DstIP: dstIP, - InnerSrcIP: innerSrcIP, - InnerDstIP: innerDstIP, - InnerSrcPort: 12345, - InnerDstPort: 443, - InnerSeqNum: 28394, - }, - errMsg: "", - }, - { - description: "full ICMP packet should create icmpResponse", - inHeader: ipv4Header, - inPayload: createMockICMPPacket(nil, icmpLayer, innerIPv4Layer, innerTCPLayer, true), - expected: &icmpResponse{ - SrcIP: srcIP, - DstIP: dstIP, - InnerSrcIP: innerSrcIP, - InnerDstIP: innerDstIP, - InnerSrcPort: 12345, - InnerDstPort: 443, - InnerSeqNum: 28394, - }, - errMsg: "", - }, - } - - for _, test := range tt { - t.Run(test.description, func(t *testing.T) { - actual, err := parseICMP(test.inHeader, test.inPayload) - if test.errMsg != "" { - require.Error(t, err) - assert.Contains(t, err.Error(), test.errMsg) - assert.Nil(t, actual) - return - } - require.Nil(t, err) - require.NotNil(t, actual) - // assert.Equal doesn't handle net.IP well - assert.Equal(t, structFieldCount(test.expected), structFieldCount(actual)) - assert.Truef(t, test.expected.SrcIP.Equal(actual.SrcIP), "mismatch source IPs: expected %s, got %s", test.expected.SrcIP.String(), actual.SrcIP.String()) - assert.Truef(t, test.expected.DstIP.Equal(actual.DstIP), "mismatch dest IPs: expected %s, got %s", test.expected.DstIP.String(), actual.DstIP.String()) - assert.Truef(t, test.expected.InnerSrcIP.Equal(actual.InnerSrcIP), "mismatch inner source IPs: expected %s, got %s", test.expected.InnerSrcIP.String(), actual.InnerSrcIP.String()) - assert.Truef(t, test.expected.InnerDstIP.Equal(actual.InnerDstIP), "mismatch inner dest IPs: expected %s, got %s", test.expected.InnerDstIP.String(), actual.InnerDstIP.String()) - assert.Equal(t, test.expected.InnerSrcPort, actual.InnerSrcPort) - assert.Equal(t, test.expected.InnerDstPort, actual.InnerDstPort) - assert.Equal(t, test.expected.InnerSeqNum, actual.InnerSeqNum) - }) - } -} - func Test_parseTCP(t *testing.T) { - ipv4Header := createMockIPv4Header(srcIP, dstIP, 6) // 6 is TCP - tcpLayer := createMockTCPLayer(12345, 443, 28394, 12737, true, true, true) + ipv4Header := testutils.CreateMockIPv4Header(srcIP, dstIP, 6) // 6 is TCP + tcpLayer := testutils.CreateMockTCPLayer(12345, 443, 28394, 12737, true, true, true) // full packet - encodedTCPLayer, fullTCPPacket := createMockTCPPacket(ipv4Header, tcpLayer, false) + encodedTCPLayer, fullTCPPacket := testutils.CreateMockTCPPacket(ipv4Header, tcpLayer, false) tt := []struct { description string @@ -257,7 +166,7 @@ func Test_parseTCP(t *testing.T) { require.Nil(t, err) require.NotNil(t, actual) // assert.Equal doesn't handle net.IP well - assert.Equal(t, structFieldCount(test.expected), structFieldCount(actual)) + assert.Equal(t, testutils.StructFieldCount(test.expected), testutils.StructFieldCount(actual)) assert.Truef(t, test.expected.SrcIP.Equal(actual.SrcIP), "mismatch source IPs: expected %s, got %s", test.expected.SrcIP.String(), actual.SrcIP.String()) assert.Truef(t, test.expected.DstIP.Equal(actual.DstIP), "mismatch dest IPs: expected %s, got %s", test.expected.DstIP.String(), actual.DstIP.String()) assert.Equal(t, test.expected.TCPResponse, actual.TCPResponse) @@ -266,11 +175,11 @@ func Test_parseTCP(t *testing.T) { } func BenchmarkParseTCP(b *testing.B) { - ipv4Header := createMockIPv4Header(srcIP, dstIP, 6) // 6 is TCP - tcpLayer := createMockTCPLayer(12345, 443, 28394, 12737, true, true, true) + ipv4Header := testutils.CreateMockIPv4Header(srcIP, dstIP, 6) // 6 is TCP + tcpLayer := testutils.CreateMockTCPLayer(12345, 443, 28394, 12737, true, true, true) // full packet - _, fullTCPPacket := createMockTCPPacket(ipv4Header, tcpLayer, false) + _, fullTCPPacket := testutils.CreateMockTCPPacket(ipv4Header, tcpLayer, false) tp := newTCPParser() @@ -282,129 +191,3 @@ func BenchmarkParseTCP(b *testing.B) { } } } - -func createMockIPv4Header(srcIP, dstIP net.IP, protocol int) *ipv4.Header { - return &ipv4.Header{ - Version: 4, - Src: srcIP, - Dst: dstIP, - Protocol: protocol, - TTL: 64, - Len: 8, - } -} - -func createMockICMPPacket(ipLayer *layers.IPv4, icmpLayer *layers.ICMPv4, innerIP *layers.IPv4, innerTCP *layers.TCP, partialTCPHeader bool) []byte { - innerBuf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true} - - innerLayers := make([]gopacket.SerializableLayer, 0, 2) - if innerIP != nil { - innerLayers = append(innerLayers, innerIP) - } - if innerTCP != nil { - innerLayers = append(innerLayers, innerTCP) - if innerIP != nil { - innerTCP.SetNetworkLayerForChecksum(innerIP) - } - } - - gopacket.SerializeLayers(innerBuf, opts, - innerLayers..., - ) - payload := innerBuf.Bytes() - - // if partialTCP is set, truncate - // the payload to include only the - // first 8 bytes of the TCP header - if partialTCPHeader { - payload = payload[:32] - } - - buf := gopacket.NewSerializeBuffer() - gopacket.SerializeLayers(buf, opts, - icmpLayer, - gopacket.Payload(payload), - ) - - icmpBytes := buf.Bytes() - if ipLayer == nil { - return icmpBytes - } - - buf = gopacket.NewSerializeBuffer() - gopacket.SerializeLayers(buf, opts, - ipLayer, - gopacket.Payload(icmpBytes), - ) - - return buf.Bytes() -} - -func createMockTCPPacket(ipHeader *ipv4.Header, tcpLayer *layers.TCP, includeHeader bool) (*layers.TCP, []byte) { - ipLayer := &layers.IPv4{ - Version: 4, - SrcIP: ipHeader.Src, - DstIP: ipHeader.Dst, - Protocol: layers.IPProtocol(ipHeader.Protocol), - TTL: 64, - Length: 8, - } - tcpLayer.SetNetworkLayerForChecksum(ipLayer) - buf := gopacket.NewSerializeBuffer() - opts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true} - if includeHeader { - gopacket.SerializeLayers(buf, opts, - ipLayer, - tcpLayer, - ) - } else { - gopacket.SerializeLayers(buf, opts, - tcpLayer, - ) - } - - pkt := gopacket.NewPacket(buf.Bytes(), layers.LayerTypeTCP, gopacket.Default) - - // return encoded TCP layer here - return pkt.Layer(layers.LayerTypeTCP).(*layers.TCP), buf.Bytes() -} - -func createMockIPv4Layer(srcIP, dstIP net.IP, protocol layers.IPProtocol) *layers.IPv4 { - return &layers.IPv4{ - SrcIP: srcIP, - DstIP: dstIP, - Version: 4, - Protocol: protocol, - } -} - -func createMockICMPLayer(typeCode layers.ICMPv4TypeCode) *layers.ICMPv4 { - return &layers.ICMPv4{ - TypeCode: typeCode, - } -} - -func createMockTCPLayer(srcPort uint16, dstPort uint16, seqNum uint32, ackNum uint32, syn bool, ack bool, rst bool) *layers.TCP { - return &layers.TCP{ - SrcPort: layers.TCPPort(srcPort), - DstPort: layers.TCPPort(dstPort), - Seq: seqNum, - Ack: ackNum, - SYN: syn, - ACK: ack, - RST: rst, - } -} - -func structFieldCount(v interface{}) int { - val := reflect.ValueOf(v) - if val.Kind() == reflect.Ptr { - val = val.Elem() - } - if val.Kind() != reflect.Struct { - return -1 - } - - return val.NumField() -} diff --git a/pkg/networkpath/traceroute/tcp/utils_unix.go b/pkg/networkpath/traceroute/tcp/utils_unix.go index 2a52e5f8bea88..4fd1b2e4b251d 100644 --- a/pkg/networkpath/traceroute/tcp/utils_unix.go +++ b/pkg/networkpath/traceroute/tcp/utils_unix.go @@ -14,6 +14,7 @@ import ( "sync" "time" + "github.com/DataDog/datadog-agent/pkg/networkpath/traceroute/common" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/google/gopacket/layers" "go.uber.org/multierr" @@ -68,8 +69,8 @@ func listenPackets(icmpConn rawConnWrapper, tcpConn rawConnWrapper, timeout time wg.Wait() if tcpErr != nil && icmpErr != nil { - _, tcpCanceled := tcpErr.(canceledError) - _, icmpCanceled := icmpErr.(canceledError) + _, tcpCanceled := tcpErr.(common.CanceledError) + _, icmpCanceled := icmpErr.(common.CanceledError) if icmpCanceled && tcpCanceled { log.Trace("timed out waiting for responses") return net.IP{}, 0, 0, time.Time{}, nil @@ -103,7 +104,7 @@ func handlePackets(ctx context.Context, conn rawConnWrapper, listener string, lo for { select { case <-ctx.Done(): - return net.IP{}, 0, 0, time.Time{}, canceledError("listener canceled") + return net.IP{}, 0, 0, time.Time{}, common.CanceledError("listener canceled") default: } now := time.Now() @@ -127,12 +128,12 @@ func handlePackets(ctx context.Context, conn rawConnWrapper, listener string, lo // TODO: remove listener constraint and parse all packets // in the same function return a succinct struct here if listener == "icmp" { - icmpResponse, err := parseICMP(header, packet) + icmpResponse, err := common.ParseICMP(header, packet) if err != nil { log.Tracef("failed to parse ICMP packet: %s", err) continue } - if icmpMatch(localIP, localPort, remoteIP, remotePort, seqNum, icmpResponse) { + if common.ICMPMatch(localIP, localPort, remoteIP, remotePort, seqNum, icmpResponse) { return icmpResponse.SrcIP, 0, icmpResponse.TypeCode, received, nil } } else if listener == "tcp" { diff --git a/pkg/networkpath/traceroute/tcp/utils_unix_test.go b/pkg/networkpath/traceroute/tcp/utils_unix_test.go index 731f5affe1380..db78310723d28 100644 --- a/pkg/networkpath/traceroute/tcp/utils_unix_test.go +++ b/pkg/networkpath/traceroute/tcp/utils_unix_test.go @@ -19,6 +19,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "golang.org/x/net/ipv4" + + "github.com/DataDog/datadog-agent/pkg/networkpath/traceroute/testutils" ) type ( @@ -40,7 +42,7 @@ type ( ) func Test_handlePackets(t *testing.T) { - _, tcpBytes := createMockTCPPacket(createMockIPv4Header(dstIP, srcIP, 6), createMockTCPLayer(443, 12345, 28394, 28395, true, true, true), false) + _, tcpBytes := testutils.CreateMockTCPPacket(testutils.CreateMockIPv4Header(dstIP, srcIP, 6), testutils.CreateMockTCPLayer(443, 12345, 28394, 28395, true, true, true), false) tt := []struct { description string @@ -120,8 +122,8 @@ func Test_handlePackets(t *testing.T) { description: "successful ICMP parsing returns IP, port, and type code", ctxTimeout: 500 * time.Millisecond, conn: &mockRawConn{ - header: createMockIPv4Header(srcIP, dstIP, 1), - payload: createMockICMPPacket(nil, createMockICMPLayer(layers.ICMPv4CodeTTLExceeded), createMockIPv4Layer(innerSrcIP, innerDstIP, layers.IPProtocolTCP), createMockTCPLayer(12345, 443, 28394, 12737, true, true, true), false), + header: testutils.CreateMockIPv4Header(srcIP, dstIP, 1), + payload: testutils.CreateMockICMPPacket(nil, testutils.CreateMockICMPLayer(layers.ICMPv4CodeTTLExceeded), testutils.CreateMockIPv4Layer(innerSrcIP, innerDstIP, layers.IPProtocolTCP), testutils.CreateMockTCPLayer(12345, 443, 28394, 12737, true, true, true), false), }, localIP: innerSrcIP, localPort: 12345, @@ -137,7 +139,7 @@ func Test_handlePackets(t *testing.T) { description: "successful TCP parsing returns IP, port, and type code", ctxTimeout: 500 * time.Millisecond, conn: &mockRawConn{ - header: createMockIPv4Header(dstIP, srcIP, 6), + header: testutils.CreateMockIPv4Header(dstIP, srcIP, 6), payload: tcpBytes, }, localIP: srcIP, diff --git a/pkg/networkpath/traceroute/tcp/utils_windows.go b/pkg/networkpath/traceroute/tcp/utils_windows.go index 077495f43203e..483167109b6e4 100644 --- a/pkg/networkpath/traceroute/tcp/utils_windows.go +++ b/pkg/networkpath/traceroute/tcp/utils_windows.go @@ -16,6 +16,7 @@ import ( "golang.org/x/net/ipv4" "golang.org/x/sys/windows" + "github.com/DataDog/datadog-agent/pkg/networkpath/traceroute/common" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/google/gopacket/layers" ) @@ -49,7 +50,7 @@ func (w *winrawsocket) listenPackets(timeout time.Duration, localIP net.IP, loca wg.Wait() if icmpErr != nil { - _, icmpCanceled := icmpErr.(canceledError) + _, icmpCanceled := icmpErr.(common.CanceledError) if icmpCanceled { log.Trace("timed out waiting for responses") return net.IP{}, 0, 0, time.Time{}, nil @@ -74,7 +75,7 @@ func (w *winrawsocket) handlePackets(ctx context.Context, localIP net.IP, localP for { select { case <-ctx.Done(): - return net.IP{}, 0, 0, time.Time{}, canceledError("listener canceled") + return net.IP{}, 0, 0, time.Time{}, common.CanceledError("listener canceled") default: } @@ -110,12 +111,12 @@ func (w *winrawsocket) handlePackets(ctx context.Context, localIP net.IP, localP // TODO: remove listener constraint and parse all packets // in the same function return a succinct struct here if header.Protocol == windows.IPPROTO_ICMP { - icmpResponse, err := parseICMP(header, packet) + icmpResponse, err := common.ParseICMP(header, packet) if err != nil { log.Tracef("failed to parse ICMP packet: %s", err.Error()) continue } - if icmpMatch(localIP, localPort, remoteIP, remotePort, seqNum, icmpResponse) { + if common.ICMPMatch(localIP, localPort, remoteIP, remotePort, seqNum, icmpResponse) { return icmpResponse.SrcIP, 0, icmpResponse.TypeCode, received, nil } } else if header.Protocol == windows.IPPROTO_TCP { diff --git a/pkg/networkpath/traceroute/tcp/utils_windows_test.go b/pkg/networkpath/traceroute/tcp/utils_windows_test.go index 6e5b2a1c81ba4..6fbd7d0cc860b 100644 --- a/pkg/networkpath/traceroute/tcp/utils_windows_test.go +++ b/pkg/networkpath/traceroute/tcp/utils_windows_test.go @@ -18,6 +18,7 @@ import ( "golang.org/x/sys/windows" + "github.com/DataDog/datadog-agent/pkg/networkpath/traceroute/testutils" "github.com/google/gopacket/layers" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -34,7 +35,7 @@ type ( ) func Test_handlePackets(t *testing.T) { - _, tcpBytes := createMockTCPPacket(createMockIPv4Header(dstIP, srcIP, 6), createMockTCPLayer(443, 12345, 28394, 28395, true, true, true), true) + _, tcpBytes := testutils.CreateMockTCPPacket(testutils.CreateMockIPv4Header(dstIP, srcIP, 6), testutils.CreateMockTCPLayer(443, 12345, 28394, 28395, true, true, true), true) tt := []struct { description string @@ -92,7 +93,7 @@ func Test_handlePackets(t *testing.T) { description: "successful ICMP parsing returns IP, port, and type code", ctxTimeout: 500 * time.Millisecond, conn: &mockRawConn{ - payload: createMockICMPPacket(createMockIPv4Layer(srcIP, dstIP, layers.IPProtocolICMPv4), createMockICMPLayer(layers.ICMPv4CodeTTLExceeded), createMockIPv4Layer(innerSrcIP, innerDstIP, layers.IPProtocolTCP), createMockTCPLayer(12345, 443, 28394, 12737, true, true, true), false), + payload: testutils.CreateMockICMPPacket(testutils.CreateMockIPv4Layer(srcIP, dstIP, layers.IPProtocolICMPv4), testutils.CreateMockICMPLayer(layers.ICMPv4CodeTTLExceeded), testutils.CreateMockIPv4Layer(innerSrcIP, innerDstIP, layers.IPProtocolTCP), testutils.CreateMockTCPLayer(12345, 443, 28394, 12737, true, true, true), false), }, localIP: innerSrcIP, localPort: 12345, diff --git a/pkg/networkpath/traceroute/testutils/doc.go b/pkg/networkpath/traceroute/testutils/doc.go new file mode 100644 index 0000000000000..2a31e324c585c --- /dev/null +++ b/pkg/networkpath/traceroute/testutils/doc.go @@ -0,0 +1,7 @@ +// 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 testutils contains utilities for testing traceroute code +package testutils diff --git a/pkg/networkpath/traceroute/testutils/testutils.go b/pkg/networkpath/traceroute/testutils/testutils.go new file mode 100644 index 0000000000000..e412d8971372b --- /dev/null +++ b/pkg/networkpath/traceroute/testutils/testutils.go @@ -0,0 +1,150 @@ +// 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. + +//go:build test + +package testutils + +import ( + "net" + "reflect" + + "github.com/google/gopacket" + "github.com/google/gopacket/layers" + "golang.org/x/net/ipv4" +) + +// CreateMockIPv4Header creates a mock IPv4 header for testing +func CreateMockIPv4Header(srcIP, dstIP net.IP, protocol int) *ipv4.Header { + return &ipv4.Header{ + Version: 4, + Src: srcIP, + Dst: dstIP, + Protocol: protocol, + TTL: 64, + Len: 8, + } +} + +// CreateMockICMPPacket creates a mock ICMP packet for testing +func CreateMockICMPPacket(ipLayer *layers.IPv4, icmpLayer *layers.ICMPv4, innerIP *layers.IPv4, innerTCP *layers.TCP, partialTCPHeader bool) []byte { + innerBuf := gopacket.NewSerializeBuffer() + opts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true} + + innerLayers := make([]gopacket.SerializableLayer, 0, 2) + if innerIP != nil { + innerLayers = append(innerLayers, innerIP) + } + if innerTCP != nil { + innerLayers = append(innerLayers, innerTCP) + if innerIP != nil { + innerTCP.SetNetworkLayerForChecksum(innerIP) // nolint: errcheck + } + } + + gopacket.SerializeLayers(innerBuf, opts, // nolint: errcheck + innerLayers..., + ) + payload := innerBuf.Bytes() + + // if partialTCP is set, truncate + // the payload to include only the + // first 8 bytes of the TCP header + if partialTCPHeader { + payload = payload[:32] + } + + buf := gopacket.NewSerializeBuffer() + gopacket.SerializeLayers(buf, opts, // nolint: errcheck + icmpLayer, + gopacket.Payload(payload), + ) + + icmpBytes := buf.Bytes() + if ipLayer == nil { + return icmpBytes + } + + buf = gopacket.NewSerializeBuffer() + gopacket.SerializeLayers(buf, opts, // nolint: errcheck + ipLayer, + gopacket.Payload(icmpBytes), + ) + + return buf.Bytes() +} + +// CreateMockTCPPacket creates a mock TCP packet for testing +func CreateMockTCPPacket(ipHeader *ipv4.Header, tcpLayer *layers.TCP, includeHeader bool) (*layers.TCP, []byte) { + ipLayer := &layers.IPv4{ + Version: 4, + SrcIP: ipHeader.Src, + DstIP: ipHeader.Dst, + Protocol: layers.IPProtocol(ipHeader.Protocol), + TTL: 64, + Length: 8, + } + tcpLayer.SetNetworkLayerForChecksum(ipLayer) // nolint: errcheck + buf := gopacket.NewSerializeBuffer() + opts := gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true} + if includeHeader { + gopacket.SerializeLayers(buf, opts, // nolint: errcheck + ipLayer, + tcpLayer, + ) + } else { + gopacket.SerializeLayers(buf, opts, // nolint: errcheck + tcpLayer, + ) + } + + pkt := gopacket.NewPacket(buf.Bytes(), layers.LayerTypeTCP, gopacket.Default) + + // return encoded TCP layer here + return pkt.Layer(layers.LayerTypeTCP).(*layers.TCP), buf.Bytes() +} + +// CreateMockIPv4Layer creates a mock IPv4 layer for testing +func CreateMockIPv4Layer(srcIP, dstIP net.IP, protocol layers.IPProtocol) *layers.IPv4 { + return &layers.IPv4{ + SrcIP: srcIP, + DstIP: dstIP, + Version: 4, + Protocol: protocol, + } +} + +// CreateMockICMPLayer creates a mock ICMP layer for testing +func CreateMockICMPLayer(typeCode layers.ICMPv4TypeCode) *layers.ICMPv4 { + return &layers.ICMPv4{ + TypeCode: typeCode, + } +} + +// CreateMockTCPLayer creates a mock TCP layer for testing +func CreateMockTCPLayer(srcPort uint16, dstPort uint16, seqNum uint32, ackNum uint32, syn bool, ack bool, rst bool) *layers.TCP { + return &layers.TCP{ + SrcPort: layers.TCPPort(srcPort), + DstPort: layers.TCPPort(dstPort), + Seq: seqNum, + Ack: ackNum, + SYN: syn, + ACK: ack, + RST: rst, + } +} + +// StructFieldCount returns the number of fields in a struct +func StructFieldCount(v interface{}) int { + val := reflect.ValueOf(v) + if val.Kind() == reflect.Ptr { + val = val.Elem() + } + if val.Kind() != reflect.Struct { + return -1 + } + + return val.NumField() +} From 5ff3a47729a74ee546d1bde329c6d3e324afb483 Mon Sep 17 00:00:00 2001 From: Sylvain Baubeau Date: Tue, 10 Dec 2024 16:57:46 +0100 Subject: [PATCH 093/303] [CWS] Move tags from cgroup to tags resolver (#31874) --- pkg/security/resolvers/cgroup/model/model.go | 30 +---------- pkg/security/resolvers/cgroup/model/types.go | 5 ++ pkg/security/resolvers/sbom/resolver.go | 11 ++-- .../resolvers/sbom/resolver_unsupported.go | 3 +- pkg/security/resolvers/tags/resolver.go | 2 + pkg/security/resolvers/tags/resolver_linux.go | 52 +++++++++++++------ pkg/security/security_profile/dump/manager.go | 3 +- .../security_profile/profile/manager.go | 33 ++++++------ .../security_profile/profile/manager_test.go | 12 +++-- .../security_profile/profile/profile.go | 3 +- .../tests/activity_tree_test.go | 13 +++-- 11 files changed, 88 insertions(+), 79 deletions(-) diff --git a/pkg/security/resolvers/cgroup/model/model.go b/pkg/security/resolvers/cgroup/model/model.go index c916e45477876..1bde78216970f 100644 --- a/pkg/security/resolvers/cgroup/model/model.go +++ b/pkg/security/resolvers/cgroup/model/model.go @@ -15,7 +15,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/secl/containerutils" "github.com/DataDog/datadog-agent/pkg/security/secl/model" - "github.com/DataDog/datadog-agent/pkg/security/utils" ) // CacheEntry cgroup resolver cache entry @@ -23,9 +22,8 @@ type CacheEntry struct { model.CGroupContext model.ContainerContext sync.RWMutex - Deleted *atomic.Bool - WorkloadSelector WorkloadSelector - PIDs map[uint32]bool + Deleted *atomic.Bool + PIDs map[uint32]bool } // NewCacheEntry returns a new instance of a CacheEntry @@ -78,27 +76,3 @@ func (cgce *CacheEntry) AddPID(pid uint32) { cgce.PIDs[pid] = true } - -// SetTags sets the tags for the provided workload -func (cgce *CacheEntry) SetTags(tags []string) { - cgce.Lock() - defer cgce.Unlock() - - cgce.Tags = tags - cgce.WorkloadSelector.Image = utils.GetTagValue("image_name", tags) - cgce.WorkloadSelector.Tag = utils.GetTagValue("image_tag", tags) - if len(cgce.WorkloadSelector.Image) != 0 && len(cgce.WorkloadSelector.Tag) == 0 { - cgce.WorkloadSelector.Tag = "latest" - } -} - -// GetWorkloadSelectorCopy returns a copy of the workload selector of this cgroup -func (cgce *CacheEntry) GetWorkloadSelectorCopy() *WorkloadSelector { - cgce.Lock() - defer cgce.Unlock() - - return &WorkloadSelector{ - Image: cgce.WorkloadSelector.Image, - Tag: cgce.WorkloadSelector.Tag, - } -} diff --git a/pkg/security/resolvers/cgroup/model/types.go b/pkg/security/resolvers/cgroup/model/types.go index d07f94be04121..09a9a66473aa6 100644 --- a/pkg/security/resolvers/cgroup/model/types.go +++ b/pkg/security/resolvers/cgroup/model/types.go @@ -61,3 +61,8 @@ func (ws WorkloadSelector) ToTags() []string { "image_tag:" + ws.Tag, } } + +// Copy returns a copy of the selector +func (ws WorkloadSelector) Copy() *WorkloadSelector { + return &ws +} diff --git a/pkg/security/resolvers/sbom/resolver.go b/pkg/security/resolvers/sbom/resolver.go index d0a290975d6df..e282dbd6f23d9 100644 --- a/pkg/security/resolvers/sbom/resolver.go +++ b/pkg/security/resolvers/sbom/resolver.go @@ -33,6 +33,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/metrics" cgroupModel "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup/model" + "github.com/DataDog/datadog-agent/pkg/security/resolvers/tags" "github.com/DataDog/datadog-agent/pkg/security/secl/containerutils" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/seclog" @@ -486,15 +487,15 @@ func (r *Resolver) triggerScan(sbom *SBOM) { } // OnWorkloadSelectorResolvedEvent is used to handle the creation of a new cgroup with its resolved tags -func (r *Resolver) OnWorkloadSelectorResolvedEvent(cgroup *cgroupModel.CacheEntry) { +func (r *Resolver) OnWorkloadSelectorResolvedEvent(workload *tags.Workload) { r.sbomsLock.Lock() defer r.sbomsLock.Unlock() - if cgroup == nil { + if workload == nil { return } - id := cgroup.ContainerID + id := workload.ContainerID // We don't scan hosts for now if len(id) == 0 { return @@ -502,8 +503,8 @@ func (r *Resolver) OnWorkloadSelectorResolvedEvent(cgroup *cgroupModel.CacheEntr _, ok := r.sboms[id] if !ok { - workloadKey := getWorkloadKey(cgroup.GetWorkloadSelectorCopy()) - sbom, err := r.newWorkloadEntry(id, cgroup, workloadKey) + workloadKey := getWorkloadKey(workload.Selector.Copy()) + sbom, err := r.newWorkloadEntry(id, workload.CacheEntry, workloadKey) if err != nil { seclog.Errorf("couldn't create new SBOM entry for sbom '%s': %v", id, err) } diff --git a/pkg/security/resolvers/sbom/resolver_unsupported.go b/pkg/security/resolvers/sbom/resolver_unsupported.go index 9e073e03e552c..614682af506fa 100644 --- a/pkg/security/resolvers/sbom/resolver_unsupported.go +++ b/pkg/security/resolvers/sbom/resolver_unsupported.go @@ -15,6 +15,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/config" cgroupModel "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup/model" + "github.com/DataDog/datadog-agent/pkg/security/resolvers/tags" "github.com/DataDog/datadog-agent/pkg/security/secl/containerutils" "github.com/DataDog/datadog-agent/pkg/security/secl/model" ) @@ -33,7 +34,7 @@ func (r *Resolver) OnCGroupDeletedEvent(_ *cgroupModel.CacheEntry) { } // OnWorkloadSelectorResolvedEvent is used to handle the creation of a new cgroup with its resolved tags -func (r *Resolver) OnWorkloadSelectorResolvedEvent(_ *cgroupModel.CacheEntry) { +func (r *Resolver) OnWorkloadSelectorResolvedEvent(_ *tags.Workload) { } // ResolvePackage returns the Package that owns the provided file diff --git a/pkg/security/resolvers/tags/resolver.go b/pkg/security/resolvers/tags/resolver.go index 051122e4436ec..a5f0a4b956775 100644 --- a/pkg/security/resolvers/tags/resolver.go +++ b/pkg/security/resolvers/tags/resolver.go @@ -21,6 +21,8 @@ type Event int const ( // WorkloadSelectorResolved is used to notify that a new cgroup with a resolved workload selector is ready WorkloadSelectorResolved Event = iota + // WorkloadSelectorDeleted is used to notify that a cgroup with a resolved workload selector is deleted + WorkloadSelectorDeleted ) // Tagger defines a Tagger for the Tags Resolver diff --git a/pkg/security/resolvers/tags/resolver_linux.go b/pkg/security/resolvers/tags/resolver_linux.go index e11b2001dba4a..e029f003696b6 100644 --- a/pkg/security/resolvers/tags/resolver_linux.go +++ b/pkg/security/resolvers/tags/resolver_linux.go @@ -13,21 +13,26 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup" cgroupModel "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup/model" + "github.com/DataDog/datadog-agent/pkg/security/secl/containerutils" "github.com/DataDog/datadog-agent/pkg/security/seclog" "github.com/DataDog/datadog-agent/pkg/security/utils" ) -type pendingWorkload struct { +// Workload represents a workload along with its tags +type Workload struct { *cgroupModel.CacheEntry - retries int + Tags []string + Selector cgroupModel.WorkloadSelector + retries int } // LinuxResolver represents a default resolver based directly on the underlying tagger type LinuxResolver struct { *DefaultResolver - *utils.Notifier[Event, *cgroupModel.CacheEntry] - workloadsWithoutTags chan *pendingWorkload + *utils.Notifier[Event, *Workload] + workloadsWithoutTags chan *Workload cgroupResolver *cgroup.Resolver + workloads map[containerutils.CGroupID]*Workload } // Start the resolver @@ -37,12 +42,19 @@ func (t *LinuxResolver) Start(ctx context.Context) error { } if err := t.cgroupResolver.RegisterListener(cgroup.CGroupCreated, func(cgce *cgroupModel.CacheEntry) { - workload := &pendingWorkload{CacheEntry: cgce, retries: 3} + workload := &Workload{CacheEntry: cgce, retries: 3} + t.workloads[cgce.CGroupID] = workload t.checkTags(workload) }); err != nil { return err } + if err := t.cgroupResolver.RegisterListener(cgroup.CGroupDeleted, func(cgce *cgroupModel.CacheEntry) { + delete(t.workloads, cgce.CGroupID) + }); err != nil { + return err + } + go func() { ctx, cancel := context.WithCancel(ctx) defer cancel() @@ -73,17 +85,18 @@ func (t *LinuxResolver) Start(ctx context.Context) error { return nil } -func needsTagsResolution(cgce *cgroupModel.CacheEntry) bool { - return len(cgce.ContainerID) != 0 && !cgce.WorkloadSelector.IsReady() +func needsTagsResolution(workload *Workload) bool { + return len(workload.ContainerID) != 0 && !workload.Selector.IsReady() } // checkTags checks if the tags of a workload were properly set -func (t *LinuxResolver) checkTags(pendingWorkload *pendingWorkload) { - workload := pendingWorkload.CacheEntry +func (t *LinuxResolver) checkTags(pendingWorkload *Workload) { + workload := pendingWorkload // check if the workload tags were found or if it was deleted if !workload.Deleted.Load() && needsTagsResolution(workload) { // this is an alive cgroup, try to resolve its tags now - if err := t.fetchTags(workload); err != nil || needsTagsResolution(workload) { + err := t.fetchTags(workload) + if err != nil || needsTagsResolution(workload) { if pendingWorkload.retries--; pendingWorkload.retries >= 0 { // push to the workloadsWithoutTags chan so that its tags can be resolved later select { @@ -102,22 +115,29 @@ func (t *LinuxResolver) checkTags(pendingWorkload *pendingWorkload) { } // fetchTags fetches tags for the provided workload -func (t *LinuxResolver) fetchTags(container *cgroupModel.CacheEntry) error { - newTags, err := t.ResolveWithErr(container.ContainerID) +func (t *LinuxResolver) fetchTags(workload *Workload) error { + newTags, err := t.ResolveWithErr(workload.ContainerID) if err != nil { - return fmt.Errorf("failed to resolve %s: %w", container.ContainerID, err) + return fmt.Errorf("failed to resolve %s: %w", workload.ContainerID, err) } - container.SetTags(newTags) + + workload.Selector.Image = utils.GetTagValue("image_name", newTags) + workload.Selector.Tag = utils.GetTagValue("image_tag", newTags) + if len(workload.Selector.Image) != 0 && len(workload.Selector.Tag) == 0 { + workload.Selector.Tag = "latest" + } + return nil } // NewResolver returns a new tags resolver func NewResolver(tagger Tagger, cgroupsResolver *cgroup.Resolver) *LinuxResolver { resolver := &LinuxResolver{ - Notifier: utils.NewNotifier[Event, *cgroupModel.CacheEntry](), + Notifier: utils.NewNotifier[Event, *Workload](), DefaultResolver: NewDefaultResolver(tagger), - workloadsWithoutTags: make(chan *pendingWorkload, 100), + workloadsWithoutTags: make(chan *Workload, 100), cgroupResolver: cgroupsResolver, + workloads: make(map[containerutils.CGroupID]*Workload), } return resolver } diff --git a/pkg/security/security_profile/dump/manager.go b/pkg/security/security_profile/dump/manager.go index a0b8c490b965e..b37a2c7264f1a 100644 --- a/pkg/security/security_profile/dump/manager.go +++ b/pkg/security/security_profile/dump/manager.go @@ -34,6 +34,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/proto/api" "github.com/DataDog/datadog-agent/pkg/security/resolvers" cgroupModel "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup/model" + "github.com/DataDog/datadog-agent/pkg/security/resolvers/tags" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/seclog" activity_tree "github.com/DataDog/datadog-agent/pkg/security/security_profile/activity_tree" @@ -47,7 +48,7 @@ type ActivityDumpHandler interface { // SecurityProfileManager is a generic interface used to communicate with the Security Profile manager type SecurityProfileManager interface { - FetchSilentWorkloads() map[cgroupModel.WorkloadSelector][]*cgroupModel.CacheEntry + FetchSilentWorkloads() map[cgroupModel.WorkloadSelector][]*tags.Workload OnLocalStorageCleanup(files []string) } diff --git a/pkg/security/security_profile/profile/manager.go b/pkg/security/security_profile/profile/manager.go index aadd9b94cd88b..38fd111fbfe5a 100644 --- a/pkg/security/security_profile/profile/manager.go +++ b/pkg/security/security_profile/profile/manager.go @@ -29,7 +29,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/metrics" "github.com/DataDog/datadog-agent/pkg/security/proto/api" "github.com/DataDog/datadog-agent/pkg/security/resolvers" - "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup" cgroupModel "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup/model" "github.com/DataDog/datadog-agent/pkg/security/resolvers/tags" "github.com/DataDog/datadog-agent/pkg/security/secl/containerutils" @@ -228,7 +227,7 @@ func (m *SecurityProfileManager) Start(ctx context.Context) { // register the manager to the CGroup resolver _ = m.resolvers.TagsResolver.RegisterListener(tags.WorkloadSelectorResolved, m.OnWorkloadSelectorResolvedEvent) - _ = m.resolvers.CGroupResolver.RegisterListener(cgroup.CGroupDeleted, m.OnCGroupDeletedEvent) + _ = m.resolvers.TagsResolver.RegisterListener(tags.WorkloadSelectorDeleted, m.OnWorkloadDeletedEvent) seclog.Infof("security profile manager started") @@ -250,7 +249,7 @@ func (m *SecurityProfileManager) propagateWorkloadSelectorsToProviders() { } // OnWorkloadSelectorResolvedEvent is used to handle the creation of a new cgroup with its resolved tags -func (m *SecurityProfileManager) OnWorkloadSelectorResolvedEvent(workload *cgroupModel.CacheEntry) { +func (m *SecurityProfileManager) OnWorkloadSelectorResolvedEvent(workload *tags.Workload) { m.profilesLock.Lock() defer m.profilesLock.Unlock() workload.Lock() @@ -261,7 +260,7 @@ func (m *SecurityProfileManager) OnWorkloadSelectorResolvedEvent(workload *cgrou return } - selector := workload.WorkloadSelector + selector := workload.Selector selector.Tag = "*" // check if the workload of this selector already exists @@ -307,7 +306,7 @@ func (m *SecurityProfileManager) OnWorkloadSelectorResolvedEvent(workload *cgrou } // LinkProfile applies a profile to the provided workload -func (m *SecurityProfileManager) LinkProfile(profile *SecurityProfile, workload *cgroupModel.CacheEntry) { +func (m *SecurityProfileManager) LinkProfile(profile *SecurityProfile, workload *tags.Workload) { profile.Lock() defer profile.Unlock() @@ -329,7 +328,7 @@ func (m *SecurityProfileManager) LinkProfile(profile *SecurityProfile, workload } // UnlinkProfile removes the link between a workload and a profile -func (m *SecurityProfileManager) UnlinkProfile(profile *SecurityProfile, workload *cgroupModel.CacheEntry) { +func (m *SecurityProfileManager) UnlinkProfile(profile *SecurityProfile, workload *tags.Workload) { profile.Lock() defer profile.Unlock() @@ -394,11 +393,11 @@ func FillProfileContextFromProfile(ctx *model.SecurityProfileContext, profile *S } } -// OnCGroupDeletedEvent is used to handle a CGroupDeleted event -func (m *SecurityProfileManager) OnCGroupDeletedEvent(workload *cgroupModel.CacheEntry) { +// OnWorkloadDeletedEvent is used to handle a WorkloadDeleted event +func (m *SecurityProfileManager) OnWorkloadDeletedEvent(workload *tags.Workload) { // lookup the profile selector := cgroupModel.WorkloadSelector{ - Image: workload.WorkloadSelector.Image, + Image: workload.Selector.Image, Tag: "*", } profile := m.GetProfile(selector) @@ -640,24 +639,24 @@ func (m *SecurityProfileManager) unloadProfile(profile *SecurityProfile) { } // linkProfile (thread unsafe) updates the kernel space mapping between a workload and its profile -func (m *SecurityProfileManager) linkProfile(profile *SecurityProfile, workload *cgroupModel.CacheEntry) { +func (m *SecurityProfileManager) linkProfile(profile *SecurityProfile, workload *tags.Workload) { if err := m.securityProfileMap.Put([]byte(workload.ContainerID), profile.profileCookie); err != nil { - seclog.Errorf("couldn't link workload %s (selector: %s) with profile %s (check map size limit ?): %v", workload.ContainerID, workload.WorkloadSelector.String(), profile.Metadata.Name, err) + seclog.Errorf("couldn't link workload %s (selector: %s) with profile %s (check map size limit ?): %v", workload.ContainerID, workload.Selector.String(), profile.Metadata.Name, err) return } - seclog.Infof("workload %s (selector: %s) successfully linked to profile %s", workload.ContainerID, workload.WorkloadSelector.String(), profile.Metadata.Name) + seclog.Infof("workload %s (selector: %s) successfully linked to profile %s", workload.ContainerID, workload.Selector.String(), profile.Metadata.Name) } // unlinkProfile (thread unsafe) updates the kernel space mapping between a workload and its profile -func (m *SecurityProfileManager) unlinkProfile(profile *SecurityProfile, workload *cgroupModel.CacheEntry) { +func (m *SecurityProfileManager) unlinkProfile(profile *SecurityProfile, workload *tags.Workload) { if !profile.loadedInKernel { return } if err := m.securityProfileMap.Delete([]byte(workload.ContainerID)); err != nil { - seclog.Errorf("couldn't unlink workload %s (selector: %s) with profile %s: %v", workload.ContainerID, workload.WorkloadSelector.String(), profile.Metadata.Name, err) + seclog.Errorf("couldn't unlink workload %s (selector: %s) with profile %s: %v", workload.ContainerID, workload.Selector.String(), profile.Metadata.Name, err) } - seclog.Infof("workload %s (selector: %s) successfully unlinked from profile %s", workload.ContainerID, workload.WorkloadSelector.String(), profile.Metadata.Name) + seclog.Infof("workload %s (selector: %s) successfully unlinked from profile %s", workload.ContainerID, workload.Selector.String(), profile.Metadata.Name) } func (m *SecurityProfileManager) canGenerateAnomaliesFor(e *model.Event) bool { @@ -960,11 +959,11 @@ func (m *SecurityProfileManager) SaveSecurityProfile(params *api.SecurityProfile } // FetchSilentWorkloads returns the list of workloads for which we haven't received any profile -func (m *SecurityProfileManager) FetchSilentWorkloads() map[cgroupModel.WorkloadSelector][]*cgroupModel.CacheEntry { +func (m *SecurityProfileManager) FetchSilentWorkloads() map[cgroupModel.WorkloadSelector][]*tags.Workload { m.profilesLock.Lock() defer m.profilesLock.Unlock() - out := make(map[cgroupModel.WorkloadSelector][]*cgroupModel.CacheEntry) + out := make(map[cgroupModel.WorkloadSelector][]*tags.Workload) for selector, profile := range m.profiles { profile.Lock() diff --git a/pkg/security/security_profile/profile/manager_test.go b/pkg/security/security_profile/profile/manager_test.go index dc41ce396c286..b25390fbad9d0 100644 --- a/pkg/security/security_profile/profile/manager_test.go +++ b/pkg/security/security_profile/profile/manager_test.go @@ -21,6 +21,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/config" cgroupModel "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup/model" + "github.com/DataDog/datadog-agent/pkg/security/resolvers/tags" "github.com/DataDog/datadog-agent/pkg/security/secl/containerutils" "github.com/DataDog/datadog-agent/pkg/security/secl/model" activity_tree "github.com/DataDog/datadog-agent/pkg/security/security_profile/activity_tree" @@ -841,14 +842,15 @@ func TestSecurityProfileManager_tryAutolearn(t *testing.T) { if ti.newProfile || profile == nil { profile = NewSecurityProfile(cgroupModel.WorkloadSelector{Image: "image", Tag: "tag"}, []model.EventType{model.ExecEventType, model.DNSEventType}, nil) profile.ActivityTree = activity_tree.NewActivityTree(profile, nil, "security_profile") - profile.Instances = append(profile.Instances, &cgroupModel.CacheEntry{ - ContainerContext: model.ContainerContext{ + profile.Instances = append(profile.Instances, &tags.Workload{ + CacheEntry: &cgroupModel.CacheEntry{ContainerContext: model.ContainerContext{ ContainerID: containerutils.ContainerID(defaultContainerID), }, - CGroupContext: model.CGroupContext{ - CGroupID: containerutils.CGroupID(defaultContainerID), + CGroupContext: model.CGroupContext{ + CGroupID: containerutils.CGroupID(defaultContainerID), + }, }, - WorkloadSelector: cgroupModel.WorkloadSelector{Image: "image", Tag: "tag"}, + Selector: cgroupModel.WorkloadSelector{Image: "image", Tag: "tag"}, }) profile.loadedNano = uint64(t0.UnixNano()) } diff --git a/pkg/security/security_profile/profile/profile.go b/pkg/security/security_profile/profile/profile.go index c70c28f9712b2..b7118732d1a9d 100644 --- a/pkg/security/security_profile/profile/profile.go +++ b/pkg/security/security_profile/profile/profile.go @@ -22,6 +22,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/proto/api" cgroupModel "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup/model" + "github.com/DataDog/datadog-agent/pkg/security/resolvers/tags" "github.com/DataDog/datadog-agent/pkg/security/secl/model" activity_tree "github.com/DataDog/datadog-agent/pkg/security/security_profile/activity_tree" mtdt "github.com/DataDog/datadog-agent/pkg/security/security_profile/activity_tree/metadata" @@ -69,7 +70,7 @@ type SecurityProfile struct { pathsReducer *activity_tree.PathsReducer // Instances is the list of workload instances to witch the profile should apply - Instances []*cgroupModel.CacheEntry + Instances []*tags.Workload // Metadata contains metadata for the current profile Metadata mtdt.Metadata diff --git a/pkg/security/security_profile/tests/activity_tree_test.go b/pkg/security/security_profile/tests/activity_tree_test.go index 5f9afbb1c9e9a..a814932f385fd 100644 --- a/pkg/security/security_profile/tests/activity_tree_test.go +++ b/pkg/security/security_profile/tests/activity_tree_test.go @@ -20,6 +20,7 @@ import ( "github.com/stretchr/testify/assert" cgroupModel "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup/model" + "github.com/DataDog/datadog-agent/pkg/security/resolvers/tags" "github.com/DataDog/datadog-agent/pkg/security/secl/containerutils" "github.com/DataDog/datadog-agent/pkg/security/secl/model" activity_tree "github.com/DataDog/datadog-agent/pkg/security/security_profile/activity_tree" @@ -692,12 +693,14 @@ func TestActivityTree_CreateProcessNode(t *testing.T) { profile := profile.NewSecurityProfile(cgroupModel.WorkloadSelector{Image: "image", Tag: "tag"}, []model.EventType{model.ExecEventType, model.DNSEventType}, nil) at = activity_tree.NewActivityTree(profile, nil, "profile") profile.ActivityTree = at - profile.Instances = append(profile.Instances, &cgroupModel.CacheEntry{ - ContainerContext: model.ContainerContext{ - ContainerID: containerutils.ContainerID(contID), + profile.Instances = append(profile.Instances, &tags.Workload{ + CacheEntry: &cgroupModel.CacheEntry{ + ContainerContext: model.ContainerContext{ + ContainerID: containerutils.ContainerID(contID), + }, + CGroupContext: model.CGroupContext{CGroupID: containerutils.CGroupID(contID)}, }, - CGroupContext: model.CGroupContext{CGroupID: containerutils.CGroupID(contID)}, - WorkloadSelector: cgroupModel.WorkloadSelector{Image: "image", Tag: "tag"}, + Selector: cgroupModel.WorkloadSelector{Image: "image", Tag: "tag"}, }) } } else { // retrieve last saved tree state From b92624a8de6aa3faa7dfe87c16becda104aa3763 Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Tue, 10 Dec 2024 17:31:11 +0100 Subject: [PATCH 094/303] [CWS] fix overlayfs support on rocky 9.4 (#31948) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../c/include/constants/offsets/filesystem.h | 5 +- pkg/security/ebpf/kernel/kernel.go | 5 + .../probe/constantfetch/btfhub/constants.json | 247 ++++++++++++++++++ .../probe/constantfetch/constant_names.go | 1 + pkg/security/probe/constantfetch/fallback.go | 6 + pkg/security/probe/probe_ebpf.go | 5 + 6 files changed, 268 insertions(+), 1 deletion(-) diff --git a/pkg/security/ebpf/c/include/constants/offsets/filesystem.h b/pkg/security/ebpf/c/include/constants/offsets/filesystem.h index 496927e2fd8eb..24b2d5f769af1 100644 --- a/pkg/security/ebpf/c/include/constants/offsets/filesystem.h +++ b/pkg/security/ebpf/c/include/constants/offsets/filesystem.h @@ -23,9 +23,12 @@ dev_t __attribute__((always_inline)) get_inode_dev(struct inode *inode) { } dev_t __attribute__((always_inline)) get_dentry_dev(struct dentry *dentry) { + u64 offset; + LOAD_CONSTANT("dentry_d_sb_offset", offset); + dev_t dev; struct super_block *sb; - bpf_probe_read(&sb, sizeof(sb), &dentry->d_sb); + bpf_probe_read(&sb, sizeof(sb), (char *)dentry + offset); bpf_probe_read(&dev, sizeof(dev), &sb->s_dev); return dev; } diff --git a/pkg/security/ebpf/kernel/kernel.go b/pkg/security/ebpf/kernel/kernel.go index 65170a4d53c0f..7ff8ef846ac9e 100644 --- a/pkg/security/ebpf/kernel/kernel.go +++ b/pkg/security/ebpf/kernel/kernel.go @@ -251,6 +251,11 @@ func (k *Version) IsRH9_3Kernel() bool { return k.IsRH9Kernel() && strings.HasPrefix(k.OsRelease["VERSION_ID"], "9.3") } +// IsRH9_4Kernel returns whether the kernel is a rh9.3 kernel +func (k *Version) IsRH9_4Kernel() bool { + return k.IsRH9Kernel() && strings.HasPrefix(k.OsRelease["VERSION_ID"], "9.4") +} + // IsSuseKernel returns whether the kernel is a suse kernel func (k *Version) IsSuseKernel() bool { return k.IsSLESKernel() || k.OsRelease["ID"] == "opensuse-leap" diff --git a/pkg/security/probe/constantfetch/btfhub/constants.json b/pkg/security/probe/constantfetch/btfhub/constants.json index c8e007fa9ae5c..abf445a40119a 100644 --- a/pkg/security/probe/constantfetch/btfhub/constants.json +++ b/pkg/security/probe/constantfetch/btfhub/constants.json @@ -11,6 +11,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -56,6 +57,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -101,6 +103,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -146,6 +149,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 44, "creds_uid_offset": 8, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -191,6 +195,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -236,6 +241,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -281,6 +287,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -326,6 +333,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -371,6 +379,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 44, "creds_uid_offset": 8, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -416,6 +425,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -458,6 +468,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -500,6 +511,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -545,6 +557,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -590,6 +603,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -635,6 +649,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -680,6 +695,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 44, "creds_uid_offset": 8, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -725,6 +741,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -766,6 +783,7 @@ "bpf_prog_aux_offset": 16, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1128, "file_f_inode_offset": 32, @@ -806,6 +824,7 @@ "bpf_prog_aux_offset": 16, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1128, "file_f_inode_offset": 32, @@ -845,6 +864,7 @@ "bpf_prog_aux_offset": 16, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1128, "file_f_inode_offset": 32, @@ -886,6 +906,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1192, "file_f_inode_offset": 32, @@ -929,6 +950,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -972,6 +994,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -1018,6 +1041,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -1062,6 +1086,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -1106,6 +1131,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -1150,6 +1176,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -1194,6 +1221,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -1240,6 +1268,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -1285,6 +1314,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -1324,6 +1354,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -1364,6 +1395,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1240, "file_f_inode_offset": 32, @@ -1410,6 +1442,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -1456,6 +1489,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -1502,6 +1536,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1000, "file_f_inode_offset": 32, @@ -1548,6 +1583,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1000, "file_f_inode_offset": 32, @@ -1595,6 +1631,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -1640,6 +1677,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -1685,6 +1723,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -1732,6 +1771,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -1778,6 +1818,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -1826,6 +1867,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -1874,6 +1916,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -1921,6 +1964,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 152, "dentry_sb_offset": 152, "device_nd_net_net_offset": 1368, "file_f_inode_offset": 32, @@ -1968,6 +2012,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -2015,6 +2060,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 152, "dentry_sb_offset": 152, "device_nd_net_net_offset": 1368, "file_f_inode_offset": 32, @@ -2062,6 +2108,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -2109,6 +2156,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 152, "dentry_sb_offset": 152, "device_nd_net_net_offset": 1368, "file_f_inode_offset": 32, @@ -2156,6 +2204,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 44, "creds_uid_offset": 8, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -2203,6 +2252,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 44, "creds_uid_offset": 8, + "dentry_d_sb_offset": 152, "dentry_sb_offset": 152, "device_nd_net_net_offset": 1368, "file_f_inode_offset": 32, @@ -2250,6 +2300,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 152, "dentry_sb_offset": 152, "device_nd_net_net_offset": 1368, "file_f_inode_offset": 32, @@ -2297,6 +2348,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -2345,6 +2397,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 168, "dentry_sb_offset": 168, "device_nd_net_net_offset": 1376, "file_f_inode_offset": 32, @@ -2393,6 +2446,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 44, "creds_uid_offset": 8, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -2441,6 +2495,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 44, "creds_uid_offset": 8, + "dentry_d_sb_offset": 168, "dentry_sb_offset": 168, "device_nd_net_net_offset": 1376, "file_f_inode_offset": 32, @@ -2489,6 +2544,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -2536,6 +2592,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 152, "dentry_sb_offset": 152, "device_nd_net_net_offset": 1368, "file_f_inode_offset": 32, @@ -2583,6 +2640,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -2630,6 +2688,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 152, "dentry_sb_offset": 152, "device_nd_net_net_offset": 1368, "file_f_inode_offset": 32, @@ -2677,6 +2736,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -2724,6 +2784,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 152, "dentry_sb_offset": 152, "device_nd_net_net_offset": 1368, "file_f_inode_offset": 32, @@ -2771,6 +2832,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 44, "creds_uid_offset": 8, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -2818,6 +2880,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 44, "creds_uid_offset": 8, + "dentry_d_sb_offset": 152, "dentry_sb_offset": 152, "device_nd_net_net_offset": 1368, "file_f_inode_offset": 32, @@ -2865,6 +2928,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 152, "dentry_sb_offset": 152, "device_nd_net_net_offset": 1368, "file_f_inode_offset": 32, @@ -2912,6 +2976,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -2960,6 +3025,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 168, "dentry_sb_offset": 168, "device_nd_net_net_offset": 1376, "file_f_inode_offset": 32, @@ -3008,6 +3074,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 44, "creds_uid_offset": 8, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -3056,6 +3123,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 44, "creds_uid_offset": 8, + "dentry_d_sb_offset": 168, "dentry_sb_offset": 168, "device_nd_net_net_offset": 1376, "file_f_inode_offset": 32, @@ -3098,6 +3166,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -3140,6 +3209,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -3182,6 +3252,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 152, "dentry_sb_offset": 152, "device_nd_net_net_offset": 1368, "file_f_inode_offset": 32, @@ -3225,6 +3296,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -3267,6 +3339,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1176, "file_f_inode_offset": 32, @@ -3312,6 +3385,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -3354,6 +3428,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1224, "file_f_inode_offset": 32, @@ -3397,6 +3472,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -3444,6 +3520,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1248, "file_f_inode_offset": 32, @@ -3492,6 +3569,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1248, "file_f_inode_offset": 32, @@ -3539,6 +3617,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1312, "file_f_inode_offset": 32, @@ -3587,6 +3666,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -3633,6 +3713,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1248, "file_f_inode_offset": 32, @@ -3681,6 +3762,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -3728,6 +3810,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1248, "file_f_inode_offset": 32, @@ -3776,6 +3859,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -3825,6 +3909,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -3874,6 +3959,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -3922,6 +4008,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -3970,6 +4057,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -4019,6 +4107,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -4065,6 +4154,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -4113,6 +4203,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -4162,6 +4253,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -4211,6 +4303,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -4257,6 +4350,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1000, "file_f_inode_offset": 32, @@ -4298,6 +4392,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -4343,6 +4438,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -4388,6 +4484,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -4436,6 +4533,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -4485,6 +4583,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -4534,6 +4633,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -4583,6 +4683,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -4632,6 +4733,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -4678,6 +4780,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -4726,6 +4829,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -4775,6 +4879,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -4821,6 +4926,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -4869,6 +4975,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -4915,6 +5022,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -4960,6 +5068,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -5005,6 +5114,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1120, "file_f_inode_offset": 32, @@ -5051,6 +5161,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -5097,6 +5208,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -5143,6 +5255,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1128, "file_f_inode_offset": 32, @@ -5191,6 +5304,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -5240,6 +5354,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -5289,6 +5404,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1056, "file_f_inode_offset": 32, @@ -5338,6 +5454,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -5387,6 +5504,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -5436,6 +5554,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1128, "file_f_inode_offset": 32, @@ -5480,6 +5599,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1192, "file_f_inode_offset": 32, @@ -5523,6 +5643,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -5568,6 +5689,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1000, "file_f_inode_offset": 32, @@ -5614,6 +5736,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1000, "file_f_inode_offset": 32, @@ -5661,6 +5784,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -5707,6 +5831,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -5755,6 +5880,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1288, "file_f_inode_offset": 32, @@ -5797,6 +5923,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -5839,6 +5966,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -5884,6 +6012,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -5929,6 +6058,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -5975,6 +6105,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -6020,6 +6151,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -6066,6 +6198,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -6114,6 +6247,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -6163,6 +6297,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -6212,6 +6347,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -6261,6 +6397,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -6305,6 +6442,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1280, "file_f_inode_offset": 32, @@ -6348,6 +6486,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1280, "file_f_inode_offset": 32, @@ -6391,6 +6530,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -6434,6 +6574,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -6479,6 +6620,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -6526,6 +6668,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1248, "file_f_inode_offset": 32, @@ -6573,6 +6716,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1248, "file_f_inode_offset": 32, @@ -6620,6 +6764,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1248, "file_f_inode_offset": 32, @@ -6667,6 +6812,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1248, "file_f_inode_offset": 32, @@ -6714,6 +6860,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -6761,6 +6908,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -6808,6 +6956,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1248, "file_f_inode_offset": 32, @@ -6856,6 +7005,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1248, "file_f_inode_offset": 32, @@ -6898,6 +7048,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -6940,6 +7091,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -6982,6 +7134,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -7024,6 +7177,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -7066,6 +7220,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -7108,6 +7263,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -7150,6 +7306,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -7192,6 +7349,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -7234,6 +7392,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1128, "file_f_inode_offset": 32, @@ -7276,6 +7435,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -7318,6 +7478,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -7360,6 +7521,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -7402,6 +7564,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -7444,6 +7607,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1128, "file_f_inode_offset": 32, @@ -7486,6 +7650,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1160, "file_f_inode_offset": 32, @@ -7528,6 +7693,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1224, "file_f_inode_offset": 32, @@ -7570,6 +7736,7 @@ "bpf_prog_type_offset": 8, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1224, "file_f_inode_offset": 32, @@ -7615,6 +7782,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -7662,6 +7830,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1312, "file_f_inode_offset": 32, @@ -7709,6 +7878,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1312, "file_f_inode_offset": 32, @@ -7757,6 +7927,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1312, "file_f_inode_offset": 32, @@ -7805,6 +7976,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -7852,6 +8024,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -7899,6 +8072,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -7946,6 +8120,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -7995,6 +8170,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -8044,6 +8220,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -8093,6 +8270,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -8142,6 +8320,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -8188,6 +8367,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -8235,6 +8415,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1248, "file_f_inode_offset": 32, @@ -8282,6 +8463,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1248, "file_f_inode_offset": 32, @@ -8329,6 +8511,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1248, "file_f_inode_offset": 32, @@ -8376,6 +8559,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -8423,6 +8607,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -8470,6 +8655,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1248, "file_f_inode_offset": 32, @@ -8518,6 +8704,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1312, "file_f_inode_offset": 32, @@ -8566,6 +8753,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1248, "file_f_inode_offset": 32, @@ -8614,6 +8802,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1248, "file_f_inode_offset": 32, @@ -8662,6 +8851,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -8709,6 +8899,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -8756,6 +8947,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -8803,6 +8995,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -8850,6 +9043,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1320, "file_f_inode_offset": 32, @@ -8897,6 +9091,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -8946,6 +9141,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -8995,6 +9191,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -9044,6 +9241,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -9093,6 +9291,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -9142,6 +9341,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -9191,6 +9391,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -9240,6 +9441,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -9289,6 +9491,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -9338,6 +9541,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -9387,6 +9591,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -9436,6 +9641,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -9485,6 +9691,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -9534,6 +9741,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1328, "file_f_inode_offset": 32, @@ -9582,6 +9790,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -9630,6 +9839,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -9679,6 +9889,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -9728,6 +9939,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -9777,6 +9989,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -9826,6 +10039,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -9875,6 +10089,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -9923,6 +10138,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -9971,6 +10187,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -10019,6 +10236,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1328, "file_f_inode_offset": 32, @@ -10067,6 +10285,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1328, "file_f_inode_offset": 32, @@ -10115,6 +10334,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -10164,6 +10384,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -10213,6 +10434,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -10262,6 +10484,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -10311,6 +10534,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -10360,6 +10584,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -10409,6 +10634,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -10458,6 +10684,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -10507,6 +10734,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -10556,6 +10784,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -10605,6 +10834,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -10654,6 +10884,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -10703,6 +10934,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -10752,6 +10984,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -10801,6 +11034,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1256, "file_f_inode_offset": 32, @@ -10850,6 +11084,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -10898,6 +11133,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -10946,6 +11182,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -10994,6 +11231,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -11042,6 +11280,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -11090,6 +11329,7 @@ "bpf_prog_type_offset": 4, "creds_cap_inheritable_offset": 40, "creds_uid_offset": 4, + "dentry_d_sb_offset": 104, "dentry_sb_offset": 104, "device_nd_net_net_offset": 1264, "file_f_inode_offset": 32, @@ -18344,6 +18584,13 @@ "uname_release": "4.14.35-2047.542.2.el7uek.aarch64", "cindex": 89 }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.543.3.el7uek.aarch64", + "cindex": 89 + }, { "distrib": "ol", "version": "7", diff --git a/pkg/security/probe/constantfetch/constant_names.go b/pkg/security/probe/constantfetch/constant_names.go index c5ee88a4452f6..2feab9c5e0402 100644 --- a/pkg/security/probe/constantfetch/constant_names.go +++ b/pkg/security/probe/constantfetch/constant_names.go @@ -28,6 +28,7 @@ const ( OffsetNameKernelCloneArgsExitSignal = "kernel_clone_args_exit_signal_offset" OffsetNameFileFinode = "file_f_inode_offset" OffsetNameFileFpath = "file_f_path_offset" + OffsetNameDentryDSb = "dentry_d_sb_offset" OffsetNameMountMntID = "mount_id_offset" // inode times diff --git a/pkg/security/probe/constantfetch/fallback.go b/pkg/security/probe/constantfetch/fallback.go index 468a5f54c84d4..531edb59c29d3 100644 --- a/pkg/security/probe/constantfetch/fallback.go +++ b/pkg/security/probe/constantfetch/fallback.go @@ -139,6 +139,8 @@ func (f *FallbackConstantFetcher) appendRequest(id string) { value = getFileFinodeOffset(f.kernelVersion) case OffsetNameFileFpath: value = getFileFpathOffset(f.kernelVersion) + case OffsetNameDentryDSb: + value = getDentryDsbOffset(f.kernelVersion) case OffsetNameMountMntID: value = getMountIDOffset(f.kernelVersion) case OffsetNameRenameStructOldDentry: @@ -1013,6 +1015,10 @@ func getFileFpathOffset(kv *kernel.Version) uint64 { } } +func getDentryDsbOffset(_ *kernel.Version) uint64 { + return 104 +} + func getMountIDOffset(kv *kernel.Version) uint64 { switch { case kv.IsSuseKernel() || kv.Code >= kernel.Kernel5_12: diff --git a/pkg/security/probe/probe_ebpf.go b/pkg/security/probe/probe_ebpf.go index 1bb574938bfdd..7446c49f70ceb 100644 --- a/pkg/security/probe/probe_ebpf.go +++ b/pkg/security/probe/probe_ebpf.go @@ -2338,6 +2338,10 @@ func getOvlPathInOvlInode(kernelVersion *kernel.Version) uint64 { return 2 } + if kernelVersion.IsInRangeCloseOpen(kernel.Kernel5_14, kernel.Kernel5_15) && kernelVersion.IsRH9_4Kernel() { + return 2 + } + // https://github.com/torvalds/linux/commit/ffa5723c6d259b3191f851a50a98d0352b345b39 // changes a bit how the lower dentry/inode is stored in `ovl_inode`. To check if we // are in this configuration we first probe the kernel version, then we check for the @@ -2408,6 +2412,7 @@ func AppendProbeRequestsToFetcher(constantFetcher constantfetch.ConstantFetcher, constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameVMAreaStructFlags, "struct vm_area_struct", "vm_flags", "linux/mm_types.h") constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameFileFinode, "struct file", "f_inode", "linux/fs.h") constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameFileFpath, "struct file", "f_path", "linux/fs.h") + constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameDentryDSb, "struct dentry", "d_sb", "linux/dcache.h") constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameMountMntID, "struct mount", "mnt_id", "") if kv.Code >= kernel.Kernel5_3 { constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameKernelCloneArgsExitSignal, "struct kernel_clone_args", "exit_signal", "linux/sched/task.h") From b6292731c4db9ae56ed42eaf1abd83c05178a2dd Mon Sep 17 00:00:00 2001 From: Raphael Gavache Date: Tue, 10 Dec 2024 17:59:00 +0100 Subject: [PATCH 095/303] [fleet] add install_script e2e test setup (#31791) Co-authored-by: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> --- .gitlab-ci.yml | 1 + .gitlab/JOBOWNERS | 1 + .gitlab/deploy_packages/e2e.yml | 14 +++++ .gitlab/deploy_packages/oci.yml | 5 ++ .gitlab/e2e/e2e.yml | 14 +++++ pkg/fleet/installer/setup/common/config.go | 14 ++--- .../installer/setup/common/config_test.go | 61 +++++++++++++++++++ pkg/fleet/installer/setup/setup.go | 8 ++- tasks/installer.py | 5 ++ .../tests/installer/script/databricks_test.go | 34 +++++++++++ 10 files changed, 149 insertions(+), 8 deletions(-) create mode 100644 pkg/fleet/installer/setup/common/config_test.go create mode 100644 test/new-e2e/tests/installer/script/databricks_test.go diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ef09047f42cce..abfece6aac73b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -134,6 +134,7 @@ variables: BUCKET_BRANCH: dev # path inside the staging s3 buckets to release to: 'dev', 'nightly', 'oldnightly', 'beta' or 'stable' DEB_TESTING_S3_BUCKET: apttesting.datad0g.com RPM_TESTING_S3_BUCKET: yumtesting.datad0g.com + INSTALLER_TESTING_S3_BUCKET: installtesting.datad0g.com WINDOWS_TESTING_S3_BUCKET_A6: pipelines/A6/$CI_PIPELINE_ID WINDOWS_TESTING_S3_BUCKET_A7: pipelines/A7/$CI_PIPELINE_ID WINDOWS_BUILDS_S3_BUCKET: $WIN_S3_BUCKET/builds diff --git a/.gitlab/JOBOWNERS b/.gitlab/JOBOWNERS index 9cb87462dca48..361807d382218 100644 --- a/.gitlab/JOBOWNERS +++ b/.gitlab/JOBOWNERS @@ -116,6 +116,7 @@ publish_winget* @DataDog/windows-agent powershell_script_deploy @DataDog/windows-agent windows_bootstrapper_deploy @DataDog/windows-agent qa_*_oci @DataDog/agent-delivery +qa_installer_script @DataDog/agent-delivery # Deploy containers deploy_containers* @Datadog/agent-delivery diff --git a/.gitlab/deploy_packages/e2e.yml b/.gitlab/deploy_packages/e2e.yml index 30de15bfbc2c5..a72844e37c245 100644 --- a/.gitlab/deploy_packages/e2e.yml +++ b/.gitlab/deploy_packages/e2e.yml @@ -25,3 +25,17 @@ qa_installer_oci: IMG_REGISTRIES: agent-qa IMG_SOURCES: registry.ddbuild.io/ci/remote-updates/datadog-installer:pipeline-${CI_PIPELINE_ID} IMG_DESTINATIONS: installer-package:pipeline-${CI_PIPELINE_ID} + +qa_installer_script: + image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES + stage: deploy_packages + tags: ["arch:amd64"] + rules: + - !reference [.on_installer_or_e2e_changes] + - !reference [.manual] + needs: + - installer-install-scripts + before_script: + - ls $OMNIBUS_PACKAGE_DIR + script: + - $S3_CP_CMD --recursive --exclude "*" --include "install-*.sh" "$OMNIBUS_PACKAGE_DIR" "s3://${INSTALLER_TESTING_S3_BUCKET}/${CI_COMMIT_SHA}/scripts/" diff --git a/.gitlab/deploy_packages/oci.yml b/.gitlab/deploy_packages/oci.yml index 5f362a55cc728..7db0433b743dd 100644 --- a/.gitlab/deploy_packages/oci.yml +++ b/.gitlab/deploy_packages/oci.yml @@ -24,6 +24,9 @@ include: - datadog-package push registry.ddbuild.io/ci/remote-updates/${OCI_PRODUCT}:${VERSION} ${OMNIBUS_PACKAGE_DIR}/${OCI_PRODUCT}-${VERSION}.oci.tar # This is used for E2E tests. Doesn't cost more than an additional tag to the registry. - datadog-package push registry.ddbuild.io/ci/remote-updates/${OCI_PRODUCT}:pipeline-${CI_PIPELINE_ID} ${OMNIBUS_PACKAGE_DIR}/${OCI_PRODUCT}-${VERSION}.oci.tar + # Used for install scripts e2e tests + - datadog-package replicate-s3 registry.ddbuild.io/ci/remote-updates/${OCI_PRODUCT}:pipeline-${CI_PIPELINE_ID} us-east-1 ${INSTALLER_TESTING_S3_BUCKET} ${S3_PACKAGE} ${VERSION} + - datadog-package replicate-s3 registry.ddbuild.io/ci/remote-updates/${OCI_PRODUCT}:pipeline-${CI_PIPELINE_ID} us-east-1 ${INSTALLER_TESTING_S3_BUCKET} ${S3_PACKAGE} ${CI_COMMIT_SHA} variables: MAJOR_VERSION: 7 @@ -32,9 +35,11 @@ deploy_agent_oci: needs: [ "agent_oci", "go_tools_deps"] variables: OCI_PRODUCT: "datadog-agent" + S3_PACKAGE: "agent-package" deploy_installer_oci: extends: ".deploy_packages_oci" needs: [ "installer_oci", "go_tools_deps" ] variables: OCI_PRODUCT: "datadog-installer" + S3_PACKAGE: "installer-package" diff --git a/.gitlab/e2e/e2e.yml b/.gitlab/e2e/e2e.yml index 3f0b2c313389e..6064179b1069b 100644 --- a/.gitlab/e2e/e2e.yml +++ b/.gitlab/e2e/e2e.yml @@ -385,6 +385,20 @@ new-e2e-apm: - EXTRA_PARAMS: --run TestVMFakeintakeSuiteUDS - EXTRA_PARAMS: --run TestVMFakeintakeSuiteTCP +new-e2e-installer-script: + extends: .new_e2e_template + rules: + - !reference [.on_installer_or_e2e_changes] + - !reference [.manual] + needs: + - !reference [.needs_new_e2e_template] + - deploy_installer_oci + - qa_installer_script + variables: + TARGETS: ./tests/installer/script + TEAM: fleet + FLEET_INSTALL_METHOD: "install_script" + new-e2e-installer: extends: .new_e2e_template rules: diff --git a/pkg/fleet/installer/setup/common/config.go b/pkg/fleet/installer/setup/common/config.go index 5ec929682808b..2fb775ed1066e 100644 --- a/pkg/fleet/installer/setup/common/config.go +++ b/pkg/fleet/installer/setup/common/config.go @@ -27,7 +27,7 @@ var ( datadogConfFile = filepath.Join(configDir, "datadog.yaml") logsConfFile = filepath.Join(configDir, "conf.d/configured_at_install_logs.yaml") sparkConfigFile = filepath.Join(configDir, "conf.d/spark.d/spark.yaml") - injectTracerConfigFile = filepath.Join(configDir, "/etc/datadog-agent/inject/tracer.yaml") + injectTracerConfigFile = filepath.Join(configDir, "inject/tracer.yaml") ) // HostInstaller is a struct that represents the agent agentConfiguration @@ -61,21 +61,21 @@ type logsConfig struct { type LogConfig struct { Type string `yaml:"type"` Path string `yaml:"path"` - Service string `yaml:"service"` - Source string `yaml:"source"` + Service string `yaml:"service,omitempty"` + Source string `yaml:"source,omitempty"` } type sparkConfig struct { - InitConfig interface{} `yaml:"init_config"` + InitConfig interface{} `yaml:"init_config,omitempty"` Instances []SparkInstance `yaml:"instances"` } // SparkInstance is a struct that represents a single spark instance type SparkInstance struct { SparkURL string `yaml:"spark_url"` - SparkClusterMode string `yaml:"spark_cluster_mode"` + SparkClusterMode string `yaml:"spark_cluster_mode,omitempty"` ClusterName string `yaml:"cluster_name"` - StreamingMetrics bool `yaml:"streaming_metrics"` + StreamingMetrics bool `yaml:"streaming_metrics,omitempty"` } type injectorConfig struct { @@ -100,7 +100,7 @@ func NewHostInstaller(env *env.Env) (*HostInstaller, error) { } func newHostInstaller(env *env.Env, ddUID, ddGID int) (*HostInstaller, error) { - i := &HostInstaller{} + i := &HostInstaller{agentConfig: make(map[string]interface{})} if env.APIKey == "" { return nil, fmt.Errorf("DD_API key is required") } diff --git a/pkg/fleet/installer/setup/common/config_test.go b/pkg/fleet/installer/setup/common/config_test.go new file mode 100644 index 0000000000000..bfe2809f39087 --- /dev/null +++ b/pkg/fleet/installer/setup/common/config_test.go @@ -0,0 +1,61 @@ +// 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. + +//go:build !windows + +// Package common contains the HostInstaller struct which is used to write the agent agentConfiguration to disk +package common + +import ( + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" +) + +func assertFileContent(t *testing.T, file, content string) { + b, err := os.ReadFile(file) + assert.NoError(t, err) + assert.Equal(t, content, string(b)) +} + +func TestAgentConfigs(t *testing.T) { + configDir = t.TempDir() + datadogConfFile = filepath.Join(configDir, "datadog.yaml") + logsConfFile = filepath.Join(configDir, "conf.d/configured_at_install_logs.yaml") + sparkConfigFile = filepath.Join(configDir, "conf.d/spark.d/spark.yaml") + + i, err := newHostInstaller(&env.Env{APIKey: "a"}, 0, 0) + assert.NotNil(t, i) + assert.Nil(t, err) + + i.AddAgentConfig("key", "value") + i.AddLogConfig(LogConfig{Type: "file", Path: "/var/log/app.log", Service: "app"}) + i.AddHostTag("k1", "v1") + i.AddHostTag("k2", "v2") + i.AddSparkInstance(SparkInstance{ClusterName: "cluster", SparkURL: "http://localhost:8080"}) + + assert.NoError(t, i.writeConfigs()) + assertFileContent(t, datadogConfFile, `api_key: a +key: value +logs_enabled: true +tags: +- k1:v1 +- k2:v2 +`) + + assertFileContent(t, logsConfFile, `logs: +- type: file + path: /var/log/app.log + service: app +`) + assertFileContent(t, sparkConfigFile, `instances: +- spark_url: http://localhost:8080 + cluster_name: cluster +`) +} diff --git a/pkg/fleet/installer/setup/setup.go b/pkg/fleet/installer/setup/setup.go index 376abc751eaf5..89b122d343aae 100644 --- a/pkg/fleet/installer/setup/setup.go +++ b/pkg/fleet/installer/setup/setup.go @@ -25,7 +25,13 @@ const ( func Setup(ctx context.Context, env *env.Env, flavor string) error { switch flavor { case FlavorDatabricks: - return djm.SetupDatabricks(ctx, env) + // temporary until the whole e2e test pipeline is setup + if err := djm.SetupDatabricks(ctx, env); err != nil { + fmt.Printf("Databricks setup failed: %v\n", err) + } else { + fmt.Println("Databricks setup completed") + } + return nil default: return fmt.Errorf("unknown setup flavor %s", flavor) } diff --git a/tasks/installer.py b/tasks/installer.py index 9e758a96a3bac..381c2dc104db8 100644 --- a/tasks/installer.py +++ b/tasks/installer.py @@ -10,6 +10,7 @@ from invoke.exceptions import Exit from tasks.build_tags import filter_incompatible_tags, get_build_tags, get_default_build_tags +from tasks.libs.common.git import get_commit_sha from tasks.libs.common.utils import REPO_PATH, bin_name, get_build_flags from tasks.libs.releasing.version import get_version @@ -106,6 +107,10 @@ def build_linux_script( with open(INSTALL_SCRIPT_TEMPLATE) as f: install_script = f.read() + # default version on pipelines, using the commit sha instead + if version == "nightly-a7": + version = get_commit_sha(ctx) + archs = ['amd64', 'arm64'] for arch in archs: build_downloader(ctx, flavor=flavor, version=version, os='linux', arch=arch) diff --git a/test/new-e2e/tests/installer/script/databricks_test.go b/test/new-e2e/tests/installer/script/databricks_test.go new file mode 100644 index 0000000000000..f947ae38336cc --- /dev/null +++ b/test/new-e2e/tests/installer/script/databricks_test.go @@ -0,0 +1,34 @@ +// 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 installscript + +import ( + "fmt" + "os" + "testing" + + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" + awshost "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/host" + osdesc "github.com/DataDog/test-infra-definitions/components/os" + "github.com/DataDog/test-infra-definitions/scenarios/aws/ec2" +) + +type vmUpdaterSuite struct { + commitHash string + e2e.BaseSuite[environments.Host] +} + +func (s *vmUpdaterSuite) TestInstallScript() { + url := fmt.Sprintf("https://installtesting.datad0g.com/%s/scripts/install-databricks.sh", s.commitHash) + s.Env().RemoteHost.MustExecute(fmt.Sprintf("curl -L %s > install_script; export DD_INSTALLER_REGISTRY_URL_INSTALLER_PACKAGE=installtesting.datad0g.com; sudo -E bash install_script", url)) +} + +func TestUpdaterSuite(t *testing.T) { + e2e.Run(t, &vmUpdaterSuite{commitHash: os.Getenv("CI_COMMIT_SHA")}, e2e.WithProvisioner(awshost.ProvisionerNoFakeIntake( + awshost.WithEC2InstanceOptions(ec2.WithOSArch(osdesc.UbuntuDefault, osdesc.ARM64Arch)), + ))) +} From 7f4316fe336920e1e5fb38e88c0d471695fcda2c Mon Sep 17 00:00:00 2001 From: Jonathan Ribas Date: Tue, 10 Dec 2024 18:12:35 +0100 Subject: [PATCH 096/303] [CWS] Lower a noisy ptrace info log to debug (#31976) --- pkg/security/probe/probe_ebpf.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/security/probe/probe_ebpf.go b/pkg/security/probe/probe_ebpf.go index 7446c49f70ceb..e262eb2205607 100644 --- a/pkg/security/probe/probe_ebpf.go +++ b/pkg/security/probe/probe_ebpf.go @@ -1097,7 +1097,7 @@ func (p *EBPFProbe) handleEvent(CPU int, data []byte) { } else { pid, err := utils.TryToResolveTraceePid(event.ProcessContext.Process.Pid, event.PTrace.NSPID) if err != nil { - seclog.Infof("PTrace err: %v", err) + seclog.Debugf("PTrace err: %v", err) return } pidToResolve = pid From 8b4888db95c7486f5dc5af3ffe0be1bd4ca93454 Mon Sep 17 00:00:00 2001 From: Wassim Dhif Date: Tue, 10 Dec 2024 18:23:31 +0100 Subject: [PATCH 097/303] fix(kubernetesadmissionevents): add demultiplexer flushing in the unit tests (#31885) Signed-off-by: Wassim DHIF --- .../kubernetesadmissionevents_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/clusteragent/admission/validate/kubernetesadmissionevents/kubernetesadmissionevents_test.go b/pkg/clusteragent/admission/validate/kubernetesadmissionevents/kubernetesadmissionevents_test.go index 954d338bae5e3..81d58c49a00ce 100644 --- a/pkg/clusteragent/admission/validate/kubernetesadmissionevents/kubernetesadmissionevents_test.go +++ b/pkg/clusteragent/admission/validate/kubernetesadmissionevents/kubernetesadmissionevents_test.go @@ -249,7 +249,10 @@ func TestKubernetesAdmissionEvents(t *testing.T) { assert.Equal(t, eventType, kubernetesAuditWebhook.name) // Emit the event + start := time.Now() mockSender.On("Event", mock.AnythingOfType("event.Event")).Return().Once() + // Force flush to serializer to ensure the event is emitted and received. + demultiplexerMock.ForceFlushToSerializer(start, true) validated, err := kubernetesAuditWebhook.emitEvent(&tt.request, "", nil) assert.NoError(t, err) assert.True(t, validated) From 6dea12debcd4916d28e872f33aa1dafc5518c009 Mon Sep 17 00:00:00 2001 From: Sarah Witt Date: Tue, 10 Dec 2024 12:23:41 -0500 Subject: [PATCH 098/303] [PLINT-578] [PLINT-589] Add platform integrations origins for q4 (#31492) --- pkg/aggregator/sender_test.go | 4 ++-- pkg/metrics/metricsource.go | 21 ++++++++++++++++--- .../internal/metrics/origin_mapping.go | 20 ++++++++++++++++-- ...s-metrics-origins-q4-3278d0ead5015daf.yaml | 11 ++++++++++ 4 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 releasenotes/notes/add-platform-integrations-metrics-origins-q4-3278d0ead5015daf.yaml diff --git a/pkg/aggregator/sender_test.go b/pkg/aggregator/sender_test.go index ef7173f8a1bcc..4479842cc18da 100644 --- a/pkg/aggregator/sender_test.go +++ b/pkg/aggregator/sender_test.go @@ -359,9 +359,9 @@ func TestSenderPopulatingMetricSampleSource(t *testing.T) { expectedMetricSource: metrics.MetricSourceCPU, }, { - name: "checkid ntp:1 should have MetricSourceNtp", + name: "checkid ntp:1 should have MetricSourceNTP", checkID: "ntp:1", - expectedMetricSource: metrics.MetricSourceNtp, + expectedMetricSource: metrics.MetricSourceNTP, }, { name: "checkid memory:1 should have MetricSourceMemory", diff --git a/pkg/metrics/metricsource.go b/pkg/metrics/metricsource.go index 4132329578862..57a802188d380 100644 --- a/pkg/metrics/metricsource.go +++ b/pkg/metrics/metricsource.go @@ -37,7 +37,7 @@ const ( MetricSourceContainerd MetricSourceCri MetricSourceDocker - MetricSourceNtp + MetricSourceNTP MetricSourceSystemd MetricSourceHelm MetricSourceKubernetesAPIServer @@ -60,6 +60,8 @@ const ( MetricSourceDisk MetricSourceNetwork MetricSourceSnmp + MetricSourceCloudFoundry + MetricSourceJenkins // Python Checks MetricSourceZenohRouter @@ -135,6 +137,9 @@ const ( MetricSourceAwsPricing MetricSourceAqua MetricSourceKubernetesClusterAutoscaler + MetricSourceKubeVirtAPI + MetricSourceKubeVirtController + MetricSourceKubeVirtHandler MetricSourceTraefikMesh MetricSourceWeaviate MetricSourceTorchserve @@ -349,7 +354,7 @@ func (ms MetricSource) String() string { return "cri" case MetricSourceDocker: return "docker" - case MetricSourceNtp: + case MetricSourceNTP: return "ntp" case MetricSourceSystemd: return "systemd" @@ -441,6 +446,8 @@ func (ms MetricSource) String() string { return "citrix_hypervisor" case MetricSourceClickhouse: return "clickhouse" + case MetricSourceCloudFoundry: + return "cloudfoundry" case MetricSourceCloudFoundryAPI: return "cloud_foundry_api" case MetricSourceCockroachdb: @@ -523,6 +530,8 @@ func (ms MetricSource) String() string { return "impala" case MetricSourceIstio: return "istio" + case MetricSourceJenkins: + return "jenkins" case MetricSourceKafkaConsumer: return "kafka_consumer" case MetricSourceKepler: @@ -884,7 +893,7 @@ func CheckNameToMetricSource(name string) MetricSource { case "docker": return MetricSourceDocker case "ntp": - return MetricSourceNtp + return MetricSourceNTP case "systemd": return MetricSourceSystemd case "helm": @@ -1071,6 +1080,12 @@ func CheckNameToMetricSource(name string) MetricSource { return MetricSourceKubeProxy case "kube_scheduler": return MetricSourceKubeScheduler + case "kubevirt_api": + return MetricSourceKubeVirtAPI + case "kubevirt_controller": + return MetricSourceKubeVirtController + case "kubevirt_handler": + return MetricSourceKubeVirtHandler case "kubelet": return MetricSourceKubelet case "kubernetes_state": diff --git a/pkg/serializer/internal/metrics/origin_mapping.go b/pkg/serializer/internal/metrics/origin_mapping.go index 95fd26b258e8c..6b64e3e602078 100644 --- a/pkg/serializer/internal/metrics/origin_mapping.go +++ b/pkg/serializer/internal/metrics/origin_mapping.go @@ -40,7 +40,7 @@ func metricSourceToOriginCategory(ms metrics.MetricSource) int32 { metrics.MetricSourceContainerd, metrics.MetricSourceCri, metrics.MetricSourceDocker, - metrics.MetricSourceNtp, + metrics.MetricSourceNTP, metrics.MetricSourceSystemd, metrics.MetricSourceHelm, metrics.MetricSourceKubeflow, @@ -64,6 +64,9 @@ func metricSourceToOriginCategory(ms metrics.MetricSource) int32 { metrics.MetricSourceDisk, metrics.MetricSourceNetwork, metrics.MetricSourceSnmp, + // Plugins and non-checks + metrics.MetricSourceCloudFoundry, + metrics.MetricSourceJenkins, // Python Checks metrics.MetricSourceZenohRouter, metrics.MetricSourceZabbix, @@ -148,6 +151,9 @@ func metricSourceToOriginCategory(ms metrics.MetricSource) int32 { metrics.MetricSourceRay, metrics.MetricSourceNvidiaTriton, metrics.MetricSourceKarpenter, + metrics.MetricSourceKubeVirtAPI, + metrics.MetricSourceKubeVirtController, + metrics.MetricSourceKubeVirtHandler, metrics.MetricSourceFluxcd, metrics.MetricSourceEsxi, metrics.MetricSourceDcgm, @@ -365,6 +371,8 @@ func metricSourceToOriginService(ms metrics.MetricSource) int32 { return 36 case metrics.MetricSourceClickhouse: return 37 + case metrics.MetricSourceCloudFoundry: + return 440 case metrics.MetricSourceCloudFoundryAPI: return 38 case metrics.MetricSourceCockroachdb: @@ -463,6 +471,8 @@ func metricSourceToOriginService(ms metrics.MetricSource) int32 { return 86 case metrics.MetricSourceJbossWildfly: return 87 + case metrics.MetricSourceJenkins: + return 436 case metrics.MetricSourceKafkaConsumer: return 89 case metrics.MetricSourceKafka: @@ -487,6 +497,12 @@ func metricSourceToOriginService(ms metrics.MetricSource) int32 { return 98 case metrics.MetricSourceKubernetesState: return 99 + case metrics.MetricSourceKubeVirtAPI: + return 437 + case metrics.MetricSourceKubeVirtController: + return 438 + case metrics.MetricSourceKubeVirtHandler: + return 439 case metrics.MetricSourceKyototycoon: return 100 case metrics.MetricSourceLighttpd: @@ -651,7 +667,7 @@ func metricSourceToOriginService(ms metrics.MetricSource) int32 { return 182 case metrics.MetricSourceDocker: return 183 - case metrics.MetricSourceNtp: + case metrics.MetricSourceNTP: return 184 case metrics.MetricSourceSystemd: return 185 diff --git a/releasenotes/notes/add-platform-integrations-metrics-origins-q4-3278d0ead5015daf.yaml b/releasenotes/notes/add-platform-integrations-metrics-origins-q4-3278d0ead5015daf.yaml new file mode 100644 index 0000000000000..5ea9260a42a85 --- /dev/null +++ b/releasenotes/notes/add-platform-integrations-metrics-origins-q4-3278d0ead5015daf.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +other: + - | + Add metric origins for Platform Integrations: Cloud Foundry, Jenkins, KubeVirt API, KubeVirt Controller, and KubeVirt Handler. \ No newline at end of file From 90e7b919ad017c84f751b2dbb8ea1d2b5e4ebe0b Mon Sep 17 00:00:00 2001 From: Guy Arbitman Date: Tue, 10 Dec 2024 19:56:18 +0200 Subject: [PATCH 099/303] usm: sowatcher: Extend paths support up to 220 characters (#31975) --- pkg/network/ebpf/c/shared-libraries/types.h | 2 +- .../usm/sharedlibraries/types_linux.go | 4 +- .../usm/sharedlibraries/watcher_test.go | 47 +++++++++++++++++++ 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/pkg/network/ebpf/c/shared-libraries/types.h b/pkg/network/ebpf/c/shared-libraries/types.h index 3a4fe97bbc88e..ea2159d5d07eb 100644 --- a/pkg/network/ebpf/c/shared-libraries/types.h +++ b/pkg/network/ebpf/c/shared-libraries/types.h @@ -4,7 +4,7 @@ #include "ktypes.h" #define LIB_SO_SUFFIX_SIZE 9 -#define LIB_PATH_MAX_SIZE 120 +#define LIB_PATH_MAX_SIZE 220 typedef struct { __u32 pid; diff --git a/pkg/network/usm/sharedlibraries/types_linux.go b/pkg/network/usm/sharedlibraries/types_linux.go index 3240185a07632..6b52394ef4c37 100644 --- a/pkg/network/usm/sharedlibraries/types_linux.go +++ b/pkg/network/usm/sharedlibraries/types_linux.go @@ -6,9 +6,9 @@ package sharedlibraries type LibPath struct { Pid uint32 Len uint32 - Buf [120]byte + Buf [220]byte } const ( - LibPathMaxSize = 0x78 + LibPathMaxSize = 0xdc ) diff --git a/pkg/network/usm/sharedlibraries/watcher_test.go b/pkg/network/usm/sharedlibraries/watcher_test.go index 7af5b82782fe3..8c9864a91af8f 100644 --- a/pkg/network/usm/sharedlibraries/watcher_test.go +++ b/pkg/network/usm/sharedlibraries/watcher_test.go @@ -104,6 +104,53 @@ func (s *SharedLibrarySuite) TestSharedLibraryDetection() { }, time.Second*10, 100*time.Millisecond) } +func (s *SharedLibrarySuite) TestLongPath() { + t := s.T() + + const ( + fileName = "foo-libssl.so" + nullTerminatorLength = len("\x00") + ) + padLength := LibPathMaxSize - len(fileName) - len(t.TempDir()) - len("_") - len(string(filepath.Separator)) - nullTerminatorLength + fooPath1, fooPathID1 := createTempTestFile(t, strings.Repeat("a", padLength)+"_"+fileName) + // fooPath2 is longer than the limit we have, thus it will be ignored. + fooPath2, fooPathID2 := createTempTestFile(t, strings.Repeat("a", padLength+1)+"_"+fileName) + + registerRecorder := new(utils.CallbackRecorder) + unregisterRecorder := new(utils.CallbackRecorder) + + watcher, err := NewWatcher(utils.NewUSMEmptyConfig(), LibsetCrypto, + Rule{ + Re: regexp.MustCompile(`foo-libssl.so`), + RegisterCB: registerRecorder.Callback(), + UnregisterCB: unregisterRecorder.Callback(), + }, + ) + require.NoError(t, err) + watcher.Start() + t.Cleanup(watcher.Stop) + + // create files + command1, err := fileopener.OpenFromAnotherProcess(t, fooPath1) + require.NoError(t, err) + + command2, err := fileopener.OpenFromAnotherProcess(t, fooPath2) + require.NoError(t, err) + + require.Eventuallyf(t, func() bool { + return registerRecorder.CallsForPathID(fooPathID1) == 1 && + registerRecorder.CallsForPathID(fooPathID2) == 0 + }, time.Second*10, 100*time.Millisecond, "") + + require.NoError(t, command1.Process.Kill()) + require.NoError(t, command2.Process.Kill()) + + require.Eventually(t, func() bool { + return unregisterRecorder.CallsForPathID(fooPathID1) == 1 && + unregisterRecorder.CallsForPathID(fooPathID2) == 0 + }, time.Second*10, 100*time.Millisecond) +} + func (s *SharedLibrarySuite) TestSharedLibraryDetectionWithPIDAndRootNamespace() { t := s.T() _, err := os.Stat("/usr/bin/busybox") From ea648f38c679860629c00e9ccc465fcb4593279c Mon Sep 17 00:00:00 2001 From: Gustavo Caso Date: Tue, 10 Dec 2024 19:00:26 +0100 Subject: [PATCH 100/303] [ASCII-2567] propagate the tagger component when building the OTLP pipeline for serverless-init (#31576) --- cmd/serverless-init/main.go | 6 +++--- cmd/serverless/main.go | 6 +++--- pkg/serverless/otlp/otlp.go | 5 +++-- pkg/serverless/otlp/otlp_no_otlp.go | 7 +++++-- pkg/serverless/otlp/otlp_test.go | 6 ++++-- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/cmd/serverless-init/main.go b/cmd/serverless-init/main.go index 1b5242fa41e21..b4e2076350ff5 100644 --- a/cmd/serverless-init/main.go +++ b/cmd/serverless-init/main.go @@ -146,7 +146,7 @@ func setup(_ mode.Conf, tagger tagger.Component) (cloudservice.CloudService, *se metricAgent := setupMetricAgent(tags, tagger) metric.AddColdStartMetric(prefix, metricAgent.GetExtraTags(), time.Now(), metricAgent.Demux) - setupOtlpAgent(metricAgent) + setupOtlpAgent(metricAgent, tagger) go flushMetricsAgent(metricAgent) return cloudService, agentLogConfig, traceAgent, metricAgent, logsAgent @@ -200,12 +200,12 @@ func setupMetricAgent(tags map[string]string, tagger tagger.Component) *metrics. return metricAgent } -func setupOtlpAgent(metricAgent *metrics.ServerlessMetricAgent) { +func setupOtlpAgent(metricAgent *metrics.ServerlessMetricAgent, tagger tagger.Component) { if !otlp.IsEnabled() { log.Debugf("otlp endpoint disabled") return } - otlpAgent := otlp.NewServerlessOTLPAgent(metricAgent.Demux.Serializer()) + otlpAgent := otlp.NewServerlessOTLPAgent(metricAgent.Demux.Serializer(), tagger) otlpAgent.Start() } diff --git a/cmd/serverless/main.go b/cmd/serverless/main.go index 77f46c01fded4..a679ceef10181 100644 --- a/cmd/serverless/main.go +++ b/cmd/serverless/main.go @@ -124,7 +124,7 @@ func runAgent(tagger tagger.Component) { wg.Add(3) go startTraceAgent(&wg, lambdaSpanChan, coldStartSpanId, serverlessDaemon, tagger, rcService) - go startOtlpAgent(&wg, metricAgent, serverlessDaemon) + go startOtlpAgent(&wg, metricAgent, serverlessDaemon, tagger) go startTelemetryCollection(&wg, serverlessID, logChannel, serverlessDaemon, tagger) // start appsec @@ -330,13 +330,13 @@ func startTelemetryCollection(wg *sync.WaitGroup, serverlessID registration.ID, } } -func startOtlpAgent(wg *sync.WaitGroup, metricAgent *metrics.ServerlessMetricAgent, serverlessDaemon *daemon.Daemon) { +func startOtlpAgent(wg *sync.WaitGroup, metricAgent *metrics.ServerlessMetricAgent, serverlessDaemon *daemon.Daemon, tagger tagger.Component) { defer wg.Done() if !otlp.IsEnabled() { log.Debug("otlp endpoint disabled") return } - otlpAgent := otlp.NewServerlessOTLPAgent(metricAgent.Demux.Serializer()) + otlpAgent := otlp.NewServerlessOTLPAgent(metricAgent.Demux.Serializer(), tagger) otlpAgent.Start() serverlessDaemon.SetOTLPAgent(otlpAgent) diff --git a/pkg/serverless/otlp/otlp.go b/pkg/serverless/otlp/otlp.go index 0efb26bb4f23c..19f7c7847111e 100644 --- a/pkg/serverless/otlp/otlp.go +++ b/pkg/serverless/otlp/otlp.go @@ -15,6 +15,7 @@ import ( "go.opentelemetry.io/collector/otelcol" + tagger "github.com/DataDog/datadog-agent/comp/core/tagger/def" coreOtlp "github.com/DataDog/datadog-agent/comp/otelcol/otlp" "github.com/DataDog/datadog-agent/comp/otelcol/otlp/configcheck" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" @@ -29,8 +30,8 @@ type ServerlessOTLPAgent struct { // NewServerlessOTLPAgent creates a new ServerlessOTLPAgent with the correct // otel pipeline. -func NewServerlessOTLPAgent(serializer serializer.MetricSerializer) *ServerlessOTLPAgent { - pipeline, err := coreOtlp.NewPipelineFromAgentConfig(pkgconfigsetup.Datadog(), serializer, nil, nil) +func NewServerlessOTLPAgent(serializer serializer.MetricSerializer, tagger tagger.Component) *ServerlessOTLPAgent { + pipeline, err := coreOtlp.NewPipelineFromAgentConfig(pkgconfigsetup.Datadog(), serializer, nil, tagger) if err != nil { log.Error("Error creating new otlp pipeline:", err) return nil diff --git a/pkg/serverless/otlp/otlp_no_otlp.go b/pkg/serverless/otlp/otlp_no_otlp.go index 761639bed48b0..fe953d1a75543 100644 --- a/pkg/serverless/otlp/otlp_no_otlp.go +++ b/pkg/serverless/otlp/otlp_no_otlp.go @@ -8,13 +8,16 @@ //nolint:revive // TODO(SERV) Fix revive linter package otlp -import "github.com/DataDog/datadog-agent/pkg/serializer" +import ( + tagger "github.com/DataDog/datadog-agent/comp/core/tagger/def" + "github.com/DataDog/datadog-agent/pkg/serializer" +) //nolint:revive // TODO(SERV) Fix revive linter type ServerlessOTLPAgent struct{} //nolint:revive // TODO(SERV) Fix revive linter -func NewServerlessOTLPAgent(serializer.MetricSerializer) *ServerlessOTLPAgent { +func NewServerlessOTLPAgent(serializer.MetricSerializer, tagger.Component) *ServerlessOTLPAgent { return nil } diff --git a/pkg/serverless/otlp/otlp_test.go b/pkg/serverless/otlp/otlp_test.go index b7851f4488e14..e7481a198b433 100644 --- a/pkg/serverless/otlp/otlp_test.go +++ b/pkg/serverless/otlp/otlp_test.go @@ -21,11 +21,13 @@ import ( "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp" sdktrace "go.opentelemetry.io/otel/sdk/trace" + "github.com/stretchr/testify/assert" + + taggernoop "github.com/DataDog/datadog-agent/comp/core/tagger/impl-noop" pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo/trace" "github.com/DataDog/datadog-agent/pkg/serverless/metrics" "github.com/DataDog/datadog-agent/pkg/serverless/trace" "github.com/DataDog/datadog-agent/pkg/trace/testutil" - "github.com/stretchr/testify/assert" ) func TestMain(m *testing.M) { @@ -84,7 +86,7 @@ func TestServerlessOTLPAgentReceivesTraces(t *testing.T) { assert.True(metricAgent.IsReady()) // setup otlp agent - otlpAgent := NewServerlessOTLPAgent(metricAgent.Demux.Serializer()) + otlpAgent := NewServerlessOTLPAgent(metricAgent.Demux.Serializer(), taggernoop.NewComponent()) otlpAgent.Start() defer otlpAgent.Stop() assert.NotNil(otlpAgent.pipeline) From 5b42c82d5d690ac4f4c4ad861ee9bd8a0adaf58f Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Tue, 10 Dec 2024 19:32:55 +0100 Subject: [PATCH 101/303] [ASCII-2588] Increase configsync test timeout to avoid flakiness on slow runners (#31881) --- comp/core/configsync/configsyncimpl/sync_integration_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/comp/core/configsync/configsyncimpl/sync_integration_test.go b/comp/core/configsync/configsyncimpl/sync_integration_test.go index 50c7e3680ed0d..91b615bb53493 100644 --- a/comp/core/configsync/configsyncimpl/sync_integration_test.go +++ b/comp/core/configsync/configsyncimpl/sync_integration_test.go @@ -38,7 +38,7 @@ func TestRunWithChan(t *testing.T) { ch := make(chan time.Time, 1) ch <- time.Now() - time.AfterFunc(100*time.Millisecond, cancel) + time.AfterFunc(500*time.Millisecond, cancel) cs.runWithChan(ch) require.True(t, called) From e58c70ea4f5cb2a4f9710e79f9766f109e29eedb Mon Sep 17 00:00:00 2001 From: "John L. Peterson (Jack)" Date: Tue, 10 Dec 2024 13:39:16 -0500 Subject: [PATCH 102/303] Update OTel Collector dependencies to v0.115.0 (#31900) Co-authored-by: github-actions[bot] --- LICENSE-3rdparty.csv | 6 +- comp/otelcol/collector-contrib/def/go.mod | 70 +- comp/otelcol/collector-contrib/def/go.sum | 188 +++--- .../collector-contrib/impl/components.go | 106 +-- comp/otelcol/collector-contrib/impl/go.mod | 271 ++++---- comp/otelcol/collector-contrib/impl/go.sum | 613 +++++++++--------- .../collector-contrib/impl/manifest.yaml | 84 +-- comp/otelcol/collector/impl/collector.go | 2 +- comp/otelcol/converter/def/go.mod | 3 +- comp/otelcol/converter/def/go.sum | 4 +- comp/otelcol/converter/impl/go.mod | 12 +- comp/otelcol/converter/impl/go.sum | 24 +- comp/otelcol/ddflareextension/def/go.mod | 9 +- comp/otelcol/ddflareextension/def/go.sum | 16 +- comp/otelcol/ddflareextension/impl/go.mod | 160 ++--- comp/otelcol/ddflareextension/impl/go.sum | 378 +++++------ .../simple-dd/config-enhanced-result.yaml | 1 + .../simple-dd/config-provided-result.yaml | 1 + .../exporter/datadogexporter/go.mod | 68 +- .../exporter/datadogexporter/go.sum | 178 ++--- .../exporter/logsagentexporter/go.mod | 42 +- .../exporter/logsagentexporter/go.sum | 92 +-- .../exporter/serializerexporter/go.mod | 68 +- .../exporter/serializerexporter/go.sum | 154 ++--- .../processor/infraattributesprocessor/go.mod | 32 +- .../processor/infraattributesprocessor/go.sum | 64 +- .../otlp/components/statsprocessor/go.mod | 10 +- .../otlp/components/statsprocessor/go.sum | 68 +- comp/otelcol/otlp/testutil/go.mod | 2 +- comp/otelcol/otlp/testutil/go.sum | 4 +- comp/trace/agent/def/go.mod | 10 +- comp/trace/agent/def/go.sum | 20 +- go.mod | 245 +++---- go.sum | 528 +++++++-------- pkg/trace/go.mod | 34 +- pkg/trace/go.sum | 172 ++--- pkg/trace/stats/oteltest/go.mod | 10 +- pkg/trace/stats/oteltest/go.sum | 68 +- tasks/collector.py | 4 +- .../awscontainerinsightreceiver_manifest.yaml | 10 +- .../collector/datadogconnector_manifest.yaml | 10 +- .../collector/datadogexporter_manifest.yaml | 10 +- .../healthcheckextension_manifest.yaml | 6 +- .../mismatched_versions_manifest.yaml | 8 +- .../collector/pprofextension_manifest.yaml | 6 +- .../prometheusreceiver_manifest.yaml | 6 +- .../collector/valid_datadog_manifest.yaml | 76 +-- ...id_manifest_without_specified_version.yaml | 8 +- .../collector/zpagesextension_manifest.yaml | 6 +- test/new-e2e/go.mod | 14 +- test/new-e2e/go.sum | 28 +- .../testdata/minimal-full-config.yml | 1 + .../testdata/minimal-provided-config.yml | 1 + test/otel/go.mod | 50 +- test/otel/go.sum | 170 ++--- test/otel/testdata/builder-config.yaml | 97 +-- 56 files changed, 2175 insertions(+), 2153 deletions(-) diff --git a/LICENSE-3rdparty.csv b/LICENSE-3rdparty.csv index 6f885b06c7a9f..8c766a337eb1c 100644 --- a/LICENSE-3rdparty.csv +++ b/LICENSE-3rdparty.csv @@ -2436,12 +2436,12 @@ core,go.opentelemetry.io/collector/pdata/internal,Apache-2.0,Copyright The OpenT core,go.opentelemetry.io/collector/pdata/internal/data,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal/data/protogen/collector/logs/v1,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal/data/protogen/collector/metrics/v1,Apache-2.0,Copyright The OpenTelemetry Authors -core,go.opentelemetry.io/collector/pdata/internal/data/protogen/collector/profiles/v1experimental,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/pdata/internal/data/protogen/collector/profiles/v1development,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal/data/protogen/collector/trace/v1,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal/data/protogen/common/v1,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal/data/protogen/logs/v1,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal/data/protogen/metrics/v1,Apache-2.0,Copyright The OpenTelemetry Authors -core,go.opentelemetry.io/collector/pdata/internal/data/protogen/profiles/v1experimental,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/pdata/internal/data/protogen/profiles/v1development,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal/data/protogen/resource/v1,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal/data/protogen/trace/v1,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal/json,Apache-2.0,Copyright The OpenTelemetry Authors @@ -2488,6 +2488,8 @@ core,go.opentelemetry.io/collector/receiver/receivertest,Apache-2.0,Copyright Th core,go.opentelemetry.io/collector/receiver/scrapererror,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/receiver/scraperhelper,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/receiver/scraperhelper/internal/metadata,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/scraper,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/scraper/scrapererror,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/semconv/v1.16.0,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/semconv/v1.17.0,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/semconv/v1.18.0,Apache-2.0,Copyright The OpenTelemetry Authors diff --git a/comp/otelcol/collector-contrib/def/go.mod b/comp/otelcol/collector-contrib/def/go.mod index e1998d2b7c5d4..b4b92cf6fe357 100644 --- a/comp/otelcol/collector-contrib/def/go.mod +++ b/comp/otelcol/collector-contrib/def/go.mod @@ -2,21 +2,21 @@ module github.com/DataDog/datadog-agent/comp/otelcol/collector-contrib/def go 1.22.0 -require go.opentelemetry.io/collector/otelcol v0.114.0 +require go.opentelemetry.io/collector/otelcol v0.115.0 require ( - go.opentelemetry.io/collector/component/componenttest v0.114.0 // indirect - go.opentelemetry.io/collector/extension/extensiontest v0.114.0 // indirect + go.opentelemetry.io/collector/component/componenttest v0.115.0 // indirect + go.opentelemetry.io/collector/extension/extensiontest v0.115.0 // indirect ) require ( - go.opentelemetry.io/collector/connector/connectortest v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumererror v0.114.0 // indirect - go.opentelemetry.io/collector/exporter/exportertest v0.114.0 // indirect - go.opentelemetry.io/collector/internal/fanoutconsumer v0.114.0 // indirect - go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/processor/processortest v0.114.0 // indirect - go.opentelemetry.io/collector/receiver/receivertest v0.114.0 // indirect + go.opentelemetry.io/collector/connector/connectortest v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumererror v0.115.0 // indirect + go.opentelemetry.io/collector/exporter/exportertest v0.115.0 // indirect + go.opentelemetry.io/collector/internal/fanoutconsumer v0.115.0 // indirect + go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/processor/processortest v0.115.0 // indirect + go.opentelemetry.io/collector/receiver/receivertest v0.115.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.6.0 // indirect ) @@ -53,37 +53,37 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.60.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/shirou/gopsutil/v4 v4.24.10 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/cobra v1.8.1 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/testify v1.10.0 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - go.opentelemetry.io/collector/component v0.114.0 // indirect - go.opentelemetry.io/collector/component/componentstatus v0.114.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.114.0 // indirect - go.opentelemetry.io/collector/confmap v1.20.0 // indirect - go.opentelemetry.io/collector/connector v0.114.0 // indirect - go.opentelemetry.io/collector/connector/connectorprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/consumer v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumertest v0.114.0 // indirect - go.opentelemetry.io/collector/exporter v0.114.0 // indirect - go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/extension v0.114.0 // indirect - go.opentelemetry.io/collector/extension/extensioncapabilities v0.114.0 // indirect - go.opentelemetry.io/collector/featuregate v1.20.0 // indirect - go.opentelemetry.io/collector/pdata v1.20.0 // indirect - go.opentelemetry.io/collector/pdata/pprofile v0.114.0 // indirect - go.opentelemetry.io/collector/pdata/testdata v0.114.0 // indirect - go.opentelemetry.io/collector/pipeline v0.114.0 // indirect - go.opentelemetry.io/collector/processor v0.114.0 // indirect - go.opentelemetry.io/collector/processor/processorprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/receiver v0.114.0 // indirect - go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/semconv v0.114.0 // indirect - go.opentelemetry.io/collector/service v0.114.0 // indirect + go.opentelemetry.io/collector/component v0.115.0 // indirect + go.opentelemetry.io/collector/component/componentstatus v0.115.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.115.0 // indirect + go.opentelemetry.io/collector/confmap v1.21.0 // indirect + go.opentelemetry.io/collector/connector v0.115.0 // indirect + go.opentelemetry.io/collector/connector/connectorprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/consumer v1.21.0 // indirect + go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumertest v0.115.0 // indirect + go.opentelemetry.io/collector/exporter v0.115.0 // indirect + go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/extension v0.115.0 // indirect + go.opentelemetry.io/collector/extension/extensioncapabilities v0.115.0 // indirect + go.opentelemetry.io/collector/featuregate v1.21.0 // indirect + go.opentelemetry.io/collector/pdata v1.21.0 // indirect + go.opentelemetry.io/collector/pdata/pprofile v0.115.0 // indirect + go.opentelemetry.io/collector/pdata/testdata v0.115.0 // indirect + go.opentelemetry.io/collector/pipeline v0.115.0 // indirect + go.opentelemetry.io/collector/processor v0.115.0 // indirect + go.opentelemetry.io/collector/processor/processorprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/receiver v0.115.0 // indirect + go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/semconv v0.115.0 // indirect + go.opentelemetry.io/collector/service v0.115.0 // indirect go.opentelemetry.io/contrib/config v0.10.0 // indirect go.opentelemetry.io/contrib/propagators/b3 v1.31.0 // indirect go.opentelemetry.io/otel v1.32.0 // indirect diff --git a/comp/otelcol/collector-contrib/def/go.sum b/comp/otelcol/collector-contrib/def/go.sum index 85afb038b26d8..b0340b1c9c43d 100644 --- a/comp/otelcol/collector-contrib/def/go.sum +++ b/comp/otelcol/collector-contrib/def/go.sum @@ -92,8 +92,8 @@ github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWN github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v4 v4.24.10 h1:7VOzPtfw/5YDU+jLEoBwXwxJbQetULywoSV4RYY7HkM= -github.com/shirou/gopsutil/v4 v4.24.10/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -110,98 +110,98 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.opentelemetry.io/collector v0.114.0 h1:XLLLOHns06P9XjVHyp0OdEMdwXvol5MLzugqQMmXYuU= -go.opentelemetry.io/collector v0.114.0/go.mod h1:XbjD4Yw9LunLo3IJu3ZZytNZ0drEVznxw1Z14Ujlw3s= -go.opentelemetry.io/collector/client v1.20.0 h1:o60wPcj5nLtaRenF+1E5p4QXFS3TDL6vHlw+GOon3rg= -go.opentelemetry.io/collector/client v1.20.0/go.mod h1:6aqkszco9FaLWCxyJEVam6PP7cUa8mPRIXeS5eZGj0U= -go.opentelemetry.io/collector/component v0.114.0 h1:SVGbm5LvHGSTEDv7p92oPuBgK5tuiWR82I9+LL4TtBE= -go.opentelemetry.io/collector/component v0.114.0/go.mod h1:MLxtjZ6UVHjDxSdhGLuJfHBHvfl1iT/Y7IaQPD24Eww= -go.opentelemetry.io/collector/component/componentstatus v0.114.0 h1:y9my/xink8KB5lK8zFAjgB2+pEh0QYy5TM972fxZY9w= -go.opentelemetry.io/collector/component/componentstatus v0.114.0/go.mod h1:RIoeCYZpPaae7QLE/1RacqzhHuXBmzRAk9H/EwYtIIs= -go.opentelemetry.io/collector/component/componenttest v0.114.0 h1:GM4FTTlfeXoVm6sZYBHImwlRN8ayh2oAfUhvaFj7Zo8= -go.opentelemetry.io/collector/component/componenttest v0.114.0/go.mod h1:ZZEJMtbJtoVC/3/9R1HzERq+cYQRxuMFQrPCpfZ4Xos= -go.opentelemetry.io/collector/config/configauth v0.114.0 h1:R2sJ6xpsLYGH0yU0vCxotzBYDKR/Hrjv0A7y9lwMyiw= -go.opentelemetry.io/collector/config/configauth v0.114.0/go.mod h1:3Z24KcCpG+WYCeQYfs/cNp5cP2BDeOqLCtOEgs/rPqM= -go.opentelemetry.io/collector/config/configcompression v1.20.0 h1:H/mvz7J/5z+O74YsO0t2tk+REnO2tzLM8TgIQ4AZ5w0= -go.opentelemetry.io/collector/config/configcompression v1.20.0/go.mod h1:pnxkFCLUZLKWzYJvfSwZnPrnm0twX14CYj2ADth5xiU= -go.opentelemetry.io/collector/config/confighttp v0.114.0 h1:DjGsBvVm+mGK3IpJBaXianWhwcxEC1fF33cpuC1LY/I= -go.opentelemetry.io/collector/config/confighttp v0.114.0/go.mod h1:nrlNLxOZ+4JQaV9j0TiqQV7LOHhrRivPrT8nQRHED3Q= -go.opentelemetry.io/collector/config/configopaque v1.20.0 h1:2I48zKiyyyYqjm7y0B9OLp24ku2ZSX3nCHG0r5FdWOQ= -go.opentelemetry.io/collector/config/configopaque v1.20.0/go.mod h1:6zlLIyOoRpJJ+0bEKrlZOZon3rOp5Jrz9fMdR4twOS4= -go.opentelemetry.io/collector/config/configretry v1.20.0 h1:z679mrMlW2a6tOOYPGdrS/QfALxdzWLQUOpH8Uu+D5Y= -go.opentelemetry.io/collector/config/configretry v1.20.0/go.mod h1:KvQF5cfphq1rQm1dKR4eLDNQYw6iI2fY72NMZVa+0N0= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0 h1:kjLeyrumge6wsX6ZIkicdNOlBXaEyW2PI2ZdVXz/rzY= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0/go.mod h1:R0MBUxjSMVMIhljuDHWIygzzJWQyZHXXWIgQNxcFwhc= -go.opentelemetry.io/collector/config/configtls v1.20.0 h1:hNlJdwfyY5Qe54RLJ41lfLqKTn9ypkR7sk7JNCcSe2U= -go.opentelemetry.io/collector/config/configtls v1.20.0/go.mod h1:sav/txSHguadTYlSSK+BJO2ljJeYEtRoBahgzWAguYg= -go.opentelemetry.io/collector/config/internal v0.114.0 h1:uWSDWTJb8T6xRjKD9/XmEARakXnxgYVYKUeId78hErc= -go.opentelemetry.io/collector/config/internal v0.114.0/go.mod h1:yC7E4h1Uj0SubxcFImh6OvBHFTjMh99+A5PuyIgDWqc= -go.opentelemetry.io/collector/confmap v1.20.0 h1:ARfOwmkKxFOud1njl03yAHQ30+uenlzqCO6LBYamDTE= -go.opentelemetry.io/collector/confmap v1.20.0/go.mod h1:DMpd9Ay/ffls3JoQBQ73vWeRsz1rNuLbwjo6WtjSQus= -go.opentelemetry.io/collector/connector v0.114.0 h1:efGAeTCtg8zp5Hyd7Am8kBUgsSxWEFlFtAu4OX4mcEA= -go.opentelemetry.io/collector/connector v0.114.0/go.mod h1:8DhGgD8RhkF0ooELl4NOPPD/wgHuXHmY7g90RwJ2eNo= -go.opentelemetry.io/collector/connector/connectorprofiles v0.114.0 h1:uVs9gy3UfQBmH0636ouIbGIoWis7zmKN+ny4XOGm36U= -go.opentelemetry.io/collector/connector/connectorprofiles v0.114.0/go.mod h1:X681qFEAsEPMDQ0pMsD/3DqePw58sfLew1QbBKvGnmw= -go.opentelemetry.io/collector/connector/connectortest v0.114.0 h1:Fpy1JHyNOLdVzNcmxUY6Jwxdz6JDcTXL1NCfw8k1AOc= -go.opentelemetry.io/collector/connector/connectortest v0.114.0/go.mod h1:1zaAlODuL9iNyfyjHQeGCpbcaUjf5b68t8LqlwHKBNA= -go.opentelemetry.io/collector/consumer v0.114.0 h1:1zVaHvfIZowGwZRitRBRo3i+RP2StlU+GClYiofSw0Q= -go.opentelemetry.io/collector/consumer v0.114.0/go.mod h1:d+Mrzt9hsH1ub3zmwSlnQVPLeTYir4Mgo7CrWfnncN4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0 h1:r2YiELfWerb40FHD23V04gNjIkLUcjEKGxI4Vtm2iO4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0/go.mod h1:MzIrLQ5jptO2egypolhlAbZsWZr29WC4FhSxQjnxcvg= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 h1:5pXYy3E6UK5Huu3aQbsYL8B6E6MyWx4fvXXDn+oXZaA= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0/go.mod h1:PMq3f54KcJQO4v1tue0QxQScu7REFVADlXxXSAYMiN0= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0 h1:isaTwJK5DOy8Bs7GuLq23ejfgj8gLIo5dOUvkRnLF4g= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0/go.mod h1:GNeLPkfRPdh06n/Rv1UKa/cAtCKjN0a7ADyHjIj4HFE= -go.opentelemetry.io/collector/exporter v0.114.0 h1:5/0BBpXuCJQSQ5SQf31g7j6T4XEKkyx9mZMcA2rS5e8= -go.opentelemetry.io/collector/exporter v0.114.0/go.mod h1:atpd0wWXgh5LAZ0REU/d/Ti/q50HDfnlBIjMjJQlKFg= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0 h1:/wmWOSBHcvtz3Pbv7+rWCqPPQuNvYaoidKKaOqZsLKs= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0/go.mod h1:epRYTkyJZTSQZBJflMGHUyUo2EdLPhsaZEyo5Qm848A= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0 h1:vo0idBJT+QACSM1KpjVLm9VeiXVwO7y4UnMpGxN6EyM= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0/go.mod h1:420ssFrhaphneybstbMeSIiqSRoaBARPgO71O17foaM= -go.opentelemetry.io/collector/extension v0.114.0 h1:9Qb92y8hD2WDC5aMDoj4JNQN+/5BQYJWPUPzLXX+iGw= -go.opentelemetry.io/collector/extension v0.114.0/go.mod h1:Yk2/1ptVgfTr12t+22v93nYJpioP14pURv2YercSzU0= -go.opentelemetry.io/collector/extension/auth v0.114.0 h1:1K2qh4yvG8kKR/sTAobI/rw5VxzPZoKcl3FmC195vvo= -go.opentelemetry.io/collector/extension/auth v0.114.0/go.mod h1:IjtsG+jUVJB0utKF8dAK8pLutRun3aEgASshImzsw/U= -go.opentelemetry.io/collector/extension/experimental/storage v0.114.0 h1:hLyX9UvmY0t6iBnk3CqvyNck2U0QjPACekj7pDRx2hA= -go.opentelemetry.io/collector/extension/experimental/storage v0.114.0/go.mod h1:WqYRQVJjJLE1rm+y/ks1wPdPRGWePEvE1VO07xm2J2k= -go.opentelemetry.io/collector/extension/extensioncapabilities v0.114.0 h1:3OHll7gp5XIu7FVgon+koShPy797nze6EjCDokFUG7w= -go.opentelemetry.io/collector/extension/extensioncapabilities v0.114.0/go.mod h1:f0KdeLmE2jWVBmJ1U4WmfAtz1/tQUErGPfhPLKCQ49U= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0 h1:ibXDms1qrswlvlR6b3d2BeyI8sXUXoFV11yOi9Sop8o= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0/go.mod h1:/bOYmqu5yTDfI1bJZUxFqm8ZtmcodpquebiSxiQxtDY= -go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 h1:JosqAcdWw7IGsURJNR8f17xmaGCQEtKhQt9tM0T/DEg= -go.opentelemetry.io/collector/extension/zpagesextension v0.114.0/go.mod h1:+VO4p2GZvmIMqCVyIfS/U85Xqg+HIOe+mdl/ya+jVTE= -go.opentelemetry.io/collector/featuregate v1.20.0 h1:Mi7nMy/q52eruI+6jWnMKUOeM55XvwoPnGcdB1++O8c= -go.opentelemetry.io/collector/featuregate v1.20.0/go.mod h1:47xrISO71vJ83LSMm8+yIDsUbKktUp48Ovt7RR6VbRs= -go.opentelemetry.io/collector/internal/fanoutconsumer v0.114.0 h1:JM9huYqy5LTzmuxQmbPST3l5Ez5kJNit28c6WFWls34= -go.opentelemetry.io/collector/internal/fanoutconsumer v0.114.0/go.mod h1:V28tDU4Wvf1PfW1Ty/SBL9tpKul2iYGno/HkCWGDrj0= -go.opentelemetry.io/collector/otelcol v0.114.0 h1:d/nmYc+adzZ70g4zBMtgujGHVNulF59ExCpuM/3ZKV4= -go.opentelemetry.io/collector/otelcol v0.114.0/go.mod h1:DGmFFao5jHSwD6G1HjUjs0CYcyrTau+u7GjTRUGKN+4= -go.opentelemetry.io/collector/pdata v1.20.0 h1:ePcwt4bdtISP0loHaE+C9xYoU2ZkIvWv89Fob16o9SM= -go.opentelemetry.io/collector/pdata v1.20.0/go.mod h1:Ox1YVLe87cZDB/TL30i4SUz1cA5s6AM6SpFMfY61ICs= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0 h1:pUNfTzsI/JUTiE+DScDM4lsrPoxnVNLI2fbTxR/oapo= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0/go.mod h1:4aNcj6WM1n1uXyFSXlhVs4ibrERgNYsTbzcYI2zGhxA= -go.opentelemetry.io/collector/pdata/testdata v0.114.0 h1:+AzszWSL1i4K6meQ8rU0JDDW55SYCXa6FVqfDixhhTo= -go.opentelemetry.io/collector/pdata/testdata v0.114.0/go.mod h1:bv8XFdCTZxG2MQB5l9dKxSxf5zBrcodwO6JOy1+AxXM= -go.opentelemetry.io/collector/pipeline v0.114.0 h1:v3YOhc5z0tD6QbO5n/pnftpIeroihM2ks9Z2yKPCcwY= -go.opentelemetry.io/collector/pipeline v0.114.0/go.mod h1:4vOvjVsoYTHVGTbfFwqfnQOSV2K3RKUHofh3jNRc2Mg= -go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.114.0 h1:LZgxMQ2zXcz8ILBefhxpZBpn/Rx+TJTncIIQy0LgtgY= -go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.114.0/go.mod h1:bmyqQCJWcA53/GtqZJ2ahwmLdFl6UelFH2nR6OJFqpw= -go.opentelemetry.io/collector/processor v0.114.0 h1:6bqQgLL7BtKrNv4YkEOGjZfkcfZv/ciJSQx1epGG9Zk= -go.opentelemetry.io/collector/processor v0.114.0/go.mod h1:DV/wa+nAmSHIDeD9NblPwkY9PbgtDQAZJ+PE5biZwPc= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0 h1:+P/1nLouEXTnN8DVQl+qWwO4BTkQyNPG9t/FrpUqrSI= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0/go.mod h1:3fuHeNIpINwx3bqFMprmDJyr6y5tWoWbJH599kltO5Y= -go.opentelemetry.io/collector/processor/processortest v0.114.0 h1:3FTaVXAp0LoVmUJn1ewBFckAby7AHa6/Kcdj0xuW14c= -go.opentelemetry.io/collector/processor/processortest v0.114.0/go.mod h1:OgsdOs1Fv5ZGTTJPF5nNIUJh2YkuV1acWd73yWgnti4= -go.opentelemetry.io/collector/receiver v0.114.0 h1:90SAnXAjNq7/k52/pFmmb06Cf1YauoPYtbio4aOXafY= -go.opentelemetry.io/collector/receiver v0.114.0/go.mod h1:KUGT0/D953LXbGH/D3lLPU8yrU3HfWnUqpt4W4hSOnE= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0 h1:ibhEfGpvNB3yrtpl2jYFabrunMk1hurxvMYpM0b1Ck4= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0/go.mod h1:UZyRfaasw+NLvN10AN8IQnmj5tQ3BOUH1uP2ctpO9f0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0 h1:D+Kh9t2n4asTnM+TiSxbrKlUemLZandWntj17BJWWb0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0/go.mod h1:mNSHQ13vFmqD+VAcRzLjStFBejbcWUn2Mp0pAd7Op+U= -go.opentelemetry.io/collector/semconv v0.114.0 h1:/eKcCJwZepQUtEuFuxa0thx2XIOvhFpaf214ZG1a11k= -go.opentelemetry.io/collector/semconv v0.114.0/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= -go.opentelemetry.io/collector/service v0.114.0 h1:MYF/4nH1CgtiLx09503xPAAUZefCzG1kaO+oanwX590= -go.opentelemetry.io/collector/service v0.114.0/go.mod h1:xH5/RapJdf5Ohh8iU8J0ZstfFYciP1oJPesiByteZxo= +go.opentelemetry.io/collector v0.115.0 h1:qUZ0bTeNBudMxNQ7FJKS//TxTjeJ7tfU/z22mcFavWU= +go.opentelemetry.io/collector v0.115.0/go.mod h1:66qx0xKnVvdwq60e1DEfb4e+zmM9szhPsv2hxZ/Mpj4= +go.opentelemetry.io/collector/client v1.21.0 h1:3Kes8lOFMYVxoxeAmX+DTEAkuS1iTA3NkSfqzGmygJA= +go.opentelemetry.io/collector/client v1.21.0/go.mod h1:jYJGiL0UA975OOyHmjbQSokNWt1OiviI5KjPOMUMGwc= +go.opentelemetry.io/collector/component v0.115.0 h1:iLte1oCiXzjiCnaOBKdsXacfFiECecpWxW3/LeriMoo= +go.opentelemetry.io/collector/component v0.115.0/go.mod h1:oIUFiH7w1eOimdeYhFI+gAIxYSiLDocKVJ0PTvX7d6s= +go.opentelemetry.io/collector/component/componentstatus v0.115.0 h1:pbpUIL+uKDfEiSgKK+S5nuSL6MDIIQYsp4b65ZGVb9M= +go.opentelemetry.io/collector/component/componentstatus v0.115.0/go.mod h1:36A+9XSiOz0Cdhq+UwwPRlEr5CYuSkEnVO9om4BH7d0= +go.opentelemetry.io/collector/component/componenttest v0.115.0 h1:9URDJ9VyP6tuij+YHjp/kSSMecnZOd7oGvzu+rw9SJY= +go.opentelemetry.io/collector/component/componenttest v0.115.0/go.mod h1:PzXvNqKLCiSADZGZFKH+IOHMkaQ0GTHuzysfVbTPKYY= +go.opentelemetry.io/collector/config/configauth v0.115.0 h1:xa+ALdyPgva3rZnLBh1H2oS5MsHP6JxSqMtQmcELnys= +go.opentelemetry.io/collector/config/configauth v0.115.0/go.mod h1:C7anpb3Rf4KswMT+dgOzkW9UX0z/65PLORpUw3p0VYc= +go.opentelemetry.io/collector/config/configcompression v1.21.0 h1:0zbPdZAgPFMAarwJEC4gaR6f/JBP686A3TYSgb3oa+E= +go.opentelemetry.io/collector/config/configcompression v1.21.0/go.mod h1:LvYG00tbPTv0NOLoZN0wXq1F5thcxvukO8INq7xyfWU= +go.opentelemetry.io/collector/config/confighttp v0.115.0 h1:BIy394oNXnqySJwrCqgAJu4gWgAV5aQUDD6k1hy6C8o= +go.opentelemetry.io/collector/config/confighttp v0.115.0/go.mod h1:Wr50ut12NmCEAl4bWLJryw2EjUmJTtYRg89560Q51wc= +go.opentelemetry.io/collector/config/configopaque v1.21.0 h1:PcvRGkBk4Px8BQM7tX+kw4i3jBsfAHGoGQbtZg6Ox7U= +go.opentelemetry.io/collector/config/configopaque v1.21.0/go.mod h1:sW0t0iI/VfRL9VYX7Ik6XzVgPcR+Y5kejTLsYcMyDWs= +go.opentelemetry.io/collector/config/configretry v1.21.0 h1:ZHoOvAkEcv5BBeaJn8IQ6rQ4GMPZWW4S+W7R4QTEbZU= +go.opentelemetry.io/collector/config/configretry v1.21.0/go.mod h1:cleBc9I0DIWpTiiHfu9v83FUaCTqcPXmebpLxjEIqro= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0 h1:U07FinCDop+r2RjWQ3aP9ZWONC7r7kQIp1GkXQi6nsI= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0/go.mod h1:SlBEwQg0qly75rXZ6W1Ig8jN25KBVBkFIIAUI1GiAAE= +go.opentelemetry.io/collector/config/configtls v1.21.0 h1:ZfrlAYgBD8lzp04W0GxwiDmUbrvKsvDYJi+wkyiXlpA= +go.opentelemetry.io/collector/config/configtls v1.21.0/go.mod h1:5EsNefPfVCMOTlOrr3wyj7LrsOgY7V8iqRl8oFZEqtw= +go.opentelemetry.io/collector/config/internal v0.115.0 h1:eVk57iufZpUXyPJFKTb1Ebx5tmcCyroIlt427r5pxS8= +go.opentelemetry.io/collector/config/internal v0.115.0/go.mod h1:OVkadRWlKAoWjHslqjWtBLAne8ceQm8WYT71ZcBWLFc= +go.opentelemetry.io/collector/confmap v1.21.0 h1:1tIcx2/Suwg8VhuPmQw87ba0ludPmumpFCFRZZa6RXA= +go.opentelemetry.io/collector/confmap v1.21.0/go.mod h1:Rrhs+MWoaP6AswZp+ReQ2VO9dfOfcUjdjiSHBsG+nec= +go.opentelemetry.io/collector/connector v0.115.0 h1:4Kkm3HQFzNT1eliMOB8FbIn+PLMRJ2qQku5Vmy3V8Ko= +go.opentelemetry.io/collector/connector v0.115.0/go.mod h1:+ByuAmYLrYHoKh9B+LGqUc0N2kXcN2l8Dea8Mp6brZ8= +go.opentelemetry.io/collector/connector/connectorprofiles v0.115.0 h1:aW1f4Az0I+QJyImFccNWAXqik80bnNu27aQqi2hFfD8= +go.opentelemetry.io/collector/connector/connectorprofiles v0.115.0/go.mod h1:lmynB1CucydOsHa8RSSBh5roUZPfuiv65imXhtNzClM= +go.opentelemetry.io/collector/connector/connectortest v0.115.0 h1:GjtourFr0MJmlbtEPAZ/1BZCxkNAeJ0aMTlrxwftJ0k= +go.opentelemetry.io/collector/connector/connectortest v0.115.0/go.mod h1:f3KQXXNlh/XuV8elmnuVVyfY92dJCAovz10gD72OH0k= +go.opentelemetry.io/collector/consumer v1.21.0 h1:THKZ2Vbi6GkamjTBI2hFq5Dc4kINZTWGwQNa8d/Ty9g= +go.opentelemetry.io/collector/consumer v1.21.0/go.mod h1:FQcC4ThMtRYY41dv+IPNK8POLLhAFY3r1YR5fuP7iiY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0 h1:yli//xBCQMPZKXNgNlXemo4dvqhnFrAmCZ11DvQgmcY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0/go.mod h1:LwVzAvQ6ZVNG7mbOvurbAo+W/rKws0IcjOwriuZXqPE= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 h1:H3fDuyQW1t2HWHkz96WMBQJKUevypOCjBqnqtaAWyoA= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0/go.mod h1:IzEmZ91Tp7TBxVDq8Cc9xvLsmO7H08njr6Pu9P5d9ns= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0 h1:hru0I2447y0TluCdwlKYFFtgcpyCnlM+LiOK1JZyA70= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0/go.mod h1:ybjALRJWR6aKNOzEMy1T1ruCULVDEjj4omtOJMrH/kU= +go.opentelemetry.io/collector/exporter v0.115.0 h1:JnxfpOnsuqhTPKJXVKJLS1Cv3BiVrVLzpHOjJEQw+xw= +go.opentelemetry.io/collector/exporter v0.115.0/go.mod h1:xof3fHQK8wADhaKLIJcQ7ChZaFLNC+haRdPN0wgl6kY= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0 h1:lSQEleCn/q9eFufcuK61NdFKU70ZlgI9dBjPCO/4CrE= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0/go.mod h1:7l5K2AecimX2kx+nZC1gKG3QkP247CO1+SodmJ4fFkQ= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0 h1:P9SMTUXQOtcaq40bGtnnAe14zRmR4/yUgj/Tb2BEf/k= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0/go.mod h1:1jMZ9gFGXglb8wfNrBZIgd+RvpZhSyFwdfE+Jtf9w4U= +go.opentelemetry.io/collector/extension v0.115.0 h1:/cBb8AUdD0KMWC6V3lvCC16eP9Fg0wd1Upcp5rgvuGI= +go.opentelemetry.io/collector/extension v0.115.0/go.mod h1:HI7Ak6loyi6ZrZPsQJW1OO1wbaAW8OqXLFNQlTZnreQ= +go.opentelemetry.io/collector/extension/auth v0.115.0 h1:TTMokbBsSHZRFH48PvGSJmgSS8F3Rkr9MWGHZn8eJDk= +go.opentelemetry.io/collector/extension/auth v0.115.0/go.mod h1:3w+2mzeb2OYNOO4Bi41TUo4jr32ap2y7AOq64IDpxQo= +go.opentelemetry.io/collector/extension/experimental/storage v0.115.0 h1:sZXw0+77092pq24CkUoTRoHQPLQUsDq6HFRNB0g5yR4= +go.opentelemetry.io/collector/extension/experimental/storage v0.115.0/go.mod h1:qjFH7Y3QYYs88By2ZB5GMSUN5k3ul4Brrq2J6lKACA0= +go.opentelemetry.io/collector/extension/extensioncapabilities v0.115.0 h1:/g25Hp5aoCNKdDjIb3Fc7XRglO8yaBRFLO/IUNPnqNI= +go.opentelemetry.io/collector/extension/extensioncapabilities v0.115.0/go.mod h1:EQx7ETiy330O6q05S2KRZsRNDg0aQEeJmVl7Ipx+Fcw= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0 h1:GBVFxFEskR8jSdu9uaQh2qpXnN5VNXhXjpJ2UjxtE8I= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0/go.mod h1:eu1ecbz5mT+cHoH2H3GmD/rOO0WsicSJD2RLrYuOmRA= +go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 h1:zYrZZocc7n0ZuDyXNkIaX0P0qk2fjMQj7NegwBJZA4k= +go.opentelemetry.io/collector/extension/zpagesextension v0.115.0/go.mod h1:OaXwNHF3MAcInBzCXrhXbTNHfIi9b7YGhXjtCFZqxNY= +go.opentelemetry.io/collector/featuregate v1.21.0 h1:+EULHPJDLMipcwAGZVp9Nm8NriRvoBBMxp7MSiIZVMI= +go.opentelemetry.io/collector/featuregate v1.21.0/go.mod h1:3GaXqflNDVwWndNGBJ1+XJFy3Fv/XrFgjMN60N3z7yg= +go.opentelemetry.io/collector/internal/fanoutconsumer v0.115.0 h1:6DRiSECeApFq6Jj5ug77rG53R6FzJEZBfygkyMEXdpg= +go.opentelemetry.io/collector/internal/fanoutconsumer v0.115.0/go.mod h1:vgQf5HQdmLQqpDHpDq2S3nTRoUuKtRcZpRTsy+UiwYw= +go.opentelemetry.io/collector/otelcol v0.115.0 h1:wZhFGrSCZcTQ4qw4ePjI2PaSrOCejoQKAjprKD/xavs= +go.opentelemetry.io/collector/otelcol v0.115.0/go.mod h1:iK8DPvaizirIYKDl1zZG7DDYUj6GkkH4KHifVVM88vk= +go.opentelemetry.io/collector/pdata v1.21.0 h1:PG+UbiFMJ35X/WcAR7Rf/PWmWtRdW0aHlOidsR6c5MA= +go.opentelemetry.io/collector/pdata v1.21.0/go.mod h1:GKb1/zocKJMvxKbS+sl0W85lxhYBTFJ6h6I1tphVyDU= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0 h1:NI89hy13vNDw7EOnQf7Jtitks4HJFO0SUWznTssmP94= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0/go.mod h1:jGzdNfO0XTtfLjXCL/uCC1livg1LlfR+ix2WE/z3RpQ= +go.opentelemetry.io/collector/pdata/testdata v0.115.0 h1:Rblz+AKXdo3fG626jS+KSd0OSA4uMXcTQfpwed6P8LI= +go.opentelemetry.io/collector/pdata/testdata v0.115.0/go.mod h1:inNnRt6S2Nn260EfCBEcjesjlKOSsr0jPwkPqpBkt4s= +go.opentelemetry.io/collector/pipeline v0.115.0 h1:bmACBqb0e8U9ag+vGGHUP7kCfAO7HHROdtzIEg8ulus= +go.opentelemetry.io/collector/pipeline v0.115.0/go.mod h1:qE3DmoB05AW0C3lmPvdxZqd/H4po84NPzd5MrqgtL74= +go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.115.0 h1:3l9ruCAOrssTUDnyChKNzHWOdTtfThnYaoPZ1/+5sD0= +go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.115.0/go.mod h1:2Myg+law/5lcezo9PhhZ0wjCaLYdGK24s1jDWbSW9VY= +go.opentelemetry.io/collector/processor v0.115.0 h1:+fveHGRe24PZPv/F5taahGuZ9HdNW44hgNWEJhIUdyc= +go.opentelemetry.io/collector/processor v0.115.0/go.mod h1:/oLHBlLsm7tFb7zOIrA5C0j14yBtjXKAgxJJ2Bktyk4= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0 h1:cCZAs+FXaebZPppqAN3m+X3etoSBL6NvyQo8l0hOZoo= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0/go.mod h1:kMxF0gknlWX4duuAJFi2/HuIRi6C3w95tOenRa0GKOY= +go.opentelemetry.io/collector/processor/processortest v0.115.0 h1:j9HEaYFOeOB6VYl9zGhBnhQbTkqGBa2udUvu5NTh6hc= +go.opentelemetry.io/collector/processor/processortest v0.115.0/go.mod h1:Gws+VEnp/eW3qAqPpqbKsrbnnxxNfyDjqrfUXbZfZic= +go.opentelemetry.io/collector/receiver v0.115.0 h1:55Q3Jvj6zHCIA1psKqi/3kEMJO4OqUF5tNAEYNdB1U8= +go.opentelemetry.io/collector/receiver v0.115.0/go.mod h1:nBSCh2O/WUcfgpJ+Jpz+B0z0Hn5jHeRvF2WmLij5EIY= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0 h1:R9JLaj2Al93smIPUkbJshAkb/cY0H5JBOxIx+Zu0NG4= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0/go.mod h1:05E5hGujWeeXJmzKZwTdHyZ/+rRyrQlQB5p5Q2XY39M= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0 h1:OiB684SbHQi6/Pd3ZH0cXjYvCpBS9ilQBfTQx0wVXHg= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0/go.mod h1:Y8Z9U/bz9Xpyt8GI8DxZZgryw3mnnIw+AeKVLTD2cP8= +go.opentelemetry.io/collector/semconv v0.115.0 h1:SoqMvg4ZEB3mz2EdAb6XYa+TuMo5Mir5FRBr3nVFUDY= +go.opentelemetry.io/collector/semconv v0.115.0/go.mod h1:N6XE8Q0JKgBN2fAhkUQtqK9LT7rEGR6+Wu/Rtbal1iI= +go.opentelemetry.io/collector/service v0.115.0 h1:k4GAOiI5tZgB2QKgwA6c3TeAVr7QL/ft5cOQbzUr8Iw= +go.opentelemetry.io/collector/service v0.115.0/go.mod h1:DKde9LMhNebdREecDSsqiTFLI2wRc+IoV4/wGxU6goY= go.opentelemetry.io/contrib/bridges/otelzap v0.6.0 h1:j8icMXyyqNf6HGuwlYhniPnVsbJIq7n+WirDu3VAJdQ= go.opentelemetry.io/contrib/bridges/otelzap v0.6.0/go.mod h1:evIOZpl+kAlU5IsaYX2Siw+IbpacAZvXemVsgt70uvw= go.opentelemetry.io/contrib/config v0.10.0 h1:2JknAzMaYjxrHkTnZh3eOme/Y2P5eHE2SWfhfV6Xd6c= diff --git a/comp/otelcol/collector-contrib/impl/components.go b/comp/otelcol/collector-contrib/impl/components.go index c5cdd8d5504c2..82de6f29c43a8 100644 --- a/comp/otelcol/collector-contrib/impl/components.go +++ b/comp/otelcol/collector-contrib/impl/components.go @@ -8,29 +8,15 @@ package collectorcontribimpl import ( - "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/connector" - "go.opentelemetry.io/collector/exporter" - "go.opentelemetry.io/collector/extension" - "go.opentelemetry.io/collector/otelcol" - "go.opentelemetry.io/collector/processor" - "go.opentelemetry.io/collector/receiver" spanmetricsconnector "github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector" - debugexporter "go.opentelemetry.io/collector/exporter/debugexporter" - nopexporter "go.opentelemetry.io/collector/exporter/nopexporter" - otlpexporter "go.opentelemetry.io/collector/exporter/otlpexporter" - otlphttpexporter "go.opentelemetry.io/collector/exporter/otlphttpexporter" sapmexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter" - zpagesextension "go.opentelemetry.io/collector/extension/zpagesextension" healthcheckextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension" - pprofextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension" dockerobserver "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver" ecsobserver "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver" ecstaskobserver "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver" hostobserver "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver" k8sobserver "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver" - batchprocessor "go.opentelemetry.io/collector/processor/batchprocessor" - memorylimiterprocessor "go.opentelemetry.io/collector/processor/memorylimiterprocessor" + pprofextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension" attributesprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor" cumulativetodeltaprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor" filterprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor" @@ -42,8 +28,6 @@ import ( routingprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor" tailsamplingprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor" transformprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor" - nopreceiver "go.opentelemetry.io/collector/receiver/nopreceiver" - otlpreceiver "go.opentelemetry.io/collector/receiver/otlpreceiver" filelogreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver" fluentforwardreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver" hostmetricsreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver" @@ -51,6 +35,22 @@ import ( prometheusreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver" receivercreator "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator" zipkinreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver" + "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/connector" + "go.opentelemetry.io/collector/exporter" + debugexporter "go.opentelemetry.io/collector/exporter/debugexporter" + nopexporter "go.opentelemetry.io/collector/exporter/nopexporter" + otlpexporter "go.opentelemetry.io/collector/exporter/otlpexporter" + otlphttpexporter "go.opentelemetry.io/collector/exporter/otlphttpexporter" + "go.opentelemetry.io/collector/extension" + zpagesextension "go.opentelemetry.io/collector/extension/zpagesextension" + "go.opentelemetry.io/collector/otelcol" + "go.opentelemetry.io/collector/processor" + batchprocessor "go.opentelemetry.io/collector/processor/batchprocessor" + memorylimiterprocessor "go.opentelemetry.io/collector/processor/memorylimiterprocessor" + "go.opentelemetry.io/collector/receiver" + nopreceiver "go.opentelemetry.io/collector/receiver/nopreceiver" + otlpreceiver "go.opentelemetry.io/collector/receiver/otlpreceiver" ) func components() (otelcol.Factories, error) { @@ -71,14 +71,14 @@ func components() (otelcol.Factories, error) { return otelcol.Factories{}, err } factories.ExtensionModules = make(map[component.Type]string, len(factories.Extensions)) - factories.ExtensionModules[zpagesextension.NewFactory().Type()] = "go.opentelemetry.io/collector/extension/zpagesextension v0.114.0" - factories.ExtensionModules[healthcheckextension.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0" - factories.ExtensionModules[pprofextension.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0" - factories.ExtensionModules[dockerobserver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.114.0" - factories.ExtensionModules[ecsobserver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.114.0" - factories.ExtensionModules[ecstaskobserver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.114.0" - factories.ExtensionModules[hostobserver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.114.0" - factories.ExtensionModules[k8sobserver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.114.0" + factories.ExtensionModules[zpagesextension.NewFactory().Type()] = "go.opentelemetry.io/collector/extension/zpagesextension v0.115.0" + factories.ExtensionModules[healthcheckextension.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0" + factories.ExtensionModules[pprofextension.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0" + factories.ExtensionModules[dockerobserver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.115.0" + factories.ExtensionModules[ecsobserver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.115.0" + factories.ExtensionModules[ecstaskobserver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.115.0" + factories.ExtensionModules[hostobserver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.115.0" + factories.ExtensionModules[k8sobserver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.115.0" factories.Receivers, err = receiver.MakeFactoryMap( nopreceiver.NewFactory(), @@ -95,15 +95,15 @@ func components() (otelcol.Factories, error) { return otelcol.Factories{}, err } factories.ReceiverModules = make(map[component.Type]string, len(factories.Receivers)) - factories.ReceiverModules[nopreceiver.NewFactory().Type()] = "go.opentelemetry.io/collector/receiver/nopreceiver v0.114.0" - factories.ReceiverModules[otlpreceiver.NewFactory().Type()] = "go.opentelemetry.io/collector/receiver/otlpreceiver v0.114.0" - factories.ReceiverModules[filelogreceiver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.114.0" - factories.ReceiverModules[fluentforwardreceiver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.114.0" - factories.ReceiverModules[hostmetricsreceiver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.114.0" - factories.ReceiverModules[jaegerreceiver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.114.0" - factories.ReceiverModules[prometheusreceiver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0" - factories.ReceiverModules[receivercreator.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.114.0" - factories.ReceiverModules[zipkinreceiver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.114.0" + factories.ReceiverModules[nopreceiver.NewFactory().Type()] = "go.opentelemetry.io/collector/receiver/nopreceiver v0.115.0" + factories.ReceiverModules[otlpreceiver.NewFactory().Type()] = "go.opentelemetry.io/collector/receiver/otlpreceiver v0.115.0" + factories.ReceiverModules[filelogreceiver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.115.0" + factories.ReceiverModules[fluentforwardreceiver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.115.0" + factories.ReceiverModules[hostmetricsreceiver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.115.0" + factories.ReceiverModules[jaegerreceiver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.115.0" + factories.ReceiverModules[prometheusreceiver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0" + factories.ReceiverModules[receivercreator.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.115.0" + factories.ReceiverModules[zipkinreceiver.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.115.0" factories.Exporters, err = exporter.MakeFactoryMap( debugexporter.NewFactory(), @@ -116,11 +116,11 @@ func components() (otelcol.Factories, error) { return otelcol.Factories{}, err } factories.ExporterModules = make(map[component.Type]string, len(factories.Exporters)) - factories.ExporterModules[debugexporter.NewFactory().Type()] = "go.opentelemetry.io/collector/exporter/debugexporter v0.114.0" - factories.ExporterModules[nopexporter.NewFactory().Type()] = "go.opentelemetry.io/collector/exporter/nopexporter v0.114.0" - factories.ExporterModules[otlpexporter.NewFactory().Type()] = "go.opentelemetry.io/collector/exporter/otlpexporter v0.114.0" - factories.ExporterModules[otlphttpexporter.NewFactory().Type()] = "go.opentelemetry.io/collector/exporter/otlphttpexporter v0.114.0" - factories.ExporterModules[sapmexporter.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.114.0" + factories.ExporterModules[debugexporter.NewFactory().Type()] = "go.opentelemetry.io/collector/exporter/debugexporter v0.115.0" + factories.ExporterModules[nopexporter.NewFactory().Type()] = "go.opentelemetry.io/collector/exporter/nopexporter v0.115.0" + factories.ExporterModules[otlpexporter.NewFactory().Type()] = "go.opentelemetry.io/collector/exporter/otlpexporter v0.115.0" + factories.ExporterModules[otlphttpexporter.NewFactory().Type()] = "go.opentelemetry.io/collector/exporter/otlphttpexporter v0.115.0" + factories.ExporterModules[sapmexporter.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.115.0" factories.Processors, err = processor.MakeFactoryMap( batchprocessor.NewFactory(), @@ -141,19 +141,19 @@ func components() (otelcol.Factories, error) { return otelcol.Factories{}, err } factories.ProcessorModules = make(map[component.Type]string, len(factories.Processors)) - factories.ProcessorModules[batchprocessor.NewFactory().Type()] = "go.opentelemetry.io/collector/processor/batchprocessor v0.114.0" - factories.ProcessorModules[memorylimiterprocessor.NewFactory().Type()] = "go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.114.0" - factories.ProcessorModules[attributesprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.114.0" - factories.ProcessorModules[cumulativetodeltaprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.114.0" - factories.ProcessorModules[filterprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.114.0" - factories.ProcessorModules[groupbyattrsprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.114.0" - factories.ProcessorModules[k8sattributesprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.114.0" - factories.ProcessorModules[probabilisticsamplerprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0" - factories.ProcessorModules[resourcedetectionprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.114.0" - factories.ProcessorModules[resourceprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.114.0" - factories.ProcessorModules[routingprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.114.0" - factories.ProcessorModules[tailsamplingprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.114.0" - factories.ProcessorModules[transformprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.114.0" + factories.ProcessorModules[batchprocessor.NewFactory().Type()] = "go.opentelemetry.io/collector/processor/batchprocessor v0.115.0" + factories.ProcessorModules[memorylimiterprocessor.NewFactory().Type()] = "go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.115.0" + factories.ProcessorModules[attributesprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.115.0" + factories.ProcessorModules[cumulativetodeltaprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.115.0" + factories.ProcessorModules[filterprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.115.0" + factories.ProcessorModules[groupbyattrsprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.115.0" + factories.ProcessorModules[k8sattributesprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.115.0" + factories.ProcessorModules[probabilisticsamplerprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0" + factories.ProcessorModules[resourcedetectionprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.115.0" + factories.ProcessorModules[resourceprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.115.0" + factories.ProcessorModules[routingprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.115.0" + factories.ProcessorModules[tailsamplingprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.115.0" + factories.ProcessorModules[transformprocessor.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.115.0" factories.Connectors, err = connector.MakeFactoryMap( spanmetricsconnector.NewFactory(), @@ -162,7 +162,7 @@ func components() (otelcol.Factories, error) { return otelcol.Factories{}, err } factories.ConnectorModules = make(map[component.Type]string, len(factories.Connectors)) - factories.ConnectorModules[spanmetricsconnector.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.114.0" + factories.ConnectorModules[spanmetricsconnector.NewFactory().Type()] = "github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.115.0" return factories, nil } diff --git a/comp/otelcol/collector-contrib/impl/go.mod b/comp/otelcol/collector-contrib/impl/go.mod index d23c34cd7c2f2..e816b6e25e500 100644 --- a/comp/otelcol/collector-contrib/impl/go.mod +++ b/comp/otelcol/collector-contrib/impl/go.mod @@ -4,60 +4,59 @@ module github.com/DataDog/datadog-agent/comp/otelcol/collector-contrib/impl go 1.22.0 -toolchain go1.22.8 +toolchain go1.23.3 require ( github.com/DataDog/datadog-agent/comp/otelcol/collector-contrib/def v0.0.0-00010101000000-000000000000 - github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.114.0 - go.opentelemetry.io/collector/component v0.114.0 - go.opentelemetry.io/collector/connector v0.114.0 - go.opentelemetry.io/collector/exporter v0.114.0 - go.opentelemetry.io/collector/exporter/debugexporter v0.114.0 - go.opentelemetry.io/collector/exporter/nopexporter v0.114.0 - go.opentelemetry.io/collector/exporter/otlpexporter v0.114.0 - go.opentelemetry.io/collector/exporter/otlphttpexporter v0.114.0 - go.opentelemetry.io/collector/extension v0.114.0 - go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 - go.opentelemetry.io/collector/otelcol v0.114.0 - go.opentelemetry.io/collector/processor v0.114.0 - go.opentelemetry.io/collector/processor/batchprocessor v0.114.0 - go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.114.0 - go.opentelemetry.io/collector/receiver v0.114.0 - go.opentelemetry.io/collector/receiver/nopreceiver v0.114.0 - go.opentelemetry.io/collector/receiver/otlpreceiver v0.114.0 + github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.115.0 + go.opentelemetry.io/collector/component v0.115.0 + go.opentelemetry.io/collector/connector v0.115.0 + go.opentelemetry.io/collector/exporter v0.115.0 + go.opentelemetry.io/collector/exporter/debugexporter v0.115.0 + go.opentelemetry.io/collector/exporter/nopexporter v0.115.0 + go.opentelemetry.io/collector/exporter/otlpexporter v0.115.0 + go.opentelemetry.io/collector/exporter/otlphttpexporter v0.115.0 + go.opentelemetry.io/collector/extension v0.115.0 + go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 + go.opentelemetry.io/collector/otelcol v0.115.0 + go.opentelemetry.io/collector/processor v0.115.0 + go.opentelemetry.io/collector/processor/batchprocessor v0.115.0 + go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.115.0 + go.opentelemetry.io/collector/receiver v0.115.0 + go.opentelemetry.io/collector/receiver/nopreceiver v0.115.0 + go.opentelemetry.io/collector/receiver/otlpreceiver v0.115.0 ) require ( - cloud.google.com/go/auth v0.9.5 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect + cloud.google.com/go/auth v0.7.0 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect cloud.google.com/go/compute/metadata v0.5.2 // indirect - dario.cat/mergo v1.0.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect @@ -79,7 +78,7 @@ require ( github.com/bmatcuk/doublestar/v4 v4.7.1 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect + github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dennwc/varint v1.0.0 // indirect github.com/digitalocean/godo v1.118.0 // indirect @@ -90,11 +89,11 @@ require ( github.com/ebitengine/purego v0.8.1 // indirect github.com/elastic/go-grok v0.3.1 // indirect github.com/elastic/lunes v0.1.0 // indirect - github.com/emicklei/go-restful/v3 v3.12.1 // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/envoyproxy/go-control-plane v0.13.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect github.com/expr-lang/expr v1.16.9 // indirect - github.com/fatih/color v1.18.0 // indirect + github.com/fatih/color v1.16.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect @@ -117,18 +116,17 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect - github.com/google/btree v1.1.3 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/s2a-go v0.1.8 // indirect + github.com/google/s2a-go v0.1.7 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect - github.com/googleapis/gax-go/v2 v2.13.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect + github.com/googleapis/gax-go/v2 v2.12.5 // indirect github.com/gophercloud/gophercloud v1.13.0 // indirect github.com/gorilla/mux v1.8.1 // indirect - github.com/gorilla/websocket v1.5.1 // indirect + github.com/gorilla/websocket v1.5.0 // indirect github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0 // indirect github.com/hashicorp/consul/api v1.30.0 // indirect @@ -140,11 +138,9 @@ require ( github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-retryablehttp v0.7.7 // indirect github.com/hashicorp/go-rootcerts v1.0.2 // indirect - github.com/hashicorp/go-sockaddr v1.0.6 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect - github.com/hashicorp/hcl v1.0.1-vault-5 // indirect github.com/hashicorp/nomad/api v0.0.0-20240717122358-3d93bd3778f3 // indirect github.com/hashicorp/serf v0.10.1 // indirect github.com/hetznercloud/hcloud-go/v2 v2.10.2 // indirect @@ -173,40 +169,37 @@ require ( github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/miekg/dns v1.1.62 // indirect + github.com/miekg/dns v1.1.61 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect - github.com/moby/sys/user v0.3.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mostynb/go-grpc-compression v1.2.3 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect - github.com/onsi/ginkgo/v2 v2.20.2 // indirect - github.com/onsi/gomega v1.34.1 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.114.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.115.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0 // indirect github.com/openshift/api v3.9.0+incompatible // indirect @@ -229,68 +222,69 @@ require ( github.com/prometheus/prometheus v0.54.1 // indirect github.com/rs/cors v1.11.1 // indirect github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 // indirect - github.com/shirou/gopsutil/v4 v4.24.10 // indirect - github.com/signalfx/sapm-proto v0.16.0 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect + github.com/signalfx/sapm-proto v0.17.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/stretchr/testify v1.10.0 // indirect github.com/tinylib/msgp v1.2.4 // indirect - github.com/tklauser/go-sysconf v0.3.14 // indirect - github.com/tklauser/numcpus v0.8.0 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect github.com/ua-parser/uap-go v0.0.0-20240611065828-3a4781585db6 // indirect github.com/valyala/fastjson v1.6.4 // indirect github.com/vultr/govultr/v2 v2.17.2 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/collector v0.114.0 // indirect - go.opentelemetry.io/collector/client v1.20.0 // indirect - go.opentelemetry.io/collector/component/componentstatus v0.114.0 // indirect - go.opentelemetry.io/collector/component/componenttest v0.114.0 // indirect - go.opentelemetry.io/collector/config/configauth v0.114.0 // indirect - go.opentelemetry.io/collector/config/configcompression v1.20.0 // indirect - go.opentelemetry.io/collector/config/configgrpc v0.114.0 // indirect - go.opentelemetry.io/collector/config/confighttp v0.114.0 // indirect - go.opentelemetry.io/collector/config/confignet v1.20.0 // indirect - go.opentelemetry.io/collector/config/configopaque v1.20.0 // indirect - go.opentelemetry.io/collector/config/configretry v1.20.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.114.0 // indirect - go.opentelemetry.io/collector/config/configtls v1.20.0 // indirect - go.opentelemetry.io/collector/config/internal v0.114.0 // indirect - go.opentelemetry.io/collector/confmap v1.20.0 // indirect - go.opentelemetry.io/collector/connector/connectorprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/connector/connectortest v0.114.0 // indirect - go.opentelemetry.io/collector/consumer v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumererror v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumertest v0.114.0 // indirect - go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/exporter/exportertest v0.114.0 // indirect - go.opentelemetry.io/collector/extension/auth v0.114.0 // indirect - go.opentelemetry.io/collector/extension/experimental/storage v0.114.0 // indirect - go.opentelemetry.io/collector/extension/extensioncapabilities v0.114.0 // indirect - go.opentelemetry.io/collector/extension/extensiontest v0.114.0 // indirect - go.opentelemetry.io/collector/featuregate v1.20.0 // indirect - go.opentelemetry.io/collector/filter v0.114.0 // indirect - go.opentelemetry.io/collector/internal/fanoutconsumer v0.114.0 // indirect - go.opentelemetry.io/collector/internal/memorylimiter v0.114.0 // indirect - go.opentelemetry.io/collector/internal/sharedcomponent v0.114.0 // indirect - go.opentelemetry.io/collector/pdata v1.20.0 // indirect - go.opentelemetry.io/collector/pdata/pprofile v0.114.0 // indirect - go.opentelemetry.io/collector/pdata/testdata v0.114.0 // indirect - go.opentelemetry.io/collector/pipeline v0.114.0 // indirect - go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/processor/processorprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/processor/processortest v0.114.0 // indirect - go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/receiver/receivertest v0.114.0 // indirect - go.opentelemetry.io/collector/semconv v0.114.0 // indirect - go.opentelemetry.io/collector/service v0.114.0 // indirect + go.opentelemetry.io/collector v0.115.0 // indirect + go.opentelemetry.io/collector/client v1.21.0 // indirect + go.opentelemetry.io/collector/component/componentstatus v0.115.0 // indirect + go.opentelemetry.io/collector/component/componenttest v0.115.0 // indirect + go.opentelemetry.io/collector/config/configauth v0.115.0 // indirect + go.opentelemetry.io/collector/config/configcompression v1.21.0 // indirect + go.opentelemetry.io/collector/config/configgrpc v0.115.0 // indirect + go.opentelemetry.io/collector/config/confighttp v0.115.0 // indirect + go.opentelemetry.io/collector/config/confignet v1.21.0 // indirect + go.opentelemetry.io/collector/config/configopaque v1.21.0 // indirect + go.opentelemetry.io/collector/config/configretry v1.21.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.115.0 // indirect + go.opentelemetry.io/collector/config/configtls v1.21.0 // indirect + go.opentelemetry.io/collector/config/internal v0.115.0 // indirect + go.opentelemetry.io/collector/confmap v1.21.0 // indirect + go.opentelemetry.io/collector/connector/connectorprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/connector/connectortest v0.115.0 // indirect + go.opentelemetry.io/collector/consumer v1.21.0 // indirect + go.opentelemetry.io/collector/consumer/consumererror v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumertest v0.115.0 // indirect + go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/exporter/exportertest v0.115.0 // indirect + go.opentelemetry.io/collector/extension/auth v0.115.0 // indirect + go.opentelemetry.io/collector/extension/experimental/storage v0.115.0 // indirect + go.opentelemetry.io/collector/extension/extensioncapabilities v0.115.0 // indirect + go.opentelemetry.io/collector/extension/extensiontest v0.115.0 // indirect + go.opentelemetry.io/collector/featuregate v1.21.0 // indirect + go.opentelemetry.io/collector/filter v0.115.0 // indirect + go.opentelemetry.io/collector/internal/fanoutconsumer v0.115.0 // indirect + go.opentelemetry.io/collector/internal/memorylimiter v0.115.0 // indirect + go.opentelemetry.io/collector/internal/sharedcomponent v0.115.0 // indirect + go.opentelemetry.io/collector/pdata v1.21.0 // indirect + go.opentelemetry.io/collector/pdata/pprofile v0.115.0 // indirect + go.opentelemetry.io/collector/pdata/testdata v0.115.0 // indirect + go.opentelemetry.io/collector/pipeline v0.115.0 // indirect + go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/processor/processorprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/processor/processortest v0.115.0 // indirect + go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/receiver/receivertest v0.115.0 // indirect + go.opentelemetry.io/collector/scraper v0.115.0 // indirect + go.opentelemetry.io/collector/semconv v0.115.0 // indirect + go.opentelemetry.io/collector/service v0.115.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.6.0 // indirect go.opentelemetry.io/contrib/config v0.10.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0 // indirect @@ -327,10 +321,10 @@ require ( golang.org/x/sys v0.27.0 // indirect golang.org/x/term v0.26.0 // indirect golang.org/x/text v0.20.0 // indirect - golang.org/x/time v0.8.0 // indirect + golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.27.0 // indirect gonum.org/v1/gonum v0.15.1 // indirect - google.golang.org/api v0.199.0 // indirect + google.golang.org/api v0.188.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.67.1 // indirect @@ -339,13 +333,12 @@ require ( gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - gotest.tools/v3 v3.5.1 // indirect - k8s.io/api v0.31.2 // indirect - k8s.io/apimachinery v0.31.2 // indirect - k8s.io/client-go v0.31.2 // indirect + k8s.io/api v0.31.3 // indirect + k8s.io/apimachinery v0.31.3 // indirect + k8s.io/client-go v0.31.3 // indirect k8s.io/klog/v2 v2.130.1 // indirect - k8s.io/kube-openapi v0.0.0-20240430033511-f0e62f92d13f // indirect - k8s.io/utils v0.0.0-20240821151609-f90d01438635 // indirect + k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect + k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect sigs.k8s.io/yaml v1.4.0 // indirect diff --git a/comp/otelcol/collector-contrib/impl/go.sum b/comp/otelcol/collector-contrib/impl/go.sum index fe8e6e271ecb8..5672b3b4c0c95 100644 --- a/comp/otelcol/collector-contrib/impl/go.sum +++ b/comp/otelcol/collector-contrib/impl/go.sum @@ -13,10 +13,10 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go/auth v0.9.5 h1:4CTn43Eynw40aFVr3GpPqsQponx2jv0BQpjvajsbbzw= -cloud.google.com/go/auth v0.9.5/go.mod h1:Xo0n7n66eHyOWWCnitop6870Ilwo3PiZyodVkkH1xWM= -cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY= -cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc= +cloud.google.com/go/auth v0.7.0 h1:kf/x9B3WTbBUHkC+1VS8wwwli9TzhSt0vSTVBmMR8Ts= +cloud.google.com/go/auth v0.7.0/go.mod h1:D+WqdrpcjmiCgWrXmLLxOVq1GACoE36chW6KXoEvuIw= +cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= +cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -36,8 +36,8 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= -dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0 h1:GJHeeA2N7xrG3q30L2UXDyuWRzDM900/65j70wcM4Ww= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0/go.mod h1:l38EPgmsp71HHLq9j7De57JcKOWPyhrsW1Awm1JS6K0= @@ -132,8 +132,8 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI= -github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20 h1:N+3sFI5GUjRKBi+i0TxYVST9h4Ie192jJWpHvthBBgg= +github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= @@ -171,8 +171,8 @@ github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkg github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU= -github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -188,8 +188,8 @@ github.com/expr-lang/expr v1.16.9/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= -github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= @@ -302,8 +302,8 @@ github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXi github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= -github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= @@ -339,22 +339,22 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 h1:5iH8iuqE5apketRbSFBy+X1V0o+l+8NF1avt4HWl7cA= -github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/pprof v0.0.0-20240711041743-f6c9dda6c6da h1:xRmpO92tb8y+Z85iUOMOicpCfaYcv7o3Cg3wKrIpg8g= +github.com/google/pprof v0.0.0-20240711041743-f6c9dda6c6da/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= -github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= -github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= -github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= +github.com/googleapis/gax-go/v2 v2.12.5 h1:8gw9KZK8TiVKB6q3zHY3SBzLnrGp6HQjyfYBYGmXdxA= +github.com/googleapis/gax-go/v2 v2.12.5/go.mod h1:BUDKcWo+RaKq5SC9vVYL0wLADa3VcfswbOMMRmB9H3E= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/gophercloud/gophercloud v1.13.0 h1:8iY9d1DAbzMW6Vok1AxbbK5ZaUjzMp0tdyt4fX9IeJ0= github.com/gophercloud/gophercloud v1.13.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= @@ -363,8 +363,8 @@ github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkM github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= -github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc h1:GN2Lv3MGO7AS6PrRoT6yV5+wkrOpcszoIsO4+4ds248= github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc/go.mod h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= @@ -402,8 +402,8 @@ github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFO github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-sockaddr v1.0.6 h1:RSG8rKU28VTUTvEKghe5gIhIQpv8evvNpnDEyqO4u9I= -github.com/hashicorp/go-sockaddr v1.0.6/go.mod h1:uoUUmtwU7n9Dv3O4SNLeFvg0SxQ3lyjsj6+CCykpaxI= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= +github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= @@ -418,8 +418,8 @@ github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iP github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= -github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= -github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= @@ -535,8 +535,8 @@ github.com/maxatome/go-testdeep v1.12.0 h1:Ql7Go8Tg0C1D/uMMX59LAoYK7LffeJQ6X2T04 github.com/maxatome/go-testdeep v1.12.0/go.mod h1:lPZc/HAcJMP92l7yI6TRz1aZN5URwUBUAfUNvrclaNM= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ= -github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ= +github.com/miekg/dns v1.1.61 h1:nLxbwF3XxhwVSm8g9Dghm9MHPaUZuqhPiGL+675ZmEs= +github.com/miekg/dns v1.1.61/go.mod h1:mnAarhS3nWaW+NVP2wTkYVIZyHNJ098SJZUki3eykwQ= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= @@ -557,8 +557,8 @@ github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YO github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= -github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo= -github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= +github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg= +github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU= github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= @@ -591,6 +591,7 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= github.com/onsi/ginkgo/v2 v2.1.6/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk= @@ -601,8 +602,8 @@ github.com/onsi/ginkgo/v2 v2.7.0/go.mod h1:yjiuMwPokqY1XauOgju45q3sJt6VzQ/Fict1L github.com/onsi/ginkgo/v2 v2.8.1/go.mod h1:N1/NbDngAFcSLdyZ+/aYTYGSlq9qMCS/cNKGJjy+csc= github.com/onsi/ginkgo/v2 v2.9.0/go.mod h1:4xkjoL/tZv4SMWeww56BU5kAt19mVB47gTWxmrTcxyk= github.com/onsi/ginkgo/v2 v2.9.1/go.mod h1:FEcmzVcCHl+4o9bQZVab+4dC9+j+91t2FHSzmGAPfuo= -github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4= -github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag= +github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA= +github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= @@ -618,116 +619,116 @@ github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdM github.com/onsi/gomega v1.27.1/go.mod h1:aHX5xOykVYzWOV4WqQy0sy8BQptgukenXpCXfadcIAw= github.com/onsi/gomega v1.27.3/go.mod h1:5vG284IBtfDAmDyrK+eGyZmUgUlmi+Wngqo557cZ6Gw= github.com/onsi/gomega v1.27.4/go.mod h1:riYq/GJKh8hhoM01HN6Vmuy93AarCXCBGpvFDK3q3fQ= -github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= -github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= -github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.114.0 h1:oA79wMjQSQBKz+X90LD5edNOyaEsewspJRBYgxliEMA= -github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.114.0/go.mod h1:uk7Z36vhLtevNy5672jGxgzNJA2LND6wmispTuhHCxI= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.114.0 h1:quLs6NbDeG2x2eLmncaq/P4yvnCPLAelFqXac2eMRSw= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.114.0/go.mod h1:xX2v2kixYWZbFvnT5re3BGg2pyLy78KSIiMed7P2c/c= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.114.0 h1:93/S5dh3snAbC81fuGP7c+nn2OhgP59UTrXqmFtK1Ww= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.114.0/go.mod h1:fyU1pLPKcXDWkUwO075jt1YOjFS/XIZXDwHEV3xy93g= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0 h1:G7SHyt5TvFSEsiaxyhZdqkjcRoK2rP5wl4a3Mu31JM4= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0/go.mod h1:TRsDReUh7ALEUutKVoLlGMRc2QECZAyT/5g/cpAr+aw= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer v0.114.0 h1:xZL2FLnVTKqVeZQuTBSMmVLr3FQUN/N8x7VL70Gd07k= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer v0.114.0/go.mod h1:betAqGGfDFb8SLyMYBwH9BQyB9wzxWOWXXC/Ht6/kas= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.114.0 h1:OwLYURmQGKEo9jyhlMsI3JtFLiYChZIrA2M3MxuomTY= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.114.0/go.mod h1:1UZtI+tYvVvvKkPv5NmggvPpxkQEyKaUVg2ygtCjVoQ= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.114.0 h1:aAobCSGIhUYohlzbMQdfDDtQoKlofPROL3+WSSPxz+c= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.114.0/go.mod h1:4m8sQMLNgHexFom7YEFi2khcsUUqKxEdIWgUOYKcmLI= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.114.0 h1:t59jxlv7dIF+f6SaG8V5mx/+Hxfoy4S5qlMpJlkcPo0= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.114.0/go.mod h1:HbUoZclDdXYC7L6lvh44olwDpJBIoTw9fls1bjqyMZY= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.114.0 h1:1TNrKEIfTHAhQDVzQczhReo2+Rw5q9VNCVZgq5SKq/Y= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.114.0/go.mod h1:3AzBMlWooaEO8LvLWqYQoOhqxQ+fAaUlC09sCicB91s= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.114.0 h1:FetZgJSBHH9xw1JKr3Wetek54bpVYkwJrVJJrO271vU= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.114.0/go.mod h1:QWdTwjk67PGv3AyMT+8yEQXU3laW+PMLCFE8PSewWkM= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0 h1:6g5EvbygaEBqed0rJotGHcfxgxGV8hSN/4ZoZFfac5M= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0/go.mod h1:gU87iMdDAdHrQQCWTURbrlE/dLYgFecJ/+WBHuNMjQI= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.114.0 h1:mchuc816TxLpmsGvFbtGA3KBVx91vAXi7vJnlvsQdiU= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.114.0/go.mod h1:vgCMUWPVrfjNux9P9G053fRqGFF6BS3xtxNFZZdFTCM= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.114.0 h1:4qELD/ZwgvXE5PshGzJ9Eu+JEQdLIok6V1x8rvqL+yk= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.114.0/go.mod h1:3U1KoAsmQd9H37t8VkesFfB56tThrPsNVG+ddsMJ2zM= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.114.0 h1:0LbaoE7Aof8J4CVQ5kYv1QbuL3usTxLRSMFisDNBX9U= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.114.0/go.mod h1:ByoGXMLeHE/k5ELO3EITitVmvq3bh4Z/GVwWZZxrQ5s= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.114.0 h1:d2wCLlENxH4I2axQWaogivx/5ZIjDYgn9MIf6sFxlJ4= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.114.0/go.mod h1:Psyligv8GKL9WI3TraW3BLwkOX4TRxaaa1BBQQyICzA= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.114.0 h1:AReCF/mzq8+1BORde9m96xAZ+nnv22/B1b+H56hlFIs= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.114.0/go.mod h1:dCQeeAQww9++hvoqQ69QzTN6SGbq3DoVs1+Z1wcKAX8= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.114.0 h1:WrVBqO/ps3KvUyEhtdL/uDDHhKoszLEE1ywDbwskNRg= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.114.0/go.mod h1:JYklzR+ZxQaxjzlfJP3bxX6rQFl/Hbo0vd3yNj/1s1s= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.114.0 h1:dtW9JkkpAm33Y47estFyqEL0CW05DHGmlLQxZUSx78w= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.114.0/go.mod h1:FcClDm9XVV5tzUDzmH2Mhe6TfYiZ/3GSAQITnuCjZgg= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8stest v0.114.0 h1:Lgk9OkyDQQYWtfZ3DEyfQ+08NM4+dBO3fP0OQN10cXA= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8stest v0.114.0/go.mod h1:2/6/eY8Uvg+NfYDsAbND96A4u5q4UjcDlBJolYcj6jE= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.114.0 h1:cGJRIzB5N3oe1c8vD5HqCuy4dbQE9EDJZ9C7vJn+K8U= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.114.0/go.mod h1:p53t8aSCVoTKXVOsNx62rDLrSdEkBFB4H85yEiTWkyI= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.114.0 h1:lt87gwZaUP9Lh0EAgZFTYego0k89NU8K6Qkk82oR/n8= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.114.0/go.mod h1:nxxBsX9Z2Q7HQvybUTx8CzUvYCJewKBM1Eys6SiS0eg= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.114.0 h1:TrGpqqMJxh5fTzdu5HZORKvDiIUBK8b9K/3zUCGbjps= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.114.0/go.mod h1:mw+aVzR/3HtuGZE5xM6zEXHFv411QG8MxI8mQFJSd5c= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.114.0 h1:2uThKlp4NoQbIm7k9ZRGCKVJjMcibffb8NLcsPslq9o= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.114.0/go.mod h1:jSpHMXCxgNLBIfselixqXAUn0pXDfE5LEuNkz0WjK68= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.114.0 h1:Z+WmSDshEjfNy09A7+opWO01L5LwkZC3Ze9AgfLfuAk= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.114.0/go.mod h1:p58MQDR97vRdpY8vh6JuCqjKp0W+kpo5qHmuqhd7L00= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.114.0 h1:lvpwitQL0CDKHyExi+Wi0MPXGBjpgK5YbXljRYE6YTU= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.114.0/go.mod h1:/peNiVTNFe3osINRwW88WB0v5BC1ifjEmDL5oui+ry0= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.114.0 h1:SXi6JSSs2cWROnC1U2v3XysG3t58ilGUwoLqxpGuwFU= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.114.0/go.mod h1:LSd6sus2Jvpg3M3vM4HgmVh3/dmMtcJmTqELrFOQFRg= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.114.0 h1:G6U2eHR2CGSYb2btot6l05o+mdqsC0ZN7dH8QssXSdk= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.114.0/go.mod h1:kZQvVVzpahX8kFUfEBmzFtDhkKAQW6i8XQCMozDRUlk= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.114.0 h1:m8uPYU2rTj0sKiYgzCvIPajD3meiYsu+nX0hplUnlEU= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.114.0/go.mod h1:P0BaP92pXPkTyTmObfLYUoRBfMYU+i0hdS3oM1DpGJo= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.114.0 h1:Qg80zPfNMlub7LO07VMDElOu3M2oxqdZgvvB+X72a4U= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.114.0/go.mod h1:5qsGcjFV3WFI6J2onAlkR7Xd/8VtwJcECaDRZfW4Tb4= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.114.0 h1:PwUMZ6fHMEUV5i9hUly+z3UujDTTdxQtWzL0rWc/lgA= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.114.0/go.mod h1:YEHL6w4vvB9b0/lNwGjz8DyWXTF/7Xw0Hkgc3mGWwa8= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0 h1:mtSN/07RGQPi1/zHVSZg4G0qRtOoJpPew5jsQWv9uS0= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0/go.mod h1:C9Zgh/N3j4NR2D+1FGAA1YizhFW9OS51DwLUFJTdXN4= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.114.0 h1:Xr3Hvm9cxOSQX94tLX1yX63uvuvtglJICrOz9YcxiuI= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.114.0/go.mod h1:cgIgmEg66RhVtAv4JkIhHdy70kn2EtVhrH8CtyvhfuI= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.114.0 h1:WymtAsFHYen4GTTTXvVqZCoMz6vPADYUf4xIP0Gvm+E= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.114.0/go.mod h1:FcTNci+LpU5x5FkHM0Su3k6/ESDHWQsL30AFISzaIyk= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.114.0 h1:eJxap/u8Q5wYnBcJTrTS1Tq6wq31SOlIr+FMJX5ZoC8= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.114.0/go.mod h1:H7uIA2RBaxit2mSwSU8Wc7QXSJX7r8UR66YvdcLmtto= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.114.0 h1:tG98F8g5T7lKYaoxSh9e76agmkauPtXiMbQhuWAeG+I= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.114.0/go.mod h1:eN3xPxPcRZH0wofEQ1Greu1c561qEGeYv5Zt0uedmMM= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.114.0 h1:xDbTY8zDUP3RKG1kg1tmULnBkLEDMwmSpf9j2H0sIcc= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.114.0/go.mod h1:t5uoTcckI8kQeW1sZl8A+1UebVJPe47Qi3WQeNZu6w4= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.114.0 h1:fltPkjMuiVTtIVwoWUzbL0ad2CTCJsWfnCSDJQ9hSxU= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.114.0/go.mod h1:HcG364Is9u2EDqOUtQX0RwnbHtQqSh5+x2FdcYC+F1M= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.114.0 h1:rYwgdR8GE7QEtQlkQxXq5f1JQrd3v36g4yXXljicKoM= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.114.0/go.mod h1:TjEgPVMRxi93SdN0N0qv0hx5L+FF2csgo3YwfzVGJ3g= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.114.0 h1:QBR07Gaw6ePkufQ/AhHgBv4OlwzXlULTdiUnaKIlvLk= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.114.0/go.mod h1:coY0CV/sNj1hltRXKZr2gnrLvr7xUbnW+GhpCQpGR/Y= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.114.0 h1:ap7EK1GxLHau1jKJP8tYcZDb+tEntzx2Kj97XdNb7s4= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.114.0/go.mod h1:1uyslltGfwWhG7F/t41t43dBzrZpEkFzo2hR0OmyZi4= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.114.0 h1:nldvWnYvTjIDi1xmZKgS2b0vz0Ja9UMV2m7ffg/HMDk= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.114.0/go.mod h1:yRuZU0Rd/twuSQFme3WiVB7x9ECgIEwDBs2mPwkqUYY= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0 h1:I4ZYVRYW3Cjb65sPENZ9kHam/JUMXNEp2n/knJ0C0Vc= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0/go.mod h1:4BhyIaOn2LS48WS+ZNix4TpP0+goq9gDEtGzth5Cr3M= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.114.0 h1:ttRj/3GIpg+vUTeBI+EBeeWdNuvBT3S/ayoqpvA9B9s= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.114.0/go.mod h1:xoJgFdZUIxlvF8eUHIYiZGmf39zAwditW3sc2SBirAo= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.114.0 h1:je7Aiyn5AHAcpCNpTN5Q4l2SIeqJEvtOjoaZhHszGrs= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.114.0/go.mod h1:cVG4aXgfQFSdSfhAgoawDmmKixogjlvqQtmjmqVJgb4= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.114.0 h1:AsYYMzt+ZGGQaq3S21REATxZsUI4aOuFAOPq09tSPnI= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.114.0/go.mod h1:ifqisebKudvS+YARMbFRyX8/UgdXitSfCD1JCoGOxlY= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.114.0 h1:NrD8Qo2CxrHRAlLuOHm75RtO1xEnul6DDkn6tQMsuSg= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.114.0/go.mod h1:XOlJzIYwicEPMxu6Gv9TL9pS6El+ffjQOAu/wPiL+Jg= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.114.0 h1:lKG7Ghtba2l9P4FFP7I+SbVRqHEpXCGOZs367YTEwGc= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.114.0/go.mod h1:5U/lrnkK5YtIeTFXI8OzDN/d827WtI6pQvu7/59pUVA= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.114.0 h1:Ivu3DRhbERboPxMJeyJpmretbKDJ3hsOAGBQXt2yY3U= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.114.0/go.mod h1:UrMGrA8bA1VeYhdiam7/Xu/U4joG6JftMULEVWLDbe0= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.114.0 h1:Yx0RUwviLdYyozkuqbfpEhSH+ehXlKsW5TtlZbiKm4Q= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.114.0/go.mod h1:Bh9h5hYTgr/zQgXUnvihkLvN1IMmVY/OFa8aHc3gMJU= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.114.0 h1:kSxkZPWBA6je7xXkpMWycjyc2BIMvLGD+OGTIRtJ0xw= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.114.0/go.mod h1:rBegsrFk6WSDU4v9TiOvH3h7xintiOhPq9qd+72SlK8= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.114.0 h1:1NeG/cgiqBMWQJxFvWQmWo9BVj3k4uOvEK0o++BFINY= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.114.0/go.mod h1:skPwfv1xYwB5onG9sj31J4OYUxx6p+wc40aogGy+nVE= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0 h1:gdljk66vBTT3lWfSdP4Hl7FaABdH1YPhUCH6jnG2+qY= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0/go.mod h1:T1p6ShTr8farkE4qUB2TyGUIvRSN3s17D0qY7rMqCRM= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.114.0 h1:PwaceYEl50C1OK5MxpH95hnn58CNRzINP2p5YvluZj4= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.114.0/go.mod h1:FrJqdSI+4QuU/w9XtoW9d1Ywp09u2cYaPUOZFqzDtNY= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.114.0 h1:E686MeQcQ+a3Q47A/xAc3Nk6Qdz8wHcBLMJ3Y8bNKi0= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.114.0/go.mod h1:zkQAapuNRobj7GY8kKRal+2EYkAMWmZ1KMysUrQI48A= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.115.0 h1:sO4fPw0NRUibgBVvQVTqPBCBRFh0I+ODIr3HAwcWezI= +github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.115.0/go.mod h1:HqzCXJ4rxXzWNYaUtCqJzXyTsCGEKSa/d+tHcyeRDY0= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.115.0 h1:u7Ht+E1ghQESffcjyaxWrXGsfSWa1VE9LKC4f2PPx84= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.115.0/go.mod h1:r3iS2mDYu+cnGjgNc8TgvuUUAN6A6/1BvR1e1YJBrqM= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.115.0 h1:RXYLbv2uTJlJTJcEa5H8/fLdX419XUlbn6mjzEgTWxc= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.115.0/go.mod h1:ngeyITKu+koaagA/sFpnuT+x0nFVBNdWq60/h5buSr4= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0 h1:51D/x3xIAnWgVrY0lgdU+b+yb2aWd72uDqu9GhjRcNI= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0/go.mod h1:nLau1YUdjhtLrk4jXLPb2l9riQ1Ap4xytTLl7MBedBg= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer v0.115.0 h1:eJk/gbfWpGKTIGLUN+EWpqM52Zf4LFTfIeMnDji+dqM= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer v0.115.0/go.mod h1:+GPzqBFeqV90U4/bntDRPMxo/i/12lxH7GyPJmqz4ls= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.115.0 h1:790+/iSYt6bMs/OA3AfLlZl9E/Zpb0pm5X628TCncE4= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.115.0/go.mod h1:LtsKKBDZyn02DiqvuOZapGg75P/FqGQNelTI6fO12o0= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.115.0 h1:BtYrSkQSYGJufsmbqqrpzb+BJXH2S4CKL14i1bxOFCU= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.115.0/go.mod h1:4LQ1S3eBu+MyCNaCkBk0hIoAhvJJS851i/tY45FtDf4= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.115.0 h1:zi0LLZp26hAycIKNbmOIMGc0ZnkikrciTHl1tiJuo4Y= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.115.0/go.mod h1:a/UMjV9mrFJ5WIlpaDQ/S5KgCrg0H3kD8nlhfQRxfBI= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.115.0 h1:5PiDmieivpExBd2LchzSIvEls+cjUeJtPLXvvHxLZoI= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.115.0/go.mod h1:FIFNtgEoqcI/evvgSL+5qO/cdRUK+6ixFKKUdKpmMeA= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.115.0 h1:sMHHN4HrakORqrpsTLQQVGiDjKg4QreBJ+UCx/1OI+I= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.115.0/go.mod h1:q1950sX5QqCGDurVOkwatDSc5de4gpGfuPGVtFgNo3I= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0 h1:HVGG31WeB6Fn2+il2/ycWj9tDP0fxOeOqD1rKCjsBSc= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0/go.mod h1:2hYojHs5daPVWECuZsPViKwty0ojuHUEmk8GEuaFqO0= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.115.0 h1:4Ycg73pYVdiF+oq+BmUq7Dkg0WKeKvBSk9AOKvBe4LU= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.115.0/go.mod h1:l2Q+MmYk2ZRDSbhX9GlJYvBXC51AqhDJAj2ne290Xik= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.115.0 h1:SF3gOOEkfntE3zEhY80yO7BVQ5CkaK8ecic2U2AZPHE= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.115.0/go.mod h1:jeBzX5m8O9X0LQxiryV9sJUIrn+QAwOnCBE2wZWIltQ= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.115.0 h1:vRQQFD4YpasQFUAdF030UWtaflSYFXK542bfWMGhOK0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.115.0/go.mod h1:BZ7DT+0VkKR7P3I9PGEDfVa0GdB0ty41eEcejIUXF9A= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.115.0 h1:a36EJz/mb83f6ieX0v4fNDJ1jXqpeaM6DVQXeFDvdhw= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.115.0/go.mod h1:r5/40YO1eSP5ZreOmRzVOUtDr7YG39ZIUcVjHd+9Izc= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.115.0 h1:xITYM8BkEgs2Wf+PczOrVv0b1Fk4N929/xR9YtxLpkw= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.115.0/go.mod h1:m+5tYnZKfNDtnZKknOfssYSXBEL5Yqse4CJMpaY5kMk= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.115.0 h1:h6zEsBtuZalQu7lKYf6ZCcj8fTocT+zxdmuOou9515Q= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.115.0/go.mod h1:6QU/K0dGCGYorkOvJmhbDFCspy4RPxRkFjf9I64y6I0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.115.0 h1:f/HrZgTf6TF97v67uEZB3v2UtBT9aQojBvnloD3LOm4= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.115.0/go.mod h1:Hp9uSq3qNJqdxu24u7RWyuPT9x1GgEUSx9US1LLeLi0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8stest v0.115.0 h1:vXDJE8YHfAoYIAlPRtODchlqb6lWnGhJxPaT2ljvN7I= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8stest v0.115.0/go.mod h1:f3IgMFHIjEUEI/I+5e3KWMPq9h2PSMy9WovmvPdmlb0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.115.0 h1:4RoU3SlcNe6Dxyxfv8JVsrN8QgjBQ44Pkt9FLKK095I= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.115.0/go.mod h1:jfPlBpZT+hvp52Ldcx+srxaqyYuKxBkxOd3KtxbveCU= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.115.0 h1:8A+iBT5G23zvBPqYx32Qh4800jHFo4X9T1fpQKVQ+4E= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.115.0/go.mod h1:AhdPvwYKu7G8LKRWzHTNQYBq27RinsMm5qSanwSA/rU= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.115.0 h1:MuyDWyVoCty8HyP2CAYoRZXwINiThHovcC1Bj3+H8lk= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.115.0/go.mod h1:asekVnrdzYsMJBaJtIyXOt8p07l1x0xs8X3h00sZyf0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.115.0 h1:6GIJOSEIWBt9bprARMtTjRlENrwNsJl2UzbtjOBk7A0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.115.0/go.mod h1:/Fg/itwlAzDjyM0Sjenup9TbdOT+aVNPSqXsF80M8hw= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.115.0 h1:l4NBxl2AELPlyqupLu1IVAjtbGOEovaKEyt0UGMsuq8= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.115.0/go.mod h1:j1qF1hE/Qcy2I655yXbf2ItezXok61OW+9AAxbH2ORw= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.115.0 h1:l9AsnVHr3Sp4lAGFlBJ6Ochl7mlPE0d5MNd70o4qKEM= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.115.0/go.mod h1:kARk81QZpcX6L8x4fLo4Nr/z/+jpo5PxXtugBxF2DyE= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.115.0 h1:Z9p78zj9Qblw472mGkPieuX7mqduAp47rzMbFfq5evI= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.115.0/go.mod h1:mtxUxJEIQy27MaGR1yzcn/OK8NoddEgb7fumpEbKYss= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.115.0 h1:qdZ9EqmdM19pWhPoFA7VivBTdzP2HvNwXa3CCMHYoDQ= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.115.0/go.mod h1:mrL1MNrcg0zYAJ+aK9WtOH062dl2wN9DDG7mZk9H8v4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0 h1:MerLKMrkM4YoGF6Di0D9yMXO02yCX8mrZAi/+jJVVeI= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0/go.mod h1:R8AkVWe9G5Q0oMOapvm9HNS076E3Min8SVlmhBL3QD0= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0 h1:WEqcnWSy9dNSlGb8pYRBX7zhaz2ReyaeImlenbzNTB4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0/go.mod h1:6Mk71CakHUA3I6oM9hARDiyQypYyOolvb+4PFYyVEFg= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.115.0 h1:eoapW0JBablApkdv4C1RUuOKfz0U6SwuKMYYSAJH6fE= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.115.0/go.mod h1:hW2AaybTRcwxJySGLC3Fh1vd2VDaQhRBfa7O7w30NS8= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0 h1:R9MRrO+dSkAHBQLZjuwjv2RHXHQqF2Wtm1Ki0VKD5cs= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0/go.mod h1:rKXLXmwdUVcUHwTilroKSejbg3KSwLeYzNPSpkIEnv4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.115.0 h1:7tQ+WjojXhtWDFTJlwCvkjpvdTed5YkVKVQKVAu1alg= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.115.0/go.mod h1:iqgJP7+N03pOIOqYaKjVWYoIKweNdFivsvWJfFw6MTQ= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.115.0 h1:rrIm0dyEdaHmQo6udPK1V3opkzEKa0PrZzSdY5oGqmQ= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.115.0/go.mod h1:AMeisxL/9gs0bzozaymUqI1/EJ9GPvtnLh/BtqtjSF8= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.115.0 h1:KghgAubxdDqP4eUQ+d2GzHXUAwtFxpSDToqFVnax0XA= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.115.0/go.mod h1:cW/BaYE6Uo7ZYHbmT0wVBktHP0SfeLqGHMf0qks7rOE= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.115.0 h1:ioGiKiO0WqT3PxkzanuJsPVA24FItH6nTJeDeSMFpYA= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.115.0/go.mod h1:x1W4J+pzK/Bi9jjYBYESTsPq0nRJJLZoN7cPNd0vYSU= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.115.0 h1:A9zqBtUJZ5J/0VI+B1dxuQhc2iVYpD9c54SgaKtFIN8= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.115.0/go.mod h1:hG7GOrBBux/cg1fAUzvSlzYY02ekxjF9IvH4ls/nGXA= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.115.0 h1:hAsK9I081ShnSDSKPVEHB3TLawyOmbR6bPDiQEkgo2Y= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.115.0/go.mod h1:z8XdvlhXSYVboxS3TPGembE9kfxLAYH2PxPLMvf8wTk= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.115.0 h1:t3BGnPpmeuxW51vISSu51PrAs49ACBCa1Yl1NfZGE5Y= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.115.0/go.mod h1:jQLYyroEYEV1kWJApmGBgVuGUd73v+Q6EUJ6Wy7N508= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.115.0 h1:ficXJmB6l6kfiu+R6CmggtnlQWMHUNzu2csDYA4CFSs= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.115.0/go.mod h1:ykraxSeEVCuA43oqlMWnex78+vNQ+1dBTJUeInkqIpA= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.115.0 h1:LVe/Oh2un9CFKFYtepB9oZ6j38whFPVYl01RAVsdxHg= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.115.0/go.mod h1:mGSGQCX5dT5KUxBkuCO15CNqB+8Cb+qj0edt/oKmA34= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.115.0 h1:6RGhDlZkekmp12EvK6JV9fiIwrdZBOJID6/Ts9tXzL4= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.115.0/go.mod h1:qZRQtGr/DAjuBqAuKJMN2cWvc9RI94lB0Oq8UyGAduo= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0 h1:vwZQ7k8oqlK0bdZYTsjP/59zjQQfjSD4fNsWIWsTu2w= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0/go.mod h1:5ObSa9amrbzbYTdAK1Qhv3D/YqCxxnQhP0sk2eWB7Oo= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.115.0 h1:jQ6mIXhWqXhl8MPun9soNynsQ0lpOpOYQyAnQ28F014= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.115.0/go.mod h1:oRxNwm6HN7ckp4aJOAFC8BVBPa0UDhB8vNGTFL3QBJg= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.115.0 h1:KbfjEsr2d/5TGWHvcaBC3lOpYAnquEraLXcis4IamAs= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.115.0/go.mod h1:fmtZPK5RIz+2Lcm9xQZuwiM+M8/juSSeJufSxUT+J9w= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.115.0 h1:Ea5v0Q6VNIMRbXVJjHUsSbdOSkB+80sCOH7Y9yhStnY= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.115.0/go.mod h1:IkiZL9vOU8qNCkrnJP0GOWPoFTED+yhB94wJbcLYcGA= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.115.0 h1:olyiml73slGYORDjZNViW3nKiysC+K+h5yPsSBjUxQ4= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.115.0/go.mod h1:N00k1mTxzfS2clqxSP4Dxk7iX8GWbbuCq6LF8/ECk/M= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.115.0 h1:sLRTfXUFiqJ5Qe/NN5MUJxTaFt46E0Y/xjSY+KesCQc= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.115.0/go.mod h1:361IqXD4jnfs6G+Yn7978uv1UNozhZo4yBYy4p6Nqzc= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.115.0 h1:JSFnfWwlVGLul8p9DE6Sk6E0zaqCvbys7CqvJQD4MIs= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.115.0/go.mod h1:cw0qzwXzKKxM7QyDcNSp9OSDLySVXyaSrgdqWPqlDk8= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.115.0 h1:2xlgF/vCUsZx9HDqhDi0XyR1QXBM67YFRyWrEq5Ydos= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.115.0/go.mod h1:vWTdohkLm9S+3Ekz4aq1jW0xt8wD2jrdOOSOJNllppo= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.115.0 h1:XDlXWa6pdAp02kdfZdzZ0cjeZMNHjI7dj2dNgKdzOfo= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.115.0/go.mod h1:Zo6YARAWAMCdlUmyKBq0EcuKmLjxfC2hUNd3jIAFsWE= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.115.0 h1:hYNlyUj3F43cuv1ap19NlEEchQfs91vYeNoQ1+nswLo= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.115.0/go.mod h1:1o6wF5HJdpb2hd2eGMoQhGuTKb4F2+j/IHBJJSPdM2w= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0 h1:GIyMUiud3T8nyCJP9KVhxVKvfcNQRBCde5uTCl6K/i0= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0/go.mod h1:x4hCznyUolxGt5cE/uXWRCckdIDrUYqH5hJddvdKZd4= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.115.0 h1:Di0uc2QvwEVrq1PEReZ34FpPuo1z5QhHmT0bvdTe0DU= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.115.0/go.mod h1:ODvjmz18PDQnX/BruQ8IFOpiz/HdGOpUWMEKq7f3nhA= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.115.0 h1:h/HAHLIZnIyu85l8wOeggOyiI8z8citNAqxQktVKUpk= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.115.0/go.mod h1:iEU0NA/i2sUREqD19JYmjKwrjMUTcddad/h1LGdSMHw= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= @@ -817,14 +818,14 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUt github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shirou/gopsutil/v4 v4.24.10 h1:7VOzPtfw/5YDU+jLEoBwXwxJbQetULywoSV4RYY7HkM= -github.com/shirou/gopsutil/v4 v4.24.10/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= -github.com/signalfx/sapm-proto v0.16.0 h1:E8W+awZBl3nmpDTdbPK8Uwla9FdSCWpZChR3p+7bzw0= -github.com/signalfx/sapm-proto v0.16.0/go.mod h1:7VTAIoYIgkAK+j6w3l4Aici+EYySGAmXCK0rfD2OZkU= +github.com/signalfx/sapm-proto v0.17.0 h1:KY+9zm/yDOq6uzaguI1RmrJcWxzbkGv0zE6GplA3ytc= +github.com/signalfx/sapm-proto v0.17.0/go.mod h1:c8fGx9DjGP7Hqif7g6Zy6E+BCMXK/dERFU2b3faA0gk= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= @@ -878,14 +879,14 @@ github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/tinylru v1.1.0 h1:XY6IUfzVTU9rpwdhKUF6nQdChgCdGjkMfLzbWyiau6I= github.com/tidwall/tinylru v1.1.0/go.mod h1:3+bX+TJ2baOLMWTnlyNWHh4QMnFyARg2TLTQ6OFbzw8= -github.com/tidwall/wal v1.1.7 h1:emc1TRjIVsdKKSnpwGBAcsAGg0767SvUk8+ygx7Bb+4= -github.com/tidwall/wal v1.1.7/go.mod h1:r6lR1j27W9EPalgHiB7zLJDYu3mzW5BQP5KrzBpYY/E= +github.com/tidwall/wal v1.1.8 h1:2qDSGdAdjaY3PEvHRva+9UFqgk+ef7cOiW1Qn5JH1y0= +github.com/tidwall/wal v1.1.8/go.mod h1:r6lR1j27W9EPalgHiB7zLJDYu3mzW5BQP5KrzBpYY/E= github.com/tinylib/msgp v1.2.4 h1:yLFeUGostXXSGW5vxfT5dXG/qzkn4schv2I7at5+hVU= github.com/tinylib/msgp v1.2.4/go.mod h1:ykjzy2wzgrlvpDCRc4LA8UXy6D8bzMSuAF3WD57Gok0= -github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= -github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY= -github.com/tklauser/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYgY= -github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ua-parser/uap-go v0.0.0-20240611065828-3a4781585db6 h1:SIKIoA4e/5Y9ZOl0DCe3eVMLPOQzJxgZpfdHHeauNTM= github.com/ua-parser/uap-go v0.0.0-20240611065828-3a4781585db6/go.mod h1:BUbeWZiieNxAuuADTBNb3/aeje6on3DhU3rpWsQSB1E= @@ -910,140 +911,144 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/collector v0.114.0 h1:XLLLOHns06P9XjVHyp0OdEMdwXvol5MLzugqQMmXYuU= -go.opentelemetry.io/collector v0.114.0/go.mod h1:XbjD4Yw9LunLo3IJu3ZZytNZ0drEVznxw1Z14Ujlw3s= -go.opentelemetry.io/collector/client v1.20.0 h1:o60wPcj5nLtaRenF+1E5p4QXFS3TDL6vHlw+GOon3rg= -go.opentelemetry.io/collector/client v1.20.0/go.mod h1:6aqkszco9FaLWCxyJEVam6PP7cUa8mPRIXeS5eZGj0U= -go.opentelemetry.io/collector/component v0.114.0 h1:SVGbm5LvHGSTEDv7p92oPuBgK5tuiWR82I9+LL4TtBE= -go.opentelemetry.io/collector/component v0.114.0/go.mod h1:MLxtjZ6UVHjDxSdhGLuJfHBHvfl1iT/Y7IaQPD24Eww= -go.opentelemetry.io/collector/component/componentstatus v0.114.0 h1:y9my/xink8KB5lK8zFAjgB2+pEh0QYy5TM972fxZY9w= -go.opentelemetry.io/collector/component/componentstatus v0.114.0/go.mod h1:RIoeCYZpPaae7QLE/1RacqzhHuXBmzRAk9H/EwYtIIs= -go.opentelemetry.io/collector/component/componenttest v0.114.0 h1:GM4FTTlfeXoVm6sZYBHImwlRN8ayh2oAfUhvaFj7Zo8= -go.opentelemetry.io/collector/component/componenttest v0.114.0/go.mod h1:ZZEJMtbJtoVC/3/9R1HzERq+cYQRxuMFQrPCpfZ4Xos= -go.opentelemetry.io/collector/config/configauth v0.114.0 h1:R2sJ6xpsLYGH0yU0vCxotzBYDKR/Hrjv0A7y9lwMyiw= -go.opentelemetry.io/collector/config/configauth v0.114.0/go.mod h1:3Z24KcCpG+WYCeQYfs/cNp5cP2BDeOqLCtOEgs/rPqM= -go.opentelemetry.io/collector/config/configcompression v1.20.0 h1:H/mvz7J/5z+O74YsO0t2tk+REnO2tzLM8TgIQ4AZ5w0= -go.opentelemetry.io/collector/config/configcompression v1.20.0/go.mod h1:pnxkFCLUZLKWzYJvfSwZnPrnm0twX14CYj2ADth5xiU= -go.opentelemetry.io/collector/config/configgrpc v0.114.0 h1:3kGI9CljNtzClF+9sg7NWZ5qUoy4qZvGxv9q3phDn7k= -go.opentelemetry.io/collector/config/configgrpc v0.114.0/go.mod h1:IHSyqSdjPXW34aif/8BhNlXxRcIVV6026jVi0/+ituY= -go.opentelemetry.io/collector/config/confighttp v0.114.0 h1:DjGsBvVm+mGK3IpJBaXianWhwcxEC1fF33cpuC1LY/I= -go.opentelemetry.io/collector/config/confighttp v0.114.0/go.mod h1:nrlNLxOZ+4JQaV9j0TiqQV7LOHhrRivPrT8nQRHED3Q= -go.opentelemetry.io/collector/config/confignet v1.20.0 h1:LrM6AuiY8N/woTP4SWhL2V0562JXwJs9MRNFZJFLtRY= -go.opentelemetry.io/collector/config/confignet v1.20.0/go.mod h1:o3v4joAEjvLwntqexg5ixMqRrU1+Vst+jWuCUaBNgOg= -go.opentelemetry.io/collector/config/configopaque v1.20.0 h1:2I48zKiyyyYqjm7y0B9OLp24ku2ZSX3nCHG0r5FdWOQ= -go.opentelemetry.io/collector/config/configopaque v1.20.0/go.mod h1:6zlLIyOoRpJJ+0bEKrlZOZon3rOp5Jrz9fMdR4twOS4= -go.opentelemetry.io/collector/config/configretry v1.20.0 h1:z679mrMlW2a6tOOYPGdrS/QfALxdzWLQUOpH8Uu+D5Y= -go.opentelemetry.io/collector/config/configretry v1.20.0/go.mod h1:KvQF5cfphq1rQm1dKR4eLDNQYw6iI2fY72NMZVa+0N0= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0 h1:kjLeyrumge6wsX6ZIkicdNOlBXaEyW2PI2ZdVXz/rzY= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0/go.mod h1:R0MBUxjSMVMIhljuDHWIygzzJWQyZHXXWIgQNxcFwhc= -go.opentelemetry.io/collector/config/configtls v1.20.0 h1:hNlJdwfyY5Qe54RLJ41lfLqKTn9ypkR7sk7JNCcSe2U= -go.opentelemetry.io/collector/config/configtls v1.20.0/go.mod h1:sav/txSHguadTYlSSK+BJO2ljJeYEtRoBahgzWAguYg= -go.opentelemetry.io/collector/config/internal v0.114.0 h1:uWSDWTJb8T6xRjKD9/XmEARakXnxgYVYKUeId78hErc= -go.opentelemetry.io/collector/config/internal v0.114.0/go.mod h1:yC7E4h1Uj0SubxcFImh6OvBHFTjMh99+A5PuyIgDWqc= -go.opentelemetry.io/collector/confmap v1.20.0 h1:ARfOwmkKxFOud1njl03yAHQ30+uenlzqCO6LBYamDTE= -go.opentelemetry.io/collector/confmap v1.20.0/go.mod h1:DMpd9Ay/ffls3JoQBQ73vWeRsz1rNuLbwjo6WtjSQus= -go.opentelemetry.io/collector/confmap/provider/envprovider v1.20.0 h1:I3xDecFXJVZBo5zJS7Y5SWBjF22XDWGZJgwotiwA5QM= -go.opentelemetry.io/collector/confmap/provider/envprovider v1.20.0/go.mod h1:CF0l8V8MNv+Wag8UkqObotFnlhMzdTFuk4/6kylKwYU= -go.opentelemetry.io/collector/confmap/provider/fileprovider v1.20.0 h1:wWxvQ7wj+1O9yDGM5m1HPEz8FJewAHAUWadAAi0KVbM= -go.opentelemetry.io/collector/confmap/provider/fileprovider v1.20.0/go.mod h1:/5HWIPjGYk8IUurs1CZUSjGaSsaQyJsfR8+Zs5rGJ6Y= -go.opentelemetry.io/collector/confmap/provider/httpprovider v1.20.0 h1:YS1nB8vDoCS8IlfX5OP3QGS90y/hfflwZ7CoPQcAOlU= -go.opentelemetry.io/collector/confmap/provider/httpprovider v1.20.0/go.mod h1:aV4UfkgcJ3eyXvfd3m694omN++1c96Joitab+YL6Xks= -go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.20.0 h1:jSXTojCPI6Xr98m99nF7qbQFnw3INLEOHRcqcHS+lak= -go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.20.0/go.mod h1:Pu95O2JE3R+0BBTbe4gpAC8ms3w6FbICHJw3WvGWrjs= -go.opentelemetry.io/collector/connector v0.114.0 h1:efGAeTCtg8zp5Hyd7Am8kBUgsSxWEFlFtAu4OX4mcEA= -go.opentelemetry.io/collector/connector v0.114.0/go.mod h1:8DhGgD8RhkF0ooELl4NOPPD/wgHuXHmY7g90RwJ2eNo= -go.opentelemetry.io/collector/connector/connectorprofiles v0.114.0 h1:uVs9gy3UfQBmH0636ouIbGIoWis7zmKN+ny4XOGm36U= -go.opentelemetry.io/collector/connector/connectorprofiles v0.114.0/go.mod h1:X681qFEAsEPMDQ0pMsD/3DqePw58sfLew1QbBKvGnmw= -go.opentelemetry.io/collector/connector/connectortest v0.114.0 h1:Fpy1JHyNOLdVzNcmxUY6Jwxdz6JDcTXL1NCfw8k1AOc= -go.opentelemetry.io/collector/connector/connectortest v0.114.0/go.mod h1:1zaAlODuL9iNyfyjHQeGCpbcaUjf5b68t8LqlwHKBNA= -go.opentelemetry.io/collector/consumer v0.114.0 h1:1zVaHvfIZowGwZRitRBRo3i+RP2StlU+GClYiofSw0Q= -go.opentelemetry.io/collector/consumer v0.114.0/go.mod h1:d+Mrzt9hsH1ub3zmwSlnQVPLeTYir4Mgo7CrWfnncN4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0 h1:r2YiELfWerb40FHD23V04gNjIkLUcjEKGxI4Vtm2iO4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0/go.mod h1:MzIrLQ5jptO2egypolhlAbZsWZr29WC4FhSxQjnxcvg= -go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.114.0 h1:0IpwQXyHDXhIaLA6w2VlD6Ca0iuX4wlfCDiF+BKCwEo= -go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.114.0/go.mod h1:9pKeVRcCT92x5/UIULMLAop+J23VYJCWSZcVhmbup5I= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 h1:5pXYy3E6UK5Huu3aQbsYL8B6E6MyWx4fvXXDn+oXZaA= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0/go.mod h1:PMq3f54KcJQO4v1tue0QxQScu7REFVADlXxXSAYMiN0= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0 h1:isaTwJK5DOy8Bs7GuLq23ejfgj8gLIo5dOUvkRnLF4g= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0/go.mod h1:GNeLPkfRPdh06n/Rv1UKa/cAtCKjN0a7ADyHjIj4HFE= -go.opentelemetry.io/collector/exporter v0.114.0 h1:5/0BBpXuCJQSQ5SQf31g7j6T4XEKkyx9mZMcA2rS5e8= -go.opentelemetry.io/collector/exporter v0.114.0/go.mod h1:atpd0wWXgh5LAZ0REU/d/Ti/q50HDfnlBIjMjJQlKFg= -go.opentelemetry.io/collector/exporter/debugexporter v0.114.0 h1:7t1ij8fuV510SRT+eabgbl4973DaAtGmTx0RuGJy8DU= -go.opentelemetry.io/collector/exporter/debugexporter v0.114.0/go.mod h1:rC8PHnf1MniZN4ryU4i5GsyXKRkMEGwEGF2hxHx/JyU= -go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.114.0 h1:W/KsD33oMg/M7Kd5/m2riliWrTg3W9IgQVNeZL3cZjs= -go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.114.0/go.mod h1:Fh47qYBjX+jm+mpWBcqmaaQucZ6KiKm5P0drEt+xNRc= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0 h1:/wmWOSBHcvtz3Pbv7+rWCqPPQuNvYaoidKKaOqZsLKs= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0/go.mod h1:epRYTkyJZTSQZBJflMGHUyUo2EdLPhsaZEyo5Qm848A= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0 h1:vo0idBJT+QACSM1KpjVLm9VeiXVwO7y4UnMpGxN6EyM= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0/go.mod h1:420ssFrhaphneybstbMeSIiqSRoaBARPgO71O17foaM= -go.opentelemetry.io/collector/exporter/nopexporter v0.114.0 h1:uMtQQjkAK62tzy2Rs/KCgRofNW7uo0EgU5xn3xmgB2w= -go.opentelemetry.io/collector/exporter/nopexporter v0.114.0/go.mod h1:jV9/E7Twphys1df6m7HgvqgJXpmppxFJb/DYy3XLR94= -go.opentelemetry.io/collector/exporter/otlpexporter v0.114.0 h1:SC/xZNCB/eCVflrhDFX4WtrpvBPsZhmXVuSvgHQBsB8= -go.opentelemetry.io/collector/exporter/otlpexporter v0.114.0/go.mod h1:q1273aUuYewtDUFwizv0AKu5/D+gbQAi8UFLKDv1eMk= -go.opentelemetry.io/collector/exporter/otlphttpexporter v0.114.0 h1:+nPJraioPpLS2Kj3+YIfErDDFHsLX/5oPMSMAYKoggM= -go.opentelemetry.io/collector/exporter/otlphttpexporter v0.114.0/go.mod h1:O+75KYmyJwK61VDsW7LHo2qFFXCTf3kEJH3ZvW1bb4Y= -go.opentelemetry.io/collector/extension v0.114.0 h1:9Qb92y8hD2WDC5aMDoj4JNQN+/5BQYJWPUPzLXX+iGw= -go.opentelemetry.io/collector/extension v0.114.0/go.mod h1:Yk2/1ptVgfTr12t+22v93nYJpioP14pURv2YercSzU0= -go.opentelemetry.io/collector/extension/auth v0.114.0 h1:1K2qh4yvG8kKR/sTAobI/rw5VxzPZoKcl3FmC195vvo= -go.opentelemetry.io/collector/extension/auth v0.114.0/go.mod h1:IjtsG+jUVJB0utKF8dAK8pLutRun3aEgASshImzsw/U= -go.opentelemetry.io/collector/extension/experimental/storage v0.114.0 h1:hLyX9UvmY0t6iBnk3CqvyNck2U0QjPACekj7pDRx2hA= -go.opentelemetry.io/collector/extension/experimental/storage v0.114.0/go.mod h1:WqYRQVJjJLE1rm+y/ks1wPdPRGWePEvE1VO07xm2J2k= -go.opentelemetry.io/collector/extension/extensioncapabilities v0.114.0 h1:3OHll7gp5XIu7FVgon+koShPy797nze6EjCDokFUG7w= -go.opentelemetry.io/collector/extension/extensioncapabilities v0.114.0/go.mod h1:f0KdeLmE2jWVBmJ1U4WmfAtz1/tQUErGPfhPLKCQ49U= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0 h1:ibXDms1qrswlvlR6b3d2BeyI8sXUXoFV11yOi9Sop8o= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0/go.mod h1:/bOYmqu5yTDfI1bJZUxFqm8ZtmcodpquebiSxiQxtDY= -go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 h1:JosqAcdWw7IGsURJNR8f17xmaGCQEtKhQt9tM0T/DEg= -go.opentelemetry.io/collector/extension/zpagesextension v0.114.0/go.mod h1:+VO4p2GZvmIMqCVyIfS/U85Xqg+HIOe+mdl/ya+jVTE= -go.opentelemetry.io/collector/featuregate v1.20.0 h1:Mi7nMy/q52eruI+6jWnMKUOeM55XvwoPnGcdB1++O8c= -go.opentelemetry.io/collector/featuregate v1.20.0/go.mod h1:47xrISO71vJ83LSMm8+yIDsUbKktUp48Ovt7RR6VbRs= -go.opentelemetry.io/collector/filter v0.114.0 h1:5I97yblUxc6rXCYRn542aSrsNQLo/dE+87XROW2b5oU= -go.opentelemetry.io/collector/filter v0.114.0/go.mod h1:Nxwc+RD9AH4y/qYtkTP+Ac19CxgW5GAB+sJU4ACLr6g= -go.opentelemetry.io/collector/internal/fanoutconsumer v0.114.0 h1:JM9huYqy5LTzmuxQmbPST3l5Ez5kJNit28c6WFWls34= -go.opentelemetry.io/collector/internal/fanoutconsumer v0.114.0/go.mod h1:V28tDU4Wvf1PfW1Ty/SBL9tpKul2iYGno/HkCWGDrj0= -go.opentelemetry.io/collector/internal/memorylimiter v0.114.0 h1:UpKQ/GtWw7Mh/PjR03NdgR9PG7uT7mnfbQVxpDQVBgk= -go.opentelemetry.io/collector/internal/memorylimiter v0.114.0/go.mod h1:QUZr3bBguTmgLJUFuqVVsOxKr7Y/2JO49k3I1tUH88U= -go.opentelemetry.io/collector/internal/sharedcomponent v0.114.0 h1:DjX9ubjkKDnioQB03FYc40FTyhR25CdobMfjinKkZ1w= -go.opentelemetry.io/collector/internal/sharedcomponent v0.114.0/go.mod h1:lYlFiGIjPjhwTS/Xc+toJ9o3D8A6cCHuK1JX+ZbujVs= -go.opentelemetry.io/collector/otelcol v0.114.0 h1:d/nmYc+adzZ70g4zBMtgujGHVNulF59ExCpuM/3ZKV4= -go.opentelemetry.io/collector/otelcol v0.114.0/go.mod h1:DGmFFao5jHSwD6G1HjUjs0CYcyrTau+u7GjTRUGKN+4= -go.opentelemetry.io/collector/otelcol/otelcoltest v0.114.0 h1:Em5e1EgrPrS90EWDWLJHCvyFIDl5PIq1DuW9zd8F3pY= -go.opentelemetry.io/collector/otelcol/otelcoltest v0.114.0/go.mod h1:YAs78SaOJsf1HNWrNH+GFTdkS58dpQI98cok6gZP4Lg= -go.opentelemetry.io/collector/pdata v1.20.0 h1:ePcwt4bdtISP0loHaE+C9xYoU2ZkIvWv89Fob16o9SM= -go.opentelemetry.io/collector/pdata v1.20.0/go.mod h1:Ox1YVLe87cZDB/TL30i4SUz1cA5s6AM6SpFMfY61ICs= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0 h1:pUNfTzsI/JUTiE+DScDM4lsrPoxnVNLI2fbTxR/oapo= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0/go.mod h1:4aNcj6WM1n1uXyFSXlhVs4ibrERgNYsTbzcYI2zGhxA= -go.opentelemetry.io/collector/pdata/testdata v0.114.0 h1:+AzszWSL1i4K6meQ8rU0JDDW55SYCXa6FVqfDixhhTo= -go.opentelemetry.io/collector/pdata/testdata v0.114.0/go.mod h1:bv8XFdCTZxG2MQB5l9dKxSxf5zBrcodwO6JOy1+AxXM= -go.opentelemetry.io/collector/pipeline v0.114.0 h1:v3YOhc5z0tD6QbO5n/pnftpIeroihM2ks9Z2yKPCcwY= -go.opentelemetry.io/collector/pipeline v0.114.0/go.mod h1:4vOvjVsoYTHVGTbfFwqfnQOSV2K3RKUHofh3jNRc2Mg= -go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.114.0 h1:LZgxMQ2zXcz8ILBefhxpZBpn/Rx+TJTncIIQy0LgtgY= -go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.114.0/go.mod h1:bmyqQCJWcA53/GtqZJ2ahwmLdFl6UelFH2nR6OJFqpw= -go.opentelemetry.io/collector/processor v0.114.0 h1:6bqQgLL7BtKrNv4YkEOGjZfkcfZv/ciJSQx1epGG9Zk= -go.opentelemetry.io/collector/processor v0.114.0/go.mod h1:DV/wa+nAmSHIDeD9NblPwkY9PbgtDQAZJ+PE5biZwPc= -go.opentelemetry.io/collector/processor/batchprocessor v0.114.0 h1:Xu+pdPGIh6gLqHW5oYJsiim1mbnG85QaaUQy0YPoL+c= -go.opentelemetry.io/collector/processor/batchprocessor v0.114.0/go.mod h1:emnnL5CaliCnWjXNpNixqpvn7uc/kyUTv2939J/reMY= -go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.114.0 h1:gfzShbdzhbA2lsRSx2z9i9QO/FJwAzOSrBW2ObPqf38= -go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.114.0/go.mod h1:leElNJO5dnpOg0o1Gr2Ok59HKADRznbrZ3u2oTfx50Q= -go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.114.0 h1:/CQJ0UQRStwBQnM4Z9lTr6D4IqEKH1iuUWVr21fP4To= -go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.114.0/go.mod h1:HD2uDr7TIWQ+TsXBLmrHu396EeClj7YNoNzoWJw4jrY= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0 h1:+P/1nLouEXTnN8DVQl+qWwO4BTkQyNPG9t/FrpUqrSI= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0/go.mod h1:3fuHeNIpINwx3bqFMprmDJyr6y5tWoWbJH599kltO5Y= -go.opentelemetry.io/collector/processor/processortest v0.114.0 h1:3FTaVXAp0LoVmUJn1ewBFckAby7AHa6/Kcdj0xuW14c= -go.opentelemetry.io/collector/processor/processortest v0.114.0/go.mod h1:OgsdOs1Fv5ZGTTJPF5nNIUJh2YkuV1acWd73yWgnti4= -go.opentelemetry.io/collector/receiver v0.114.0 h1:90SAnXAjNq7/k52/pFmmb06Cf1YauoPYtbio4aOXafY= -go.opentelemetry.io/collector/receiver v0.114.0/go.mod h1:KUGT0/D953LXbGH/D3lLPU8yrU3HfWnUqpt4W4hSOnE= -go.opentelemetry.io/collector/receiver/nopreceiver v0.114.0 h1:CMtfS6fwEwqwTMeC17A3Q2xsSkXfH4gG2SBZDr2txCw= -go.opentelemetry.io/collector/receiver/nopreceiver v0.114.0/go.mod h1:ajp6ok8iSSAcyq58wcOUJVe++1mTQ1isxqlaNUgQNzo= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.114.0 h1:8ASaxRWLe8P0pefOiYbCSZ0aXmwE4K06I8FBGc/n+J0= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.114.0/go.mod h1:3vjOvYBWGUVzuaovoumMbNHEIK3PqDs5rzEyd/nzsLU= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0 h1:ibhEfGpvNB3yrtpl2jYFabrunMk1hurxvMYpM0b1Ck4= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0/go.mod h1:UZyRfaasw+NLvN10AN8IQnmj5tQ3BOUH1uP2ctpO9f0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0 h1:D+Kh9t2n4asTnM+TiSxbrKlUemLZandWntj17BJWWb0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0/go.mod h1:mNSHQ13vFmqD+VAcRzLjStFBejbcWUn2Mp0pAd7Op+U= -go.opentelemetry.io/collector/semconv v0.114.0 h1:/eKcCJwZepQUtEuFuxa0thx2XIOvhFpaf214ZG1a11k= -go.opentelemetry.io/collector/semconv v0.114.0/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= -go.opentelemetry.io/collector/service v0.114.0 h1:MYF/4nH1CgtiLx09503xPAAUZefCzG1kaO+oanwX590= -go.opentelemetry.io/collector/service v0.114.0/go.mod h1:xH5/RapJdf5Ohh8iU8J0ZstfFYciP1oJPesiByteZxo= +go.opentelemetry.io/collector v0.115.0 h1:qUZ0bTeNBudMxNQ7FJKS//TxTjeJ7tfU/z22mcFavWU= +go.opentelemetry.io/collector v0.115.0/go.mod h1:66qx0xKnVvdwq60e1DEfb4e+zmM9szhPsv2hxZ/Mpj4= +go.opentelemetry.io/collector/client v1.21.0 h1:3Kes8lOFMYVxoxeAmX+DTEAkuS1iTA3NkSfqzGmygJA= +go.opentelemetry.io/collector/client v1.21.0/go.mod h1:jYJGiL0UA975OOyHmjbQSokNWt1OiviI5KjPOMUMGwc= +go.opentelemetry.io/collector/component v0.115.0 h1:iLte1oCiXzjiCnaOBKdsXacfFiECecpWxW3/LeriMoo= +go.opentelemetry.io/collector/component v0.115.0/go.mod h1:oIUFiH7w1eOimdeYhFI+gAIxYSiLDocKVJ0PTvX7d6s= +go.opentelemetry.io/collector/component/componentstatus v0.115.0 h1:pbpUIL+uKDfEiSgKK+S5nuSL6MDIIQYsp4b65ZGVb9M= +go.opentelemetry.io/collector/component/componentstatus v0.115.0/go.mod h1:36A+9XSiOz0Cdhq+UwwPRlEr5CYuSkEnVO9om4BH7d0= +go.opentelemetry.io/collector/component/componenttest v0.115.0 h1:9URDJ9VyP6tuij+YHjp/kSSMecnZOd7oGvzu+rw9SJY= +go.opentelemetry.io/collector/component/componenttest v0.115.0/go.mod h1:PzXvNqKLCiSADZGZFKH+IOHMkaQ0GTHuzysfVbTPKYY= +go.opentelemetry.io/collector/config/configauth v0.115.0 h1:xa+ALdyPgva3rZnLBh1H2oS5MsHP6JxSqMtQmcELnys= +go.opentelemetry.io/collector/config/configauth v0.115.0/go.mod h1:C7anpb3Rf4KswMT+dgOzkW9UX0z/65PLORpUw3p0VYc= +go.opentelemetry.io/collector/config/configcompression v1.21.0 h1:0zbPdZAgPFMAarwJEC4gaR6f/JBP686A3TYSgb3oa+E= +go.opentelemetry.io/collector/config/configcompression v1.21.0/go.mod h1:LvYG00tbPTv0NOLoZN0wXq1F5thcxvukO8INq7xyfWU= +go.opentelemetry.io/collector/config/configgrpc v0.115.0 h1:gZzXSFe6hB3RUcEeAYqk1yT+TBa+X9tp6/1x29Yg2yk= +go.opentelemetry.io/collector/config/configgrpc v0.115.0/go.mod h1:107lRZ5LdQPMdGJGd4m1GhyKxyH0az2cUOqrJgTEN8E= +go.opentelemetry.io/collector/config/confighttp v0.115.0 h1:BIy394oNXnqySJwrCqgAJu4gWgAV5aQUDD6k1hy6C8o= +go.opentelemetry.io/collector/config/confighttp v0.115.0/go.mod h1:Wr50ut12NmCEAl4bWLJryw2EjUmJTtYRg89560Q51wc= +go.opentelemetry.io/collector/config/confignet v1.21.0 h1:PeQ5YrMnfftysFL/WVaSrjPOWjD6DfeABY50pf9CZxU= +go.opentelemetry.io/collector/config/confignet v1.21.0/go.mod h1:ZppUH1hgUJOubawEsxsQ9MzEYFytqo2GnVSS7d4CVxc= +go.opentelemetry.io/collector/config/configopaque v1.21.0 h1:PcvRGkBk4Px8BQM7tX+kw4i3jBsfAHGoGQbtZg6Ox7U= +go.opentelemetry.io/collector/config/configopaque v1.21.0/go.mod h1:sW0t0iI/VfRL9VYX7Ik6XzVgPcR+Y5kejTLsYcMyDWs= +go.opentelemetry.io/collector/config/configretry v1.21.0 h1:ZHoOvAkEcv5BBeaJn8IQ6rQ4GMPZWW4S+W7R4QTEbZU= +go.opentelemetry.io/collector/config/configretry v1.21.0/go.mod h1:cleBc9I0DIWpTiiHfu9v83FUaCTqcPXmebpLxjEIqro= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0 h1:U07FinCDop+r2RjWQ3aP9ZWONC7r7kQIp1GkXQi6nsI= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0/go.mod h1:SlBEwQg0qly75rXZ6W1Ig8jN25KBVBkFIIAUI1GiAAE= +go.opentelemetry.io/collector/config/configtls v1.21.0 h1:ZfrlAYgBD8lzp04W0GxwiDmUbrvKsvDYJi+wkyiXlpA= +go.opentelemetry.io/collector/config/configtls v1.21.0/go.mod h1:5EsNefPfVCMOTlOrr3wyj7LrsOgY7V8iqRl8oFZEqtw= +go.opentelemetry.io/collector/config/internal v0.115.0 h1:eVk57iufZpUXyPJFKTb1Ebx5tmcCyroIlt427r5pxS8= +go.opentelemetry.io/collector/config/internal v0.115.0/go.mod h1:OVkadRWlKAoWjHslqjWtBLAne8ceQm8WYT71ZcBWLFc= +go.opentelemetry.io/collector/confmap v1.21.0 h1:1tIcx2/Suwg8VhuPmQw87ba0ludPmumpFCFRZZa6RXA= +go.opentelemetry.io/collector/confmap v1.21.0/go.mod h1:Rrhs+MWoaP6AswZp+ReQ2VO9dfOfcUjdjiSHBsG+nec= +go.opentelemetry.io/collector/confmap/provider/envprovider v1.21.0 h1:YLf++Z8CMp86AanfOCWUiE7vKbb1kSjgC3a9VJoxbD4= +go.opentelemetry.io/collector/confmap/provider/envprovider v1.21.0/go.mod h1:aSWLYcmgZZJDNtWN1M8JKQuehoGgOxibl1KuvKTar4M= +go.opentelemetry.io/collector/confmap/provider/fileprovider v1.21.0 h1:+zukkM+3l426iGoJkXTpLB2Z8QnZFu26TkGPjh5Rn/4= +go.opentelemetry.io/collector/confmap/provider/fileprovider v1.21.0/go.mod h1:BXBpQhF3n4CNLYO2n/mWZPd2U9ekpbLXLRGZrun1VfI= +go.opentelemetry.io/collector/confmap/provider/httpprovider v1.21.0 h1:NYYGM+SgIlTuNGjd8eGzDr8DkvOe4q7cXon8djF9yyI= +go.opentelemetry.io/collector/confmap/provider/httpprovider v1.21.0/go.mod h1:XRYbuwqq1awFuNhLDUv4aSvn6MzqX+abcevx1O+APJI= +go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.21.0 h1:P3Q9RytCMY76ORPCnkkjOa4fkuFqmZiQRor+F/nPlYE= +go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.21.0/go.mod h1:xhYhHK3yLQ78tsoaKPIGUfFulgy961ImOe2gATH3RQc= +go.opentelemetry.io/collector/connector v0.115.0 h1:4Kkm3HQFzNT1eliMOB8FbIn+PLMRJ2qQku5Vmy3V8Ko= +go.opentelemetry.io/collector/connector v0.115.0/go.mod h1:+ByuAmYLrYHoKh9B+LGqUc0N2kXcN2l8Dea8Mp6brZ8= +go.opentelemetry.io/collector/connector/connectorprofiles v0.115.0 h1:aW1f4Az0I+QJyImFccNWAXqik80bnNu27aQqi2hFfD8= +go.opentelemetry.io/collector/connector/connectorprofiles v0.115.0/go.mod h1:lmynB1CucydOsHa8RSSBh5roUZPfuiv65imXhtNzClM= +go.opentelemetry.io/collector/connector/connectortest v0.115.0 h1:GjtourFr0MJmlbtEPAZ/1BZCxkNAeJ0aMTlrxwftJ0k= +go.opentelemetry.io/collector/connector/connectortest v0.115.0/go.mod h1:f3KQXXNlh/XuV8elmnuVVyfY92dJCAovz10gD72OH0k= +go.opentelemetry.io/collector/consumer v1.21.0 h1:THKZ2Vbi6GkamjTBI2hFq5Dc4kINZTWGwQNa8d/Ty9g= +go.opentelemetry.io/collector/consumer v1.21.0/go.mod h1:FQcC4ThMtRYY41dv+IPNK8POLLhAFY3r1YR5fuP7iiY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0 h1:yli//xBCQMPZKXNgNlXemo4dvqhnFrAmCZ11DvQgmcY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0/go.mod h1:LwVzAvQ6ZVNG7mbOvurbAo+W/rKws0IcjOwriuZXqPE= +go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.115.0 h1:gaIhzpaGFWauiyznrQ3f++TbcdXxA5rpsX3L9uGjMM8= +go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.115.0/go.mod h1:7oXvuGBSawS5bc413lh1KEMcXkqBcrCqZQahOdnE24U= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 h1:H3fDuyQW1t2HWHkz96WMBQJKUevypOCjBqnqtaAWyoA= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0/go.mod h1:IzEmZ91Tp7TBxVDq8Cc9xvLsmO7H08njr6Pu9P5d9ns= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0 h1:hru0I2447y0TluCdwlKYFFtgcpyCnlM+LiOK1JZyA70= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0/go.mod h1:ybjALRJWR6aKNOzEMy1T1ruCULVDEjj4omtOJMrH/kU= +go.opentelemetry.io/collector/exporter v0.115.0 h1:JnxfpOnsuqhTPKJXVKJLS1Cv3BiVrVLzpHOjJEQw+xw= +go.opentelemetry.io/collector/exporter v0.115.0/go.mod h1:xof3fHQK8wADhaKLIJcQ7ChZaFLNC+haRdPN0wgl6kY= +go.opentelemetry.io/collector/exporter/debugexporter v0.115.0 h1:gb9VMQhcbvYqp0SJ4Hp8R9XqOLNLsoTgNJCPKpNEaVc= +go.opentelemetry.io/collector/exporter/debugexporter v0.115.0/go.mod h1:H/HS1UJlcZPNBbOcrsGZc2sPdQDHtbOjHOxMtJkmlcU= +go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.115.0 h1:fetbc740pODH6JW+H49SW0hiAJwQE+/B0SbuIlaY2rg= +go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.115.0/go.mod h1:oEKZ/d5BeaCK6Made9iwaeqmlT4lRbJSlW9nhIn/TwM= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0 h1:lSQEleCn/q9eFufcuK61NdFKU70ZlgI9dBjPCO/4CrE= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0/go.mod h1:7l5K2AecimX2kx+nZC1gKG3QkP247CO1+SodmJ4fFkQ= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0 h1:P9SMTUXQOtcaq40bGtnnAe14zRmR4/yUgj/Tb2BEf/k= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0/go.mod h1:1jMZ9gFGXglb8wfNrBZIgd+RvpZhSyFwdfE+Jtf9w4U= +go.opentelemetry.io/collector/exporter/nopexporter v0.115.0 h1:ufwLbNp7mfoSxWJcoded3D9f/nIVvCwNa/0+ZqxzkzU= +go.opentelemetry.io/collector/exporter/nopexporter v0.115.0/go.mod h1:iIJgru1t+VJVVCE5KMAKjXbq9RkK4/5FCClnWnAlGtc= +go.opentelemetry.io/collector/exporter/otlpexporter v0.115.0 h1:Kqr31VFrQvgEMzeg8T1JSXWacjUQoZph39efKN8jBpY= +go.opentelemetry.io/collector/exporter/otlpexporter v0.115.0/go.mod h1:5uy/gduFx2mH0GxJ84sY75NfzQJb9xYmgiL9Pf0dKF8= +go.opentelemetry.io/collector/exporter/otlphttpexporter v0.115.0 h1:I0qzSWGbgph+iva5/jU8tkeUTkkqqcj8+UzMxg5ubF8= +go.opentelemetry.io/collector/exporter/otlphttpexporter v0.115.0/go.mod h1:cUrv5EG12iOs5MXaecfi9K+ZATEELefpyZY6Hj4NlUo= +go.opentelemetry.io/collector/extension v0.115.0 h1:/cBb8AUdD0KMWC6V3lvCC16eP9Fg0wd1Upcp5rgvuGI= +go.opentelemetry.io/collector/extension v0.115.0/go.mod h1:HI7Ak6loyi6ZrZPsQJW1OO1wbaAW8OqXLFNQlTZnreQ= +go.opentelemetry.io/collector/extension/auth v0.115.0 h1:TTMokbBsSHZRFH48PvGSJmgSS8F3Rkr9MWGHZn8eJDk= +go.opentelemetry.io/collector/extension/auth v0.115.0/go.mod h1:3w+2mzeb2OYNOO4Bi41TUo4jr32ap2y7AOq64IDpxQo= +go.opentelemetry.io/collector/extension/auth/authtest v0.115.0 h1:OZe7dKbZ01qodSpZU0ZYzI6zpmmzJ3UvfdBSFAbSgDw= +go.opentelemetry.io/collector/extension/auth/authtest v0.115.0/go.mod h1:fk9WCXP0x91Q64Z8HZKWTHh9PWtgoWE1KXe3n2Bff3U= +go.opentelemetry.io/collector/extension/experimental/storage v0.115.0 h1:sZXw0+77092pq24CkUoTRoHQPLQUsDq6HFRNB0g5yR4= +go.opentelemetry.io/collector/extension/experimental/storage v0.115.0/go.mod h1:qjFH7Y3QYYs88By2ZB5GMSUN5k3ul4Brrq2J6lKACA0= +go.opentelemetry.io/collector/extension/extensioncapabilities v0.115.0 h1:/g25Hp5aoCNKdDjIb3Fc7XRglO8yaBRFLO/IUNPnqNI= +go.opentelemetry.io/collector/extension/extensioncapabilities v0.115.0/go.mod h1:EQx7ETiy330O6q05S2KRZsRNDg0aQEeJmVl7Ipx+Fcw= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0 h1:GBVFxFEskR8jSdu9uaQh2qpXnN5VNXhXjpJ2UjxtE8I= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0/go.mod h1:eu1ecbz5mT+cHoH2H3GmD/rOO0WsicSJD2RLrYuOmRA= +go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 h1:zYrZZocc7n0ZuDyXNkIaX0P0qk2fjMQj7NegwBJZA4k= +go.opentelemetry.io/collector/extension/zpagesextension v0.115.0/go.mod h1:OaXwNHF3MAcInBzCXrhXbTNHfIi9b7YGhXjtCFZqxNY= +go.opentelemetry.io/collector/featuregate v1.21.0 h1:+EULHPJDLMipcwAGZVp9Nm8NriRvoBBMxp7MSiIZVMI= +go.opentelemetry.io/collector/featuregate v1.21.0/go.mod h1:3GaXqflNDVwWndNGBJ1+XJFy3Fv/XrFgjMN60N3z7yg= +go.opentelemetry.io/collector/filter v0.115.0 h1:pYnHUFDSHSjEIFZit+CU09itVkDXgV+WcV2HOkjvQcE= +go.opentelemetry.io/collector/filter v0.115.0/go.mod h1:aewQ+jmvpH88gPVWpNXiWSm+wwJVxTK4f23ex2NMd2c= +go.opentelemetry.io/collector/internal/fanoutconsumer v0.115.0 h1:6DRiSECeApFq6Jj5ug77rG53R6FzJEZBfygkyMEXdpg= +go.opentelemetry.io/collector/internal/fanoutconsumer v0.115.0/go.mod h1:vgQf5HQdmLQqpDHpDq2S3nTRoUuKtRcZpRTsy+UiwYw= +go.opentelemetry.io/collector/internal/memorylimiter v0.115.0 h1:U07IJxyHZXM6eLn8cOq/Lycx6DhQZhpDOuYtIRw/d6I= +go.opentelemetry.io/collector/internal/memorylimiter v0.115.0/go.mod h1:KNcU8WVpW5y7Ij6CGnsefb7q1UZT7VvrTDhe5FKNOA4= +go.opentelemetry.io/collector/internal/sharedcomponent v0.115.0 h1:9TL6T6ALqDpumUJ0tYIuPIg5LGo4r6eoqlNArYX116o= +go.opentelemetry.io/collector/internal/sharedcomponent v0.115.0/go.mod h1:SgBLKMh11bOTPR1bdDZbi5MlqsoDBBFI3uBIwnei+0k= +go.opentelemetry.io/collector/otelcol v0.115.0 h1:wZhFGrSCZcTQ4qw4ePjI2PaSrOCejoQKAjprKD/xavs= +go.opentelemetry.io/collector/otelcol v0.115.0/go.mod h1:iK8DPvaizirIYKDl1zZG7DDYUj6GkkH4KHifVVM88vk= +go.opentelemetry.io/collector/otelcol/otelcoltest v0.115.0 h1:HNlFpQujlnvawBk8nvMGxzjDHWDCfSprxem/EpQn4u8= +go.opentelemetry.io/collector/otelcol/otelcoltest v0.115.0/go.mod h1:WsMbqYl2rm3nPFbdxQqyLXf4iu97nYLeuQ1seZIpV3Y= +go.opentelemetry.io/collector/pdata v1.21.0 h1:PG+UbiFMJ35X/WcAR7Rf/PWmWtRdW0aHlOidsR6c5MA= +go.opentelemetry.io/collector/pdata v1.21.0/go.mod h1:GKb1/zocKJMvxKbS+sl0W85lxhYBTFJ6h6I1tphVyDU= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0 h1:NI89hy13vNDw7EOnQf7Jtitks4HJFO0SUWznTssmP94= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0/go.mod h1:jGzdNfO0XTtfLjXCL/uCC1livg1LlfR+ix2WE/z3RpQ= +go.opentelemetry.io/collector/pdata/testdata v0.115.0 h1:Rblz+AKXdo3fG626jS+KSd0OSA4uMXcTQfpwed6P8LI= +go.opentelemetry.io/collector/pdata/testdata v0.115.0/go.mod h1:inNnRt6S2Nn260EfCBEcjesjlKOSsr0jPwkPqpBkt4s= +go.opentelemetry.io/collector/pipeline v0.115.0 h1:bmACBqb0e8U9ag+vGGHUP7kCfAO7HHROdtzIEg8ulus= +go.opentelemetry.io/collector/pipeline v0.115.0/go.mod h1:qE3DmoB05AW0C3lmPvdxZqd/H4po84NPzd5MrqgtL74= +go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.115.0 h1:3l9ruCAOrssTUDnyChKNzHWOdTtfThnYaoPZ1/+5sD0= +go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.115.0/go.mod h1:2Myg+law/5lcezo9PhhZ0wjCaLYdGK24s1jDWbSW9VY= +go.opentelemetry.io/collector/processor v0.115.0 h1:+fveHGRe24PZPv/F5taahGuZ9HdNW44hgNWEJhIUdyc= +go.opentelemetry.io/collector/processor v0.115.0/go.mod h1:/oLHBlLsm7tFb7zOIrA5C0j14yBtjXKAgxJJ2Bktyk4= +go.opentelemetry.io/collector/processor/batchprocessor v0.115.0 h1:dgw1jcE/YVFTs41b3Y7SerU3BBSyMEE93AYV+BAxR8E= +go.opentelemetry.io/collector/processor/batchprocessor v0.115.0/go.mod h1:imG1kDEq14UGlxyCjSCf1TUEFdSWRvF7tLoYX9nixEQ= +go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.115.0 h1:LCA2jwxy1PRc7X/AtRJfMdOANh5rVLdwo5PAM+gAuyo= +go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.115.0/go.mod h1:gPcHyza7Rek3jfrQFxw99fcWBDkkRqBaMHcUz9yYv5I= +go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.115.0 h1:r1UF8LPICTRXBL0685zV/CC8J4sWg/qm1g+sHOYMq2Y= +go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.115.0/go.mod h1:3erq5umu5a7DKXo4PBm4I5yJjc6r0aJNvBV2nVSPDuE= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0 h1:cCZAs+FXaebZPppqAN3m+X3etoSBL6NvyQo8l0hOZoo= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0/go.mod h1:kMxF0gknlWX4duuAJFi2/HuIRi6C3w95tOenRa0GKOY= +go.opentelemetry.io/collector/processor/processortest v0.115.0 h1:j9HEaYFOeOB6VYl9zGhBnhQbTkqGBa2udUvu5NTh6hc= +go.opentelemetry.io/collector/processor/processortest v0.115.0/go.mod h1:Gws+VEnp/eW3qAqPpqbKsrbnnxxNfyDjqrfUXbZfZic= +go.opentelemetry.io/collector/receiver v0.115.0 h1:55Q3Jvj6zHCIA1psKqi/3kEMJO4OqUF5tNAEYNdB1U8= +go.opentelemetry.io/collector/receiver v0.115.0/go.mod h1:nBSCh2O/WUcfgpJ+Jpz+B0z0Hn5jHeRvF2WmLij5EIY= +go.opentelemetry.io/collector/receiver/nopreceiver v0.115.0 h1:87dxAcHekbXqLtjcQjnK1An2PWkWAhTly+EXzPEgYOE= +go.opentelemetry.io/collector/receiver/nopreceiver v0.115.0/go.mod h1:Llu88KNSNwvmYPRr2PMDDbVY9zHfHEbPPB4yTjjQQe0= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.115.0 h1:NqMWsGuVy6y6VKTaPeJS7NZ9KAxhE/xyGUC7GaLYm/o= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.115.0/go.mod h1:9ituzngnjsh/YvO+Phayq9BTk/nw0rgK5ZVvX1oxULk= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0 h1:R9JLaj2Al93smIPUkbJshAkb/cY0H5JBOxIx+Zu0NG4= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0/go.mod h1:05E5hGujWeeXJmzKZwTdHyZ/+rRyrQlQB5p5Q2XY39M= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0 h1:OiB684SbHQi6/Pd3ZH0cXjYvCpBS9ilQBfTQx0wVXHg= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0/go.mod h1:Y8Z9U/bz9Xpyt8GI8DxZZgryw3mnnIw+AeKVLTD2cP8= +go.opentelemetry.io/collector/scraper v0.115.0 h1:hbfebO7x1Xm96OwqeuLz5w7QAaB3ZMlwOkUo0XzPadc= +go.opentelemetry.io/collector/scraper v0.115.0/go.mod h1:7YoCO6/4PeExLiX1FokcydJGCQUa7lUqZsqXokJ5VZ4= +go.opentelemetry.io/collector/semconv v0.115.0 h1:SoqMvg4ZEB3mz2EdAb6XYa+TuMo5Mir5FRBr3nVFUDY= +go.opentelemetry.io/collector/semconv v0.115.0/go.mod h1:N6XE8Q0JKgBN2fAhkUQtqK9LT7rEGR6+Wu/Rtbal1iI= +go.opentelemetry.io/collector/service v0.115.0 h1:k4GAOiI5tZgB2QKgwA6c3TeAVr7QL/ft5cOQbzUr8Iw= +go.opentelemetry.io/collector/service v0.115.0/go.mod h1:DKde9LMhNebdREecDSsqiTFLI2wRc+IoV4/wGxU6goY= go.opentelemetry.io/contrib/bridges/otelzap v0.6.0 h1:j8icMXyyqNf6HGuwlYhniPnVsbJIq7n+WirDu3VAJdQ= go.opentelemetry.io/contrib/bridges/otelzap v0.6.0/go.mod h1:evIOZpl+kAlU5IsaYX2Siw+IbpacAZvXemVsgt70uvw= go.opentelemetry.io/contrib/config v0.10.0 h1:2JknAzMaYjxrHkTnZh3eOme/Y2P5eHE2SWfhfV6Xd6c= @@ -1311,6 +1316,7 @@ golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= @@ -1353,9 +1359,8 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= -golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -1434,8 +1439,8 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.199.0 h1:aWUXClp+VFJmqE0JPvpZOK3LDQMyFKYIow4etYd9qxs= -google.golang.org/api v0.199.0/go.mod h1:ohG4qSztDJmZdjK/Ar6MhbAmb/Rpi4JHOqagsh90K28= +google.golang.org/api v0.188.0 h1:51y8fJ/b1AaaBRJr4yWm96fPcuxSo0JcegXE3DaHQHw= +google.golang.org/api v0.188.0/go.mod h1:VR0d+2SIiWOYG3r/jdm7adPW9hI2aRv9ETOSCQ9Beag= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1536,8 +1541,8 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= -gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +gotest.tools/v3 v3.2.0 h1:I0DwBVMGAx26dttAj1BtJLAkVGncrkkUXfJLC4Flt/I= +gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1547,15 +1552,15 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.21.1/go.mod h1:FstGROTmsSHBarKc8bylzXih8BLNYTiS3TZcsoEDg2s= k8s.io/api v0.27.1/go.mod h1:z5g/BpAiD+f6AArpqNjkY+cji8ueZDU/WV1jcj5Jk4E= -k8s.io/api v0.31.2 h1:3wLBbL5Uom/8Zy98GRPXpJ254nEFpl+hwndmk9RwmL0= -k8s.io/api v0.31.2/go.mod h1:bWmGvrGPssSK1ljmLzd3pwCQ9MgoTsRCuK35u6SygUk= +k8s.io/api v0.31.3 h1:umzm5o8lFbdN/hIXbrK9oRpOproJO62CV1zqxXrLgk8= +k8s.io/api v0.31.3/go.mod h1:UJrkIp9pnMOI9K2nlL6vwpxRzzEX5sWgn8kGQe92kCE= k8s.io/apimachinery v0.21.1/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY= k8s.io/apimachinery v0.27.1/go.mod h1:5ikh59fK3AJ287GUvpUsryoMFtH9zj/ARfWCo3AyXTM= -k8s.io/apimachinery v0.31.2 h1:i4vUt2hPK56W6mlT7Ry+AO8eEsyxMD1U44NR22CLTYw= -k8s.io/apimachinery v0.31.2/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/apimachinery v0.31.3 h1:6l0WhcYgasZ/wk9ktLq5vLaoXJJr5ts6lkaQzgeYPq4= +k8s.io/apimachinery v0.31.3/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= k8s.io/client-go v0.21.1/go.mod h1:/kEw4RgW+3xnBGzvp9IWxKSNA+lXn3A7AuH3gdOAzLs= -k8s.io/client-go v0.31.2 h1:Y2F4dxU5d3AQj+ybwSMqQnpZH9F30//1ObxOKlTI9yc= -k8s.io/client-go v0.31.2/go.mod h1:NPa74jSVR/+eez2dFsEIHNa+3o09vtNaWwWwb1qSxSs= +k8s.io/client-go v0.31.3 h1:CAlZuM+PH2cm+86LOBemaJI/lQ5linJ6UFxKX/SoG+4= +k8s.io/client-go v0.31.3/go.mod h1:2CgjPUTpv3fE5dNygAr2NcM8nhHzXvxB8KL5gYc3kJs= k8s.io/code-generator v0.21.1/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= @@ -1569,13 +1574,13 @@ k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE= k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a/go.mod h1:y5VtZWM9sHHc2ZodIH/6SHzXj+TPU5USoA8lcIeKEKY= -k8s.io/kube-openapi v0.0.0-20240430033511-f0e62f92d13f h1:0LQagt0gDpKqvIkAMPaRGcXawNMouPECM1+F9BVxEaM= -k8s.io/kube-openapi v0.0.0-20240430033511-f0e62f92d13f/go.mod h1:S9tOR0FxgyusSNR+MboCuiDpVWkAifZvaYI1Q2ubgro= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20230209194617-a36077c30491/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -k8s.io/utils v0.0.0-20240821151609-f90d01438635 h1:2wThSvJoW/Ncn9TmQEYXRnevZXi2duqHWf5OX9S3zjI= -k8s.io/utils v0.0.0-20240821151609-f90d01438635/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/comp/otelcol/collector-contrib/impl/manifest.yaml b/comp/otelcol/collector-contrib/impl/manifest.yaml index 6f878f6d19c84..952a5f97e483f 100644 --- a/comp/otelcol/collector-contrib/impl/manifest.yaml +++ b/comp/otelcol/collector-contrib/impl/manifest.yaml @@ -1,83 +1,83 @@ connectors: - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector - v0.114.0 + v0.115.0 dist: description: Datadog OpenTelemetry Collector module: github.com/DataDog/datadog-agent/comp/otelcol/collector-contrib/impl name: otelcol-contrib output_path: ./comp/otelcol/collector-contrib/impl - version: 0.114.0 + version: 0.115.0 exporters: -- gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.114.0 -- gomod: go.opentelemetry.io/collector/exporter/nopexporter v0.114.0 -- gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.114.0 -- gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.114.0 +- gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.115.0 +- gomod: go.opentelemetry.io/collector/exporter/nopexporter v0.115.0 +- gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.115.0 +- gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter - v0.114.0 + v0.115.0 extensions: -- gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 +- gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver - v0.114.0 + v0.115.0 processors: -- gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.114.0 -- gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.114.0 +- gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.115.0 +- gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor - v0.114.0 + v0.115.0 providers: -- gomod: go.opentelemetry.io/collector/confmap/provider/envprovider v1.20.0 -- gomod: go.opentelemetry.io/collector/confmap/provider/fileprovider v1.20.0 -- gomod: go.opentelemetry.io/collector/confmap/provider/httpprovider v1.20.0 -- gomod: go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.20.0 -- gomod: go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.20.0 +- gomod: go.opentelemetry.io/collector/confmap/provider/envprovider v1.21.0 +- gomod: go.opentelemetry.io/collector/confmap/provider/fileprovider v1.21.0 +- gomod: go.opentelemetry.io/collector/confmap/provider/httpprovider v1.21.0 +- gomod: go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.21.0 +- gomod: go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.21.0 receivers: -- gomod: go.opentelemetry.io/collector/receiver/nopreceiver v0.114.0 -- gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.114.0 +- gomod: go.opentelemetry.io/collector/receiver/nopreceiver v0.115.0 +- gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver - v0.114.0 + v0.115.0 replaces: - github.com/googleapis/gnostic v0.5.6 => github.com/googleapis/gnostic v0.5.5 - github.com/docker/go-connections v0.4.1-0.20210727194412-58542c764a11 => github.com/docker/go-connections diff --git a/comp/otelcol/collector/impl/collector.go b/comp/otelcol/collector/impl/collector.go index 7da391585dd7d..5bc453ed970ef 100644 --- a/comp/otelcol/collector/impl/collector.go +++ b/comp/otelcol/collector/impl/collector.go @@ -139,7 +139,7 @@ func addFactories(reqs Requires, factories otelcol.Factories) { } var buildInfo = component.BuildInfo{ - Version: "v0.114.0", + Version: "v0.115.0", Command: filepath.Base(os.Args[0]), Description: "Datadog Agent OpenTelemetry Collector", } diff --git a/comp/otelcol/converter/def/go.mod b/comp/otelcol/converter/def/go.mod index a0cb90be3f0d1..eea27b7e5bbd3 100644 --- a/comp/otelcol/converter/def/go.mod +++ b/comp/otelcol/converter/def/go.mod @@ -2,7 +2,7 @@ module github.com/DataDog/datadog-agent/comp/otelcol/converter/def go 1.22.0 -require go.opentelemetry.io/collector/confmap v1.20.0 +require go.opentelemetry.io/collector/confmap v1.21.0 require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect @@ -12,7 +12,6 @@ require ( github.com/knadh/koanf/v2 v2.1.2 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect - github.com/stretchr/testify v1.10.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/comp/otelcol/converter/def/go.sum b/comp/otelcol/converter/def/go.sum index 3a078b063a674..42f05aac3c99a 100644 --- a/comp/otelcol/converter/def/go.sum +++ b/comp/otelcol/converter/def/go.sum @@ -22,8 +22,8 @@ github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjR github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -go.opentelemetry.io/collector/confmap v1.20.0 h1:ARfOwmkKxFOud1njl03yAHQ30+uenlzqCO6LBYamDTE= -go.opentelemetry.io/collector/confmap v1.20.0/go.mod h1:DMpd9Ay/ffls3JoQBQ73vWeRsz1rNuLbwjo6WtjSQus= +go.opentelemetry.io/collector/confmap v1.21.0 h1:1tIcx2/Suwg8VhuPmQw87ba0ludPmumpFCFRZZa6RXA= +go.opentelemetry.io/collector/confmap v1.21.0/go.mod h1:Rrhs+MWoaP6AswZp+ReQ2VO9dfOfcUjdjiSHBsG+nec= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= diff --git a/comp/otelcol/converter/impl/go.mod b/comp/otelcol/converter/impl/go.mod index f4c649d45be37..0910f004f852c 100644 --- a/comp/otelcol/converter/impl/go.mod +++ b/comp/otelcol/converter/impl/go.mod @@ -42,12 +42,12 @@ require ( github.com/DataDog/datadog-agent/comp/core/config v0.56.2 github.com/DataDog/datadog-agent/comp/otelcol/converter/def v0.56.0-rc.3 github.com/stretchr/testify v1.10.0 - go.opentelemetry.io/collector/confmap v1.20.0 - go.opentelemetry.io/collector/confmap/provider/envprovider v1.20.0 - go.opentelemetry.io/collector/confmap/provider/fileprovider v1.20.0 - go.opentelemetry.io/collector/confmap/provider/httpprovider v1.20.0 - go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.20.0 - go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.20.0 + go.opentelemetry.io/collector/confmap v1.21.0 + go.opentelemetry.io/collector/confmap/provider/envprovider v1.21.0 + go.opentelemetry.io/collector/confmap/provider/fileprovider v1.21.0 + go.opentelemetry.io/collector/confmap/provider/httpprovider v1.21.0 + go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.21.0 + go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.21.0 go.uber.org/zap v1.27.0 ) diff --git a/comp/otelcol/converter/impl/go.sum b/comp/otelcol/converter/impl/go.sum index 6a6b8e8abfdf0..edcc6b1df46e4 100644 --- a/comp/otelcol/converter/impl/go.sum +++ b/comp/otelcol/converter/impl/go.sum @@ -230,18 +230,18 @@ github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1: github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.opentelemetry.io/collector/confmap v1.20.0 h1:ARfOwmkKxFOud1njl03yAHQ30+uenlzqCO6LBYamDTE= -go.opentelemetry.io/collector/confmap v1.20.0/go.mod h1:DMpd9Ay/ffls3JoQBQ73vWeRsz1rNuLbwjo6WtjSQus= -go.opentelemetry.io/collector/confmap/provider/envprovider v1.20.0 h1:I3xDecFXJVZBo5zJS7Y5SWBjF22XDWGZJgwotiwA5QM= -go.opentelemetry.io/collector/confmap/provider/envprovider v1.20.0/go.mod h1:CF0l8V8MNv+Wag8UkqObotFnlhMzdTFuk4/6kylKwYU= -go.opentelemetry.io/collector/confmap/provider/fileprovider v1.20.0 h1:wWxvQ7wj+1O9yDGM5m1HPEz8FJewAHAUWadAAi0KVbM= -go.opentelemetry.io/collector/confmap/provider/fileprovider v1.20.0/go.mod h1:/5HWIPjGYk8IUurs1CZUSjGaSsaQyJsfR8+Zs5rGJ6Y= -go.opentelemetry.io/collector/confmap/provider/httpprovider v1.20.0 h1:YS1nB8vDoCS8IlfX5OP3QGS90y/hfflwZ7CoPQcAOlU= -go.opentelemetry.io/collector/confmap/provider/httpprovider v1.20.0/go.mod h1:aV4UfkgcJ3eyXvfd3m694omN++1c96Joitab+YL6Xks= -go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.20.0 h1:0BJHAeKFb46FCT0ehOmmGs0v31cGuAh4DIic07J71NU= -go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.20.0/go.mod h1:gBiweuH4EDuPh9mpLCB/wPZzostdA+gKY8hABwbotQk= -go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.20.0 h1:jSXTojCPI6Xr98m99nF7qbQFnw3INLEOHRcqcHS+lak= -go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.20.0/go.mod h1:Pu95O2JE3R+0BBTbe4gpAC8ms3w6FbICHJw3WvGWrjs= +go.opentelemetry.io/collector/confmap v1.21.0 h1:1tIcx2/Suwg8VhuPmQw87ba0ludPmumpFCFRZZa6RXA= +go.opentelemetry.io/collector/confmap v1.21.0/go.mod h1:Rrhs+MWoaP6AswZp+ReQ2VO9dfOfcUjdjiSHBsG+nec= +go.opentelemetry.io/collector/confmap/provider/envprovider v1.21.0 h1:YLf++Z8CMp86AanfOCWUiE7vKbb1kSjgC3a9VJoxbD4= +go.opentelemetry.io/collector/confmap/provider/envprovider v1.21.0/go.mod h1:aSWLYcmgZZJDNtWN1M8JKQuehoGgOxibl1KuvKTar4M= +go.opentelemetry.io/collector/confmap/provider/fileprovider v1.21.0 h1:+zukkM+3l426iGoJkXTpLB2Z8QnZFu26TkGPjh5Rn/4= +go.opentelemetry.io/collector/confmap/provider/fileprovider v1.21.0/go.mod h1:BXBpQhF3n4CNLYO2n/mWZPd2U9ekpbLXLRGZrun1VfI= +go.opentelemetry.io/collector/confmap/provider/httpprovider v1.21.0 h1:NYYGM+SgIlTuNGjd8eGzDr8DkvOe4q7cXon8djF9yyI= +go.opentelemetry.io/collector/confmap/provider/httpprovider v1.21.0/go.mod h1:XRYbuwqq1awFuNhLDUv4aSvn6MzqX+abcevx1O+APJI= +go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.21.0 h1:2EEUI2DzA2DvrvCImMWRSNqIHdRJ6+qbgvZL44Zb2ac= +go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.21.0/go.mod h1:axezjjQWY4kZc5pr/+wOKAuqSYMhea/tWzP5S30h+dc= +go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.21.0 h1:P3Q9RytCMY76ORPCnkkjOa4fkuFqmZiQRor+F/nPlYE= +go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.21.0/go.mod h1:xhYhHK3yLQ78tsoaKPIGUfFulgy961ImOe2gATH3RQc= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= diff --git a/comp/otelcol/ddflareextension/def/go.mod b/comp/otelcol/ddflareextension/def/go.mod index bda6d4d0adf21..d0d35f560a084 100644 --- a/comp/otelcol/ddflareextension/def/go.mod +++ b/comp/otelcol/ddflareextension/def/go.mod @@ -2,16 +2,15 @@ module github.com/DataDog/datadog-agent/comp/otelcol/ddflareextension/def go 1.22.0 -require go.opentelemetry.io/collector/extension v0.114.0 +require go.opentelemetry.io/collector/extension v0.115.0 require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/stretchr/testify v1.10.0 // indirect - go.opentelemetry.io/collector/component v0.114.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.114.0 // indirect - go.opentelemetry.io/collector/pdata v1.20.0 // indirect + go.opentelemetry.io/collector/component v0.115.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.115.0 // indirect + go.opentelemetry.io/collector/pdata v1.21.0 // indirect go.opentelemetry.io/otel v1.32.0 // indirect go.opentelemetry.io/otel/metric v1.32.0 // indirect go.opentelemetry.io/otel/trace v1.32.0 // indirect diff --git a/comp/otelcol/ddflareextension/def/go.sum b/comp/otelcol/ddflareextension/def/go.sum index 2285317ce7f89..2c09c99ac5912 100644 --- a/comp/otelcol/ddflareextension/def/go.sum +++ b/comp/otelcol/ddflareextension/def/go.sum @@ -16,14 +16,14 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.opentelemetry.io/collector/component v0.114.0 h1:SVGbm5LvHGSTEDv7p92oPuBgK5tuiWR82I9+LL4TtBE= -go.opentelemetry.io/collector/component v0.114.0/go.mod h1:MLxtjZ6UVHjDxSdhGLuJfHBHvfl1iT/Y7IaQPD24Eww= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0 h1:kjLeyrumge6wsX6ZIkicdNOlBXaEyW2PI2ZdVXz/rzY= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0/go.mod h1:R0MBUxjSMVMIhljuDHWIygzzJWQyZHXXWIgQNxcFwhc= -go.opentelemetry.io/collector/extension v0.114.0 h1:9Qb92y8hD2WDC5aMDoj4JNQN+/5BQYJWPUPzLXX+iGw= -go.opentelemetry.io/collector/extension v0.114.0/go.mod h1:Yk2/1ptVgfTr12t+22v93nYJpioP14pURv2YercSzU0= -go.opentelemetry.io/collector/pdata v1.20.0 h1:ePcwt4bdtISP0loHaE+C9xYoU2ZkIvWv89Fob16o9SM= -go.opentelemetry.io/collector/pdata v1.20.0/go.mod h1:Ox1YVLe87cZDB/TL30i4SUz1cA5s6AM6SpFMfY61ICs= +go.opentelemetry.io/collector/component v0.115.0 h1:iLte1oCiXzjiCnaOBKdsXacfFiECecpWxW3/LeriMoo= +go.opentelemetry.io/collector/component v0.115.0/go.mod h1:oIUFiH7w1eOimdeYhFI+gAIxYSiLDocKVJ0PTvX7d6s= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0 h1:U07FinCDop+r2RjWQ3aP9ZWONC7r7kQIp1GkXQi6nsI= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0/go.mod h1:SlBEwQg0qly75rXZ6W1Ig8jN25KBVBkFIIAUI1GiAAE= +go.opentelemetry.io/collector/extension v0.115.0 h1:/cBb8AUdD0KMWC6V3lvCC16eP9Fg0wd1Upcp5rgvuGI= +go.opentelemetry.io/collector/extension v0.115.0/go.mod h1:HI7Ak6loyi6ZrZPsQJW1OO1wbaAW8OqXLFNQlTZnreQ= +go.opentelemetry.io/collector/pdata v1.21.0 h1:PG+UbiFMJ35X/WcAR7Rf/PWmWtRdW0aHlOidsR6c5MA= +go.opentelemetry.io/collector/pdata v1.21.0/go.mod h1:GKb1/zocKJMvxKbS+sl0W85lxhYBTFJ6h6I1tphVyDU= go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg= go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M= diff --git a/comp/otelcol/ddflareextension/impl/go.mod b/comp/otelcol/ddflareextension/impl/go.mod index 5f0036a040fb9..d25ace6070271 100644 --- a/comp/otelcol/ddflareextension/impl/go.mod +++ b/comp/otelcol/ddflareextension/impl/go.mod @@ -113,58 +113,58 @@ require ( github.com/DataDog/datadog-agent/pkg/version v0.59.0 github.com/google/go-cmp v0.6.0 github.com/gorilla/mux v1.8.1 - github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.114.0 - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0 + github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.115.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0 github.com/stretchr/testify v1.10.0 - go.opentelemetry.io/collector/component v0.114.0 - go.opentelemetry.io/collector/component/componentstatus v0.114.0 - go.opentelemetry.io/collector/component/componenttest v0.114.0 - go.opentelemetry.io/collector/config/confighttp v0.114.0 - go.opentelemetry.io/collector/confmap v1.20.0 - go.opentelemetry.io/collector/confmap/provider/envprovider v1.20.0 - go.opentelemetry.io/collector/confmap/provider/fileprovider v1.20.0 - go.opentelemetry.io/collector/confmap/provider/httpprovider v1.20.0 - go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.20.0 - go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.20.0 - go.opentelemetry.io/collector/connector v0.114.0 - go.opentelemetry.io/collector/exporter v0.114.0 - go.opentelemetry.io/collector/exporter/otlpexporter v0.114.0 - go.opentelemetry.io/collector/exporter/otlphttpexporter v0.114.0 - go.opentelemetry.io/collector/extension v0.114.0 - go.opentelemetry.io/collector/extension/extensioncapabilities v0.114.0 - go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 - go.opentelemetry.io/collector/otelcol v0.114.0 - go.opentelemetry.io/collector/processor v0.114.0 - go.opentelemetry.io/collector/processor/batchprocessor v0.114.0 - go.opentelemetry.io/collector/receiver v0.114.0 - go.opentelemetry.io/collector/receiver/nopreceiver v0.114.0 - go.opentelemetry.io/collector/receiver/otlpreceiver v0.114.0 + go.opentelemetry.io/collector/component v0.115.0 + go.opentelemetry.io/collector/component/componentstatus v0.115.0 + go.opentelemetry.io/collector/component/componenttest v0.115.0 + go.opentelemetry.io/collector/config/confighttp v0.115.0 + go.opentelemetry.io/collector/confmap v1.21.0 + go.opentelemetry.io/collector/confmap/provider/envprovider v1.21.0 + go.opentelemetry.io/collector/confmap/provider/fileprovider v1.21.0 + go.opentelemetry.io/collector/confmap/provider/httpprovider v1.21.0 + go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.21.0 + go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.21.0 + go.opentelemetry.io/collector/connector v0.115.0 + go.opentelemetry.io/collector/exporter v0.115.0 + go.opentelemetry.io/collector/exporter/otlpexporter v0.115.0 + go.opentelemetry.io/collector/exporter/otlphttpexporter v0.115.0 + go.opentelemetry.io/collector/extension v0.115.0 + go.opentelemetry.io/collector/extension/extensioncapabilities v0.115.0 + go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 + go.opentelemetry.io/collector/otelcol v0.115.0 + go.opentelemetry.io/collector/processor v0.115.0 + go.opentelemetry.io/collector/processor/batchprocessor v0.115.0 + go.opentelemetry.io/collector/receiver v0.115.0 + go.opentelemetry.io/collector/receiver/nopreceiver v0.115.0 + go.opentelemetry.io/collector/receiver/otlpreceiver v0.115.0 go.uber.org/zap v1.27.0 gopkg.in/yaml.v2 v2.4.0 ) -require go.opentelemetry.io/collector/extension/extensiontest v0.114.0 // indirect +require go.opentelemetry.io/collector/extension/extensiontest v0.115.0 // indirect require ( github.com/knadh/koanf/maps v0.1.1 // indirect github.com/knadh/koanf/providers/confmap v0.1.0 // indirect github.com/moby/sys/userns v0.1.0 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect - go.opentelemetry.io/collector/connector/connectortest v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumererror v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/exporter/exportertest v0.114.0 // indirect - go.opentelemetry.io/collector/internal/fanoutconsumer v0.114.0 // indirect - go.opentelemetry.io/collector/internal/sharedcomponent v0.114.0 // indirect - go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/processor/processortest v0.114.0 // indirect - go.opentelemetry.io/collector/receiver/receivertest v0.114.0 // indirect + go.opentelemetry.io/collector/connector/connectortest v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumererror v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/exporter/exportertest v0.115.0 // indirect + go.opentelemetry.io/collector/internal/fanoutconsumer v0.115.0 // indirect + go.opentelemetry.io/collector/internal/sharedcomponent v0.115.0 // indirect + go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/processor/processortest v0.115.0 // indirect + go.opentelemetry.io/collector/receiver/receivertest v0.115.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.6.0 // indirect ) @@ -397,15 +397,15 @@ require ( github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect github.com/onsi/ginkgo/v2 v2.20.2 // indirect github.com/onsi/gomega v1.34.1 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.114.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.115.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0 // indirect github.com/opencontainers/runtime-spec v1.2.0 // indirect @@ -430,7 +430,7 @@ require ( github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 // indirect github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shirou/gopsutil/v4 v4.24.10 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect @@ -450,33 +450,33 @@ require ( github.com/x448/float16 v0.8.4 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/collector v0.114.0 // indirect - go.opentelemetry.io/collector/client v1.20.0 // indirect - go.opentelemetry.io/collector/config/configauth v0.114.0 // indirect - go.opentelemetry.io/collector/config/configcompression v1.20.0 // indirect - go.opentelemetry.io/collector/config/configgrpc v0.114.0 // indirect - go.opentelemetry.io/collector/config/confignet v1.20.0 // indirect - go.opentelemetry.io/collector/config/configopaque v1.20.0 // indirect - go.opentelemetry.io/collector/config/configretry v1.20.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.114.0 // indirect - go.opentelemetry.io/collector/config/configtls v1.20.0 // indirect - go.opentelemetry.io/collector/config/internal v0.114.0 // indirect - go.opentelemetry.io/collector/connector/connectorprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/consumer v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumertest v0.114.0 // indirect - go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/extension/auth v0.114.0 // indirect - go.opentelemetry.io/collector/extension/experimental/storage v0.114.0 // indirect - go.opentelemetry.io/collector/featuregate v1.20.0 // indirect - go.opentelemetry.io/collector/pdata v1.20.0 // indirect - go.opentelemetry.io/collector/pdata/pprofile v0.114.0 // indirect - go.opentelemetry.io/collector/pdata/testdata v0.114.0 // indirect - go.opentelemetry.io/collector/pipeline v0.114.0 // indirect - go.opentelemetry.io/collector/processor/processorprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/semconv v0.114.0 // indirect - go.opentelemetry.io/collector/service v0.114.0 // indirect + go.opentelemetry.io/collector v0.115.0 // indirect + go.opentelemetry.io/collector/client v1.21.0 // indirect + go.opentelemetry.io/collector/config/configauth v0.115.0 // indirect + go.opentelemetry.io/collector/config/configcompression v1.21.0 // indirect + go.opentelemetry.io/collector/config/configgrpc v0.115.0 // indirect + go.opentelemetry.io/collector/config/confignet v1.21.0 // indirect + go.opentelemetry.io/collector/config/configopaque v1.21.0 // indirect + go.opentelemetry.io/collector/config/configretry v1.21.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.115.0 // indirect + go.opentelemetry.io/collector/config/configtls v1.21.0 // indirect + go.opentelemetry.io/collector/config/internal v0.115.0 // indirect + go.opentelemetry.io/collector/connector/connectorprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/consumer v1.21.0 // indirect + go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumertest v0.115.0 // indirect + go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/extension/auth v0.115.0 // indirect + go.opentelemetry.io/collector/extension/experimental/storage v0.115.0 // indirect + go.opentelemetry.io/collector/featuregate v1.21.0 // indirect + go.opentelemetry.io/collector/pdata v1.21.0 // indirect + go.opentelemetry.io/collector/pdata/pprofile v0.115.0 // indirect + go.opentelemetry.io/collector/pdata/testdata v0.115.0 // indirect + go.opentelemetry.io/collector/pipeline v0.115.0 // indirect + go.opentelemetry.io/collector/processor/processorprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/semconv v0.115.0 // indirect + go.opentelemetry.io/collector/service v0.115.0 // indirect go.opentelemetry.io/contrib/config v0.10.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 // indirect @@ -525,9 +525,9 @@ require ( gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect - k8s.io/api v0.31.2 // indirect - k8s.io/apimachinery v0.31.2 // indirect - k8s.io/client-go v0.31.2 // indirect + k8s.io/api v0.31.3 // indirect + k8s.io/apimachinery v0.31.3 // indirect + k8s.io/client-go v0.31.3 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20240430033511-f0e62f92d13f // indirect k8s.io/utils v0.0.0-20240821151609-f90d01438635 // indirect diff --git a/comp/otelcol/ddflareextension/impl/go.sum b/comp/otelcol/ddflareextension/impl/go.sum index aa6426785ee4b..a9f2e49111934 100644 --- a/comp/otelcol/ddflareextension/impl/go.sum +++ b/comp/otelcol/ddflareextension/impl/go.sum @@ -590,58 +590,58 @@ github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4 github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= -github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.114.0 h1:cjiWapRbK28GxsZyKCegQOLJCEiwIWEV+INvxrS8HSA= -github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.114.0/go.mod h1:1Mx3wOciTCjrN9PgVAB4uFBeoqEfyeZEuvpguOasm4s= -github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.114.0 h1:oA79wMjQSQBKz+X90LD5edNOyaEsewspJRBYgxliEMA= -github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.114.0/go.mod h1:uk7Z36vhLtevNy5672jGxgzNJA2LND6wmispTuhHCxI= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.114.0 h1:K1/5bZ5EbmxHH4cfvPo/3sYrHUVnM6H86C0dVkf+6TM= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.114.0/go.mod h1:XWnw+AWGoINC/fG4urgmiLVXDaYeqkRVLKUJMPqC3Ls= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.114.0 h1:quLs6NbDeG2x2eLmncaq/P4yvnCPLAelFqXac2eMRSw= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.114.0/go.mod h1:xX2v2kixYWZbFvnT5re3BGg2pyLy78KSIiMed7P2c/c= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0 h1:G7SHyt5TvFSEsiaxyhZdqkjcRoK2rP5wl4a3Mu31JM4= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0/go.mod h1:TRsDReUh7ALEUutKVoLlGMRc2QECZAyT/5g/cpAr+aw= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0 h1:6g5EvbygaEBqed0rJotGHcfxgxGV8hSN/4ZoZFfac5M= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0/go.mod h1:gU87iMdDAdHrQQCWTURbrlE/dLYgFecJ/+WBHuNMjQI= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.114.0 h1:4qELD/ZwgvXE5PshGzJ9Eu+JEQdLIok6V1x8rvqL+yk= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.114.0/go.mod h1:3U1KoAsmQd9H37t8VkesFfB56tThrPsNVG+ddsMJ2zM= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.114.0 h1:0LbaoE7Aof8J4CVQ5kYv1QbuL3usTxLRSMFisDNBX9U= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.114.0/go.mod h1:ByoGXMLeHE/k5ELO3EITitVmvq3bh4Z/GVwWZZxrQ5s= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.114.0 h1:d2wCLlENxH4I2axQWaogivx/5ZIjDYgn9MIf6sFxlJ4= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.114.0/go.mod h1:Psyligv8GKL9WI3TraW3BLwkOX4TRxaaa1BBQQyICzA= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.114.0 h1:WrVBqO/ps3KvUyEhtdL/uDDHhKoszLEE1ywDbwskNRg= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.114.0/go.mod h1:JYklzR+ZxQaxjzlfJP3bxX6rQFl/Hbo0vd3yNj/1s1s= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.114.0 h1:dtW9JkkpAm33Y47estFyqEL0CW05DHGmlLQxZUSx78w= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.114.0/go.mod h1:FcClDm9XVV5tzUDzmH2Mhe6TfYiZ/3GSAQITnuCjZgg= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.114.0 h1:cGJRIzB5N3oe1c8vD5HqCuy4dbQE9EDJZ9C7vJn+K8U= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.114.0/go.mod h1:p53t8aSCVoTKXVOsNx62rDLrSdEkBFB4H85yEiTWkyI= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.114.0 h1:lt87gwZaUP9Lh0EAgZFTYego0k89NU8K6Qkk82oR/n8= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.114.0/go.mod h1:nxxBsX9Z2Q7HQvybUTx8CzUvYCJewKBM1Eys6SiS0eg= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.114.0 h1:Wq1iTmd0K1SSOIA43Wy2uAU6SB4f9ogyN3ZmvDgTURg= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.114.0/go.mod h1:VCj9H0QxRBWSgbl1pUo8p0NrqnmcxpPo0QjKLFtWkO0= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.114.0 h1:SXi6JSSs2cWROnC1U2v3XysG3t58ilGUwoLqxpGuwFU= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.114.0/go.mod h1:LSd6sus2Jvpg3M3vM4HgmVh3/dmMtcJmTqELrFOQFRg= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.114.0 h1:G6U2eHR2CGSYb2btot6l05o+mdqsC0ZN7dH8QssXSdk= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.114.0/go.mod h1:kZQvVVzpahX8kFUfEBmzFtDhkKAQW6i8XQCMozDRUlk= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.114.0 h1:m8uPYU2rTj0sKiYgzCvIPajD3meiYsu+nX0hplUnlEU= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.114.0/go.mod h1:P0BaP92pXPkTyTmObfLYUoRBfMYU+i0hdS3oM1DpGJo= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.114.0 h1:Qg80zPfNMlub7LO07VMDElOu3M2oxqdZgvvB+X72a4U= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.114.0/go.mod h1:5qsGcjFV3WFI6J2onAlkR7Xd/8VtwJcECaDRZfW4Tb4= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.114.0 h1:PwUMZ6fHMEUV5i9hUly+z3UujDTTdxQtWzL0rWc/lgA= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.114.0/go.mod h1:YEHL6w4vvB9b0/lNwGjz8DyWXTF/7Xw0Hkgc3mGWwa8= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0 h1:mtSN/07RGQPi1/zHVSZg4G0qRtOoJpPew5jsQWv9uS0= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0/go.mod h1:C9Zgh/N3j4NR2D+1FGAA1YizhFW9OS51DwLUFJTdXN4= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.114.0 h1:eJxap/u8Q5wYnBcJTrTS1Tq6wq31SOlIr+FMJX5ZoC8= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.114.0/go.mod h1:H7uIA2RBaxit2mSwSU8Wc7QXSJX7r8UR66YvdcLmtto= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.114.0 h1:tG98F8g5T7lKYaoxSh9e76agmkauPtXiMbQhuWAeG+I= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.114.0/go.mod h1:eN3xPxPcRZH0wofEQ1Greu1c561qEGeYv5Zt0uedmMM= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0 h1:I4ZYVRYW3Cjb65sPENZ9kHam/JUMXNEp2n/knJ0C0Vc= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0/go.mod h1:4BhyIaOn2LS48WS+ZNix4TpP0+goq9gDEtGzth5Cr3M= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.114.0 h1:NrD8Qo2CxrHRAlLuOHm75RtO1xEnul6DDkn6tQMsuSg= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.114.0/go.mod h1:XOlJzIYwicEPMxu6Gv9TL9pS6El+ffjQOAu/wPiL+Jg= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.114.0 h1:lKG7Ghtba2l9P4FFP7I+SbVRqHEpXCGOZs367YTEwGc= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.114.0/go.mod h1:5U/lrnkK5YtIeTFXI8OzDN/d827WtI6pQvu7/59pUVA= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0 h1:gdljk66vBTT3lWfSdP4Hl7FaABdH1YPhUCH6jnG2+qY= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0/go.mod h1:T1p6ShTr8farkE4qUB2TyGUIvRSN3s17D0qY7rMqCRM= +github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.115.0 h1:Xkfl44ZRgkz1EoCCYgwPomQkV+BrYOPvv9v1Kd1gZE4= +github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.115.0/go.mod h1:Sr/upBdJeJ7nxDfmCFCl9iHosXiPoQCPHkCJslDyoUA= +github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.115.0 h1:sO4fPw0NRUibgBVvQVTqPBCBRFh0I+ODIr3HAwcWezI= +github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.115.0/go.mod h1:HqzCXJ4rxXzWNYaUtCqJzXyTsCGEKSa/d+tHcyeRDY0= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.115.0 h1:qtct9PsKONY6YOMc+QGBE/uGs8KMBcF6mvYJbyFHFt8= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.115.0/go.mod h1:OR9DKWrSRpfc3+CxwsL2QTOuHD03S9w0Jubi3EhTcy4= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.115.0 h1:u7Ht+E1ghQESffcjyaxWrXGsfSWa1VE9LKC4f2PPx84= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.115.0/go.mod h1:r3iS2mDYu+cnGjgNc8TgvuUUAN6A6/1BvR1e1YJBrqM= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0 h1:51D/x3xIAnWgVrY0lgdU+b+yb2aWd72uDqu9GhjRcNI= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0/go.mod h1:nLau1YUdjhtLrk4jXLPb2l9riQ1Ap4xytTLl7MBedBg= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0 h1:HVGG31WeB6Fn2+il2/ycWj9tDP0fxOeOqD1rKCjsBSc= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0/go.mod h1:2hYojHs5daPVWECuZsPViKwty0ojuHUEmk8GEuaFqO0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.115.0 h1:SF3gOOEkfntE3zEhY80yO7BVQ5CkaK8ecic2U2AZPHE= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.115.0/go.mod h1:jeBzX5m8O9X0LQxiryV9sJUIrn+QAwOnCBE2wZWIltQ= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.115.0 h1:vRQQFD4YpasQFUAdF030UWtaflSYFXK542bfWMGhOK0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.115.0/go.mod h1:BZ7DT+0VkKR7P3I9PGEDfVa0GdB0ty41eEcejIUXF9A= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.115.0 h1:a36EJz/mb83f6ieX0v4fNDJ1jXqpeaM6DVQXeFDvdhw= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.115.0/go.mod h1:r5/40YO1eSP5ZreOmRzVOUtDr7YG39ZIUcVjHd+9Izc= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.115.0 h1:h6zEsBtuZalQu7lKYf6ZCcj8fTocT+zxdmuOou9515Q= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.115.0/go.mod h1:6QU/K0dGCGYorkOvJmhbDFCspy4RPxRkFjf9I64y6I0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.115.0 h1:f/HrZgTf6TF97v67uEZB3v2UtBT9aQojBvnloD3LOm4= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.115.0/go.mod h1:Hp9uSq3qNJqdxu24u7RWyuPT9x1GgEUSx9US1LLeLi0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.115.0 h1:4RoU3SlcNe6Dxyxfv8JVsrN8QgjBQ44Pkt9FLKK095I= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.115.0/go.mod h1:jfPlBpZT+hvp52Ldcx+srxaqyYuKxBkxOd3KtxbveCU= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.115.0 h1:8A+iBT5G23zvBPqYx32Qh4800jHFo4X9T1fpQKVQ+4E= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.115.0/go.mod h1:AhdPvwYKu7G8LKRWzHTNQYBq27RinsMm5qSanwSA/rU= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0 h1:WOqt8NpU/JPGYDR4CiWx7g/sHV6Oe9FChzhushwmVdo= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0/go.mod h1:wV/+iU7MyXcyTaY8K5Qx+1Z3yUzrxA40nydPQA476Iw= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.115.0 h1:Z9p78zj9Qblw472mGkPieuX7mqduAp47rzMbFfq5evI= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.115.0/go.mod h1:mtxUxJEIQy27MaGR1yzcn/OK8NoddEgb7fumpEbKYss= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.115.0 h1:qdZ9EqmdM19pWhPoFA7VivBTdzP2HvNwXa3CCMHYoDQ= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.115.0/go.mod h1:mrL1MNrcg0zYAJ+aK9WtOH062dl2wN9DDG7mZk9H8v4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0 h1:MerLKMrkM4YoGF6Di0D9yMXO02yCX8mrZAi/+jJVVeI= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0/go.mod h1:R8AkVWe9G5Q0oMOapvm9HNS076E3Min8SVlmhBL3QD0= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0 h1:WEqcnWSy9dNSlGb8pYRBX7zhaz2ReyaeImlenbzNTB4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0/go.mod h1:6Mk71CakHUA3I6oM9hARDiyQypYyOolvb+4PFYyVEFg= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.115.0 h1:eoapW0JBablApkdv4C1RUuOKfz0U6SwuKMYYSAJH6fE= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.115.0/go.mod h1:hW2AaybTRcwxJySGLC3Fh1vd2VDaQhRBfa7O7w30NS8= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0 h1:R9MRrO+dSkAHBQLZjuwjv2RHXHQqF2Wtm1Ki0VKD5cs= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0/go.mod h1:rKXLXmwdUVcUHwTilroKSejbg3KSwLeYzNPSpkIEnv4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.115.0 h1:KghgAubxdDqP4eUQ+d2GzHXUAwtFxpSDToqFVnax0XA= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.115.0/go.mod h1:cW/BaYE6Uo7ZYHbmT0wVBktHP0SfeLqGHMf0qks7rOE= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.115.0 h1:ioGiKiO0WqT3PxkzanuJsPVA24FItH6nTJeDeSMFpYA= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.115.0/go.mod h1:x1W4J+pzK/Bi9jjYBYESTsPq0nRJJLZoN7cPNd0vYSU= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0 h1:vwZQ7k8oqlK0bdZYTsjP/59zjQQfjSD4fNsWIWsTu2w= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0/go.mod h1:5ObSa9amrbzbYTdAK1Qhv3D/YqCxxnQhP0sk2eWB7Oo= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.115.0 h1:olyiml73slGYORDjZNViW3nKiysC+K+h5yPsSBjUxQ4= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.115.0/go.mod h1:N00k1mTxzfS2clqxSP4Dxk7iX8GWbbuCq6LF8/ECk/M= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.115.0 h1:sLRTfXUFiqJ5Qe/NN5MUJxTaFt46E0Y/xjSY+KesCQc= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.115.0/go.mod h1:361IqXD4jnfs6G+Yn7978uv1UNozhZo4yBYy4p6Nqzc= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0 h1:GIyMUiud3T8nyCJP9KVhxVKvfcNQRBCde5uTCl6K/i0= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0/go.mod h1:x4hCznyUolxGt5cE/uXWRCckdIDrUYqH5hJddvdKZd4= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= @@ -742,8 +742,8 @@ github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbm github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shirou/gopsutil/v4 v4.24.10 h1:7VOzPtfw/5YDU+jLEoBwXwxJbQetULywoSV4RYY7HkM= -github.com/shirou/gopsutil/v4 v4.24.10/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= @@ -804,8 +804,8 @@ github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/tinylru v1.1.0 h1:XY6IUfzVTU9rpwdhKUF6nQdChgCdGjkMfLzbWyiau6I= github.com/tidwall/tinylru v1.1.0/go.mod h1:3+bX+TJ2baOLMWTnlyNWHh4QMnFyARg2TLTQ6OFbzw8= -github.com/tidwall/wal v1.1.7 h1:emc1TRjIVsdKKSnpwGBAcsAGg0767SvUk8+ygx7Bb+4= -github.com/tidwall/wal v1.1.7/go.mod h1:r6lR1j27W9EPalgHiB7zLJDYu3mzW5BQP5KrzBpYY/E= +github.com/tidwall/wal v1.1.8 h1:2qDSGdAdjaY3PEvHRva+9UFqgk+ef7cOiW1Qn5JH1y0= +github.com/tidwall/wal v1.1.8/go.mod h1:r6lR1j27W9EPalgHiB7zLJDYu3mzW5BQP5KrzBpYY/E= github.com/tinylib/msgp v1.2.4 h1:yLFeUGostXXSGW5vxfT5dXG/qzkn4schv2I7at5+hVU= github.com/tinylib/msgp v1.2.4/go.mod h1:ykjzy2wzgrlvpDCRc4LA8UXy6D8bzMSuAF3WD57Gok0= github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= @@ -848,132 +848,134 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/collector v0.114.0 h1:XLLLOHns06P9XjVHyp0OdEMdwXvol5MLzugqQMmXYuU= -go.opentelemetry.io/collector v0.114.0/go.mod h1:XbjD4Yw9LunLo3IJu3ZZytNZ0drEVznxw1Z14Ujlw3s= -go.opentelemetry.io/collector/client v1.20.0 h1:o60wPcj5nLtaRenF+1E5p4QXFS3TDL6vHlw+GOon3rg= -go.opentelemetry.io/collector/client v1.20.0/go.mod h1:6aqkszco9FaLWCxyJEVam6PP7cUa8mPRIXeS5eZGj0U= -go.opentelemetry.io/collector/component v0.114.0 h1:SVGbm5LvHGSTEDv7p92oPuBgK5tuiWR82I9+LL4TtBE= -go.opentelemetry.io/collector/component v0.114.0/go.mod h1:MLxtjZ6UVHjDxSdhGLuJfHBHvfl1iT/Y7IaQPD24Eww= -go.opentelemetry.io/collector/component/componentstatus v0.114.0 h1:y9my/xink8KB5lK8zFAjgB2+pEh0QYy5TM972fxZY9w= -go.opentelemetry.io/collector/component/componentstatus v0.114.0/go.mod h1:RIoeCYZpPaae7QLE/1RacqzhHuXBmzRAk9H/EwYtIIs= -go.opentelemetry.io/collector/component/componenttest v0.114.0 h1:GM4FTTlfeXoVm6sZYBHImwlRN8ayh2oAfUhvaFj7Zo8= -go.opentelemetry.io/collector/component/componenttest v0.114.0/go.mod h1:ZZEJMtbJtoVC/3/9R1HzERq+cYQRxuMFQrPCpfZ4Xos= -go.opentelemetry.io/collector/config/configauth v0.114.0 h1:R2sJ6xpsLYGH0yU0vCxotzBYDKR/Hrjv0A7y9lwMyiw= -go.opentelemetry.io/collector/config/configauth v0.114.0/go.mod h1:3Z24KcCpG+WYCeQYfs/cNp5cP2BDeOqLCtOEgs/rPqM= -go.opentelemetry.io/collector/config/configcompression v1.20.0 h1:H/mvz7J/5z+O74YsO0t2tk+REnO2tzLM8TgIQ4AZ5w0= -go.opentelemetry.io/collector/config/configcompression v1.20.0/go.mod h1:pnxkFCLUZLKWzYJvfSwZnPrnm0twX14CYj2ADth5xiU= -go.opentelemetry.io/collector/config/configgrpc v0.114.0 h1:3kGI9CljNtzClF+9sg7NWZ5qUoy4qZvGxv9q3phDn7k= -go.opentelemetry.io/collector/config/configgrpc v0.114.0/go.mod h1:IHSyqSdjPXW34aif/8BhNlXxRcIVV6026jVi0/+ituY= -go.opentelemetry.io/collector/config/confighttp v0.114.0 h1:DjGsBvVm+mGK3IpJBaXianWhwcxEC1fF33cpuC1LY/I= -go.opentelemetry.io/collector/config/confighttp v0.114.0/go.mod h1:nrlNLxOZ+4JQaV9j0TiqQV7LOHhrRivPrT8nQRHED3Q= -go.opentelemetry.io/collector/config/confignet v1.20.0 h1:LrM6AuiY8N/woTP4SWhL2V0562JXwJs9MRNFZJFLtRY= -go.opentelemetry.io/collector/config/confignet v1.20.0/go.mod h1:o3v4joAEjvLwntqexg5ixMqRrU1+Vst+jWuCUaBNgOg= -go.opentelemetry.io/collector/config/configopaque v1.20.0 h1:2I48zKiyyyYqjm7y0B9OLp24ku2ZSX3nCHG0r5FdWOQ= -go.opentelemetry.io/collector/config/configopaque v1.20.0/go.mod h1:6zlLIyOoRpJJ+0bEKrlZOZon3rOp5Jrz9fMdR4twOS4= -go.opentelemetry.io/collector/config/configretry v1.20.0 h1:z679mrMlW2a6tOOYPGdrS/QfALxdzWLQUOpH8Uu+D5Y= -go.opentelemetry.io/collector/config/configretry v1.20.0/go.mod h1:KvQF5cfphq1rQm1dKR4eLDNQYw6iI2fY72NMZVa+0N0= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0 h1:kjLeyrumge6wsX6ZIkicdNOlBXaEyW2PI2ZdVXz/rzY= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0/go.mod h1:R0MBUxjSMVMIhljuDHWIygzzJWQyZHXXWIgQNxcFwhc= -go.opentelemetry.io/collector/config/configtls v1.20.0 h1:hNlJdwfyY5Qe54RLJ41lfLqKTn9ypkR7sk7JNCcSe2U= -go.opentelemetry.io/collector/config/configtls v1.20.0/go.mod h1:sav/txSHguadTYlSSK+BJO2ljJeYEtRoBahgzWAguYg= -go.opentelemetry.io/collector/config/internal v0.114.0 h1:uWSDWTJb8T6xRjKD9/XmEARakXnxgYVYKUeId78hErc= -go.opentelemetry.io/collector/config/internal v0.114.0/go.mod h1:yC7E4h1Uj0SubxcFImh6OvBHFTjMh99+A5PuyIgDWqc= -go.opentelemetry.io/collector/confmap v1.20.0 h1:ARfOwmkKxFOud1njl03yAHQ30+uenlzqCO6LBYamDTE= -go.opentelemetry.io/collector/confmap v1.20.0/go.mod h1:DMpd9Ay/ffls3JoQBQ73vWeRsz1rNuLbwjo6WtjSQus= -go.opentelemetry.io/collector/confmap/provider/envprovider v1.20.0 h1:I3xDecFXJVZBo5zJS7Y5SWBjF22XDWGZJgwotiwA5QM= -go.opentelemetry.io/collector/confmap/provider/envprovider v1.20.0/go.mod h1:CF0l8V8MNv+Wag8UkqObotFnlhMzdTFuk4/6kylKwYU= -go.opentelemetry.io/collector/confmap/provider/fileprovider v1.20.0 h1:wWxvQ7wj+1O9yDGM5m1HPEz8FJewAHAUWadAAi0KVbM= -go.opentelemetry.io/collector/confmap/provider/fileprovider v1.20.0/go.mod h1:/5HWIPjGYk8IUurs1CZUSjGaSsaQyJsfR8+Zs5rGJ6Y= -go.opentelemetry.io/collector/confmap/provider/httpprovider v1.20.0 h1:YS1nB8vDoCS8IlfX5OP3QGS90y/hfflwZ7CoPQcAOlU= -go.opentelemetry.io/collector/confmap/provider/httpprovider v1.20.0/go.mod h1:aV4UfkgcJ3eyXvfd3m694omN++1c96Joitab+YL6Xks= -go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.20.0 h1:0BJHAeKFb46FCT0ehOmmGs0v31cGuAh4DIic07J71NU= -go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.20.0/go.mod h1:gBiweuH4EDuPh9mpLCB/wPZzostdA+gKY8hABwbotQk= -go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.20.0 h1:jSXTojCPI6Xr98m99nF7qbQFnw3INLEOHRcqcHS+lak= -go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.20.0/go.mod h1:Pu95O2JE3R+0BBTbe4gpAC8ms3w6FbICHJw3WvGWrjs= -go.opentelemetry.io/collector/connector v0.114.0 h1:efGAeTCtg8zp5Hyd7Am8kBUgsSxWEFlFtAu4OX4mcEA= -go.opentelemetry.io/collector/connector v0.114.0/go.mod h1:8DhGgD8RhkF0ooELl4NOPPD/wgHuXHmY7g90RwJ2eNo= -go.opentelemetry.io/collector/connector/connectorprofiles v0.114.0 h1:uVs9gy3UfQBmH0636ouIbGIoWis7zmKN+ny4XOGm36U= -go.opentelemetry.io/collector/connector/connectorprofiles v0.114.0/go.mod h1:X681qFEAsEPMDQ0pMsD/3DqePw58sfLew1QbBKvGnmw= -go.opentelemetry.io/collector/connector/connectortest v0.114.0 h1:Fpy1JHyNOLdVzNcmxUY6Jwxdz6JDcTXL1NCfw8k1AOc= -go.opentelemetry.io/collector/connector/connectortest v0.114.0/go.mod h1:1zaAlODuL9iNyfyjHQeGCpbcaUjf5b68t8LqlwHKBNA= -go.opentelemetry.io/collector/consumer v0.114.0 h1:1zVaHvfIZowGwZRitRBRo3i+RP2StlU+GClYiofSw0Q= -go.opentelemetry.io/collector/consumer v0.114.0/go.mod h1:d+Mrzt9hsH1ub3zmwSlnQVPLeTYir4Mgo7CrWfnncN4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0 h1:r2YiELfWerb40FHD23V04gNjIkLUcjEKGxI4Vtm2iO4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0/go.mod h1:MzIrLQ5jptO2egypolhlAbZsWZr29WC4FhSxQjnxcvg= -go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.114.0 h1:0IpwQXyHDXhIaLA6w2VlD6Ca0iuX4wlfCDiF+BKCwEo= -go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.114.0/go.mod h1:9pKeVRcCT92x5/UIULMLAop+J23VYJCWSZcVhmbup5I= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 h1:5pXYy3E6UK5Huu3aQbsYL8B6E6MyWx4fvXXDn+oXZaA= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0/go.mod h1:PMq3f54KcJQO4v1tue0QxQScu7REFVADlXxXSAYMiN0= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0 h1:isaTwJK5DOy8Bs7GuLq23ejfgj8gLIo5dOUvkRnLF4g= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0/go.mod h1:GNeLPkfRPdh06n/Rv1UKa/cAtCKjN0a7ADyHjIj4HFE= -go.opentelemetry.io/collector/exporter v0.114.0 h1:5/0BBpXuCJQSQ5SQf31g7j6T4XEKkyx9mZMcA2rS5e8= -go.opentelemetry.io/collector/exporter v0.114.0/go.mod h1:atpd0wWXgh5LAZ0REU/d/Ti/q50HDfnlBIjMjJQlKFg= -go.opentelemetry.io/collector/exporter/debugexporter v0.114.0 h1:7t1ij8fuV510SRT+eabgbl4973DaAtGmTx0RuGJy8DU= -go.opentelemetry.io/collector/exporter/debugexporter v0.114.0/go.mod h1:rC8PHnf1MniZN4ryU4i5GsyXKRkMEGwEGF2hxHx/JyU= -go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.114.0 h1:W/KsD33oMg/M7Kd5/m2riliWrTg3W9IgQVNeZL3cZjs= -go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.114.0/go.mod h1:Fh47qYBjX+jm+mpWBcqmaaQucZ6KiKm5P0drEt+xNRc= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0 h1:/wmWOSBHcvtz3Pbv7+rWCqPPQuNvYaoidKKaOqZsLKs= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0/go.mod h1:epRYTkyJZTSQZBJflMGHUyUo2EdLPhsaZEyo5Qm848A= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0 h1:vo0idBJT+QACSM1KpjVLm9VeiXVwO7y4UnMpGxN6EyM= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0/go.mod h1:420ssFrhaphneybstbMeSIiqSRoaBARPgO71O17foaM= -go.opentelemetry.io/collector/exporter/otlpexporter v0.114.0 h1:SC/xZNCB/eCVflrhDFX4WtrpvBPsZhmXVuSvgHQBsB8= -go.opentelemetry.io/collector/exporter/otlpexporter v0.114.0/go.mod h1:q1273aUuYewtDUFwizv0AKu5/D+gbQAi8UFLKDv1eMk= -go.opentelemetry.io/collector/exporter/otlphttpexporter v0.114.0 h1:+nPJraioPpLS2Kj3+YIfErDDFHsLX/5oPMSMAYKoggM= -go.opentelemetry.io/collector/exporter/otlphttpexporter v0.114.0/go.mod h1:O+75KYmyJwK61VDsW7LHo2qFFXCTf3kEJH3ZvW1bb4Y= -go.opentelemetry.io/collector/extension v0.114.0 h1:9Qb92y8hD2WDC5aMDoj4JNQN+/5BQYJWPUPzLXX+iGw= -go.opentelemetry.io/collector/extension v0.114.0/go.mod h1:Yk2/1ptVgfTr12t+22v93nYJpioP14pURv2YercSzU0= -go.opentelemetry.io/collector/extension/auth v0.114.0 h1:1K2qh4yvG8kKR/sTAobI/rw5VxzPZoKcl3FmC195vvo= -go.opentelemetry.io/collector/extension/auth v0.114.0/go.mod h1:IjtsG+jUVJB0utKF8dAK8pLutRun3aEgASshImzsw/U= -go.opentelemetry.io/collector/extension/experimental/storage v0.114.0 h1:hLyX9UvmY0t6iBnk3CqvyNck2U0QjPACekj7pDRx2hA= -go.opentelemetry.io/collector/extension/experimental/storage v0.114.0/go.mod h1:WqYRQVJjJLE1rm+y/ks1wPdPRGWePEvE1VO07xm2J2k= -go.opentelemetry.io/collector/extension/extensioncapabilities v0.114.0 h1:3OHll7gp5XIu7FVgon+koShPy797nze6EjCDokFUG7w= -go.opentelemetry.io/collector/extension/extensioncapabilities v0.114.0/go.mod h1:f0KdeLmE2jWVBmJ1U4WmfAtz1/tQUErGPfhPLKCQ49U= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0 h1:ibXDms1qrswlvlR6b3d2BeyI8sXUXoFV11yOi9Sop8o= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0/go.mod h1:/bOYmqu5yTDfI1bJZUxFqm8ZtmcodpquebiSxiQxtDY= -go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 h1:JosqAcdWw7IGsURJNR8f17xmaGCQEtKhQt9tM0T/DEg= -go.opentelemetry.io/collector/extension/zpagesextension v0.114.0/go.mod h1:+VO4p2GZvmIMqCVyIfS/U85Xqg+HIOe+mdl/ya+jVTE= -go.opentelemetry.io/collector/featuregate v1.20.0 h1:Mi7nMy/q52eruI+6jWnMKUOeM55XvwoPnGcdB1++O8c= -go.opentelemetry.io/collector/featuregate v1.20.0/go.mod h1:47xrISO71vJ83LSMm8+yIDsUbKktUp48Ovt7RR6VbRs= -go.opentelemetry.io/collector/internal/fanoutconsumer v0.114.0 h1:JM9huYqy5LTzmuxQmbPST3l5Ez5kJNit28c6WFWls34= -go.opentelemetry.io/collector/internal/fanoutconsumer v0.114.0/go.mod h1:V28tDU4Wvf1PfW1Ty/SBL9tpKul2iYGno/HkCWGDrj0= -go.opentelemetry.io/collector/internal/sharedcomponent v0.114.0 h1:DjX9ubjkKDnioQB03FYc40FTyhR25CdobMfjinKkZ1w= -go.opentelemetry.io/collector/internal/sharedcomponent v0.114.0/go.mod h1:lYlFiGIjPjhwTS/Xc+toJ9o3D8A6cCHuK1JX+ZbujVs= -go.opentelemetry.io/collector/otelcol v0.114.0 h1:d/nmYc+adzZ70g4zBMtgujGHVNulF59ExCpuM/3ZKV4= -go.opentelemetry.io/collector/otelcol v0.114.0/go.mod h1:DGmFFao5jHSwD6G1HjUjs0CYcyrTau+u7GjTRUGKN+4= -go.opentelemetry.io/collector/otelcol/otelcoltest v0.114.0 h1:Em5e1EgrPrS90EWDWLJHCvyFIDl5PIq1DuW9zd8F3pY= -go.opentelemetry.io/collector/otelcol/otelcoltest v0.114.0/go.mod h1:YAs78SaOJsf1HNWrNH+GFTdkS58dpQI98cok6gZP4Lg= -go.opentelemetry.io/collector/pdata v1.20.0 h1:ePcwt4bdtISP0loHaE+C9xYoU2ZkIvWv89Fob16o9SM= -go.opentelemetry.io/collector/pdata v1.20.0/go.mod h1:Ox1YVLe87cZDB/TL30i4SUz1cA5s6AM6SpFMfY61ICs= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0 h1:pUNfTzsI/JUTiE+DScDM4lsrPoxnVNLI2fbTxR/oapo= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0/go.mod h1:4aNcj6WM1n1uXyFSXlhVs4ibrERgNYsTbzcYI2zGhxA= -go.opentelemetry.io/collector/pdata/testdata v0.114.0 h1:+AzszWSL1i4K6meQ8rU0JDDW55SYCXa6FVqfDixhhTo= -go.opentelemetry.io/collector/pdata/testdata v0.114.0/go.mod h1:bv8XFdCTZxG2MQB5l9dKxSxf5zBrcodwO6JOy1+AxXM= -go.opentelemetry.io/collector/pipeline v0.114.0 h1:v3YOhc5z0tD6QbO5n/pnftpIeroihM2ks9Z2yKPCcwY= -go.opentelemetry.io/collector/pipeline v0.114.0/go.mod h1:4vOvjVsoYTHVGTbfFwqfnQOSV2K3RKUHofh3jNRc2Mg= -go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.114.0 h1:LZgxMQ2zXcz8ILBefhxpZBpn/Rx+TJTncIIQy0LgtgY= -go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.114.0/go.mod h1:bmyqQCJWcA53/GtqZJ2ahwmLdFl6UelFH2nR6OJFqpw= -go.opentelemetry.io/collector/processor v0.114.0 h1:6bqQgLL7BtKrNv4YkEOGjZfkcfZv/ciJSQx1epGG9Zk= -go.opentelemetry.io/collector/processor v0.114.0/go.mod h1:DV/wa+nAmSHIDeD9NblPwkY9PbgtDQAZJ+PE5biZwPc= -go.opentelemetry.io/collector/processor/batchprocessor v0.114.0 h1:Xu+pdPGIh6gLqHW5oYJsiim1mbnG85QaaUQy0YPoL+c= -go.opentelemetry.io/collector/processor/batchprocessor v0.114.0/go.mod h1:emnnL5CaliCnWjXNpNixqpvn7uc/kyUTv2939J/reMY= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0 h1:+P/1nLouEXTnN8DVQl+qWwO4BTkQyNPG9t/FrpUqrSI= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0/go.mod h1:3fuHeNIpINwx3bqFMprmDJyr6y5tWoWbJH599kltO5Y= -go.opentelemetry.io/collector/processor/processortest v0.114.0 h1:3FTaVXAp0LoVmUJn1ewBFckAby7AHa6/Kcdj0xuW14c= -go.opentelemetry.io/collector/processor/processortest v0.114.0/go.mod h1:OgsdOs1Fv5ZGTTJPF5nNIUJh2YkuV1acWd73yWgnti4= -go.opentelemetry.io/collector/receiver v0.114.0 h1:90SAnXAjNq7/k52/pFmmb06Cf1YauoPYtbio4aOXafY= -go.opentelemetry.io/collector/receiver v0.114.0/go.mod h1:KUGT0/D953LXbGH/D3lLPU8yrU3HfWnUqpt4W4hSOnE= -go.opentelemetry.io/collector/receiver/nopreceiver v0.114.0 h1:CMtfS6fwEwqwTMeC17A3Q2xsSkXfH4gG2SBZDr2txCw= -go.opentelemetry.io/collector/receiver/nopreceiver v0.114.0/go.mod h1:ajp6ok8iSSAcyq58wcOUJVe++1mTQ1isxqlaNUgQNzo= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.114.0 h1:8ASaxRWLe8P0pefOiYbCSZ0aXmwE4K06I8FBGc/n+J0= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.114.0/go.mod h1:3vjOvYBWGUVzuaovoumMbNHEIK3PqDs5rzEyd/nzsLU= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0 h1:ibhEfGpvNB3yrtpl2jYFabrunMk1hurxvMYpM0b1Ck4= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0/go.mod h1:UZyRfaasw+NLvN10AN8IQnmj5tQ3BOUH1uP2ctpO9f0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0 h1:D+Kh9t2n4asTnM+TiSxbrKlUemLZandWntj17BJWWb0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0/go.mod h1:mNSHQ13vFmqD+VAcRzLjStFBejbcWUn2Mp0pAd7Op+U= -go.opentelemetry.io/collector/semconv v0.114.0 h1:/eKcCJwZepQUtEuFuxa0thx2XIOvhFpaf214ZG1a11k= -go.opentelemetry.io/collector/semconv v0.114.0/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= -go.opentelemetry.io/collector/service v0.114.0 h1:MYF/4nH1CgtiLx09503xPAAUZefCzG1kaO+oanwX590= -go.opentelemetry.io/collector/service v0.114.0/go.mod h1:xH5/RapJdf5Ohh8iU8J0ZstfFYciP1oJPesiByteZxo= +go.opentelemetry.io/collector v0.115.0 h1:qUZ0bTeNBudMxNQ7FJKS//TxTjeJ7tfU/z22mcFavWU= +go.opentelemetry.io/collector v0.115.0/go.mod h1:66qx0xKnVvdwq60e1DEfb4e+zmM9szhPsv2hxZ/Mpj4= +go.opentelemetry.io/collector/client v1.21.0 h1:3Kes8lOFMYVxoxeAmX+DTEAkuS1iTA3NkSfqzGmygJA= +go.opentelemetry.io/collector/client v1.21.0/go.mod h1:jYJGiL0UA975OOyHmjbQSokNWt1OiviI5KjPOMUMGwc= +go.opentelemetry.io/collector/component v0.115.0 h1:iLte1oCiXzjiCnaOBKdsXacfFiECecpWxW3/LeriMoo= +go.opentelemetry.io/collector/component v0.115.0/go.mod h1:oIUFiH7w1eOimdeYhFI+gAIxYSiLDocKVJ0PTvX7d6s= +go.opentelemetry.io/collector/component/componentstatus v0.115.0 h1:pbpUIL+uKDfEiSgKK+S5nuSL6MDIIQYsp4b65ZGVb9M= +go.opentelemetry.io/collector/component/componentstatus v0.115.0/go.mod h1:36A+9XSiOz0Cdhq+UwwPRlEr5CYuSkEnVO9om4BH7d0= +go.opentelemetry.io/collector/component/componenttest v0.115.0 h1:9URDJ9VyP6tuij+YHjp/kSSMecnZOd7oGvzu+rw9SJY= +go.opentelemetry.io/collector/component/componenttest v0.115.0/go.mod h1:PzXvNqKLCiSADZGZFKH+IOHMkaQ0GTHuzysfVbTPKYY= +go.opentelemetry.io/collector/config/configauth v0.115.0 h1:xa+ALdyPgva3rZnLBh1H2oS5MsHP6JxSqMtQmcELnys= +go.opentelemetry.io/collector/config/configauth v0.115.0/go.mod h1:C7anpb3Rf4KswMT+dgOzkW9UX0z/65PLORpUw3p0VYc= +go.opentelemetry.io/collector/config/configcompression v1.21.0 h1:0zbPdZAgPFMAarwJEC4gaR6f/JBP686A3TYSgb3oa+E= +go.opentelemetry.io/collector/config/configcompression v1.21.0/go.mod h1:LvYG00tbPTv0NOLoZN0wXq1F5thcxvukO8INq7xyfWU= +go.opentelemetry.io/collector/config/configgrpc v0.115.0 h1:gZzXSFe6hB3RUcEeAYqk1yT+TBa+X9tp6/1x29Yg2yk= +go.opentelemetry.io/collector/config/configgrpc v0.115.0/go.mod h1:107lRZ5LdQPMdGJGd4m1GhyKxyH0az2cUOqrJgTEN8E= +go.opentelemetry.io/collector/config/confighttp v0.115.0 h1:BIy394oNXnqySJwrCqgAJu4gWgAV5aQUDD6k1hy6C8o= +go.opentelemetry.io/collector/config/confighttp v0.115.0/go.mod h1:Wr50ut12NmCEAl4bWLJryw2EjUmJTtYRg89560Q51wc= +go.opentelemetry.io/collector/config/confignet v1.21.0 h1:PeQ5YrMnfftysFL/WVaSrjPOWjD6DfeABY50pf9CZxU= +go.opentelemetry.io/collector/config/confignet v1.21.0/go.mod h1:ZppUH1hgUJOubawEsxsQ9MzEYFytqo2GnVSS7d4CVxc= +go.opentelemetry.io/collector/config/configopaque v1.21.0 h1:PcvRGkBk4Px8BQM7tX+kw4i3jBsfAHGoGQbtZg6Ox7U= +go.opentelemetry.io/collector/config/configopaque v1.21.0/go.mod h1:sW0t0iI/VfRL9VYX7Ik6XzVgPcR+Y5kejTLsYcMyDWs= +go.opentelemetry.io/collector/config/configretry v1.21.0 h1:ZHoOvAkEcv5BBeaJn8IQ6rQ4GMPZWW4S+W7R4QTEbZU= +go.opentelemetry.io/collector/config/configretry v1.21.0/go.mod h1:cleBc9I0DIWpTiiHfu9v83FUaCTqcPXmebpLxjEIqro= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0 h1:U07FinCDop+r2RjWQ3aP9ZWONC7r7kQIp1GkXQi6nsI= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0/go.mod h1:SlBEwQg0qly75rXZ6W1Ig8jN25KBVBkFIIAUI1GiAAE= +go.opentelemetry.io/collector/config/configtls v1.21.0 h1:ZfrlAYgBD8lzp04W0GxwiDmUbrvKsvDYJi+wkyiXlpA= +go.opentelemetry.io/collector/config/configtls v1.21.0/go.mod h1:5EsNefPfVCMOTlOrr3wyj7LrsOgY7V8iqRl8oFZEqtw= +go.opentelemetry.io/collector/config/internal v0.115.0 h1:eVk57iufZpUXyPJFKTb1Ebx5tmcCyroIlt427r5pxS8= +go.opentelemetry.io/collector/config/internal v0.115.0/go.mod h1:OVkadRWlKAoWjHslqjWtBLAne8ceQm8WYT71ZcBWLFc= +go.opentelemetry.io/collector/confmap v1.21.0 h1:1tIcx2/Suwg8VhuPmQw87ba0ludPmumpFCFRZZa6RXA= +go.opentelemetry.io/collector/confmap v1.21.0/go.mod h1:Rrhs+MWoaP6AswZp+ReQ2VO9dfOfcUjdjiSHBsG+nec= +go.opentelemetry.io/collector/confmap/provider/envprovider v1.21.0 h1:YLf++Z8CMp86AanfOCWUiE7vKbb1kSjgC3a9VJoxbD4= +go.opentelemetry.io/collector/confmap/provider/envprovider v1.21.0/go.mod h1:aSWLYcmgZZJDNtWN1M8JKQuehoGgOxibl1KuvKTar4M= +go.opentelemetry.io/collector/confmap/provider/fileprovider v1.21.0 h1:+zukkM+3l426iGoJkXTpLB2Z8QnZFu26TkGPjh5Rn/4= +go.opentelemetry.io/collector/confmap/provider/fileprovider v1.21.0/go.mod h1:BXBpQhF3n4CNLYO2n/mWZPd2U9ekpbLXLRGZrun1VfI= +go.opentelemetry.io/collector/confmap/provider/httpprovider v1.21.0 h1:NYYGM+SgIlTuNGjd8eGzDr8DkvOe4q7cXon8djF9yyI= +go.opentelemetry.io/collector/confmap/provider/httpprovider v1.21.0/go.mod h1:XRYbuwqq1awFuNhLDUv4aSvn6MzqX+abcevx1O+APJI= +go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.21.0 h1:2EEUI2DzA2DvrvCImMWRSNqIHdRJ6+qbgvZL44Zb2ac= +go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.21.0/go.mod h1:axezjjQWY4kZc5pr/+wOKAuqSYMhea/tWzP5S30h+dc= +go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.21.0 h1:P3Q9RytCMY76ORPCnkkjOa4fkuFqmZiQRor+F/nPlYE= +go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.21.0/go.mod h1:xhYhHK3yLQ78tsoaKPIGUfFulgy961ImOe2gATH3RQc= +go.opentelemetry.io/collector/connector v0.115.0 h1:4Kkm3HQFzNT1eliMOB8FbIn+PLMRJ2qQku5Vmy3V8Ko= +go.opentelemetry.io/collector/connector v0.115.0/go.mod h1:+ByuAmYLrYHoKh9B+LGqUc0N2kXcN2l8Dea8Mp6brZ8= +go.opentelemetry.io/collector/connector/connectorprofiles v0.115.0 h1:aW1f4Az0I+QJyImFccNWAXqik80bnNu27aQqi2hFfD8= +go.opentelemetry.io/collector/connector/connectorprofiles v0.115.0/go.mod h1:lmynB1CucydOsHa8RSSBh5roUZPfuiv65imXhtNzClM= +go.opentelemetry.io/collector/connector/connectortest v0.115.0 h1:GjtourFr0MJmlbtEPAZ/1BZCxkNAeJ0aMTlrxwftJ0k= +go.opentelemetry.io/collector/connector/connectortest v0.115.0/go.mod h1:f3KQXXNlh/XuV8elmnuVVyfY92dJCAovz10gD72OH0k= +go.opentelemetry.io/collector/consumer v1.21.0 h1:THKZ2Vbi6GkamjTBI2hFq5Dc4kINZTWGwQNa8d/Ty9g= +go.opentelemetry.io/collector/consumer v1.21.0/go.mod h1:FQcC4ThMtRYY41dv+IPNK8POLLhAFY3r1YR5fuP7iiY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0 h1:yli//xBCQMPZKXNgNlXemo4dvqhnFrAmCZ11DvQgmcY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0/go.mod h1:LwVzAvQ6ZVNG7mbOvurbAo+W/rKws0IcjOwriuZXqPE= +go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.115.0 h1:gaIhzpaGFWauiyznrQ3f++TbcdXxA5rpsX3L9uGjMM8= +go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.115.0/go.mod h1:7oXvuGBSawS5bc413lh1KEMcXkqBcrCqZQahOdnE24U= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 h1:H3fDuyQW1t2HWHkz96WMBQJKUevypOCjBqnqtaAWyoA= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0/go.mod h1:IzEmZ91Tp7TBxVDq8Cc9xvLsmO7H08njr6Pu9P5d9ns= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0 h1:hru0I2447y0TluCdwlKYFFtgcpyCnlM+LiOK1JZyA70= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0/go.mod h1:ybjALRJWR6aKNOzEMy1T1ruCULVDEjj4omtOJMrH/kU= +go.opentelemetry.io/collector/exporter v0.115.0 h1:JnxfpOnsuqhTPKJXVKJLS1Cv3BiVrVLzpHOjJEQw+xw= +go.opentelemetry.io/collector/exporter v0.115.0/go.mod h1:xof3fHQK8wADhaKLIJcQ7ChZaFLNC+haRdPN0wgl6kY= +go.opentelemetry.io/collector/exporter/debugexporter v0.115.0 h1:gb9VMQhcbvYqp0SJ4Hp8R9XqOLNLsoTgNJCPKpNEaVc= +go.opentelemetry.io/collector/exporter/debugexporter v0.115.0/go.mod h1:H/HS1UJlcZPNBbOcrsGZc2sPdQDHtbOjHOxMtJkmlcU= +go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.115.0 h1:fetbc740pODH6JW+H49SW0hiAJwQE+/B0SbuIlaY2rg= +go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.115.0/go.mod h1:oEKZ/d5BeaCK6Made9iwaeqmlT4lRbJSlW9nhIn/TwM= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0 h1:lSQEleCn/q9eFufcuK61NdFKU70ZlgI9dBjPCO/4CrE= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0/go.mod h1:7l5K2AecimX2kx+nZC1gKG3QkP247CO1+SodmJ4fFkQ= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0 h1:P9SMTUXQOtcaq40bGtnnAe14zRmR4/yUgj/Tb2BEf/k= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0/go.mod h1:1jMZ9gFGXglb8wfNrBZIgd+RvpZhSyFwdfE+Jtf9w4U= +go.opentelemetry.io/collector/exporter/otlpexporter v0.115.0 h1:Kqr31VFrQvgEMzeg8T1JSXWacjUQoZph39efKN8jBpY= +go.opentelemetry.io/collector/exporter/otlpexporter v0.115.0/go.mod h1:5uy/gduFx2mH0GxJ84sY75NfzQJb9xYmgiL9Pf0dKF8= +go.opentelemetry.io/collector/exporter/otlphttpexporter v0.115.0 h1:I0qzSWGbgph+iva5/jU8tkeUTkkqqcj8+UzMxg5ubF8= +go.opentelemetry.io/collector/exporter/otlphttpexporter v0.115.0/go.mod h1:cUrv5EG12iOs5MXaecfi9K+ZATEELefpyZY6Hj4NlUo= +go.opentelemetry.io/collector/extension v0.115.0 h1:/cBb8AUdD0KMWC6V3lvCC16eP9Fg0wd1Upcp5rgvuGI= +go.opentelemetry.io/collector/extension v0.115.0/go.mod h1:HI7Ak6loyi6ZrZPsQJW1OO1wbaAW8OqXLFNQlTZnreQ= +go.opentelemetry.io/collector/extension/auth v0.115.0 h1:TTMokbBsSHZRFH48PvGSJmgSS8F3Rkr9MWGHZn8eJDk= +go.opentelemetry.io/collector/extension/auth v0.115.0/go.mod h1:3w+2mzeb2OYNOO4Bi41TUo4jr32ap2y7AOq64IDpxQo= +go.opentelemetry.io/collector/extension/auth/authtest v0.115.0 h1:OZe7dKbZ01qodSpZU0ZYzI6zpmmzJ3UvfdBSFAbSgDw= +go.opentelemetry.io/collector/extension/auth/authtest v0.115.0/go.mod h1:fk9WCXP0x91Q64Z8HZKWTHh9PWtgoWE1KXe3n2Bff3U= +go.opentelemetry.io/collector/extension/experimental/storage v0.115.0 h1:sZXw0+77092pq24CkUoTRoHQPLQUsDq6HFRNB0g5yR4= +go.opentelemetry.io/collector/extension/experimental/storage v0.115.0/go.mod h1:qjFH7Y3QYYs88By2ZB5GMSUN5k3ul4Brrq2J6lKACA0= +go.opentelemetry.io/collector/extension/extensioncapabilities v0.115.0 h1:/g25Hp5aoCNKdDjIb3Fc7XRglO8yaBRFLO/IUNPnqNI= +go.opentelemetry.io/collector/extension/extensioncapabilities v0.115.0/go.mod h1:EQx7ETiy330O6q05S2KRZsRNDg0aQEeJmVl7Ipx+Fcw= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0 h1:GBVFxFEskR8jSdu9uaQh2qpXnN5VNXhXjpJ2UjxtE8I= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0/go.mod h1:eu1ecbz5mT+cHoH2H3GmD/rOO0WsicSJD2RLrYuOmRA= +go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 h1:zYrZZocc7n0ZuDyXNkIaX0P0qk2fjMQj7NegwBJZA4k= +go.opentelemetry.io/collector/extension/zpagesextension v0.115.0/go.mod h1:OaXwNHF3MAcInBzCXrhXbTNHfIi9b7YGhXjtCFZqxNY= +go.opentelemetry.io/collector/featuregate v1.21.0 h1:+EULHPJDLMipcwAGZVp9Nm8NriRvoBBMxp7MSiIZVMI= +go.opentelemetry.io/collector/featuregate v1.21.0/go.mod h1:3GaXqflNDVwWndNGBJ1+XJFy3Fv/XrFgjMN60N3z7yg= +go.opentelemetry.io/collector/internal/fanoutconsumer v0.115.0 h1:6DRiSECeApFq6Jj5ug77rG53R6FzJEZBfygkyMEXdpg= +go.opentelemetry.io/collector/internal/fanoutconsumer v0.115.0/go.mod h1:vgQf5HQdmLQqpDHpDq2S3nTRoUuKtRcZpRTsy+UiwYw= +go.opentelemetry.io/collector/internal/sharedcomponent v0.115.0 h1:9TL6T6ALqDpumUJ0tYIuPIg5LGo4r6eoqlNArYX116o= +go.opentelemetry.io/collector/internal/sharedcomponent v0.115.0/go.mod h1:SgBLKMh11bOTPR1bdDZbi5MlqsoDBBFI3uBIwnei+0k= +go.opentelemetry.io/collector/otelcol v0.115.0 h1:wZhFGrSCZcTQ4qw4ePjI2PaSrOCejoQKAjprKD/xavs= +go.opentelemetry.io/collector/otelcol v0.115.0/go.mod h1:iK8DPvaizirIYKDl1zZG7DDYUj6GkkH4KHifVVM88vk= +go.opentelemetry.io/collector/otelcol/otelcoltest v0.115.0 h1:HNlFpQujlnvawBk8nvMGxzjDHWDCfSprxem/EpQn4u8= +go.opentelemetry.io/collector/otelcol/otelcoltest v0.115.0/go.mod h1:WsMbqYl2rm3nPFbdxQqyLXf4iu97nYLeuQ1seZIpV3Y= +go.opentelemetry.io/collector/pdata v1.21.0 h1:PG+UbiFMJ35X/WcAR7Rf/PWmWtRdW0aHlOidsR6c5MA= +go.opentelemetry.io/collector/pdata v1.21.0/go.mod h1:GKb1/zocKJMvxKbS+sl0W85lxhYBTFJ6h6I1tphVyDU= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0 h1:NI89hy13vNDw7EOnQf7Jtitks4HJFO0SUWznTssmP94= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0/go.mod h1:jGzdNfO0XTtfLjXCL/uCC1livg1LlfR+ix2WE/z3RpQ= +go.opentelemetry.io/collector/pdata/testdata v0.115.0 h1:Rblz+AKXdo3fG626jS+KSd0OSA4uMXcTQfpwed6P8LI= +go.opentelemetry.io/collector/pdata/testdata v0.115.0/go.mod h1:inNnRt6S2Nn260EfCBEcjesjlKOSsr0jPwkPqpBkt4s= +go.opentelemetry.io/collector/pipeline v0.115.0 h1:bmACBqb0e8U9ag+vGGHUP7kCfAO7HHROdtzIEg8ulus= +go.opentelemetry.io/collector/pipeline v0.115.0/go.mod h1:qE3DmoB05AW0C3lmPvdxZqd/H4po84NPzd5MrqgtL74= +go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.115.0 h1:3l9ruCAOrssTUDnyChKNzHWOdTtfThnYaoPZ1/+5sD0= +go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.115.0/go.mod h1:2Myg+law/5lcezo9PhhZ0wjCaLYdGK24s1jDWbSW9VY= +go.opentelemetry.io/collector/processor v0.115.0 h1:+fveHGRe24PZPv/F5taahGuZ9HdNW44hgNWEJhIUdyc= +go.opentelemetry.io/collector/processor v0.115.0/go.mod h1:/oLHBlLsm7tFb7zOIrA5C0j14yBtjXKAgxJJ2Bktyk4= +go.opentelemetry.io/collector/processor/batchprocessor v0.115.0 h1:dgw1jcE/YVFTs41b3Y7SerU3BBSyMEE93AYV+BAxR8E= +go.opentelemetry.io/collector/processor/batchprocessor v0.115.0/go.mod h1:imG1kDEq14UGlxyCjSCf1TUEFdSWRvF7tLoYX9nixEQ= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0 h1:cCZAs+FXaebZPppqAN3m+X3etoSBL6NvyQo8l0hOZoo= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0/go.mod h1:kMxF0gknlWX4duuAJFi2/HuIRi6C3w95tOenRa0GKOY= +go.opentelemetry.io/collector/processor/processortest v0.115.0 h1:j9HEaYFOeOB6VYl9zGhBnhQbTkqGBa2udUvu5NTh6hc= +go.opentelemetry.io/collector/processor/processortest v0.115.0/go.mod h1:Gws+VEnp/eW3qAqPpqbKsrbnnxxNfyDjqrfUXbZfZic= +go.opentelemetry.io/collector/receiver v0.115.0 h1:55Q3Jvj6zHCIA1psKqi/3kEMJO4OqUF5tNAEYNdB1U8= +go.opentelemetry.io/collector/receiver v0.115.0/go.mod h1:nBSCh2O/WUcfgpJ+Jpz+B0z0Hn5jHeRvF2WmLij5EIY= +go.opentelemetry.io/collector/receiver/nopreceiver v0.115.0 h1:87dxAcHekbXqLtjcQjnK1An2PWkWAhTly+EXzPEgYOE= +go.opentelemetry.io/collector/receiver/nopreceiver v0.115.0/go.mod h1:Llu88KNSNwvmYPRr2PMDDbVY9zHfHEbPPB4yTjjQQe0= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.115.0 h1:NqMWsGuVy6y6VKTaPeJS7NZ9KAxhE/xyGUC7GaLYm/o= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.115.0/go.mod h1:9ituzngnjsh/YvO+Phayq9BTk/nw0rgK5ZVvX1oxULk= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0 h1:R9JLaj2Al93smIPUkbJshAkb/cY0H5JBOxIx+Zu0NG4= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0/go.mod h1:05E5hGujWeeXJmzKZwTdHyZ/+rRyrQlQB5p5Q2XY39M= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0 h1:OiB684SbHQi6/Pd3ZH0cXjYvCpBS9ilQBfTQx0wVXHg= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0/go.mod h1:Y8Z9U/bz9Xpyt8GI8DxZZgryw3mnnIw+AeKVLTD2cP8= +go.opentelemetry.io/collector/semconv v0.115.0 h1:SoqMvg4ZEB3mz2EdAb6XYa+TuMo5Mir5FRBr3nVFUDY= +go.opentelemetry.io/collector/semconv v0.115.0/go.mod h1:N6XE8Q0JKgBN2fAhkUQtqK9LT7rEGR6+Wu/Rtbal1iI= +go.opentelemetry.io/collector/service v0.115.0 h1:k4GAOiI5tZgB2QKgwA6c3TeAVr7QL/ft5cOQbzUr8Iw= +go.opentelemetry.io/collector/service v0.115.0/go.mod h1:DKde9LMhNebdREecDSsqiTFLI2wRc+IoV4/wGxU6goY= go.opentelemetry.io/contrib/bridges/otelzap v0.6.0 h1:j8icMXyyqNf6HGuwlYhniPnVsbJIq7n+WirDu3VAJdQ= go.opentelemetry.io/contrib/bridges/otelzap v0.6.0/go.mod h1:evIOZpl+kAlU5IsaYX2Siw+IbpacAZvXemVsgt70uvw= go.opentelemetry.io/contrib/config v0.10.0 h1:2JknAzMaYjxrHkTnZh3eOme/Y2P5eHE2SWfhfV6Xd6c= @@ -1447,12 +1449,12 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.31.2 h1:3wLBbL5Uom/8Zy98GRPXpJ254nEFpl+hwndmk9RwmL0= -k8s.io/api v0.31.2/go.mod h1:bWmGvrGPssSK1ljmLzd3pwCQ9MgoTsRCuK35u6SygUk= -k8s.io/apimachinery v0.31.2 h1:i4vUt2hPK56W6mlT7Ry+AO8eEsyxMD1U44NR22CLTYw= -k8s.io/apimachinery v0.31.2/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= -k8s.io/client-go v0.31.2 h1:Y2F4dxU5d3AQj+ybwSMqQnpZH9F30//1ObxOKlTI9yc= -k8s.io/client-go v0.31.2/go.mod h1:NPa74jSVR/+eez2dFsEIHNa+3o09vtNaWwWwb1qSxSs= +k8s.io/api v0.31.3 h1:umzm5o8lFbdN/hIXbrK9oRpOproJO62CV1zqxXrLgk8= +k8s.io/api v0.31.3/go.mod h1:UJrkIp9pnMOI9K2nlL6vwpxRzzEX5sWgn8kGQe92kCE= +k8s.io/apimachinery v0.31.3 h1:6l0WhcYgasZ/wk9ktLq5vLaoXJJr5ts6lkaQzgeYPq4= +k8s.io/apimachinery v0.31.3/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/client-go v0.31.3 h1:CAlZuM+PH2cm+86LOBemaJI/lQ5linJ6UFxKX/SoG+4= +k8s.io/client-go v0.31.3/go.mod h1:2CgjPUTpv3fE5dNygAr2NcM8nhHzXvxB8KL5gYc3kJs= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20240430033511-f0e62f92d13f h1:0LQagt0gDpKqvIkAMPaRGcXawNMouPECM1+F9BVxEaM= diff --git a/comp/otelcol/ddflareextension/impl/testdata/simple-dd/config-enhanced-result.yaml b/comp/otelcol/ddflareextension/impl/testdata/simple-dd/config-enhanced-result.yaml index 3f481997c9caa..5914d58d690a1 100644 --- a/comp/otelcol/ddflareextension/impl/testdata/simple-dd/config-enhanced-result.yaml +++ b/comp/otelcol/ddflareextension/impl/testdata/simple-dd/config-enhanced-result.yaml @@ -14,6 +14,7 @@ exporters: host_metadata: enabled: false hostname_source: config_or_system + reporter_period: 30m0s tags: [] hostname: "" http2_ping_timeout: 0s diff --git a/comp/otelcol/ddflareextension/impl/testdata/simple-dd/config-provided-result.yaml b/comp/otelcol/ddflareextension/impl/testdata/simple-dd/config-provided-result.yaml index 620eda80c3ba5..807d80682416a 100644 --- a/comp/otelcol/ddflareextension/impl/testdata/simple-dd/config-provided-result.yaml +++ b/comp/otelcol/ddflareextension/impl/testdata/simple-dd/config-provided-result.yaml @@ -14,6 +14,7 @@ exporters: host_metadata: enabled: false hostname_source: config_or_system + reporter_period: 30m0s tags: [] hostname: "" http2_ping_timeout: 0s diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod index 1fbae2bae0cf9..cab50f84895bc 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod @@ -105,28 +105,28 @@ require ( github.com/DataDog/datadog-go/v5 v5.5.0 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0 - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.114.0 + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0 github.com/stretchr/testify v1.10.0 - go.opentelemetry.io/collector/component v0.114.0 - go.opentelemetry.io/collector/config/confignet v1.20.0 - go.opentelemetry.io/collector/config/configretry v1.20.0 - go.opentelemetry.io/collector/consumer v0.114.0 - go.opentelemetry.io/collector/exporter v0.114.0 - go.opentelemetry.io/collector/exporter/exportertest v0.114.0 - go.opentelemetry.io/collector/featuregate v1.20.0 - go.opentelemetry.io/collector/pdata v1.20.0 + go.opentelemetry.io/collector/component v0.115.0 + go.opentelemetry.io/collector/config/confignet v1.21.0 + go.opentelemetry.io/collector/config/configretry v1.21.0 + go.opentelemetry.io/collector/consumer v1.21.0 + go.opentelemetry.io/collector/exporter v0.115.0 + go.opentelemetry.io/collector/exporter/exportertest v0.115.0 + go.opentelemetry.io/collector/featuregate v1.21.0 + go.opentelemetry.io/collector/pdata v1.21.0 go.opentelemetry.io/otel/metric v1.32.0 go.opentelemetry.io/otel/trace v1.32.0 go.uber.org/zap v1.27.0 google.golang.org/protobuf v1.35.2 ) -require go.opentelemetry.io/collector/component/componenttest v0.114.0 // indirect +require go.opentelemetry.io/collector/component/componenttest v0.115.0 // indirect require ( github.com/pierrec/lz4/v4 v4.1.21 // indirect - go.opentelemetry.io/collector/consumer/consumererror v0.114.0 // indirect - go.opentelemetry.io/collector/receiver/receivertest v0.114.0 // indirect + go.opentelemetry.io/collector/consumer/consumererror v0.115.0 // indirect + go.opentelemetry.io/collector/receiver/receivertest v0.115.0 // indirect ) require ( @@ -259,8 +259,8 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.114.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.115.0 // indirect github.com/opencontainers/runtime-spec v1.2.0 // indirect github.com/outcaste-io/ristretto v0.2.3 // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect @@ -290,26 +290,26 @@ require ( github.com/tklauser/numcpus v0.8.0 // indirect github.com/twmb/murmur3 v1.1.8 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - go.opentelemetry.io/collector/client v1.20.0 // indirect - go.opentelemetry.io/collector/config/configauth v0.114.0 // indirect - go.opentelemetry.io/collector/config/configcompression v1.20.0 // indirect - go.opentelemetry.io/collector/config/confighttp v0.114.0 // indirect - go.opentelemetry.io/collector/config/configopaque v1.20.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.114.0 // indirect - go.opentelemetry.io/collector/config/configtls v1.20.0 // indirect - go.opentelemetry.io/collector/config/internal v0.114.0 // indirect - go.opentelemetry.io/collector/confmap v1.20.0 // indirect - go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumertest v0.114.0 // indirect - go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/extension v0.114.0 // indirect - go.opentelemetry.io/collector/extension/auth v0.114.0 // indirect - go.opentelemetry.io/collector/extension/experimental/storage v0.114.0 // indirect - go.opentelemetry.io/collector/pdata/pprofile v0.114.0 // indirect - go.opentelemetry.io/collector/pipeline v0.114.0 // indirect - go.opentelemetry.io/collector/receiver v0.114.0 // indirect - go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/semconv v0.114.0 // indirect + go.opentelemetry.io/collector/client v1.21.0 // indirect + go.opentelemetry.io/collector/config/configauth v0.115.0 // indirect + go.opentelemetry.io/collector/config/configcompression v1.21.0 // indirect + go.opentelemetry.io/collector/config/confighttp v0.115.0 // indirect + go.opentelemetry.io/collector/config/configopaque v1.21.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.115.0 // indirect + go.opentelemetry.io/collector/config/configtls v1.21.0 // indirect + go.opentelemetry.io/collector/config/internal v0.115.0 // indirect + go.opentelemetry.io/collector/confmap v1.21.0 // indirect + go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumertest v0.115.0 // indirect + go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/extension v0.115.0 // indirect + go.opentelemetry.io/collector/extension/auth v0.115.0 // indirect + go.opentelemetry.io/collector/extension/experimental/storage v0.115.0 // indirect + go.opentelemetry.io/collector/pdata/pprofile v0.115.0 // indirect + go.opentelemetry.io/collector/pipeline v0.115.0 // indirect + go.opentelemetry.io/collector/receiver v0.115.0 // indirect + go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/semconv v0.115.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 // indirect go.opentelemetry.io/otel v1.32.0 // indirect go.opentelemetry.io/otel/sdk v1.32.0 // indirect diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum index 384aa70b24a81..298ecceb323a8 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum @@ -246,20 +246,20 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.114.0 h1:d2wCLlENxH4I2axQWaogivx/5ZIjDYgn9MIf6sFxlJ4= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.114.0/go.mod h1:Psyligv8GKL9WI3TraW3BLwkOX4TRxaaa1BBQQyICzA= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.114.0 h1:Wq1iTmd0K1SSOIA43Wy2uAU6SB4f9ogyN3ZmvDgTURg= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.114.0/go.mod h1:VCj9H0QxRBWSgbl1pUo8p0NrqnmcxpPo0QjKLFtWkO0= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.114.0 h1:m8uPYU2rTj0sKiYgzCvIPajD3meiYsu+nX0hplUnlEU= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.114.0/go.mod h1:P0BaP92pXPkTyTmObfLYUoRBfMYU+i0hdS3oM1DpGJo= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.114.0 h1:Qg80zPfNMlub7LO07VMDElOu3M2oxqdZgvvB+X72a4U= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.114.0/go.mod h1:5qsGcjFV3WFI6J2onAlkR7Xd/8VtwJcECaDRZfW4Tb4= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.114.0 h1:PwUMZ6fHMEUV5i9hUly+z3UujDTTdxQtWzL0rWc/lgA= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.114.0/go.mod h1:YEHL6w4vvB9b0/lNwGjz8DyWXTF/7Xw0Hkgc3mGWwa8= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0 h1:mtSN/07RGQPi1/zHVSZg4G0qRtOoJpPew5jsQWv9uS0= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0/go.mod h1:C9Zgh/N3j4NR2D+1FGAA1YizhFW9OS51DwLUFJTdXN4= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0 h1:I4ZYVRYW3Cjb65sPENZ9kHam/JUMXNEp2n/knJ0C0Vc= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0/go.mod h1:4BhyIaOn2LS48WS+ZNix4TpP0+goq9gDEtGzth5Cr3M= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.115.0 h1:a36EJz/mb83f6ieX0v4fNDJ1jXqpeaM6DVQXeFDvdhw= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.115.0/go.mod h1:r5/40YO1eSP5ZreOmRzVOUtDr7YG39ZIUcVjHd+9Izc= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0 h1:WOqt8NpU/JPGYDR4CiWx7g/sHV6Oe9FChzhushwmVdo= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0/go.mod h1:wV/+iU7MyXcyTaY8K5Qx+1Z3yUzrxA40nydPQA476Iw= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0 h1:MerLKMrkM4YoGF6Di0D9yMXO02yCX8mrZAi/+jJVVeI= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0/go.mod h1:R8AkVWe9G5Q0oMOapvm9HNS076E3Min8SVlmhBL3QD0= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0 h1:WEqcnWSy9dNSlGb8pYRBX7zhaz2ReyaeImlenbzNTB4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0/go.mod h1:6Mk71CakHUA3I6oM9hARDiyQypYyOolvb+4PFYyVEFg= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.115.0 h1:eoapW0JBablApkdv4C1RUuOKfz0U6SwuKMYYSAJH6fE= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.115.0/go.mod h1:hW2AaybTRcwxJySGLC3Fh1vd2VDaQhRBfa7O7w30NS8= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0 h1:R9MRrO+dSkAHBQLZjuwjv2RHXHQqF2Wtm1Ki0VKD5cs= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0/go.mod h1:rKXLXmwdUVcUHwTilroKSejbg3KSwLeYzNPSpkIEnv4= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0 h1:vwZQ7k8oqlK0bdZYTsjP/59zjQQfjSD4fNsWIWsTu2w= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0/go.mod h1:5ObSa9amrbzbYTdAK1Qhv3D/YqCxxnQhP0sk2eWB7Oo= github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -394,80 +394,82 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.opentelemetry.io/collector/client v1.20.0 h1:o60wPcj5nLtaRenF+1E5p4QXFS3TDL6vHlw+GOon3rg= -go.opentelemetry.io/collector/client v1.20.0/go.mod h1:6aqkszco9FaLWCxyJEVam6PP7cUa8mPRIXeS5eZGj0U= -go.opentelemetry.io/collector/component v0.114.0 h1:SVGbm5LvHGSTEDv7p92oPuBgK5tuiWR82I9+LL4TtBE= -go.opentelemetry.io/collector/component v0.114.0/go.mod h1:MLxtjZ6UVHjDxSdhGLuJfHBHvfl1iT/Y7IaQPD24Eww= -go.opentelemetry.io/collector/component/componentstatus v0.114.0 h1:y9my/xink8KB5lK8zFAjgB2+pEh0QYy5TM972fxZY9w= -go.opentelemetry.io/collector/component/componentstatus v0.114.0/go.mod h1:RIoeCYZpPaae7QLE/1RacqzhHuXBmzRAk9H/EwYtIIs= -go.opentelemetry.io/collector/component/componenttest v0.114.0 h1:GM4FTTlfeXoVm6sZYBHImwlRN8ayh2oAfUhvaFj7Zo8= -go.opentelemetry.io/collector/component/componenttest v0.114.0/go.mod h1:ZZEJMtbJtoVC/3/9R1HzERq+cYQRxuMFQrPCpfZ4Xos= -go.opentelemetry.io/collector/config/configauth v0.114.0 h1:R2sJ6xpsLYGH0yU0vCxotzBYDKR/Hrjv0A7y9lwMyiw= -go.opentelemetry.io/collector/config/configauth v0.114.0/go.mod h1:3Z24KcCpG+WYCeQYfs/cNp5cP2BDeOqLCtOEgs/rPqM= -go.opentelemetry.io/collector/config/configcompression v1.20.0 h1:H/mvz7J/5z+O74YsO0t2tk+REnO2tzLM8TgIQ4AZ5w0= -go.opentelemetry.io/collector/config/configcompression v1.20.0/go.mod h1:pnxkFCLUZLKWzYJvfSwZnPrnm0twX14CYj2ADth5xiU= -go.opentelemetry.io/collector/config/confighttp v0.114.0 h1:DjGsBvVm+mGK3IpJBaXianWhwcxEC1fF33cpuC1LY/I= -go.opentelemetry.io/collector/config/confighttp v0.114.0/go.mod h1:nrlNLxOZ+4JQaV9j0TiqQV7LOHhrRivPrT8nQRHED3Q= -go.opentelemetry.io/collector/config/confignet v1.20.0 h1:LrM6AuiY8N/woTP4SWhL2V0562JXwJs9MRNFZJFLtRY= -go.opentelemetry.io/collector/config/confignet v1.20.0/go.mod h1:o3v4joAEjvLwntqexg5ixMqRrU1+Vst+jWuCUaBNgOg= -go.opentelemetry.io/collector/config/configopaque v1.20.0 h1:2I48zKiyyyYqjm7y0B9OLp24ku2ZSX3nCHG0r5FdWOQ= -go.opentelemetry.io/collector/config/configopaque v1.20.0/go.mod h1:6zlLIyOoRpJJ+0bEKrlZOZon3rOp5Jrz9fMdR4twOS4= -go.opentelemetry.io/collector/config/configretry v1.20.0 h1:z679mrMlW2a6tOOYPGdrS/QfALxdzWLQUOpH8Uu+D5Y= -go.opentelemetry.io/collector/config/configretry v1.20.0/go.mod h1:KvQF5cfphq1rQm1dKR4eLDNQYw6iI2fY72NMZVa+0N0= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0 h1:kjLeyrumge6wsX6ZIkicdNOlBXaEyW2PI2ZdVXz/rzY= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0/go.mod h1:R0MBUxjSMVMIhljuDHWIygzzJWQyZHXXWIgQNxcFwhc= -go.opentelemetry.io/collector/config/configtls v1.20.0 h1:hNlJdwfyY5Qe54RLJ41lfLqKTn9ypkR7sk7JNCcSe2U= -go.opentelemetry.io/collector/config/configtls v1.20.0/go.mod h1:sav/txSHguadTYlSSK+BJO2ljJeYEtRoBahgzWAguYg= -go.opentelemetry.io/collector/config/internal v0.114.0 h1:uWSDWTJb8T6xRjKD9/XmEARakXnxgYVYKUeId78hErc= -go.opentelemetry.io/collector/config/internal v0.114.0/go.mod h1:yC7E4h1Uj0SubxcFImh6OvBHFTjMh99+A5PuyIgDWqc= -go.opentelemetry.io/collector/confmap v1.20.0 h1:ARfOwmkKxFOud1njl03yAHQ30+uenlzqCO6LBYamDTE= -go.opentelemetry.io/collector/confmap v1.20.0/go.mod h1:DMpd9Ay/ffls3JoQBQ73vWeRsz1rNuLbwjo6WtjSQus= -go.opentelemetry.io/collector/consumer v0.114.0 h1:1zVaHvfIZowGwZRitRBRo3i+RP2StlU+GClYiofSw0Q= -go.opentelemetry.io/collector/consumer v0.114.0/go.mod h1:d+Mrzt9hsH1ub3zmwSlnQVPLeTYir4Mgo7CrWfnncN4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0 h1:r2YiELfWerb40FHD23V04gNjIkLUcjEKGxI4Vtm2iO4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0/go.mod h1:MzIrLQ5jptO2egypolhlAbZsWZr29WC4FhSxQjnxcvg= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 h1:5pXYy3E6UK5Huu3aQbsYL8B6E6MyWx4fvXXDn+oXZaA= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0/go.mod h1:PMq3f54KcJQO4v1tue0QxQScu7REFVADlXxXSAYMiN0= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0 h1:isaTwJK5DOy8Bs7GuLq23ejfgj8gLIo5dOUvkRnLF4g= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0/go.mod h1:GNeLPkfRPdh06n/Rv1UKa/cAtCKjN0a7ADyHjIj4HFE= -go.opentelemetry.io/collector/exporter v0.114.0 h1:5/0BBpXuCJQSQ5SQf31g7j6T4XEKkyx9mZMcA2rS5e8= -go.opentelemetry.io/collector/exporter v0.114.0/go.mod h1:atpd0wWXgh5LAZ0REU/d/Ti/q50HDfnlBIjMjJQlKFg= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0 h1:/wmWOSBHcvtz3Pbv7+rWCqPPQuNvYaoidKKaOqZsLKs= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0/go.mod h1:epRYTkyJZTSQZBJflMGHUyUo2EdLPhsaZEyo5Qm848A= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0 h1:vo0idBJT+QACSM1KpjVLm9VeiXVwO7y4UnMpGxN6EyM= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0/go.mod h1:420ssFrhaphneybstbMeSIiqSRoaBARPgO71O17foaM= -go.opentelemetry.io/collector/extension v0.114.0 h1:9Qb92y8hD2WDC5aMDoj4JNQN+/5BQYJWPUPzLXX+iGw= -go.opentelemetry.io/collector/extension v0.114.0/go.mod h1:Yk2/1ptVgfTr12t+22v93nYJpioP14pURv2YercSzU0= -go.opentelemetry.io/collector/extension/auth v0.114.0 h1:1K2qh4yvG8kKR/sTAobI/rw5VxzPZoKcl3FmC195vvo= -go.opentelemetry.io/collector/extension/auth v0.114.0/go.mod h1:IjtsG+jUVJB0utKF8dAK8pLutRun3aEgASshImzsw/U= -go.opentelemetry.io/collector/extension/experimental/storage v0.114.0 h1:hLyX9UvmY0t6iBnk3CqvyNck2U0QjPACekj7pDRx2hA= -go.opentelemetry.io/collector/extension/experimental/storage v0.114.0/go.mod h1:WqYRQVJjJLE1rm+y/ks1wPdPRGWePEvE1VO07xm2J2k= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0 h1:ibXDms1qrswlvlR6b3d2BeyI8sXUXoFV11yOi9Sop8o= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0/go.mod h1:/bOYmqu5yTDfI1bJZUxFqm8ZtmcodpquebiSxiQxtDY= -go.opentelemetry.io/collector/featuregate v1.20.0 h1:Mi7nMy/q52eruI+6jWnMKUOeM55XvwoPnGcdB1++O8c= -go.opentelemetry.io/collector/featuregate v1.20.0/go.mod h1:47xrISO71vJ83LSMm8+yIDsUbKktUp48Ovt7RR6VbRs= -go.opentelemetry.io/collector/pdata v1.20.0 h1:ePcwt4bdtISP0loHaE+C9xYoU2ZkIvWv89Fob16o9SM= -go.opentelemetry.io/collector/pdata v1.20.0/go.mod h1:Ox1YVLe87cZDB/TL30i4SUz1cA5s6AM6SpFMfY61ICs= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0 h1:pUNfTzsI/JUTiE+DScDM4lsrPoxnVNLI2fbTxR/oapo= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0/go.mod h1:4aNcj6WM1n1uXyFSXlhVs4ibrERgNYsTbzcYI2zGhxA= -go.opentelemetry.io/collector/pdata/testdata v0.114.0 h1:+AzszWSL1i4K6meQ8rU0JDDW55SYCXa6FVqfDixhhTo= -go.opentelemetry.io/collector/pdata/testdata v0.114.0/go.mod h1:bv8XFdCTZxG2MQB5l9dKxSxf5zBrcodwO6JOy1+AxXM= -go.opentelemetry.io/collector/pipeline v0.114.0 h1:v3YOhc5z0tD6QbO5n/pnftpIeroihM2ks9Z2yKPCcwY= -go.opentelemetry.io/collector/pipeline v0.114.0/go.mod h1:4vOvjVsoYTHVGTbfFwqfnQOSV2K3RKUHofh3jNRc2Mg= -go.opentelemetry.io/collector/processor v0.114.0 h1:6bqQgLL7BtKrNv4YkEOGjZfkcfZv/ciJSQx1epGG9Zk= -go.opentelemetry.io/collector/processor v0.114.0/go.mod h1:DV/wa+nAmSHIDeD9NblPwkY9PbgtDQAZJ+PE5biZwPc= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0 h1:+P/1nLouEXTnN8DVQl+qWwO4BTkQyNPG9t/FrpUqrSI= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0/go.mod h1:3fuHeNIpINwx3bqFMprmDJyr6y5tWoWbJH599kltO5Y= -go.opentelemetry.io/collector/processor/processortest v0.114.0 h1:3FTaVXAp0LoVmUJn1ewBFckAby7AHa6/Kcdj0xuW14c= -go.opentelemetry.io/collector/processor/processortest v0.114.0/go.mod h1:OgsdOs1Fv5ZGTTJPF5nNIUJh2YkuV1acWd73yWgnti4= -go.opentelemetry.io/collector/receiver v0.114.0 h1:90SAnXAjNq7/k52/pFmmb06Cf1YauoPYtbio4aOXafY= -go.opentelemetry.io/collector/receiver v0.114.0/go.mod h1:KUGT0/D953LXbGH/D3lLPU8yrU3HfWnUqpt4W4hSOnE= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0 h1:ibhEfGpvNB3yrtpl2jYFabrunMk1hurxvMYpM0b1Ck4= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0/go.mod h1:UZyRfaasw+NLvN10AN8IQnmj5tQ3BOUH1uP2ctpO9f0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0 h1:D+Kh9t2n4asTnM+TiSxbrKlUemLZandWntj17BJWWb0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0/go.mod h1:mNSHQ13vFmqD+VAcRzLjStFBejbcWUn2Mp0pAd7Op+U= -go.opentelemetry.io/collector/semconv v0.114.0 h1:/eKcCJwZepQUtEuFuxa0thx2XIOvhFpaf214ZG1a11k= -go.opentelemetry.io/collector/semconv v0.114.0/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= +go.opentelemetry.io/collector/client v1.21.0 h1:3Kes8lOFMYVxoxeAmX+DTEAkuS1iTA3NkSfqzGmygJA= +go.opentelemetry.io/collector/client v1.21.0/go.mod h1:jYJGiL0UA975OOyHmjbQSokNWt1OiviI5KjPOMUMGwc= +go.opentelemetry.io/collector/component v0.115.0 h1:iLte1oCiXzjiCnaOBKdsXacfFiECecpWxW3/LeriMoo= +go.opentelemetry.io/collector/component v0.115.0/go.mod h1:oIUFiH7w1eOimdeYhFI+gAIxYSiLDocKVJ0PTvX7d6s= +go.opentelemetry.io/collector/component/componentstatus v0.115.0 h1:pbpUIL+uKDfEiSgKK+S5nuSL6MDIIQYsp4b65ZGVb9M= +go.opentelemetry.io/collector/component/componentstatus v0.115.0/go.mod h1:36A+9XSiOz0Cdhq+UwwPRlEr5CYuSkEnVO9om4BH7d0= +go.opentelemetry.io/collector/component/componenttest v0.115.0 h1:9URDJ9VyP6tuij+YHjp/kSSMecnZOd7oGvzu+rw9SJY= +go.opentelemetry.io/collector/component/componenttest v0.115.0/go.mod h1:PzXvNqKLCiSADZGZFKH+IOHMkaQ0GTHuzysfVbTPKYY= +go.opentelemetry.io/collector/config/configauth v0.115.0 h1:xa+ALdyPgva3rZnLBh1H2oS5MsHP6JxSqMtQmcELnys= +go.opentelemetry.io/collector/config/configauth v0.115.0/go.mod h1:C7anpb3Rf4KswMT+dgOzkW9UX0z/65PLORpUw3p0VYc= +go.opentelemetry.io/collector/config/configcompression v1.21.0 h1:0zbPdZAgPFMAarwJEC4gaR6f/JBP686A3TYSgb3oa+E= +go.opentelemetry.io/collector/config/configcompression v1.21.0/go.mod h1:LvYG00tbPTv0NOLoZN0wXq1F5thcxvukO8INq7xyfWU= +go.opentelemetry.io/collector/config/confighttp v0.115.0 h1:BIy394oNXnqySJwrCqgAJu4gWgAV5aQUDD6k1hy6C8o= +go.opentelemetry.io/collector/config/confighttp v0.115.0/go.mod h1:Wr50ut12NmCEAl4bWLJryw2EjUmJTtYRg89560Q51wc= +go.opentelemetry.io/collector/config/confignet v1.21.0 h1:PeQ5YrMnfftysFL/WVaSrjPOWjD6DfeABY50pf9CZxU= +go.opentelemetry.io/collector/config/confignet v1.21.0/go.mod h1:ZppUH1hgUJOubawEsxsQ9MzEYFytqo2GnVSS7d4CVxc= +go.opentelemetry.io/collector/config/configopaque v1.21.0 h1:PcvRGkBk4Px8BQM7tX+kw4i3jBsfAHGoGQbtZg6Ox7U= +go.opentelemetry.io/collector/config/configopaque v1.21.0/go.mod h1:sW0t0iI/VfRL9VYX7Ik6XzVgPcR+Y5kejTLsYcMyDWs= +go.opentelemetry.io/collector/config/configretry v1.21.0 h1:ZHoOvAkEcv5BBeaJn8IQ6rQ4GMPZWW4S+W7R4QTEbZU= +go.opentelemetry.io/collector/config/configretry v1.21.0/go.mod h1:cleBc9I0DIWpTiiHfu9v83FUaCTqcPXmebpLxjEIqro= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0 h1:U07FinCDop+r2RjWQ3aP9ZWONC7r7kQIp1GkXQi6nsI= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0/go.mod h1:SlBEwQg0qly75rXZ6W1Ig8jN25KBVBkFIIAUI1GiAAE= +go.opentelemetry.io/collector/config/configtls v1.21.0 h1:ZfrlAYgBD8lzp04W0GxwiDmUbrvKsvDYJi+wkyiXlpA= +go.opentelemetry.io/collector/config/configtls v1.21.0/go.mod h1:5EsNefPfVCMOTlOrr3wyj7LrsOgY7V8iqRl8oFZEqtw= +go.opentelemetry.io/collector/config/internal v0.115.0 h1:eVk57iufZpUXyPJFKTb1Ebx5tmcCyroIlt427r5pxS8= +go.opentelemetry.io/collector/config/internal v0.115.0/go.mod h1:OVkadRWlKAoWjHslqjWtBLAne8ceQm8WYT71ZcBWLFc= +go.opentelemetry.io/collector/confmap v1.21.0 h1:1tIcx2/Suwg8VhuPmQw87ba0ludPmumpFCFRZZa6RXA= +go.opentelemetry.io/collector/confmap v1.21.0/go.mod h1:Rrhs+MWoaP6AswZp+ReQ2VO9dfOfcUjdjiSHBsG+nec= +go.opentelemetry.io/collector/consumer v1.21.0 h1:THKZ2Vbi6GkamjTBI2hFq5Dc4kINZTWGwQNa8d/Ty9g= +go.opentelemetry.io/collector/consumer v1.21.0/go.mod h1:FQcC4ThMtRYY41dv+IPNK8POLLhAFY3r1YR5fuP7iiY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0 h1:yli//xBCQMPZKXNgNlXemo4dvqhnFrAmCZ11DvQgmcY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0/go.mod h1:LwVzAvQ6ZVNG7mbOvurbAo+W/rKws0IcjOwriuZXqPE= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 h1:H3fDuyQW1t2HWHkz96WMBQJKUevypOCjBqnqtaAWyoA= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0/go.mod h1:IzEmZ91Tp7TBxVDq8Cc9xvLsmO7H08njr6Pu9P5d9ns= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0 h1:hru0I2447y0TluCdwlKYFFtgcpyCnlM+LiOK1JZyA70= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0/go.mod h1:ybjALRJWR6aKNOzEMy1T1ruCULVDEjj4omtOJMrH/kU= +go.opentelemetry.io/collector/exporter v0.115.0 h1:JnxfpOnsuqhTPKJXVKJLS1Cv3BiVrVLzpHOjJEQw+xw= +go.opentelemetry.io/collector/exporter v0.115.0/go.mod h1:xof3fHQK8wADhaKLIJcQ7ChZaFLNC+haRdPN0wgl6kY= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0 h1:lSQEleCn/q9eFufcuK61NdFKU70ZlgI9dBjPCO/4CrE= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0/go.mod h1:7l5K2AecimX2kx+nZC1gKG3QkP247CO1+SodmJ4fFkQ= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0 h1:P9SMTUXQOtcaq40bGtnnAe14zRmR4/yUgj/Tb2BEf/k= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0/go.mod h1:1jMZ9gFGXglb8wfNrBZIgd+RvpZhSyFwdfE+Jtf9w4U= +go.opentelemetry.io/collector/extension v0.115.0 h1:/cBb8AUdD0KMWC6V3lvCC16eP9Fg0wd1Upcp5rgvuGI= +go.opentelemetry.io/collector/extension v0.115.0/go.mod h1:HI7Ak6loyi6ZrZPsQJW1OO1wbaAW8OqXLFNQlTZnreQ= +go.opentelemetry.io/collector/extension/auth v0.115.0 h1:TTMokbBsSHZRFH48PvGSJmgSS8F3Rkr9MWGHZn8eJDk= +go.opentelemetry.io/collector/extension/auth v0.115.0/go.mod h1:3w+2mzeb2OYNOO4Bi41TUo4jr32ap2y7AOq64IDpxQo= +go.opentelemetry.io/collector/extension/auth/authtest v0.115.0 h1:OZe7dKbZ01qodSpZU0ZYzI6zpmmzJ3UvfdBSFAbSgDw= +go.opentelemetry.io/collector/extension/auth/authtest v0.115.0/go.mod h1:fk9WCXP0x91Q64Z8HZKWTHh9PWtgoWE1KXe3n2Bff3U= +go.opentelemetry.io/collector/extension/experimental/storage v0.115.0 h1:sZXw0+77092pq24CkUoTRoHQPLQUsDq6HFRNB0g5yR4= +go.opentelemetry.io/collector/extension/experimental/storage v0.115.0/go.mod h1:qjFH7Y3QYYs88By2ZB5GMSUN5k3ul4Brrq2J6lKACA0= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0 h1:GBVFxFEskR8jSdu9uaQh2qpXnN5VNXhXjpJ2UjxtE8I= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0/go.mod h1:eu1ecbz5mT+cHoH2H3GmD/rOO0WsicSJD2RLrYuOmRA= +go.opentelemetry.io/collector/featuregate v1.21.0 h1:+EULHPJDLMipcwAGZVp9Nm8NriRvoBBMxp7MSiIZVMI= +go.opentelemetry.io/collector/featuregate v1.21.0/go.mod h1:3GaXqflNDVwWndNGBJ1+XJFy3Fv/XrFgjMN60N3z7yg= +go.opentelemetry.io/collector/pdata v1.21.0 h1:PG+UbiFMJ35X/WcAR7Rf/PWmWtRdW0aHlOidsR6c5MA= +go.opentelemetry.io/collector/pdata v1.21.0/go.mod h1:GKb1/zocKJMvxKbS+sl0W85lxhYBTFJ6h6I1tphVyDU= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0 h1:NI89hy13vNDw7EOnQf7Jtitks4HJFO0SUWznTssmP94= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0/go.mod h1:jGzdNfO0XTtfLjXCL/uCC1livg1LlfR+ix2WE/z3RpQ= +go.opentelemetry.io/collector/pdata/testdata v0.115.0 h1:Rblz+AKXdo3fG626jS+KSd0OSA4uMXcTQfpwed6P8LI= +go.opentelemetry.io/collector/pdata/testdata v0.115.0/go.mod h1:inNnRt6S2Nn260EfCBEcjesjlKOSsr0jPwkPqpBkt4s= +go.opentelemetry.io/collector/pipeline v0.115.0 h1:bmACBqb0e8U9ag+vGGHUP7kCfAO7HHROdtzIEg8ulus= +go.opentelemetry.io/collector/pipeline v0.115.0/go.mod h1:qE3DmoB05AW0C3lmPvdxZqd/H4po84NPzd5MrqgtL74= +go.opentelemetry.io/collector/processor v0.115.0 h1:+fveHGRe24PZPv/F5taahGuZ9HdNW44hgNWEJhIUdyc= +go.opentelemetry.io/collector/processor v0.115.0/go.mod h1:/oLHBlLsm7tFb7zOIrA5C0j14yBtjXKAgxJJ2Bktyk4= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0 h1:cCZAs+FXaebZPppqAN3m+X3etoSBL6NvyQo8l0hOZoo= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0/go.mod h1:kMxF0gknlWX4duuAJFi2/HuIRi6C3w95tOenRa0GKOY= +go.opentelemetry.io/collector/processor/processortest v0.115.0 h1:j9HEaYFOeOB6VYl9zGhBnhQbTkqGBa2udUvu5NTh6hc= +go.opentelemetry.io/collector/processor/processortest v0.115.0/go.mod h1:Gws+VEnp/eW3qAqPpqbKsrbnnxxNfyDjqrfUXbZfZic= +go.opentelemetry.io/collector/receiver v0.115.0 h1:55Q3Jvj6zHCIA1psKqi/3kEMJO4OqUF5tNAEYNdB1U8= +go.opentelemetry.io/collector/receiver v0.115.0/go.mod h1:nBSCh2O/WUcfgpJ+Jpz+B0z0Hn5jHeRvF2WmLij5EIY= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0 h1:R9JLaj2Al93smIPUkbJshAkb/cY0H5JBOxIx+Zu0NG4= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0/go.mod h1:05E5hGujWeeXJmzKZwTdHyZ/+rRyrQlQB5p5Q2XY39M= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0 h1:OiB684SbHQi6/Pd3ZH0cXjYvCpBS9ilQBfTQx0wVXHg= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0/go.mod h1:Y8Z9U/bz9Xpyt8GI8DxZZgryw3mnnIw+AeKVLTD2cP8= +go.opentelemetry.io/collector/semconv v0.115.0 h1:SoqMvg4ZEB3mz2EdAb6XYa+TuMo5Mir5FRBr3nVFUDY= +go.opentelemetry.io/collector/semconv v0.115.0/go.mod h1:N6XE8Q0JKgBN2fAhkUQtqK9LT7rEGR6+Wu/Rtbal1iI= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 h1:UP6IpuHFkUgOQL9FFQFrZ+5LiwhhYRbi7VZSIx6Nj5s= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0/go.mod h1:qxuZLtbq5QDtdeSHsS7bcf6EH6uO6jUAgk764zd3rhM= go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod index b2fc1508016cf..0e14870fd4f2a 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod @@ -52,16 +52,18 @@ require ( github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0 github.com/stormcat24/protodep v0.1.8 github.com/stretchr/testify v1.10.0 - go.opentelemetry.io/collector/component v0.114.0 - go.opentelemetry.io/collector/exporter v0.114.0 - go.opentelemetry.io/collector/exporter/exportertest v0.114.0 - go.opentelemetry.io/collector/pdata v1.20.0 + go.opentelemetry.io/collector/component v0.115.0 + go.opentelemetry.io/collector/exporter v0.115.0 + go.opentelemetry.io/collector/exporter/exportertest v0.115.0 + go.opentelemetry.io/collector/pdata v1.21.0 ) require ( - go.opentelemetry.io/collector/component/componenttest v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumererror v0.114.0 // indirect - go.opentelemetry.io/collector/receiver/receivertest v0.114.0 // indirect + github.com/hashicorp/go-version v1.7.0 // indirect + go.opentelemetry.io/collector/component/componenttest v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumererror v0.115.0 // indirect + go.opentelemetry.io/collector/featuregate v1.21.0 // indirect + go.opentelemetry.io/collector/receiver/receivertest v0.115.0 // indirect ) require ( @@ -132,19 +134,19 @@ require ( github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - go.opentelemetry.io/collector/config/configretry v1.20.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.114.0 // indirect - go.opentelemetry.io/collector/consumer v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumertest v0.114.0 // indirect - go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/extension v0.114.0 // indirect - go.opentelemetry.io/collector/extension/experimental/storage v0.114.0 // indirect - go.opentelemetry.io/collector/pdata/pprofile v0.114.0 // indirect - go.opentelemetry.io/collector/pipeline v0.114.0 // indirect - go.opentelemetry.io/collector/receiver v0.114.0 // indirect - go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/semconv v0.114.0 // indirect + go.opentelemetry.io/collector/config/configretry v1.21.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.115.0 // indirect + go.opentelemetry.io/collector/consumer v1.21.0 // indirect + go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumertest v0.115.0 // indirect + go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/extension v0.115.0 // indirect + go.opentelemetry.io/collector/extension/experimental/storage v0.115.0 // indirect + go.opentelemetry.io/collector/pdata/pprofile v0.115.0 // indirect + go.opentelemetry.io/collector/pipeline v0.115.0 // indirect + go.opentelemetry.io/collector/receiver v0.115.0 // indirect + go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/semconv v0.115.0 // indirect go.opentelemetry.io/otel v1.32.0 // indirect go.opentelemetry.io/otel/metric v1.32.0 // indirect go.opentelemetry.io/otel/sdk v1.32.0 // indirect diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum index b27097f6ddcfe..46c7f002b47da 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum @@ -114,6 +114,8 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.2.0/go.mod h1:mJzapYve32yjrKlk9G github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= +github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= +github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= @@ -272,50 +274,52 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.opentelemetry.io/collector/component v0.114.0 h1:SVGbm5LvHGSTEDv7p92oPuBgK5tuiWR82I9+LL4TtBE= -go.opentelemetry.io/collector/component v0.114.0/go.mod h1:MLxtjZ6UVHjDxSdhGLuJfHBHvfl1iT/Y7IaQPD24Eww= -go.opentelemetry.io/collector/component/componenttest v0.114.0 h1:GM4FTTlfeXoVm6sZYBHImwlRN8ayh2oAfUhvaFj7Zo8= -go.opentelemetry.io/collector/component/componenttest v0.114.0/go.mod h1:ZZEJMtbJtoVC/3/9R1HzERq+cYQRxuMFQrPCpfZ4Xos= -go.opentelemetry.io/collector/config/configretry v1.20.0 h1:z679mrMlW2a6tOOYPGdrS/QfALxdzWLQUOpH8Uu+D5Y= -go.opentelemetry.io/collector/config/configretry v1.20.0/go.mod h1:KvQF5cfphq1rQm1dKR4eLDNQYw6iI2fY72NMZVa+0N0= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0 h1:kjLeyrumge6wsX6ZIkicdNOlBXaEyW2PI2ZdVXz/rzY= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0/go.mod h1:R0MBUxjSMVMIhljuDHWIygzzJWQyZHXXWIgQNxcFwhc= -go.opentelemetry.io/collector/consumer v0.114.0 h1:1zVaHvfIZowGwZRitRBRo3i+RP2StlU+GClYiofSw0Q= -go.opentelemetry.io/collector/consumer v0.114.0/go.mod h1:d+Mrzt9hsH1ub3zmwSlnQVPLeTYir4Mgo7CrWfnncN4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0 h1:r2YiELfWerb40FHD23V04gNjIkLUcjEKGxI4Vtm2iO4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0/go.mod h1:MzIrLQ5jptO2egypolhlAbZsWZr29WC4FhSxQjnxcvg= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 h1:5pXYy3E6UK5Huu3aQbsYL8B6E6MyWx4fvXXDn+oXZaA= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0/go.mod h1:PMq3f54KcJQO4v1tue0QxQScu7REFVADlXxXSAYMiN0= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0 h1:isaTwJK5DOy8Bs7GuLq23ejfgj8gLIo5dOUvkRnLF4g= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0/go.mod h1:GNeLPkfRPdh06n/Rv1UKa/cAtCKjN0a7ADyHjIj4HFE= -go.opentelemetry.io/collector/exporter v0.114.0 h1:5/0BBpXuCJQSQ5SQf31g7j6T4XEKkyx9mZMcA2rS5e8= -go.opentelemetry.io/collector/exporter v0.114.0/go.mod h1:atpd0wWXgh5LAZ0REU/d/Ti/q50HDfnlBIjMjJQlKFg= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0 h1:/wmWOSBHcvtz3Pbv7+rWCqPPQuNvYaoidKKaOqZsLKs= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0/go.mod h1:epRYTkyJZTSQZBJflMGHUyUo2EdLPhsaZEyo5Qm848A= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0 h1:vo0idBJT+QACSM1KpjVLm9VeiXVwO7y4UnMpGxN6EyM= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0/go.mod h1:420ssFrhaphneybstbMeSIiqSRoaBARPgO71O17foaM= -go.opentelemetry.io/collector/extension v0.114.0 h1:9Qb92y8hD2WDC5aMDoj4JNQN+/5BQYJWPUPzLXX+iGw= -go.opentelemetry.io/collector/extension v0.114.0/go.mod h1:Yk2/1ptVgfTr12t+22v93nYJpioP14pURv2YercSzU0= -go.opentelemetry.io/collector/extension/experimental/storage v0.114.0 h1:hLyX9UvmY0t6iBnk3CqvyNck2U0QjPACekj7pDRx2hA= -go.opentelemetry.io/collector/extension/experimental/storage v0.114.0/go.mod h1:WqYRQVJjJLE1rm+y/ks1wPdPRGWePEvE1VO07xm2J2k= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0 h1:ibXDms1qrswlvlR6b3d2BeyI8sXUXoFV11yOi9Sop8o= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0/go.mod h1:/bOYmqu5yTDfI1bJZUxFqm8ZtmcodpquebiSxiQxtDY= -go.opentelemetry.io/collector/pdata v1.20.0 h1:ePcwt4bdtISP0loHaE+C9xYoU2ZkIvWv89Fob16o9SM= -go.opentelemetry.io/collector/pdata v1.20.0/go.mod h1:Ox1YVLe87cZDB/TL30i4SUz1cA5s6AM6SpFMfY61ICs= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0 h1:pUNfTzsI/JUTiE+DScDM4lsrPoxnVNLI2fbTxR/oapo= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0/go.mod h1:4aNcj6WM1n1uXyFSXlhVs4ibrERgNYsTbzcYI2zGhxA= -go.opentelemetry.io/collector/pdata/testdata v0.114.0 h1:+AzszWSL1i4K6meQ8rU0JDDW55SYCXa6FVqfDixhhTo= -go.opentelemetry.io/collector/pdata/testdata v0.114.0/go.mod h1:bv8XFdCTZxG2MQB5l9dKxSxf5zBrcodwO6JOy1+AxXM= -go.opentelemetry.io/collector/pipeline v0.114.0 h1:v3YOhc5z0tD6QbO5n/pnftpIeroihM2ks9Z2yKPCcwY= -go.opentelemetry.io/collector/pipeline v0.114.0/go.mod h1:4vOvjVsoYTHVGTbfFwqfnQOSV2K3RKUHofh3jNRc2Mg= -go.opentelemetry.io/collector/receiver v0.114.0 h1:90SAnXAjNq7/k52/pFmmb06Cf1YauoPYtbio4aOXafY= -go.opentelemetry.io/collector/receiver v0.114.0/go.mod h1:KUGT0/D953LXbGH/D3lLPU8yrU3HfWnUqpt4W4hSOnE= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0 h1:ibhEfGpvNB3yrtpl2jYFabrunMk1hurxvMYpM0b1Ck4= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0/go.mod h1:UZyRfaasw+NLvN10AN8IQnmj5tQ3BOUH1uP2ctpO9f0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0 h1:D+Kh9t2n4asTnM+TiSxbrKlUemLZandWntj17BJWWb0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0/go.mod h1:mNSHQ13vFmqD+VAcRzLjStFBejbcWUn2Mp0pAd7Op+U= -go.opentelemetry.io/collector/semconv v0.114.0 h1:/eKcCJwZepQUtEuFuxa0thx2XIOvhFpaf214ZG1a11k= -go.opentelemetry.io/collector/semconv v0.114.0/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= +go.opentelemetry.io/collector/component v0.115.0 h1:iLte1oCiXzjiCnaOBKdsXacfFiECecpWxW3/LeriMoo= +go.opentelemetry.io/collector/component v0.115.0/go.mod h1:oIUFiH7w1eOimdeYhFI+gAIxYSiLDocKVJ0PTvX7d6s= +go.opentelemetry.io/collector/component/componenttest v0.115.0 h1:9URDJ9VyP6tuij+YHjp/kSSMecnZOd7oGvzu+rw9SJY= +go.opentelemetry.io/collector/component/componenttest v0.115.0/go.mod h1:PzXvNqKLCiSADZGZFKH+IOHMkaQ0GTHuzysfVbTPKYY= +go.opentelemetry.io/collector/config/configretry v1.21.0 h1:ZHoOvAkEcv5BBeaJn8IQ6rQ4GMPZWW4S+W7R4QTEbZU= +go.opentelemetry.io/collector/config/configretry v1.21.0/go.mod h1:cleBc9I0DIWpTiiHfu9v83FUaCTqcPXmebpLxjEIqro= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0 h1:U07FinCDop+r2RjWQ3aP9ZWONC7r7kQIp1GkXQi6nsI= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0/go.mod h1:SlBEwQg0qly75rXZ6W1Ig8jN25KBVBkFIIAUI1GiAAE= +go.opentelemetry.io/collector/consumer v1.21.0 h1:THKZ2Vbi6GkamjTBI2hFq5Dc4kINZTWGwQNa8d/Ty9g= +go.opentelemetry.io/collector/consumer v1.21.0/go.mod h1:FQcC4ThMtRYY41dv+IPNK8POLLhAFY3r1YR5fuP7iiY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0 h1:yli//xBCQMPZKXNgNlXemo4dvqhnFrAmCZ11DvQgmcY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0/go.mod h1:LwVzAvQ6ZVNG7mbOvurbAo+W/rKws0IcjOwriuZXqPE= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 h1:H3fDuyQW1t2HWHkz96WMBQJKUevypOCjBqnqtaAWyoA= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0/go.mod h1:IzEmZ91Tp7TBxVDq8Cc9xvLsmO7H08njr6Pu9P5d9ns= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0 h1:hru0I2447y0TluCdwlKYFFtgcpyCnlM+LiOK1JZyA70= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0/go.mod h1:ybjALRJWR6aKNOzEMy1T1ruCULVDEjj4omtOJMrH/kU= +go.opentelemetry.io/collector/exporter v0.115.0 h1:JnxfpOnsuqhTPKJXVKJLS1Cv3BiVrVLzpHOjJEQw+xw= +go.opentelemetry.io/collector/exporter v0.115.0/go.mod h1:xof3fHQK8wADhaKLIJcQ7ChZaFLNC+haRdPN0wgl6kY= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0 h1:lSQEleCn/q9eFufcuK61NdFKU70ZlgI9dBjPCO/4CrE= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0/go.mod h1:7l5K2AecimX2kx+nZC1gKG3QkP247CO1+SodmJ4fFkQ= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0 h1:P9SMTUXQOtcaq40bGtnnAe14zRmR4/yUgj/Tb2BEf/k= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0/go.mod h1:1jMZ9gFGXglb8wfNrBZIgd+RvpZhSyFwdfE+Jtf9w4U= +go.opentelemetry.io/collector/extension v0.115.0 h1:/cBb8AUdD0KMWC6V3lvCC16eP9Fg0wd1Upcp5rgvuGI= +go.opentelemetry.io/collector/extension v0.115.0/go.mod h1:HI7Ak6loyi6ZrZPsQJW1OO1wbaAW8OqXLFNQlTZnreQ= +go.opentelemetry.io/collector/extension/experimental/storage v0.115.0 h1:sZXw0+77092pq24CkUoTRoHQPLQUsDq6HFRNB0g5yR4= +go.opentelemetry.io/collector/extension/experimental/storage v0.115.0/go.mod h1:qjFH7Y3QYYs88By2ZB5GMSUN5k3ul4Brrq2J6lKACA0= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0 h1:GBVFxFEskR8jSdu9uaQh2qpXnN5VNXhXjpJ2UjxtE8I= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0/go.mod h1:eu1ecbz5mT+cHoH2H3GmD/rOO0WsicSJD2RLrYuOmRA= +go.opentelemetry.io/collector/featuregate v1.21.0 h1:+EULHPJDLMipcwAGZVp9Nm8NriRvoBBMxp7MSiIZVMI= +go.opentelemetry.io/collector/featuregate v1.21.0/go.mod h1:3GaXqflNDVwWndNGBJ1+XJFy3Fv/XrFgjMN60N3z7yg= +go.opentelemetry.io/collector/pdata v1.21.0 h1:PG+UbiFMJ35X/WcAR7Rf/PWmWtRdW0aHlOidsR6c5MA= +go.opentelemetry.io/collector/pdata v1.21.0/go.mod h1:GKb1/zocKJMvxKbS+sl0W85lxhYBTFJ6h6I1tphVyDU= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0 h1:NI89hy13vNDw7EOnQf7Jtitks4HJFO0SUWznTssmP94= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0/go.mod h1:jGzdNfO0XTtfLjXCL/uCC1livg1LlfR+ix2WE/z3RpQ= +go.opentelemetry.io/collector/pdata/testdata v0.115.0 h1:Rblz+AKXdo3fG626jS+KSd0OSA4uMXcTQfpwed6P8LI= +go.opentelemetry.io/collector/pdata/testdata v0.115.0/go.mod h1:inNnRt6S2Nn260EfCBEcjesjlKOSsr0jPwkPqpBkt4s= +go.opentelemetry.io/collector/pipeline v0.115.0 h1:bmACBqb0e8U9ag+vGGHUP7kCfAO7HHROdtzIEg8ulus= +go.opentelemetry.io/collector/pipeline v0.115.0/go.mod h1:qE3DmoB05AW0C3lmPvdxZqd/H4po84NPzd5MrqgtL74= +go.opentelemetry.io/collector/receiver v0.115.0 h1:55Q3Jvj6zHCIA1psKqi/3kEMJO4OqUF5tNAEYNdB1U8= +go.opentelemetry.io/collector/receiver v0.115.0/go.mod h1:nBSCh2O/WUcfgpJ+Jpz+B0z0Hn5jHeRvF2WmLij5EIY= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0 h1:R9JLaj2Al93smIPUkbJshAkb/cY0H5JBOxIx+Zu0NG4= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0/go.mod h1:05E5hGujWeeXJmzKZwTdHyZ/+rRyrQlQB5p5Q2XY39M= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0 h1:OiB684SbHQi6/Pd3ZH0cXjYvCpBS9ilQBfTQx0wVXHg= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0/go.mod h1:Y8Z9U/bz9Xpyt8GI8DxZZgryw3mnnIw+AeKVLTD2cP8= +go.opentelemetry.io/collector/semconv v0.115.0 h1:SoqMvg4ZEB3mz2EdAb6XYa+TuMo5Mir5FRBr3nVFUDY= +go.opentelemetry.io/collector/semconv v0.115.0/go.mod h1:N6XE8Q0JKgBN2fAhkUQtqK9LT7rEGR6+Wu/Rtbal1iI= go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg= go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M= diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod index f469f0ac3856a..4ae9f643df3cf 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod @@ -73,19 +73,19 @@ require ( github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0 github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.114.0 + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.115.0 github.com/stretchr/testify v1.10.0 github.com/tinylib/msgp v1.2.4 - go.opentelemetry.io/collector/component v0.114.0 - go.opentelemetry.io/collector/config/confignet v1.20.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.114.0 // indirect - go.opentelemetry.io/collector/confmap v1.20.0 // indirect - go.opentelemetry.io/collector/consumer v0.114.0 - go.opentelemetry.io/collector/exporter v0.114.0 - go.opentelemetry.io/collector/extension v0.114.0 // indirect - go.opentelemetry.io/collector/pdata v1.20.0 - go.opentelemetry.io/collector/receiver v0.114.0 // indirect - go.opentelemetry.io/collector/semconv v0.114.0 // indirect + go.opentelemetry.io/collector/component v0.115.0 + go.opentelemetry.io/collector/config/confignet v1.21.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.115.0 // indirect + go.opentelemetry.io/collector/confmap v1.21.0 // indirect + go.opentelemetry.io/collector/consumer v1.21.0 + go.opentelemetry.io/collector/exporter v0.115.0 + go.opentelemetry.io/collector/extension v0.115.0 // indirect + go.opentelemetry.io/collector/pdata v1.21.0 + go.opentelemetry.io/collector/receiver v0.115.0 // indirect + go.opentelemetry.io/collector/semconv v0.115.0 // indirect go.uber.org/multierr v1.11.0 ) @@ -199,14 +199,14 @@ require ( github.com/tklauser/numcpus v0.8.0 // indirect github.com/twmb/murmur3 v1.1.8 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - go.opentelemetry.io/collector/config/configretry v1.20.0 // indirect - go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumertest v0.114.0 // indirect - go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/extension/experimental/storage v0.114.0 // indirect - go.opentelemetry.io/collector/pdata/pprofile v0.114.0 // indirect - go.opentelemetry.io/collector/pipeline v0.114.0 // indirect - go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0 // indirect + go.opentelemetry.io/collector/config/configretry v1.21.0 // indirect + go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumertest v0.115.0 // indirect + go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/extension/experimental/storage v0.115.0 // indirect + go.opentelemetry.io/collector/pdata/pprofile v0.115.0 // indirect + go.opentelemetry.io/collector/pipeline v0.115.0 // indirect + go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0 // indirect go.opentelemetry.io/otel v1.32.0 // indirect go.opentelemetry.io/otel/metric v1.32.0 // indirect go.opentelemetry.io/otel/sdk v1.32.0 // indirect @@ -228,31 +228,31 @@ require ( ) require ( - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.114.0 - go.opentelemetry.io/collector/component/componenttest v0.114.0 - go.opentelemetry.io/collector/exporter/exportertest v0.114.0 + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0 + go.opentelemetry.io/collector/component/componenttest v0.115.0 + go.opentelemetry.io/collector/exporter/exportertest v0.115.0 ) require ( github.com/hashicorp/go-version v1.7.0 // indirect - go.opentelemetry.io/collector/featuregate v1.20.0 // indirect + go.opentelemetry.io/collector/featuregate v1.21.0 // indirect ) require ( github.com/knadh/koanf/maps v0.1.1 // indirect github.com/knadh/koanf/providers/confmap v0.1.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.114.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect - go.opentelemetry.io/collector/client v1.20.0 // indirect - go.opentelemetry.io/collector/config/configauth v0.114.0 // indirect - go.opentelemetry.io/collector/config/configcompression v1.20.0 // indirect - go.opentelemetry.io/collector/config/confighttp v0.114.0 // indirect - go.opentelemetry.io/collector/config/configopaque v1.20.0 // indirect - go.opentelemetry.io/collector/config/configtls v1.20.0 // indirect - go.opentelemetry.io/collector/config/internal v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumererror v0.114.0 // indirect - go.opentelemetry.io/collector/extension/auth v0.114.0 // indirect - go.opentelemetry.io/collector/receiver/receivertest v0.114.0 // indirect + go.opentelemetry.io/collector/client v1.21.0 // indirect + go.opentelemetry.io/collector/config/configauth v0.115.0 // indirect + go.opentelemetry.io/collector/config/configcompression v1.21.0 // indirect + go.opentelemetry.io/collector/config/confighttp v0.115.0 // indirect + go.opentelemetry.io/collector/config/configopaque v1.21.0 // indirect + go.opentelemetry.io/collector/config/configtls v1.21.0 // indirect + go.opentelemetry.io/collector/config/internal v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumererror v0.115.0 // indirect + go.opentelemetry.io/collector/extension/auth v0.115.0 // indirect + go.opentelemetry.io/collector/receiver/receivertest v0.115.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 // indirect ) diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum index a1036423c51c7..89c84f20e836c 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum @@ -206,16 +206,16 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.114.0 h1:d2wCLlENxH4I2axQWaogivx/5ZIjDYgn9MIf6sFxlJ4= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.114.0/go.mod h1:Psyligv8GKL9WI3TraW3BLwkOX4TRxaaa1BBQQyICzA= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.114.0 h1:Wq1iTmd0K1SSOIA43Wy2uAU6SB4f9ogyN3ZmvDgTURg= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.114.0/go.mod h1:VCj9H0QxRBWSgbl1pUo8p0NrqnmcxpPo0QjKLFtWkO0= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.114.0 h1:m8uPYU2rTj0sKiYgzCvIPajD3meiYsu+nX0hplUnlEU= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.114.0/go.mod h1:P0BaP92pXPkTyTmObfLYUoRBfMYU+i0hdS3oM1DpGJo= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.114.0 h1:Qg80zPfNMlub7LO07VMDElOu3M2oxqdZgvvB+X72a4U= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.114.0/go.mod h1:5qsGcjFV3WFI6J2onAlkR7Xd/8VtwJcECaDRZfW4Tb4= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.114.0 h1:PwUMZ6fHMEUV5i9hUly+z3UujDTTdxQtWzL0rWc/lgA= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.114.0/go.mod h1:YEHL6w4vvB9b0/lNwGjz8DyWXTF/7Xw0Hkgc3mGWwa8= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.115.0 h1:a36EJz/mb83f6ieX0v4fNDJ1jXqpeaM6DVQXeFDvdhw= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.115.0/go.mod h1:r5/40YO1eSP5ZreOmRzVOUtDr7YG39ZIUcVjHd+9Izc= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0 h1:WOqt8NpU/JPGYDR4CiWx7g/sHV6Oe9FChzhushwmVdo= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0/go.mod h1:wV/+iU7MyXcyTaY8K5Qx+1Z3yUzrxA40nydPQA476Iw= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0 h1:MerLKMrkM4YoGF6Di0D9yMXO02yCX8mrZAi/+jJVVeI= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0/go.mod h1:R8AkVWe9G5Q0oMOapvm9HNS076E3Min8SVlmhBL3QD0= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0 h1:WEqcnWSy9dNSlGb8pYRBX7zhaz2ReyaeImlenbzNTB4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0/go.mod h1:6Mk71CakHUA3I6oM9hARDiyQypYyOolvb+4PFYyVEFg= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.115.0 h1:eoapW0JBablApkdv4C1RUuOKfz0U6SwuKMYYSAJH6fE= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.115.0/go.mod h1:hW2AaybTRcwxJySGLC3Fh1vd2VDaQhRBfa7O7w30NS8= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= @@ -333,72 +333,74 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.opentelemetry.io/collector/client v1.20.0 h1:o60wPcj5nLtaRenF+1E5p4QXFS3TDL6vHlw+GOon3rg= -go.opentelemetry.io/collector/client v1.20.0/go.mod h1:6aqkszco9FaLWCxyJEVam6PP7cUa8mPRIXeS5eZGj0U= -go.opentelemetry.io/collector/component v0.114.0 h1:SVGbm5LvHGSTEDv7p92oPuBgK5tuiWR82I9+LL4TtBE= -go.opentelemetry.io/collector/component v0.114.0/go.mod h1:MLxtjZ6UVHjDxSdhGLuJfHBHvfl1iT/Y7IaQPD24Eww= -go.opentelemetry.io/collector/component/componenttest v0.114.0 h1:GM4FTTlfeXoVm6sZYBHImwlRN8ayh2oAfUhvaFj7Zo8= -go.opentelemetry.io/collector/component/componenttest v0.114.0/go.mod h1:ZZEJMtbJtoVC/3/9R1HzERq+cYQRxuMFQrPCpfZ4Xos= -go.opentelemetry.io/collector/config/configauth v0.114.0 h1:R2sJ6xpsLYGH0yU0vCxotzBYDKR/Hrjv0A7y9lwMyiw= -go.opentelemetry.io/collector/config/configauth v0.114.0/go.mod h1:3Z24KcCpG+WYCeQYfs/cNp5cP2BDeOqLCtOEgs/rPqM= -go.opentelemetry.io/collector/config/configcompression v1.20.0 h1:H/mvz7J/5z+O74YsO0t2tk+REnO2tzLM8TgIQ4AZ5w0= -go.opentelemetry.io/collector/config/configcompression v1.20.0/go.mod h1:pnxkFCLUZLKWzYJvfSwZnPrnm0twX14CYj2ADth5xiU= -go.opentelemetry.io/collector/config/confighttp v0.114.0 h1:DjGsBvVm+mGK3IpJBaXianWhwcxEC1fF33cpuC1LY/I= -go.opentelemetry.io/collector/config/confighttp v0.114.0/go.mod h1:nrlNLxOZ+4JQaV9j0TiqQV7LOHhrRivPrT8nQRHED3Q= -go.opentelemetry.io/collector/config/confignet v1.20.0 h1:LrM6AuiY8N/woTP4SWhL2V0562JXwJs9MRNFZJFLtRY= -go.opentelemetry.io/collector/config/confignet v1.20.0/go.mod h1:o3v4joAEjvLwntqexg5ixMqRrU1+Vst+jWuCUaBNgOg= -go.opentelemetry.io/collector/config/configopaque v1.20.0 h1:2I48zKiyyyYqjm7y0B9OLp24ku2ZSX3nCHG0r5FdWOQ= -go.opentelemetry.io/collector/config/configopaque v1.20.0/go.mod h1:6zlLIyOoRpJJ+0bEKrlZOZon3rOp5Jrz9fMdR4twOS4= -go.opentelemetry.io/collector/config/configretry v1.20.0 h1:z679mrMlW2a6tOOYPGdrS/QfALxdzWLQUOpH8Uu+D5Y= -go.opentelemetry.io/collector/config/configretry v1.20.0/go.mod h1:KvQF5cfphq1rQm1dKR4eLDNQYw6iI2fY72NMZVa+0N0= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0 h1:kjLeyrumge6wsX6ZIkicdNOlBXaEyW2PI2ZdVXz/rzY= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0/go.mod h1:R0MBUxjSMVMIhljuDHWIygzzJWQyZHXXWIgQNxcFwhc= -go.opentelemetry.io/collector/config/configtls v1.20.0 h1:hNlJdwfyY5Qe54RLJ41lfLqKTn9ypkR7sk7JNCcSe2U= -go.opentelemetry.io/collector/config/configtls v1.20.0/go.mod h1:sav/txSHguadTYlSSK+BJO2ljJeYEtRoBahgzWAguYg= -go.opentelemetry.io/collector/config/internal v0.114.0 h1:uWSDWTJb8T6xRjKD9/XmEARakXnxgYVYKUeId78hErc= -go.opentelemetry.io/collector/config/internal v0.114.0/go.mod h1:yC7E4h1Uj0SubxcFImh6OvBHFTjMh99+A5PuyIgDWqc= -go.opentelemetry.io/collector/confmap v1.20.0 h1:ARfOwmkKxFOud1njl03yAHQ30+uenlzqCO6LBYamDTE= -go.opentelemetry.io/collector/confmap v1.20.0/go.mod h1:DMpd9Ay/ffls3JoQBQ73vWeRsz1rNuLbwjo6WtjSQus= -go.opentelemetry.io/collector/consumer v0.114.0 h1:1zVaHvfIZowGwZRitRBRo3i+RP2StlU+GClYiofSw0Q= -go.opentelemetry.io/collector/consumer v0.114.0/go.mod h1:d+Mrzt9hsH1ub3zmwSlnQVPLeTYir4Mgo7CrWfnncN4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0 h1:r2YiELfWerb40FHD23V04gNjIkLUcjEKGxI4Vtm2iO4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0/go.mod h1:MzIrLQ5jptO2egypolhlAbZsWZr29WC4FhSxQjnxcvg= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 h1:5pXYy3E6UK5Huu3aQbsYL8B6E6MyWx4fvXXDn+oXZaA= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0/go.mod h1:PMq3f54KcJQO4v1tue0QxQScu7REFVADlXxXSAYMiN0= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0 h1:isaTwJK5DOy8Bs7GuLq23ejfgj8gLIo5dOUvkRnLF4g= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0/go.mod h1:GNeLPkfRPdh06n/Rv1UKa/cAtCKjN0a7ADyHjIj4HFE= -go.opentelemetry.io/collector/exporter v0.114.0 h1:5/0BBpXuCJQSQ5SQf31g7j6T4XEKkyx9mZMcA2rS5e8= -go.opentelemetry.io/collector/exporter v0.114.0/go.mod h1:atpd0wWXgh5LAZ0REU/d/Ti/q50HDfnlBIjMjJQlKFg= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0 h1:/wmWOSBHcvtz3Pbv7+rWCqPPQuNvYaoidKKaOqZsLKs= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0/go.mod h1:epRYTkyJZTSQZBJflMGHUyUo2EdLPhsaZEyo5Qm848A= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0 h1:vo0idBJT+QACSM1KpjVLm9VeiXVwO7y4UnMpGxN6EyM= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0/go.mod h1:420ssFrhaphneybstbMeSIiqSRoaBARPgO71O17foaM= -go.opentelemetry.io/collector/extension v0.114.0 h1:9Qb92y8hD2WDC5aMDoj4JNQN+/5BQYJWPUPzLXX+iGw= -go.opentelemetry.io/collector/extension v0.114.0/go.mod h1:Yk2/1ptVgfTr12t+22v93nYJpioP14pURv2YercSzU0= -go.opentelemetry.io/collector/extension/auth v0.114.0 h1:1K2qh4yvG8kKR/sTAobI/rw5VxzPZoKcl3FmC195vvo= -go.opentelemetry.io/collector/extension/auth v0.114.0/go.mod h1:IjtsG+jUVJB0utKF8dAK8pLutRun3aEgASshImzsw/U= -go.opentelemetry.io/collector/extension/experimental/storage v0.114.0 h1:hLyX9UvmY0t6iBnk3CqvyNck2U0QjPACekj7pDRx2hA= -go.opentelemetry.io/collector/extension/experimental/storage v0.114.0/go.mod h1:WqYRQVJjJLE1rm+y/ks1wPdPRGWePEvE1VO07xm2J2k= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0 h1:ibXDms1qrswlvlR6b3d2BeyI8sXUXoFV11yOi9Sop8o= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0/go.mod h1:/bOYmqu5yTDfI1bJZUxFqm8ZtmcodpquebiSxiQxtDY= -go.opentelemetry.io/collector/featuregate v1.20.0 h1:Mi7nMy/q52eruI+6jWnMKUOeM55XvwoPnGcdB1++O8c= -go.opentelemetry.io/collector/featuregate v1.20.0/go.mod h1:47xrISO71vJ83LSMm8+yIDsUbKktUp48Ovt7RR6VbRs= -go.opentelemetry.io/collector/pdata v1.20.0 h1:ePcwt4bdtISP0loHaE+C9xYoU2ZkIvWv89Fob16o9SM= -go.opentelemetry.io/collector/pdata v1.20.0/go.mod h1:Ox1YVLe87cZDB/TL30i4SUz1cA5s6AM6SpFMfY61ICs= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0 h1:pUNfTzsI/JUTiE+DScDM4lsrPoxnVNLI2fbTxR/oapo= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0/go.mod h1:4aNcj6WM1n1uXyFSXlhVs4ibrERgNYsTbzcYI2zGhxA= -go.opentelemetry.io/collector/pdata/testdata v0.114.0 h1:+AzszWSL1i4K6meQ8rU0JDDW55SYCXa6FVqfDixhhTo= -go.opentelemetry.io/collector/pdata/testdata v0.114.0/go.mod h1:bv8XFdCTZxG2MQB5l9dKxSxf5zBrcodwO6JOy1+AxXM= -go.opentelemetry.io/collector/pipeline v0.114.0 h1:v3YOhc5z0tD6QbO5n/pnftpIeroihM2ks9Z2yKPCcwY= -go.opentelemetry.io/collector/pipeline v0.114.0/go.mod h1:4vOvjVsoYTHVGTbfFwqfnQOSV2K3RKUHofh3jNRc2Mg= -go.opentelemetry.io/collector/receiver v0.114.0 h1:90SAnXAjNq7/k52/pFmmb06Cf1YauoPYtbio4aOXafY= -go.opentelemetry.io/collector/receiver v0.114.0/go.mod h1:KUGT0/D953LXbGH/D3lLPU8yrU3HfWnUqpt4W4hSOnE= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0 h1:ibhEfGpvNB3yrtpl2jYFabrunMk1hurxvMYpM0b1Ck4= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0/go.mod h1:UZyRfaasw+NLvN10AN8IQnmj5tQ3BOUH1uP2ctpO9f0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0 h1:D+Kh9t2n4asTnM+TiSxbrKlUemLZandWntj17BJWWb0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0/go.mod h1:mNSHQ13vFmqD+VAcRzLjStFBejbcWUn2Mp0pAd7Op+U= -go.opentelemetry.io/collector/semconv v0.114.0 h1:/eKcCJwZepQUtEuFuxa0thx2XIOvhFpaf214ZG1a11k= -go.opentelemetry.io/collector/semconv v0.114.0/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= +go.opentelemetry.io/collector/client v1.21.0 h1:3Kes8lOFMYVxoxeAmX+DTEAkuS1iTA3NkSfqzGmygJA= +go.opentelemetry.io/collector/client v1.21.0/go.mod h1:jYJGiL0UA975OOyHmjbQSokNWt1OiviI5KjPOMUMGwc= +go.opentelemetry.io/collector/component v0.115.0 h1:iLte1oCiXzjiCnaOBKdsXacfFiECecpWxW3/LeriMoo= +go.opentelemetry.io/collector/component v0.115.0/go.mod h1:oIUFiH7w1eOimdeYhFI+gAIxYSiLDocKVJ0PTvX7d6s= +go.opentelemetry.io/collector/component/componenttest v0.115.0 h1:9URDJ9VyP6tuij+YHjp/kSSMecnZOd7oGvzu+rw9SJY= +go.opentelemetry.io/collector/component/componenttest v0.115.0/go.mod h1:PzXvNqKLCiSADZGZFKH+IOHMkaQ0GTHuzysfVbTPKYY= +go.opentelemetry.io/collector/config/configauth v0.115.0 h1:xa+ALdyPgva3rZnLBh1H2oS5MsHP6JxSqMtQmcELnys= +go.opentelemetry.io/collector/config/configauth v0.115.0/go.mod h1:C7anpb3Rf4KswMT+dgOzkW9UX0z/65PLORpUw3p0VYc= +go.opentelemetry.io/collector/config/configcompression v1.21.0 h1:0zbPdZAgPFMAarwJEC4gaR6f/JBP686A3TYSgb3oa+E= +go.opentelemetry.io/collector/config/configcompression v1.21.0/go.mod h1:LvYG00tbPTv0NOLoZN0wXq1F5thcxvukO8INq7xyfWU= +go.opentelemetry.io/collector/config/confighttp v0.115.0 h1:BIy394oNXnqySJwrCqgAJu4gWgAV5aQUDD6k1hy6C8o= +go.opentelemetry.io/collector/config/confighttp v0.115.0/go.mod h1:Wr50ut12NmCEAl4bWLJryw2EjUmJTtYRg89560Q51wc= +go.opentelemetry.io/collector/config/confignet v1.21.0 h1:PeQ5YrMnfftysFL/WVaSrjPOWjD6DfeABY50pf9CZxU= +go.opentelemetry.io/collector/config/confignet v1.21.0/go.mod h1:ZppUH1hgUJOubawEsxsQ9MzEYFytqo2GnVSS7d4CVxc= +go.opentelemetry.io/collector/config/configopaque v1.21.0 h1:PcvRGkBk4Px8BQM7tX+kw4i3jBsfAHGoGQbtZg6Ox7U= +go.opentelemetry.io/collector/config/configopaque v1.21.0/go.mod h1:sW0t0iI/VfRL9VYX7Ik6XzVgPcR+Y5kejTLsYcMyDWs= +go.opentelemetry.io/collector/config/configretry v1.21.0 h1:ZHoOvAkEcv5BBeaJn8IQ6rQ4GMPZWW4S+W7R4QTEbZU= +go.opentelemetry.io/collector/config/configretry v1.21.0/go.mod h1:cleBc9I0DIWpTiiHfu9v83FUaCTqcPXmebpLxjEIqro= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0 h1:U07FinCDop+r2RjWQ3aP9ZWONC7r7kQIp1GkXQi6nsI= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0/go.mod h1:SlBEwQg0qly75rXZ6W1Ig8jN25KBVBkFIIAUI1GiAAE= +go.opentelemetry.io/collector/config/configtls v1.21.0 h1:ZfrlAYgBD8lzp04W0GxwiDmUbrvKsvDYJi+wkyiXlpA= +go.opentelemetry.io/collector/config/configtls v1.21.0/go.mod h1:5EsNefPfVCMOTlOrr3wyj7LrsOgY7V8iqRl8oFZEqtw= +go.opentelemetry.io/collector/config/internal v0.115.0 h1:eVk57iufZpUXyPJFKTb1Ebx5tmcCyroIlt427r5pxS8= +go.opentelemetry.io/collector/config/internal v0.115.0/go.mod h1:OVkadRWlKAoWjHslqjWtBLAne8ceQm8WYT71ZcBWLFc= +go.opentelemetry.io/collector/confmap v1.21.0 h1:1tIcx2/Suwg8VhuPmQw87ba0ludPmumpFCFRZZa6RXA= +go.opentelemetry.io/collector/confmap v1.21.0/go.mod h1:Rrhs+MWoaP6AswZp+ReQ2VO9dfOfcUjdjiSHBsG+nec= +go.opentelemetry.io/collector/consumer v1.21.0 h1:THKZ2Vbi6GkamjTBI2hFq5Dc4kINZTWGwQNa8d/Ty9g= +go.opentelemetry.io/collector/consumer v1.21.0/go.mod h1:FQcC4ThMtRYY41dv+IPNK8POLLhAFY3r1YR5fuP7iiY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0 h1:yli//xBCQMPZKXNgNlXemo4dvqhnFrAmCZ11DvQgmcY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0/go.mod h1:LwVzAvQ6ZVNG7mbOvurbAo+W/rKws0IcjOwriuZXqPE= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 h1:H3fDuyQW1t2HWHkz96WMBQJKUevypOCjBqnqtaAWyoA= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0/go.mod h1:IzEmZ91Tp7TBxVDq8Cc9xvLsmO7H08njr6Pu9P5d9ns= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0 h1:hru0I2447y0TluCdwlKYFFtgcpyCnlM+LiOK1JZyA70= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0/go.mod h1:ybjALRJWR6aKNOzEMy1T1ruCULVDEjj4omtOJMrH/kU= +go.opentelemetry.io/collector/exporter v0.115.0 h1:JnxfpOnsuqhTPKJXVKJLS1Cv3BiVrVLzpHOjJEQw+xw= +go.opentelemetry.io/collector/exporter v0.115.0/go.mod h1:xof3fHQK8wADhaKLIJcQ7ChZaFLNC+haRdPN0wgl6kY= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0 h1:lSQEleCn/q9eFufcuK61NdFKU70ZlgI9dBjPCO/4CrE= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0/go.mod h1:7l5K2AecimX2kx+nZC1gKG3QkP247CO1+SodmJ4fFkQ= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0 h1:P9SMTUXQOtcaq40bGtnnAe14zRmR4/yUgj/Tb2BEf/k= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0/go.mod h1:1jMZ9gFGXglb8wfNrBZIgd+RvpZhSyFwdfE+Jtf9w4U= +go.opentelemetry.io/collector/extension v0.115.0 h1:/cBb8AUdD0KMWC6V3lvCC16eP9Fg0wd1Upcp5rgvuGI= +go.opentelemetry.io/collector/extension v0.115.0/go.mod h1:HI7Ak6loyi6ZrZPsQJW1OO1wbaAW8OqXLFNQlTZnreQ= +go.opentelemetry.io/collector/extension/auth v0.115.0 h1:TTMokbBsSHZRFH48PvGSJmgSS8F3Rkr9MWGHZn8eJDk= +go.opentelemetry.io/collector/extension/auth v0.115.0/go.mod h1:3w+2mzeb2OYNOO4Bi41TUo4jr32ap2y7AOq64IDpxQo= +go.opentelemetry.io/collector/extension/auth/authtest v0.115.0 h1:OZe7dKbZ01qodSpZU0ZYzI6zpmmzJ3UvfdBSFAbSgDw= +go.opentelemetry.io/collector/extension/auth/authtest v0.115.0/go.mod h1:fk9WCXP0x91Q64Z8HZKWTHh9PWtgoWE1KXe3n2Bff3U= +go.opentelemetry.io/collector/extension/experimental/storage v0.115.0 h1:sZXw0+77092pq24CkUoTRoHQPLQUsDq6HFRNB0g5yR4= +go.opentelemetry.io/collector/extension/experimental/storage v0.115.0/go.mod h1:qjFH7Y3QYYs88By2ZB5GMSUN5k3ul4Brrq2J6lKACA0= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0 h1:GBVFxFEskR8jSdu9uaQh2qpXnN5VNXhXjpJ2UjxtE8I= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0/go.mod h1:eu1ecbz5mT+cHoH2H3GmD/rOO0WsicSJD2RLrYuOmRA= +go.opentelemetry.io/collector/featuregate v1.21.0 h1:+EULHPJDLMipcwAGZVp9Nm8NriRvoBBMxp7MSiIZVMI= +go.opentelemetry.io/collector/featuregate v1.21.0/go.mod h1:3GaXqflNDVwWndNGBJ1+XJFy3Fv/XrFgjMN60N3z7yg= +go.opentelemetry.io/collector/pdata v1.21.0 h1:PG+UbiFMJ35X/WcAR7Rf/PWmWtRdW0aHlOidsR6c5MA= +go.opentelemetry.io/collector/pdata v1.21.0/go.mod h1:GKb1/zocKJMvxKbS+sl0W85lxhYBTFJ6h6I1tphVyDU= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0 h1:NI89hy13vNDw7EOnQf7Jtitks4HJFO0SUWznTssmP94= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0/go.mod h1:jGzdNfO0XTtfLjXCL/uCC1livg1LlfR+ix2WE/z3RpQ= +go.opentelemetry.io/collector/pdata/testdata v0.115.0 h1:Rblz+AKXdo3fG626jS+KSd0OSA4uMXcTQfpwed6P8LI= +go.opentelemetry.io/collector/pdata/testdata v0.115.0/go.mod h1:inNnRt6S2Nn260EfCBEcjesjlKOSsr0jPwkPqpBkt4s= +go.opentelemetry.io/collector/pipeline v0.115.0 h1:bmACBqb0e8U9ag+vGGHUP7kCfAO7HHROdtzIEg8ulus= +go.opentelemetry.io/collector/pipeline v0.115.0/go.mod h1:qE3DmoB05AW0C3lmPvdxZqd/H4po84NPzd5MrqgtL74= +go.opentelemetry.io/collector/receiver v0.115.0 h1:55Q3Jvj6zHCIA1psKqi/3kEMJO4OqUF5tNAEYNdB1U8= +go.opentelemetry.io/collector/receiver v0.115.0/go.mod h1:nBSCh2O/WUcfgpJ+Jpz+B0z0Hn5jHeRvF2WmLij5EIY= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0 h1:R9JLaj2Al93smIPUkbJshAkb/cY0H5JBOxIx+Zu0NG4= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0/go.mod h1:05E5hGujWeeXJmzKZwTdHyZ/+rRyrQlQB5p5Q2XY39M= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0 h1:OiB684SbHQi6/Pd3ZH0cXjYvCpBS9ilQBfTQx0wVXHg= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0/go.mod h1:Y8Z9U/bz9Xpyt8GI8DxZZgryw3mnnIw+AeKVLTD2cP8= +go.opentelemetry.io/collector/semconv v0.115.0 h1:SoqMvg4ZEB3mz2EdAb6XYa+TuMo5Mir5FRBr3nVFUDY= +go.opentelemetry.io/collector/semconv v0.115.0/go.mod h1:N6XE8Q0JKgBN2fAhkUQtqK9LT7rEGR6+Wu/Rtbal1iI= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 h1:UP6IpuHFkUgOQL9FFQFrZ+5LiwhhYRbi7VZSIx6Nj5s= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0/go.mod h1:qxuZLtbq5QDtdeSHsS7bcf6EH6uO6jUAgk764zd3rhM= go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= diff --git a/comp/otelcol/otlp/components/processor/infraattributesprocessor/go.mod b/comp/otelcol/otlp/components/processor/infraattributesprocessor/go.mod index b7b05613e4005..86f54c29c25ad 100644 --- a/comp/otelcol/otlp/components/processor/infraattributesprocessor/go.mod +++ b/comp/otelcol/otlp/components/processor/infraattributesprocessor/go.mod @@ -37,15 +37,15 @@ require ( github.com/DataDog/datadog-agent/comp/core/tagger/tags v0.0.0-00010101000000-000000000000 github.com/DataDog/datadog-agent/comp/core/tagger/types v0.59.0 github.com/stretchr/testify v1.10.0 - go.opentelemetry.io/collector/component v0.114.0 - go.opentelemetry.io/collector/component/componenttest v0.114.0 - go.opentelemetry.io/collector/confmap v1.20.0 - go.opentelemetry.io/collector/consumer v0.114.0 - go.opentelemetry.io/collector/consumer/consumertest v0.114.0 - go.opentelemetry.io/collector/pdata v1.20.0 - go.opentelemetry.io/collector/processor v0.114.0 - go.opentelemetry.io/collector/processor/processortest v0.114.0 - go.opentelemetry.io/collector/semconv v0.114.0 + go.opentelemetry.io/collector/component v0.115.0 + go.opentelemetry.io/collector/component/componenttest v0.115.0 + go.opentelemetry.io/collector/confmap v1.21.0 + go.opentelemetry.io/collector/consumer v1.21.0 + go.opentelemetry.io/collector/consumer/consumertest v0.115.0 + go.opentelemetry.io/collector/pdata v1.21.0 + go.opentelemetry.io/collector/processor v0.115.0 + go.opentelemetry.io/collector/processor/processortest v0.115.0 + go.opentelemetry.io/collector/semconv v0.115.0 go.opentelemetry.io/otel/metric v1.32.0 go.opentelemetry.io/otel/trace v1.32.0 go.uber.org/zap v1.27.0 @@ -68,13 +68,13 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - go.opentelemetry.io/collector/component/componentstatus v0.114.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/pdata/pprofile v0.114.0 // indirect - go.opentelemetry.io/collector/pdata/testdata v0.114.0 // indirect - go.opentelemetry.io/collector/pipeline v0.114.0 // indirect - go.opentelemetry.io/collector/processor/processorprofiles v0.114.0 // indirect + go.opentelemetry.io/collector/component/componentstatus v0.115.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/pdata/pprofile v0.115.0 // indirect + go.opentelemetry.io/collector/pdata/testdata v0.115.0 // indirect + go.opentelemetry.io/collector/pipeline v0.115.0 // indirect + go.opentelemetry.io/collector/processor/processorprofiles v0.115.0 // indirect go.opentelemetry.io/otel v1.32.0 // indirect go.opentelemetry.io/otel/sdk v1.32.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect diff --git a/comp/otelcol/otlp/components/processor/infraattributesprocessor/go.sum b/comp/otelcol/otlp/components/processor/infraattributesprocessor/go.sum index 0bae72c3d6c8f..30f9f975f43b2 100644 --- a/comp/otelcol/otlp/components/processor/infraattributesprocessor/go.sum +++ b/comp/otelcol/otlp/components/processor/infraattributesprocessor/go.sum @@ -50,38 +50,38 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.opentelemetry.io/collector/component v0.114.0 h1:SVGbm5LvHGSTEDv7p92oPuBgK5tuiWR82I9+LL4TtBE= -go.opentelemetry.io/collector/component v0.114.0/go.mod h1:MLxtjZ6UVHjDxSdhGLuJfHBHvfl1iT/Y7IaQPD24Eww= -go.opentelemetry.io/collector/component/componentstatus v0.114.0 h1:y9my/xink8KB5lK8zFAjgB2+pEh0QYy5TM972fxZY9w= -go.opentelemetry.io/collector/component/componentstatus v0.114.0/go.mod h1:RIoeCYZpPaae7QLE/1RacqzhHuXBmzRAk9H/EwYtIIs= -go.opentelemetry.io/collector/component/componenttest v0.114.0 h1:GM4FTTlfeXoVm6sZYBHImwlRN8ayh2oAfUhvaFj7Zo8= -go.opentelemetry.io/collector/component/componenttest v0.114.0/go.mod h1:ZZEJMtbJtoVC/3/9R1HzERq+cYQRxuMFQrPCpfZ4Xos= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0 h1:kjLeyrumge6wsX6ZIkicdNOlBXaEyW2PI2ZdVXz/rzY= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0/go.mod h1:R0MBUxjSMVMIhljuDHWIygzzJWQyZHXXWIgQNxcFwhc= -go.opentelemetry.io/collector/confmap v1.20.0 h1:ARfOwmkKxFOud1njl03yAHQ30+uenlzqCO6LBYamDTE= -go.opentelemetry.io/collector/confmap v1.20.0/go.mod h1:DMpd9Ay/ffls3JoQBQ73vWeRsz1rNuLbwjo6WtjSQus= -go.opentelemetry.io/collector/consumer v0.114.0 h1:1zVaHvfIZowGwZRitRBRo3i+RP2StlU+GClYiofSw0Q= -go.opentelemetry.io/collector/consumer v0.114.0/go.mod h1:d+Mrzt9hsH1ub3zmwSlnQVPLeTYir4Mgo7CrWfnncN4= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 h1:5pXYy3E6UK5Huu3aQbsYL8B6E6MyWx4fvXXDn+oXZaA= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0/go.mod h1:PMq3f54KcJQO4v1tue0QxQScu7REFVADlXxXSAYMiN0= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0 h1:isaTwJK5DOy8Bs7GuLq23ejfgj8gLIo5dOUvkRnLF4g= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0/go.mod h1:GNeLPkfRPdh06n/Rv1UKa/cAtCKjN0a7ADyHjIj4HFE= -go.opentelemetry.io/collector/pdata v1.20.0 h1:ePcwt4bdtISP0loHaE+C9xYoU2ZkIvWv89Fob16o9SM= -go.opentelemetry.io/collector/pdata v1.20.0/go.mod h1:Ox1YVLe87cZDB/TL30i4SUz1cA5s6AM6SpFMfY61ICs= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0 h1:pUNfTzsI/JUTiE+DScDM4lsrPoxnVNLI2fbTxR/oapo= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0/go.mod h1:4aNcj6WM1n1uXyFSXlhVs4ibrERgNYsTbzcYI2zGhxA= -go.opentelemetry.io/collector/pdata/testdata v0.114.0 h1:+AzszWSL1i4K6meQ8rU0JDDW55SYCXa6FVqfDixhhTo= -go.opentelemetry.io/collector/pdata/testdata v0.114.0/go.mod h1:bv8XFdCTZxG2MQB5l9dKxSxf5zBrcodwO6JOy1+AxXM= -go.opentelemetry.io/collector/pipeline v0.114.0 h1:v3YOhc5z0tD6QbO5n/pnftpIeroihM2ks9Z2yKPCcwY= -go.opentelemetry.io/collector/pipeline v0.114.0/go.mod h1:4vOvjVsoYTHVGTbfFwqfnQOSV2K3RKUHofh3jNRc2Mg= -go.opentelemetry.io/collector/processor v0.114.0 h1:6bqQgLL7BtKrNv4YkEOGjZfkcfZv/ciJSQx1epGG9Zk= -go.opentelemetry.io/collector/processor v0.114.0/go.mod h1:DV/wa+nAmSHIDeD9NblPwkY9PbgtDQAZJ+PE5biZwPc= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0 h1:+P/1nLouEXTnN8DVQl+qWwO4BTkQyNPG9t/FrpUqrSI= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0/go.mod h1:3fuHeNIpINwx3bqFMprmDJyr6y5tWoWbJH599kltO5Y= -go.opentelemetry.io/collector/processor/processortest v0.114.0 h1:3FTaVXAp0LoVmUJn1ewBFckAby7AHa6/Kcdj0xuW14c= -go.opentelemetry.io/collector/processor/processortest v0.114.0/go.mod h1:OgsdOs1Fv5ZGTTJPF5nNIUJh2YkuV1acWd73yWgnti4= -go.opentelemetry.io/collector/semconv v0.114.0 h1:/eKcCJwZepQUtEuFuxa0thx2XIOvhFpaf214ZG1a11k= -go.opentelemetry.io/collector/semconv v0.114.0/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= +go.opentelemetry.io/collector/component v0.115.0 h1:iLte1oCiXzjiCnaOBKdsXacfFiECecpWxW3/LeriMoo= +go.opentelemetry.io/collector/component v0.115.0/go.mod h1:oIUFiH7w1eOimdeYhFI+gAIxYSiLDocKVJ0PTvX7d6s= +go.opentelemetry.io/collector/component/componentstatus v0.115.0 h1:pbpUIL+uKDfEiSgKK+S5nuSL6MDIIQYsp4b65ZGVb9M= +go.opentelemetry.io/collector/component/componentstatus v0.115.0/go.mod h1:36A+9XSiOz0Cdhq+UwwPRlEr5CYuSkEnVO9om4BH7d0= +go.opentelemetry.io/collector/component/componenttest v0.115.0 h1:9URDJ9VyP6tuij+YHjp/kSSMecnZOd7oGvzu+rw9SJY= +go.opentelemetry.io/collector/component/componenttest v0.115.0/go.mod h1:PzXvNqKLCiSADZGZFKH+IOHMkaQ0GTHuzysfVbTPKYY= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0 h1:U07FinCDop+r2RjWQ3aP9ZWONC7r7kQIp1GkXQi6nsI= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0/go.mod h1:SlBEwQg0qly75rXZ6W1Ig8jN25KBVBkFIIAUI1GiAAE= +go.opentelemetry.io/collector/confmap v1.21.0 h1:1tIcx2/Suwg8VhuPmQw87ba0ludPmumpFCFRZZa6RXA= +go.opentelemetry.io/collector/confmap v1.21.0/go.mod h1:Rrhs+MWoaP6AswZp+ReQ2VO9dfOfcUjdjiSHBsG+nec= +go.opentelemetry.io/collector/consumer v1.21.0 h1:THKZ2Vbi6GkamjTBI2hFq5Dc4kINZTWGwQNa8d/Ty9g= +go.opentelemetry.io/collector/consumer v1.21.0/go.mod h1:FQcC4ThMtRYY41dv+IPNK8POLLhAFY3r1YR5fuP7iiY= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 h1:H3fDuyQW1t2HWHkz96WMBQJKUevypOCjBqnqtaAWyoA= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0/go.mod h1:IzEmZ91Tp7TBxVDq8Cc9xvLsmO7H08njr6Pu9P5d9ns= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0 h1:hru0I2447y0TluCdwlKYFFtgcpyCnlM+LiOK1JZyA70= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0/go.mod h1:ybjALRJWR6aKNOzEMy1T1ruCULVDEjj4omtOJMrH/kU= +go.opentelemetry.io/collector/pdata v1.21.0 h1:PG+UbiFMJ35X/WcAR7Rf/PWmWtRdW0aHlOidsR6c5MA= +go.opentelemetry.io/collector/pdata v1.21.0/go.mod h1:GKb1/zocKJMvxKbS+sl0W85lxhYBTFJ6h6I1tphVyDU= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0 h1:NI89hy13vNDw7EOnQf7Jtitks4HJFO0SUWznTssmP94= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0/go.mod h1:jGzdNfO0XTtfLjXCL/uCC1livg1LlfR+ix2WE/z3RpQ= +go.opentelemetry.io/collector/pdata/testdata v0.115.0 h1:Rblz+AKXdo3fG626jS+KSd0OSA4uMXcTQfpwed6P8LI= +go.opentelemetry.io/collector/pdata/testdata v0.115.0/go.mod h1:inNnRt6S2Nn260EfCBEcjesjlKOSsr0jPwkPqpBkt4s= +go.opentelemetry.io/collector/pipeline v0.115.0 h1:bmACBqb0e8U9ag+vGGHUP7kCfAO7HHROdtzIEg8ulus= +go.opentelemetry.io/collector/pipeline v0.115.0/go.mod h1:qE3DmoB05AW0C3lmPvdxZqd/H4po84NPzd5MrqgtL74= +go.opentelemetry.io/collector/processor v0.115.0 h1:+fveHGRe24PZPv/F5taahGuZ9HdNW44hgNWEJhIUdyc= +go.opentelemetry.io/collector/processor v0.115.0/go.mod h1:/oLHBlLsm7tFb7zOIrA5C0j14yBtjXKAgxJJ2Bktyk4= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0 h1:cCZAs+FXaebZPppqAN3m+X3etoSBL6NvyQo8l0hOZoo= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0/go.mod h1:kMxF0gknlWX4duuAJFi2/HuIRi6C3w95tOenRa0GKOY= +go.opentelemetry.io/collector/processor/processortest v0.115.0 h1:j9HEaYFOeOB6VYl9zGhBnhQbTkqGBa2udUvu5NTh6hc= +go.opentelemetry.io/collector/processor/processortest v0.115.0/go.mod h1:Gws+VEnp/eW3qAqPpqbKsrbnnxxNfyDjqrfUXbZfZic= +go.opentelemetry.io/collector/semconv v0.115.0 h1:SoqMvg4ZEB3mz2EdAb6XYa+TuMo5Mir5FRBr3nVFUDY= +go.opentelemetry.io/collector/semconv v0.115.0/go.mod h1:N6XE8Q0JKgBN2fAhkUQtqK9LT7rEGR6+Wu/Rtbal1iI= go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg= go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M= diff --git a/comp/otelcol/otlp/components/statsprocessor/go.mod b/comp/otelcol/otlp/components/statsprocessor/go.mod index 5d552885f7b36..192bbaae21eaa 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.mod +++ b/comp/otelcol/otlp/components/statsprocessor/go.mod @@ -25,12 +25,12 @@ require ( github.com/DataDog/datadog-go/v5 v5.5.0 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 github.com/stretchr/testify v1.10.0 - go.opentelemetry.io/collector/component/componenttest v0.114.0 - go.opentelemetry.io/collector/pdata v1.20.0 + go.opentelemetry.io/collector/component/componenttest v0.115.0 + go.opentelemetry.io/collector/pdata v1.21.0 go.opentelemetry.io/otel/sdk/metric v1.32.0 ) -require go.opentelemetry.io/collector/component v0.114.0 // indirect +require go.opentelemetry.io/collector/component v0.115.0 // indirect require ( github.com/DataDog/datadog-agent/comp/trace/compression/def v0.56.0-rc.3 // indirect @@ -78,8 +78,8 @@ require ( github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.114.0 // indirect - go.opentelemetry.io/collector/semconv v0.114.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.115.0 // indirect + go.opentelemetry.io/collector/semconv v0.115.0 // indirect go.opentelemetry.io/otel v1.32.0 // indirect go.opentelemetry.io/otel/metric v1.32.0 // indirect go.opentelemetry.io/otel/sdk v1.32.0 // indirect diff --git a/comp/otelcol/otlp/components/statsprocessor/go.sum b/comp/otelcol/otlp/components/statsprocessor/go.sum index 3c983553c9350..259d4a5ef2d1b 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.sum +++ b/comp/otelcol/otlp/components/statsprocessor/go.sum @@ -78,10 +78,10 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0 h1:mtSN/07RGQPi1/zHVSZg4G0qRtOoJpPew5jsQWv9uS0= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0/go.mod h1:C9Zgh/N3j4NR2D+1FGAA1YizhFW9OS51DwLUFJTdXN4= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0 h1:I4ZYVRYW3Cjb65sPENZ9kHam/JUMXNEp2n/knJ0C0Vc= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0/go.mod h1:4BhyIaOn2LS48WS+ZNix4TpP0+goq9gDEtGzth5Cr3M= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0 h1:R9MRrO+dSkAHBQLZjuwjv2RHXHQqF2Wtm1Ki0VKD5cs= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0/go.mod h1:rKXLXmwdUVcUHwTilroKSejbg3KSwLeYzNPSpkIEnv4= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0 h1:vwZQ7k8oqlK0bdZYTsjP/59zjQQfjSD4fNsWIWsTu2w= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0/go.mod h1:5ObSa9amrbzbYTdAK1Qhv3D/YqCxxnQhP0sk2eWB7Oo= github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/outcaste-io/ristretto v0.2.3 h1:AK4zt/fJ76kjlYObOeNwh4T3asEuaCmp26pOvUOL9w0= @@ -134,36 +134,36 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.opentelemetry.io/collector/component v0.114.0 h1:SVGbm5LvHGSTEDv7p92oPuBgK5tuiWR82I9+LL4TtBE= -go.opentelemetry.io/collector/component v0.114.0/go.mod h1:MLxtjZ6UVHjDxSdhGLuJfHBHvfl1iT/Y7IaQPD24Eww= -go.opentelemetry.io/collector/component/componentstatus v0.114.0 h1:y9my/xink8KB5lK8zFAjgB2+pEh0QYy5TM972fxZY9w= -go.opentelemetry.io/collector/component/componentstatus v0.114.0/go.mod h1:RIoeCYZpPaae7QLE/1RacqzhHuXBmzRAk9H/EwYtIIs= -go.opentelemetry.io/collector/component/componenttest v0.114.0 h1:GM4FTTlfeXoVm6sZYBHImwlRN8ayh2oAfUhvaFj7Zo8= -go.opentelemetry.io/collector/component/componenttest v0.114.0/go.mod h1:ZZEJMtbJtoVC/3/9R1HzERq+cYQRxuMFQrPCpfZ4Xos= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0 h1:kjLeyrumge6wsX6ZIkicdNOlBXaEyW2PI2ZdVXz/rzY= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0/go.mod h1:R0MBUxjSMVMIhljuDHWIygzzJWQyZHXXWIgQNxcFwhc= -go.opentelemetry.io/collector/consumer v0.114.0 h1:1zVaHvfIZowGwZRitRBRo3i+RP2StlU+GClYiofSw0Q= -go.opentelemetry.io/collector/consumer v0.114.0/go.mod h1:d+Mrzt9hsH1ub3zmwSlnQVPLeTYir4Mgo7CrWfnncN4= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 h1:5pXYy3E6UK5Huu3aQbsYL8B6E6MyWx4fvXXDn+oXZaA= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0/go.mod h1:PMq3f54KcJQO4v1tue0QxQScu7REFVADlXxXSAYMiN0= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0 h1:isaTwJK5DOy8Bs7GuLq23ejfgj8gLIo5dOUvkRnLF4g= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0/go.mod h1:GNeLPkfRPdh06n/Rv1UKa/cAtCKjN0a7ADyHjIj4HFE= -go.opentelemetry.io/collector/pdata v1.20.0 h1:ePcwt4bdtISP0loHaE+C9xYoU2ZkIvWv89Fob16o9SM= -go.opentelemetry.io/collector/pdata v1.20.0/go.mod h1:Ox1YVLe87cZDB/TL30i4SUz1cA5s6AM6SpFMfY61ICs= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0 h1:pUNfTzsI/JUTiE+DScDM4lsrPoxnVNLI2fbTxR/oapo= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0/go.mod h1:4aNcj6WM1n1uXyFSXlhVs4ibrERgNYsTbzcYI2zGhxA= -go.opentelemetry.io/collector/pdata/testdata v0.114.0 h1:+AzszWSL1i4K6meQ8rU0JDDW55SYCXa6FVqfDixhhTo= -go.opentelemetry.io/collector/pdata/testdata v0.114.0/go.mod h1:bv8XFdCTZxG2MQB5l9dKxSxf5zBrcodwO6JOy1+AxXM= -go.opentelemetry.io/collector/pipeline v0.114.0 h1:v3YOhc5z0tD6QbO5n/pnftpIeroihM2ks9Z2yKPCcwY= -go.opentelemetry.io/collector/pipeline v0.114.0/go.mod h1:4vOvjVsoYTHVGTbfFwqfnQOSV2K3RKUHofh3jNRc2Mg= -go.opentelemetry.io/collector/processor v0.114.0 h1:6bqQgLL7BtKrNv4YkEOGjZfkcfZv/ciJSQx1epGG9Zk= -go.opentelemetry.io/collector/processor v0.114.0/go.mod h1:DV/wa+nAmSHIDeD9NblPwkY9PbgtDQAZJ+PE5biZwPc= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0 h1:+P/1nLouEXTnN8DVQl+qWwO4BTkQyNPG9t/FrpUqrSI= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0/go.mod h1:3fuHeNIpINwx3bqFMprmDJyr6y5tWoWbJH599kltO5Y= -go.opentelemetry.io/collector/processor/processortest v0.114.0 h1:3FTaVXAp0LoVmUJn1ewBFckAby7AHa6/Kcdj0xuW14c= -go.opentelemetry.io/collector/processor/processortest v0.114.0/go.mod h1:OgsdOs1Fv5ZGTTJPF5nNIUJh2YkuV1acWd73yWgnti4= -go.opentelemetry.io/collector/semconv v0.114.0 h1:/eKcCJwZepQUtEuFuxa0thx2XIOvhFpaf214ZG1a11k= -go.opentelemetry.io/collector/semconv v0.114.0/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= +go.opentelemetry.io/collector/component v0.115.0 h1:iLte1oCiXzjiCnaOBKdsXacfFiECecpWxW3/LeriMoo= +go.opentelemetry.io/collector/component v0.115.0/go.mod h1:oIUFiH7w1eOimdeYhFI+gAIxYSiLDocKVJ0PTvX7d6s= +go.opentelemetry.io/collector/component/componentstatus v0.115.0 h1:pbpUIL+uKDfEiSgKK+S5nuSL6MDIIQYsp4b65ZGVb9M= +go.opentelemetry.io/collector/component/componentstatus v0.115.0/go.mod h1:36A+9XSiOz0Cdhq+UwwPRlEr5CYuSkEnVO9om4BH7d0= +go.opentelemetry.io/collector/component/componenttest v0.115.0 h1:9URDJ9VyP6tuij+YHjp/kSSMecnZOd7oGvzu+rw9SJY= +go.opentelemetry.io/collector/component/componenttest v0.115.0/go.mod h1:PzXvNqKLCiSADZGZFKH+IOHMkaQ0GTHuzysfVbTPKYY= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0 h1:U07FinCDop+r2RjWQ3aP9ZWONC7r7kQIp1GkXQi6nsI= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0/go.mod h1:SlBEwQg0qly75rXZ6W1Ig8jN25KBVBkFIIAUI1GiAAE= +go.opentelemetry.io/collector/consumer v1.21.0 h1:THKZ2Vbi6GkamjTBI2hFq5Dc4kINZTWGwQNa8d/Ty9g= +go.opentelemetry.io/collector/consumer v1.21.0/go.mod h1:FQcC4ThMtRYY41dv+IPNK8POLLhAFY3r1YR5fuP7iiY= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 h1:H3fDuyQW1t2HWHkz96WMBQJKUevypOCjBqnqtaAWyoA= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0/go.mod h1:IzEmZ91Tp7TBxVDq8Cc9xvLsmO7H08njr6Pu9P5d9ns= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0 h1:hru0I2447y0TluCdwlKYFFtgcpyCnlM+LiOK1JZyA70= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0/go.mod h1:ybjALRJWR6aKNOzEMy1T1ruCULVDEjj4omtOJMrH/kU= +go.opentelemetry.io/collector/pdata v1.21.0 h1:PG+UbiFMJ35X/WcAR7Rf/PWmWtRdW0aHlOidsR6c5MA= +go.opentelemetry.io/collector/pdata v1.21.0/go.mod h1:GKb1/zocKJMvxKbS+sl0W85lxhYBTFJ6h6I1tphVyDU= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0 h1:NI89hy13vNDw7EOnQf7Jtitks4HJFO0SUWznTssmP94= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0/go.mod h1:jGzdNfO0XTtfLjXCL/uCC1livg1LlfR+ix2WE/z3RpQ= +go.opentelemetry.io/collector/pdata/testdata v0.115.0 h1:Rblz+AKXdo3fG626jS+KSd0OSA4uMXcTQfpwed6P8LI= +go.opentelemetry.io/collector/pdata/testdata v0.115.0/go.mod h1:inNnRt6S2Nn260EfCBEcjesjlKOSsr0jPwkPqpBkt4s= +go.opentelemetry.io/collector/pipeline v0.115.0 h1:bmACBqb0e8U9ag+vGGHUP7kCfAO7HHROdtzIEg8ulus= +go.opentelemetry.io/collector/pipeline v0.115.0/go.mod h1:qE3DmoB05AW0C3lmPvdxZqd/H4po84NPzd5MrqgtL74= +go.opentelemetry.io/collector/processor v0.115.0 h1:+fveHGRe24PZPv/F5taahGuZ9HdNW44hgNWEJhIUdyc= +go.opentelemetry.io/collector/processor v0.115.0/go.mod h1:/oLHBlLsm7tFb7zOIrA5C0j14yBtjXKAgxJJ2Bktyk4= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0 h1:cCZAs+FXaebZPppqAN3m+X3etoSBL6NvyQo8l0hOZoo= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0/go.mod h1:kMxF0gknlWX4duuAJFi2/HuIRi6C3w95tOenRa0GKOY= +go.opentelemetry.io/collector/processor/processortest v0.115.0 h1:j9HEaYFOeOB6VYl9zGhBnhQbTkqGBa2udUvu5NTh6hc= +go.opentelemetry.io/collector/processor/processortest v0.115.0/go.mod h1:Gws+VEnp/eW3qAqPpqbKsrbnnxxNfyDjqrfUXbZfZic= +go.opentelemetry.io/collector/semconv v0.115.0 h1:SoqMvg4ZEB3mz2EdAb6XYa+TuMo5Mir5FRBr3nVFUDY= +go.opentelemetry.io/collector/semconv v0.115.0/go.mod h1:N6XE8Q0JKgBN2fAhkUQtqK9LT7rEGR6+Wu/Rtbal1iI= go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg= go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M= diff --git a/comp/otelcol/otlp/testutil/go.mod b/comp/otelcol/otlp/testutil/go.mod index 08136f64f178e..e606714cf39f7 100644 --- a/comp/otelcol/otlp/testutil/go.mod +++ b/comp/otelcol/otlp/testutil/go.mod @@ -41,7 +41,7 @@ require ( github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 github.com/DataDog/sketches-go v1.4.6 github.com/stretchr/testify v1.10.0 - go.opentelemetry.io/collector/pdata v1.20.0 + go.opentelemetry.io/collector/pdata v1.21.0 google.golang.org/protobuf v1.35.2 ) diff --git a/comp/otelcol/otlp/testutil/go.sum b/comp/otelcol/otlp/testutil/go.sum index b16358f7fcc0e..760f51bf0cd82 100644 --- a/comp/otelcol/otlp/testutil/go.sum +++ b/comp/otelcol/otlp/testutil/go.sum @@ -244,8 +244,8 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.opentelemetry.io/collector/pdata v1.20.0 h1:ePcwt4bdtISP0loHaE+C9xYoU2ZkIvWv89Fob16o9SM= -go.opentelemetry.io/collector/pdata v1.20.0/go.mod h1:Ox1YVLe87cZDB/TL30i4SUz1cA5s6AM6SpFMfY61ICs= +go.opentelemetry.io/collector/pdata v1.21.0 h1:PG+UbiFMJ35X/WcAR7Rf/PWmWtRdW0aHlOidsR6c5MA= +go.opentelemetry.io/collector/pdata v1.21.0/go.mod h1:GKb1/zocKJMvxKbS+sl0W85lxhYBTFJ6h6I1tphVyDU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= diff --git a/comp/trace/agent/def/go.mod b/comp/trace/agent/def/go.mod index 3ab74572b71b2..20be806e2e410 100644 --- a/comp/trace/agent/def/go.mod +++ b/comp/trace/agent/def/go.mod @@ -7,11 +7,11 @@ replace github.com/DataDog/datadog-agent/pkg/proto => ../../../../pkg/proto require ( github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 - go.opentelemetry.io/collector/pdata v1.20.0 + go.opentelemetry.io/collector/pdata v1.21.0 ) require ( - go.opentelemetry.io/collector/component/componenttest v0.114.0 // indirect + go.opentelemetry.io/collector/component/componenttest v0.115.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect ) @@ -22,9 +22,9 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect github.com/tinylib/msgp v1.2.4 // indirect - go.opentelemetry.io/collector/component v0.114.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.114.0 // indirect - go.opentelemetry.io/collector/semconv v0.114.0 // indirect + go.opentelemetry.io/collector/component v0.115.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.115.0 // indirect + go.opentelemetry.io/collector/semconv v0.115.0 // indirect go.opentelemetry.io/otel v1.32.0 // indirect go.opentelemetry.io/otel/metric v1.32.0 // indirect go.opentelemetry.io/otel/trace v1.32.0 // indirect diff --git a/comp/trace/agent/def/go.sum b/comp/trace/agent/def/go.sum index dd3eb5357b3e6..e6671ffe97bf1 100644 --- a/comp/trace/agent/def/go.sum +++ b/comp/trace/agent/def/go.sum @@ -45,16 +45,16 @@ github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vb github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.opentelemetry.io/collector/component v0.114.0 h1:SVGbm5LvHGSTEDv7p92oPuBgK5tuiWR82I9+LL4TtBE= -go.opentelemetry.io/collector/component v0.114.0/go.mod h1:MLxtjZ6UVHjDxSdhGLuJfHBHvfl1iT/Y7IaQPD24Eww= -go.opentelemetry.io/collector/component/componenttest v0.114.0 h1:GM4FTTlfeXoVm6sZYBHImwlRN8ayh2oAfUhvaFj7Zo8= -go.opentelemetry.io/collector/component/componenttest v0.114.0/go.mod h1:ZZEJMtbJtoVC/3/9R1HzERq+cYQRxuMFQrPCpfZ4Xos= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0 h1:kjLeyrumge6wsX6ZIkicdNOlBXaEyW2PI2ZdVXz/rzY= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0/go.mod h1:R0MBUxjSMVMIhljuDHWIygzzJWQyZHXXWIgQNxcFwhc= -go.opentelemetry.io/collector/pdata v1.20.0 h1:ePcwt4bdtISP0loHaE+C9xYoU2ZkIvWv89Fob16o9SM= -go.opentelemetry.io/collector/pdata v1.20.0/go.mod h1:Ox1YVLe87cZDB/TL30i4SUz1cA5s6AM6SpFMfY61ICs= -go.opentelemetry.io/collector/semconv v0.114.0 h1:/eKcCJwZepQUtEuFuxa0thx2XIOvhFpaf214ZG1a11k= -go.opentelemetry.io/collector/semconv v0.114.0/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= +go.opentelemetry.io/collector/component v0.115.0 h1:iLte1oCiXzjiCnaOBKdsXacfFiECecpWxW3/LeriMoo= +go.opentelemetry.io/collector/component v0.115.0/go.mod h1:oIUFiH7w1eOimdeYhFI+gAIxYSiLDocKVJ0PTvX7d6s= +go.opentelemetry.io/collector/component/componenttest v0.115.0 h1:9URDJ9VyP6tuij+YHjp/kSSMecnZOd7oGvzu+rw9SJY= +go.opentelemetry.io/collector/component/componenttest v0.115.0/go.mod h1:PzXvNqKLCiSADZGZFKH+IOHMkaQ0GTHuzysfVbTPKYY= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0 h1:U07FinCDop+r2RjWQ3aP9ZWONC7r7kQIp1GkXQi6nsI= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0/go.mod h1:SlBEwQg0qly75rXZ6W1Ig8jN25KBVBkFIIAUI1GiAAE= +go.opentelemetry.io/collector/pdata v1.21.0 h1:PG+UbiFMJ35X/WcAR7Rf/PWmWtRdW0aHlOidsR6c5MA= +go.opentelemetry.io/collector/pdata v1.21.0/go.mod h1:GKb1/zocKJMvxKbS+sl0W85lxhYBTFJ6h6I1tphVyDU= +go.opentelemetry.io/collector/semconv v0.115.0 h1:SoqMvg4ZEB3mz2EdAb6XYa+TuMo5Mir5FRBr3nVFUDY= +go.opentelemetry.io/collector/semconv v0.115.0/go.mod h1:N6XE8Q0JKgBN2fAhkUQtqK9LT7rEGR6+Wu/Rtbal1iI= go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg= go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M= diff --git a/go.mod b/go.mod index c6af83af3b80c..fd42d1719f1f8 100644 --- a/go.mod +++ b/go.mod @@ -246,7 +246,7 @@ require ( github.com/olekukonko/tablewriter v0.0.5 github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 github.com/open-policy-agent/opa v0.70.0 - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.114.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.115.0 // indirect github.com/opencontainers/go-digest v1.0.0 github.com/opencontainers/image-spec v1.1.0 github.com/opencontainers/runtime-spec v1.2.0 @@ -288,16 +288,16 @@ require ( go.etcd.io/bbolt v1.3.11 go.etcd.io/etcd/client/v2 v2.306.0-alpha.0 go.mongodb.org/mongo-driver v1.15.1 - go.opentelemetry.io/collector v0.114.0 // indirect - go.opentelemetry.io/collector/component v0.114.0 - go.opentelemetry.io/collector/confmap v1.20.0 - go.opentelemetry.io/collector/exporter v0.114.0 - go.opentelemetry.io/collector/exporter/debugexporter v0.114.0 - go.opentelemetry.io/collector/exporter/otlpexporter v0.114.0 - go.opentelemetry.io/collector/pdata v1.20.0 - go.opentelemetry.io/collector/processor/batchprocessor v0.114.0 - go.opentelemetry.io/collector/receiver v0.114.0 - go.opentelemetry.io/collector/receiver/otlpreceiver v0.114.0 + go.opentelemetry.io/collector v0.115.0 // indirect + go.opentelemetry.io/collector/component v0.115.0 + go.opentelemetry.io/collector/confmap v1.21.0 + go.opentelemetry.io/collector/exporter v0.115.0 + go.opentelemetry.io/collector/exporter/debugexporter v0.115.0 + go.opentelemetry.io/collector/exporter/otlpexporter v0.115.0 + go.opentelemetry.io/collector/pdata v1.21.0 + go.opentelemetry.io/collector/processor/batchprocessor v0.115.0 + go.opentelemetry.io/collector/receiver v0.115.0 + go.opentelemetry.io/collector/receiver/otlpreceiver v0.115.0 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0 // indirect go.uber.org/atomic v1.11.0 go.uber.org/automaxprocs v1.6.0 @@ -323,12 +323,12 @@ require ( gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 - k8s.io/api v0.31.2 + k8s.io/api v0.31.3 k8s.io/apiextensions-apiserver v0.31.2 - k8s.io/apimachinery v0.31.2 + k8s.io/apimachinery v0.31.3 k8s.io/apiserver v0.31.2 // indirect k8s.io/autoscaler/vertical-pod-autoscaler v0.13.0 - k8s.io/client-go v0.31.2 + k8s.io/client-go v0.31.3 k8s.io/cri-api v0.31.2 k8s.io/klog v1.0.1-0.20200310124935-4ad0115ba9e4 // Min version that includes fix for Windows Nano k8s.io/klog/v2 v2.130.1 @@ -552,9 +552,9 @@ require ( go.etcd.io/etcd/client/v3 v3.6.0-alpha.0 // indirect go.etcd.io/etcd/server/v3 v3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/collector/consumer v0.114.0 // indirect - go.opentelemetry.io/collector/featuregate v1.20.0 - go.opentelemetry.io/collector/semconv v0.114.0 // indirect + go.opentelemetry.io/collector/consumer v1.21.0 // indirect + go.opentelemetry.io/collector/featuregate v1.21.0 + go.opentelemetry.io/collector/semconv v0.115.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 // indirect go.opentelemetry.io/contrib/propagators/b3 v1.31.0 // indirect go.opentelemetry.io/otel v1.32.0 @@ -611,29 +611,30 @@ require ( github.com/jellydator/ttlcache/v3 v3.3.0 github.com/kouhin/envflag v0.0.0-20150818174321-0e9a86061649 github.com/lorenzosaino/go-sysctl v0.3.1 - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.114.0 - go.opentelemetry.io/collector/config/configtelemetry v0.114.0 + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0 + go.opentelemetry.io/collector/config/configtelemetry v0.115.0 ) -require go.opentelemetry.io/collector/component/componenttest v0.114.0 +require go.opentelemetry.io/collector/component/componenttest v0.115.0 require ( - go.opentelemetry.io/collector/extension/extensiontest v0.114.0 // indirect - go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.114.0 // indirect + go.opentelemetry.io/collector/extension/extensiontest v0.115.0 // indirect + go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/scraper v0.115.0 // indirect ) require ( - go.opentelemetry.io/collector/connector/connectortest v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumererror v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/exporter/exportertest v0.114.0 // indirect - go.opentelemetry.io/collector/internal/fanoutconsumer v0.114.0 // indirect - go.opentelemetry.io/collector/internal/memorylimiter v0.114.0 // indirect - go.opentelemetry.io/collector/internal/sharedcomponent v0.114.0 // indirect - go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/processor/processortest v0.114.0 // indirect - go.opentelemetry.io/collector/receiver/receivertest v0.114.0 // indirect + go.opentelemetry.io/collector/connector/connectortest v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumererror v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/exporter/exportertest v0.115.0 // indirect + go.opentelemetry.io/collector/internal/fanoutconsumer v0.115.0 // indirect + go.opentelemetry.io/collector/internal/memorylimiter v0.115.0 // indirect + go.opentelemetry.io/collector/internal/sharedcomponent v0.115.0 // indirect + go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/processor/processortest v0.115.0 // indirect + go.opentelemetry.io/collector/receiver/receivertest v0.115.0 // indirect go.opentelemetry.io/contrib/bridges/otelzap v0.6.0 // indirect ) @@ -752,7 +753,7 @@ require ( github.com/judwhite/go-svc v1.2.1 github.com/kr/pretty v0.3.1 // todo: update datadog connector with breaking changes from https://github.com/DataDog/datadog-agent/pull/26347. - github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.114.0 + github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.115.0 github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 github.com/prometheus-community/pro-bing v0.4.1 github.com/rickar/props v1.0.0 @@ -760,15 +761,15 @@ require ( github.com/swaggest/jsonschema-go v0.3.70 github.com/valyala/fastjson v1.6.4 github.com/vibrantbyte/go-antpath v1.1.1 - go.opentelemetry.io/collector/confmap/provider/envprovider v1.20.0 - go.opentelemetry.io/collector/confmap/provider/fileprovider v1.20.0 - go.opentelemetry.io/collector/confmap/provider/httpprovider v1.20.0 - go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.20.0 - go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.20.0 - go.opentelemetry.io/collector/extension v0.114.0 - go.opentelemetry.io/collector/otelcol v0.114.0 - go.opentelemetry.io/collector/processor v0.114.0 - go.opentelemetry.io/collector/service v0.114.0 + go.opentelemetry.io/collector/confmap/provider/envprovider v1.21.0 + go.opentelemetry.io/collector/confmap/provider/fileprovider v1.21.0 + go.opentelemetry.io/collector/confmap/provider/httpprovider v1.21.0 + go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.21.0 + go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.21.0 + go.opentelemetry.io/collector/extension v0.115.0 + go.opentelemetry.io/collector/otelcol v0.115.0 + go.opentelemetry.io/collector/processor v0.115.0 + go.opentelemetry.io/collector/service v0.115.0 go4.org/intern v0.0.0-20230525184215-6c62f75575cb go4.org/mem v0.0.0-20220726221520-4f986261bf13 k8s.io/cli-runtime v0.31.2 @@ -906,53 +907,53 @@ require ( github.com/moby/sys/userns v0.1.0 // indirect github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect github.com/ncruces/go-strftime v0.1.9 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.114.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.114.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.115.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.115.0 // indirect github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142 // indirect github.com/openvex/go-vex v0.2.5 // indirect github.com/openzipkin/zipkin-go v0.4.3 // indirect @@ -971,9 +972,9 @@ require ( github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 // indirect - github.com/shirou/gopsutil/v4 v4.24.10 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/shoenig/go-m1cpu v0.1.6 // indirect - github.com/signalfx/sapm-proto v0.16.0 // indirect + github.com/signalfx/sapm-proto v0.17.0 // indirect github.com/sigstore/rekor v1.2.2 // indirect github.com/skeema/knownhosts v1.2.2 // indirect github.com/smartystreets/assertions v1.1.0 // indirect @@ -994,36 +995,36 @@ require ( github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect - go.opentelemetry.io/collector/client v1.20.0 // indirect - go.opentelemetry.io/collector/component/componentstatus v0.114.0 // indirect - go.opentelemetry.io/collector/config/configauth v0.114.0 // indirect - go.opentelemetry.io/collector/config/configcompression v1.20.0 // indirect - go.opentelemetry.io/collector/config/configgrpc v0.114.0 // indirect - go.opentelemetry.io/collector/config/confighttp v0.114.0 // indirect - go.opentelemetry.io/collector/config/confignet v1.20.0 // indirect - go.opentelemetry.io/collector/config/configopaque v1.20.0 // indirect - go.opentelemetry.io/collector/config/configretry v1.20.0 // indirect - go.opentelemetry.io/collector/config/configtls v1.20.0 // indirect - go.opentelemetry.io/collector/config/internal v0.114.0 // indirect - go.opentelemetry.io/collector/connector v0.114.0 // indirect - go.opentelemetry.io/collector/connector/connectorprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumertest v0.114.0 // indirect - go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/exporter/nopexporter v0.114.0 // indirect - go.opentelemetry.io/collector/exporter/otlphttpexporter v0.114.0 // indirect - go.opentelemetry.io/collector/extension/auth v0.114.0 // indirect - go.opentelemetry.io/collector/extension/experimental/storage v0.114.0 // indirect - go.opentelemetry.io/collector/extension/extensioncapabilities v0.114.0 // indirect - go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 // indirect - go.opentelemetry.io/collector/filter v0.114.0 // indirect - go.opentelemetry.io/collector/pdata/pprofile v0.114.0 // indirect - go.opentelemetry.io/collector/pdata/testdata v0.114.0 // indirect - go.opentelemetry.io/collector/pipeline v0.114.0 // indirect - go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.114.0 // indirect - go.opentelemetry.io/collector/processor/processorprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/receiver/nopreceiver v0.114.0 // indirect - go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0 // indirect + go.opentelemetry.io/collector/client v1.21.0 // indirect + go.opentelemetry.io/collector/component/componentstatus v0.115.0 // indirect + go.opentelemetry.io/collector/config/configauth v0.115.0 // indirect + go.opentelemetry.io/collector/config/configcompression v1.21.0 // indirect + go.opentelemetry.io/collector/config/configgrpc v0.115.0 // indirect + go.opentelemetry.io/collector/config/confighttp v0.115.0 // indirect + go.opentelemetry.io/collector/config/confignet v1.21.0 // indirect + go.opentelemetry.io/collector/config/configopaque v1.21.0 // indirect + go.opentelemetry.io/collector/config/configretry v1.21.0 // indirect + go.opentelemetry.io/collector/config/configtls v1.21.0 // indirect + go.opentelemetry.io/collector/config/internal v0.115.0 // indirect + go.opentelemetry.io/collector/connector v0.115.0 // indirect + go.opentelemetry.io/collector/connector/connectorprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumertest v0.115.0 // indirect + go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/exporter/nopexporter v0.115.0 // indirect + go.opentelemetry.io/collector/exporter/otlphttpexporter v0.115.0 // indirect + go.opentelemetry.io/collector/extension/auth v0.115.0 // indirect + go.opentelemetry.io/collector/extension/experimental/storage v0.115.0 // indirect + go.opentelemetry.io/collector/extension/extensioncapabilities v0.115.0 // indirect + go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 // indirect + go.opentelemetry.io/collector/filter v0.115.0 // indirect + go.opentelemetry.io/collector/pdata/pprofile v0.115.0 // indirect + go.opentelemetry.io/collector/pdata/testdata v0.115.0 // indirect + go.opentelemetry.io/collector/pipeline v0.115.0 // indirect + go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.115.0 // indirect + go.opentelemetry.io/collector/processor/processorprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/receiver/nopreceiver v0.115.0 // indirect + go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0 // indirect go.opentelemetry.io/contrib/config v0.10.0 // indirect go.opentelemetry.io/contrib/zpages v0.56.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.7.0 // indirect diff --git a/go.sum b/go.sum index 25645013fb435..29b837bb26f00 100644 --- a/go.sum +++ b/go.sum @@ -1322,120 +1322,120 @@ github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= github.com/open-policy-agent/opa v0.70.0 h1:B3cqCN2iQAyKxK6+GI+N40uqkin+wzIrM7YA60t9x1U= github.com/open-policy-agent/opa v0.70.0/go.mod h1:Y/nm5NY0BX0BqjBriKUiV81sCl8XOjjvqQG7dXrggtI= -github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.114.0 h1:cjiWapRbK28GxsZyKCegQOLJCEiwIWEV+INvxrS8HSA= -github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.114.0/go.mod h1:1Mx3wOciTCjrN9PgVAB4uFBeoqEfyeZEuvpguOasm4s= -github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.114.0 h1:oA79wMjQSQBKz+X90LD5edNOyaEsewspJRBYgxliEMA= -github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.114.0/go.mod h1:uk7Z36vhLtevNy5672jGxgzNJA2LND6wmispTuhHCxI= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.114.0 h1:K1/5bZ5EbmxHH4cfvPo/3sYrHUVnM6H86C0dVkf+6TM= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.114.0/go.mod h1:XWnw+AWGoINC/fG4urgmiLVXDaYeqkRVLKUJMPqC3Ls= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.114.0 h1:quLs6NbDeG2x2eLmncaq/P4yvnCPLAelFqXac2eMRSw= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.114.0/go.mod h1:xX2v2kixYWZbFvnT5re3BGg2pyLy78KSIiMed7P2c/c= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.114.0 h1:93/S5dh3snAbC81fuGP7c+nn2OhgP59UTrXqmFtK1Ww= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.114.0/go.mod h1:fyU1pLPKcXDWkUwO075jt1YOjFS/XIZXDwHEV3xy93g= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0 h1:G7SHyt5TvFSEsiaxyhZdqkjcRoK2rP5wl4a3Mu31JM4= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0/go.mod h1:TRsDReUh7ALEUutKVoLlGMRc2QECZAyT/5g/cpAr+aw= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer v0.114.0 h1:xZL2FLnVTKqVeZQuTBSMmVLr3FQUN/N8x7VL70Gd07k= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer v0.114.0/go.mod h1:betAqGGfDFb8SLyMYBwH9BQyB9wzxWOWXXC/Ht6/kas= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.114.0 h1:OwLYURmQGKEo9jyhlMsI3JtFLiYChZIrA2M3MxuomTY= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.114.0/go.mod h1:1UZtI+tYvVvvKkPv5NmggvPpxkQEyKaUVg2ygtCjVoQ= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.114.0 h1:aAobCSGIhUYohlzbMQdfDDtQoKlofPROL3+WSSPxz+c= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.114.0/go.mod h1:4m8sQMLNgHexFom7YEFi2khcsUUqKxEdIWgUOYKcmLI= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.114.0 h1:t59jxlv7dIF+f6SaG8V5mx/+Hxfoy4S5qlMpJlkcPo0= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.114.0/go.mod h1:HbUoZclDdXYC7L6lvh44olwDpJBIoTw9fls1bjqyMZY= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.114.0 h1:1TNrKEIfTHAhQDVzQczhReo2+Rw5q9VNCVZgq5SKq/Y= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.114.0/go.mod h1:3AzBMlWooaEO8LvLWqYQoOhqxQ+fAaUlC09sCicB91s= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.114.0 h1:FetZgJSBHH9xw1JKr3Wetek54bpVYkwJrVJJrO271vU= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.114.0/go.mod h1:QWdTwjk67PGv3AyMT+8yEQXU3laW+PMLCFE8PSewWkM= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0 h1:6g5EvbygaEBqed0rJotGHcfxgxGV8hSN/4ZoZFfac5M= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0/go.mod h1:gU87iMdDAdHrQQCWTURbrlE/dLYgFecJ/+WBHuNMjQI= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.114.0 h1:mchuc816TxLpmsGvFbtGA3KBVx91vAXi7vJnlvsQdiU= -github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.114.0/go.mod h1:vgCMUWPVrfjNux9P9G053fRqGFF6BS3xtxNFZZdFTCM= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.114.0 h1:4qELD/ZwgvXE5PshGzJ9Eu+JEQdLIok6V1x8rvqL+yk= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.114.0/go.mod h1:3U1KoAsmQd9H37t8VkesFfB56tThrPsNVG+ddsMJ2zM= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.114.0 h1:0LbaoE7Aof8J4CVQ5kYv1QbuL3usTxLRSMFisDNBX9U= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.114.0/go.mod h1:ByoGXMLeHE/k5ELO3EITitVmvq3bh4Z/GVwWZZxrQ5s= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.114.0 h1:d2wCLlENxH4I2axQWaogivx/5ZIjDYgn9MIf6sFxlJ4= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.114.0/go.mod h1:Psyligv8GKL9WI3TraW3BLwkOX4TRxaaa1BBQQyICzA= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.114.0 h1:AReCF/mzq8+1BORde9m96xAZ+nnv22/B1b+H56hlFIs= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.114.0/go.mod h1:dCQeeAQww9++hvoqQ69QzTN6SGbq3DoVs1+Z1wcKAX8= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.114.0 h1:WrVBqO/ps3KvUyEhtdL/uDDHhKoszLEE1ywDbwskNRg= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.114.0/go.mod h1:JYklzR+ZxQaxjzlfJP3bxX6rQFl/Hbo0vd3yNj/1s1s= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.114.0 h1:dtW9JkkpAm33Y47estFyqEL0CW05DHGmlLQxZUSx78w= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.114.0/go.mod h1:FcClDm9XVV5tzUDzmH2Mhe6TfYiZ/3GSAQITnuCjZgg= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8stest v0.114.0 h1:Lgk9OkyDQQYWtfZ3DEyfQ+08NM4+dBO3fP0OQN10cXA= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8stest v0.114.0/go.mod h1:2/6/eY8Uvg+NfYDsAbND96A4u5q4UjcDlBJolYcj6jE= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.114.0 h1:cGJRIzB5N3oe1c8vD5HqCuy4dbQE9EDJZ9C7vJn+K8U= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.114.0/go.mod h1:p53t8aSCVoTKXVOsNx62rDLrSdEkBFB4H85yEiTWkyI= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.114.0 h1:lt87gwZaUP9Lh0EAgZFTYego0k89NU8K6Qkk82oR/n8= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.114.0/go.mod h1:nxxBsX9Z2Q7HQvybUTx8CzUvYCJewKBM1Eys6SiS0eg= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.114.0 h1:TrGpqqMJxh5fTzdu5HZORKvDiIUBK8b9K/3zUCGbjps= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.114.0/go.mod h1:mw+aVzR/3HtuGZE5xM6zEXHFv411QG8MxI8mQFJSd5c= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.114.0 h1:2uThKlp4NoQbIm7k9ZRGCKVJjMcibffb8NLcsPslq9o= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.114.0/go.mod h1:jSpHMXCxgNLBIfselixqXAUn0pXDfE5LEuNkz0WjK68= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.114.0 h1:Z+WmSDshEjfNy09A7+opWO01L5LwkZC3Ze9AgfLfuAk= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.114.0/go.mod h1:p58MQDR97vRdpY8vh6JuCqjKp0W+kpo5qHmuqhd7L00= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.114.0 h1:Wq1iTmd0K1SSOIA43Wy2uAU6SB4f9ogyN3ZmvDgTURg= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.114.0/go.mod h1:VCj9H0QxRBWSgbl1pUo8p0NrqnmcxpPo0QjKLFtWkO0= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.114.0 h1:lvpwitQL0CDKHyExi+Wi0MPXGBjpgK5YbXljRYE6YTU= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.114.0/go.mod h1:/peNiVTNFe3osINRwW88WB0v5BC1ifjEmDL5oui+ry0= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.114.0 h1:SXi6JSSs2cWROnC1U2v3XysG3t58ilGUwoLqxpGuwFU= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.114.0/go.mod h1:LSd6sus2Jvpg3M3vM4HgmVh3/dmMtcJmTqELrFOQFRg= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.114.0 h1:G6U2eHR2CGSYb2btot6l05o+mdqsC0ZN7dH8QssXSdk= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.114.0/go.mod h1:kZQvVVzpahX8kFUfEBmzFtDhkKAQW6i8XQCMozDRUlk= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.114.0 h1:m8uPYU2rTj0sKiYgzCvIPajD3meiYsu+nX0hplUnlEU= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.114.0/go.mod h1:P0BaP92pXPkTyTmObfLYUoRBfMYU+i0hdS3oM1DpGJo= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.114.0 h1:Qg80zPfNMlub7LO07VMDElOu3M2oxqdZgvvB+X72a4U= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.114.0/go.mod h1:5qsGcjFV3WFI6J2onAlkR7Xd/8VtwJcECaDRZfW4Tb4= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.114.0 h1:PwUMZ6fHMEUV5i9hUly+z3UujDTTdxQtWzL0rWc/lgA= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.114.0/go.mod h1:YEHL6w4vvB9b0/lNwGjz8DyWXTF/7Xw0Hkgc3mGWwa8= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0 h1:mtSN/07RGQPi1/zHVSZg4G0qRtOoJpPew5jsQWv9uS0= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0/go.mod h1:C9Zgh/N3j4NR2D+1FGAA1YizhFW9OS51DwLUFJTdXN4= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.114.0 h1:Xr3Hvm9cxOSQX94tLX1yX63uvuvtglJICrOz9YcxiuI= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.114.0/go.mod h1:cgIgmEg66RhVtAv4JkIhHdy70kn2EtVhrH8CtyvhfuI= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.114.0 h1:WymtAsFHYen4GTTTXvVqZCoMz6vPADYUf4xIP0Gvm+E= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.114.0/go.mod h1:FcTNci+LpU5x5FkHM0Su3k6/ESDHWQsL30AFISzaIyk= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.114.0 h1:eJxap/u8Q5wYnBcJTrTS1Tq6wq31SOlIr+FMJX5ZoC8= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.114.0/go.mod h1:H7uIA2RBaxit2mSwSU8Wc7QXSJX7r8UR66YvdcLmtto= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.114.0 h1:tG98F8g5T7lKYaoxSh9e76agmkauPtXiMbQhuWAeG+I= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.114.0/go.mod h1:eN3xPxPcRZH0wofEQ1Greu1c561qEGeYv5Zt0uedmMM= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.114.0 h1:xDbTY8zDUP3RKG1kg1tmULnBkLEDMwmSpf9j2H0sIcc= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.114.0/go.mod h1:t5uoTcckI8kQeW1sZl8A+1UebVJPe47Qi3WQeNZu6w4= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.114.0 h1:fltPkjMuiVTtIVwoWUzbL0ad2CTCJsWfnCSDJQ9hSxU= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.114.0/go.mod h1:HcG364Is9u2EDqOUtQX0RwnbHtQqSh5+x2FdcYC+F1M= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.114.0 h1:rYwgdR8GE7QEtQlkQxXq5f1JQrd3v36g4yXXljicKoM= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.114.0/go.mod h1:TjEgPVMRxi93SdN0N0qv0hx5L+FF2csgo3YwfzVGJ3g= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.114.0 h1:QBR07Gaw6ePkufQ/AhHgBv4OlwzXlULTdiUnaKIlvLk= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.114.0/go.mod h1:coY0CV/sNj1hltRXKZr2gnrLvr7xUbnW+GhpCQpGR/Y= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.114.0 h1:ap7EK1GxLHau1jKJP8tYcZDb+tEntzx2Kj97XdNb7s4= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.114.0/go.mod h1:1uyslltGfwWhG7F/t41t43dBzrZpEkFzo2hR0OmyZi4= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.114.0 h1:nldvWnYvTjIDi1xmZKgS2b0vz0Ja9UMV2m7ffg/HMDk= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.114.0/go.mod h1:yRuZU0Rd/twuSQFme3WiVB7x9ECgIEwDBs2mPwkqUYY= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0 h1:I4ZYVRYW3Cjb65sPENZ9kHam/JUMXNEp2n/knJ0C0Vc= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0/go.mod h1:4BhyIaOn2LS48WS+ZNix4TpP0+goq9gDEtGzth5Cr3M= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.114.0 h1:ttRj/3GIpg+vUTeBI+EBeeWdNuvBT3S/ayoqpvA9B9s= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.114.0/go.mod h1:xoJgFdZUIxlvF8eUHIYiZGmf39zAwditW3sc2SBirAo= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.114.0 h1:je7Aiyn5AHAcpCNpTN5Q4l2SIeqJEvtOjoaZhHszGrs= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.114.0/go.mod h1:cVG4aXgfQFSdSfhAgoawDmmKixogjlvqQtmjmqVJgb4= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.114.0 h1:AsYYMzt+ZGGQaq3S21REATxZsUI4aOuFAOPq09tSPnI= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.114.0/go.mod h1:ifqisebKudvS+YARMbFRyX8/UgdXitSfCD1JCoGOxlY= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.114.0 h1:NrD8Qo2CxrHRAlLuOHm75RtO1xEnul6DDkn6tQMsuSg= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.114.0/go.mod h1:XOlJzIYwicEPMxu6Gv9TL9pS6El+ffjQOAu/wPiL+Jg= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.114.0 h1:lKG7Ghtba2l9P4FFP7I+SbVRqHEpXCGOZs367YTEwGc= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.114.0/go.mod h1:5U/lrnkK5YtIeTFXI8OzDN/d827WtI6pQvu7/59pUVA= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.114.0 h1:Ivu3DRhbERboPxMJeyJpmretbKDJ3hsOAGBQXt2yY3U= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.114.0/go.mod h1:UrMGrA8bA1VeYhdiam7/Xu/U4joG6JftMULEVWLDbe0= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.114.0 h1:Yx0RUwviLdYyozkuqbfpEhSH+ehXlKsW5TtlZbiKm4Q= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.114.0/go.mod h1:Bh9h5hYTgr/zQgXUnvihkLvN1IMmVY/OFa8aHc3gMJU= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.114.0 h1:kSxkZPWBA6je7xXkpMWycjyc2BIMvLGD+OGTIRtJ0xw= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.114.0/go.mod h1:rBegsrFk6WSDU4v9TiOvH3h7xintiOhPq9qd+72SlK8= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.114.0 h1:1NeG/cgiqBMWQJxFvWQmWo9BVj3k4uOvEK0o++BFINY= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.114.0/go.mod h1:skPwfv1xYwB5onG9sj31J4OYUxx6p+wc40aogGy+nVE= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0 h1:gdljk66vBTT3lWfSdP4Hl7FaABdH1YPhUCH6jnG2+qY= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0/go.mod h1:T1p6ShTr8farkE4qUB2TyGUIvRSN3s17D0qY7rMqCRM= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.114.0 h1:PwaceYEl50C1OK5MxpH95hnn58CNRzINP2p5YvluZj4= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.114.0/go.mod h1:FrJqdSI+4QuU/w9XtoW9d1Ywp09u2cYaPUOZFqzDtNY= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.114.0 h1:E686MeQcQ+a3Q47A/xAc3Nk6Qdz8wHcBLMJ3Y8bNKi0= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.114.0/go.mod h1:zkQAapuNRobj7GY8kKRal+2EYkAMWmZ1KMysUrQI48A= +github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.115.0 h1:Xkfl44ZRgkz1EoCCYgwPomQkV+BrYOPvv9v1Kd1gZE4= +github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.115.0/go.mod h1:Sr/upBdJeJ7nxDfmCFCl9iHosXiPoQCPHkCJslDyoUA= +github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.115.0 h1:sO4fPw0NRUibgBVvQVTqPBCBRFh0I+ODIr3HAwcWezI= +github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.115.0/go.mod h1:HqzCXJ4rxXzWNYaUtCqJzXyTsCGEKSa/d+tHcyeRDY0= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.115.0 h1:qtct9PsKONY6YOMc+QGBE/uGs8KMBcF6mvYJbyFHFt8= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.115.0/go.mod h1:OR9DKWrSRpfc3+CxwsL2QTOuHD03S9w0Jubi3EhTcy4= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.115.0 h1:u7Ht+E1ghQESffcjyaxWrXGsfSWa1VE9LKC4f2PPx84= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.115.0/go.mod h1:r3iS2mDYu+cnGjgNc8TgvuUUAN6A6/1BvR1e1YJBrqM= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.115.0 h1:RXYLbv2uTJlJTJcEa5H8/fLdX419XUlbn6mjzEgTWxc= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.115.0/go.mod h1:ngeyITKu+koaagA/sFpnuT+x0nFVBNdWq60/h5buSr4= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0 h1:51D/x3xIAnWgVrY0lgdU+b+yb2aWd72uDqu9GhjRcNI= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0/go.mod h1:nLau1YUdjhtLrk4jXLPb2l9riQ1Ap4xytTLl7MBedBg= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer v0.115.0 h1:eJk/gbfWpGKTIGLUN+EWpqM52Zf4LFTfIeMnDji+dqM= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer v0.115.0/go.mod h1:+GPzqBFeqV90U4/bntDRPMxo/i/12lxH7GyPJmqz4ls= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.115.0 h1:790+/iSYt6bMs/OA3AfLlZl9E/Zpb0pm5X628TCncE4= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.115.0/go.mod h1:LtsKKBDZyn02DiqvuOZapGg75P/FqGQNelTI6fO12o0= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.115.0 h1:BtYrSkQSYGJufsmbqqrpzb+BJXH2S4CKL14i1bxOFCU= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.115.0/go.mod h1:4LQ1S3eBu+MyCNaCkBk0hIoAhvJJS851i/tY45FtDf4= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.115.0 h1:zi0LLZp26hAycIKNbmOIMGc0ZnkikrciTHl1tiJuo4Y= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.115.0/go.mod h1:a/UMjV9mrFJ5WIlpaDQ/S5KgCrg0H3kD8nlhfQRxfBI= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.115.0 h1:5PiDmieivpExBd2LchzSIvEls+cjUeJtPLXvvHxLZoI= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.115.0/go.mod h1:FIFNtgEoqcI/evvgSL+5qO/cdRUK+6ixFKKUdKpmMeA= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.115.0 h1:sMHHN4HrakORqrpsTLQQVGiDjKg4QreBJ+UCx/1OI+I= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.115.0/go.mod h1:q1950sX5QqCGDurVOkwatDSc5de4gpGfuPGVtFgNo3I= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0 h1:HVGG31WeB6Fn2+il2/ycWj9tDP0fxOeOqD1rKCjsBSc= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0/go.mod h1:2hYojHs5daPVWECuZsPViKwty0ojuHUEmk8GEuaFqO0= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.115.0 h1:4Ycg73pYVdiF+oq+BmUq7Dkg0WKeKvBSk9AOKvBe4LU= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.115.0/go.mod h1:l2Q+MmYk2ZRDSbhX9GlJYvBXC51AqhDJAj2ne290Xik= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.115.0 h1:SF3gOOEkfntE3zEhY80yO7BVQ5CkaK8ecic2U2AZPHE= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.115.0/go.mod h1:jeBzX5m8O9X0LQxiryV9sJUIrn+QAwOnCBE2wZWIltQ= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.115.0 h1:vRQQFD4YpasQFUAdF030UWtaflSYFXK542bfWMGhOK0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.115.0/go.mod h1:BZ7DT+0VkKR7P3I9PGEDfVa0GdB0ty41eEcejIUXF9A= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.115.0 h1:a36EJz/mb83f6ieX0v4fNDJ1jXqpeaM6DVQXeFDvdhw= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.115.0/go.mod h1:r5/40YO1eSP5ZreOmRzVOUtDr7YG39ZIUcVjHd+9Izc= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.115.0 h1:xITYM8BkEgs2Wf+PczOrVv0b1Fk4N929/xR9YtxLpkw= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.115.0/go.mod h1:m+5tYnZKfNDtnZKknOfssYSXBEL5Yqse4CJMpaY5kMk= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.115.0 h1:h6zEsBtuZalQu7lKYf6ZCcj8fTocT+zxdmuOou9515Q= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.115.0/go.mod h1:6QU/K0dGCGYorkOvJmhbDFCspy4RPxRkFjf9I64y6I0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.115.0 h1:f/HrZgTf6TF97v67uEZB3v2UtBT9aQojBvnloD3LOm4= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.115.0/go.mod h1:Hp9uSq3qNJqdxu24u7RWyuPT9x1GgEUSx9US1LLeLi0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8stest v0.115.0 h1:vXDJE8YHfAoYIAlPRtODchlqb6lWnGhJxPaT2ljvN7I= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8stest v0.115.0/go.mod h1:f3IgMFHIjEUEI/I+5e3KWMPq9h2PSMy9WovmvPdmlb0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.115.0 h1:4RoU3SlcNe6Dxyxfv8JVsrN8QgjBQ44Pkt9FLKK095I= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.115.0/go.mod h1:jfPlBpZT+hvp52Ldcx+srxaqyYuKxBkxOd3KtxbveCU= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.115.0 h1:8A+iBT5G23zvBPqYx32Qh4800jHFo4X9T1fpQKVQ+4E= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil v0.115.0/go.mod h1:AhdPvwYKu7G8LKRWzHTNQYBq27RinsMm5qSanwSA/rU= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.115.0 h1:MuyDWyVoCty8HyP2CAYoRZXwINiThHovcC1Bj3+H8lk= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.115.0/go.mod h1:asekVnrdzYsMJBaJtIyXOt8p07l1x0xs8X3h00sZyf0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.115.0 h1:6GIJOSEIWBt9bprARMtTjRlENrwNsJl2UzbtjOBk7A0= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.115.0/go.mod h1:/Fg/itwlAzDjyM0Sjenup9TbdOT+aVNPSqXsF80M8hw= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.115.0 h1:l4NBxl2AELPlyqupLu1IVAjtbGOEovaKEyt0UGMsuq8= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.115.0/go.mod h1:j1qF1hE/Qcy2I655yXbf2ItezXok61OW+9AAxbH2ORw= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0 h1:WOqt8NpU/JPGYDR4CiWx7g/sHV6Oe9FChzhushwmVdo= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0/go.mod h1:wV/+iU7MyXcyTaY8K5Qx+1Z3yUzrxA40nydPQA476Iw= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.115.0 h1:l9AsnVHr3Sp4lAGFlBJ6Ochl7mlPE0d5MNd70o4qKEM= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.115.0/go.mod h1:kARk81QZpcX6L8x4fLo4Nr/z/+jpo5PxXtugBxF2DyE= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.115.0 h1:Z9p78zj9Qblw472mGkPieuX7mqduAp47rzMbFfq5evI= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.115.0/go.mod h1:mtxUxJEIQy27MaGR1yzcn/OK8NoddEgb7fumpEbKYss= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.115.0 h1:qdZ9EqmdM19pWhPoFA7VivBTdzP2HvNwXa3CCMHYoDQ= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.115.0/go.mod h1:mrL1MNrcg0zYAJ+aK9WtOH062dl2wN9DDG7mZk9H8v4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0 h1:MerLKMrkM4YoGF6Di0D9yMXO02yCX8mrZAi/+jJVVeI= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0/go.mod h1:R8AkVWe9G5Q0oMOapvm9HNS076E3Min8SVlmhBL3QD0= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0 h1:WEqcnWSy9dNSlGb8pYRBX7zhaz2ReyaeImlenbzNTB4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0/go.mod h1:6Mk71CakHUA3I6oM9hARDiyQypYyOolvb+4PFYyVEFg= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.115.0 h1:eoapW0JBablApkdv4C1RUuOKfz0U6SwuKMYYSAJH6fE= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.115.0/go.mod h1:hW2AaybTRcwxJySGLC3Fh1vd2VDaQhRBfa7O7w30NS8= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0 h1:R9MRrO+dSkAHBQLZjuwjv2RHXHQqF2Wtm1Ki0VKD5cs= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0/go.mod h1:rKXLXmwdUVcUHwTilroKSejbg3KSwLeYzNPSpkIEnv4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.115.0 h1:7tQ+WjojXhtWDFTJlwCvkjpvdTed5YkVKVQKVAu1alg= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.115.0/go.mod h1:iqgJP7+N03pOIOqYaKjVWYoIKweNdFivsvWJfFw6MTQ= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.115.0 h1:rrIm0dyEdaHmQo6udPK1V3opkzEKa0PrZzSdY5oGqmQ= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.115.0/go.mod h1:AMeisxL/9gs0bzozaymUqI1/EJ9GPvtnLh/BtqtjSF8= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.115.0 h1:KghgAubxdDqP4eUQ+d2GzHXUAwtFxpSDToqFVnax0XA= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.115.0/go.mod h1:cW/BaYE6Uo7ZYHbmT0wVBktHP0SfeLqGHMf0qks7rOE= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.115.0 h1:ioGiKiO0WqT3PxkzanuJsPVA24FItH6nTJeDeSMFpYA= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.115.0/go.mod h1:x1W4J+pzK/Bi9jjYBYESTsPq0nRJJLZoN7cPNd0vYSU= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.115.0 h1:A9zqBtUJZ5J/0VI+B1dxuQhc2iVYpD9c54SgaKtFIN8= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.115.0/go.mod h1:hG7GOrBBux/cg1fAUzvSlzYY02ekxjF9IvH4ls/nGXA= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.115.0 h1:hAsK9I081ShnSDSKPVEHB3TLawyOmbR6bPDiQEkgo2Y= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.115.0/go.mod h1:z8XdvlhXSYVboxS3TPGembE9kfxLAYH2PxPLMvf8wTk= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.115.0 h1:t3BGnPpmeuxW51vISSu51PrAs49ACBCa1Yl1NfZGE5Y= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.115.0/go.mod h1:jQLYyroEYEV1kWJApmGBgVuGUd73v+Q6EUJ6Wy7N508= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.115.0 h1:ficXJmB6l6kfiu+R6CmggtnlQWMHUNzu2csDYA4CFSs= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.115.0/go.mod h1:ykraxSeEVCuA43oqlMWnex78+vNQ+1dBTJUeInkqIpA= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.115.0 h1:LVe/Oh2un9CFKFYtepB9oZ6j38whFPVYl01RAVsdxHg= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.115.0/go.mod h1:mGSGQCX5dT5KUxBkuCO15CNqB+8Cb+qj0edt/oKmA34= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.115.0 h1:6RGhDlZkekmp12EvK6JV9fiIwrdZBOJID6/Ts9tXzL4= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.115.0/go.mod h1:qZRQtGr/DAjuBqAuKJMN2cWvc9RI94lB0Oq8UyGAduo= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0 h1:vwZQ7k8oqlK0bdZYTsjP/59zjQQfjSD4fNsWIWsTu2w= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0/go.mod h1:5ObSa9amrbzbYTdAK1Qhv3D/YqCxxnQhP0sk2eWB7Oo= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.115.0 h1:jQ6mIXhWqXhl8MPun9soNynsQ0lpOpOYQyAnQ28F014= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.115.0/go.mod h1:oRxNwm6HN7ckp4aJOAFC8BVBPa0UDhB8vNGTFL3QBJg= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.115.0 h1:KbfjEsr2d/5TGWHvcaBC3lOpYAnquEraLXcis4IamAs= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.115.0/go.mod h1:fmtZPK5RIz+2Lcm9xQZuwiM+M8/juSSeJufSxUT+J9w= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.115.0 h1:Ea5v0Q6VNIMRbXVJjHUsSbdOSkB+80sCOH7Y9yhStnY= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.115.0/go.mod h1:IkiZL9vOU8qNCkrnJP0GOWPoFTED+yhB94wJbcLYcGA= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.115.0 h1:olyiml73slGYORDjZNViW3nKiysC+K+h5yPsSBjUxQ4= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.115.0/go.mod h1:N00k1mTxzfS2clqxSP4Dxk7iX8GWbbuCq6LF8/ECk/M= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.115.0 h1:sLRTfXUFiqJ5Qe/NN5MUJxTaFt46E0Y/xjSY+KesCQc= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.115.0/go.mod h1:361IqXD4jnfs6G+Yn7978uv1UNozhZo4yBYy4p6Nqzc= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.115.0 h1:JSFnfWwlVGLul8p9DE6Sk6E0zaqCvbys7CqvJQD4MIs= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.115.0/go.mod h1:cw0qzwXzKKxM7QyDcNSp9OSDLySVXyaSrgdqWPqlDk8= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.115.0 h1:2xlgF/vCUsZx9HDqhDi0XyR1QXBM67YFRyWrEq5Ydos= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.115.0/go.mod h1:vWTdohkLm9S+3Ekz4aq1jW0xt8wD2jrdOOSOJNllppo= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.115.0 h1:XDlXWa6pdAp02kdfZdzZ0cjeZMNHjI7dj2dNgKdzOfo= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.115.0/go.mod h1:Zo6YARAWAMCdlUmyKBq0EcuKmLjxfC2hUNd3jIAFsWE= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.115.0 h1:hYNlyUj3F43cuv1ap19NlEEchQfs91vYeNoQ1+nswLo= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.115.0/go.mod h1:1o6wF5HJdpb2hd2eGMoQhGuTKb4F2+j/IHBJJSPdM2w= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0 h1:GIyMUiud3T8nyCJP9KVhxVKvfcNQRBCde5uTCl6K/i0= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0/go.mod h1:x4hCznyUolxGt5cE/uXWRCckdIDrUYqH5hJddvdKZd4= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.115.0 h1:Di0uc2QvwEVrq1PEReZ34FpPuo1z5QhHmT0bvdTe0DU= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.115.0/go.mod h1:ODvjmz18PDQnX/BruQ8IFOpiz/HdGOpUWMEKq7f3nhA= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.115.0 h1:h/HAHLIZnIyu85l8wOeggOyiI8z8citNAqxQktVKUpk= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.115.0/go.mod h1:iEU0NA/i2sUREqD19JYmjKwrjMUTcddad/h1LGdSMHw= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= @@ -1619,8 +1619,8 @@ github.com/shibumi/go-pathspec v1.3.0 h1:QUyMZhFo0Md5B8zV8x2tesohbb5kfbpTi9rBnKh github.com/shibumi/go-pathspec v1.3.0/go.mod h1:Xutfslp817l2I1cZvgcfeMQJG5QnU2lh5tVaaMCl3jE= github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shirou/gopsutil/v4 v4.24.10 h1:7VOzPtfw/5YDU+jLEoBwXwxJbQetULywoSV4RYY7HkM= -github.com/shirou/gopsutil/v4 v4.24.10/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 h1:udFKJ0aHUL60LboW/A+DfgoHVedieIzIXE8uylPue0U= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= @@ -1631,8 +1631,8 @@ github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFR github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/signalfx/sapm-proto v0.16.0 h1:E8W+awZBl3nmpDTdbPK8Uwla9FdSCWpZChR3p+7bzw0= -github.com/signalfx/sapm-proto v0.16.0/go.mod h1:7VTAIoYIgkAK+j6w3l4Aici+EYySGAmXCK0rfD2OZkU= +github.com/signalfx/sapm-proto v0.17.0 h1:KY+9zm/yDOq6uzaguI1RmrJcWxzbkGv0zE6GplA3ytc= +github.com/signalfx/sapm-proto v0.17.0/go.mod h1:c8fGx9DjGP7Hqif7g6Zy6E+BCMXK/dERFU2b3faA0gk= github.com/sigstore/rekor v1.2.2 h1:5JK/zKZvcQpL/jBmHvmFj3YbpDMBQnJQ6ygp8xdF3bY= github.com/sigstore/rekor v1.2.2/go.mod h1:FGnWBGWzeNceJnp0x9eDFd41mI8aQqCjj+Zp0IEs0Qg= github.com/sijms/go-ora/v2 v2.8.19 h1:7LoKZatDYGi18mkpQTR/gQvG9yOdtc7hPAex96Bqisc= @@ -1757,8 +1757,8 @@ github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= github.com/tidwall/tinylru v1.1.0 h1:XY6IUfzVTU9rpwdhKUF6nQdChgCdGjkMfLzbWyiau6I= github.com/tidwall/tinylru v1.1.0/go.mod h1:3+bX+TJ2baOLMWTnlyNWHh4QMnFyARg2TLTQ6OFbzw8= -github.com/tidwall/wal v1.1.7 h1:emc1TRjIVsdKKSnpwGBAcsAGg0767SvUk8+ygx7Bb+4= -github.com/tidwall/wal v1.1.7/go.mod h1:r6lR1j27W9EPalgHiB7zLJDYu3mzW5BQP5KrzBpYY/E= +github.com/tidwall/wal v1.1.8 h1:2qDSGdAdjaY3PEvHRva+9UFqgk+ef7cOiW1Qn5JH1y0= +github.com/tidwall/wal v1.1.8/go.mod h1:r6lR1j27W9EPalgHiB7zLJDYu3mzW5BQP5KrzBpYY/E= github.com/tinylib/msgp v1.2.4 h1:yLFeUGostXXSGW5vxfT5dXG/qzkn4schv2I7at5+hVU= github.com/tinylib/msgp v1.2.4/go.mod h1:ykjzy2wzgrlvpDCRc4LA8UXy6D8bzMSuAF3WD57Gok0= github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= @@ -1906,142 +1906,146 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/collector v0.114.0 h1:XLLLOHns06P9XjVHyp0OdEMdwXvol5MLzugqQMmXYuU= -go.opentelemetry.io/collector v0.114.0/go.mod h1:XbjD4Yw9LunLo3IJu3ZZytNZ0drEVznxw1Z14Ujlw3s= -go.opentelemetry.io/collector/client v1.20.0 h1:o60wPcj5nLtaRenF+1E5p4QXFS3TDL6vHlw+GOon3rg= -go.opentelemetry.io/collector/client v1.20.0/go.mod h1:6aqkszco9FaLWCxyJEVam6PP7cUa8mPRIXeS5eZGj0U= -go.opentelemetry.io/collector/component v0.114.0 h1:SVGbm5LvHGSTEDv7p92oPuBgK5tuiWR82I9+LL4TtBE= -go.opentelemetry.io/collector/component v0.114.0/go.mod h1:MLxtjZ6UVHjDxSdhGLuJfHBHvfl1iT/Y7IaQPD24Eww= -go.opentelemetry.io/collector/component/componentstatus v0.114.0 h1:y9my/xink8KB5lK8zFAjgB2+pEh0QYy5TM972fxZY9w= -go.opentelemetry.io/collector/component/componentstatus v0.114.0/go.mod h1:RIoeCYZpPaae7QLE/1RacqzhHuXBmzRAk9H/EwYtIIs= -go.opentelemetry.io/collector/component/componenttest v0.114.0 h1:GM4FTTlfeXoVm6sZYBHImwlRN8ayh2oAfUhvaFj7Zo8= -go.opentelemetry.io/collector/component/componenttest v0.114.0/go.mod h1:ZZEJMtbJtoVC/3/9R1HzERq+cYQRxuMFQrPCpfZ4Xos= -go.opentelemetry.io/collector/config/configauth v0.114.0 h1:R2sJ6xpsLYGH0yU0vCxotzBYDKR/Hrjv0A7y9lwMyiw= -go.opentelemetry.io/collector/config/configauth v0.114.0/go.mod h1:3Z24KcCpG+WYCeQYfs/cNp5cP2BDeOqLCtOEgs/rPqM= -go.opentelemetry.io/collector/config/configcompression v1.20.0 h1:H/mvz7J/5z+O74YsO0t2tk+REnO2tzLM8TgIQ4AZ5w0= -go.opentelemetry.io/collector/config/configcompression v1.20.0/go.mod h1:pnxkFCLUZLKWzYJvfSwZnPrnm0twX14CYj2ADth5xiU= -go.opentelemetry.io/collector/config/configgrpc v0.114.0 h1:3kGI9CljNtzClF+9sg7NWZ5qUoy4qZvGxv9q3phDn7k= -go.opentelemetry.io/collector/config/configgrpc v0.114.0/go.mod h1:IHSyqSdjPXW34aif/8BhNlXxRcIVV6026jVi0/+ituY= -go.opentelemetry.io/collector/config/confighttp v0.114.0 h1:DjGsBvVm+mGK3IpJBaXianWhwcxEC1fF33cpuC1LY/I= -go.opentelemetry.io/collector/config/confighttp v0.114.0/go.mod h1:nrlNLxOZ+4JQaV9j0TiqQV7LOHhrRivPrT8nQRHED3Q= -go.opentelemetry.io/collector/config/confignet v1.20.0 h1:LrM6AuiY8N/woTP4SWhL2V0562JXwJs9MRNFZJFLtRY= -go.opentelemetry.io/collector/config/confignet v1.20.0/go.mod h1:o3v4joAEjvLwntqexg5ixMqRrU1+Vst+jWuCUaBNgOg= -go.opentelemetry.io/collector/config/configopaque v1.20.0 h1:2I48zKiyyyYqjm7y0B9OLp24ku2ZSX3nCHG0r5FdWOQ= -go.opentelemetry.io/collector/config/configopaque v1.20.0/go.mod h1:6zlLIyOoRpJJ+0bEKrlZOZon3rOp5Jrz9fMdR4twOS4= -go.opentelemetry.io/collector/config/configretry v1.20.0 h1:z679mrMlW2a6tOOYPGdrS/QfALxdzWLQUOpH8Uu+D5Y= -go.opentelemetry.io/collector/config/configretry v1.20.0/go.mod h1:KvQF5cfphq1rQm1dKR4eLDNQYw6iI2fY72NMZVa+0N0= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0 h1:kjLeyrumge6wsX6ZIkicdNOlBXaEyW2PI2ZdVXz/rzY= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0/go.mod h1:R0MBUxjSMVMIhljuDHWIygzzJWQyZHXXWIgQNxcFwhc= -go.opentelemetry.io/collector/config/configtls v1.20.0 h1:hNlJdwfyY5Qe54RLJ41lfLqKTn9ypkR7sk7JNCcSe2U= -go.opentelemetry.io/collector/config/configtls v1.20.0/go.mod h1:sav/txSHguadTYlSSK+BJO2ljJeYEtRoBahgzWAguYg= -go.opentelemetry.io/collector/config/internal v0.114.0 h1:uWSDWTJb8T6xRjKD9/XmEARakXnxgYVYKUeId78hErc= -go.opentelemetry.io/collector/config/internal v0.114.0/go.mod h1:yC7E4h1Uj0SubxcFImh6OvBHFTjMh99+A5PuyIgDWqc= -go.opentelemetry.io/collector/confmap v1.20.0 h1:ARfOwmkKxFOud1njl03yAHQ30+uenlzqCO6LBYamDTE= -go.opentelemetry.io/collector/confmap v1.20.0/go.mod h1:DMpd9Ay/ffls3JoQBQ73vWeRsz1rNuLbwjo6WtjSQus= -go.opentelemetry.io/collector/confmap/provider/envprovider v1.20.0 h1:I3xDecFXJVZBo5zJS7Y5SWBjF22XDWGZJgwotiwA5QM= -go.opentelemetry.io/collector/confmap/provider/envprovider v1.20.0/go.mod h1:CF0l8V8MNv+Wag8UkqObotFnlhMzdTFuk4/6kylKwYU= -go.opentelemetry.io/collector/confmap/provider/fileprovider v1.20.0 h1:wWxvQ7wj+1O9yDGM5m1HPEz8FJewAHAUWadAAi0KVbM= -go.opentelemetry.io/collector/confmap/provider/fileprovider v1.20.0/go.mod h1:/5HWIPjGYk8IUurs1CZUSjGaSsaQyJsfR8+Zs5rGJ6Y= -go.opentelemetry.io/collector/confmap/provider/httpprovider v1.20.0 h1:YS1nB8vDoCS8IlfX5OP3QGS90y/hfflwZ7CoPQcAOlU= -go.opentelemetry.io/collector/confmap/provider/httpprovider v1.20.0/go.mod h1:aV4UfkgcJ3eyXvfd3m694omN++1c96Joitab+YL6Xks= -go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.20.0 h1:0BJHAeKFb46FCT0ehOmmGs0v31cGuAh4DIic07J71NU= -go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.20.0/go.mod h1:gBiweuH4EDuPh9mpLCB/wPZzostdA+gKY8hABwbotQk= -go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.20.0 h1:jSXTojCPI6Xr98m99nF7qbQFnw3INLEOHRcqcHS+lak= -go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.20.0/go.mod h1:Pu95O2JE3R+0BBTbe4gpAC8ms3w6FbICHJw3WvGWrjs= -go.opentelemetry.io/collector/connector v0.114.0 h1:efGAeTCtg8zp5Hyd7Am8kBUgsSxWEFlFtAu4OX4mcEA= -go.opentelemetry.io/collector/connector v0.114.0/go.mod h1:8DhGgD8RhkF0ooELl4NOPPD/wgHuXHmY7g90RwJ2eNo= -go.opentelemetry.io/collector/connector/connectorprofiles v0.114.0 h1:uVs9gy3UfQBmH0636ouIbGIoWis7zmKN+ny4XOGm36U= -go.opentelemetry.io/collector/connector/connectorprofiles v0.114.0/go.mod h1:X681qFEAsEPMDQ0pMsD/3DqePw58sfLew1QbBKvGnmw= -go.opentelemetry.io/collector/connector/connectortest v0.114.0 h1:Fpy1JHyNOLdVzNcmxUY6Jwxdz6JDcTXL1NCfw8k1AOc= -go.opentelemetry.io/collector/connector/connectortest v0.114.0/go.mod h1:1zaAlODuL9iNyfyjHQeGCpbcaUjf5b68t8LqlwHKBNA= -go.opentelemetry.io/collector/consumer v0.114.0 h1:1zVaHvfIZowGwZRitRBRo3i+RP2StlU+GClYiofSw0Q= -go.opentelemetry.io/collector/consumer v0.114.0/go.mod h1:d+Mrzt9hsH1ub3zmwSlnQVPLeTYir4Mgo7CrWfnncN4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0 h1:r2YiELfWerb40FHD23V04gNjIkLUcjEKGxI4Vtm2iO4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0/go.mod h1:MzIrLQ5jptO2egypolhlAbZsWZr29WC4FhSxQjnxcvg= -go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.114.0 h1:0IpwQXyHDXhIaLA6w2VlD6Ca0iuX4wlfCDiF+BKCwEo= -go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.114.0/go.mod h1:9pKeVRcCT92x5/UIULMLAop+J23VYJCWSZcVhmbup5I= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 h1:5pXYy3E6UK5Huu3aQbsYL8B6E6MyWx4fvXXDn+oXZaA= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0/go.mod h1:PMq3f54KcJQO4v1tue0QxQScu7REFVADlXxXSAYMiN0= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0 h1:isaTwJK5DOy8Bs7GuLq23ejfgj8gLIo5dOUvkRnLF4g= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0/go.mod h1:GNeLPkfRPdh06n/Rv1UKa/cAtCKjN0a7ADyHjIj4HFE= -go.opentelemetry.io/collector/exporter v0.114.0 h1:5/0BBpXuCJQSQ5SQf31g7j6T4XEKkyx9mZMcA2rS5e8= -go.opentelemetry.io/collector/exporter v0.114.0/go.mod h1:atpd0wWXgh5LAZ0REU/d/Ti/q50HDfnlBIjMjJQlKFg= -go.opentelemetry.io/collector/exporter/debugexporter v0.114.0 h1:7t1ij8fuV510SRT+eabgbl4973DaAtGmTx0RuGJy8DU= -go.opentelemetry.io/collector/exporter/debugexporter v0.114.0/go.mod h1:rC8PHnf1MniZN4ryU4i5GsyXKRkMEGwEGF2hxHx/JyU= -go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.114.0 h1:W/KsD33oMg/M7Kd5/m2riliWrTg3W9IgQVNeZL3cZjs= -go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.114.0/go.mod h1:Fh47qYBjX+jm+mpWBcqmaaQucZ6KiKm5P0drEt+xNRc= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0 h1:/wmWOSBHcvtz3Pbv7+rWCqPPQuNvYaoidKKaOqZsLKs= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0/go.mod h1:epRYTkyJZTSQZBJflMGHUyUo2EdLPhsaZEyo5Qm848A= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0 h1:vo0idBJT+QACSM1KpjVLm9VeiXVwO7y4UnMpGxN6EyM= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0/go.mod h1:420ssFrhaphneybstbMeSIiqSRoaBARPgO71O17foaM= -go.opentelemetry.io/collector/exporter/nopexporter v0.114.0 h1:uMtQQjkAK62tzy2Rs/KCgRofNW7uo0EgU5xn3xmgB2w= -go.opentelemetry.io/collector/exporter/nopexporter v0.114.0/go.mod h1:jV9/E7Twphys1df6m7HgvqgJXpmppxFJb/DYy3XLR94= -go.opentelemetry.io/collector/exporter/otlpexporter v0.114.0 h1:SC/xZNCB/eCVflrhDFX4WtrpvBPsZhmXVuSvgHQBsB8= -go.opentelemetry.io/collector/exporter/otlpexporter v0.114.0/go.mod h1:q1273aUuYewtDUFwizv0AKu5/D+gbQAi8UFLKDv1eMk= -go.opentelemetry.io/collector/exporter/otlphttpexporter v0.114.0 h1:+nPJraioPpLS2Kj3+YIfErDDFHsLX/5oPMSMAYKoggM= -go.opentelemetry.io/collector/exporter/otlphttpexporter v0.114.0/go.mod h1:O+75KYmyJwK61VDsW7LHo2qFFXCTf3kEJH3ZvW1bb4Y= -go.opentelemetry.io/collector/extension v0.114.0 h1:9Qb92y8hD2WDC5aMDoj4JNQN+/5BQYJWPUPzLXX+iGw= -go.opentelemetry.io/collector/extension v0.114.0/go.mod h1:Yk2/1ptVgfTr12t+22v93nYJpioP14pURv2YercSzU0= -go.opentelemetry.io/collector/extension/auth v0.114.0 h1:1K2qh4yvG8kKR/sTAobI/rw5VxzPZoKcl3FmC195vvo= -go.opentelemetry.io/collector/extension/auth v0.114.0/go.mod h1:IjtsG+jUVJB0utKF8dAK8pLutRun3aEgASshImzsw/U= -go.opentelemetry.io/collector/extension/experimental/storage v0.114.0 h1:hLyX9UvmY0t6iBnk3CqvyNck2U0QjPACekj7pDRx2hA= -go.opentelemetry.io/collector/extension/experimental/storage v0.114.0/go.mod h1:WqYRQVJjJLE1rm+y/ks1wPdPRGWePEvE1VO07xm2J2k= -go.opentelemetry.io/collector/extension/extensioncapabilities v0.114.0 h1:3OHll7gp5XIu7FVgon+koShPy797nze6EjCDokFUG7w= -go.opentelemetry.io/collector/extension/extensioncapabilities v0.114.0/go.mod h1:f0KdeLmE2jWVBmJ1U4WmfAtz1/tQUErGPfhPLKCQ49U= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0 h1:ibXDms1qrswlvlR6b3d2BeyI8sXUXoFV11yOi9Sop8o= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0/go.mod h1:/bOYmqu5yTDfI1bJZUxFqm8ZtmcodpquebiSxiQxtDY= -go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 h1:JosqAcdWw7IGsURJNR8f17xmaGCQEtKhQt9tM0T/DEg= -go.opentelemetry.io/collector/extension/zpagesextension v0.114.0/go.mod h1:+VO4p2GZvmIMqCVyIfS/U85Xqg+HIOe+mdl/ya+jVTE= -go.opentelemetry.io/collector/featuregate v1.20.0 h1:Mi7nMy/q52eruI+6jWnMKUOeM55XvwoPnGcdB1++O8c= -go.opentelemetry.io/collector/featuregate v1.20.0/go.mod h1:47xrISO71vJ83LSMm8+yIDsUbKktUp48Ovt7RR6VbRs= -go.opentelemetry.io/collector/filter v0.114.0 h1:5I97yblUxc6rXCYRn542aSrsNQLo/dE+87XROW2b5oU= -go.opentelemetry.io/collector/filter v0.114.0/go.mod h1:Nxwc+RD9AH4y/qYtkTP+Ac19CxgW5GAB+sJU4ACLr6g= -go.opentelemetry.io/collector/internal/fanoutconsumer v0.114.0 h1:JM9huYqy5LTzmuxQmbPST3l5Ez5kJNit28c6WFWls34= -go.opentelemetry.io/collector/internal/fanoutconsumer v0.114.0/go.mod h1:V28tDU4Wvf1PfW1Ty/SBL9tpKul2iYGno/HkCWGDrj0= -go.opentelemetry.io/collector/internal/memorylimiter v0.114.0 h1:UpKQ/GtWw7Mh/PjR03NdgR9PG7uT7mnfbQVxpDQVBgk= -go.opentelemetry.io/collector/internal/memorylimiter v0.114.0/go.mod h1:QUZr3bBguTmgLJUFuqVVsOxKr7Y/2JO49k3I1tUH88U= -go.opentelemetry.io/collector/internal/sharedcomponent v0.114.0 h1:DjX9ubjkKDnioQB03FYc40FTyhR25CdobMfjinKkZ1w= -go.opentelemetry.io/collector/internal/sharedcomponent v0.114.0/go.mod h1:lYlFiGIjPjhwTS/Xc+toJ9o3D8A6cCHuK1JX+ZbujVs= -go.opentelemetry.io/collector/otelcol v0.114.0 h1:d/nmYc+adzZ70g4zBMtgujGHVNulF59ExCpuM/3ZKV4= -go.opentelemetry.io/collector/otelcol v0.114.0/go.mod h1:DGmFFao5jHSwD6G1HjUjs0CYcyrTau+u7GjTRUGKN+4= -go.opentelemetry.io/collector/otelcol/otelcoltest v0.114.0 h1:Em5e1EgrPrS90EWDWLJHCvyFIDl5PIq1DuW9zd8F3pY= -go.opentelemetry.io/collector/otelcol/otelcoltest v0.114.0/go.mod h1:YAs78SaOJsf1HNWrNH+GFTdkS58dpQI98cok6gZP4Lg= -go.opentelemetry.io/collector/pdata v1.20.0 h1:ePcwt4bdtISP0loHaE+C9xYoU2ZkIvWv89Fob16o9SM= -go.opentelemetry.io/collector/pdata v1.20.0/go.mod h1:Ox1YVLe87cZDB/TL30i4SUz1cA5s6AM6SpFMfY61ICs= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0 h1:pUNfTzsI/JUTiE+DScDM4lsrPoxnVNLI2fbTxR/oapo= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0/go.mod h1:4aNcj6WM1n1uXyFSXlhVs4ibrERgNYsTbzcYI2zGhxA= -go.opentelemetry.io/collector/pdata/testdata v0.114.0 h1:+AzszWSL1i4K6meQ8rU0JDDW55SYCXa6FVqfDixhhTo= -go.opentelemetry.io/collector/pdata/testdata v0.114.0/go.mod h1:bv8XFdCTZxG2MQB5l9dKxSxf5zBrcodwO6JOy1+AxXM= -go.opentelemetry.io/collector/pipeline v0.114.0 h1:v3YOhc5z0tD6QbO5n/pnftpIeroihM2ks9Z2yKPCcwY= -go.opentelemetry.io/collector/pipeline v0.114.0/go.mod h1:4vOvjVsoYTHVGTbfFwqfnQOSV2K3RKUHofh3jNRc2Mg= -go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.114.0 h1:LZgxMQ2zXcz8ILBefhxpZBpn/Rx+TJTncIIQy0LgtgY= -go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.114.0/go.mod h1:bmyqQCJWcA53/GtqZJ2ahwmLdFl6UelFH2nR6OJFqpw= -go.opentelemetry.io/collector/processor v0.114.0 h1:6bqQgLL7BtKrNv4YkEOGjZfkcfZv/ciJSQx1epGG9Zk= -go.opentelemetry.io/collector/processor v0.114.0/go.mod h1:DV/wa+nAmSHIDeD9NblPwkY9PbgtDQAZJ+PE5biZwPc= -go.opentelemetry.io/collector/processor/batchprocessor v0.114.0 h1:Xu+pdPGIh6gLqHW5oYJsiim1mbnG85QaaUQy0YPoL+c= -go.opentelemetry.io/collector/processor/batchprocessor v0.114.0/go.mod h1:emnnL5CaliCnWjXNpNixqpvn7uc/kyUTv2939J/reMY= -go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.114.0 h1:gfzShbdzhbA2lsRSx2z9i9QO/FJwAzOSrBW2ObPqf38= -go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.114.0/go.mod h1:leElNJO5dnpOg0o1Gr2Ok59HKADRznbrZ3u2oTfx50Q= -go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.114.0 h1:/CQJ0UQRStwBQnM4Z9lTr6D4IqEKH1iuUWVr21fP4To= -go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.114.0/go.mod h1:HD2uDr7TIWQ+TsXBLmrHu396EeClj7YNoNzoWJw4jrY= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0 h1:+P/1nLouEXTnN8DVQl+qWwO4BTkQyNPG9t/FrpUqrSI= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0/go.mod h1:3fuHeNIpINwx3bqFMprmDJyr6y5tWoWbJH599kltO5Y= -go.opentelemetry.io/collector/processor/processortest v0.114.0 h1:3FTaVXAp0LoVmUJn1ewBFckAby7AHa6/Kcdj0xuW14c= -go.opentelemetry.io/collector/processor/processortest v0.114.0/go.mod h1:OgsdOs1Fv5ZGTTJPF5nNIUJh2YkuV1acWd73yWgnti4= -go.opentelemetry.io/collector/receiver v0.114.0 h1:90SAnXAjNq7/k52/pFmmb06Cf1YauoPYtbio4aOXafY= -go.opentelemetry.io/collector/receiver v0.114.0/go.mod h1:KUGT0/D953LXbGH/D3lLPU8yrU3HfWnUqpt4W4hSOnE= -go.opentelemetry.io/collector/receiver/nopreceiver v0.114.0 h1:CMtfS6fwEwqwTMeC17A3Q2xsSkXfH4gG2SBZDr2txCw= -go.opentelemetry.io/collector/receiver/nopreceiver v0.114.0/go.mod h1:ajp6ok8iSSAcyq58wcOUJVe++1mTQ1isxqlaNUgQNzo= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.114.0 h1:8ASaxRWLe8P0pefOiYbCSZ0aXmwE4K06I8FBGc/n+J0= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.114.0/go.mod h1:3vjOvYBWGUVzuaovoumMbNHEIK3PqDs5rzEyd/nzsLU= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0 h1:ibhEfGpvNB3yrtpl2jYFabrunMk1hurxvMYpM0b1Ck4= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0/go.mod h1:UZyRfaasw+NLvN10AN8IQnmj5tQ3BOUH1uP2ctpO9f0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0 h1:D+Kh9t2n4asTnM+TiSxbrKlUemLZandWntj17BJWWb0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0/go.mod h1:mNSHQ13vFmqD+VAcRzLjStFBejbcWUn2Mp0pAd7Op+U= -go.opentelemetry.io/collector/semconv v0.114.0 h1:/eKcCJwZepQUtEuFuxa0thx2XIOvhFpaf214ZG1a11k= -go.opentelemetry.io/collector/semconv v0.114.0/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= -go.opentelemetry.io/collector/service v0.114.0 h1:MYF/4nH1CgtiLx09503xPAAUZefCzG1kaO+oanwX590= -go.opentelemetry.io/collector/service v0.114.0/go.mod h1:xH5/RapJdf5Ohh8iU8J0ZstfFYciP1oJPesiByteZxo= +go.opentelemetry.io/collector v0.115.0 h1:qUZ0bTeNBudMxNQ7FJKS//TxTjeJ7tfU/z22mcFavWU= +go.opentelemetry.io/collector v0.115.0/go.mod h1:66qx0xKnVvdwq60e1DEfb4e+zmM9szhPsv2hxZ/Mpj4= +go.opentelemetry.io/collector/client v1.21.0 h1:3Kes8lOFMYVxoxeAmX+DTEAkuS1iTA3NkSfqzGmygJA= +go.opentelemetry.io/collector/client v1.21.0/go.mod h1:jYJGiL0UA975OOyHmjbQSokNWt1OiviI5KjPOMUMGwc= +go.opentelemetry.io/collector/component v0.115.0 h1:iLte1oCiXzjiCnaOBKdsXacfFiECecpWxW3/LeriMoo= +go.opentelemetry.io/collector/component v0.115.0/go.mod h1:oIUFiH7w1eOimdeYhFI+gAIxYSiLDocKVJ0PTvX7d6s= +go.opentelemetry.io/collector/component/componentstatus v0.115.0 h1:pbpUIL+uKDfEiSgKK+S5nuSL6MDIIQYsp4b65ZGVb9M= +go.opentelemetry.io/collector/component/componentstatus v0.115.0/go.mod h1:36A+9XSiOz0Cdhq+UwwPRlEr5CYuSkEnVO9om4BH7d0= +go.opentelemetry.io/collector/component/componenttest v0.115.0 h1:9URDJ9VyP6tuij+YHjp/kSSMecnZOd7oGvzu+rw9SJY= +go.opentelemetry.io/collector/component/componenttest v0.115.0/go.mod h1:PzXvNqKLCiSADZGZFKH+IOHMkaQ0GTHuzysfVbTPKYY= +go.opentelemetry.io/collector/config/configauth v0.115.0 h1:xa+ALdyPgva3rZnLBh1H2oS5MsHP6JxSqMtQmcELnys= +go.opentelemetry.io/collector/config/configauth v0.115.0/go.mod h1:C7anpb3Rf4KswMT+dgOzkW9UX0z/65PLORpUw3p0VYc= +go.opentelemetry.io/collector/config/configcompression v1.21.0 h1:0zbPdZAgPFMAarwJEC4gaR6f/JBP686A3TYSgb3oa+E= +go.opentelemetry.io/collector/config/configcompression v1.21.0/go.mod h1:LvYG00tbPTv0NOLoZN0wXq1F5thcxvukO8INq7xyfWU= +go.opentelemetry.io/collector/config/configgrpc v0.115.0 h1:gZzXSFe6hB3RUcEeAYqk1yT+TBa+X9tp6/1x29Yg2yk= +go.opentelemetry.io/collector/config/configgrpc v0.115.0/go.mod h1:107lRZ5LdQPMdGJGd4m1GhyKxyH0az2cUOqrJgTEN8E= +go.opentelemetry.io/collector/config/confighttp v0.115.0 h1:BIy394oNXnqySJwrCqgAJu4gWgAV5aQUDD6k1hy6C8o= +go.opentelemetry.io/collector/config/confighttp v0.115.0/go.mod h1:Wr50ut12NmCEAl4bWLJryw2EjUmJTtYRg89560Q51wc= +go.opentelemetry.io/collector/config/confignet v1.21.0 h1:PeQ5YrMnfftysFL/WVaSrjPOWjD6DfeABY50pf9CZxU= +go.opentelemetry.io/collector/config/confignet v1.21.0/go.mod h1:ZppUH1hgUJOubawEsxsQ9MzEYFytqo2GnVSS7d4CVxc= +go.opentelemetry.io/collector/config/configopaque v1.21.0 h1:PcvRGkBk4Px8BQM7tX+kw4i3jBsfAHGoGQbtZg6Ox7U= +go.opentelemetry.io/collector/config/configopaque v1.21.0/go.mod h1:sW0t0iI/VfRL9VYX7Ik6XzVgPcR+Y5kejTLsYcMyDWs= +go.opentelemetry.io/collector/config/configretry v1.21.0 h1:ZHoOvAkEcv5BBeaJn8IQ6rQ4GMPZWW4S+W7R4QTEbZU= +go.opentelemetry.io/collector/config/configretry v1.21.0/go.mod h1:cleBc9I0DIWpTiiHfu9v83FUaCTqcPXmebpLxjEIqro= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0 h1:U07FinCDop+r2RjWQ3aP9ZWONC7r7kQIp1GkXQi6nsI= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0/go.mod h1:SlBEwQg0qly75rXZ6W1Ig8jN25KBVBkFIIAUI1GiAAE= +go.opentelemetry.io/collector/config/configtls v1.21.0 h1:ZfrlAYgBD8lzp04W0GxwiDmUbrvKsvDYJi+wkyiXlpA= +go.opentelemetry.io/collector/config/configtls v1.21.0/go.mod h1:5EsNefPfVCMOTlOrr3wyj7LrsOgY7V8iqRl8oFZEqtw= +go.opentelemetry.io/collector/config/internal v0.115.0 h1:eVk57iufZpUXyPJFKTb1Ebx5tmcCyroIlt427r5pxS8= +go.opentelemetry.io/collector/config/internal v0.115.0/go.mod h1:OVkadRWlKAoWjHslqjWtBLAne8ceQm8WYT71ZcBWLFc= +go.opentelemetry.io/collector/confmap v1.21.0 h1:1tIcx2/Suwg8VhuPmQw87ba0ludPmumpFCFRZZa6RXA= +go.opentelemetry.io/collector/confmap v1.21.0/go.mod h1:Rrhs+MWoaP6AswZp+ReQ2VO9dfOfcUjdjiSHBsG+nec= +go.opentelemetry.io/collector/confmap/provider/envprovider v1.21.0 h1:YLf++Z8CMp86AanfOCWUiE7vKbb1kSjgC3a9VJoxbD4= +go.opentelemetry.io/collector/confmap/provider/envprovider v1.21.0/go.mod h1:aSWLYcmgZZJDNtWN1M8JKQuehoGgOxibl1KuvKTar4M= +go.opentelemetry.io/collector/confmap/provider/fileprovider v1.21.0 h1:+zukkM+3l426iGoJkXTpLB2Z8QnZFu26TkGPjh5Rn/4= +go.opentelemetry.io/collector/confmap/provider/fileprovider v1.21.0/go.mod h1:BXBpQhF3n4CNLYO2n/mWZPd2U9ekpbLXLRGZrun1VfI= +go.opentelemetry.io/collector/confmap/provider/httpprovider v1.21.0 h1:NYYGM+SgIlTuNGjd8eGzDr8DkvOe4q7cXon8djF9yyI= +go.opentelemetry.io/collector/confmap/provider/httpprovider v1.21.0/go.mod h1:XRYbuwqq1awFuNhLDUv4aSvn6MzqX+abcevx1O+APJI= +go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.21.0 h1:2EEUI2DzA2DvrvCImMWRSNqIHdRJ6+qbgvZL44Zb2ac= +go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.21.0/go.mod h1:axezjjQWY4kZc5pr/+wOKAuqSYMhea/tWzP5S30h+dc= +go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.21.0 h1:P3Q9RytCMY76ORPCnkkjOa4fkuFqmZiQRor+F/nPlYE= +go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.21.0/go.mod h1:xhYhHK3yLQ78tsoaKPIGUfFulgy961ImOe2gATH3RQc= +go.opentelemetry.io/collector/connector v0.115.0 h1:4Kkm3HQFzNT1eliMOB8FbIn+PLMRJ2qQku5Vmy3V8Ko= +go.opentelemetry.io/collector/connector v0.115.0/go.mod h1:+ByuAmYLrYHoKh9B+LGqUc0N2kXcN2l8Dea8Mp6brZ8= +go.opentelemetry.io/collector/connector/connectorprofiles v0.115.0 h1:aW1f4Az0I+QJyImFccNWAXqik80bnNu27aQqi2hFfD8= +go.opentelemetry.io/collector/connector/connectorprofiles v0.115.0/go.mod h1:lmynB1CucydOsHa8RSSBh5roUZPfuiv65imXhtNzClM= +go.opentelemetry.io/collector/connector/connectortest v0.115.0 h1:GjtourFr0MJmlbtEPAZ/1BZCxkNAeJ0aMTlrxwftJ0k= +go.opentelemetry.io/collector/connector/connectortest v0.115.0/go.mod h1:f3KQXXNlh/XuV8elmnuVVyfY92dJCAovz10gD72OH0k= +go.opentelemetry.io/collector/consumer v1.21.0 h1:THKZ2Vbi6GkamjTBI2hFq5Dc4kINZTWGwQNa8d/Ty9g= +go.opentelemetry.io/collector/consumer v1.21.0/go.mod h1:FQcC4ThMtRYY41dv+IPNK8POLLhAFY3r1YR5fuP7iiY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0 h1:yli//xBCQMPZKXNgNlXemo4dvqhnFrAmCZ11DvQgmcY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0/go.mod h1:LwVzAvQ6ZVNG7mbOvurbAo+W/rKws0IcjOwriuZXqPE= +go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.115.0 h1:gaIhzpaGFWauiyznrQ3f++TbcdXxA5rpsX3L9uGjMM8= +go.opentelemetry.io/collector/consumer/consumererror/consumererrorprofiles v0.115.0/go.mod h1:7oXvuGBSawS5bc413lh1KEMcXkqBcrCqZQahOdnE24U= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 h1:H3fDuyQW1t2HWHkz96WMBQJKUevypOCjBqnqtaAWyoA= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0/go.mod h1:IzEmZ91Tp7TBxVDq8Cc9xvLsmO7H08njr6Pu9P5d9ns= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0 h1:hru0I2447y0TluCdwlKYFFtgcpyCnlM+LiOK1JZyA70= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0/go.mod h1:ybjALRJWR6aKNOzEMy1T1ruCULVDEjj4omtOJMrH/kU= +go.opentelemetry.io/collector/exporter v0.115.0 h1:JnxfpOnsuqhTPKJXVKJLS1Cv3BiVrVLzpHOjJEQw+xw= +go.opentelemetry.io/collector/exporter v0.115.0/go.mod h1:xof3fHQK8wADhaKLIJcQ7ChZaFLNC+haRdPN0wgl6kY= +go.opentelemetry.io/collector/exporter/debugexporter v0.115.0 h1:gb9VMQhcbvYqp0SJ4Hp8R9XqOLNLsoTgNJCPKpNEaVc= +go.opentelemetry.io/collector/exporter/debugexporter v0.115.0/go.mod h1:H/HS1UJlcZPNBbOcrsGZc2sPdQDHtbOjHOxMtJkmlcU= +go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.115.0 h1:fetbc740pODH6JW+H49SW0hiAJwQE+/B0SbuIlaY2rg= +go.opentelemetry.io/collector/exporter/exporterhelper/exporterhelperprofiles v0.115.0/go.mod h1:oEKZ/d5BeaCK6Made9iwaeqmlT4lRbJSlW9nhIn/TwM= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0 h1:lSQEleCn/q9eFufcuK61NdFKU70ZlgI9dBjPCO/4CrE= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0/go.mod h1:7l5K2AecimX2kx+nZC1gKG3QkP247CO1+SodmJ4fFkQ= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0 h1:P9SMTUXQOtcaq40bGtnnAe14zRmR4/yUgj/Tb2BEf/k= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0/go.mod h1:1jMZ9gFGXglb8wfNrBZIgd+RvpZhSyFwdfE+Jtf9w4U= +go.opentelemetry.io/collector/exporter/nopexporter v0.115.0 h1:ufwLbNp7mfoSxWJcoded3D9f/nIVvCwNa/0+ZqxzkzU= +go.opentelemetry.io/collector/exporter/nopexporter v0.115.0/go.mod h1:iIJgru1t+VJVVCE5KMAKjXbq9RkK4/5FCClnWnAlGtc= +go.opentelemetry.io/collector/exporter/otlpexporter v0.115.0 h1:Kqr31VFrQvgEMzeg8T1JSXWacjUQoZph39efKN8jBpY= +go.opentelemetry.io/collector/exporter/otlpexporter v0.115.0/go.mod h1:5uy/gduFx2mH0GxJ84sY75NfzQJb9xYmgiL9Pf0dKF8= +go.opentelemetry.io/collector/exporter/otlphttpexporter v0.115.0 h1:I0qzSWGbgph+iva5/jU8tkeUTkkqqcj8+UzMxg5ubF8= +go.opentelemetry.io/collector/exporter/otlphttpexporter v0.115.0/go.mod h1:cUrv5EG12iOs5MXaecfi9K+ZATEELefpyZY6Hj4NlUo= +go.opentelemetry.io/collector/extension v0.115.0 h1:/cBb8AUdD0KMWC6V3lvCC16eP9Fg0wd1Upcp5rgvuGI= +go.opentelemetry.io/collector/extension v0.115.0/go.mod h1:HI7Ak6loyi6ZrZPsQJW1OO1wbaAW8OqXLFNQlTZnreQ= +go.opentelemetry.io/collector/extension/auth v0.115.0 h1:TTMokbBsSHZRFH48PvGSJmgSS8F3Rkr9MWGHZn8eJDk= +go.opentelemetry.io/collector/extension/auth v0.115.0/go.mod h1:3w+2mzeb2OYNOO4Bi41TUo4jr32ap2y7AOq64IDpxQo= +go.opentelemetry.io/collector/extension/auth/authtest v0.115.0 h1:OZe7dKbZ01qodSpZU0ZYzI6zpmmzJ3UvfdBSFAbSgDw= +go.opentelemetry.io/collector/extension/auth/authtest v0.115.0/go.mod h1:fk9WCXP0x91Q64Z8HZKWTHh9PWtgoWE1KXe3n2Bff3U= +go.opentelemetry.io/collector/extension/experimental/storage v0.115.0 h1:sZXw0+77092pq24CkUoTRoHQPLQUsDq6HFRNB0g5yR4= +go.opentelemetry.io/collector/extension/experimental/storage v0.115.0/go.mod h1:qjFH7Y3QYYs88By2ZB5GMSUN5k3ul4Brrq2J6lKACA0= +go.opentelemetry.io/collector/extension/extensioncapabilities v0.115.0 h1:/g25Hp5aoCNKdDjIb3Fc7XRglO8yaBRFLO/IUNPnqNI= +go.opentelemetry.io/collector/extension/extensioncapabilities v0.115.0/go.mod h1:EQx7ETiy330O6q05S2KRZsRNDg0aQEeJmVl7Ipx+Fcw= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0 h1:GBVFxFEskR8jSdu9uaQh2qpXnN5VNXhXjpJ2UjxtE8I= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0/go.mod h1:eu1ecbz5mT+cHoH2H3GmD/rOO0WsicSJD2RLrYuOmRA= +go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 h1:zYrZZocc7n0ZuDyXNkIaX0P0qk2fjMQj7NegwBJZA4k= +go.opentelemetry.io/collector/extension/zpagesextension v0.115.0/go.mod h1:OaXwNHF3MAcInBzCXrhXbTNHfIi9b7YGhXjtCFZqxNY= +go.opentelemetry.io/collector/featuregate v1.21.0 h1:+EULHPJDLMipcwAGZVp9Nm8NriRvoBBMxp7MSiIZVMI= +go.opentelemetry.io/collector/featuregate v1.21.0/go.mod h1:3GaXqflNDVwWndNGBJ1+XJFy3Fv/XrFgjMN60N3z7yg= +go.opentelemetry.io/collector/filter v0.115.0 h1:pYnHUFDSHSjEIFZit+CU09itVkDXgV+WcV2HOkjvQcE= +go.opentelemetry.io/collector/filter v0.115.0/go.mod h1:aewQ+jmvpH88gPVWpNXiWSm+wwJVxTK4f23ex2NMd2c= +go.opentelemetry.io/collector/internal/fanoutconsumer v0.115.0 h1:6DRiSECeApFq6Jj5ug77rG53R6FzJEZBfygkyMEXdpg= +go.opentelemetry.io/collector/internal/fanoutconsumer v0.115.0/go.mod h1:vgQf5HQdmLQqpDHpDq2S3nTRoUuKtRcZpRTsy+UiwYw= +go.opentelemetry.io/collector/internal/memorylimiter v0.115.0 h1:U07IJxyHZXM6eLn8cOq/Lycx6DhQZhpDOuYtIRw/d6I= +go.opentelemetry.io/collector/internal/memorylimiter v0.115.0/go.mod h1:KNcU8WVpW5y7Ij6CGnsefb7q1UZT7VvrTDhe5FKNOA4= +go.opentelemetry.io/collector/internal/sharedcomponent v0.115.0 h1:9TL6T6ALqDpumUJ0tYIuPIg5LGo4r6eoqlNArYX116o= +go.opentelemetry.io/collector/internal/sharedcomponent v0.115.0/go.mod h1:SgBLKMh11bOTPR1bdDZbi5MlqsoDBBFI3uBIwnei+0k= +go.opentelemetry.io/collector/otelcol v0.115.0 h1:wZhFGrSCZcTQ4qw4ePjI2PaSrOCejoQKAjprKD/xavs= +go.opentelemetry.io/collector/otelcol v0.115.0/go.mod h1:iK8DPvaizirIYKDl1zZG7DDYUj6GkkH4KHifVVM88vk= +go.opentelemetry.io/collector/otelcol/otelcoltest v0.115.0 h1:HNlFpQujlnvawBk8nvMGxzjDHWDCfSprxem/EpQn4u8= +go.opentelemetry.io/collector/otelcol/otelcoltest v0.115.0/go.mod h1:WsMbqYl2rm3nPFbdxQqyLXf4iu97nYLeuQ1seZIpV3Y= +go.opentelemetry.io/collector/pdata v1.21.0 h1:PG+UbiFMJ35X/WcAR7Rf/PWmWtRdW0aHlOidsR6c5MA= +go.opentelemetry.io/collector/pdata v1.21.0/go.mod h1:GKb1/zocKJMvxKbS+sl0W85lxhYBTFJ6h6I1tphVyDU= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0 h1:NI89hy13vNDw7EOnQf7Jtitks4HJFO0SUWznTssmP94= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0/go.mod h1:jGzdNfO0XTtfLjXCL/uCC1livg1LlfR+ix2WE/z3RpQ= +go.opentelemetry.io/collector/pdata/testdata v0.115.0 h1:Rblz+AKXdo3fG626jS+KSd0OSA4uMXcTQfpwed6P8LI= +go.opentelemetry.io/collector/pdata/testdata v0.115.0/go.mod h1:inNnRt6S2Nn260EfCBEcjesjlKOSsr0jPwkPqpBkt4s= +go.opentelemetry.io/collector/pipeline v0.115.0 h1:bmACBqb0e8U9ag+vGGHUP7kCfAO7HHROdtzIEg8ulus= +go.opentelemetry.io/collector/pipeline v0.115.0/go.mod h1:qE3DmoB05AW0C3lmPvdxZqd/H4po84NPzd5MrqgtL74= +go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.115.0 h1:3l9ruCAOrssTUDnyChKNzHWOdTtfThnYaoPZ1/+5sD0= +go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.115.0/go.mod h1:2Myg+law/5lcezo9PhhZ0wjCaLYdGK24s1jDWbSW9VY= +go.opentelemetry.io/collector/processor v0.115.0 h1:+fveHGRe24PZPv/F5taahGuZ9HdNW44hgNWEJhIUdyc= +go.opentelemetry.io/collector/processor v0.115.0/go.mod h1:/oLHBlLsm7tFb7zOIrA5C0j14yBtjXKAgxJJ2Bktyk4= +go.opentelemetry.io/collector/processor/batchprocessor v0.115.0 h1:dgw1jcE/YVFTs41b3Y7SerU3BBSyMEE93AYV+BAxR8E= +go.opentelemetry.io/collector/processor/batchprocessor v0.115.0/go.mod h1:imG1kDEq14UGlxyCjSCf1TUEFdSWRvF7tLoYX9nixEQ= +go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.115.0 h1:LCA2jwxy1PRc7X/AtRJfMdOANh5rVLdwo5PAM+gAuyo= +go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.115.0/go.mod h1:gPcHyza7Rek3jfrQFxw99fcWBDkkRqBaMHcUz9yYv5I= +go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.115.0 h1:r1UF8LPICTRXBL0685zV/CC8J4sWg/qm1g+sHOYMq2Y= +go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.115.0/go.mod h1:3erq5umu5a7DKXo4PBm4I5yJjc6r0aJNvBV2nVSPDuE= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0 h1:cCZAs+FXaebZPppqAN3m+X3etoSBL6NvyQo8l0hOZoo= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0/go.mod h1:kMxF0gknlWX4duuAJFi2/HuIRi6C3w95tOenRa0GKOY= +go.opentelemetry.io/collector/processor/processortest v0.115.0 h1:j9HEaYFOeOB6VYl9zGhBnhQbTkqGBa2udUvu5NTh6hc= +go.opentelemetry.io/collector/processor/processortest v0.115.0/go.mod h1:Gws+VEnp/eW3qAqPpqbKsrbnnxxNfyDjqrfUXbZfZic= +go.opentelemetry.io/collector/receiver v0.115.0 h1:55Q3Jvj6zHCIA1psKqi/3kEMJO4OqUF5tNAEYNdB1U8= +go.opentelemetry.io/collector/receiver v0.115.0/go.mod h1:nBSCh2O/WUcfgpJ+Jpz+B0z0Hn5jHeRvF2WmLij5EIY= +go.opentelemetry.io/collector/receiver/nopreceiver v0.115.0 h1:87dxAcHekbXqLtjcQjnK1An2PWkWAhTly+EXzPEgYOE= +go.opentelemetry.io/collector/receiver/nopreceiver v0.115.0/go.mod h1:Llu88KNSNwvmYPRr2PMDDbVY9zHfHEbPPB4yTjjQQe0= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.115.0 h1:NqMWsGuVy6y6VKTaPeJS7NZ9KAxhE/xyGUC7GaLYm/o= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.115.0/go.mod h1:9ituzngnjsh/YvO+Phayq9BTk/nw0rgK5ZVvX1oxULk= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0 h1:R9JLaj2Al93smIPUkbJshAkb/cY0H5JBOxIx+Zu0NG4= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0/go.mod h1:05E5hGujWeeXJmzKZwTdHyZ/+rRyrQlQB5p5Q2XY39M= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0 h1:OiB684SbHQi6/Pd3ZH0cXjYvCpBS9ilQBfTQx0wVXHg= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0/go.mod h1:Y8Z9U/bz9Xpyt8GI8DxZZgryw3mnnIw+AeKVLTD2cP8= +go.opentelemetry.io/collector/scraper v0.115.0 h1:hbfebO7x1Xm96OwqeuLz5w7QAaB3ZMlwOkUo0XzPadc= +go.opentelemetry.io/collector/scraper v0.115.0/go.mod h1:7YoCO6/4PeExLiX1FokcydJGCQUa7lUqZsqXokJ5VZ4= +go.opentelemetry.io/collector/semconv v0.115.0 h1:SoqMvg4ZEB3mz2EdAb6XYa+TuMo5Mir5FRBr3nVFUDY= +go.opentelemetry.io/collector/semconv v0.115.0/go.mod h1:N6XE8Q0JKgBN2fAhkUQtqK9LT7rEGR6+Wu/Rtbal1iI= +go.opentelemetry.io/collector/service v0.115.0 h1:k4GAOiI5tZgB2QKgwA6c3TeAVr7QL/ft5cOQbzUr8Iw= +go.opentelemetry.io/collector/service v0.115.0/go.mod h1:DKde9LMhNebdREecDSsqiTFLI2wRc+IoV4/wGxU6goY= go.opentelemetry.io/contrib/bridges/otelzap v0.6.0 h1:j8icMXyyqNf6HGuwlYhniPnVsbJIq7n+WirDu3VAJdQ= go.opentelemetry.io/contrib/bridges/otelzap v0.6.0/go.mod h1:evIOZpl+kAlU5IsaYX2Siw+IbpacAZvXemVsgt70uvw= go.opentelemetry.io/contrib/config v0.10.0 h1:2JknAzMaYjxrHkTnZh3eOme/Y2P5eHE2SWfhfV6Xd6c= @@ -2662,13 +2666,13 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.5.1 h1:4bH5o3b5ZULQ4UrBmP+63W9r7qIkqJClEA9ko5YKx+I= honnef.co/go/tools v0.5.1/go.mod h1:e9irvo83WDG9/irijV44wr3tbhcFeRnfpVlRqVwpzMs= k8s.io/api v0.21.1/go.mod h1:FstGROTmsSHBarKc8bylzXih8BLNYTiS3TZcsoEDg2s= -k8s.io/api v0.31.2 h1:3wLBbL5Uom/8Zy98GRPXpJ254nEFpl+hwndmk9RwmL0= -k8s.io/api v0.31.2/go.mod h1:bWmGvrGPssSK1ljmLzd3pwCQ9MgoTsRCuK35u6SygUk= +k8s.io/api v0.31.3 h1:umzm5o8lFbdN/hIXbrK9oRpOproJO62CV1zqxXrLgk8= +k8s.io/api v0.31.3/go.mod h1:UJrkIp9pnMOI9K2nlL6vwpxRzzEX5sWgn8kGQe92kCE= k8s.io/apiextensions-apiserver v0.31.2 h1:W8EwUb8+WXBLu56ser5IudT2cOho0gAKeTOnywBLxd0= k8s.io/apiextensions-apiserver v0.31.2/go.mod h1:i+Geh+nGCJEGiCGR3MlBDkS7koHIIKWVfWeRFiOsUcM= k8s.io/apimachinery v0.21.1/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY= -k8s.io/apimachinery v0.31.2 h1:i4vUt2hPK56W6mlT7Ry+AO8eEsyxMD1U44NR22CLTYw= -k8s.io/apimachinery v0.31.2/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/apimachinery v0.31.3 h1:6l0WhcYgasZ/wk9ktLq5vLaoXJJr5ts6lkaQzgeYPq4= +k8s.io/apimachinery v0.31.3/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= k8s.io/apiserver v0.31.2 h1:VUzOEUGRCDi6kX1OyQ801m4A7AUPglpsmGvdsekmcI4= k8s.io/apiserver v0.31.2/go.mod h1:o3nKZR7lPlJqkU5I3Ove+Zx3JuoFjQobGX1Gctw6XuE= k8s.io/autoscaler/vertical-pod-autoscaler v0.13.0 h1:pH6AsxeBZcyX6KBqcnl7SPIJqbN1d59RrEBuIE6Rq6c= @@ -2676,8 +2680,8 @@ k8s.io/autoscaler/vertical-pod-autoscaler v0.13.0/go.mod h1:LraL5kR2xX7jb4VMCG6/ k8s.io/cli-runtime v0.31.2 h1:7FQt4C4Xnqx8V1GJqymInK0FFsoC+fAZtbLqgXYVOLQ= k8s.io/cli-runtime v0.31.2/go.mod h1:XROyicf+G7rQ6FQJMbeDV9jqxzkWXTYD6Uxd15noe0Q= k8s.io/client-go v0.21.1/go.mod h1:/kEw4RgW+3xnBGzvp9IWxKSNA+lXn3A7AuH3gdOAzLs= -k8s.io/client-go v0.31.2 h1:Y2F4dxU5d3AQj+ybwSMqQnpZH9F30//1ObxOKlTI9yc= -k8s.io/client-go v0.31.2/go.mod h1:NPa74jSVR/+eez2dFsEIHNa+3o09vtNaWwWwb1qSxSs= +k8s.io/client-go v0.31.3 h1:CAlZuM+PH2cm+86LOBemaJI/lQ5linJ6UFxKX/SoG+4= +k8s.io/client-go v0.31.3/go.mod h1:2CgjPUTpv3fE5dNygAr2NcM8nhHzXvxB8KL5gYc3kJs= k8s.io/code-generator v0.21.1/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q= k8s.io/component-base v0.31.2 h1:Z1J1LIaC0AV+nzcPRFqfK09af6bZ4D1nAOpWsy9owlA= k8s.io/component-base v0.31.2/go.mod h1:9PeyyFN/drHjtJZMCTkSpQJS3U9OXORnHQqMLDz0sUQ= diff --git a/pkg/trace/go.mod b/pkg/trace/go.mod index bd0db6ed04e59..d4cf8c46e2454 100644 --- a/pkg/trace/go.mod +++ b/pkg/trace/go.mod @@ -31,16 +31,16 @@ require ( github.com/google/go-cmp v0.6.0 github.com/google/gofuzz v1.2.0 github.com/google/uuid v1.6.0 - github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0 + github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0 github.com/shirou/gopsutil/v3 v3.24.4 github.com/stretchr/testify v1.10.0 github.com/tinylib/msgp v1.2.4 github.com/vmihailenco/msgpack/v4 v4.3.13 - go.opentelemetry.io/collector/component v0.114.0 // indirect - go.opentelemetry.io/collector/consumer v0.114.0 - go.opentelemetry.io/collector/pdata v1.20.0 - go.opentelemetry.io/collector/processor/processortest v0.114.0 - go.opentelemetry.io/collector/semconv v0.114.0 + go.opentelemetry.io/collector/component v0.115.0 // indirect + go.opentelemetry.io/collector/consumer v1.21.0 + go.opentelemetry.io/collector/pdata v1.21.0 + go.opentelemetry.io/collector/processor/processortest v0.115.0 + go.opentelemetry.io/collector/semconv v0.115.0 go.opentelemetry.io/otel v1.32.0 go.opentelemetry.io/otel/metric v1.32.0 go.uber.org/atomic v1.11.0 @@ -52,9 +52,9 @@ require ( k8s.io/apimachinery v0.31.2 ) -require go.opentelemetry.io/collector/component/componenttest v0.114.0 +require go.opentelemetry.io/collector/component/componenttest v0.115.0 -require go.opentelemetry.io/collector/processor v0.114.0 // indirect +require go.opentelemetry.io/collector/processor v0.115.0 // indirect require ( github.com/DataDog/go-sqllexer v0.0.17 // indirect @@ -76,7 +76,7 @@ require ( github.com/moby/sys/userns v0.1.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0 // indirect github.com/opencontainers/runtime-spec v1.2.0 // indirect github.com/outcaste-io/ristretto v0.2.3 // indirect github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect @@ -90,14 +90,14 @@ require ( github.com/tklauser/numcpus v0.8.0 // indirect github.com/vmihailenco/tagparser v0.1.2 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - go.opentelemetry.io/collector/component/componentstatus v0.114.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 // indirect - go.opentelemetry.io/collector/consumer/consumertest v0.114.0 // indirect - go.opentelemetry.io/collector/pdata/pprofile v0.114.0 // indirect - go.opentelemetry.io/collector/pdata/testdata v0.114.0 // indirect - go.opentelemetry.io/collector/pipeline v0.114.0 // indirect - go.opentelemetry.io/collector/processor/processorprofiles v0.114.0 // indirect + go.opentelemetry.io/collector/component/componentstatus v0.115.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 // indirect + go.opentelemetry.io/collector/consumer/consumertest v0.115.0 // indirect + go.opentelemetry.io/collector/pdata/pprofile v0.115.0 // indirect + go.opentelemetry.io/collector/pdata/testdata v0.115.0 // indirect + go.opentelemetry.io/collector/pipeline v0.115.0 // indirect + go.opentelemetry.io/collector/processor/processorprofiles v0.115.0 // indirect go.opentelemetry.io/otel/sdk v1.32.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect go.opentelemetry.io/otel/trace v1.32.0 // indirect diff --git a/pkg/trace/go.sum b/pkg/trace/go.sum index 57f7c4a1dd4a4..91f1b0b48ab3d 100644 --- a/pkg/trace/go.sum +++ b/pkg/trace/go.sum @@ -117,12 +117,12 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.114.0 h1:d2wCLlENxH4I2axQWaogivx/5ZIjDYgn9MIf6sFxlJ4= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.114.0/go.mod h1:Psyligv8GKL9WI3TraW3BLwkOX4TRxaaa1BBQQyICzA= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0 h1:mtSN/07RGQPi1/zHVSZg4G0qRtOoJpPew5jsQWv9uS0= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0/go.mod h1:C9Zgh/N3j4NR2D+1FGAA1YizhFW9OS51DwLUFJTdXN4= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0 h1:I4ZYVRYW3Cjb65sPENZ9kHam/JUMXNEp2n/knJ0C0Vc= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0/go.mod h1:4BhyIaOn2LS48WS+ZNix4TpP0+goq9gDEtGzth5Cr3M= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.115.0 h1:a36EJz/mb83f6ieX0v4fNDJ1jXqpeaM6DVQXeFDvdhw= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.115.0/go.mod h1:r5/40YO1eSP5ZreOmRzVOUtDr7YG39ZIUcVjHd+9Izc= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0 h1:R9MRrO+dSkAHBQLZjuwjv2RHXHQqF2Wtm1Ki0VKD5cs= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0/go.mod h1:rKXLXmwdUVcUHwTilroKSejbg3KSwLeYzNPSpkIEnv4= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0 h1:vwZQ7k8oqlK0bdZYTsjP/59zjQQfjSD4fNsWIWsTu2w= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0/go.mod h1:5ObSa9amrbzbYTdAK1Qhv3D/YqCxxnQhP0sk2eWB7Oo= github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/outcaste-io/ristretto v0.2.3 h1:AK4zt/fJ76kjlYObOeNwh4T3asEuaCmp26pOvUOL9w0= @@ -151,8 +151,8 @@ github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbm github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= github.com/shirou/gopsutil/v3 v3.24.4 h1:dEHgzZXt4LMNm+oYELpzl9YCqV65Yr/6SfrvgRBtXeU= github.com/shirou/gopsutil/v3 v3.24.4/go.mod h1:lTd2mdiOspcqLgAnr9/nGi71NkeMpWKdmhuxm9GusH8= -github.com/shirou/gopsutil/v4 v4.24.10 h1:7VOzPtfw/5YDU+jLEoBwXwxJbQetULywoSV4RYY7HkM= -github.com/shirou/gopsutil/v4 v4.24.10/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= @@ -197,84 +197,84 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.opentelemetry.io/collector/component v0.114.0 h1:SVGbm5LvHGSTEDv7p92oPuBgK5tuiWR82I9+LL4TtBE= -go.opentelemetry.io/collector/component v0.114.0/go.mod h1:MLxtjZ6UVHjDxSdhGLuJfHBHvfl1iT/Y7IaQPD24Eww= -go.opentelemetry.io/collector/component/componentstatus v0.114.0 h1:y9my/xink8KB5lK8zFAjgB2+pEh0QYy5TM972fxZY9w= -go.opentelemetry.io/collector/component/componentstatus v0.114.0/go.mod h1:RIoeCYZpPaae7QLE/1RacqzhHuXBmzRAk9H/EwYtIIs= -go.opentelemetry.io/collector/component/componenttest v0.114.0 h1:GM4FTTlfeXoVm6sZYBHImwlRN8ayh2oAfUhvaFj7Zo8= -go.opentelemetry.io/collector/component/componenttest v0.114.0/go.mod h1:ZZEJMtbJtoVC/3/9R1HzERq+cYQRxuMFQrPCpfZ4Xos= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0 h1:kjLeyrumge6wsX6ZIkicdNOlBXaEyW2PI2ZdVXz/rzY= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0/go.mod h1:R0MBUxjSMVMIhljuDHWIygzzJWQyZHXXWIgQNxcFwhc= -go.opentelemetry.io/collector/confmap v1.20.0 h1:ARfOwmkKxFOud1njl03yAHQ30+uenlzqCO6LBYamDTE= -go.opentelemetry.io/collector/confmap v1.20.0/go.mod h1:DMpd9Ay/ffls3JoQBQ73vWeRsz1rNuLbwjo6WtjSQus= -go.opentelemetry.io/collector/confmap/provider/envprovider v1.20.0 h1:I3xDecFXJVZBo5zJS7Y5SWBjF22XDWGZJgwotiwA5QM= -go.opentelemetry.io/collector/confmap/provider/envprovider v1.20.0/go.mod h1:CF0l8V8MNv+Wag8UkqObotFnlhMzdTFuk4/6kylKwYU= -go.opentelemetry.io/collector/confmap/provider/fileprovider v1.20.0 h1:wWxvQ7wj+1O9yDGM5m1HPEz8FJewAHAUWadAAi0KVbM= -go.opentelemetry.io/collector/confmap/provider/fileprovider v1.20.0/go.mod h1:/5HWIPjGYk8IUurs1CZUSjGaSsaQyJsfR8+Zs5rGJ6Y= -go.opentelemetry.io/collector/confmap/provider/httpprovider v1.20.0 h1:YS1nB8vDoCS8IlfX5OP3QGS90y/hfflwZ7CoPQcAOlU= -go.opentelemetry.io/collector/confmap/provider/httpprovider v1.20.0/go.mod h1:aV4UfkgcJ3eyXvfd3m694omN++1c96Joitab+YL6Xks= -go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.20.0 h1:jSXTojCPI6Xr98m99nF7qbQFnw3INLEOHRcqcHS+lak= -go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.20.0/go.mod h1:Pu95O2JE3R+0BBTbe4gpAC8ms3w6FbICHJw3WvGWrjs= -go.opentelemetry.io/collector/connector v0.114.0 h1:efGAeTCtg8zp5Hyd7Am8kBUgsSxWEFlFtAu4OX4mcEA= -go.opentelemetry.io/collector/connector v0.114.0/go.mod h1:8DhGgD8RhkF0ooELl4NOPPD/wgHuXHmY7g90RwJ2eNo= -go.opentelemetry.io/collector/connector/connectorprofiles v0.114.0 h1:uVs9gy3UfQBmH0636ouIbGIoWis7zmKN+ny4XOGm36U= -go.opentelemetry.io/collector/connector/connectorprofiles v0.114.0/go.mod h1:X681qFEAsEPMDQ0pMsD/3DqePw58sfLew1QbBKvGnmw= -go.opentelemetry.io/collector/connector/connectortest v0.114.0 h1:Fpy1JHyNOLdVzNcmxUY6Jwxdz6JDcTXL1NCfw8k1AOc= -go.opentelemetry.io/collector/connector/connectortest v0.114.0/go.mod h1:1zaAlODuL9iNyfyjHQeGCpbcaUjf5b68t8LqlwHKBNA= -go.opentelemetry.io/collector/consumer v0.114.0 h1:1zVaHvfIZowGwZRitRBRo3i+RP2StlU+GClYiofSw0Q= -go.opentelemetry.io/collector/consumer v0.114.0/go.mod h1:d+Mrzt9hsH1ub3zmwSlnQVPLeTYir4Mgo7CrWfnncN4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0 h1:r2YiELfWerb40FHD23V04gNjIkLUcjEKGxI4Vtm2iO4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0/go.mod h1:MzIrLQ5jptO2egypolhlAbZsWZr29WC4FhSxQjnxcvg= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 h1:5pXYy3E6UK5Huu3aQbsYL8B6E6MyWx4fvXXDn+oXZaA= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0/go.mod h1:PMq3f54KcJQO4v1tue0QxQScu7REFVADlXxXSAYMiN0= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0 h1:isaTwJK5DOy8Bs7GuLq23ejfgj8gLIo5dOUvkRnLF4g= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0/go.mod h1:GNeLPkfRPdh06n/Rv1UKa/cAtCKjN0a7ADyHjIj4HFE= -go.opentelemetry.io/collector/exporter v0.114.0 h1:5/0BBpXuCJQSQ5SQf31g7j6T4XEKkyx9mZMcA2rS5e8= -go.opentelemetry.io/collector/exporter v0.114.0/go.mod h1:atpd0wWXgh5LAZ0REU/d/Ti/q50HDfnlBIjMjJQlKFg= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0 h1:/wmWOSBHcvtz3Pbv7+rWCqPPQuNvYaoidKKaOqZsLKs= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0/go.mod h1:epRYTkyJZTSQZBJflMGHUyUo2EdLPhsaZEyo5Qm848A= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0 h1:vo0idBJT+QACSM1KpjVLm9VeiXVwO7y4UnMpGxN6EyM= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0/go.mod h1:420ssFrhaphneybstbMeSIiqSRoaBARPgO71O17foaM= -go.opentelemetry.io/collector/extension v0.114.0 h1:9Qb92y8hD2WDC5aMDoj4JNQN+/5BQYJWPUPzLXX+iGw= -go.opentelemetry.io/collector/extension v0.114.0/go.mod h1:Yk2/1ptVgfTr12t+22v93nYJpioP14pURv2YercSzU0= -go.opentelemetry.io/collector/extension/extensioncapabilities v0.114.0 h1:3OHll7gp5XIu7FVgon+koShPy797nze6EjCDokFUG7w= -go.opentelemetry.io/collector/extension/extensioncapabilities v0.114.0/go.mod h1:f0KdeLmE2jWVBmJ1U4WmfAtz1/tQUErGPfhPLKCQ49U= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0 h1:ibXDms1qrswlvlR6b3d2BeyI8sXUXoFV11yOi9Sop8o= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0/go.mod h1:/bOYmqu5yTDfI1bJZUxFqm8ZtmcodpquebiSxiQxtDY= -go.opentelemetry.io/collector/featuregate v1.20.0 h1:Mi7nMy/q52eruI+6jWnMKUOeM55XvwoPnGcdB1++O8c= -go.opentelemetry.io/collector/featuregate v1.20.0/go.mod h1:47xrISO71vJ83LSMm8+yIDsUbKktUp48Ovt7RR6VbRs= -go.opentelemetry.io/collector/internal/fanoutconsumer v0.114.0 h1:JM9huYqy5LTzmuxQmbPST3l5Ez5kJNit28c6WFWls34= -go.opentelemetry.io/collector/internal/fanoutconsumer v0.114.0/go.mod h1:V28tDU4Wvf1PfW1Ty/SBL9tpKul2iYGno/HkCWGDrj0= -go.opentelemetry.io/collector/otelcol v0.114.0 h1:d/nmYc+adzZ70g4zBMtgujGHVNulF59ExCpuM/3ZKV4= -go.opentelemetry.io/collector/otelcol v0.114.0/go.mod h1:DGmFFao5jHSwD6G1HjUjs0CYcyrTau+u7GjTRUGKN+4= -go.opentelemetry.io/collector/otelcol/otelcoltest v0.114.0 h1:Em5e1EgrPrS90EWDWLJHCvyFIDl5PIq1DuW9zd8F3pY= -go.opentelemetry.io/collector/otelcol/otelcoltest v0.114.0/go.mod h1:YAs78SaOJsf1HNWrNH+GFTdkS58dpQI98cok6gZP4Lg= -go.opentelemetry.io/collector/pdata v1.20.0 h1:ePcwt4bdtISP0loHaE+C9xYoU2ZkIvWv89Fob16o9SM= -go.opentelemetry.io/collector/pdata v1.20.0/go.mod h1:Ox1YVLe87cZDB/TL30i4SUz1cA5s6AM6SpFMfY61ICs= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0 h1:pUNfTzsI/JUTiE+DScDM4lsrPoxnVNLI2fbTxR/oapo= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0/go.mod h1:4aNcj6WM1n1uXyFSXlhVs4ibrERgNYsTbzcYI2zGhxA= -go.opentelemetry.io/collector/pdata/testdata v0.114.0 h1:+AzszWSL1i4K6meQ8rU0JDDW55SYCXa6FVqfDixhhTo= -go.opentelemetry.io/collector/pdata/testdata v0.114.0/go.mod h1:bv8XFdCTZxG2MQB5l9dKxSxf5zBrcodwO6JOy1+AxXM= -go.opentelemetry.io/collector/pipeline v0.114.0 h1:v3YOhc5z0tD6QbO5n/pnftpIeroihM2ks9Z2yKPCcwY= -go.opentelemetry.io/collector/pipeline v0.114.0/go.mod h1:4vOvjVsoYTHVGTbfFwqfnQOSV2K3RKUHofh3jNRc2Mg= -go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.114.0 h1:LZgxMQ2zXcz8ILBefhxpZBpn/Rx+TJTncIIQy0LgtgY= -go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.114.0/go.mod h1:bmyqQCJWcA53/GtqZJ2ahwmLdFl6UelFH2nR6OJFqpw= -go.opentelemetry.io/collector/processor v0.114.0 h1:6bqQgLL7BtKrNv4YkEOGjZfkcfZv/ciJSQx1epGG9Zk= -go.opentelemetry.io/collector/processor v0.114.0/go.mod h1:DV/wa+nAmSHIDeD9NblPwkY9PbgtDQAZJ+PE5biZwPc= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0 h1:+P/1nLouEXTnN8DVQl+qWwO4BTkQyNPG9t/FrpUqrSI= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0/go.mod h1:3fuHeNIpINwx3bqFMprmDJyr6y5tWoWbJH599kltO5Y= -go.opentelemetry.io/collector/processor/processortest v0.114.0 h1:3FTaVXAp0LoVmUJn1ewBFckAby7AHa6/Kcdj0xuW14c= -go.opentelemetry.io/collector/processor/processortest v0.114.0/go.mod h1:OgsdOs1Fv5ZGTTJPF5nNIUJh2YkuV1acWd73yWgnti4= -go.opentelemetry.io/collector/receiver v0.114.0 h1:90SAnXAjNq7/k52/pFmmb06Cf1YauoPYtbio4aOXafY= -go.opentelemetry.io/collector/receiver v0.114.0/go.mod h1:KUGT0/D953LXbGH/D3lLPU8yrU3HfWnUqpt4W4hSOnE= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0 h1:ibhEfGpvNB3yrtpl2jYFabrunMk1hurxvMYpM0b1Ck4= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0/go.mod h1:UZyRfaasw+NLvN10AN8IQnmj5tQ3BOUH1uP2ctpO9f0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0 h1:D+Kh9t2n4asTnM+TiSxbrKlUemLZandWntj17BJWWb0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0/go.mod h1:mNSHQ13vFmqD+VAcRzLjStFBejbcWUn2Mp0pAd7Op+U= -go.opentelemetry.io/collector/semconv v0.114.0 h1:/eKcCJwZepQUtEuFuxa0thx2XIOvhFpaf214ZG1a11k= -go.opentelemetry.io/collector/semconv v0.114.0/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= -go.opentelemetry.io/collector/service v0.114.0 h1:MYF/4nH1CgtiLx09503xPAAUZefCzG1kaO+oanwX590= -go.opentelemetry.io/collector/service v0.114.0/go.mod h1:xH5/RapJdf5Ohh8iU8J0ZstfFYciP1oJPesiByteZxo= +go.opentelemetry.io/collector/component v0.115.0 h1:iLte1oCiXzjiCnaOBKdsXacfFiECecpWxW3/LeriMoo= +go.opentelemetry.io/collector/component v0.115.0/go.mod h1:oIUFiH7w1eOimdeYhFI+gAIxYSiLDocKVJ0PTvX7d6s= +go.opentelemetry.io/collector/component/componentstatus v0.115.0 h1:pbpUIL+uKDfEiSgKK+S5nuSL6MDIIQYsp4b65ZGVb9M= +go.opentelemetry.io/collector/component/componentstatus v0.115.0/go.mod h1:36A+9XSiOz0Cdhq+UwwPRlEr5CYuSkEnVO9om4BH7d0= +go.opentelemetry.io/collector/component/componenttest v0.115.0 h1:9URDJ9VyP6tuij+YHjp/kSSMecnZOd7oGvzu+rw9SJY= +go.opentelemetry.io/collector/component/componenttest v0.115.0/go.mod h1:PzXvNqKLCiSADZGZFKH+IOHMkaQ0GTHuzysfVbTPKYY= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0 h1:U07FinCDop+r2RjWQ3aP9ZWONC7r7kQIp1GkXQi6nsI= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0/go.mod h1:SlBEwQg0qly75rXZ6W1Ig8jN25KBVBkFIIAUI1GiAAE= +go.opentelemetry.io/collector/confmap v1.21.0 h1:1tIcx2/Suwg8VhuPmQw87ba0ludPmumpFCFRZZa6RXA= +go.opentelemetry.io/collector/confmap v1.21.0/go.mod h1:Rrhs+MWoaP6AswZp+ReQ2VO9dfOfcUjdjiSHBsG+nec= +go.opentelemetry.io/collector/confmap/provider/envprovider v1.21.0 h1:YLf++Z8CMp86AanfOCWUiE7vKbb1kSjgC3a9VJoxbD4= +go.opentelemetry.io/collector/confmap/provider/envprovider v1.21.0/go.mod h1:aSWLYcmgZZJDNtWN1M8JKQuehoGgOxibl1KuvKTar4M= +go.opentelemetry.io/collector/confmap/provider/fileprovider v1.21.0 h1:+zukkM+3l426iGoJkXTpLB2Z8QnZFu26TkGPjh5Rn/4= +go.opentelemetry.io/collector/confmap/provider/fileprovider v1.21.0/go.mod h1:BXBpQhF3n4CNLYO2n/mWZPd2U9ekpbLXLRGZrun1VfI= +go.opentelemetry.io/collector/confmap/provider/httpprovider v1.21.0 h1:NYYGM+SgIlTuNGjd8eGzDr8DkvOe4q7cXon8djF9yyI= +go.opentelemetry.io/collector/confmap/provider/httpprovider v1.21.0/go.mod h1:XRYbuwqq1awFuNhLDUv4aSvn6MzqX+abcevx1O+APJI= +go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.21.0 h1:P3Q9RytCMY76ORPCnkkjOa4fkuFqmZiQRor+F/nPlYE= +go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.21.0/go.mod h1:xhYhHK3yLQ78tsoaKPIGUfFulgy961ImOe2gATH3RQc= +go.opentelemetry.io/collector/connector v0.115.0 h1:4Kkm3HQFzNT1eliMOB8FbIn+PLMRJ2qQku5Vmy3V8Ko= +go.opentelemetry.io/collector/connector v0.115.0/go.mod h1:+ByuAmYLrYHoKh9B+LGqUc0N2kXcN2l8Dea8Mp6brZ8= +go.opentelemetry.io/collector/connector/connectorprofiles v0.115.0 h1:aW1f4Az0I+QJyImFccNWAXqik80bnNu27aQqi2hFfD8= +go.opentelemetry.io/collector/connector/connectorprofiles v0.115.0/go.mod h1:lmynB1CucydOsHa8RSSBh5roUZPfuiv65imXhtNzClM= +go.opentelemetry.io/collector/connector/connectortest v0.115.0 h1:GjtourFr0MJmlbtEPAZ/1BZCxkNAeJ0aMTlrxwftJ0k= +go.opentelemetry.io/collector/connector/connectortest v0.115.0/go.mod h1:f3KQXXNlh/XuV8elmnuVVyfY92dJCAovz10gD72OH0k= +go.opentelemetry.io/collector/consumer v1.21.0 h1:THKZ2Vbi6GkamjTBI2hFq5Dc4kINZTWGwQNa8d/Ty9g= +go.opentelemetry.io/collector/consumer v1.21.0/go.mod h1:FQcC4ThMtRYY41dv+IPNK8POLLhAFY3r1YR5fuP7iiY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0 h1:yli//xBCQMPZKXNgNlXemo4dvqhnFrAmCZ11DvQgmcY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0/go.mod h1:LwVzAvQ6ZVNG7mbOvurbAo+W/rKws0IcjOwriuZXqPE= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 h1:H3fDuyQW1t2HWHkz96WMBQJKUevypOCjBqnqtaAWyoA= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0/go.mod h1:IzEmZ91Tp7TBxVDq8Cc9xvLsmO7H08njr6Pu9P5d9ns= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0 h1:hru0I2447y0TluCdwlKYFFtgcpyCnlM+LiOK1JZyA70= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0/go.mod h1:ybjALRJWR6aKNOzEMy1T1ruCULVDEjj4omtOJMrH/kU= +go.opentelemetry.io/collector/exporter v0.115.0 h1:JnxfpOnsuqhTPKJXVKJLS1Cv3BiVrVLzpHOjJEQw+xw= +go.opentelemetry.io/collector/exporter v0.115.0/go.mod h1:xof3fHQK8wADhaKLIJcQ7ChZaFLNC+haRdPN0wgl6kY= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0 h1:lSQEleCn/q9eFufcuK61NdFKU70ZlgI9dBjPCO/4CrE= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0/go.mod h1:7l5K2AecimX2kx+nZC1gKG3QkP247CO1+SodmJ4fFkQ= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0 h1:P9SMTUXQOtcaq40bGtnnAe14zRmR4/yUgj/Tb2BEf/k= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0/go.mod h1:1jMZ9gFGXglb8wfNrBZIgd+RvpZhSyFwdfE+Jtf9w4U= +go.opentelemetry.io/collector/extension v0.115.0 h1:/cBb8AUdD0KMWC6V3lvCC16eP9Fg0wd1Upcp5rgvuGI= +go.opentelemetry.io/collector/extension v0.115.0/go.mod h1:HI7Ak6loyi6ZrZPsQJW1OO1wbaAW8OqXLFNQlTZnreQ= +go.opentelemetry.io/collector/extension/extensioncapabilities v0.115.0 h1:/g25Hp5aoCNKdDjIb3Fc7XRglO8yaBRFLO/IUNPnqNI= +go.opentelemetry.io/collector/extension/extensioncapabilities v0.115.0/go.mod h1:EQx7ETiy330O6q05S2KRZsRNDg0aQEeJmVl7Ipx+Fcw= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0 h1:GBVFxFEskR8jSdu9uaQh2qpXnN5VNXhXjpJ2UjxtE8I= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0/go.mod h1:eu1ecbz5mT+cHoH2H3GmD/rOO0WsicSJD2RLrYuOmRA= +go.opentelemetry.io/collector/featuregate v1.21.0 h1:+EULHPJDLMipcwAGZVp9Nm8NriRvoBBMxp7MSiIZVMI= +go.opentelemetry.io/collector/featuregate v1.21.0/go.mod h1:3GaXqflNDVwWndNGBJ1+XJFy3Fv/XrFgjMN60N3z7yg= +go.opentelemetry.io/collector/internal/fanoutconsumer v0.115.0 h1:6DRiSECeApFq6Jj5ug77rG53R6FzJEZBfygkyMEXdpg= +go.opentelemetry.io/collector/internal/fanoutconsumer v0.115.0/go.mod h1:vgQf5HQdmLQqpDHpDq2S3nTRoUuKtRcZpRTsy+UiwYw= +go.opentelemetry.io/collector/otelcol v0.115.0 h1:wZhFGrSCZcTQ4qw4ePjI2PaSrOCejoQKAjprKD/xavs= +go.opentelemetry.io/collector/otelcol v0.115.0/go.mod h1:iK8DPvaizirIYKDl1zZG7DDYUj6GkkH4KHifVVM88vk= +go.opentelemetry.io/collector/otelcol/otelcoltest v0.115.0 h1:HNlFpQujlnvawBk8nvMGxzjDHWDCfSprxem/EpQn4u8= +go.opentelemetry.io/collector/otelcol/otelcoltest v0.115.0/go.mod h1:WsMbqYl2rm3nPFbdxQqyLXf4iu97nYLeuQ1seZIpV3Y= +go.opentelemetry.io/collector/pdata v1.21.0 h1:PG+UbiFMJ35X/WcAR7Rf/PWmWtRdW0aHlOidsR6c5MA= +go.opentelemetry.io/collector/pdata v1.21.0/go.mod h1:GKb1/zocKJMvxKbS+sl0W85lxhYBTFJ6h6I1tphVyDU= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0 h1:NI89hy13vNDw7EOnQf7Jtitks4HJFO0SUWznTssmP94= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0/go.mod h1:jGzdNfO0XTtfLjXCL/uCC1livg1LlfR+ix2WE/z3RpQ= +go.opentelemetry.io/collector/pdata/testdata v0.115.0 h1:Rblz+AKXdo3fG626jS+KSd0OSA4uMXcTQfpwed6P8LI= +go.opentelemetry.io/collector/pdata/testdata v0.115.0/go.mod h1:inNnRt6S2Nn260EfCBEcjesjlKOSsr0jPwkPqpBkt4s= +go.opentelemetry.io/collector/pipeline v0.115.0 h1:bmACBqb0e8U9ag+vGGHUP7kCfAO7HHROdtzIEg8ulus= +go.opentelemetry.io/collector/pipeline v0.115.0/go.mod h1:qE3DmoB05AW0C3lmPvdxZqd/H4po84NPzd5MrqgtL74= +go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.115.0 h1:3l9ruCAOrssTUDnyChKNzHWOdTtfThnYaoPZ1/+5sD0= +go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.115.0/go.mod h1:2Myg+law/5lcezo9PhhZ0wjCaLYdGK24s1jDWbSW9VY= +go.opentelemetry.io/collector/processor v0.115.0 h1:+fveHGRe24PZPv/F5taahGuZ9HdNW44hgNWEJhIUdyc= +go.opentelemetry.io/collector/processor v0.115.0/go.mod h1:/oLHBlLsm7tFb7zOIrA5C0j14yBtjXKAgxJJ2Bktyk4= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0 h1:cCZAs+FXaebZPppqAN3m+X3etoSBL6NvyQo8l0hOZoo= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0/go.mod h1:kMxF0gknlWX4duuAJFi2/HuIRi6C3w95tOenRa0GKOY= +go.opentelemetry.io/collector/processor/processortest v0.115.0 h1:j9HEaYFOeOB6VYl9zGhBnhQbTkqGBa2udUvu5NTh6hc= +go.opentelemetry.io/collector/processor/processortest v0.115.0/go.mod h1:Gws+VEnp/eW3qAqPpqbKsrbnnxxNfyDjqrfUXbZfZic= +go.opentelemetry.io/collector/receiver v0.115.0 h1:55Q3Jvj6zHCIA1psKqi/3kEMJO4OqUF5tNAEYNdB1U8= +go.opentelemetry.io/collector/receiver v0.115.0/go.mod h1:nBSCh2O/WUcfgpJ+Jpz+B0z0Hn5jHeRvF2WmLij5EIY= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0 h1:R9JLaj2Al93smIPUkbJshAkb/cY0H5JBOxIx+Zu0NG4= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0/go.mod h1:05E5hGujWeeXJmzKZwTdHyZ/+rRyrQlQB5p5Q2XY39M= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0 h1:OiB684SbHQi6/Pd3ZH0cXjYvCpBS9ilQBfTQx0wVXHg= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0/go.mod h1:Y8Z9U/bz9Xpyt8GI8DxZZgryw3mnnIw+AeKVLTD2cP8= +go.opentelemetry.io/collector/semconv v0.115.0 h1:SoqMvg4ZEB3mz2EdAb6XYa+TuMo5Mir5FRBr3nVFUDY= +go.opentelemetry.io/collector/semconv v0.115.0/go.mod h1:N6XE8Q0JKgBN2fAhkUQtqK9LT7rEGR6+Wu/Rtbal1iI= +go.opentelemetry.io/collector/service v0.115.0 h1:k4GAOiI5tZgB2QKgwA6c3TeAVr7QL/ft5cOQbzUr8Iw= +go.opentelemetry.io/collector/service v0.115.0/go.mod h1:DKde9LMhNebdREecDSsqiTFLI2wRc+IoV4/wGxU6goY= go.opentelemetry.io/contrib/bridges/otelzap v0.6.0 h1:j8icMXyyqNf6HGuwlYhniPnVsbJIq7n+WirDu3VAJdQ= go.opentelemetry.io/contrib/bridges/otelzap v0.6.0/go.mod h1:evIOZpl+kAlU5IsaYX2Siw+IbpacAZvXemVsgt70uvw= go.opentelemetry.io/contrib/config v0.10.0 h1:2JknAzMaYjxrHkTnZh3eOme/Y2P5eHE2SWfhfV6Xd6c= diff --git a/pkg/trace/stats/oteltest/go.mod b/pkg/trace/stats/oteltest/go.mod index aabc79c264479..8314f54acb5ca 100644 --- a/pkg/trace/stats/oteltest/go.mod +++ b/pkg/trace/stats/oteltest/go.mod @@ -10,14 +10,14 @@ require ( github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 github.com/google/go-cmp v0.6.0 github.com/stretchr/testify v1.10.0 - go.opentelemetry.io/collector/component/componenttest v0.114.0 - go.opentelemetry.io/collector/pdata v1.20.0 - go.opentelemetry.io/collector/semconv v0.114.0 + go.opentelemetry.io/collector/component/componenttest v0.115.0 + go.opentelemetry.io/collector/pdata v1.21.0 + go.opentelemetry.io/collector/semconv v0.115.0 go.opentelemetry.io/otel/metric v1.32.0 google.golang.org/protobuf v1.35.2 ) -require go.opentelemetry.io/collector/component v0.114.0 // indirect +require go.opentelemetry.io/collector/component v0.115.0 // indirect require ( github.com/DataDog/datadog-agent/comp/trace/compression/def v0.56.0-rc.3 // indirect @@ -66,7 +66,7 @@ require ( github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.114.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.115.0 // indirect go.opentelemetry.io/otel v1.32.0 // indirect go.opentelemetry.io/otel/sdk v1.32.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect diff --git a/pkg/trace/stats/oteltest/go.sum b/pkg/trace/stats/oteltest/go.sum index 3c983553c9350..259d4a5ef2d1b 100644 --- a/pkg/trace/stats/oteltest/go.sum +++ b/pkg/trace/stats/oteltest/go.sum @@ -78,10 +78,10 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0 h1:mtSN/07RGQPi1/zHVSZg4G0qRtOoJpPew5jsQWv9uS0= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0/go.mod h1:C9Zgh/N3j4NR2D+1FGAA1YizhFW9OS51DwLUFJTdXN4= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0 h1:I4ZYVRYW3Cjb65sPENZ9kHam/JUMXNEp2n/knJ0C0Vc= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0/go.mod h1:4BhyIaOn2LS48WS+ZNix4TpP0+goq9gDEtGzth5Cr3M= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0 h1:R9MRrO+dSkAHBQLZjuwjv2RHXHQqF2Wtm1Ki0VKD5cs= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0/go.mod h1:rKXLXmwdUVcUHwTilroKSejbg3KSwLeYzNPSpkIEnv4= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0 h1:vwZQ7k8oqlK0bdZYTsjP/59zjQQfjSD4fNsWIWsTu2w= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0/go.mod h1:5ObSa9amrbzbYTdAK1Qhv3D/YqCxxnQhP0sk2eWB7Oo= github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/outcaste-io/ristretto v0.2.3 h1:AK4zt/fJ76kjlYObOeNwh4T3asEuaCmp26pOvUOL9w0= @@ -134,36 +134,36 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.opentelemetry.io/collector/component v0.114.0 h1:SVGbm5LvHGSTEDv7p92oPuBgK5tuiWR82I9+LL4TtBE= -go.opentelemetry.io/collector/component v0.114.0/go.mod h1:MLxtjZ6UVHjDxSdhGLuJfHBHvfl1iT/Y7IaQPD24Eww= -go.opentelemetry.io/collector/component/componentstatus v0.114.0 h1:y9my/xink8KB5lK8zFAjgB2+pEh0QYy5TM972fxZY9w= -go.opentelemetry.io/collector/component/componentstatus v0.114.0/go.mod h1:RIoeCYZpPaae7QLE/1RacqzhHuXBmzRAk9H/EwYtIIs= -go.opentelemetry.io/collector/component/componenttest v0.114.0 h1:GM4FTTlfeXoVm6sZYBHImwlRN8ayh2oAfUhvaFj7Zo8= -go.opentelemetry.io/collector/component/componenttest v0.114.0/go.mod h1:ZZEJMtbJtoVC/3/9R1HzERq+cYQRxuMFQrPCpfZ4Xos= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0 h1:kjLeyrumge6wsX6ZIkicdNOlBXaEyW2PI2ZdVXz/rzY= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0/go.mod h1:R0MBUxjSMVMIhljuDHWIygzzJWQyZHXXWIgQNxcFwhc= -go.opentelemetry.io/collector/consumer v0.114.0 h1:1zVaHvfIZowGwZRitRBRo3i+RP2StlU+GClYiofSw0Q= -go.opentelemetry.io/collector/consumer v0.114.0/go.mod h1:d+Mrzt9hsH1ub3zmwSlnQVPLeTYir4Mgo7CrWfnncN4= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 h1:5pXYy3E6UK5Huu3aQbsYL8B6E6MyWx4fvXXDn+oXZaA= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0/go.mod h1:PMq3f54KcJQO4v1tue0QxQScu7REFVADlXxXSAYMiN0= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0 h1:isaTwJK5DOy8Bs7GuLq23ejfgj8gLIo5dOUvkRnLF4g= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0/go.mod h1:GNeLPkfRPdh06n/Rv1UKa/cAtCKjN0a7ADyHjIj4HFE= -go.opentelemetry.io/collector/pdata v1.20.0 h1:ePcwt4bdtISP0loHaE+C9xYoU2ZkIvWv89Fob16o9SM= -go.opentelemetry.io/collector/pdata v1.20.0/go.mod h1:Ox1YVLe87cZDB/TL30i4SUz1cA5s6AM6SpFMfY61ICs= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0 h1:pUNfTzsI/JUTiE+DScDM4lsrPoxnVNLI2fbTxR/oapo= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0/go.mod h1:4aNcj6WM1n1uXyFSXlhVs4ibrERgNYsTbzcYI2zGhxA= -go.opentelemetry.io/collector/pdata/testdata v0.114.0 h1:+AzszWSL1i4K6meQ8rU0JDDW55SYCXa6FVqfDixhhTo= -go.opentelemetry.io/collector/pdata/testdata v0.114.0/go.mod h1:bv8XFdCTZxG2MQB5l9dKxSxf5zBrcodwO6JOy1+AxXM= -go.opentelemetry.io/collector/pipeline v0.114.0 h1:v3YOhc5z0tD6QbO5n/pnftpIeroihM2ks9Z2yKPCcwY= -go.opentelemetry.io/collector/pipeline v0.114.0/go.mod h1:4vOvjVsoYTHVGTbfFwqfnQOSV2K3RKUHofh3jNRc2Mg= -go.opentelemetry.io/collector/processor v0.114.0 h1:6bqQgLL7BtKrNv4YkEOGjZfkcfZv/ciJSQx1epGG9Zk= -go.opentelemetry.io/collector/processor v0.114.0/go.mod h1:DV/wa+nAmSHIDeD9NblPwkY9PbgtDQAZJ+PE5biZwPc= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0 h1:+P/1nLouEXTnN8DVQl+qWwO4BTkQyNPG9t/FrpUqrSI= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0/go.mod h1:3fuHeNIpINwx3bqFMprmDJyr6y5tWoWbJH599kltO5Y= -go.opentelemetry.io/collector/processor/processortest v0.114.0 h1:3FTaVXAp0LoVmUJn1ewBFckAby7AHa6/Kcdj0xuW14c= -go.opentelemetry.io/collector/processor/processortest v0.114.0/go.mod h1:OgsdOs1Fv5ZGTTJPF5nNIUJh2YkuV1acWd73yWgnti4= -go.opentelemetry.io/collector/semconv v0.114.0 h1:/eKcCJwZepQUtEuFuxa0thx2XIOvhFpaf214ZG1a11k= -go.opentelemetry.io/collector/semconv v0.114.0/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= +go.opentelemetry.io/collector/component v0.115.0 h1:iLte1oCiXzjiCnaOBKdsXacfFiECecpWxW3/LeriMoo= +go.opentelemetry.io/collector/component v0.115.0/go.mod h1:oIUFiH7w1eOimdeYhFI+gAIxYSiLDocKVJ0PTvX7d6s= +go.opentelemetry.io/collector/component/componentstatus v0.115.0 h1:pbpUIL+uKDfEiSgKK+S5nuSL6MDIIQYsp4b65ZGVb9M= +go.opentelemetry.io/collector/component/componentstatus v0.115.0/go.mod h1:36A+9XSiOz0Cdhq+UwwPRlEr5CYuSkEnVO9om4BH7d0= +go.opentelemetry.io/collector/component/componenttest v0.115.0 h1:9URDJ9VyP6tuij+YHjp/kSSMecnZOd7oGvzu+rw9SJY= +go.opentelemetry.io/collector/component/componenttest v0.115.0/go.mod h1:PzXvNqKLCiSADZGZFKH+IOHMkaQ0GTHuzysfVbTPKYY= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0 h1:U07FinCDop+r2RjWQ3aP9ZWONC7r7kQIp1GkXQi6nsI= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0/go.mod h1:SlBEwQg0qly75rXZ6W1Ig8jN25KBVBkFIIAUI1GiAAE= +go.opentelemetry.io/collector/consumer v1.21.0 h1:THKZ2Vbi6GkamjTBI2hFq5Dc4kINZTWGwQNa8d/Ty9g= +go.opentelemetry.io/collector/consumer v1.21.0/go.mod h1:FQcC4ThMtRYY41dv+IPNK8POLLhAFY3r1YR5fuP7iiY= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 h1:H3fDuyQW1t2HWHkz96WMBQJKUevypOCjBqnqtaAWyoA= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0/go.mod h1:IzEmZ91Tp7TBxVDq8Cc9xvLsmO7H08njr6Pu9P5d9ns= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0 h1:hru0I2447y0TluCdwlKYFFtgcpyCnlM+LiOK1JZyA70= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0/go.mod h1:ybjALRJWR6aKNOzEMy1T1ruCULVDEjj4omtOJMrH/kU= +go.opentelemetry.io/collector/pdata v1.21.0 h1:PG+UbiFMJ35X/WcAR7Rf/PWmWtRdW0aHlOidsR6c5MA= +go.opentelemetry.io/collector/pdata v1.21.0/go.mod h1:GKb1/zocKJMvxKbS+sl0W85lxhYBTFJ6h6I1tphVyDU= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0 h1:NI89hy13vNDw7EOnQf7Jtitks4HJFO0SUWznTssmP94= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0/go.mod h1:jGzdNfO0XTtfLjXCL/uCC1livg1LlfR+ix2WE/z3RpQ= +go.opentelemetry.io/collector/pdata/testdata v0.115.0 h1:Rblz+AKXdo3fG626jS+KSd0OSA4uMXcTQfpwed6P8LI= +go.opentelemetry.io/collector/pdata/testdata v0.115.0/go.mod h1:inNnRt6S2Nn260EfCBEcjesjlKOSsr0jPwkPqpBkt4s= +go.opentelemetry.io/collector/pipeline v0.115.0 h1:bmACBqb0e8U9ag+vGGHUP7kCfAO7HHROdtzIEg8ulus= +go.opentelemetry.io/collector/pipeline v0.115.0/go.mod h1:qE3DmoB05AW0C3lmPvdxZqd/H4po84NPzd5MrqgtL74= +go.opentelemetry.io/collector/processor v0.115.0 h1:+fveHGRe24PZPv/F5taahGuZ9HdNW44hgNWEJhIUdyc= +go.opentelemetry.io/collector/processor v0.115.0/go.mod h1:/oLHBlLsm7tFb7zOIrA5C0j14yBtjXKAgxJJ2Bktyk4= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0 h1:cCZAs+FXaebZPppqAN3m+X3etoSBL6NvyQo8l0hOZoo= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0/go.mod h1:kMxF0gknlWX4duuAJFi2/HuIRi6C3w95tOenRa0GKOY= +go.opentelemetry.io/collector/processor/processortest v0.115.0 h1:j9HEaYFOeOB6VYl9zGhBnhQbTkqGBa2udUvu5NTh6hc= +go.opentelemetry.io/collector/processor/processortest v0.115.0/go.mod h1:Gws+VEnp/eW3qAqPpqbKsrbnnxxNfyDjqrfUXbZfZic= +go.opentelemetry.io/collector/semconv v0.115.0 h1:SoqMvg4ZEB3mz2EdAb6XYa+TuMo5Mir5FRBr3nVFUDY= +go.opentelemetry.io/collector/semconv v0.115.0/go.mod h1:N6XE8Q0JKgBN2fAhkUQtqK9LT7rEGR6+Wu/Rtbal1iI= go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg= go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M= diff --git a/tasks/collector.py b/tasks/collector.py index 93ff65b73edbd..a5da1a784b8d1 100644 --- a/tasks/collector.py +++ b/tasks/collector.py @@ -20,7 +20,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. """ -OCB_VERSION = "0.114.0" +OCB_VERSION = "0.115.0" MANDATORY_COMPONENTS = { "extensions": [ @@ -257,7 +257,7 @@ def generate(ctx): with open(file_path, "w") as f: f.write(content) - + ctx.run(f"gofmt -l -s -w {file_path}") print(f"Updated package name and ensured license header in: {file_path}") diff --git a/tasks/unit_tests/testdata/collector/awscontainerinsightreceiver_manifest.yaml b/tasks/unit_tests/testdata/collector/awscontainerinsightreceiver_manifest.yaml index 874909021b9bd..8bdd044b92298 100644 --- a/tasks/unit_tests/testdata/collector/awscontainerinsightreceiver_manifest.yaml +++ b/tasks/unit_tests/testdata/collector/awscontainerinsightreceiver_manifest.yaml @@ -3,10 +3,10 @@ dist: description: Manifest that contains awscontainerinsight receiver (should fail collector_tests.py) extensions: - - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0 + - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0 receivers: - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscontainerinsightreceiver v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscontainerinsightreceiver v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0 diff --git a/tasks/unit_tests/testdata/collector/datadogconnector_manifest.yaml b/tasks/unit_tests/testdata/collector/datadogconnector_manifest.yaml index 89aaab438f3b2..6789bc23b3fc3 100644 --- a/tasks/unit_tests/testdata/collector/datadogconnector_manifest.yaml +++ b/tasks/unit_tests/testdata/collector/datadogconnector_manifest.yaml @@ -3,12 +3,12 @@ dist: description: Manifest that contains datadog connector (should get stripped and pass collector_tests.py) extensions: - - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0 + - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0 receivers: - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0 connectors: - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.114.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.115.0 diff --git a/tasks/unit_tests/testdata/collector/datadogexporter_manifest.yaml b/tasks/unit_tests/testdata/collector/datadogexporter_manifest.yaml index 9b95b7df0d6a8..3a96edc271b5a 100644 --- a/tasks/unit_tests/testdata/collector/datadogexporter_manifest.yaml +++ b/tasks/unit_tests/testdata/collector/datadogexporter_manifest.yaml @@ -3,12 +3,12 @@ dist: description: Manifest that contains datadog exporter (should get stripped and pass collector_tests.py) extensions: - - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0 + - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0 exporters: - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.114.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.115.0 receivers: - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0 diff --git a/tasks/unit_tests/testdata/collector/healthcheckextension_manifest.yaml b/tasks/unit_tests/testdata/collector/healthcheckextension_manifest.yaml index 7555406e42bba..848c2e22024c4 100644 --- a/tasks/unit_tests/testdata/collector/healthcheckextension_manifest.yaml +++ b/tasks/unit_tests/testdata/collector/healthcheckextension_manifest.yaml @@ -3,8 +3,8 @@ dist: description: Manifest that does not contain health check extension (should fail collector_tests.py) extensions: - - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0 + - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0 receivers: - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0 diff --git a/tasks/unit_tests/testdata/collector/mismatched_versions_manifest.yaml b/tasks/unit_tests/testdata/collector/mismatched_versions_manifest.yaml index b2e8423416320..a4f2fb7829030 100644 --- a/tasks/unit_tests/testdata/collector/mismatched_versions_manifest.yaml +++ b/tasks/unit_tests/testdata/collector/mismatched_versions_manifest.yaml @@ -1,12 +1,12 @@ --- dist: description: Manifest that has mismatched otelcol and component versions (should fail collector_tests.py) - otelcol_version: 0.114.0 + otelcol_version: 0.115.0 extensions: - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.99.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0 receivers: - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0 diff --git a/tasks/unit_tests/testdata/collector/pprofextension_manifest.yaml b/tasks/unit_tests/testdata/collector/pprofextension_manifest.yaml index d7dccca404219..82bb7e9059be7 100644 --- a/tasks/unit_tests/testdata/collector/pprofextension_manifest.yaml +++ b/tasks/unit_tests/testdata/collector/pprofextension_manifest.yaml @@ -3,8 +3,8 @@ dist: description: Manifest that does not contain pprof extension (should fail collector_tests.py) extensions: - - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0 + - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0 receivers: - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0 diff --git a/tasks/unit_tests/testdata/collector/prometheusreceiver_manifest.yaml b/tasks/unit_tests/testdata/collector/prometheusreceiver_manifest.yaml index 5b019879cc656..02b932462e778 100644 --- a/tasks/unit_tests/testdata/collector/prometheusreceiver_manifest.yaml +++ b/tasks/unit_tests/testdata/collector/prometheusreceiver_manifest.yaml @@ -3,6 +3,6 @@ dist: description: Manifest that does not contain prometheus receiver (should fail collector_tests.py) extensions: - - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0 + - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0 diff --git a/tasks/unit_tests/testdata/collector/valid_datadog_manifest.yaml b/tasks/unit_tests/testdata/collector/valid_datadog_manifest.yaml index 0f12f2cc26ca1..6c3849f10dc0e 100644 --- a/tasks/unit_tests/testdata/collector/valid_datadog_manifest.yaml +++ b/tasks/unit_tests/testdata/collector/valid_datadog_manifest.yaml @@ -3,55 +3,55 @@ dist: module: github.com/DataDog/datadog-agent/comp/otelcol/collector-contrib/impl name: otelcol-contrib description: Valid (default) datadog converged Agent ocb manifest (should pass collector_tests.py) - version: 0.114.0 + version: 0.115.0 output_path: ./comp/otelcol/collector-contrib/impl - otelcol_version: 0.114.0 + otelcol_version: 0.115.0 extensions: - - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.114.0 + - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.115.0 exporters: - - gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.114.0 - - gomod: go.opentelemetry.io/collector/exporter/nopexporter v0.114.0 - - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.114.0 - - gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.114.0 + - gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.115.0 + - gomod: go.opentelemetry.io/collector/exporter/nopexporter v0.115.0 + - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.115.0 + - gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.115.0 processors: - - gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.114.0 - - gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.114.0 + - gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.115.0 + - gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.115.0 receivers: - - gomod: go.opentelemetry.io/collector/receiver/nopreceiver v0.114.0 - - gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.114.0 + - gomod: go.opentelemetry.io/collector/receiver/nopreceiver v0.115.0 + - gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.115.0 connectors: - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.114.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.115.0 # When adding a replace, add a comment before it to document why it's needed and when it can be removed replaces: diff --git a/tasks/unit_tests/testdata/collector/valid_manifest_without_specified_version.yaml b/tasks/unit_tests/testdata/collector/valid_manifest_without_specified_version.yaml index 7a11140cbb107..d49a640f62279 100644 --- a/tasks/unit_tests/testdata/collector/valid_manifest_without_specified_version.yaml +++ b/tasks/unit_tests/testdata/collector/valid_manifest_without_specified_version.yaml @@ -6,12 +6,12 @@ dist: output_path: ./comp/otelcol/collector-contrib/impl extensions: - - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0 + - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0 receivers: - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0 # When adding a replace, add a comment before it to document why it's needed and when it can be removed replaces: diff --git a/tasks/unit_tests/testdata/collector/zpagesextension_manifest.yaml b/tasks/unit_tests/testdata/collector/zpagesextension_manifest.yaml index 9dd5800f47088..272c5cd90204d 100644 --- a/tasks/unit_tests/testdata/collector/zpagesextension_manifest.yaml +++ b/tasks/unit_tests/testdata/collector/zpagesextension_manifest.yaml @@ -3,8 +3,8 @@ dist: description: manifest without zpages extension (should fail collector_tests.py) extensions: - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.114.0 - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.114.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.115.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.115.0 receivers: - - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.114.0 + - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.115.0 diff --git a/test/new-e2e/go.mod b/test/new-e2e/go.mod index b2f25362d4739..7b6913e76a8f7 100644 --- a/test/new-e2e/go.mod +++ b/test/new-e2e/go.mod @@ -85,10 +85,10 @@ require ( golang.org/x/term v0.26.0 gopkg.in/yaml.v2 v2.4.0 gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 - k8s.io/api v0.31.2 - k8s.io/apimachinery v0.31.2 + k8s.io/api v0.31.3 + k8s.io/apimachinery v0.31.3 k8s.io/cli-runtime v0.31.2 - k8s.io/client-go v0.31.2 + k8s.io/client-go v0.31.3 k8s.io/kubectl v0.31.2 ) @@ -313,10 +313,10 @@ require ( github.com/pulumi/pulumi-gcp/sdk/v7 v7.38.0 // indirect github.com/twinj/uuid v0.0.0-20151029044442-89173bcdda19 // indirect github.com/x448/float16 v0.8.4 // indirect - go.opentelemetry.io/collector/component v0.114.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.114.0 // indirect - go.opentelemetry.io/collector/extension v0.114.0 // indirect - go.opentelemetry.io/collector/pdata v1.20.0 // indirect + go.opentelemetry.io/collector/component v0.115.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.115.0 // indirect + go.opentelemetry.io/collector/extension v0.115.0 // indirect + go.opentelemetry.io/collector/pdata v1.21.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect diff --git a/test/new-e2e/go.sum b/test/new-e2e/go.sum index e36e556cf02ed..84c305a0469a5 100644 --- a/test/new-e2e/go.sum +++ b/test/new-e2e/go.sum @@ -521,14 +521,14 @@ github.com/zclconf/go-cty v1.14.4 h1:uXXczd9QDGsgu0i/QFR/hzI5NYCHLf6NQw/atrbnhq8 github.com/zclconf/go-cty v1.14.4/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= github.com/zorkian/go-datadog-api v2.30.0+incompatible h1:R4ryGocppDqZZbnNc5EDR8xGWF/z/MxzWnqTUijDQes= github.com/zorkian/go-datadog-api v2.30.0+incompatible/go.mod h1:PkXwHX9CUQa/FpB9ZwAD45N1uhCW4MT/Wj7m36PbKss= -go.opentelemetry.io/collector/component v0.114.0 h1:SVGbm5LvHGSTEDv7p92oPuBgK5tuiWR82I9+LL4TtBE= -go.opentelemetry.io/collector/component v0.114.0/go.mod h1:MLxtjZ6UVHjDxSdhGLuJfHBHvfl1iT/Y7IaQPD24Eww= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0 h1:kjLeyrumge6wsX6ZIkicdNOlBXaEyW2PI2ZdVXz/rzY= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0/go.mod h1:R0MBUxjSMVMIhljuDHWIygzzJWQyZHXXWIgQNxcFwhc= -go.opentelemetry.io/collector/extension v0.114.0 h1:9Qb92y8hD2WDC5aMDoj4JNQN+/5BQYJWPUPzLXX+iGw= -go.opentelemetry.io/collector/extension v0.114.0/go.mod h1:Yk2/1ptVgfTr12t+22v93nYJpioP14pURv2YercSzU0= -go.opentelemetry.io/collector/pdata v1.20.0 h1:ePcwt4bdtISP0loHaE+C9xYoU2ZkIvWv89Fob16o9SM= -go.opentelemetry.io/collector/pdata v1.20.0/go.mod h1:Ox1YVLe87cZDB/TL30i4SUz1cA5s6AM6SpFMfY61ICs= +go.opentelemetry.io/collector/component v0.115.0 h1:iLte1oCiXzjiCnaOBKdsXacfFiECecpWxW3/LeriMoo= +go.opentelemetry.io/collector/component v0.115.0/go.mod h1:oIUFiH7w1eOimdeYhFI+gAIxYSiLDocKVJ0PTvX7d6s= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0 h1:U07FinCDop+r2RjWQ3aP9ZWONC7r7kQIp1GkXQi6nsI= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0/go.mod h1:SlBEwQg0qly75rXZ6W1Ig8jN25KBVBkFIIAUI1GiAAE= +go.opentelemetry.io/collector/extension v0.115.0 h1:/cBb8AUdD0KMWC6V3lvCC16eP9Fg0wd1Upcp5rgvuGI= +go.opentelemetry.io/collector/extension v0.115.0/go.mod h1:HI7Ak6loyi6ZrZPsQJW1OO1wbaAW8OqXLFNQlTZnreQ= +go.opentelemetry.io/collector/pdata v1.21.0 h1:PG+UbiFMJ35X/WcAR7Rf/PWmWtRdW0aHlOidsR6c5MA= +go.opentelemetry.io/collector/pdata v1.21.0/go.mod h1:GKb1/zocKJMvxKbS+sl0W85lxhYBTFJ6h6I1tphVyDU= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 h1:UP6IpuHFkUgOQL9FFQFrZ+5LiwhhYRbi7VZSIx6Nj5s= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0/go.mod h1:qxuZLtbq5QDtdeSHsS7bcf6EH6uO6jUAgk764zd3rhM= go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= @@ -715,14 +715,14 @@ gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.31.2 h1:3wLBbL5Uom/8Zy98GRPXpJ254nEFpl+hwndmk9RwmL0= -k8s.io/api v0.31.2/go.mod h1:bWmGvrGPssSK1ljmLzd3pwCQ9MgoTsRCuK35u6SygUk= -k8s.io/apimachinery v0.31.2 h1:i4vUt2hPK56W6mlT7Ry+AO8eEsyxMD1U44NR22CLTYw= -k8s.io/apimachinery v0.31.2/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/api v0.31.3 h1:umzm5o8lFbdN/hIXbrK9oRpOproJO62CV1zqxXrLgk8= +k8s.io/api v0.31.3/go.mod h1:UJrkIp9pnMOI9K2nlL6vwpxRzzEX5sWgn8kGQe92kCE= +k8s.io/apimachinery v0.31.3 h1:6l0WhcYgasZ/wk9ktLq5vLaoXJJr5ts6lkaQzgeYPq4= +k8s.io/apimachinery v0.31.3/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= k8s.io/cli-runtime v0.31.2 h1:7FQt4C4Xnqx8V1GJqymInK0FFsoC+fAZtbLqgXYVOLQ= k8s.io/cli-runtime v0.31.2/go.mod h1:XROyicf+G7rQ6FQJMbeDV9jqxzkWXTYD6Uxd15noe0Q= -k8s.io/client-go v0.31.2 h1:Y2F4dxU5d3AQj+ybwSMqQnpZH9F30//1ObxOKlTI9yc= -k8s.io/client-go v0.31.2/go.mod h1:NPa74jSVR/+eez2dFsEIHNa+3o09vtNaWwWwb1qSxSs= +k8s.io/client-go v0.31.3 h1:CAlZuM+PH2cm+86LOBemaJI/lQ5linJ6UFxKX/SoG+4= +k8s.io/client-go v0.31.3/go.mod h1:2CgjPUTpv3fE5dNygAr2NcM8nhHzXvxB8KL5gYc3kJs= k8s.io/component-base v0.31.2 h1:Z1J1LIaC0AV+nzcPRFqfK09af6bZ4D1nAOpWsy9owlA= k8s.io/component-base v0.31.2/go.mod h1:9PeyyFN/drHjtJZMCTkSpQJS3U9OXORnHQqMLDz0sUQ= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= diff --git a/test/new-e2e/tests/otel/otel-agent/testdata/minimal-full-config.yml b/test/new-e2e/tests/otel/otel-agent/testdata/minimal-full-config.yml index 5156e26fabee3..633b5e66522f6 100644 --- a/test/new-e2e/tests/otel/otel-agent/testdata/minimal-full-config.yml +++ b/test/new-e2e/tests/otel/otel-agent/testdata/minimal-full-config.yml @@ -27,6 +27,7 @@ exporters: host_metadata: enabled: false hostname_source: config_or_system + reporter_period: 30m0s tags: [] hostname: otelcol-docker http2_ping_timeout: 0s diff --git a/test/new-e2e/tests/otel/otel-agent/testdata/minimal-provided-config.yml b/test/new-e2e/tests/otel/otel-agent/testdata/minimal-provided-config.yml index af090ab56d217..e018b94bf7d23 100644 --- a/test/new-e2e/tests/otel/otel-agent/testdata/minimal-provided-config.yml +++ b/test/new-e2e/tests/otel/otel-agent/testdata/minimal-provided-config.yml @@ -27,6 +27,7 @@ exporters: host_metadata: enabled: false hostname_source: config_or_system + reporter_period: 30m0s tags: [] hostname: otelcol-docker http2_ping_timeout: 0s diff --git a/test/otel/go.mod b/test/otel/go.mod index dd0663ecebd79..6ceb9b9ca2ebf 100644 --- a/test/otel/go.mod +++ b/test/otel/go.mod @@ -107,7 +107,7 @@ require ( github.com/DataDog/datadog-agent/pkg/config/setup v0.59.0 github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.114.0 + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0 ) require ( @@ -115,13 +115,13 @@ require ( github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect - go.opentelemetry.io/collector/featuregate v1.20.0 // indirect + go.opentelemetry.io/collector/featuregate v1.21.0 // indirect ) require ( github.com/pierrec/lz4/v4 v4.1.21 // indirect - go.opentelemetry.io/collector/consumer/consumererror v0.114.0 // indirect - go.opentelemetry.io/collector/pdata/pprofile v0.114.0 // indirect + go.opentelemetry.io/collector/consumer/consumererror v0.115.0 // indirect + go.opentelemetry.io/collector/pdata/pprofile v0.115.0 // indirect ) require ( @@ -234,7 +234,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.114.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0 // indirect github.com/opencontainers/runtime-spec v1.2.0 // indirect github.com/outcaste-io/ristretto v0.2.3 // indirect github.com/pelletier/go-toml v1.9.5 // indirect @@ -261,26 +261,26 @@ require ( github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - go.opentelemetry.io/collector/client v1.20.0 // indirect - go.opentelemetry.io/collector/component v0.114.0 // indirect - go.opentelemetry.io/collector/config/configauth v0.114.0 // indirect - go.opentelemetry.io/collector/config/configcompression v1.20.0 // indirect - go.opentelemetry.io/collector/config/confighttp v0.114.0 // indirect - go.opentelemetry.io/collector/config/confignet v1.20.0 // indirect - go.opentelemetry.io/collector/config/configopaque v1.20.0 // indirect - go.opentelemetry.io/collector/config/configretry v1.20.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.114.0 // indirect - go.opentelemetry.io/collector/config/configtls v1.20.0 // indirect - go.opentelemetry.io/collector/config/internal v0.114.0 // indirect - go.opentelemetry.io/collector/confmap v1.20.0 // indirect - go.opentelemetry.io/collector/consumer v0.114.0 // indirect - go.opentelemetry.io/collector/exporter v0.114.0 // indirect - go.opentelemetry.io/collector/extension v0.114.0 // indirect - go.opentelemetry.io/collector/extension/auth v0.114.0 // indirect - go.opentelemetry.io/collector/extension/experimental/storage v0.114.0 // indirect - go.opentelemetry.io/collector/pdata v1.20.0 // indirect - go.opentelemetry.io/collector/pipeline v0.114.0 // indirect - go.opentelemetry.io/collector/semconv v0.114.0 // indirect + go.opentelemetry.io/collector/client v1.21.0 // indirect + go.opentelemetry.io/collector/component v0.115.0 // indirect + go.opentelemetry.io/collector/config/configauth v0.115.0 // indirect + go.opentelemetry.io/collector/config/configcompression v1.21.0 // indirect + go.opentelemetry.io/collector/config/confighttp v0.115.0 // indirect + go.opentelemetry.io/collector/config/confignet v1.21.0 // indirect + go.opentelemetry.io/collector/config/configopaque v1.21.0 // indirect + go.opentelemetry.io/collector/config/configretry v1.21.0 // indirect + go.opentelemetry.io/collector/config/configtelemetry v0.115.0 // indirect + go.opentelemetry.io/collector/config/configtls v1.21.0 // indirect + go.opentelemetry.io/collector/config/internal v0.115.0 // indirect + go.opentelemetry.io/collector/confmap v1.21.0 // indirect + go.opentelemetry.io/collector/consumer v1.21.0 // indirect + go.opentelemetry.io/collector/exporter v0.115.0 // indirect + go.opentelemetry.io/collector/extension v0.115.0 // indirect + go.opentelemetry.io/collector/extension/auth v0.115.0 // indirect + go.opentelemetry.io/collector/extension/experimental/storage v0.115.0 // indirect + go.opentelemetry.io/collector/pdata v1.21.0 // indirect + go.opentelemetry.io/collector/pipeline v0.115.0 // indirect + go.opentelemetry.io/collector/semconv v0.115.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 // indirect go.opentelemetry.io/otel v1.32.0 // indirect go.opentelemetry.io/otel/metric v1.32.0 // indirect diff --git a/test/otel/go.sum b/test/otel/go.sum index 1283d3d064631..957379677134f 100644 --- a/test/otel/go.sum +++ b/test/otel/go.sum @@ -239,16 +239,16 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.114.0 h1:Wq1iTmd0K1SSOIA43Wy2uAU6SB4f9ogyN3ZmvDgTURg= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.114.0/go.mod h1:VCj9H0QxRBWSgbl1pUo8p0NrqnmcxpPo0QjKLFtWkO0= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.114.0 h1:m8uPYU2rTj0sKiYgzCvIPajD3meiYsu+nX0hplUnlEU= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.114.0/go.mod h1:P0BaP92pXPkTyTmObfLYUoRBfMYU+i0hdS3oM1DpGJo= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.114.0 h1:Qg80zPfNMlub7LO07VMDElOu3M2oxqdZgvvB+X72a4U= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.114.0/go.mod h1:5qsGcjFV3WFI6J2onAlkR7Xd/8VtwJcECaDRZfW4Tb4= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0 h1:mtSN/07RGQPi1/zHVSZg4G0qRtOoJpPew5jsQWv9uS0= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.114.0/go.mod h1:C9Zgh/N3j4NR2D+1FGAA1YizhFW9OS51DwLUFJTdXN4= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0 h1:I4ZYVRYW3Cjb65sPENZ9kHam/JUMXNEp2n/knJ0C0Vc= -github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.114.0/go.mod h1:4BhyIaOn2LS48WS+ZNix4TpP0+goq9gDEtGzth5Cr3M= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0 h1:WOqt8NpU/JPGYDR4CiWx7g/sHV6Oe9FChzhushwmVdo= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0/go.mod h1:wV/+iU7MyXcyTaY8K5Qx+1Z3yUzrxA40nydPQA476Iw= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0 h1:MerLKMrkM4YoGF6Di0D9yMXO02yCX8mrZAi/+jJVVeI= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0/go.mod h1:R8AkVWe9G5Q0oMOapvm9HNS076E3Min8SVlmhBL3QD0= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0 h1:WEqcnWSy9dNSlGb8pYRBX7zhaz2ReyaeImlenbzNTB4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0/go.mod h1:6Mk71CakHUA3I6oM9hARDiyQypYyOolvb+4PFYyVEFg= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0 h1:R9MRrO+dSkAHBQLZjuwjv2RHXHQqF2Wtm1Ki0VKD5cs= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.115.0/go.mod h1:rKXLXmwdUVcUHwTilroKSejbg3KSwLeYzNPSpkIEnv4= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0 h1:vwZQ7k8oqlK0bdZYTsjP/59zjQQfjSD4fNsWIWsTu2w= +github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0/go.mod h1:5ObSa9amrbzbYTdAK1Qhv3D/YqCxxnQhP0sk2eWB7Oo= github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -376,80 +376,82 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.opentelemetry.io/collector/client v1.20.0 h1:o60wPcj5nLtaRenF+1E5p4QXFS3TDL6vHlw+GOon3rg= -go.opentelemetry.io/collector/client v1.20.0/go.mod h1:6aqkszco9FaLWCxyJEVam6PP7cUa8mPRIXeS5eZGj0U= -go.opentelemetry.io/collector/component v0.114.0 h1:SVGbm5LvHGSTEDv7p92oPuBgK5tuiWR82I9+LL4TtBE= -go.opentelemetry.io/collector/component v0.114.0/go.mod h1:MLxtjZ6UVHjDxSdhGLuJfHBHvfl1iT/Y7IaQPD24Eww= -go.opentelemetry.io/collector/component/componentstatus v0.114.0 h1:y9my/xink8KB5lK8zFAjgB2+pEh0QYy5TM972fxZY9w= -go.opentelemetry.io/collector/component/componentstatus v0.114.0/go.mod h1:RIoeCYZpPaae7QLE/1RacqzhHuXBmzRAk9H/EwYtIIs= -go.opentelemetry.io/collector/component/componenttest v0.114.0 h1:GM4FTTlfeXoVm6sZYBHImwlRN8ayh2oAfUhvaFj7Zo8= -go.opentelemetry.io/collector/component/componenttest v0.114.0/go.mod h1:ZZEJMtbJtoVC/3/9R1HzERq+cYQRxuMFQrPCpfZ4Xos= -go.opentelemetry.io/collector/config/configauth v0.114.0 h1:R2sJ6xpsLYGH0yU0vCxotzBYDKR/Hrjv0A7y9lwMyiw= -go.opentelemetry.io/collector/config/configauth v0.114.0/go.mod h1:3Z24KcCpG+WYCeQYfs/cNp5cP2BDeOqLCtOEgs/rPqM= -go.opentelemetry.io/collector/config/configcompression v1.20.0 h1:H/mvz7J/5z+O74YsO0t2tk+REnO2tzLM8TgIQ4AZ5w0= -go.opentelemetry.io/collector/config/configcompression v1.20.0/go.mod h1:pnxkFCLUZLKWzYJvfSwZnPrnm0twX14CYj2ADth5xiU= -go.opentelemetry.io/collector/config/confighttp v0.114.0 h1:DjGsBvVm+mGK3IpJBaXianWhwcxEC1fF33cpuC1LY/I= -go.opentelemetry.io/collector/config/confighttp v0.114.0/go.mod h1:nrlNLxOZ+4JQaV9j0TiqQV7LOHhrRivPrT8nQRHED3Q= -go.opentelemetry.io/collector/config/confignet v1.20.0 h1:LrM6AuiY8N/woTP4SWhL2V0562JXwJs9MRNFZJFLtRY= -go.opentelemetry.io/collector/config/confignet v1.20.0/go.mod h1:o3v4joAEjvLwntqexg5ixMqRrU1+Vst+jWuCUaBNgOg= -go.opentelemetry.io/collector/config/configopaque v1.20.0 h1:2I48zKiyyyYqjm7y0B9OLp24ku2ZSX3nCHG0r5FdWOQ= -go.opentelemetry.io/collector/config/configopaque v1.20.0/go.mod h1:6zlLIyOoRpJJ+0bEKrlZOZon3rOp5Jrz9fMdR4twOS4= -go.opentelemetry.io/collector/config/configretry v1.20.0 h1:z679mrMlW2a6tOOYPGdrS/QfALxdzWLQUOpH8Uu+D5Y= -go.opentelemetry.io/collector/config/configretry v1.20.0/go.mod h1:KvQF5cfphq1rQm1dKR4eLDNQYw6iI2fY72NMZVa+0N0= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0 h1:kjLeyrumge6wsX6ZIkicdNOlBXaEyW2PI2ZdVXz/rzY= -go.opentelemetry.io/collector/config/configtelemetry v0.114.0/go.mod h1:R0MBUxjSMVMIhljuDHWIygzzJWQyZHXXWIgQNxcFwhc= -go.opentelemetry.io/collector/config/configtls v1.20.0 h1:hNlJdwfyY5Qe54RLJ41lfLqKTn9ypkR7sk7JNCcSe2U= -go.opentelemetry.io/collector/config/configtls v1.20.0/go.mod h1:sav/txSHguadTYlSSK+BJO2ljJeYEtRoBahgzWAguYg= -go.opentelemetry.io/collector/config/internal v0.114.0 h1:uWSDWTJb8T6xRjKD9/XmEARakXnxgYVYKUeId78hErc= -go.opentelemetry.io/collector/config/internal v0.114.0/go.mod h1:yC7E4h1Uj0SubxcFImh6OvBHFTjMh99+A5PuyIgDWqc= -go.opentelemetry.io/collector/confmap v1.20.0 h1:ARfOwmkKxFOud1njl03yAHQ30+uenlzqCO6LBYamDTE= -go.opentelemetry.io/collector/confmap v1.20.0/go.mod h1:DMpd9Ay/ffls3JoQBQ73vWeRsz1rNuLbwjo6WtjSQus= -go.opentelemetry.io/collector/consumer v0.114.0 h1:1zVaHvfIZowGwZRitRBRo3i+RP2StlU+GClYiofSw0Q= -go.opentelemetry.io/collector/consumer v0.114.0/go.mod h1:d+Mrzt9hsH1ub3zmwSlnQVPLeTYir4Mgo7CrWfnncN4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0 h1:r2YiELfWerb40FHD23V04gNjIkLUcjEKGxI4Vtm2iO4= -go.opentelemetry.io/collector/consumer/consumererror v0.114.0/go.mod h1:MzIrLQ5jptO2egypolhlAbZsWZr29WC4FhSxQjnxcvg= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0 h1:5pXYy3E6UK5Huu3aQbsYL8B6E6MyWx4fvXXDn+oXZaA= -go.opentelemetry.io/collector/consumer/consumerprofiles v0.114.0/go.mod h1:PMq3f54KcJQO4v1tue0QxQScu7REFVADlXxXSAYMiN0= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0 h1:isaTwJK5DOy8Bs7GuLq23ejfgj8gLIo5dOUvkRnLF4g= -go.opentelemetry.io/collector/consumer/consumertest v0.114.0/go.mod h1:GNeLPkfRPdh06n/Rv1UKa/cAtCKjN0a7ADyHjIj4HFE= -go.opentelemetry.io/collector/exporter v0.114.0 h1:5/0BBpXuCJQSQ5SQf31g7j6T4XEKkyx9mZMcA2rS5e8= -go.opentelemetry.io/collector/exporter v0.114.0/go.mod h1:atpd0wWXgh5LAZ0REU/d/Ti/q50HDfnlBIjMjJQlKFg= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0 h1:/wmWOSBHcvtz3Pbv7+rWCqPPQuNvYaoidKKaOqZsLKs= -go.opentelemetry.io/collector/exporter/exporterprofiles v0.114.0/go.mod h1:epRYTkyJZTSQZBJflMGHUyUo2EdLPhsaZEyo5Qm848A= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0 h1:vo0idBJT+QACSM1KpjVLm9VeiXVwO7y4UnMpGxN6EyM= -go.opentelemetry.io/collector/exporter/exportertest v0.114.0/go.mod h1:420ssFrhaphneybstbMeSIiqSRoaBARPgO71O17foaM= -go.opentelemetry.io/collector/extension v0.114.0 h1:9Qb92y8hD2WDC5aMDoj4JNQN+/5BQYJWPUPzLXX+iGw= -go.opentelemetry.io/collector/extension v0.114.0/go.mod h1:Yk2/1ptVgfTr12t+22v93nYJpioP14pURv2YercSzU0= -go.opentelemetry.io/collector/extension/auth v0.114.0 h1:1K2qh4yvG8kKR/sTAobI/rw5VxzPZoKcl3FmC195vvo= -go.opentelemetry.io/collector/extension/auth v0.114.0/go.mod h1:IjtsG+jUVJB0utKF8dAK8pLutRun3aEgASshImzsw/U= -go.opentelemetry.io/collector/extension/experimental/storage v0.114.0 h1:hLyX9UvmY0t6iBnk3CqvyNck2U0QjPACekj7pDRx2hA= -go.opentelemetry.io/collector/extension/experimental/storage v0.114.0/go.mod h1:WqYRQVJjJLE1rm+y/ks1wPdPRGWePEvE1VO07xm2J2k= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0 h1:ibXDms1qrswlvlR6b3d2BeyI8sXUXoFV11yOi9Sop8o= -go.opentelemetry.io/collector/extension/extensiontest v0.114.0/go.mod h1:/bOYmqu5yTDfI1bJZUxFqm8ZtmcodpquebiSxiQxtDY= -go.opentelemetry.io/collector/featuregate v1.20.0 h1:Mi7nMy/q52eruI+6jWnMKUOeM55XvwoPnGcdB1++O8c= -go.opentelemetry.io/collector/featuregate v1.20.0/go.mod h1:47xrISO71vJ83LSMm8+yIDsUbKktUp48Ovt7RR6VbRs= -go.opentelemetry.io/collector/pdata v1.20.0 h1:ePcwt4bdtISP0loHaE+C9xYoU2ZkIvWv89Fob16o9SM= -go.opentelemetry.io/collector/pdata v1.20.0/go.mod h1:Ox1YVLe87cZDB/TL30i4SUz1cA5s6AM6SpFMfY61ICs= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0 h1:pUNfTzsI/JUTiE+DScDM4lsrPoxnVNLI2fbTxR/oapo= -go.opentelemetry.io/collector/pdata/pprofile v0.114.0/go.mod h1:4aNcj6WM1n1uXyFSXlhVs4ibrERgNYsTbzcYI2zGhxA= -go.opentelemetry.io/collector/pdata/testdata v0.114.0 h1:+AzszWSL1i4K6meQ8rU0JDDW55SYCXa6FVqfDixhhTo= -go.opentelemetry.io/collector/pdata/testdata v0.114.0/go.mod h1:bv8XFdCTZxG2MQB5l9dKxSxf5zBrcodwO6JOy1+AxXM= -go.opentelemetry.io/collector/pipeline v0.114.0 h1:v3YOhc5z0tD6QbO5n/pnftpIeroihM2ks9Z2yKPCcwY= -go.opentelemetry.io/collector/pipeline v0.114.0/go.mod h1:4vOvjVsoYTHVGTbfFwqfnQOSV2K3RKUHofh3jNRc2Mg= -go.opentelemetry.io/collector/processor v0.114.0 h1:6bqQgLL7BtKrNv4YkEOGjZfkcfZv/ciJSQx1epGG9Zk= -go.opentelemetry.io/collector/processor v0.114.0/go.mod h1:DV/wa+nAmSHIDeD9NblPwkY9PbgtDQAZJ+PE5biZwPc= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0 h1:+P/1nLouEXTnN8DVQl+qWwO4BTkQyNPG9t/FrpUqrSI= -go.opentelemetry.io/collector/processor/processorprofiles v0.114.0/go.mod h1:3fuHeNIpINwx3bqFMprmDJyr6y5tWoWbJH599kltO5Y= -go.opentelemetry.io/collector/processor/processortest v0.114.0 h1:3FTaVXAp0LoVmUJn1ewBFckAby7AHa6/Kcdj0xuW14c= -go.opentelemetry.io/collector/processor/processortest v0.114.0/go.mod h1:OgsdOs1Fv5ZGTTJPF5nNIUJh2YkuV1acWd73yWgnti4= -go.opentelemetry.io/collector/receiver v0.114.0 h1:90SAnXAjNq7/k52/pFmmb06Cf1YauoPYtbio4aOXafY= -go.opentelemetry.io/collector/receiver v0.114.0/go.mod h1:KUGT0/D953LXbGH/D3lLPU8yrU3HfWnUqpt4W4hSOnE= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0 h1:ibhEfGpvNB3yrtpl2jYFabrunMk1hurxvMYpM0b1Ck4= -go.opentelemetry.io/collector/receiver/receiverprofiles v0.114.0/go.mod h1:UZyRfaasw+NLvN10AN8IQnmj5tQ3BOUH1uP2ctpO9f0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0 h1:D+Kh9t2n4asTnM+TiSxbrKlUemLZandWntj17BJWWb0= -go.opentelemetry.io/collector/receiver/receivertest v0.114.0/go.mod h1:mNSHQ13vFmqD+VAcRzLjStFBejbcWUn2Mp0pAd7Op+U= -go.opentelemetry.io/collector/semconv v0.114.0 h1:/eKcCJwZepQUtEuFuxa0thx2XIOvhFpaf214ZG1a11k= -go.opentelemetry.io/collector/semconv v0.114.0/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= +go.opentelemetry.io/collector/client v1.21.0 h1:3Kes8lOFMYVxoxeAmX+DTEAkuS1iTA3NkSfqzGmygJA= +go.opentelemetry.io/collector/client v1.21.0/go.mod h1:jYJGiL0UA975OOyHmjbQSokNWt1OiviI5KjPOMUMGwc= +go.opentelemetry.io/collector/component v0.115.0 h1:iLte1oCiXzjiCnaOBKdsXacfFiECecpWxW3/LeriMoo= +go.opentelemetry.io/collector/component v0.115.0/go.mod h1:oIUFiH7w1eOimdeYhFI+gAIxYSiLDocKVJ0PTvX7d6s= +go.opentelemetry.io/collector/component/componentstatus v0.115.0 h1:pbpUIL+uKDfEiSgKK+S5nuSL6MDIIQYsp4b65ZGVb9M= +go.opentelemetry.io/collector/component/componentstatus v0.115.0/go.mod h1:36A+9XSiOz0Cdhq+UwwPRlEr5CYuSkEnVO9om4BH7d0= +go.opentelemetry.io/collector/component/componenttest v0.115.0 h1:9URDJ9VyP6tuij+YHjp/kSSMecnZOd7oGvzu+rw9SJY= +go.opentelemetry.io/collector/component/componenttest v0.115.0/go.mod h1:PzXvNqKLCiSADZGZFKH+IOHMkaQ0GTHuzysfVbTPKYY= +go.opentelemetry.io/collector/config/configauth v0.115.0 h1:xa+ALdyPgva3rZnLBh1H2oS5MsHP6JxSqMtQmcELnys= +go.opentelemetry.io/collector/config/configauth v0.115.0/go.mod h1:C7anpb3Rf4KswMT+dgOzkW9UX0z/65PLORpUw3p0VYc= +go.opentelemetry.io/collector/config/configcompression v1.21.0 h1:0zbPdZAgPFMAarwJEC4gaR6f/JBP686A3TYSgb3oa+E= +go.opentelemetry.io/collector/config/configcompression v1.21.0/go.mod h1:LvYG00tbPTv0NOLoZN0wXq1F5thcxvukO8INq7xyfWU= +go.opentelemetry.io/collector/config/confighttp v0.115.0 h1:BIy394oNXnqySJwrCqgAJu4gWgAV5aQUDD6k1hy6C8o= +go.opentelemetry.io/collector/config/confighttp v0.115.0/go.mod h1:Wr50ut12NmCEAl4bWLJryw2EjUmJTtYRg89560Q51wc= +go.opentelemetry.io/collector/config/confignet v1.21.0 h1:PeQ5YrMnfftysFL/WVaSrjPOWjD6DfeABY50pf9CZxU= +go.opentelemetry.io/collector/config/confignet v1.21.0/go.mod h1:ZppUH1hgUJOubawEsxsQ9MzEYFytqo2GnVSS7d4CVxc= +go.opentelemetry.io/collector/config/configopaque v1.21.0 h1:PcvRGkBk4Px8BQM7tX+kw4i3jBsfAHGoGQbtZg6Ox7U= +go.opentelemetry.io/collector/config/configopaque v1.21.0/go.mod h1:sW0t0iI/VfRL9VYX7Ik6XzVgPcR+Y5kejTLsYcMyDWs= +go.opentelemetry.io/collector/config/configretry v1.21.0 h1:ZHoOvAkEcv5BBeaJn8IQ6rQ4GMPZWW4S+W7R4QTEbZU= +go.opentelemetry.io/collector/config/configretry v1.21.0/go.mod h1:cleBc9I0DIWpTiiHfu9v83FUaCTqcPXmebpLxjEIqro= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0 h1:U07FinCDop+r2RjWQ3aP9ZWONC7r7kQIp1GkXQi6nsI= +go.opentelemetry.io/collector/config/configtelemetry v0.115.0/go.mod h1:SlBEwQg0qly75rXZ6W1Ig8jN25KBVBkFIIAUI1GiAAE= +go.opentelemetry.io/collector/config/configtls v1.21.0 h1:ZfrlAYgBD8lzp04W0GxwiDmUbrvKsvDYJi+wkyiXlpA= +go.opentelemetry.io/collector/config/configtls v1.21.0/go.mod h1:5EsNefPfVCMOTlOrr3wyj7LrsOgY7V8iqRl8oFZEqtw= +go.opentelemetry.io/collector/config/internal v0.115.0 h1:eVk57iufZpUXyPJFKTb1Ebx5tmcCyroIlt427r5pxS8= +go.opentelemetry.io/collector/config/internal v0.115.0/go.mod h1:OVkadRWlKAoWjHslqjWtBLAne8ceQm8WYT71ZcBWLFc= +go.opentelemetry.io/collector/confmap v1.21.0 h1:1tIcx2/Suwg8VhuPmQw87ba0ludPmumpFCFRZZa6RXA= +go.opentelemetry.io/collector/confmap v1.21.0/go.mod h1:Rrhs+MWoaP6AswZp+ReQ2VO9dfOfcUjdjiSHBsG+nec= +go.opentelemetry.io/collector/consumer v1.21.0 h1:THKZ2Vbi6GkamjTBI2hFq5Dc4kINZTWGwQNa8d/Ty9g= +go.opentelemetry.io/collector/consumer v1.21.0/go.mod h1:FQcC4ThMtRYY41dv+IPNK8POLLhAFY3r1YR5fuP7iiY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0 h1:yli//xBCQMPZKXNgNlXemo4dvqhnFrAmCZ11DvQgmcY= +go.opentelemetry.io/collector/consumer/consumererror v0.115.0/go.mod h1:LwVzAvQ6ZVNG7mbOvurbAo+W/rKws0IcjOwriuZXqPE= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0 h1:H3fDuyQW1t2HWHkz96WMBQJKUevypOCjBqnqtaAWyoA= +go.opentelemetry.io/collector/consumer/consumerprofiles v0.115.0/go.mod h1:IzEmZ91Tp7TBxVDq8Cc9xvLsmO7H08njr6Pu9P5d9ns= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0 h1:hru0I2447y0TluCdwlKYFFtgcpyCnlM+LiOK1JZyA70= +go.opentelemetry.io/collector/consumer/consumertest v0.115.0/go.mod h1:ybjALRJWR6aKNOzEMy1T1ruCULVDEjj4omtOJMrH/kU= +go.opentelemetry.io/collector/exporter v0.115.0 h1:JnxfpOnsuqhTPKJXVKJLS1Cv3BiVrVLzpHOjJEQw+xw= +go.opentelemetry.io/collector/exporter v0.115.0/go.mod h1:xof3fHQK8wADhaKLIJcQ7ChZaFLNC+haRdPN0wgl6kY= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0 h1:lSQEleCn/q9eFufcuK61NdFKU70ZlgI9dBjPCO/4CrE= +go.opentelemetry.io/collector/exporter/exporterprofiles v0.115.0/go.mod h1:7l5K2AecimX2kx+nZC1gKG3QkP247CO1+SodmJ4fFkQ= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0 h1:P9SMTUXQOtcaq40bGtnnAe14zRmR4/yUgj/Tb2BEf/k= +go.opentelemetry.io/collector/exporter/exportertest v0.115.0/go.mod h1:1jMZ9gFGXglb8wfNrBZIgd+RvpZhSyFwdfE+Jtf9w4U= +go.opentelemetry.io/collector/extension v0.115.0 h1:/cBb8AUdD0KMWC6V3lvCC16eP9Fg0wd1Upcp5rgvuGI= +go.opentelemetry.io/collector/extension v0.115.0/go.mod h1:HI7Ak6loyi6ZrZPsQJW1OO1wbaAW8OqXLFNQlTZnreQ= +go.opentelemetry.io/collector/extension/auth v0.115.0 h1:TTMokbBsSHZRFH48PvGSJmgSS8F3Rkr9MWGHZn8eJDk= +go.opentelemetry.io/collector/extension/auth v0.115.0/go.mod h1:3w+2mzeb2OYNOO4Bi41TUo4jr32ap2y7AOq64IDpxQo= +go.opentelemetry.io/collector/extension/auth/authtest v0.115.0 h1:OZe7dKbZ01qodSpZU0ZYzI6zpmmzJ3UvfdBSFAbSgDw= +go.opentelemetry.io/collector/extension/auth/authtest v0.115.0/go.mod h1:fk9WCXP0x91Q64Z8HZKWTHh9PWtgoWE1KXe3n2Bff3U= +go.opentelemetry.io/collector/extension/experimental/storage v0.115.0 h1:sZXw0+77092pq24CkUoTRoHQPLQUsDq6HFRNB0g5yR4= +go.opentelemetry.io/collector/extension/experimental/storage v0.115.0/go.mod h1:qjFH7Y3QYYs88By2ZB5GMSUN5k3ul4Brrq2J6lKACA0= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0 h1:GBVFxFEskR8jSdu9uaQh2qpXnN5VNXhXjpJ2UjxtE8I= +go.opentelemetry.io/collector/extension/extensiontest v0.115.0/go.mod h1:eu1ecbz5mT+cHoH2H3GmD/rOO0WsicSJD2RLrYuOmRA= +go.opentelemetry.io/collector/featuregate v1.21.0 h1:+EULHPJDLMipcwAGZVp9Nm8NriRvoBBMxp7MSiIZVMI= +go.opentelemetry.io/collector/featuregate v1.21.0/go.mod h1:3GaXqflNDVwWndNGBJ1+XJFy3Fv/XrFgjMN60N3z7yg= +go.opentelemetry.io/collector/pdata v1.21.0 h1:PG+UbiFMJ35X/WcAR7Rf/PWmWtRdW0aHlOidsR6c5MA= +go.opentelemetry.io/collector/pdata v1.21.0/go.mod h1:GKb1/zocKJMvxKbS+sl0W85lxhYBTFJ6h6I1tphVyDU= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0 h1:NI89hy13vNDw7EOnQf7Jtitks4HJFO0SUWznTssmP94= +go.opentelemetry.io/collector/pdata/pprofile v0.115.0/go.mod h1:jGzdNfO0XTtfLjXCL/uCC1livg1LlfR+ix2WE/z3RpQ= +go.opentelemetry.io/collector/pdata/testdata v0.115.0 h1:Rblz+AKXdo3fG626jS+KSd0OSA4uMXcTQfpwed6P8LI= +go.opentelemetry.io/collector/pdata/testdata v0.115.0/go.mod h1:inNnRt6S2Nn260EfCBEcjesjlKOSsr0jPwkPqpBkt4s= +go.opentelemetry.io/collector/pipeline v0.115.0 h1:bmACBqb0e8U9ag+vGGHUP7kCfAO7HHROdtzIEg8ulus= +go.opentelemetry.io/collector/pipeline v0.115.0/go.mod h1:qE3DmoB05AW0C3lmPvdxZqd/H4po84NPzd5MrqgtL74= +go.opentelemetry.io/collector/processor v0.115.0 h1:+fveHGRe24PZPv/F5taahGuZ9HdNW44hgNWEJhIUdyc= +go.opentelemetry.io/collector/processor v0.115.0/go.mod h1:/oLHBlLsm7tFb7zOIrA5C0j14yBtjXKAgxJJ2Bktyk4= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0 h1:cCZAs+FXaebZPppqAN3m+X3etoSBL6NvyQo8l0hOZoo= +go.opentelemetry.io/collector/processor/processorprofiles v0.115.0/go.mod h1:kMxF0gknlWX4duuAJFi2/HuIRi6C3w95tOenRa0GKOY= +go.opentelemetry.io/collector/processor/processortest v0.115.0 h1:j9HEaYFOeOB6VYl9zGhBnhQbTkqGBa2udUvu5NTh6hc= +go.opentelemetry.io/collector/processor/processortest v0.115.0/go.mod h1:Gws+VEnp/eW3qAqPpqbKsrbnnxxNfyDjqrfUXbZfZic= +go.opentelemetry.io/collector/receiver v0.115.0 h1:55Q3Jvj6zHCIA1psKqi/3kEMJO4OqUF5tNAEYNdB1U8= +go.opentelemetry.io/collector/receiver v0.115.0/go.mod h1:nBSCh2O/WUcfgpJ+Jpz+B0z0Hn5jHeRvF2WmLij5EIY= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0 h1:R9JLaj2Al93smIPUkbJshAkb/cY0H5JBOxIx+Zu0NG4= +go.opentelemetry.io/collector/receiver/receiverprofiles v0.115.0/go.mod h1:05E5hGujWeeXJmzKZwTdHyZ/+rRyrQlQB5p5Q2XY39M= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0 h1:OiB684SbHQi6/Pd3ZH0cXjYvCpBS9ilQBfTQx0wVXHg= +go.opentelemetry.io/collector/receiver/receivertest v0.115.0/go.mod h1:Y8Z9U/bz9Xpyt8GI8DxZZgryw3mnnIw+AeKVLTD2cP8= +go.opentelemetry.io/collector/semconv v0.115.0 h1:SoqMvg4ZEB3mz2EdAb6XYa+TuMo5Mir5FRBr3nVFUDY= +go.opentelemetry.io/collector/semconv v0.115.0/go.mod h1:N6XE8Q0JKgBN2fAhkUQtqK9LT7rEGR6+Wu/Rtbal1iI= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 h1:UP6IpuHFkUgOQL9FFQFrZ+5LiwhhYRbi7VZSIx6Nj5s= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0/go.mod h1:qxuZLtbq5QDtdeSHsS7bcf6EH6uO6jUAgk764zd3rhM= go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= diff --git a/test/otel/testdata/builder-config.yaml b/test/otel/testdata/builder-config.yaml index b13b478649860..137c635509724 100644 --- a/test/otel/testdata/builder-config.yaml +++ b/test/otel/testdata/builder-config.yaml @@ -1,86 +1,87 @@ +connectors: +- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector + v0.115.0 +- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector + v0.115.0 +converters: +- gomod: github.com/DataDog/datadog-agent/comp/otelcol/converter/impl v0.61.0 + path: ./comp/otelcol/converter/impl dist: description: Basic OTel Collector distribution for Developers name: otelcol-custom output_path: /tmp/otel-ci/otelcol-custom -connectors: -- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector - v0.114.0 -- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.114.0 exporters: -- gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.114.0 -- gomod: go.opentelemetry.io/collector/exporter/nopexporter v0.114.0 -- gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.114.0 -- gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.114.0 +- gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.115.0 +- gomod: go.opentelemetry.io/collector/exporter/nopexporter v0.115.0 +- gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.115.0 +- gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter - v0.114.0 + v0.115.0 extensions: - gomod: github.com/DataDog/datadog-agent/comp/otelcol/ddflareextension/impl v0.61.0 path: ./comp/otelcol/ddflareextension/impl -- gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.114.0 +- gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver - v0.114.0 + v0.115.0 processors: -- gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.114.0 -- gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.114.0 +- gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.115.0 +- gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor - v0.114.0 + v0.115.0 providers: -- gomod: go.opentelemetry.io/collector/confmap/provider/envprovider v1.20.0 -- gomod: go.opentelemetry.io/collector/confmap/provider/fileprovider v1.20.0 -- gomod: go.opentelemetry.io/collector/confmap/provider/httpprovider v1.20.0 -- gomod: go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.20.0 -- gomod: go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.20.0 +- gomod: go.opentelemetry.io/collector/confmap/provider/envprovider v1.21.0 +- gomod: go.opentelemetry.io/collector/confmap/provider/fileprovider v1.21.0 +- gomod: go.opentelemetry.io/collector/confmap/provider/httpprovider v1.21.0 +- gomod: go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.21.0 +- gomod: go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.21.0 receivers: -- gomod: go.opentelemetry.io/collector/receiver/nopreceiver v0.114.0 -- gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.114.0 +- gomod: go.opentelemetry.io/collector/receiver/nopreceiver v0.115.0 +- gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator - v0.114.0 + v0.115.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver - v0.114.0 -converters: -- gomod: github.com/DataDog/datadog-agent/comp/otelcol/converter/impl v0.61.0 - path: ./comp/otelcol/converter/impl + v0.115.0 From e52d987af078c990d331b4161a36c4428a4b5d54 Mon Sep 17 00:00:00 2001 From: Dan Lepage <140522866+dplepage-dd@users.noreply.github.com> Date: Tue, 10 Dec 2024 13:45:43 -0500 Subject: [PATCH 103/303] Turn tag/mapping conflict into an actual error. (#31673) Co-authored-by: Esther Kim --- .../config_validate_enrich.go | 5 +- .../config_validate_enrich_test.go | 54 +------------------ ...-missing-tags-errors-c4cd44a12d22e7bc.yaml | 12 +++++ 3 files changed, 16 insertions(+), 55 deletions(-) create mode 100644 releasenotes/notes/make-missing-tags-errors-c4cd44a12d22e7bc.yaml diff --git a/pkg/collector/corechecks/snmp/internal/configvalidation/config_validate_enrich.go b/pkg/collector/corechecks/snmp/internal/configvalidation/config_validate_enrich.go index 5268345d8744e..499b93287d9d1 100644 --- a/pkg/collector/corechecks/snmp/internal/configvalidation/config_validate_enrich.go +++ b/pkg/collector/corechecks/snmp/internal/configvalidation/config_validate_enrich.go @@ -10,8 +10,6 @@ import ( "fmt" "regexp" - "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/networkdevice/profile/profiledefinition" ) @@ -174,6 +172,7 @@ func validateEnrichSymbol(symbol *profiledefinition.SymbolConfig, symbolContext } return errors } + func validateEnrichMetricTag(metricTag *profiledefinition.MetricTagConfig) []string { var errors []string if (metricTag.Column.OID != "" || metricTag.Column.Name != "") && (metricTag.Symbol.OID != "" || metricTag.Symbol.Name != "") { @@ -217,7 +216,7 @@ func validateEnrichMetricTag(metricTag *profiledefinition.MetricTagConfig) []str } } if len(metricTag.Mapping) > 0 && metricTag.Tag == "" { - log.Warnf("``tag` must be provided if `mapping` (`%s`) is defined", metricTag.Mapping) + errors = append(errors, fmt.Sprintf("``tag` must be provided if `mapping` (`%s`) is defined", metricTag.Mapping)) } for _, transform := range metricTag.IndexTransform { if transform.Start > transform.End { diff --git a/pkg/collector/corechecks/snmp/internal/configvalidation/config_validate_enrich_test.go b/pkg/collector/corechecks/snmp/internal/configvalidation/config_validate_enrich_test.go index 0047af78cc366..1e966e743614b 100644 --- a/pkg/collector/corechecks/snmp/internal/configvalidation/config_validate_enrich_test.go +++ b/pkg/collector/corechecks/snmp/internal/configvalidation/config_validate_enrich_test.go @@ -6,33 +6,21 @@ package configvalidation import ( - "bufio" - "bytes" "fmt" "regexp" - "strings" "testing" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" - "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/networkdevice/profile/profiledefinition" ) func Test_ValidateEnrichMetrics(t *testing.T) { - type logCount struct { - log string - count int - } - tests := []struct { name string metrics []profiledefinition.MetricsConfig expectedErrors []string expectedMetrics []profiledefinition.MetricsConfig - expectedLogs []logCount }{ { name: "either table symbol or scalar symbol must be provided", @@ -551,7 +539,7 @@ func Test_ValidateEnrichMetrics(t *testing.T) { }, }, { - name: "mapping used without tag should raise a warning", + name: "mapping used without tag", metrics: []profiledefinition.MetricsConfig{ { Symbols: []profiledefinition.SymbolConfig{ @@ -574,23 +562,11 @@ func Test_ValidateEnrichMetrics(t *testing.T) { }, }, }, - expectedErrors: []string{}, - expectedLogs: []logCount{ - { - "[WARN] validateEnrichMetricTag: ``tag` must be provided if `mapping` (`map[1:abc 2:def]`) is defined", - 1, - }, - }, + expectedErrors: []string{"``tag` must be provided if `mapping` (`map[1:abc 2:def]`) is defined"}, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - var b bytes.Buffer - w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") - assert.Nil(t, err) - log.SetupLogger(l, "debug") - errors := ValidateEnrichMetrics(tt.metrics) assert.Equal(t, len(tt.expectedErrors), len(errors), fmt.Sprintf("ERRORS: %v", errors)) for i := range errors { @@ -599,29 +575,16 @@ func Test_ValidateEnrichMetrics(t *testing.T) { if tt.expectedMetrics != nil { assert.Equal(t, tt.expectedMetrics, tt.metrics) } - - w.Flush() - logs := b.String() - - for _, aLogCount := range tt.expectedLogs { - assert.Equal(t, aLogCount.count, strings.Count(logs, aLogCount.log), logs) - } }) } } func Test_ValidateEnrichMetricTags(t *testing.T) { - type logCount struct { - log string - count int - } - tests := []struct { name string metrics []profiledefinition.MetricTagConfig expectedErrors []string expectedMetrics []profiledefinition.MetricTagConfig - expectedLogs []logCount }{ { name: "Move OID to Symbol", @@ -691,12 +654,6 @@ func Test_ValidateEnrichMetricTags(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - var b bytes.Buffer - w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") - assert.Nil(t, err) - log.SetupLogger(l, "debug") - errors := ValidateEnrichMetricTags(tt.metrics) assert.Equal(t, len(tt.expectedErrors), len(errors), fmt.Sprintf("ERRORS: %v", errors)) for i := range errors { @@ -705,13 +662,6 @@ func Test_ValidateEnrichMetricTags(t *testing.T) { if tt.expectedMetrics != nil { assert.Equal(t, tt.expectedMetrics, tt.metrics) } - - w.Flush() - logs := b.String() - - for _, aLogCount := range tt.expectedLogs { - assert.Equal(t, aLogCount.count, strings.Count(logs, aLogCount.log), logs) - } }) } } diff --git a/releasenotes/notes/make-missing-tags-errors-c4cd44a12d22e7bc.yaml b/releasenotes/notes/make-missing-tags-errors-c4cd44a12d22e7bc.yaml new file mode 100644 index 0000000000000..ddbfef1c88172 --- /dev/null +++ b/releasenotes/notes/make-missing-tags-errors-c4cd44a12d22e7bc.yaml @@ -0,0 +1,12 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +deprecations: + - | + SNMP profiles containing metric_tags without a specified `tag` field + will now show an error and be ignored, similar to other profile syntax errors. From 7d6be816588ecded8a60f2e88936371b199ebfdd Mon Sep 17 00:00:00 2001 From: "John L. Peterson (Jack)" Date: Tue, 10 Dec 2024 14:21:43 -0500 Subject: [PATCH 104/303] OTEL-2289 fix ocb component build script (#31941) --- test/otel/testdata/ocb_build_script.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/otel/testdata/ocb_build_script.sh b/test/otel/testdata/ocb_build_script.sh index 6aaf8bfeb36b4..43dd7b34be343 100755 --- a/test/otel/testdata/ocb_build_script.sh +++ b/test/otel/testdata/ocb_build_script.sh @@ -4,7 +4,17 @@ OTELCOL_PID=0 mkdir -p /tmp/otel-ci trap 'rm -rf /tmp/otel-ci && kill $OTELCOL_PID' EXIT + +current_dir=$(pwd) cp ./test/otel/testdata/builder-config.yaml /tmp/otel-ci/ +# Get path of all datadog modules, in sorted order, without the initial dot +dd_mods=$(find . -type f -name "go.mod" -exec dirname {} \; | sort | sed 's/.//') +echo "replaces:" >> "/tmp/otel-ci/builder-config.yaml" +for mod in $dd_mods; do + echo "- github.com/DataDog/datadog-agent$mod => $current_dir$mod" >> /tmp/otel-ci/builder-config.yaml +done +echo "added all datadog-agent modules to ocb builder-config replacements" + cp ./test/otel/testdata/collector-config.yaml /tmp/otel-ci/ cp ./tools/ci/retry.sh /tmp/otel-ci/ chmod +x /tmp/otel-ci/retry.sh From bf79e3918f96fc8c3861b6aff867b27286f51e2a Mon Sep 17 00:00:00 2001 From: andrewqian2001datadog Date: Tue, 10 Dec 2024 15:09:02 -0500 Subject: [PATCH 105/303] [AMLII-2146] Introduce logs-analyze subcommand (#30924) Co-authored-by: Esther Kim Co-authored-by: Brian Floersch --- .github/CODEOWNERS | 1 + cmd/agent/subcommands/analyzelogs/command.go | 141 +++++++++++++++++ .../subcommands/analyzelogs/command_test.go | 143 ++++++++++++++++++ cmd/agent/subcommands/subcommands.go | 2 + .../logs/agent/agentimpl/analyze_logs_init.go | 61 ++++++++ pkg/logs/launchers/types.go | 2 +- pkg/logs/pipeline/mock/mock.go | 4 + pkg/logs/pipeline/processor_only_provider.go | 86 +++++++++++ pkg/logs/pipeline/provider.go | 5 + pkg/logs/processor/json.go | 3 + pkg/logs/sources/config_source.go | 46 ++++++ pkg/logs/sources/config_source_test.go | 82 ++++++++++ .../logs-check-feature-13a93c589fe0613d.yaml | 15 ++ 13 files changed, 590 insertions(+), 1 deletion(-) create mode 100644 cmd/agent/subcommands/analyzelogs/command.go create mode 100644 cmd/agent/subcommands/analyzelogs/command_test.go create mode 100644 comp/logs/agent/agentimpl/analyze_logs_init.go create mode 100644 pkg/logs/pipeline/processor_only_provider.go create mode 100644 pkg/logs/sources/config_source.go create mode 100644 pkg/logs/sources/config_source_test.go create mode 100644 releasenotes/notes/logs-check-feature-13a93c589fe0613d.yaml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f9c09434f61c7..51fba3f61278c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -192,6 +192,7 @@ /cmd/agent/subcommands/remoteconfig @Datadog/remote-config /cmd/agent/subcommands/snmp @DataDog/ndm-core /cmd/agent/subcommands/streamlogs @DataDog/agent-metrics-logs +/cmd/agent/subcommands/analyzelogs @DataDog/agent-metrics-logs /cmd/agent/subcommands/streamep @DataDog/container-integrations /cmd/agent/subcommands/taggerlist @DataDog/container-platform /cmd/agent/subcommands/workloadlist @DataDog/container-platform diff --git a/cmd/agent/subcommands/analyzelogs/command.go b/cmd/agent/subcommands/analyzelogs/command.go new file mode 100644 index 0000000000000..e8a63dc87e080 --- /dev/null +++ b/cmd/agent/subcommands/analyzelogs/command.go @@ -0,0 +1,141 @@ +// 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 analyzelogs implements 'agent analyze-logs'. +package analyzelogs + +import ( + "encoding/json" + "fmt" + "os" + "time" + + "go.uber.org/fx" + + "github.com/spf13/cobra" + + "github.com/DataDog/datadog-agent/cmd/agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" + "github.com/DataDog/datadog-agent/comp/core/autodiscovery/providers/names" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/logs/agent/agentimpl" + "github.com/DataDog/datadog-agent/pkg/logs/launchers" + "github.com/DataDog/datadog-agent/pkg/logs/message" + "github.com/DataDog/datadog-agent/pkg/logs/pipeline" + "github.com/DataDog/datadog-agent/pkg/logs/processor" + "github.com/DataDog/datadog-agent/pkg/logs/schedulers/ad" + "github.com/DataDog/datadog-agent/pkg/logs/sources" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +const defaultCoreConfigPath = "bin/agent/dist/datadog.yaml" + +// CliParams holds the command-line argument and dependencies for the analyze-logs subcommand. +type CliParams struct { + *command.GlobalParams + + // LogConfigPath represents the path to the logs configuration file. + LogConfigPath string + + // CoreConfigPath represents the path to the core configuration file. + CoreConfigPath string +} + +// Commands returns a slice of subcommands for the 'agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &CliParams{ + GlobalParams: globalParams, + CoreConfigPath: defaultCoreConfigPath, // Set default path + } + + cmd := &cobra.Command{ + Use: "analyze-logs", + Short: "Analyze logs configuration in isolation", + Long: `Run a Datadog agent logs configuration and print the results to stdout`, + RunE: func(_ *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("log config file path is required") + } + cliParams.LogConfigPath = args[0] + return fxutil.OneShot(runAnalyzeLogs, + core.Bundle(), + fx.Supply(cliParams), + fx.Supply(command.GetDefaultCoreBundleParams(cliParams.GlobalParams)), + ) + }, + } + + // Add flag for core config (optional) + cmd.Flags().StringVarP(&cliParams.CoreConfigPath, "core-config", "C", defaultCoreConfigPath, "Path to the core configuration file (optional)") + + return []*cobra.Command{cmd} +} + +// runAnalyzeLogs initializes the launcher and sends the log config file path to the source provider. +func runAnalyzeLogs(cliParams *CliParams, config config.Component) error { + outputChan, launchers, pipelineProvider := runAnalyzeLogsHelper(cliParams, config) + // Set up an inactivity timeout + inactivityTimeout := 1 * time.Second + idleTimer := time.NewTimer(inactivityTimeout) + + for { + select { + case msg := <-outputChan: + parsedMessage := processor.JSONPayload + err := json.Unmarshal(msg.GetContent(), &parsedMessage) + if err != nil { + fmt.Printf("Failed to parse message: %v\n", err) + continue + } + + fmt.Println(parsedMessage.Message) + + // Reset the inactivity timer every time a message is processed + if !idleTimer.Stop() { + <-idleTimer.C + } + idleTimer.Reset(inactivityTimeout) + case <-idleTimer.C: + // Timeout reached, signal quit + pipelineProvider.Stop() + launchers.Stop() + return nil + } + } +} + +// Used to make testing easier +func runAnalyzeLogsHelper(cliParams *CliParams, config config.Component) (chan *message.Message, *launchers.Launchers, pipeline.Provider) { + configSource := sources.NewConfigSources() + wd, err := os.Getwd() + if err != nil { + fmt.Println("Cannot get working directory") + return nil, nil, nil + } + absolutePath := wd + "/" + cliParams.LogConfigPath + data, err := os.ReadFile(absolutePath) + if err != nil { + fmt.Println("Cannot read file path of logs config") + return nil, nil, nil + } + sources, err := ad.CreateSources(integration.Config{ + Provider: names.File, + LogsConfig: data, + }) + + if err != nil { + fmt.Println("Cannot create source") + return nil, nil, nil + } + + for _, source := range sources { + if source.Config.TailingMode == "" { + source.Config.TailingMode = "beginning" + } + configSource.AddSource(source) + } + return agentimpl.SetUpLaunchers(config, configSource) +} diff --git a/cmd/agent/subcommands/analyzelogs/command_test.go b/cmd/agent/subcommands/analyzelogs/command_test.go new file mode 100644 index 0000000000000..0f326ee8bbf4f --- /dev/null +++ b/cmd/agent/subcommands/analyzelogs/command_test.go @@ -0,0 +1,143 @@ +// 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 analyzelogs + +import ( + "encoding/json" + "fmt" + "os" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/cmd/agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/pkg/logs/processor" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestCommand(t *testing.T) { + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + []string{"analyze-logs", "path/to/log/config.yaml"}, + runAnalyzeLogs, + func(_ core.BundleParams, cliParams *CliParams) { + require.Equal(t, "path/to/log/config.yaml", cliParams.LogConfigPath) + require.Equal(t, defaultCoreConfigPath, cliParams.CoreConfigPath) + }) +} + +func CreateTestFile(tempDir string, fileName string, fileContent string) *os.File { + if _, err := os.Stat(tempDir); os.IsNotExist(err) { + err = os.MkdirAll(tempDir, 0755) + if err != nil { + return nil + } + } + + filePath := fmt.Sprintf("%s/%s", tempDir, fileName) + + tempFile, err := os.Create(filePath) + if err != nil { + return nil + } + + _, err = tempFile.Write([]byte(fileContent)) + if err != nil { + tempFile.Close() // Close file before returning + return nil + } + + tempFile.Close() + + file, err := os.Open(filePath) + if err != nil { + return nil + } + return file +} + +func TestRunAnalyzeLogs(t *testing.T) { + tempDir := "tmp" + defer os.RemoveAll(tempDir) + + // Write config content to the temp file + logConfig := `=== apm check === +Configuration provider: file +Configuration source: file:/opt/datadog-agent/etc/conf.d/apm.yaml.default +Config for instance ID: apm:1234567890abcdef +{} + +=== container_image check === +Configuration provider: file +Configuration source: file:/opt/datadog-agent/etc/conf.d/container_image.d/conf.yaml.default +Config for instance ID: container_image:abcdef1234567890 +{} +~ +Auto-discovery IDs: +* _container_image +=== +` + // Create a temporary config file + tempLogFile := CreateTestFile(tempDir, "wack.log", logConfig) + assert.NotNil(t, tempLogFile) + defer os.Remove(tempLogFile.Name()) // Cleanup the temp file after the test + + yamlContent := fmt.Sprintf(`logs: + - type: file + path: %s + log_processing_rules: + - type: exclude_at_match + name: exclude_random + pattern: "datadog-agent" + +`, tempLogFile.Name()) + tempConfigFile := CreateTestFile(tempDir, "config.yaml", yamlContent) + assert.NotNil(t, tempConfigFile) + + defer os.Remove(tempConfigFile.Name()) + // Write config content to the temp file + + // Create a mock config + config := config.NewMock(t) + + // Set CLI params + cliParams := &CliParams{ + LogConfigPath: tempConfigFile.Name(), + CoreConfigPath: tempConfigFile.Name(), + } + + outputChan, launcher, pipelineProvider := runAnalyzeLogsHelper(cliParams, config) + + expectedOutput := []string{ + "=== apm check ===", + "Configuration provider: file", + "Config for instance ID: apm:1234567890abcdef", + "{}", + "=== container_image check ===", + "Configuration provider: file", + "Config for instance ID: container_image:abcdef1234567890", + "{}", + "~", + "Auto-discovery IDs:", + "* _container_image", + "===", + } + + for i := 0; i < len(expectedOutput); i++ { + msg := <-outputChan + parsedMessage := processor.JSONPayload + err := json.Unmarshal(msg.GetContent(), &parsedMessage) + assert.NoError(t, err) + + assert.Equal(t, parsedMessage.Message, expectedOutput[i]) + } + + launcher.Stop() + pipelineProvider.Stop() +} diff --git a/cmd/agent/subcommands/subcommands.go b/cmd/agent/subcommands/subcommands.go index d9238caf6c0e3..939bdd2880f26 100644 --- a/cmd/agent/subcommands/subcommands.go +++ b/cmd/agent/subcommands/subcommands.go @@ -8,6 +8,7 @@ package subcommands import ( "github.com/DataDog/datadog-agent/cmd/agent/command" + cmdanalyzelogs "github.com/DataDog/datadog-agent/cmd/agent/subcommands/analyzelogs" cmdcheck "github.com/DataDog/datadog-agent/cmd/agent/subcommands/check" cmdconfig "github.com/DataDog/datadog-agent/cmd/agent/subcommands/config" cmdconfigcheck "github.com/DataDog/datadog-agent/cmd/agent/subcommands/configcheck" @@ -56,6 +57,7 @@ func AgentSubcommands() []command.SubcommandFactory { cmdhostname.Commands, cmdimport.Commands, cmdlaunchgui.Commands, + cmdanalyzelogs.Commands, cmdremoteconfig.Commands, cmdrun.Commands, cmdsecret.Commands, diff --git a/comp/logs/agent/agentimpl/analyze_logs_init.go b/comp/logs/agent/agentimpl/analyze_logs_init.go new file mode 100644 index 0000000000000..cfa476fb5a2ed --- /dev/null +++ b/comp/logs/agent/agentimpl/analyze_logs_init.go @@ -0,0 +1,61 @@ +// 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. + +//go:build !serverless + +package agentimpl + +import ( + "time" + + configComponent "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/logs/agent/config" + "github.com/DataDog/datadog-agent/comp/logs/agent/flare" + pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" + "github.com/DataDog/datadog-agent/pkg/logs/auditor" + "github.com/DataDog/datadog-agent/pkg/logs/diagnostic" + "github.com/DataDog/datadog-agent/pkg/logs/launchers" + filelauncher "github.com/DataDog/datadog-agent/pkg/logs/launchers/file" + "github.com/DataDog/datadog-agent/pkg/logs/message" + "github.com/DataDog/datadog-agent/pkg/logs/pipeline" + "github.com/DataDog/datadog-agent/pkg/logs/sources" + "github.com/DataDog/datadog-agent/pkg/logs/tailers" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +// SetUpLaunchers creates intializes the launcher. The launchers schedule the tailers to read the log files provided by the analyze-logs command +func SetUpLaunchers(conf configComponent.Component, sourceProvider *sources.ConfigSources) (chan *message.Message, *launchers.Launchers, pipeline.Provider) { + processingRules, err := config.GlobalProcessingRules(conf) + if err != nil { + log.Errorf("Error while getting processing rules from config: %v", err) + return nil, nil, nil + } + + diagnosticMessageReceiver := diagnostic.NewBufferedMessageReceiver(nil, nil) + pipelineProvider := pipeline.NewProcessorOnlyProvider(diagnosticMessageReceiver, processingRules, conf, nil) + + // setup the launchers + lnchrs := launchers.NewLaunchers(nil, pipelineProvider, nil, nil) + fileLimits := pkgconfigsetup.Datadog().GetInt("logs_config.open_files_limit") + fileValidatePodContainer := pkgconfigsetup.Datadog().GetBool("logs_config.validate_pod_container_id") + fileScanPeriod := time.Duration(pkgconfigsetup.Datadog().GetFloat64("logs_config.file_scan_period") * float64(time.Second)) + fileWildcardSelectionMode := pkgconfigsetup.Datadog().GetString("logs_config.file_wildcard_selection_mode") + fileLauncher := filelauncher.NewLauncher( + fileLimits, + filelauncher.DefaultSleepDuration, + fileValidatePodContainer, + fileScanPeriod, + fileWildcardSelectionMode, + flare.NewFlareController(), + nil) + tracker := tailers.NewTailerTracker() + + a := auditor.NewNullAuditor() + pipelineProvider.Start() + fileLauncher.Start(sourceProvider, pipelineProvider, a, tracker) + lnchrs.AddLauncher(fileLauncher) + outputChan := pipelineProvider.GetOutputChan() + return outputChan, lnchrs, pipelineProvider +} diff --git a/pkg/logs/launchers/types.go b/pkg/logs/launchers/types.go index 8585db583c104..fcba401073eb4 100644 --- a/pkg/logs/launchers/types.go +++ b/pkg/logs/launchers/types.go @@ -13,7 +13,7 @@ import ( ) // Launcher implementations launch logs pipelines in response to sources, and -// mange those pipelines' lifetime. +// manage those pipelines' lifetime. // // Launchers are started when the logs-agent starts, or when they are added to // the agent, and stopped when it stops. diff --git a/pkg/logs/pipeline/mock/mock.go b/pkg/logs/pipeline/mock/mock.go index 448ea1fb2416f..0dfaab71e6ec9 100644 --- a/pkg/logs/pipeline/mock/mock.go +++ b/pkg/logs/pipeline/mock/mock.go @@ -44,6 +44,10 @@ func (p *mockProvider) StopSDSProcessing() error { return nil } +func (p *mockProvider) GetOutputChan() chan *message.Message { + return nil +} + // Flush does nothing // //nolint:revive // TODO(AML) Fix revive linter diff --git a/pkg/logs/pipeline/processor_only_provider.go b/pkg/logs/pipeline/processor_only_provider.go new file mode 100644 index 0000000000000..906675e1360ff --- /dev/null +++ b/pkg/logs/pipeline/processor_only_provider.go @@ -0,0 +1,86 @@ +// 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 pipeline + +import ( + "context" + "strconv" + + "github.com/DataDog/datadog-agent/comp/core/hostname/hostnameinterface" + "github.com/DataDog/datadog-agent/comp/logs/agent/config" + pkgconfigmodel "github.com/DataDog/datadog-agent/pkg/config/model" + pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" + "github.com/DataDog/datadog-agent/pkg/logs/diagnostic" + "github.com/DataDog/datadog-agent/pkg/logs/message" + "github.com/DataDog/datadog-agent/pkg/logs/metrics" + "github.com/DataDog/datadog-agent/pkg/logs/processor" +) + +// processorOnlyProvider implements the Provider provider interface and only contains the processor +type processorOnlyProvider struct { + processor *processor.Processor + inputChan chan *message.Message + outputChan chan *message.Message + pipelineMonitor *metrics.TelemetryPipelineMonitor +} + +// NewProcessorOnlyProvider is used by the logs check subcommand as the feature does not require the functionalities of the log pipeline other then the processor. +func NewProcessorOnlyProvider(diagnosticMessageReceiver diagnostic.MessageReceiver, processingRules []*config.ProcessingRule, cfg pkgconfigmodel.Reader, hostname hostnameinterface.Component) Provider { + chanSize := pkgconfigsetup.Datadog().GetInt("logs_config.message_channel_size") + outputChan := make(chan *message.Message, chanSize) + encoder := processor.JSONEncoder + inputChan := make(chan *message.Message, chanSize) + pipelineID := 0 + pipelineMonitor := metrics.NewTelemetryPipelineMonitor(strconv.Itoa(pipelineID)) + processor := processor.New(cfg, inputChan, outputChan, processingRules, + encoder, diagnosticMessageReceiver, hostname, pipelineMonitor) + + p := &processorOnlyProvider{ + processor: processor, + inputChan: inputChan, + outputChan: outputChan, + pipelineMonitor: pipelineMonitor, + } + + return p +} + +func (p *processorOnlyProvider) Start() { + p.processor.Start() +} + +func (p *processorOnlyProvider) Stop() { + p.processor.Stop() +} + +func (p *processorOnlyProvider) ReconfigureSDSStandardRules(_ []byte) (bool, error) { + return false, nil +} + +func (p *processorOnlyProvider) ReconfigureSDSAgentConfig(_ []byte) (bool, error) { + return false, nil +} + +func (p *processorOnlyProvider) StopSDSProcessing() error { + return nil +} + +func (p *processorOnlyProvider) NextPipelineChan() chan *message.Message { + return p.inputChan +} + +func (p *processorOnlyProvider) NextPipelineChanWithMonitor() (chan *message.Message, metrics.PipelineMonitor) { + return p.inputChan, p.pipelineMonitor +} + +func (p *processorOnlyProvider) GetOutputChan() chan *message.Message { + return p.outputChan +} + +// Flush flushes synchronously all the contained pipeline of this provider. +func (p *processorOnlyProvider) Flush(ctx context.Context) { + p.processor.Flush(ctx) +} diff --git a/pkg/logs/pipeline/provider.go b/pkg/logs/pipeline/provider.go index 9ee6ec8a5dfa0..15561004e8379 100644 --- a/pkg/logs/pipeline/provider.go +++ b/pkg/logs/pipeline/provider.go @@ -33,6 +33,7 @@ type Provider interface { ReconfigureSDSAgentConfig(config []byte) (bool, error) StopSDSProcessing() error NextPipelineChan() chan *message.Message + GetOutputChan() chan *message.Message NextPipelineChanWithMonitor() (chan *message.Message, metrics.PipelineMonitor) // Flush flushes all pipeline contained in this Provider Flush(ctx context.Context) @@ -183,6 +184,10 @@ func (p *provider) NextPipelineChan() chan *message.Message { return nextPipeline.InputChan } +func (p *provider) GetOutputChan() chan *message.Message { + return nil +} + // NextPipelineChanWithMonitor returns the next pipeline input channel with it's monitor. func (p *provider) NextPipelineChanWithMonitor() (chan *message.Message, metrics.PipelineMonitor) { pipelinesLen := len(p.pipelines) diff --git a/pkg/logs/processor/json.go b/pkg/logs/processor/json.go index 59d9503d93bea..d19b3f8406c93 100644 --- a/pkg/logs/processor/json.go +++ b/pkg/logs/processor/json.go @@ -18,6 +18,9 @@ const nanoToMillis = 1000000 // JSONEncoder is a shared json encoder. var JSONEncoder Encoder = &jsonEncoder{} +// JSONPayload is a shared JSON representation of a message +var JSONPayload = jsonPayload{} + // jsonEncoder transforms a message into a JSON byte array. type jsonEncoder struct{} diff --git a/pkg/logs/sources/config_source.go b/pkg/logs/sources/config_source.go new file mode 100644 index 0000000000000..649dd28fd689a --- /dev/null +++ b/pkg/logs/sources/config_source.go @@ -0,0 +1,46 @@ +// 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 sources + +// ConfigSources receives file paths to log configs and creates sources. The sources are added to a channel and read by the launcher. +// This class implements the SourceProvider interface +type ConfigSources struct { + addedByType map[string][]*LogSource +} + +// NewConfigSources provides an instance of ConfigSources. +func NewConfigSources() *ConfigSources { + return &ConfigSources{ + addedByType: make(map[string][]*LogSource), + } +} + +// AddSource adds source to the map of stored sources by type. +func (s *ConfigSources) AddSource(source *LogSource) { + s.addedByType[source.Config.Type] = append(s.addedByType[source.Config.Type], source) +} + +// SubscribeAll is required for the SourceProvider interface +func (s *ConfigSources) SubscribeAll() (added chan *LogSource, _ chan *LogSource) { + return +} + +// SubscribeForType returns a channel carrying LogSources for a given source type +func (s *ConfigSources) SubscribeForType(sourceType string) (added chan *LogSource, _ chan *LogSource) { + added = make(chan *LogSource) + go func() { + for _, logSource := range s.addedByType[sourceType] { + added <- logSource + } + }() + + return added, nil +} + +// GetAddedForType is required for the SourceProvider interface +func (s *ConfigSources) GetAddedForType(_ string) chan *LogSource { + return nil +} diff --git a/pkg/logs/sources/config_source_test.go b/pkg/logs/sources/config_source_test.go new file mode 100644 index 0000000000000..d66227cae62f5 --- /dev/null +++ b/pkg/logs/sources/config_source_test.go @@ -0,0 +1,82 @@ +// 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 sources + +import ( + "fmt" + "os" + "testing" + + "github.com/stretchr/testify/assert" + + logsConfig "github.com/DataDog/datadog-agent/comp/logs/agent/config" +) + +func CreateTestFile(tempDir string) *os.File { + // Ensure the directory exists + err := os.MkdirAll(tempDir, 0755) + if err != nil { + return nil + } + + // Specify the exact file name + filePath := fmt.Sprintf("%s/config.yaml", tempDir) + + // Create the file with the specified name + tempFile, err := os.Create(filePath) + if err != nil { + return nil + } + + // Write the content to the file + configContent := `logs: + - type: file + path: "/tmp/test.log" + service: "custom_logs" + source: "custom"` + + _, err = tempFile.Write([]byte(configContent)) + if err != nil { + tempFile.Close() // Close file before returning + return nil + } + + // Close the file after writing + tempFile.Close() + + // Reopen the file for returning if needed + file, err := os.Open(filePath) + if err != nil { + return nil + } + return file +} + +func TestSubscribeForTypeAndAddFileSource(t *testing.T) { + tempDir := "tmp/" + tempFile := CreateTestFile(tempDir) + defer os.RemoveAll(tempDir) + defer os.Remove(tempFile.Name()) + + wd, err := os.Getwd() + assert.NoError(t, err) + absolutePath := wd + "/" + tempFile.Name() + data, err := os.ReadFile(absolutePath) + assert.NoError(t, err) + logsConfig, err := logsConfig.ParseYAML(data) + assert.NoError(t, err) + configSource := NewConfigSources() + for _, cfg := range logsConfig { + source := NewLogSource("test-config-name", cfg) + configSource.AddSource(source) + } + + addedChan, _ := configSource.SubscribeForType("file") + added := <-addedChan + assert.NotNil(t, added) + assert.Equal(t, "file", added.Config.Type) + assert.Equal(t, "/tmp/test.log", added.Config.Path) +} diff --git a/releasenotes/notes/logs-check-feature-13a93c589fe0613d.yaml b/releasenotes/notes/logs-check-feature-13a93c589fe0613d.yaml new file mode 100644 index 0000000000000..b842e4e8f8a53 --- /dev/null +++ b/releasenotes/notes/logs-check-feature-13a93c589fe0613d.yaml @@ -0,0 +1,15 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + The Logs Agent Analyze feature introduces a new subcommand, `agent analyze-logs`, within the Datadog Agent. + This tool helps users test log configurations, regular expressions, and processing rules in isolation. + It offers a streamlined, cost-effective way to validate log configurations without + running the entire Datadog Agent or sending data to Datadog. This allows users to quickly identify configuration issues. + From 8a450cc476d33f6374164f1f00d92cdf65309558 Mon Sep 17 00:00:00 2001 From: Guy Arbitman Date: Tue, 10 Dec 2024 22:53:44 +0200 Subject: [PATCH 106/303] usm: telemetry: tests: Move Clear method to test only file (#31981) --- pkg/network/protocols/telemetry/registry.go | 12 ------------ .../protocols/telemetry/registry_testutil.go | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 12 deletions(-) create mode 100644 pkg/network/protocols/telemetry/registry_testutil.go diff --git a/pkg/network/protocols/telemetry/registry.go b/pkg/network/protocols/telemetry/registry.go index d80df1df3394b..a49c997e5899d 100644 --- a/pkg/network/protocols/telemetry/registry.go +++ b/pkg/network/protocols/telemetry/registry.go @@ -60,18 +60,6 @@ func (r *registry) GetMetrics(params ...string) []metric { return result } -// Clear metrics -// WARNING: Only intended for tests -func Clear() { - globalRegistry.Lock() - globalRegistry.metrics = nil - globalRegistry.Unlock() - - telemetryDelta.mux.Lock() - telemetryDelta.stateByClientID = make(map[string]*clientState) - telemetryDelta.mux.Unlock() -} - func init() { globalRegistry = new(registry) } diff --git a/pkg/network/protocols/telemetry/registry_testutil.go b/pkg/network/protocols/telemetry/registry_testutil.go new file mode 100644 index 0000000000000..46777d052b4cc --- /dev/null +++ b/pkg/network/protocols/telemetry/registry_testutil.go @@ -0,0 +1,19 @@ +// 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 2024-present Datadog, Inc. + +//go:build test + +package telemetry + +// Clear metrics +func Clear() { + globalRegistry.Lock() + globalRegistry.metrics = nil + globalRegistry.Unlock() + + telemetryDelta.mux.Lock() + telemetryDelta.stateByClientID = make(map[string]*clientState) + telemetryDelta.mux.Unlock() +} From 706fa948ac9d4d30b2d799eeb1db3dc3f8e1b501 Mon Sep 17 00:00:00 2001 From: Daniel Tafoya <63120739+daniel-taf@users.noreply.github.com> Date: Tue, 10 Dec 2024 17:32:44 -0500 Subject: [PATCH 107/303] [PROCS-4589] Split K8s e2e test (#31985) --- test/new-e2e/tests/process/k8s_test.go | 29 ++++++++++++++++++-------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/test/new-e2e/tests/process/k8s_test.go b/test/new-e2e/tests/process/k8s_test.go index 1533bea01cb36..7ec7ccff16888 100644 --- a/test/new-e2e/tests/process/k8s_test.go +++ b/test/new-e2e/tests/process/k8s_test.go @@ -156,21 +156,32 @@ func (s *K8sSuite) TestProcessDiscoveryCheck() { assertProcessDiscoveryCollected(t, payloads, "stress-ng-cpu [run]") } -func (s *K8sSuite) TestProcessCheckInCoreAgent() { - t := s.T() +type K8sCoreAgentSuite struct { + e2e.BaseSuite[environments.Kubernetes] +} +func TestK8sCoreAgentTestSuite(t *testing.T) { + t.Parallel() helmValues, err := createHelmValues(helmConfig{ ProcessCollection: true, RunInCoreAgent: true, }) require.NoError(t, err) - s.UpdateEnv(awskubernetes.KindProvisioner( - awskubernetes.WithWorkloadApp(func(e config.Env, kubeProvider *kubernetes.Provider) (*kubeComp.Workload, error) { - return cpustress.K8sAppDefinition(e, kubeProvider, "workload-stress") - }), - awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(helmValues)), - )) + options := []e2e.SuiteOption{ + e2e.WithProvisioner(awskubernetes.KindProvisioner( + awskubernetes.WithWorkloadApp(func(e config.Env, kubeProvider *kubernetes.Provider) (*kubeComp.Workload, error) { + return cpustress.K8sAppDefinition(e, kubeProvider, "workload-stress") + }), + awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(helmValues)), + )), + } + + e2e.Run(t, &K8sCoreAgentSuite{}, options...) +} + +func (s *K8sCoreAgentSuite) TestProcessCheckInCoreAgent() { + t := s.T() var status AgentStatus defer func() { @@ -207,7 +218,7 @@ func (s *K8sSuite) TestProcessCheckInCoreAgent() { assertContainersNotCollected(t, payloads, []string{"process-agent"}) } -func (s *K8sSuite) TestProcessCheckInCoreAgentWithNPM() { +func (s *K8sCoreAgentSuite) TestProcessCheckInCoreAgentWithNPM() { t := s.T() helmValues, err := createHelmValues(helmConfig{ From c37d0d65dfc4aa84ba645881dd562d29597cfb11 Mon Sep 17 00:00:00 2001 From: Alexandre Yang Date: Wed, 11 Dec 2024 09:48:22 +0100 Subject: [PATCH 108/303] [netpath] Add initial e2e tests for Network Path Integration (#31964) --- .github/CODEOWNERS | 1 + .gitlab-ci.yml | 10 +++ .gitlab/e2e/e2e.yml | 9 ++ .../netpath/network_path_integration_test.go | 88 +++++++++++++++++++ 4 files changed, 108 insertions(+) create mode 100644 test/new-e2e/tests/netpath/network_path_integration_test.go diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 51fba3f61278c..4647c2ede6ae0 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -607,6 +607,7 @@ /test/new-e2e/tests/language-detection @DataDog/processes /test/new-e2e/tests/ndm @DataDog/ndm-core /test/new-e2e/tests/ndm/netflow @DataDog/ndm-integrations +/test/new-e2e/tests/netpath @DataDog/Networks @DataDog/network-device-monitoring /test/new-e2e/tests/npm @DataDog/Networks /test/new-e2e/tests/npm/ec2_1host_wkit_test.go @DataDog/Networks @DataDog/windows-kernel-integrations /test/new-e2e/tests/orchestrator @DataDog/container-app diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index abfece6aac73b..67afb78dc55d8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -981,6 +981,16 @@ workflow: compare_to: main # TODO: use a variable, when this is supported https://gitlab.com/gitlab-org/gitlab/-/issues/369916 when: on_success +.on_netpath_or_e2e_changes: + - !reference [.on_e2e_main_release_or_rc] + - changes: + paths: + - pkg/collector/corechecks/networkpath/**/* + - test/new-e2e/tests/netpath/**/* + - test/new-e2e/go.mod + compare_to: main # TODO: use a variable, when this is supported https://gitlab.com/gitlab-org/gitlab/-/issues/369916 + when: on_success + .on_otel_or_e2e_changes: - !reference [.on_e2e_main_release_or_rc] - changes: diff --git a/.gitlab/e2e/e2e.yml b/.gitlab/e2e/e2e.yml index 6064179b1069b..c62f11a8165e2 100644 --- a/.gitlab/e2e/e2e.yml +++ b/.gitlab/e2e/e2e.yml @@ -511,6 +511,15 @@ new-e2e-ha-agent: TARGETS: ./tests/ha-agent TEAM: ndm-core +new-e2e-netpath: + extends: .new_e2e_template_needs_deb_x64 + rules: + - !reference [.on_netpath_or_e2e_changes] + - !reference [.manual] + variables: + TARGETS: ./tests/netpath + TEAM: network-performance-monitoring + new-e2e-windows-systemprobe: extends: .new_e2e_template rules: diff --git a/test/new-e2e/tests/netpath/network_path_integration_test.go b/test/new-e2e/tests/netpath/network_path_integration_test.go new file mode 100644 index 0000000000000..d93729d413f7a --- /dev/null +++ b/test/new-e2e/tests/netpath/network_path_integration_test.go @@ -0,0 +1,88 @@ +// 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 netpath contains e2e tests for Network Path Integration feature +package netpath + +import ( + _ "embed" + "fmt" + "testing" + "time" + + "github.com/DataDog/datadog-agent/test/fakeintake/aggregator" + fakeintakeclient "github.com/DataDog/datadog-agent/test/fakeintake/client" + "github.com/DataDog/test-infra-definitions/components/datadog/agentparams" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" + awshost "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/host" +) + +type networkPathIntegrationTestSuite struct { + e2e.BaseSuite[environments.Host] +} + +// TestNetworkPathIntegrationSuite runs the Network Path Integration e2e suite +func TestNetworkPathIntegrationSuite(t *testing.T) { + // language=yaml + sysProbeConfig := ` +traceroute: + enabled: true +` + + // language=yaml + networkPathIntegration := ` +instances: +- hostname: api.datadoghq.eu + protocol: TCP + port: 443 +- hostname: 8.8.8.8 + protocol: UDP +` + + e2e.Run(t, &networkPathIntegrationTestSuite{}, e2e.WithProvisioner(awshost.Provisioner( + awshost.WithAgentOptions( + agentparams.WithSystemProbeConfig(sysProbeConfig), + agentparams.WithIntegration("network_path.d", networkPathIntegration), + )), + )) +} + +func (s *networkPathIntegrationTestSuite) TestNetworkPathIntegrationMetrics() { + fakeClient := s.Env().FakeIntake.Client() + + s.EventuallyWithT(func(c *assert.CollectT) { + s.T().Log("try assert datadog.network_path.path.monitored metric") + metrics, err := fakeClient.FilterMetrics("datadog.network_path.path.monitored") + require.NoError(c, err) + assert.NotEmpty(c, metrics) + for _, metric := range metrics { + s.T().Logf(" datadog.network_path.path.monitored metric tags: %+v", metric.Tags) + } + + destinationsTagsToAssert := [][]string{ + {"destination_hostname:api.datadoghq.eu", "protocol:TCP", "destination_port:443"}, + {"destination_hostname:8.8.8.8", "protocol:UDP"}, + } + for _, tags := range destinationsTagsToAssert { + // assert destination is monitored + metrics, err = fakeClient.FilterMetrics("datadog.network_path.path.monitored", fakeintakeclient.WithTags[*aggregator.MetricSeries](tags)) + assert.NoError(c, err) + assert.NotEmpty(c, metrics, fmt.Sprintf("metric with tags `%v` not found", tags)) + + // assert hops + metrics, err = fakeClient.FilterMetrics("datadog.network_path.path.hops", + fakeintakeclient.WithTags[*aggregator.MetricSeries](tags), + fakeintakeclient.WithMetricValueHigherThan(0), + ) + assert.NoError(c, err) + assert.NotEmpty(c, metrics, fmt.Sprintf("metric with tags `%v` not found", tags)) + + } + }, 5*time.Minute, 3*time.Second) +} From d8ef0ba07644c99e1c65f49a299890119a28529a Mon Sep 17 00:00:00 2001 From: Florent Clarret Date: Wed, 11 Dec 2024 10:01:46 +0100 Subject: [PATCH 109/303] Update the exclude_members for the QA card in the Agent Delivery team (#31994) --- .ddqa/config.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ddqa/config.toml b/.ddqa/config.toml index eac6d757e5282..19af82cde8450 100644 --- a/.ddqa/config.toml +++ b/.ddqa/config.toml @@ -48,7 +48,7 @@ jira_issue_type = "Task" jira_statuses = ["To Do", "In Progress", "Done"] github_team = "agent-delivery" github_labels = ["team/agent-delivery"] -exclude_members = ["hithwen"] +exclude_members = ["KSerrania"] [teams."Universal Service Monitoring"] jira_project = "USMON" From 496b97f64d980a5fc0859ab039d4f0c3e7718b9f Mon Sep 17 00:00:00 2001 From: Raphael Gavache Date: Wed, 11 Dec 2024 10:11:40 +0100 Subject: [PATCH 110/303] [fleet] First working set of databricks script e2e (#31984) --- pkg/fleet/installer/setup/common/config.go | 7 +++++-- pkg/fleet/installer/setup/djm/databricks.go | 6 +++--- pkg/fleet/installer/setup/setup.go | 9 +++++---- .../tests/installer/script/databricks_test.go | 19 +++++++++++++++---- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/pkg/fleet/installer/setup/common/config.go b/pkg/fleet/installer/setup/common/config.go index 2fb775ed1066e..865b617c6283a 100644 --- a/pkg/fleet/installer/setup/common/config.go +++ b/pkg/fleet/installer/setup/common/config.go @@ -18,7 +18,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/fleet/installer/oci" "github.com/DataDog/datadog-agent/pkg/fleet/installer/packages" "github.com/DataDog/datadog-agent/pkg/fleet/internal/exec" - "github.com/DataDog/datadog-agent/pkg/fleet/internal/paths" "gopkg.in/yaml.v2" ) @@ -220,7 +219,11 @@ func (i *HostInstaller) ConfigureAndInstall(ctx context.Context) error { return fmt.Errorf("failed to write configurations: %w", err) } - cmd := exec.NewInstallerExec(i.env, paths.StableInstallerPath) + exePath, err := os.Executable() + if err != nil { + return fmt.Errorf("failed to get executable path: %w", err) + } + cmd := exec.NewInstallerExec(i.env, exePath) if i.injectorVersion != "" { if err := cmd.Install(ctx, oci.PackageURL(i.env, "datadog-apm-inject", i.injectorVersion), nil); err != nil { diff --git a/pkg/fleet/installer/setup/djm/databricks.go b/pkg/fleet/installer/setup/djm/databricks.go index f13127c4dcbc5..0e6675b3aa2ae 100644 --- a/pkg/fleet/installer/setup/djm/databricks.go +++ b/pkg/fleet/installer/setup/djm/databricks.go @@ -19,9 +19,9 @@ import ( ) const ( - databricksInjectorVersion = "0.21.0" - databricksJavaVersion = "1.41.1" - databricksAgentVersion = "7.57.2" + databricksInjectorVersion = "0.21.0-1" + databricksJavaVersion = "1.41.1-1" + databricksAgentVersion = "7.57.2-1" logsService = "databricks" ) diff --git a/pkg/fleet/installer/setup/setup.go b/pkg/fleet/installer/setup/setup.go index 89b122d343aae..0daa479d73b6e 100644 --- a/pkg/fleet/installer/setup/setup.go +++ b/pkg/fleet/installer/setup/setup.go @@ -11,6 +11,7 @@ import ( "fmt" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/packages" "github.com/DataDog/datadog-agent/pkg/fleet/installer/setup/djm" "github.com/DataDog/datadog-agent/pkg/fleet/internal/exec" "github.com/DataDog/datadog-agent/pkg/fleet/internal/paths" @@ -25,11 +26,11 @@ const ( func Setup(ctx context.Context, env *env.Env, flavor string) error { switch flavor { case FlavorDatabricks: - // temporary until the whole e2e test pipeline is setup + if err := packages.SetupInstaller(ctx); err != nil { + return fmt.Errorf("failed to setup installer: %w", err) + } if err := djm.SetupDatabricks(ctx, env); err != nil { - fmt.Printf("Databricks setup failed: %v\n", err) - } else { - fmt.Println("Databricks setup completed") + return fmt.Errorf("failed to setup Databricks: %w", err) } return nil default: diff --git a/test/new-e2e/tests/installer/script/databricks_test.go b/test/new-e2e/tests/installer/script/databricks_test.go index f947ae38336cc..af0a2d9439f76 100644 --- a/test/new-e2e/tests/installer/script/databricks_test.go +++ b/test/new-e2e/tests/installer/script/databricks_test.go @@ -24,11 +24,22 @@ type vmUpdaterSuite struct { func (s *vmUpdaterSuite) TestInstallScript() { url := fmt.Sprintf("https://installtesting.datad0g.com/%s/scripts/install-databricks.sh", s.commitHash) - s.Env().RemoteHost.MustExecute(fmt.Sprintf("curl -L %s > install_script; export DD_INSTALLER_REGISTRY_URL_INSTALLER_PACKAGE=installtesting.datad0g.com; sudo -E bash install_script", url)) + + // worker + s.Env().RemoteHost.MustExecute(fmt.Sprintf("curl -L %s > install_script; export DD_API_KEY=test; export DD_INSTALLER_REGISTRY_URL_INSTALLER_PACKAGE=installtesting.datad0g.com; sudo -E bash install_script", url)) + s.Env().RemoteHost.MustExecute("sudo test -d /opt/datadog-packages/datadog-agent/7.57.2-1") + + // driver + s.Env().RemoteHost.MustExecute(fmt.Sprintf("curl -L %s > install_script; export DB_IS_DRIVER=true; export DD_API_KEY=test; export DD_INSTALLER_REGISTRY_URL_INSTALLER_PACKAGE=installtesting.datad0g.com; sudo -E bash install_script", url)) + s.Env().RemoteHost.MustExecute("sudo test -d /opt/datadog-packages/datadog-agent/7.57.2-1") + s.Env().RemoteHost.MustExecute("sudo test -d /opt/datadog-packages/datadog-apm-inject/0.21.0") + s.Env().RemoteHost.MustExecute("sudo test -d /opt/datadog-packages/datadog-apm-library-java/1.41.1") } func TestUpdaterSuite(t *testing.T) { - e2e.Run(t, &vmUpdaterSuite{commitHash: os.Getenv("CI_COMMIT_SHA")}, e2e.WithProvisioner(awshost.ProvisionerNoFakeIntake( - awshost.WithEC2InstanceOptions(ec2.WithOSArch(osdesc.UbuntuDefault, osdesc.ARM64Arch)), - ))) + for _, arch := range []osdesc.Architecture{osdesc.AMD64Arch, osdesc.ARM64Arch} { + e2e.Run(t, &vmUpdaterSuite{commitHash: os.Getenv("CI_COMMIT_SHA")}, e2e.WithProvisioner(awshost.ProvisionerNoFakeIntake( + awshost.WithEC2InstanceOptions(ec2.WithOSArch(osdesc.UbuntuDefault, arch)), + ))) + } } From d407f0129827fa1942d9e26a6d56daf208d6de40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Wed, 11 Dec 2024 10:50:18 +0100 Subject: [PATCH 111/303] omnibus: add more patterns to the env exclusion list (#31995) --- tasks/libs/common/omnibus.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tasks/libs/common/omnibus.py b/tasks/libs/common/omnibus.py index 803400026082b..b789b287da611 100644 --- a/tasks/libs/common/omnibus.py +++ b/tasks/libs/common/omnibus.py @@ -38,6 +38,7 @@ def env_filter(item): 'AGENT_', 'API_KEY_', 'APP_KEY_', + 'ATLASSIAN_', 'AWS_', 'BAZEL_', 'BETA_', @@ -53,13 +54,14 @@ def env_filter(item): 'DESTINATION_', 'DOCKER_', 'DYNAMIC_', - 'E2E_TESTS_', + 'E2E_', 'EMISSARY_', 'EXECUTOR_', 'FF_', 'GITHUB_', 'GITLAB_', 'GIT_', + 'INSTALLER_', 'JIRA_', 'K8S_', 'KITCHEN_', @@ -103,6 +105,8 @@ def env_filter(item): "CHART", "CI", "CLUSTER", + "CODECOV", + "CODECOV_TOKEN", "COMPUTERNAME", "CONDA_PROMPT_MODIFIER", "CONSUL_HTTP_ADDR", @@ -124,6 +128,7 @@ def env_filter(item): "HOST_IP", "INFOPATH", "INSTALL_SCRIPT_API_KEY_ORG2", + "INSTANCE_TYPE", "INTEGRATION_WHEELS_CACHE_BUCKET", "IRBRC", "KITCHEN_INFRASTRUCTURE_FLAKES_RETRY", @@ -148,6 +153,7 @@ def env_filter(item): "SIGN", "SHELL", "SHLVL", + "SLACK_AGENT", "STATIC_BINARIES_DIR", "STATSD_URL", "SYSTEM_PROBE_BINARIES_DIR", From 8ca1369d2b6deeee0c640ce05dfe2c38186b61d5 Mon Sep 17 00:00:00 2001 From: Jonathan Ribas Date: Wed, 11 Dec 2024 10:52:35 +0100 Subject: [PATCH 112/303] [CWS] Enrich ptrace tracee resolution error log (#31962) --- pkg/security/probe/probe_ebpf.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/security/probe/probe_ebpf.go b/pkg/security/probe/probe_ebpf.go index e262eb2205607..ca55fb768bd5f 100644 --- a/pkg/security/probe/probe_ebpf.go +++ b/pkg/security/probe/probe_ebpf.go @@ -1097,7 +1097,8 @@ func (p *EBPFProbe) handleEvent(CPU int, data []byte) { } else { pid, err := utils.TryToResolveTraceePid(event.ProcessContext.Process.Pid, event.PTrace.NSPID) if err != nil { - seclog.Debugf("PTrace err: %v", err) + seclog.Debugf("PTrace tracee resolution error for process %s in container %s: %v", + event.ProcessContext.Process.FileEvent.PathnameStr, containerID, err) return } pidToResolve = pid From 792e70ef02e03b36a744a0a3fa3e5963a2b6ea11 Mon Sep 17 00:00:00 2001 From: Steven Blumenthal Date: Wed, 11 Dec 2024 11:22:51 +0100 Subject: [PATCH 113/303] Remove flaky test marker on kind e2e test suite (#31998) --- flakes.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/flakes.yaml b/flakes.yaml index 49c403b802517..ab2af6b55f3ea 100644 --- a/flakes.yaml +++ b/flakes.yaml @@ -11,5 +11,3 @@ test/new-e2e/tests/containers: - TestECSSuite/TestCPU/metric___container.cpu.usage{^ecs_container_name:stress-ng$} - TestEKSSuite/TestCPU/metric___container.cpu.usage{^kube_deployment:stress-ng$,^kube_namespace:workload-cpustress$} - TestKindSuite/TestCPU/metric___container.cpu.usage{^kube_deployment:stress-ng$,^kube_namespace:workload-cpustress$} - - TestKindSuite/TestAdmissionControllerWithAutoDetectedLanguage - - TestKindSuite From d2418875c4f6f59e766962b4783625703a2954ed Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Wed, 11 Dec 2024 11:39:18 +0100 Subject: [PATCH 114/303] [CWS] cleanup hacky check for security-agent flavor in system-probe SBOM code path (#31988) --- pkg/config/setup/system_probe.go | 3 +++ pkg/sbom/collectors/host/host.go | 7 +------ pkg/sbom/types/types.go | 1 - pkg/security/tests/sbom_test.go | 9 --------- 4 files changed, 4 insertions(+), 16 deletions(-) diff --git a/pkg/config/setup/system_probe.go b/pkg/config/setup/system_probe.go index a31d90efac8d8..bdc97ee3d902a 100644 --- a/pkg/config/setup/system_probe.go +++ b/pkg/config/setup/system_probe.go @@ -80,6 +80,9 @@ func InitSystemProbeConfig(cfg pkgconfigmodel.Config) { cfg.BindEnvAndSetDefault("sbom.cache.clean_interval", "30m") // used by custom cache. cfg.BindEnvAndSetDefault("sbom.scan_queue.base_backoff", "5m") cfg.BindEnvAndSetDefault("sbom.scan_queue.max_backoff", "1h") + // those configs are used by the core agent path, but are not used by the system probe + cfg.SetKnown("sbom.container_image.enabled") + cfg.SetKnown("sbom.container_image.overlayfs_direct_scan") // Auto exit configuration cfg.BindEnvAndSetDefault("auto_exit.validation_period", 60) diff --git a/pkg/sbom/collectors/host/host.go b/pkg/sbom/collectors/host/host.go index 969dff47ba3a7..bb792b0e2f313 100644 --- a/pkg/sbom/collectors/host/host.go +++ b/pkg/sbom/collectors/host/host.go @@ -16,7 +16,6 @@ import ( workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" "github.com/DataDog/datadog-agent/pkg/sbom" "github.com/DataDog/datadog-agent/pkg/sbom/collectors" - "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/optional" "github.com/DataDog/datadog-agent/pkg/util/trivy" @@ -43,11 +42,7 @@ func (c *Collector) Init(cfg config.Component, wmeta optional.Option[workloadmet return err } c.trivyCollector = trivyCollector - if flavor.GetFlavor() == flavor.SecurityAgent { - c.opts = sbom.ScanOptions{Analyzers: []string{trivy.OSAnalyzers}, Fast: false, CollectFiles: true} - } else { - c.opts = sbom.ScanOptionsFromConfig(cfg, false) - } + c.opts = sbom.ScanOptionsFromConfig(cfg, false) return nil } diff --git a/pkg/sbom/types/types.go b/pkg/sbom/types/types.go index 8b5989cd5ed23..0e18db96da20b 100644 --- a/pkg/sbom/types/types.go +++ b/pkg/sbom/types/types.go @@ -23,7 +23,6 @@ type ScanOptions struct { Timeout time.Duration WaitAfter time.Duration Fast bool - CollectFiles bool UseMount bool OverlayFsScan bool } diff --git a/pkg/security/tests/sbom_test.go b/pkg/security/tests/sbom_test.go index 3a0588aba3861..c4309b029ba5c 100644 --- a/pkg/security/tests/sbom_test.go +++ b/pkg/security/tests/sbom_test.go @@ -10,7 +10,6 @@ package tests import ( "fmt" - "os" "os/exec" "testing" @@ -18,7 +17,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/secl/containerutils" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" - "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/avast/retry-go/v4" ) @@ -30,13 +28,6 @@ func TestSBOM(t *testing.T) { t.Skip("Skip test spawning docker containers on docker") } - originalFlavor := flavor.GetFlavor() - flavor.SetFlavor(flavor.SecurityAgent) - defer func() { - flavor.SetFlavor(originalFlavor) - }() - os.Chdir("/") - ruleDefs := []*rules.RuleDefinition{ { ID: "test_file_package", From f238a89194b1176281a0bfef2bcc7c253033aa64 Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Wed, 11 Dec 2024 11:52:41 +0100 Subject: [PATCH 115/303] [CWS] store dump in `localDumps` only if persist was successful (#32001) --- .../security_profile/dump/local_storage.go | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/pkg/security/security_profile/dump/local_storage.go b/pkg/security/security_profile/dump/local_storage.go index a1fa0c334806d..8510ea923b57b 100644 --- a/pkg/security/security_profile/dump/local_storage.go +++ b/pkg/security/security_profile/dump/local_storage.go @@ -182,16 +182,6 @@ func (storage *ActivityDumpLocalStorage) Persist(request config.StorageRequest, // set activity dump size for current encoding ad.Metadata.Size = uint64(len(raw.Bytes())) - // add the file to the list of local dumps (thus removing one or more files if we reached the limit) - if storage.localDumps != nil { - filePaths, ok := storage.localDumps.Get(ad.Metadata.Name) - if !ok { - storage.localDumps.Add(ad.Metadata.Name, &[]string{outputPath}) - } else { - *filePaths = append(*filePaths, outputPath) - } - } - // create output file _ = os.MkdirAll(request.OutputDirectory, 0400) tmpOutputPath := outputPath + ".tmp" @@ -221,6 +211,17 @@ func (storage *ActivityDumpLocalStorage) Persist(request config.StorageRequest, } seclog.Infof("[%s] file for [%s] written at: [%s]", request.Format, ad.GetSelectorStr(), outputPath) + + // add the file to the list of local dumps (thus removing one or more files if we reached the limit) + if storage.localDumps != nil { + filePaths, ok := storage.localDumps.Get(ad.Metadata.Name) + if !ok { + storage.localDumps.Add(ad.Metadata.Name, &[]string{outputPath}) + } else { + *filePaths = append(*filePaths, outputPath) + } + } + return nil } From 623bea046b6c811266d986ae1329b584f107e13a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A8le=20Oul=C3=A8s?= Date: Wed, 11 Dec 2024 12:07:29 +0100 Subject: [PATCH 116/303] Add tagger tags to pod manifests (#31565) --- comp/otelcol/ddflareextension/impl/go.mod | 2 +- comp/otelcol/ddflareextension/impl/go.sum | 4 ++-- comp/otelcol/logsagentpipeline/go.mod | 2 +- comp/otelcol/logsagentpipeline/go.sum | 4 ++-- .../logsagentpipelineimpl/go.mod | 2 +- .../logsagentpipelineimpl/go.sum | 4 ++-- .../components/exporter/datadogexporter/go.mod | 2 +- .../components/exporter/datadogexporter/go.sum | 4 ++-- .../exporter/serializerexporter/go.mod | 2 +- .../exporter/serializerexporter/go.sum | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- .../orchestrator/processors/common/base.go | 5 +++++ .../cluster/orchestrator/processors/k8s/pod.go | 17 +++++++++++++++++ .../orchestrator/processors/processor.go | 4 ++++ pkg/logs/pipeline/go.mod | 2 +- pkg/logs/pipeline/go.sum | 4 ++-- pkg/logs/processor/go.mod | 2 +- pkg/logs/processor/go.sum | 4 ++-- pkg/process/util/api/go.mod | 2 +- pkg/process/util/api/go.sum | 4 ++-- pkg/serializer/go.mod | 2 +- pkg/serializer/go.sum | 4 ++-- ...-tags-to-pod-manifests-617c152d112e21e3.yaml | 3 +++ test/fakeintake/go.mod | 2 +- test/fakeintake/go.sum | 4 ++-- test/new-e2e/go.mod | 2 +- test/new-e2e/go.sum | 4 ++-- test/otel/go.mod | 2 +- test/otel/go.sum | 4 ++-- 30 files changed, 68 insertions(+), 39 deletions(-) create mode 100644 releasenotes/notes/add-tagger-tags-to-pod-manifests-617c152d112e21e3.yaml diff --git a/comp/otelcol/ddflareextension/impl/go.mod b/comp/otelcol/ddflareextension/impl/go.mod index d25ace6070271..f6184768bde7d 100644 --- a/comp/otelcol/ddflareextension/impl/go.mod +++ b/comp/otelcol/ddflareextension/impl/go.mod @@ -180,7 +180,7 @@ require ( github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect github.com/Code-Hex/go-generics-cache v1.5.1 // indirect - github.com/DataDog/agent-payload/v5 v5.0.137 // indirect + github.com/DataDog/agent-payload/v5 v5.0.138 // indirect github.com/DataDog/datadog-agent/comp/core/config v0.59.0 // indirect github.com/DataDog/datadog-agent/comp/core/flare/builder v0.59.0 // indirect github.com/DataDog/datadog-agent/comp/core/flare/types v0.59.0 // indirect diff --git a/comp/otelcol/ddflareextension/impl/go.sum b/comp/otelcol/ddflareextension/impl/go.sum index a9f2e49111934..671e97841c79b 100644 --- a/comp/otelcol/ddflareextension/impl/go.sum +++ b/comp/otelcol/ddflareextension/impl/go.sum @@ -59,8 +59,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Code-Hex/go-generics-cache v1.5.1 h1:6vhZGc5M7Y/YD8cIUcY8kcuQLB4cHR7U+0KMqAA0KcU= github.com/Code-Hex/go-generics-cache v1.5.1/go.mod h1:qxcC9kRVrct9rHeiYpFWSoW1vxyillCVzX13KZG8dl4= -github.com/DataDog/agent-payload/v5 v5.0.137 h1:nV02RrYj6AwlQBGIEv6yG23CuxGtG0YWoFZAVE6vwxY= -github.com/DataDog/agent-payload/v5 v5.0.137/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= +github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytljudgSY9O59zjc= +github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/datadog-agent/comp/core/log v0.56.2 h1:qvBT+FfjKGqimyEvmsNHCZKbTfBJAdUZSVy2IZQ8HS4= github.com/DataDog/datadog-agent/comp/core/log v0.56.2/go.mod h1:ivJ/RMZjTNkoPPNDX+v/nnBwABLCiMv1vQA5tk/HCR4= github.com/DataDog/datadog-api-client-go/v2 v2.31.0 h1:JfJhYlHfLzvauI8u6h23smTooWYe6quNhhg9gpTszWY= diff --git a/comp/otelcol/logsagentpipeline/go.mod b/comp/otelcol/logsagentpipeline/go.mod index 40a8e60d9efba..f969df266b412 100644 --- a/comp/otelcol/logsagentpipeline/go.mod +++ b/comp/otelcol/logsagentpipeline/go.mod @@ -63,7 +63,7 @@ replace ( require github.com/DataDog/datadog-agent/pkg/logs/pipeline v0.56.0-rc.3 require ( - github.com/DataDog/agent-payload/v5 v5.0.137 // indirect + github.com/DataDog/agent-payload/v5 v5.0.138 // indirect github.com/DataDog/datadog-agent/comp/core/hostname/hostnameinterface v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/comp/core/secrets v0.59.0 // indirect github.com/DataDog/datadog-agent/comp/core/telemetry v0.56.0-rc.3 // indirect diff --git a/comp/otelcol/logsagentpipeline/go.sum b/comp/otelcol/logsagentpipeline/go.sum index 97219095a045b..9285d14a5c66a 100644 --- a/comp/otelcol/logsagentpipeline/go.sum +++ b/comp/otelcol/logsagentpipeline/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/agent-payload/v5 v5.0.137 h1:nV02RrYj6AwlQBGIEv6yG23CuxGtG0YWoFZAVE6vwxY= -github.com/DataDog/agent-payload/v5 v5.0.137/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= +github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytljudgSY9O59zjc= +github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 h1:RoH7VLzTnxHEugRPIgnGlxwDFszFGI7b3WZZUtWuPRM= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42/go.mod h1:TX7CTOQ3LbQjfAi4SwqUoR5gY1zfUk7VRBDTuArjaDc= github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= diff --git a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod index 25af1fd191eb1..777d025c85789 100644 --- a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod +++ b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod @@ -89,7 +89,7 @@ require ( ) require ( - github.com/DataDog/agent-payload/v5 v5.0.137 // indirect + github.com/DataDog/agent-payload/v5 v5.0.138 // indirect github.com/DataDog/datadog-agent/comp/core/flare/builder v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/comp/core/flare/types v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/comp/core/secrets v0.59.0 // indirect diff --git a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum index 97219095a045b..9285d14a5c66a 100644 --- a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum +++ b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/agent-payload/v5 v5.0.137 h1:nV02RrYj6AwlQBGIEv6yG23CuxGtG0YWoFZAVE6vwxY= -github.com/DataDog/agent-payload/v5 v5.0.137/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= +github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytljudgSY9O59zjc= +github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 h1:RoH7VLzTnxHEugRPIgnGlxwDFszFGI7b3WZZUtWuPRM= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42/go.mod h1:TX7CTOQ3LbQjfAi4SwqUoR5gY1zfUk7VRBDTuArjaDc= github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod index cab50f84895bc..075d17c6084f3 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod @@ -130,7 +130,7 @@ require ( ) require ( - github.com/DataDog/agent-payload/v5 v5.0.137 // indirect + github.com/DataDog/agent-payload/v5 v5.0.138 // indirect github.com/DataDog/datadog-agent/comp/core/config v0.57.1 // indirect github.com/DataDog/datadog-agent/comp/core/flare/builder v0.57.1 // indirect github.com/DataDog/datadog-agent/comp/core/flare/types v0.57.1 // indirect diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum index 298ecceb323a8..ca4a45729f362 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/agent-payload/v5 v5.0.137 h1:nV02RrYj6AwlQBGIEv6yG23CuxGtG0YWoFZAVE6vwxY= -github.com/DataDog/agent-payload/v5 v5.0.137/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= +github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytljudgSY9O59zjc= +github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/datadog-api-client-go/v2 v2.31.0 h1:JfJhYlHfLzvauI8u6h23smTooWYe6quNhhg9gpTszWY= github.com/DataDog/datadog-api-client-go/v2 v2.31.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod index 4ae9f643df3cf..5803c7e3fe19a 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod @@ -90,7 +90,7 @@ require ( ) require ( - github.com/DataDog/agent-payload/v5 v5.0.137 // indirect + github.com/DataDog/agent-payload/v5 v5.0.138 // indirect github.com/DataDog/datadog-agent/comp/core/config v0.57.1 // indirect github.com/DataDog/datadog-agent/comp/core/flare/builder v0.57.1 // indirect github.com/DataDog/datadog-agent/comp/core/flare/types v0.57.1 // indirect diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum index 89c84f20e836c..f50a19e48a061 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/agent-payload/v5 v5.0.137 h1:nV02RrYj6AwlQBGIEv6yG23CuxGtG0YWoFZAVE6vwxY= -github.com/DataDog/agent-payload/v5 v5.0.137/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= +github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytljudgSY9O59zjc= +github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0 h1:VS4NTqwczwezMVvI6A7xYR3ugPmMUJ4FcdFrsdnZI2I= diff --git a/go.mod b/go.mod index fd42d1719f1f8..f220fd26849fc 100644 --- a/go.mod +++ b/go.mod @@ -640,7 +640,7 @@ require ( require ( github.com/DATA-DOG/go-sqlmock v1.5.2 - github.com/DataDog/agent-payload/v5 v5.0.137 + github.com/DataDog/agent-payload/v5 v5.0.138 github.com/DataDog/datadog-agent/comp/api/api/def v0.56.0-rc.3 github.com/DataDog/datadog-agent/comp/core/config v0.59.0 github.com/DataDog/datadog-agent/comp/core/flare/types v0.59.0 diff --git a/go.sum b/go.sum index 29b837bb26f00..b7142253bb0ab 100644 --- a/go.sum +++ b/go.sum @@ -115,8 +115,8 @@ github.com/CycloneDX/cyclonedx-go v0.9.1 h1:yffaWOZsv77oTJa/SdVZYdgAgFioCeycBUKk github.com/CycloneDX/cyclonedx-go v0.9.1/go.mod h1:NE/EWvzELOFlG6+ljX/QeMlVt9VKcTwu8u0ccsACEsw= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= -github.com/DataDog/agent-payload/v5 v5.0.137 h1:nV02RrYj6AwlQBGIEv6yG23CuxGtG0YWoFZAVE6vwxY= -github.com/DataDog/agent-payload/v5 v5.0.137/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= +github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytljudgSY9O59zjc= +github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/appsec-internal-go v1.9.0 h1:cGOneFsg0JTRzWl5U2+og5dbtyW3N8XaYwc5nXe39Vw= github.com/DataDog/appsec-internal-go v1.9.0/go.mod h1:wW0cRfWBo4C044jHGwYiyh5moQV2x0AhnwqMuiX7O/g= github.com/DataDog/aptly v1.5.3 h1:oLsRvjuXSVM4ia0N83dU3KiQeiJ6BaszYbTZOkSfDlw= diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/common/base.go b/pkg/collector/corechecks/cluster/orchestrator/processors/common/base.go index e8c0b5db8d9ff..c825586135bf5 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/common/base.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/common/base.go @@ -34,6 +34,11 @@ func (BaseHandlers) BuildManifestMessageBody(ctx processors.ProcessorContext, re return ExtractModelManifests(ctx, resourceManifests, groupSize) } +//nolint:revive // TODO(CAPP) Fix revive linter +func (BaseHandlers) ResourceTaggerTags(ctx processors.ProcessorContext, resource interface{}) []string { + return nil +} + // ExtractModelManifests creates the model manifest from the given manifests func ExtractModelManifests(ctx processors.ProcessorContext, resourceManifests []interface{}, groupSize int) *model.CollectorManifest { pctx := ctx.(*processors.K8sProcessorContext) diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/pod.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/pod.go index 6f3a62dda8848..db54519fbc90b 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/pod.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/pod.go @@ -164,6 +164,23 @@ func (h *PodHandlers) ResourceVersion(ctx processors.ProcessorContext, resource, return resourceModel.(*model.Pod).Metadata.ResourceVersion } +// ResourceTaggerTags is a handler called to retrieve tags for a resource from the tagger. +// +//nolint:revive // TODO(CAPP) Fix revive linter +func (h *PodHandlers) ResourceTaggerTags(ctx processors.ProcessorContext, resource interface{}) []string { + r, ok := resource.(*corev1.Pod) + if !ok { + log.Debugf("Could not cast resource to pod") + return nil + } + tags, err := h.tagProvider.GetTags(r, taggertypes.HighCardinality) + if err != nil { + log.Debugf("Could not retrieve tags for pod: %s", err.Error()) + return nil + } + return tags +} + // ScrubBeforeExtraction is a handler called to redact the raw resource before // it is extracted as an internal resource model. // diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/processor.go b/pkg/collector/corechecks/cluster/orchestrator/processors/processor.go index bd53e21cb7df5..65e5619fef47a 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/processor.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/processor.go @@ -129,6 +129,9 @@ type Handlers interface { // ResourceVersion returns the resource Version. ResourceVersion(ctx ProcessorContext, resource, resourceModel interface{}) string + // ResourceTaggerTags returns the resource tags. + ResourceTaggerTags(ctx ProcessorContext, resource interface{}) []string + // ScrubBeforeExtraction replaces sensitive information in the resource // before resource extraction. ScrubBeforeExtraction(ctx ProcessorContext, resource interface{}) @@ -231,6 +234,7 @@ func (p *Processor) Process(ctx ProcessorContext, list interface{}) (processResu Content: yaml, Version: "v1", ContentType: "json", + Tags: p.h.ResourceTaggerTags(ctx, resource), }) } diff --git a/pkg/logs/pipeline/go.mod b/pkg/logs/pipeline/go.mod index 06f20a79a4199..4359e4de3c733 100644 --- a/pkg/logs/pipeline/go.mod +++ b/pkg/logs/pipeline/go.mod @@ -79,7 +79,7 @@ require ( ) require ( - github.com/DataDog/agent-payload/v5 v5.0.137 // indirect + github.com/DataDog/agent-payload/v5 v5.0.138 // indirect github.com/DataDog/datadog-agent/comp/core/secrets v0.59.0 // indirect github.com/DataDog/datadog-agent/comp/core/telemetry v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/comp/def v0.56.0-rc.3 // indirect diff --git a/pkg/logs/pipeline/go.sum b/pkg/logs/pipeline/go.sum index 97219095a045b..9285d14a5c66a 100644 --- a/pkg/logs/pipeline/go.sum +++ b/pkg/logs/pipeline/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/agent-payload/v5 v5.0.137 h1:nV02RrYj6AwlQBGIEv6yG23CuxGtG0YWoFZAVE6vwxY= -github.com/DataDog/agent-payload/v5 v5.0.137/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= +github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytljudgSY9O59zjc= +github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 h1:RoH7VLzTnxHEugRPIgnGlxwDFszFGI7b3WZZUtWuPRM= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42/go.mod h1:TX7CTOQ3LbQjfAi4SwqUoR5gY1zfUk7VRBDTuArjaDc= github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= diff --git a/pkg/logs/processor/go.mod b/pkg/logs/processor/go.mod index 858475c3a8a54..0f9d8e217c3ff 100644 --- a/pkg/logs/processor/go.mod +++ b/pkg/logs/processor/go.mod @@ -48,7 +48,7 @@ replace ( ) require ( - github.com/DataDog/agent-payload/v5 v5.0.137 + github.com/DataDog/agent-payload/v5 v5.0.138 github.com/DataDog/datadog-agent/comp/core/hostname/hostnameinterface v0.56.0-rc.3 github.com/DataDog/datadog-agent/comp/logs/agent/config v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/config/model v0.59.0 diff --git a/pkg/logs/processor/go.sum b/pkg/logs/processor/go.sum index a85960b0566cf..d37f9cd540349 100644 --- a/pkg/logs/processor/go.sum +++ b/pkg/logs/processor/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/agent-payload/v5 v5.0.137 h1:nV02RrYj6AwlQBGIEv6yG23CuxGtG0YWoFZAVE6vwxY= -github.com/DataDog/agent-payload/v5 v5.0.137/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= +github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytljudgSY9O59zjc= +github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 h1:RoH7VLzTnxHEugRPIgnGlxwDFszFGI7b3WZZUtWuPRM= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42/go.mod h1:TX7CTOQ3LbQjfAi4SwqUoR5gY1zfUk7VRBDTuArjaDc= github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= diff --git a/pkg/process/util/api/go.mod b/pkg/process/util/api/go.mod index 1dd6ead89c7a2..aabb46411e91a 100644 --- a/pkg/process/util/api/go.mod +++ b/pkg/process/util/api/go.mod @@ -11,7 +11,7 @@ replace ( ) require ( - github.com/DataDog/agent-payload/v5 v5.0.137 + github.com/DataDog/agent-payload/v5 v5.0.138 github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 github.com/gogo/protobuf v1.3.2 github.com/stretchr/testify v1.10.0 diff --git a/pkg/process/util/api/go.sum b/pkg/process/util/api/go.sum index fbced0de8d3fe..e79f1957f4ded 100644 --- a/pkg/process/util/api/go.sum +++ b/pkg/process/util/api/go.sum @@ -1,5 +1,5 @@ -github.com/DataDog/agent-payload/v5 v5.0.137 h1:nV02RrYj6AwlQBGIEv6yG23CuxGtG0YWoFZAVE6vwxY= -github.com/DataDog/agent-payload/v5 v5.0.137/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= +github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytljudgSY9O59zjc= +github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= diff --git a/pkg/serializer/go.mod b/pkg/serializer/go.mod index 4b6353199d174..77224caa2fdb7 100644 --- a/pkg/serializer/go.mod +++ b/pkg/serializer/go.mod @@ -63,7 +63,7 @@ replace ( ) require ( - github.com/DataDog/agent-payload/v5 v5.0.137 + github.com/DataDog/agent-payload/v5 v5.0.138 github.com/DataDog/datadog-agent/comp/core/config v0.57.1 github.com/DataDog/datadog-agent/comp/forwarder/defaultforwarder v0.56.0-rc.3 github.com/DataDog/datadog-agent/comp/forwarder/orchestrator/orchestratorinterface v0.56.0-rc.3 diff --git a/pkg/serializer/go.sum b/pkg/serializer/go.sum index fc5136030cbaa..ecef4fa7182fa 100644 --- a/pkg/serializer/go.sum +++ b/pkg/serializer/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/agent-payload/v5 v5.0.137 h1:nV02RrYj6AwlQBGIEv6yG23CuxGtG0YWoFZAVE6vwxY= -github.com/DataDog/agent-payload/v5 v5.0.137/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= +github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytljudgSY9O59zjc= +github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0 h1:VS4NTqwczwezMVvI6A7xYR3ugPmMUJ4FcdFrsdnZI2I= diff --git a/releasenotes/notes/add-tagger-tags-to-pod-manifests-617c152d112e21e3.yaml b/releasenotes/notes/add-tagger-tags-to-pod-manifests-617c152d112e21e3.yaml new file mode 100644 index 0000000000000..19f359d4d1ea4 --- /dev/null +++ b/releasenotes/notes/add-tagger-tags-to-pod-manifests-617c152d112e21e3.yaml @@ -0,0 +1,3 @@ +enhancements: + - | + Adds tagger tags to pod manifests. diff --git a/test/fakeintake/go.mod b/test/fakeintake/go.mod index cdbf263570de1..5caf2937f7ad5 100644 --- a/test/fakeintake/go.mod +++ b/test/fakeintake/go.mod @@ -9,7 +9,7 @@ replace ( ) require ( - github.com/DataDog/agent-payload/v5 v5.0.137 + github.com/DataDog/agent-payload/v5 v5.0.138 github.com/DataDog/datadog-agent/comp/netflow/payload v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3 github.com/DataDog/zstd v1.5.6 diff --git a/test/fakeintake/go.sum b/test/fakeintake/go.sum index be9d0519b91f7..66dfefa293b31 100644 --- a/test/fakeintake/go.sum +++ b/test/fakeintake/go.sum @@ -1,5 +1,5 @@ -github.com/DataDog/agent-payload/v5 v5.0.137 h1:nV02RrYj6AwlQBGIEv6yG23CuxGtG0YWoFZAVE6vwxY= -github.com/DataDog/agent-payload/v5 v5.0.137/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= +github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytljudgSY9O59zjc= +github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= diff --git a/test/new-e2e/go.mod b/test/new-e2e/go.mod index 7b6913e76a8f7..e436b5abdfb62 100644 --- a/test/new-e2e/go.mod +++ b/test/new-e2e/go.mod @@ -43,7 +43,7 @@ replace ( ) require ( - github.com/DataDog/agent-payload/v5 v5.0.137 + github.com/DataDog/agent-payload/v5 v5.0.138 github.com/DataDog/datadog-agent/comp/otelcol/ddflareextension/def v0.56.2 github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 diff --git a/test/new-e2e/go.sum b/test/new-e2e/go.sum index 84c305a0469a5..959fa036fca7d 100644 --- a/test/new-e2e/go.sum +++ b/test/new-e2e/go.sum @@ -7,8 +7,8 @@ github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg6 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs= github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= -github.com/DataDog/agent-payload/v5 v5.0.137 h1:nV02RrYj6AwlQBGIEv6yG23CuxGtG0YWoFZAVE6vwxY= -github.com/DataDog/agent-payload/v5 v5.0.137/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= +github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytljudgSY9O59zjc= +github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/datadog-api-client-go v1.16.0 h1:5jOZv1m98criCvYTa3qpW8Hzv301nbZX3K9yJtwGyWY= github.com/DataDog/datadog-api-client-go v1.16.0/go.mod h1:PgrP2ABuJWL3Auw2iEkemAJ/r72ghG4DQQmb5sgnKW4= github.com/DataDog/datadog-api-client-go/v2 v2.31.0 h1:JfJhYlHfLzvauI8u6h23smTooWYe6quNhhg9gpTszWY= diff --git a/test/otel/go.mod b/test/otel/go.mod index 6ceb9b9ca2ebf..daa95297b8765 100644 --- a/test/otel/go.mod +++ b/test/otel/go.mod @@ -125,7 +125,7 @@ require ( ) require ( - github.com/DataDog/agent-payload/v5 v5.0.137 // indirect + github.com/DataDog/agent-payload/v5 v5.0.138 // indirect github.com/DataDog/datadog-agent/comp/core/flare/builder v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/comp/core/flare/types v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/comp/core/secrets v0.59.0 // indirect diff --git a/test/otel/go.sum b/test/otel/go.sum index 957379677134f..41eeabdd1023c 100644 --- a/test/otel/go.sum +++ b/test/otel/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/agent-payload/v5 v5.0.137 h1:nV02RrYj6AwlQBGIEv6yG23CuxGtG0YWoFZAVE6vwxY= -github.com/DataDog/agent-payload/v5 v5.0.137/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= +github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytljudgSY9O59zjc= +github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/datadog-api-client-go/v2 v2.31.0 h1:JfJhYlHfLzvauI8u6h23smTooWYe6quNhhg9gpTszWY= github.com/DataDog/datadog-api-client-go/v2 v2.31.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= From c23991318bdae9f2137171b7d8d44e7753d2e346 Mon Sep 17 00:00:00 2001 From: louis-cqrl <93274433+louis-cqrl@users.noreply.github.com> Date: Wed, 11 Dec 2024 14:01:29 +0100 Subject: [PATCH 117/303] [ASCII-2573] Add versioning to agent scrubber (#31828) Co-authored-by: Pierre Gimalac --- comp/api/authtoken/go.mod | 2 +- comp/core/config/go.mod | 3 ++ comp/core/log/impl-trace/go.mod | 3 ++ comp/core/log/impl/go.mod | 3 ++ comp/core/log/mock/go.mod | 3 ++ comp/core/secrets/go.mod | 3 ++ comp/core/status/statusimpl/go.mod | 2 +- comp/forwarder/defaultforwarder/go.mod | 2 +- .../orchestrator/orchestratorinterface/go.mod | 2 +- comp/logs/agent/config/go.mod | 2 +- comp/otelcol/converter/impl/go.mod | 1 + comp/otelcol/ddflareextension/impl/go.mod | 2 +- comp/otelcol/logsagentpipeline/go.mod | 2 +- .../logsagentpipelineimpl/go.mod | 2 +- .../exporter/datadogexporter/go.mod | 2 +- .../exporter/logsagentexporter/go.mod | 2 +- .../exporter/serializerexporter/go.mod | 2 +- .../otlp/components/statsprocessor/go.mod | 3 ++ comp/otelcol/otlp/testutil/go.mod | 3 ++ comp/serializer/compression/go.mod | 3 ++ go.mod | 2 +- pkg/api/go.mod | 2 +- pkg/config/env/go.mod | 3 ++ pkg/config/mock/go.mod | 3 ++ pkg/config/model/go.mod | 3 ++ pkg/config/nodetreemodel/go.mod | 3 ++ pkg/config/remote/go.mod | 2 +- pkg/config/setup/go.mod | 3 ++ pkg/config/structure/go.mod | 3 ++ pkg/config/teeconfig/go.mod | 3 ++ pkg/config/utils/go.mod | 2 +- pkg/gohai/go.mod | 4 +- pkg/gohai/go.sum | 1 - pkg/logs/auditor/go.mod | 2 +- pkg/logs/client/go.mod | 2 +- pkg/logs/diagnostic/go.mod | 2 +- pkg/logs/message/go.mod | 2 +- pkg/logs/pipeline/go.mod | 2 +- pkg/logs/processor/go.mod | 2 +- pkg/logs/sds/go.mod | 2 +- pkg/logs/sender/go.mod | 2 +- pkg/logs/sources/go.mod | 2 +- pkg/logs/util/testutils/go.mod | 2 +- pkg/metrics/go.mod | 3 ++ pkg/orchestrator/model/go.mod | 4 +- pkg/orchestrator/model/go.sum | 1 - pkg/serializer/go.mod | 2 +- pkg/trace/go.mod | 3 ++ pkg/trace/stats/oteltest/go.mod | 3 ++ pkg/util/cgroups/go.mod | 4 +- pkg/util/cgroups/go.sum | 1 - pkg/util/defaultpaths/go.mod | 3 ++ pkg/util/filesystem/go.mod | 3 ++ pkg/util/flavor/go.mod | 3 ++ pkg/util/grpc/go.mod | 2 +- pkg/util/hostname/validate/go.mod | 4 +- pkg/util/hostname/validate/go.sum | 1 - pkg/util/http/go.mod | 3 ++ pkg/util/log/go.mod | 3 ++ pkg/util/log/setup/go.mod | 3 ++ pkg/util/scrubber/default.go | 42 +++++++++++++++++++ pkg/util/scrubber/go.mod | 7 ++-- pkg/util/scrubber/go.sum | 5 --- pkg/util/scrubber/scrubber.go | 27 ++++++++++++ pkg/util/scrubber/yaml_scrubber.go | 5 +++ pkg/util/system/go.mod | 3 ++ pkg/util/uuid/go.mod | 4 +- pkg/util/uuid/go.sum | 1 - pkg/util/winutil/go.mod | 4 +- pkg/util/winutil/go.sum | 1 - test/new-e2e/go.mod | 2 +- test/otel/go.mod | 2 +- 72 files changed, 201 insertions(+), 49 deletions(-) diff --git a/comp/api/authtoken/go.mod b/comp/api/authtoken/go.mod index 233f326a297d1..242f41ae9f7df 100644 --- a/comp/api/authtoken/go.mod +++ b/comp/api/authtoken/go.mod @@ -75,7 +75,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/comp/core/config/go.mod b/comp/core/config/go.mod index bed15530c21b9..53bf6993f2e3b 100644 --- a/comp/core/config/go.mod +++ b/comp/core/config/go.mod @@ -65,6 +65,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect @@ -111,3 +112,5 @@ require ( ) replace github.com/DataDog/datadog-agent/pkg/config/structure => ../../../pkg/config/structure + +replace github.com/DataDog/datadog-agent/pkg/version => ../../../pkg/version diff --git a/comp/core/log/impl-trace/go.mod b/comp/core/log/impl-trace/go.mod index 2ee9571d6657a..1a3d936200a26 100644 --- a/comp/core/log/impl-trace/go.mod +++ b/comp/core/log/impl-trace/go.mod @@ -76,6 +76,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect @@ -114,3 +115,5 @@ require ( ) replace github.com/DataDog/datadog-agent/pkg/config/structure => ../../../../pkg/config/structure + +replace github.com/DataDog/datadog-agent/pkg/version => ../../../../pkg/version diff --git a/comp/core/log/impl/go.mod b/comp/core/log/impl/go.mod index 9d9c721ce2ba8..440ec8c7e2939 100644 --- a/comp/core/log/impl/go.mod +++ b/comp/core/log/impl/go.mod @@ -65,6 +65,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect @@ -105,3 +106,5 @@ require ( ) replace github.com/DataDog/datadog-agent/pkg/config/structure => ../../../../pkg/config/structure + +replace github.com/DataDog/datadog-agent/pkg/version => ../../../../pkg/version diff --git a/comp/core/log/mock/go.mod b/comp/core/log/mock/go.mod index f8515313b702d..c7cf8db9429e7 100644 --- a/comp/core/log/mock/go.mod +++ b/comp/core/log/mock/go.mod @@ -41,6 +41,7 @@ require ( github.com/DataDog/datadog-agent/pkg/config/nodetreemodel v0.60.0-devel // indirect github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.60.0-devel // indirect github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -60,3 +61,5 @@ require ( ) replace github.com/DataDog/datadog-agent/pkg/config/structure => ../../../../pkg/config/structure + +replace github.com/DataDog/datadog-agent/pkg/version => ../../../../pkg/version diff --git a/comp/core/secrets/go.mod b/comp/core/secrets/go.mod index c5ef5998edc5d..ed053a2120711 100644 --- a/comp/core/secrets/go.mod +++ b/comp/core/secrets/go.mod @@ -36,6 +36,7 @@ require ( github.com/DataDog/datadog-agent/comp/core/flare/builder v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/comp/def v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/optional v0.55.0 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect @@ -57,3 +58,5 @@ require ( google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../../pkg/version diff --git a/comp/core/status/statusimpl/go.mod b/comp/core/status/statusimpl/go.mod index 600683ed2cceb..084310e3bd689 100644 --- a/comp/core/status/statusimpl/go.mod +++ b/comp/core/status/statusimpl/go.mod @@ -50,7 +50,7 @@ require ( github.com/DataDog/datadog-agent/pkg/config/setup v0.59.0 github.com/DataDog/datadog-agent/pkg/util/flavor v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 + github.com/DataDog/datadog-agent/pkg/version v0.59.1 github.com/gorilla/mux v1.8.1 github.com/stretchr/testify v1.10.0 go.uber.org/fx v1.23.0 diff --git a/comp/forwarder/defaultforwarder/go.mod b/comp/forwarder/defaultforwarder/go.mod index 55d901ebce30c..93d2d0e006c39 100644 --- a/comp/forwarder/defaultforwarder/go.mod +++ b/comp/forwarder/defaultforwarder/go.mod @@ -72,7 +72,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 - github.com/DataDog/datadog-agent/pkg/version v0.57.1 + github.com/DataDog/datadog-agent/pkg/version v0.59.1 github.com/golang/protobuf v1.5.4 github.com/hashicorp/go-multierror v1.1.1 github.com/stretchr/testify v1.10.0 diff --git a/comp/forwarder/orchestrator/orchestratorinterface/go.mod b/comp/forwarder/orchestrator/orchestratorinterface/go.mod index 63ef4e9d8c4a8..81d4001b2b4ba 100644 --- a/comp/forwarder/orchestrator/orchestratorinterface/go.mod +++ b/comp/forwarder/orchestrator/orchestratorinterface/go.mod @@ -101,7 +101,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.57.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/beorn7/perks v1.0.1 // indirect diff --git a/comp/logs/agent/config/go.mod b/comp/logs/agent/config/go.mod index 733a8bf8b17c7..e31795b917bab 100644 --- a/comp/logs/agent/config/go.mod +++ b/comp/logs/agent/config/go.mod @@ -68,7 +68,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/comp/otelcol/converter/impl/go.mod b/comp/otelcol/converter/impl/go.mod index 0910f004f852c..2435c73c0c0ab 100644 --- a/comp/otelcol/converter/impl/go.mod +++ b/comp/otelcol/converter/impl/go.mod @@ -76,6 +76,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/comp/otelcol/ddflareextension/impl/go.mod b/comp/otelcol/ddflareextension/impl/go.mod index f6184768bde7d..ce0b658bdbefb 100644 --- a/comp/otelcol/ddflareextension/impl/go.mod +++ b/comp/otelcol/ddflareextension/impl/go.mod @@ -110,7 +110,7 @@ require ( github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/processor/infraattributesprocessor v0.59.0 github.com/DataDog/datadog-agent/pkg/api v0.59.0 github.com/DataDog/datadog-agent/pkg/config/mock v0.59.0 - github.com/DataDog/datadog-agent/pkg/version v0.59.0 + github.com/DataDog/datadog-agent/pkg/version v0.59.1 github.com/google/go-cmp v0.6.0 github.com/gorilla/mux v1.8.1 github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.115.0 diff --git a/comp/otelcol/logsagentpipeline/go.mod b/comp/otelcol/logsagentpipeline/go.mod index f969df266b412..614caa1bd6c86 100644 --- a/comp/otelcol/logsagentpipeline/go.mod +++ b/comp/otelcol/logsagentpipeline/go.mod @@ -105,7 +105,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod index 777d025c85789..29266162fd0aa 100644 --- a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod +++ b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod @@ -120,7 +120,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod index 075d17c6084f3..2d08b1c40a5c3 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod @@ -196,7 +196,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.57.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/datadog-api-client-go/v2 v2.31.0 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/go-sqllexer v0.0.17 // indirect diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod index 0e14870fd4f2a..38d8f5ce4465f 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod @@ -89,7 +89,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/datadog-api-client-go/v2 v2.31.0 // indirect github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod index 5803c7e3fe19a..959d47803df5e 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod @@ -134,7 +134,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.57.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect github.com/DataDog/viper v1.13.5 // indirect diff --git a/comp/otelcol/otlp/components/statsprocessor/go.mod b/comp/otelcol/otlp/components/statsprocessor/go.mod index 192bbaae21eaa..2e082942b0c23 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.mod +++ b/comp/otelcol/otlp/components/statsprocessor/go.mod @@ -40,6 +40,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/go-sqllexer v0.0.17 // indirect github.com/DataDog/go-tuf v1.1.0-0.5.2 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect @@ -98,3 +99,5 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../../../../pkg/version diff --git a/comp/otelcol/otlp/testutil/go.mod b/comp/otelcol/otlp/testutil/go.mod index e606714cf39f7..9593f520e9ab5 100644 --- a/comp/otelcol/otlp/testutil/go.mod +++ b/comp/otelcol/otlp/testutil/go.mod @@ -62,6 +62,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect @@ -106,3 +107,5 @@ require ( ) replace github.com/DataDog/datadog-agent/pkg/config/structure => ../../../../pkg/config/structure + +replace github.com/DataDog/datadog-agent/pkg/version => ../../../../pkg/version diff --git a/comp/serializer/compression/go.mod b/comp/serializer/compression/go.mod index 7575544de493a..2ae9730174434 100644 --- a/comp/serializer/compression/go.mod +++ b/comp/serializer/compression/go.mod @@ -62,6 +62,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect @@ -103,3 +104,5 @@ require ( ) replace github.com/DataDog/datadog-agent/pkg/config/structure => ../../../pkg/config/structure + +replace github.com/DataDog/datadog-agent/pkg/version => ../../../pkg/version diff --git a/go.mod b/go.mod index f220fd26849fc..a3f7a7bf4f2ee 100644 --- a/go.mod +++ b/go.mod @@ -730,7 +730,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/testutil v0.59.0 github.com/DataDog/datadog-agent/pkg/util/uuid v0.59.0 github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 - github.com/DataDog/datadog-agent/pkg/version v0.59.0 + github.com/DataDog/datadog-agent/pkg/version v0.59.1 github.com/DataDog/go-libddwaf/v3 v3.5.1 github.com/DataDog/go-sqllexer v0.0.17 github.com/Datadog/dublin-traceroute v0.0.2 diff --git a/pkg/api/go.mod b/pkg/api/go.mod index 28a2032095417..945605825f184 100644 --- a/pkg/api/go.mod +++ b/pkg/api/go.mod @@ -67,7 +67,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/pkg/config/env/go.mod b/pkg/config/env/go.mod index 2d26e478fd4e7..de1167299c7b9 100644 --- a/pkg/config/env/go.mod +++ b/pkg/config/env/go.mod @@ -22,6 +22,7 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect @@ -49,3 +50,5 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/config/mock/go.mod b/pkg/config/mock/go.mod index 9fc526fc2c5de..bd41d45520253 100644 --- a/pkg/config/mock/go.mod +++ b/pkg/config/mock/go.mod @@ -52,6 +52,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect @@ -86,3 +87,5 @@ require ( ) replace github.com/DataDog/datadog-agent/pkg/config/structure => ../structure + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/config/model/go.mod b/pkg/config/model/go.mod index 27acfdc300362..c1fdbcf811244 100644 --- a/pkg/config/model/go.mod +++ b/pkg/config/model/go.mod @@ -19,6 +19,7 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect @@ -37,3 +38,5 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/config/nodetreemodel/go.mod b/pkg/config/nodetreemodel/go.mod index 89e820fbd8172..b349c1b7ee78c 100644 --- a/pkg/config/nodetreemodel/go.mod +++ b/pkg/config/nodetreemodel/go.mod @@ -25,6 +25,7 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect @@ -40,3 +41,5 @@ require ( golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/config/remote/go.mod b/pkg/config/remote/go.mod index ab537bc1eb918..45abbf8a59a03 100644 --- a/pkg/config/remote/go.mod +++ b/pkg/config/remote/go.mod @@ -84,7 +84,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/datadog-go/v5 v5.5.0 // indirect github.com/DataDog/go-libddwaf/v3 v3.5.1 // indirect github.com/DataDog/go-sqllexer v0.0.17 // indirect diff --git a/pkg/config/setup/go.mod b/pkg/config/setup/go.mod index 772c6b0ee8e53..b135e7a2d406d 100644 --- a/pkg/config/setup/go.mod +++ b/pkg/config/setup/go.mod @@ -62,6 +62,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/filesystem v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -110,3 +111,5 @@ require ( replace github.com/DataDog/datadog-agent/pkg/config/mock => ../mock replace github.com/DataDog/datadog-agent/pkg/config/structure => ../structure + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/config/structure/go.mod b/pkg/config/structure/go.mod index a4b08d8efd789..c282e2e4de06e 100644 --- a/pkg/config/structure/go.mod +++ b/pkg/config/structure/go.mod @@ -44,6 +44,7 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect @@ -63,3 +64,5 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/config/teeconfig/go.mod b/pkg/config/teeconfig/go.mod index 5f73448a14327..07988a62ac5a3 100644 --- a/pkg/config/teeconfig/go.mod +++ b/pkg/config/teeconfig/go.mod @@ -16,6 +16,7 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -33,3 +34,5 @@ require ( golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/config/utils/go.mod b/pkg/config/utils/go.mod index 0f4f9537ccb9f..8d486b6d22804 100644 --- a/pkg/config/utils/go.mod +++ b/pkg/config/utils/go.mod @@ -39,7 +39,7 @@ require ( github.com/DataDog/datadog-agent/pkg/config/setup v0.59.0 github.com/DataDog/datadog-agent/pkg/config/structure v0.59.0 github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 + github.com/DataDog/datadog-agent/pkg/version v0.59.1 github.com/stretchr/testify v1.10.0 ) diff --git a/pkg/gohai/go.mod b/pkg/gohai/go.mod index d836c017c69c6..91371a34fdf67 100644 --- a/pkg/gohai/go.mod +++ b/pkg/gohai/go.mod @@ -15,9 +15,9 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/go-ole/go-ole v1.3.0 // indirect - github.com/kr/text v0.2.0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect @@ -35,3 +35,5 @@ replace ( github.com/DataDog/datadog-agent/pkg/util/log => ../util/log github.com/DataDog/datadog-agent/pkg/util/scrubber => ../util/scrubber ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../version diff --git a/pkg/gohai/go.sum b/pkg/gohai/go.sum index b2d1eb2720650..2315dbdfd4b60 100644 --- a/pkg/gohai/go.sum +++ b/pkg/gohai/go.sum @@ -1,6 +1,5 @@ github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1c8PVE1PubbNx3mjUr09OqWGCs= github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= diff --git a/pkg/logs/auditor/go.mod b/pkg/logs/auditor/go.mod index 0ea48c9e7895a..f25078eb0613e 100644 --- a/pkg/logs/auditor/go.mod +++ b/pkg/logs/auditor/go.mod @@ -71,7 +71,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/pkg/logs/client/go.mod b/pkg/logs/client/go.mod index cac2a5ce40f32..f6c70fa120111 100644 --- a/pkg/logs/client/go.mod +++ b/pkg/logs/client/go.mod @@ -61,7 +61,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/backoff v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/http v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 + github.com/DataDog/datadog-agent/pkg/version v0.59.1 github.com/stretchr/testify v1.10.0 golang.org/x/net v0.31.0 ) diff --git a/pkg/logs/diagnostic/go.mod b/pkg/logs/diagnostic/go.mod index 7f3357f60d406..6794be809224a 100644 --- a/pkg/logs/diagnostic/go.mod +++ b/pkg/logs/diagnostic/go.mod @@ -75,7 +75,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/pkg/logs/message/go.mod b/pkg/logs/message/go.mod index b4b0ab2e615ed..9af21b652514f 100644 --- a/pkg/logs/message/go.mod +++ b/pkg/logs/message/go.mod @@ -67,7 +67,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/pkg/logs/pipeline/go.mod b/pkg/logs/pipeline/go.mod index 4359e4de3c733..d5ad9fc3387d6 100644 --- a/pkg/logs/pipeline/go.mod +++ b/pkg/logs/pipeline/go.mod @@ -105,7 +105,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/pkg/logs/processor/go.mod b/pkg/logs/processor/go.mod index 0f9d8e217c3ff..597b56d08b470 100644 --- a/pkg/logs/processor/go.mod +++ b/pkg/logs/processor/go.mod @@ -85,7 +85,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/pkg/logs/sds/go.mod b/pkg/logs/sds/go.mod index c6f00cb1cf5e7..25d3edc9a9039 100644 --- a/pkg/logs/sds/go.mod +++ b/pkg/logs/sds/go.mod @@ -82,7 +82,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/beorn7/perks v1.0.1 // indirect diff --git a/pkg/logs/sender/go.mod b/pkg/logs/sender/go.mod index 2f438b2f0cc86..289d3463425c9 100644 --- a/pkg/logs/sender/go.mod +++ b/pkg/logs/sender/go.mod @@ -89,7 +89,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/beorn7/perks v1.0.1 // indirect diff --git a/pkg/logs/sources/go.mod b/pkg/logs/sources/go.mod index a73c178af0286..84546c2435fbe 100644 --- a/pkg/logs/sources/go.mod +++ b/pkg/logs/sources/go.mod @@ -65,7 +65,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/pkg/logs/util/testutils/go.mod b/pkg/logs/util/testutils/go.mod index d2aa1b59f3e82..71bf57e885bc8 100644 --- a/pkg/logs/util/testutils/go.mod +++ b/pkg/logs/util/testutils/go.mod @@ -66,7 +66,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/pkg/metrics/go.mod b/pkg/metrics/go.mod index 198885497f0b9..a00176bd56df9 100644 --- a/pkg/metrics/go.mod +++ b/pkg/metrics/go.mod @@ -72,6 +72,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect @@ -121,3 +122,5 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../version diff --git a/pkg/orchestrator/model/go.mod b/pkg/orchestrator/model/go.mod index 1ae7dce9631db..96f90197c3fe2 100644 --- a/pkg/orchestrator/model/go.mod +++ b/pkg/orchestrator/model/go.mod @@ -14,8 +14,10 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect - github.com/kr/text v0.2.0 // indirect go.uber.org/atomic v1.11.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/orchestrator/model/go.sum b/pkg/orchestrator/model/go.sum index a1eb366cd0a06..3c93bebd8c6dd 100644 --- a/pkg/orchestrator/model/go.sum +++ b/pkg/orchestrator/model/go.sum @@ -1,6 +1,5 @@ github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1c8PVE1PubbNx3mjUr09OqWGCs= github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= diff --git a/pkg/serializer/go.mod b/pkg/serializer/go.mod index 77224caa2fdb7..815c0bc0fca03 100644 --- a/pkg/serializer/go.mod +++ b/pkg/serializer/go.mod @@ -78,7 +78,7 @@ require ( github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/json v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 - github.com/DataDog/datadog-agent/pkg/version v0.57.1 + github.com/DataDog/datadog-agent/pkg/version v0.59.1 github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 github.com/gogo/protobuf v1.3.2 github.com/json-iterator/go v1.1.12 diff --git a/pkg/trace/go.mod b/pkg/trace/go.mod index d4cf8c46e2454..575006dcc0326 100644 --- a/pkg/trace/go.mod +++ b/pkg/trace/go.mod @@ -57,6 +57,7 @@ require go.opentelemetry.io/collector/component/componenttest v0.115.0 require go.opentelemetry.io/collector/processor v0.115.0 // indirect require ( + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/go-sqllexer v0.0.17 // indirect github.com/DataDog/go-tuf v1.1.0-0.5.2 // indirect github.com/DataDog/zstd v1.5.6 // indirect @@ -124,3 +125,5 @@ replace ( github.com/DataDog/datadog-agent/pkg/util/pointer => ../util/pointer github.com/DataDog/datadog-agent/pkg/util/scrubber => ../util/scrubber ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../version diff --git a/pkg/trace/stats/oteltest/go.mod b/pkg/trace/stats/oteltest/go.mod index 8314f54acb5ca..a145c90943402 100644 --- a/pkg/trace/stats/oteltest/go.mod +++ b/pkg/trace/stats/oteltest/go.mod @@ -28,6 +28,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/go-sqllexer v0.0.17 // indirect github.com/DataDog/go-tuf v1.1.0-0.5.2 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect @@ -107,3 +108,5 @@ replace ( github.com/DataDog/datadog-agent/pkg/util/pointer => ../../../util/pointer github.com/DataDog/datadog-agent/pkg/util/scrubber => ../../../util/scrubber ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../../version diff --git a/pkg/util/cgroups/go.mod b/pkg/util/cgroups/go.mod index 582db53aa5134..df4c25d4052b8 100644 --- a/pkg/util/cgroups/go.mod +++ b/pkg/util/cgroups/go.mod @@ -19,12 +19,12 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/docker/go-units v0.5.0 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect - github.com/kr/text v0.2.0 // indirect github.com/moby/sys/userns v0.1.0 // indirect github.com/opencontainers/runtime-spec v1.2.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect @@ -34,3 +34,5 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/util/cgroups/go.sum b/pkg/util/cgroups/go.sum index 3b65e4fa070a9..e85a1ea965ce8 100644 --- a/pkg/util/cgroups/go.sum +++ b/pkg/util/cgroups/go.sum @@ -4,7 +4,6 @@ github.com/containerd/cgroups/v3 v3.0.4 h1:2fs7l3P0Qxb1nKWuJNFiwhp2CqiKzho71DQkD github.com/containerd/cgroups/v3 v3.0.4/go.mod h1:SA5DLYnXO8pTGYiAHXz94qvLQTKfVM5GEVisn4jpins= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= diff --git a/pkg/util/defaultpaths/go.mod b/pkg/util/defaultpaths/go.mod index ea2d774c6fd68..d87440f277c30 100644 --- a/pkg/util/defaultpaths/go.mod +++ b/pkg/util/defaultpaths/go.mod @@ -18,8 +18,11 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect go.uber.org/atomic v1.11.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/util/filesystem/go.mod b/pkg/util/filesystem/go.mod index d1fbed28429ae..cb61a2bdb1701 100644 --- a/pkg/util/filesystem/go.mod +++ b/pkg/util/filesystem/go.mod @@ -20,6 +20,7 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/go-ole/go-ole v1.3.0 // indirect @@ -30,3 +31,5 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/util/flavor/go.mod b/pkg/util/flavor/go.mod index dabdfd9bcee13..c9c0f4b4c6d60 100644 --- a/pkg/util/flavor/go.mod +++ b/pkg/util/flavor/go.mod @@ -53,6 +53,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect @@ -89,3 +90,5 @@ require ( replace github.com/DataDog/datadog-agent/pkg/config/mock => ../../config/mock replace github.com/DataDog/datadog-agent/pkg/config/structure => ../../config/structure + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/util/grpc/go.mod b/pkg/util/grpc/go.mod index bdbb97d385501..d4e591bfe5d0e 100644 --- a/pkg/util/grpc/go.mod +++ b/pkg/util/grpc/go.mod @@ -65,7 +65,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/pkg/util/hostname/validate/go.mod b/pkg/util/hostname/validate/go.mod index ca6d2889b8178..6ec1ae79a177d 100644 --- a/pkg/util/hostname/validate/go.mod +++ b/pkg/util/hostname/validate/go.mod @@ -14,11 +14,13 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/kr/text v0.2.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect go.uber.org/atomic v1.11.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../../version diff --git a/pkg/util/hostname/validate/go.sum b/pkg/util/hostname/validate/go.sum index 8c774897583cd..c57375d7e46df 100644 --- a/pkg/util/hostname/validate/go.sum +++ b/pkg/util/hostname/validate/go.sum @@ -1,6 +1,5 @@ github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1c8PVE1PubbNx3mjUr09OqWGCs= github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= diff --git a/pkg/util/http/go.mod b/pkg/util/http/go.mod index e4699e99baf5e..86386cd3fe51e 100644 --- a/pkg/util/http/go.mod +++ b/pkg/util/http/go.mod @@ -55,6 +55,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect @@ -89,3 +90,5 @@ require ( ) replace github.com/DataDog/datadog-agent/pkg/config/structure => ../../config/structure + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/util/log/go.mod b/pkg/util/log/go.mod index 3f4354d5c8445..26f759935f92e 100644 --- a/pkg/util/log/go.mod +++ b/pkg/util/log/go.mod @@ -13,9 +13,12 @@ require ( ) require ( + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect go.uber.org/multierr v1.11.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/util/log/setup/go.mod b/pkg/util/log/setup/go.mod index 1d7dfdbbb7c8b..a5fe63b6f8faa 100644 --- a/pkg/util/log/setup/go.mod +++ b/pkg/util/log/setup/go.mod @@ -55,6 +55,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect @@ -88,3 +89,5 @@ require ( ) replace github.com/DataDog/datadog-agent/pkg/config/structure => ../../../config/structure + +replace github.com/DataDog/datadog-agent/pkg/version => ../../../version diff --git a/pkg/util/scrubber/default.go b/pkg/util/scrubber/default.go index 290592ddf2eb2..4724ecf4c8fd3 100644 --- a/pkg/util/scrubber/default.go +++ b/pkg/util/scrubber/default.go @@ -31,6 +31,10 @@ var ( // secrets package for example. dynamicReplacers = []Replacer{} dynamicReplacersMutex = sync.Mutex{} + + // defaultVersion is the first version of the agent scrubber. + // https://github.com/DataDog/datadog-agent/pull/9618 + defaultVersion = parseVersion("7.33.0") ) func init() { @@ -46,12 +50,16 @@ func AddDefaultReplacers(scrubber *Scrubber) { Regex: regexp.MustCompile(`(api_?key=)\b[a-zA-Z0-9]+([a-zA-Z0-9]{5})\b`), Hints: []string{"api_key", "apikey"}, Repl: []byte(`$1***************************$2`), + + LastUpdated: defaultVersion, } hintedAPPKeyReplacer := Replacer{ // If hinted, mask the value regardless if it doesn't match 40-char hexadecimal string Regex: regexp.MustCompile(`(ap(?:p|plication)_?key=)\b[a-zA-Z0-9]+([a-zA-Z0-9]{5})\b`), Hints: []string{"app_key", "appkey", "application_key"}, Repl: []byte(`$1***********************************$2`), + + LastUpdated: defaultVersion, } // replacers are check one by one in order. We first try to scrub 64 bytes token, keeping the last 5 digit. If @@ -60,45 +68,69 @@ func AddDefaultReplacers(scrubber *Scrubber) { Regex: regexp.MustCompile(`\bBearer [a-fA-F0-9]{59}([a-fA-F0-9]{5})\b`), Hints: []string{"Bearer"}, Repl: []byte(`Bearer ***********************************************************$1`), + + // https://github.com/DataDog/datadog-agent/pull/12338 + LastUpdated: parseVersion("7.38.0"), } // For this one we match any characters hintedBearerInvalidReplacer := Replacer{ Regex: regexp.MustCompile(`\bBearer\s+[^*]+\b`), Hints: []string{"Bearer"}, Repl: []byte("Bearer " + defaultReplacement), + + // https://github.com/DataDog/datadog-agent/pull/23448 + LastUpdated: parseVersion("7.53.0"), } apiKeyReplacerYAML := Replacer{ Regex: regexp.MustCompile(`(\-|\:|,|\[|\{)(\s+)?\b[a-fA-F0-9]{27}([a-fA-F0-9]{5})\b`), Repl: []byte(`$1$2"***************************$3"`), + + // https://github.com/DataDog/datadog-agent/pull/12605 + LastUpdated: parseVersion("7.39.0"), } apiKeyReplacer := Replacer{ Regex: regexp.MustCompile(`\b[a-fA-F0-9]{27}([a-fA-F0-9]{5})\b`), Repl: []byte(`***************************$1`), + + LastUpdated: defaultVersion, } appKeyReplacerYAML := Replacer{ Regex: regexp.MustCompile(`(\-|\:|,|\[|\{)(\s+)?\b[a-fA-F0-9]{35}([a-fA-F0-9]{5})\b`), Repl: []byte(`$1$2"***********************************$3"`), + + // https://github.com/DataDog/datadog-agent/pull/12605 + LastUpdated: parseVersion("7.39.0"), } appKeyReplacer := Replacer{ Regex: regexp.MustCompile(`\b[a-fA-F0-9]{35}([a-fA-F0-9]{5})\b`), Repl: []byte(`***********************************$1`), + + LastUpdated: defaultVersion, } rcAppKeyReplacer := Replacer{ Regex: regexp.MustCompile(`\bDDRCM_[A-Z0-9]+([A-Z0-9]{5})\b`), Repl: []byte(`***********************************$1`), + + // https://github.com/DataDog/datadog-agent/pull/14681 + LastUpdated: parseVersion("7.42.0"), } + // URI Generic Syntax // https://tools.ietf.org/html/rfc3986 uriPasswordReplacer := Replacer{ Regex: regexp.MustCompile(`(?i)([a-z][a-z0-9+-.]+://|\b)([^:]+):([^\s|"]+)@`), Repl: []byte(`$1$2:********@`), + + // https://github.com/DataDog/datadog-agent/pull/15959 + LastUpdated: parseVersion("7.45.0"), } yamlPasswordReplacer := matchYAMLKeyPart( `(pass(word)?|pwd)`, []string{"pass", "pwd"}, []byte(`$1 "********"`), ) + yamlPasswordReplacer.LastUpdated = defaultVersion passwordReplacer := Replacer{ // this regex has three parts: // * key: case-insensitive, optionally quoted (pass | password | pswd | pwd), not anchored to match on args like --mysql_password= etc. @@ -107,22 +139,28 @@ func AddDefaultReplacers(scrubber *Scrubber) { Regex: regexp.MustCompile(`(?i)(\"?(?:pass(?:word)?|pswd|pwd)\"?)((?:=| = |: )\"?)([0-9A-Za-z#!$%&()*+,\-./:<=>?@[\\\]^_{|}~]+)`), // replace the 3rd capture group (password string) with ******** Repl: []byte(`$1$2********`), + + // https://github.com/DataDog/datadog-agent/pull/28144 + LastUpdated: parseVersion("7.57.0"), } tokenReplacer := matchYAMLKeyEnding( `token`, []string{"token"}, []byte(`$1 "********"`), ) + tokenReplacer.LastUpdated = defaultVersion snmpReplacer := matchYAMLKey( `(community_string|authKey|privKey|community|authentication_key|privacy_key|Authorization|authorization)`, []string{"community_string", "authKey", "privKey", "community", "authentication_key", "privacy_key", "Authorization", "authorization"}, []byte(`$1 "********"`), ) + snmpReplacer.LastUpdated = parseVersion("7.53.0") // https://github.com/DataDog/datadog-agent/pull/23515 snmpMultilineReplacer := matchYAMLKeyWithListValue( "(community_strings)", "community_strings", []byte(`$1 "********"`), ) + snmpMultilineReplacer.LastUpdated = parseVersion("7.34.0") // https://github.com/DataDog/datadog-agent/pull/10305 certReplacer := Replacer{ /* Try to match as accurately as possible. RFC 7468's ABNF @@ -132,6 +170,8 @@ func AddDefaultReplacers(scrubber *Scrubber) { Regex: regexp.MustCompile(`-----BEGIN (?:.*)-----[A-Za-z0-9=\+\/\s]*-----END (?:.*)-----`), Hints: []string{"BEGIN"}, Repl: []byte(`********`), + + LastUpdated: defaultVersion, } // The following replacers works on YAML object only @@ -151,6 +191,7 @@ func AddDefaultReplacers(scrubber *Scrubber) { return defaultReplacement }, ) + apiKeyYaml.LastUpdated = parseVersion("7.44.0") // https://github.com/DataDog/datadog-agent/pull/15707 appKeyYaml := matchYAMLOnly( `ap(?:p|plication)_?key`, @@ -167,6 +208,7 @@ func AddDefaultReplacers(scrubber *Scrubber) { return defaultReplacement }, ) + appKeyYaml.LastUpdated = parseVersion("7.44.0") // https://github.com/DataDog/datadog-agent/pull/15707 scrubber.AddReplacer(SingleLine, hintedAPIKeyReplacer) scrubber.AddReplacer(SingleLine, hintedAPPKeyReplacer) diff --git a/pkg/util/scrubber/go.mod b/pkg/util/scrubber/go.mod index ccabdeab1cacc..6f10e986954d3 100644 --- a/pkg/util/scrubber/go.mod +++ b/pkg/util/scrubber/go.mod @@ -3,15 +3,16 @@ module github.com/DataDog/datadog-agent/pkg/util/scrubber go 1.22.0 require ( + github.com/DataDog/datadog-agent/pkg/version v0.59.1 github.com/stretchr/testify v1.10.0 gopkg.in/yaml.v2 v2.4.0 ) require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/rogpeppe/go-internal v1.13.1 // indirect - gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/util/scrubber/go.sum b/pkg/util/scrubber/go.sum index 08716d442d1db..def44d1759f5c 100644 --- a/pkg/util/scrubber/go.sum +++ b/pkg/util/scrubber/go.sum @@ -1,17 +1,12 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= diff --git a/pkg/util/scrubber/scrubber.go b/pkg/util/scrubber/scrubber.go index 1aaad14c2a6d9..c37ede0303017 100644 --- a/pkg/util/scrubber/scrubber.go +++ b/pkg/util/scrubber/scrubber.go @@ -17,6 +17,8 @@ import ( "io" "os" "regexp" + + "github.com/DataDog/datadog-agent/pkg/version" ) // Replacer represents a replacement of sensitive information with a "clean" version. @@ -40,6 +42,18 @@ type Replacer struct { // ReplFunc, if set, is called with the matched bytes (see regexp#Regexp.ReplaceAllFunc). Only // one of Repl and ReplFunc should be set. ReplFunc func(b []byte) []byte + + // LastUpdated is the last version when the replacer was updated. + // This is used to track when a replacer was last updated to compare with the flare version on the rapid side to decide to apply the replacer or not. + LastUpdated *version.Version +} + +func parseVersion(versionString string) *version.Version { + v, err := version.New(versionString, "") + if err != nil { + panic(err) + } + return &v } // ReplacerKind modifies how a Replacer is applied @@ -71,6 +85,10 @@ var blankRegex = regexp.MustCompile(`^\s*$`) type Scrubber struct { singleLineReplacers []Replacer multiLineReplacers []Replacer + + // shouldApply is a function that can be used to conditionally apply a replacer. + // If the function returns false, the replacer will not be applied. + shouldApply func(repl Replacer) bool } // New creates a new scrubber with no replacers installed. @@ -98,6 +116,11 @@ func (c *Scrubber) AddReplacer(kind ReplacerKind, replacer Replacer) { } } +// SetShouldApply sets a condition function to the scrubber. If the function returns false, the replacer will not be applied. +func (c *Scrubber) SetShouldApply(shouldApply func(repl Replacer) bool) { + c.shouldApply = shouldApply +} + // ScrubFile scrubs credentials from file given by pathname func (c *Scrubber) ScrubFile(filePath string) ([]byte, error) { file, err := os.Open(filePath) @@ -177,6 +200,10 @@ func (c *Scrubber) scrub(data []byte, replacers []Replacer) []byte { continue } + if c.shouldApply != nil && !c.shouldApply(repl) { + continue + } + containsHint := false for _, hint := range repl.Hints { if bytes.Contains(data, []byte(hint)) { diff --git a/pkg/util/scrubber/yaml_scrubber.go b/pkg/util/scrubber/yaml_scrubber.go index 74016778573ba..f01d93e064ec5 100644 --- a/pkg/util/scrubber/yaml_scrubber.go +++ b/pkg/util/scrubber/yaml_scrubber.go @@ -85,6 +85,11 @@ func (c *Scrubber) ScrubDataObj(data *interface{}) { if replacer.YAMLKeyRegex == nil { continue } + + if c.shouldApply != nil && !c.shouldApply(replacer) { + continue + } + if replacer.YAMLKeyRegex.Match([]byte(key)) { if replacer.ProcessValue != nil { return true, replacer.ProcessValue(value) diff --git a/pkg/util/system/go.mod b/pkg/util/system/go.mod index 8ec61475312c9..b4ff73911bd1a 100644 --- a/pkg/util/system/go.mod +++ b/pkg/util/system/go.mod @@ -25,6 +25,7 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/go-ole/go-ole v1.3.0 // indirect @@ -40,3 +41,5 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/util/uuid/go.mod b/pkg/util/uuid/go.mod index de6cfd5cbb275..cc1f446f76aba 100644 --- a/pkg/util/uuid/go.mod +++ b/pkg/util/uuid/go.mod @@ -17,9 +17,9 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/go-ole/go-ole v1.3.0 // indirect - github.com/kr/text v0.2.0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect @@ -31,3 +31,5 @@ require ( go.uber.org/atomic v1.11.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/util/uuid/go.sum b/pkg/util/uuid/go.sum index c3eee394bf35e..cb390b984f56b 100644 --- a/pkg/util/uuid/go.sum +++ b/pkg/util/uuid/go.sum @@ -1,6 +1,5 @@ github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1c8PVE1PubbNx3mjUr09OqWGCs= github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= diff --git a/pkg/util/winutil/go.mod b/pkg/util/winutil/go.mod index f23d0e841a613..ffbe2bebbe915 100644 --- a/pkg/util/winutil/go.mod +++ b/pkg/util/winutil/go.mod @@ -18,9 +18,11 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/kr/text v0.2.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/util/winutil/go.sum b/pkg/util/winutil/go.sum index f752a0e34e2b9..e5868006ccf3b 100644 --- a/pkg/util/winutil/go.sum +++ b/pkg/util/winutil/go.sum @@ -1,6 +1,5 @@ github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1c8PVE1PubbNx3mjUr09OqWGCs= github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= diff --git a/test/new-e2e/go.mod b/test/new-e2e/go.mod index e436b5abdfb62..70a957028a0e0 100644 --- a/test/new-e2e/go.mod +++ b/test/new-e2e/go.mod @@ -49,7 +49,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 github.com/DataDog/datadog-agent/pkg/util/testutil v0.56.2 - github.com/DataDog/datadog-agent/pkg/version v0.59.0 + github.com/DataDog/datadog-agent/pkg/version v0.59.1 github.com/DataDog/datadog-agent/test/fakeintake v0.56.0-rc.3 github.com/DataDog/datadog-api-client-go v1.16.0 github.com/DataDog/datadog-api-client-go/v2 v2.31.0 diff --git a/test/otel/go.mod b/test/otel/go.mod index daa95297b8765..bee89d92f6c59 100644 --- a/test/otel/go.mod +++ b/test/otel/go.mod @@ -173,7 +173,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-agent/pkg/version v0.56.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/datadog-api-client-go/v2 v2.31.0 // indirect github.com/DataDog/datadog-go/v5 v5.5.0 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect From 6d7ae5bf2aeafbcef273e552ef130acd81431d28 Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Wed, 11 Dec 2024 14:30:57 +0100 Subject: [PATCH 118/303] [ASCII-2461] Fix flaky TestRunProviders (#31879) --- comp/core/flare/flare_test.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/comp/core/flare/flare_test.go b/comp/core/flare/flare_test.go index 69341d602611f..54589c35d23ea 100644 --- a/comp/core/flare/flare_test.go +++ b/comp/core/flare/flare_test.go @@ -75,8 +75,7 @@ func TestFlareCreation(t *testing.T) { } func TestRunProviders(t *testing.T) { - var firstRan atomic.Bool - var secondRan atomic.Bool + firstStarted := make(chan struct{}, 1) var secondDone atomic.Bool fakeTagger := mockTagger.SetupFakeTagger(t) @@ -105,7 +104,7 @@ func TestRunProviders(t *testing.T) { fx.Provide(fx.Annotate( func() *types.FlareFiller { return types.NewFiller(func(_ types.FlareBuilder) error { - firstRan.Store(true) + firstStarted <- struct{}{} return nil }) }, @@ -114,7 +113,6 @@ func TestRunProviders(t *testing.T) { fx.Provide(fx.Annotate( func() *types.FlareFiller { return types.NewFiller(func(_ types.FlareBuilder) error { - secondRan.Store(true) time.Sleep(10 * time.Second) secondDone.Store(true) return nil @@ -130,9 +128,13 @@ func TestRunProviders(t *testing.T) { fb, err := helpers.NewFlareBuilder(false, flarebuilder.FlareArgs{}) require.NoError(t, err) + start := time.Now() f.Comp.(*flare).runProviders(fb, cliProviderTimeout) + // ensure that providers are actually started + <-firstStarted + elapsed := time.Since(start) - require.True(t, firstRan.Load()) - require.True(t, secondRan.Load()) - require.False(t, secondDone.Load()) + // ensure that we're not blocking for the slow provider + assert.Less(t, elapsed, 5*time.Second) + assert.False(t, secondDone.Load()) } From c2c23bcc67580a2a75820efeac53cd58e30cfb70 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 13:46:39 +0000 Subject: [PATCH 119/303] Bump golang.org/x/sys from 0.27.0 to 0.28.0 in /pkg/trace (#31939) Co-authored-by: ichinaski --- comp/api/api/def/go.mod | 2 +- comp/api/api/def/go.sum | 4 ++-- comp/api/authtoken/go.mod | 2 +- comp/api/authtoken/go.sum | 4 ++-- comp/core/config/go.mod | 2 +- comp/core/config/go.sum | 4 ++-- comp/core/flare/types/go.mod | 2 +- comp/core/flare/types/go.sum | 4 ++-- comp/core/hostname/hostnameinterface/go.mod | 2 +- comp/core/hostname/hostnameinterface/go.sum | 4 ++-- comp/core/log/impl-trace/go.mod | 2 +- comp/core/log/impl-trace/go.sum | 4 ++-- comp/core/log/impl/go.mod | 2 +- comp/core/log/impl/go.sum | 4 ++-- comp/core/log/mock/go.mod | 2 +- comp/core/log/mock/go.sum | 4 ++-- comp/core/secrets/go.mod | 2 +- comp/core/secrets/go.sum | 4 ++-- comp/core/status/go.mod | 2 +- comp/core/status/go.sum | 4 ++-- comp/core/status/statusimpl/go.mod | 2 +- comp/core/status/statusimpl/go.sum | 4 ++-- comp/core/telemetry/go.mod | 2 +- comp/core/telemetry/go.sum | 4 ++-- comp/forwarder/defaultforwarder/go.mod | 2 +- comp/forwarder/defaultforwarder/go.sum | 4 ++-- comp/forwarder/orchestrator/orchestratorinterface/go.mod | 2 +- comp/forwarder/orchestrator/orchestratorinterface/go.sum | 4 ++-- comp/logs/agent/config/go.mod | 2 +- comp/logs/agent/config/go.sum | 4 ++-- comp/otelcol/converter/impl/go.mod | 2 +- comp/otelcol/converter/impl/go.sum | 4 ++-- comp/otelcol/ddflareextension/def/go.mod | 2 +- comp/otelcol/ddflareextension/def/go.sum | 4 ++-- comp/otelcol/ddflareextension/impl/go.mod | 2 +- comp/otelcol/ddflareextension/impl/go.sum | 4 ++-- comp/otelcol/logsagentpipeline/go.mod | 2 +- comp/otelcol/logsagentpipeline/go.sum | 4 ++-- comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod | 2 +- comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum | 4 ++-- comp/otelcol/otlp/components/exporter/datadogexporter/go.mod | 2 +- comp/otelcol/otlp/components/exporter/datadogexporter/go.sum | 4 ++-- .../otelcol/otlp/components/exporter/logsagentexporter/go.mod | 2 +- .../otelcol/otlp/components/exporter/logsagentexporter/go.sum | 4 ++-- .../otlp/components/exporter/serializerexporter/go.mod | 2 +- .../otlp/components/exporter/serializerexporter/go.sum | 4 ++-- comp/otelcol/otlp/components/metricsclient/go.mod | 2 +- comp/otelcol/otlp/components/metricsclient/go.sum | 4 ++-- comp/otelcol/otlp/components/statsprocessor/go.mod | 2 +- comp/otelcol/otlp/components/statsprocessor/go.sum | 4 ++-- comp/otelcol/otlp/testutil/go.mod | 2 +- comp/otelcol/otlp/testutil/go.sum | 4 ++-- comp/serializer/compression/go.mod | 2 +- comp/serializer/compression/go.sum | 4 ++-- comp/trace/agent/def/go.mod | 2 +- comp/trace/agent/def/go.sum | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- internal/tools/go.mod | 2 +- internal/tools/go.sum | 4 ++-- internal/tools/proto/go.mod | 2 +- internal/tools/proto/go.sum | 4 ++-- pkg/api/go.mod | 2 +- pkg/api/go.sum | 4 ++-- pkg/config/env/go.mod | 2 +- pkg/config/env/go.sum | 4 ++-- pkg/config/mock/go.mod | 2 +- pkg/config/mock/go.sum | 4 ++-- pkg/config/model/go.mod | 2 +- pkg/config/model/go.sum | 4 ++-- pkg/config/nodetreemodel/go.mod | 2 +- pkg/config/nodetreemodel/go.sum | 4 ++-- pkg/config/remote/go.mod | 2 +- pkg/config/remote/go.sum | 4 ++-- pkg/config/setup/go.mod | 2 +- pkg/config/setup/go.sum | 4 ++-- pkg/config/structure/go.mod | 2 +- pkg/config/structure/go.sum | 4 ++-- pkg/config/teeconfig/go.mod | 2 +- pkg/config/teeconfig/go.sum | 4 ++-- pkg/config/utils/go.mod | 2 +- pkg/config/utils/go.sum | 4 ++-- pkg/gohai/go.mod | 2 +- pkg/gohai/go.sum | 4 ++-- pkg/logs/auditor/go.mod | 2 +- pkg/logs/auditor/go.sum | 4 ++-- pkg/logs/client/go.mod | 2 +- pkg/logs/client/go.sum | 4 ++-- pkg/logs/diagnostic/go.mod | 2 +- pkg/logs/diagnostic/go.sum | 4 ++-- pkg/logs/message/go.mod | 2 +- pkg/logs/message/go.sum | 4 ++-- pkg/logs/metrics/go.mod | 2 +- pkg/logs/metrics/go.sum | 4 ++-- pkg/logs/pipeline/go.mod | 2 +- pkg/logs/pipeline/go.sum | 4 ++-- pkg/logs/processor/go.mod | 2 +- pkg/logs/processor/go.sum | 4 ++-- pkg/logs/sds/go.mod | 2 +- pkg/logs/sds/go.sum | 4 ++-- pkg/logs/sender/go.mod | 2 +- pkg/logs/sender/go.sum | 4 ++-- pkg/logs/sources/go.mod | 2 +- pkg/logs/sources/go.sum | 4 ++-- pkg/logs/util/testutils/go.mod | 2 +- pkg/logs/util/testutils/go.sum | 4 ++-- pkg/metrics/go.mod | 2 +- pkg/metrics/go.sum | 4 ++-- pkg/obfuscate/go.mod | 2 +- pkg/obfuscate/go.sum | 4 ++-- pkg/process/util/api/go.mod | 2 +- pkg/process/util/api/go.sum | 4 ++-- pkg/proto/go.mod | 2 +- pkg/proto/go.sum | 4 ++-- pkg/remoteconfig/state/go.mod | 1 + pkg/remoteconfig/state/go.sum | 4 ++-- pkg/security/secl/go.mod | 2 +- pkg/security/secl/go.sum | 4 ++-- pkg/serializer/go.mod | 2 +- pkg/serializer/go.sum | 4 ++-- pkg/telemetry/go.mod | 2 +- pkg/telemetry/go.sum | 4 ++-- pkg/trace/go.mod | 2 +- pkg/trace/go.sum | 4 ++-- pkg/trace/stats/oteltest/go.mod | 2 +- pkg/trace/stats/oteltest/go.sum | 4 ++-- pkg/util/cgroups/go.mod | 2 +- pkg/util/cgroups/go.sum | 4 ++-- pkg/util/defaultpaths/go.mod | 2 +- pkg/util/defaultpaths/go.sum | 4 ++-- pkg/util/filesystem/go.mod | 2 +- pkg/util/filesystem/go.sum | 4 ++-- pkg/util/flavor/go.mod | 2 +- pkg/util/flavor/go.sum | 4 ++-- pkg/util/fxutil/go.mod | 2 +- pkg/util/fxutil/go.sum | 4 ++-- pkg/util/grpc/go.mod | 2 +- pkg/util/grpc/go.sum | 4 ++-- pkg/util/http/go.mod | 2 +- pkg/util/http/go.sum | 4 ++-- pkg/util/log/setup/go.mod | 2 +- pkg/util/log/setup/go.sum | 4 ++-- pkg/util/system/go.mod | 2 +- pkg/util/system/go.sum | 4 ++-- pkg/util/system/socket/go.mod | 2 +- pkg/util/system/socket/go.sum | 4 ++-- pkg/util/uuid/go.mod | 2 +- pkg/util/uuid/go.sum | 4 ++-- pkg/util/winutil/go.mod | 2 +- pkg/util/winutil/go.sum | 4 ++-- test/fakeintake/go.mod | 2 +- test/fakeintake/go.sum | 4 ++-- test/new-e2e/go.mod | 2 +- test/new-e2e/go.sum | 4 ++-- test/otel/go.mod | 2 +- test/otel/go.sum | 4 ++-- 156 files changed, 234 insertions(+), 233 deletions(-) diff --git a/comp/api/api/def/go.mod b/comp/api/api/def/go.mod index 09f4bd9d7e62e..8a89ca045e6d6 100644 --- a/comp/api/api/def/go.mod +++ b/comp/api/api/def/go.mod @@ -11,5 +11,5 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect ) diff --git a/comp/api/api/def/go.sum b/comp/api/api/def/go.sum index e01f4bd76ea76..7b69276ecf542 100644 --- a/comp/api/api/def/go.sum +++ b/comp/api/api/def/go.sum @@ -14,7 +14,7 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/comp/api/authtoken/go.mod b/comp/api/authtoken/go.mod index 242f41ae9f7df..0d71335ec37a3 100644 --- a/comp/api/authtoken/go.mod +++ b/comp/api/authtoken/go.mod @@ -108,7 +108,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/comp/api/authtoken/go.sum b/comp/api/authtoken/go.sum index 324945ccfacf2..1441562d69bde 100644 --- a/comp/api/authtoken/go.sum +++ b/comp/api/authtoken/go.sum @@ -279,8 +279,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/comp/core/config/go.mod b/comp/core/config/go.mod index 53bf6993f2e3b..f7a43ae0beee2 100644 --- a/comp/core/config/go.mod +++ b/comp/core/config/go.mod @@ -104,7 +104,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/comp/core/config/go.sum b/comp/core/config/go.sum index f3d0810fd9fec..12326d3e1f9b6 100644 --- a/comp/core/config/go.sum +++ b/comp/core/config/go.sum @@ -282,8 +282,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/comp/core/flare/types/go.mod b/comp/core/flare/types/go.mod index a6ebdcf9f8a92..a3526c64a15dc 100644 --- a/comp/core/flare/types/go.mod +++ b/comp/core/flare/types/go.mod @@ -16,5 +16,5 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect ) diff --git a/comp/core/flare/types/go.sum b/comp/core/flare/types/go.sum index e01f4bd76ea76..7b69276ecf542 100644 --- a/comp/core/flare/types/go.sum +++ b/comp/core/flare/types/go.sum @@ -14,7 +14,7 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/comp/core/hostname/hostnameinterface/go.mod b/comp/core/hostname/hostnameinterface/go.mod index 4f6e92eb22127..c097205307cf6 100644 --- a/comp/core/hostname/hostnameinterface/go.mod +++ b/comp/core/hostname/hostnameinterface/go.mod @@ -25,6 +25,6 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/comp/core/hostname/hostnameinterface/go.sum b/comp/core/hostname/hostnameinterface/go.sum index b6080ae54f78c..3dcc180d9ba1c 100644 --- a/comp/core/hostname/hostnameinterface/go.sum +++ b/comp/core/hostname/hostnameinterface/go.sum @@ -28,8 +28,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/comp/core/log/impl-trace/go.mod b/comp/core/log/impl-trace/go.mod index 1a3d936200a26..5784f2a4cb400 100644 --- a/comp/core/log/impl-trace/go.mod +++ b/comp/core/log/impl-trace/go.mod @@ -108,7 +108,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/comp/core/log/impl-trace/go.sum b/comp/core/log/impl-trace/go.sum index 324945ccfacf2..1441562d69bde 100644 --- a/comp/core/log/impl-trace/go.sum +++ b/comp/core/log/impl-trace/go.sum @@ -279,8 +279,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/comp/core/log/impl/go.mod b/comp/core/log/impl/go.mod index 440ec8c7e2939..ea5f5ddb29885 100644 --- a/comp/core/log/impl/go.mod +++ b/comp/core/log/impl/go.mod @@ -99,7 +99,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/comp/core/log/impl/go.sum b/comp/core/log/impl/go.sum index 324945ccfacf2..1441562d69bde 100644 --- a/comp/core/log/impl/go.sum +++ b/comp/core/log/impl/go.sum @@ -279,8 +279,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/comp/core/log/mock/go.mod b/comp/core/log/mock/go.mod index c7cf8db9429e7..bf511bfc7e266 100644 --- a/comp/core/log/mock/go.mod +++ b/comp/core/log/mock/go.mod @@ -55,7 +55,7 @@ require ( github.com/spf13/pflag v1.0.5 // indirect go.uber.org/atomic v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/comp/core/log/mock/go.sum b/comp/core/log/mock/go.sum index b3bd1378fba86..1c7b17d164a5d 100644 --- a/comp/core/log/mock/go.sum +++ b/comp/core/log/mock/go.sum @@ -241,8 +241,8 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/comp/core/secrets/go.mod b/comp/core/secrets/go.mod index ed053a2120711..be88b648342b6 100644 --- a/comp/core/secrets/go.mod +++ b/comp/core/secrets/go.mod @@ -28,7 +28,7 @@ require ( github.com/stretchr/testify v1.10.0 go.uber.org/fx v1.23.0 golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f - golang.org/x/sys v0.27.0 + golang.org/x/sys v0.28.0 gopkg.in/yaml.v2 v2.4.0 ) diff --git a/comp/core/secrets/go.sum b/comp/core/secrets/go.sum index 24378e0ee687b..0bb14e9d57579 100644 --- a/comp/core/secrets/go.sum +++ b/comp/core/secrets/go.sum @@ -56,8 +56,8 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/comp/core/status/go.mod b/comp/core/status/go.mod index c71d31a9e3d40..49c200a653ba3 100644 --- a/comp/core/status/go.mod +++ b/comp/core/status/go.mod @@ -21,7 +21,7 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/comp/core/status/go.sum b/comp/core/status/go.sum index 5c1fe66f815be..9d0791f4f7d89 100644 --- a/comp/core/status/go.sum +++ b/comp/core/status/go.sum @@ -40,8 +40,8 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/comp/core/status/statusimpl/go.mod b/comp/core/status/statusimpl/go.mod index 084310e3bd689..cfb7ac9182260 100644 --- a/comp/core/status/statusimpl/go.mod +++ b/comp/core/status/statusimpl/go.mod @@ -114,7 +114,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/comp/core/status/statusimpl/go.sum b/comp/core/status/statusimpl/go.sum index 2d668dccb3ae5..358c24ff26324 100644 --- a/comp/core/status/statusimpl/go.sum +++ b/comp/core/status/statusimpl/go.sum @@ -292,8 +292,8 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/comp/core/telemetry/go.mod b/comp/core/telemetry/go.mod index 23f49ade405b7..4d38df7857b77 100644 --- a/comp/core/telemetry/go.mod +++ b/comp/core/telemetry/go.mod @@ -33,7 +33,7 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/comp/core/telemetry/go.sum b/comp/core/telemetry/go.sum index 6a015a3b68188..9067c10872735 100644 --- a/comp/core/telemetry/go.sum +++ b/comp/core/telemetry/go.sum @@ -48,8 +48,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/comp/forwarder/defaultforwarder/go.mod b/comp/forwarder/defaultforwarder/go.mod index 93d2d0e006c39..b3f2578ab6a84 100644 --- a/comp/forwarder/defaultforwarder/go.mod +++ b/comp/forwarder/defaultforwarder/go.mod @@ -147,7 +147,7 @@ require ( go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/comp/forwarder/defaultforwarder/go.sum b/comp/forwarder/defaultforwarder/go.sum index 66f7616ec4418..9c26c44f1cda8 100644 --- a/comp/forwarder/defaultforwarder/go.sum +++ b/comp/forwarder/defaultforwarder/go.sum @@ -306,8 +306,8 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/comp/forwarder/orchestrator/orchestratorinterface/go.mod b/comp/forwarder/orchestrator/orchestratorinterface/go.mod index 81d4001b2b4ba..501885a0c7b7b 100644 --- a/comp/forwarder/orchestrator/orchestratorinterface/go.mod +++ b/comp/forwarder/orchestrator/orchestratorinterface/go.mod @@ -154,7 +154,7 @@ require ( go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/comp/forwarder/orchestrator/orchestratorinterface/go.sum b/comp/forwarder/orchestrator/orchestratorinterface/go.sum index 53177ac4376d6..debd6cceb8b31 100644 --- a/comp/forwarder/orchestrator/orchestratorinterface/go.sum +++ b/comp/forwarder/orchestrator/orchestratorinterface/go.sum @@ -307,8 +307,8 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/comp/logs/agent/config/go.mod b/comp/logs/agent/config/go.mod index e31795b917bab..da4be1701769d 100644 --- a/comp/logs/agent/config/go.mod +++ b/comp/logs/agent/config/go.mod @@ -100,7 +100,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/comp/logs/agent/config/go.sum b/comp/logs/agent/config/go.sum index 324945ccfacf2..1441562d69bde 100644 --- a/comp/logs/agent/config/go.sum +++ b/comp/logs/agent/config/go.sum @@ -279,8 +279,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/comp/otelcol/converter/impl/go.mod b/comp/otelcol/converter/impl/go.mod index 2435c73c0c0ab..b13dbe2c343f9 100644 --- a/comp/otelcol/converter/impl/go.mod +++ b/comp/otelcol/converter/impl/go.mod @@ -115,7 +115,7 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/comp/otelcol/converter/impl/go.sum b/comp/otelcol/converter/impl/go.sum index edcc6b1df46e4..dd15ede05c8be 100644 --- a/comp/otelcol/converter/impl/go.sum +++ b/comp/otelcol/converter/impl/go.sum @@ -303,8 +303,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/comp/otelcol/ddflareextension/def/go.mod b/comp/otelcol/ddflareextension/def/go.mod index d0d35f560a084..afbb13fd7dc20 100644 --- a/comp/otelcol/ddflareextension/def/go.mod +++ b/comp/otelcol/ddflareextension/def/go.mod @@ -17,7 +17,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.67.1 // indirect diff --git a/comp/otelcol/ddflareextension/def/go.sum b/comp/otelcol/ddflareextension/def/go.sum index 2c09c99ac5912..7ce93f374bad3 100644 --- a/comp/otelcol/ddflareextension/def/go.sum +++ b/comp/otelcol/ddflareextension/def/go.sum @@ -53,8 +53,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= diff --git a/comp/otelcol/ddflareextension/impl/go.mod b/comp/otelcol/ddflareextension/impl/go.mod index ce0b658bdbefb..dd9308fb62aa6 100644 --- a/comp/otelcol/ddflareextension/impl/go.mod +++ b/comp/otelcol/ddflareextension/impl/go.mod @@ -510,7 +510,7 @@ require ( golang.org/x/net v0.31.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect golang.org/x/sync v0.9.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/term v0.26.0 // indirect golang.org/x/text v0.20.0 // indirect golang.org/x/time v0.8.0 // indirect diff --git a/comp/otelcol/ddflareextension/impl/go.sum b/comp/otelcol/ddflareextension/impl/go.sum index 671e97841c79b..7dd61c4dad8ad 100644 --- a/comp/otelcol/ddflareextension/impl/go.sum +++ b/comp/otelcol/ddflareextension/impl/go.sum @@ -1230,8 +1230,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= diff --git a/comp/otelcol/logsagentpipeline/go.mod b/comp/otelcol/logsagentpipeline/go.mod index 614caa1bd6c86..4966bc8e9fbad 100644 --- a/comp/otelcol/logsagentpipeline/go.mod +++ b/comp/otelcol/logsagentpipeline/go.mod @@ -154,7 +154,7 @@ require ( go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/comp/otelcol/logsagentpipeline/go.sum b/comp/otelcol/logsagentpipeline/go.sum index 9285d14a5c66a..2046340fbb070 100644 --- a/comp/otelcol/logsagentpipeline/go.sum +++ b/comp/otelcol/logsagentpipeline/go.sum @@ -307,8 +307,8 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= diff --git a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod index 29266162fd0aa..245d0eb4b48b0 100644 --- a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod +++ b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod @@ -166,7 +166,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum index 9285d14a5c66a..2046340fbb070 100644 --- a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum +++ b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum @@ -307,8 +307,8 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod index 2d08b1c40a5c3..0cc920d4b5d13 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod @@ -321,7 +321,7 @@ require ( golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect golang.org/x/net v0.31.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/term v0.26.0 // indirect golang.org/x/text v0.20.0 // indirect golang.org/x/time v0.8.0 // indirect diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum index ca4a45729f362..0b1fe883a8e59 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum @@ -568,8 +568,8 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod index 38d8f5ce4465f..72c156cf15e0d 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod @@ -158,7 +158,7 @@ require ( golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect golang.org/x/net v0.31.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/term v0.26.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum index 46c7f002b47da..908ead2935092 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum @@ -404,8 +404,8 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod index 959d47803df5e..ff05177cb587d 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod @@ -218,7 +218,7 @@ require ( go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.67.1 // indirect diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum index f50a19e48a061..691529b929edd 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum @@ -485,8 +485,8 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= diff --git a/comp/otelcol/otlp/components/metricsclient/go.mod b/comp/otelcol/otlp/components/metricsclient/go.mod index fd4131fa08ac9..953a7c7a017cd 100644 --- a/comp/otelcol/otlp/components/metricsclient/go.mod +++ b/comp/otelcol/otlp/components/metricsclient/go.mod @@ -25,7 +25,7 @@ require ( go.opentelemetry.io/otel/sdk v1.32.0 // indirect go.opentelemetry.io/otel/trace v1.32.0 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/comp/otelcol/otlp/components/metricsclient/go.sum b/comp/otelcol/otlp/components/metricsclient/go.sum index 4f2f48d1ce2f8..8c8f8cb8beddc 100644 --- a/comp/otelcol/otlp/components/metricsclient/go.sum +++ b/comp/otelcol/otlp/components/metricsclient/go.sum @@ -75,8 +75,8 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= diff --git a/comp/otelcol/otlp/components/statsprocessor/go.mod b/comp/otelcol/otlp/components/statsprocessor/go.mod index 2e082942b0c23..907edfd516589 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.mod +++ b/comp/otelcol/otlp/components/statsprocessor/go.mod @@ -89,7 +89,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect golang.org/x/time v0.8.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect diff --git a/comp/otelcol/otlp/components/statsprocessor/go.sum b/comp/otelcol/otlp/components/statsprocessor/go.sum index 259d4a5ef2d1b..520e6d9e0d851 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.sum +++ b/comp/otelcol/otlp/components/statsprocessor/go.sum @@ -214,8 +214,8 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= diff --git a/comp/otelcol/otlp/testutil/go.mod b/comp/otelcol/otlp/testutil/go.mod index 9593f520e9ab5..4db266071873e 100644 --- a/comp/otelcol/otlp/testutil/go.mod +++ b/comp/otelcol/otlp/testutil/go.mod @@ -98,7 +98,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.67.1 // indirect diff --git a/comp/otelcol/otlp/testutil/go.sum b/comp/otelcol/otlp/testutil/go.sum index 760f51bf0cd82..4b7a189aa89a0 100644 --- a/comp/otelcol/otlp/testutil/go.sum +++ b/comp/otelcol/otlp/testutil/go.sum @@ -316,8 +316,8 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= diff --git a/comp/serializer/compression/go.mod b/comp/serializer/compression/go.mod index 2ae9730174434..2fd30c52fb34f 100644 --- a/comp/serializer/compression/go.mod +++ b/comp/serializer/compression/go.mod @@ -97,7 +97,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/comp/serializer/compression/go.sum b/comp/serializer/compression/go.sum index b494c71596a4e..c969810bfb058 100644 --- a/comp/serializer/compression/go.sum +++ b/comp/serializer/compression/go.sum @@ -281,8 +281,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/comp/trace/agent/def/go.mod b/comp/trace/agent/def/go.mod index 20be806e2e410..051fa39644e58 100644 --- a/comp/trace/agent/def/go.mod +++ b/comp/trace/agent/def/go.mod @@ -31,7 +31,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.67.1 // indirect diff --git a/comp/trace/agent/def/go.sum b/comp/trace/agent/def/go.sum index e6671ffe97bf1..f6a6d197fb0a4 100644 --- a/comp/trace/agent/def/go.sum +++ b/comp/trace/agent/def/go.sum @@ -88,8 +88,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= diff --git a/go.mod b/go.mod index a3f7a7bf4f2ee..1d48e947979d0 100644 --- a/go.mod +++ b/go.mod @@ -310,7 +310,7 @@ require ( golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f golang.org/x/net v0.31.0 golang.org/x/sync v0.9.0 - golang.org/x/sys v0.27.0 + golang.org/x/sys v0.28.0 golang.org/x/text v0.20.0 golang.org/x/time v0.8.0 golang.org/x/tools v0.27.0 diff --git a/go.sum b/go.sum index b7142253bb0ab..bf22e29643077 100644 --- a/go.sum +++ b/go.sum @@ -2387,8 +2387,8 @@ golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= diff --git a/internal/tools/go.mod b/internal/tools/go.mod index 64be9555db011..977b438c8a53b 100644 --- a/internal/tools/go.mod +++ b/internal/tools/go.mod @@ -229,7 +229,7 @@ require ( golang.org/x/mod v0.22.0 // indirect golang.org/x/net v0.31.0 // indirect golang.org/x/sync v0.9.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/term v0.26.0 // indirect golang.org/x/text v0.20.0 // indirect golang.org/x/tools v0.27.0 // indirect diff --git a/internal/tools/go.sum b/internal/tools/go.sum index 92b0781179c08..e525259ff8fe1 100644 --- a/internal/tools/go.sum +++ b/internal/tools/go.sum @@ -689,8 +689,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= diff --git a/internal/tools/proto/go.mod b/internal/tools/proto/go.mod index e59f2dde50aa8..c184f7199cac0 100644 --- a/internal/tools/proto/go.mod +++ b/internal/tools/proto/go.mod @@ -21,7 +21,7 @@ require ( golang.org/x/mod v0.22.0 // indirect golang.org/x/net v0.31.0 // indirect golang.org/x/sync v0.9.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect golang.org/x/tools v0.27.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 // indirect diff --git a/internal/tools/proto/go.sum b/internal/tools/proto/go.sum index b4f392a410b6f..eaa399967ead7 100644 --- a/internal/tools/proto/go.sum +++ b/internal/tools/proto/go.sum @@ -89,8 +89,8 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= diff --git a/pkg/api/go.mod b/pkg/api/go.mod index 945605825f184..0fd5914a9094d 100644 --- a/pkg/api/go.mod +++ b/pkg/api/go.mod @@ -101,7 +101,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/api/go.sum b/pkg/api/go.sum index 324945ccfacf2..1441562d69bde 100644 --- a/pkg/api/go.sum +++ b/pkg/api/go.sum @@ -279,8 +279,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/config/env/go.mod b/pkg/config/env/go.mod index de1167299c7b9..c98d3f9e2d11e 100644 --- a/pkg/config/env/go.mod +++ b/pkg/config/env/go.mod @@ -45,7 +45,7 @@ require ( github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/config/env/go.sum b/pkg/config/env/go.sum index 2e74083b10f1d..b7b383aee36ed 100644 --- a/pkg/config/env/go.sum +++ b/pkg/config/env/go.sum @@ -236,8 +236,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/config/mock/go.mod b/pkg/config/mock/go.mod index bd41d45520253..e526a9aa1d0ee 100644 --- a/pkg/config/mock/go.mod +++ b/pkg/config/mock/go.mod @@ -80,7 +80,7 @@ require ( github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/config/mock/go.sum b/pkg/config/mock/go.sum index b70b04e70aa56..b60bbee1b243d 100644 --- a/pkg/config/mock/go.sum +++ b/pkg/config/mock/go.sum @@ -275,8 +275,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/config/model/go.mod b/pkg/config/model/go.mod index c1fdbcf811244..7f648a0c2076c 100644 --- a/pkg/config/model/go.mod +++ b/pkg/config/model/go.mod @@ -33,7 +33,7 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/config/model/go.sum b/pkg/config/model/go.sum index ef76baba5c97d..ddbfab1c363b2 100644 --- a/pkg/config/model/go.sum +++ b/pkg/config/model/go.sum @@ -219,8 +219,8 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/config/nodetreemodel/go.mod b/pkg/config/nodetreemodel/go.mod index b349c1b7ee78c..fddf0197843dc 100644 --- a/pkg/config/nodetreemodel/go.mod +++ b/pkg/config/nodetreemodel/go.mod @@ -37,7 +37,7 @@ require ( github.com/spf13/afero v1.11.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/config/nodetreemodel/go.sum b/pkg/config/nodetreemodel/go.sum index 594839f68ca17..e896db4ce9103 100644 --- a/pkg/config/nodetreemodel/go.sum +++ b/pkg/config/nodetreemodel/go.sum @@ -222,8 +222,8 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/config/remote/go.mod b/pkg/config/remote/go.mod index 45abbf8a59a03..7442b0348731d 100644 --- a/pkg/config/remote/go.mod +++ b/pkg/config/remote/go.mod @@ -143,7 +143,7 @@ require ( github.com/stretchr/objx v0.5.2 // indirect github.com/tinylib/msgp v1.2.4 // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 // indirect diff --git a/pkg/config/remote/go.sum b/pkg/config/remote/go.sum index dcb57dbfe438b..a5c2739769aa2 100644 --- a/pkg/config/remote/go.sum +++ b/pkg/config/remote/go.sum @@ -419,8 +419,8 @@ golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= diff --git a/pkg/config/setup/go.mod b/pkg/config/setup/go.mod index b135e7a2d406d..1813f0c12bcbd 100644 --- a/pkg/config/setup/go.mod +++ b/pkg/config/setup/go.mod @@ -102,7 +102,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/config/setup/go.sum b/pkg/config/setup/go.sum index 3308d693c3968..a67414c323f7c 100644 --- a/pkg/config/setup/go.sum +++ b/pkg/config/setup/go.sum @@ -284,8 +284,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/config/structure/go.mod b/pkg/config/structure/go.mod index c282e2e4de06e..6f87e72960ea6 100644 --- a/pkg/config/structure/go.mod +++ b/pkg/config/structure/go.mod @@ -59,7 +59,7 @@ require ( github.com/spf13/pflag v1.0.5 // indirect go.uber.org/atomic v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/config/structure/go.sum b/pkg/config/structure/go.sum index 594839f68ca17..e896db4ce9103 100644 --- a/pkg/config/structure/go.sum +++ b/pkg/config/structure/go.sum @@ -222,8 +222,8 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/config/teeconfig/go.mod b/pkg/config/teeconfig/go.mod index 07988a62ac5a3..c65facf0b1e58 100644 --- a/pkg/config/teeconfig/go.mod +++ b/pkg/config/teeconfig/go.mod @@ -30,7 +30,7 @@ require ( github.com/spf13/pflag v1.0.5 // indirect go.uber.org/atomic v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/pkg/config/teeconfig/go.sum b/pkg/config/teeconfig/go.sum index ef76baba5c97d..ddbfab1c363b2 100644 --- a/pkg/config/teeconfig/go.sum +++ b/pkg/config/teeconfig/go.sum @@ -219,8 +219,8 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/config/utils/go.mod b/pkg/config/utils/go.mod index 8d486b6d22804..c27cbcf9b59f8 100644 --- a/pkg/config/utils/go.mod +++ b/pkg/config/utils/go.mod @@ -85,7 +85,7 @@ require ( github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/config/utils/go.sum b/pkg/config/utils/go.sum index b70b04e70aa56..b60bbee1b243d 100644 --- a/pkg/config/utils/go.sum +++ b/pkg/config/utils/go.sum @@ -275,8 +275,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/gohai/go.mod b/pkg/gohai/go.mod index 91371a34fdf67..c0363c2bcc074 100644 --- a/pkg/gohai/go.mod +++ b/pkg/gohai/go.mod @@ -10,7 +10,7 @@ require ( github.com/moby/sys/mountinfo v0.7.2 github.com/shirou/gopsutil/v3 v3.24.5 github.com/stretchr/testify v1.10.0 - golang.org/x/sys v0.27.0 + golang.org/x/sys v0.28.0 ) require ( diff --git a/pkg/gohai/go.sum b/pkg/gohai/go.sum index 2315dbdfd4b60..d08fc94f6ffe7 100644 --- a/pkg/gohai/go.sum +++ b/pkg/gohai/go.sum @@ -41,8 +41,8 @@ go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0 golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/pkg/logs/auditor/go.mod b/pkg/logs/auditor/go.mod index f25078eb0613e..ddbd7465dad7f 100644 --- a/pkg/logs/auditor/go.mod +++ b/pkg/logs/auditor/go.mod @@ -99,7 +99,7 @@ require ( github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/logs/auditor/go.sum b/pkg/logs/auditor/go.sum index b70b04e70aa56..b60bbee1b243d 100644 --- a/pkg/logs/auditor/go.sum +++ b/pkg/logs/auditor/go.sum @@ -275,8 +275,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/logs/client/go.mod b/pkg/logs/client/go.mod index f6c70fa120111..98d517064e966 100644 --- a/pkg/logs/client/go.mod +++ b/pkg/logs/client/go.mod @@ -131,7 +131,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/pkg/logs/client/go.sum b/pkg/logs/client/go.sum index 9a3e2a6dae741..1280297d26d15 100644 --- a/pkg/logs/client/go.sum +++ b/pkg/logs/client/go.sum @@ -286,8 +286,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/logs/diagnostic/go.mod b/pkg/logs/diagnostic/go.mod index 6794be809224a..5d1ec2ef8d375 100644 --- a/pkg/logs/diagnostic/go.mod +++ b/pkg/logs/diagnostic/go.mod @@ -109,7 +109,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/logs/diagnostic/go.sum b/pkg/logs/diagnostic/go.sum index 324945ccfacf2..1441562d69bde 100644 --- a/pkg/logs/diagnostic/go.sum +++ b/pkg/logs/diagnostic/go.sum @@ -279,8 +279,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/logs/message/go.mod b/pkg/logs/message/go.mod index 9af21b652514f..926d1755736a7 100644 --- a/pkg/logs/message/go.mod +++ b/pkg/logs/message/go.mod @@ -95,7 +95,7 @@ require ( github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/logs/message/go.sum b/pkg/logs/message/go.sum index b70b04e70aa56..b60bbee1b243d 100644 --- a/pkg/logs/message/go.sum +++ b/pkg/logs/message/go.sum @@ -275,8 +275,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/logs/metrics/go.mod b/pkg/logs/metrics/go.mod index 3a272b272eee0..4bdfea3031f8c 100644 --- a/pkg/logs/metrics/go.mod +++ b/pkg/logs/metrics/go.mod @@ -40,7 +40,7 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/logs/metrics/go.sum b/pkg/logs/metrics/go.sum index cd355525b9620..2565635bc3e93 100644 --- a/pkg/logs/metrics/go.sum +++ b/pkg/logs/metrics/go.sum @@ -52,8 +52,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/pkg/logs/pipeline/go.mod b/pkg/logs/pipeline/go.mod index d5ad9fc3387d6..8e94ae545d913 100644 --- a/pkg/logs/pipeline/go.mod +++ b/pkg/logs/pipeline/go.mod @@ -151,7 +151,7 @@ require ( go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/pkg/logs/pipeline/go.sum b/pkg/logs/pipeline/go.sum index 9285d14a5c66a..2046340fbb070 100644 --- a/pkg/logs/pipeline/go.sum +++ b/pkg/logs/pipeline/go.sum @@ -307,8 +307,8 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= diff --git a/pkg/logs/processor/go.mod b/pkg/logs/processor/go.mod index 597b56d08b470..92711d3f0904c 100644 --- a/pkg/logs/processor/go.mod +++ b/pkg/logs/processor/go.mod @@ -130,7 +130,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/pkg/logs/processor/go.sum b/pkg/logs/processor/go.sum index d37f9cd540349..90a3df8fcf57a 100644 --- a/pkg/logs/processor/go.sum +++ b/pkg/logs/processor/go.sum @@ -300,8 +300,8 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= diff --git a/pkg/logs/sds/go.mod b/pkg/logs/sds/go.mod index 25d3edc9a9039..de57c77f0c334 100644 --- a/pkg/logs/sds/go.mod +++ b/pkg/logs/sds/go.mod @@ -124,7 +124,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/pkg/logs/sds/go.sum b/pkg/logs/sds/go.sum index 2d08c2de231b8..f4fe0336fb3e7 100644 --- a/pkg/logs/sds/go.sum +++ b/pkg/logs/sds/go.sum @@ -284,8 +284,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/logs/sender/go.mod b/pkg/logs/sender/go.mod index 289d3463425c9..34f1b22725b61 100644 --- a/pkg/logs/sender/go.mod +++ b/pkg/logs/sender/go.mod @@ -132,7 +132,7 @@ require ( go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/pkg/logs/sender/go.sum b/pkg/logs/sender/go.sum index 9a3e2a6dae741..1280297d26d15 100644 --- a/pkg/logs/sender/go.sum +++ b/pkg/logs/sender/go.sum @@ -286,8 +286,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/logs/sources/go.mod b/pkg/logs/sources/go.mod index 84546c2435fbe..d4cb6c8fae893 100644 --- a/pkg/logs/sources/go.mod +++ b/pkg/logs/sources/go.mod @@ -93,7 +93,7 @@ require ( github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/logs/sources/go.sum b/pkg/logs/sources/go.sum index b70b04e70aa56..b60bbee1b243d 100644 --- a/pkg/logs/sources/go.sum +++ b/pkg/logs/sources/go.sum @@ -275,8 +275,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/logs/util/testutils/go.mod b/pkg/logs/util/testutils/go.mod index 71bf57e885bc8..c8bdb9b516e9f 100644 --- a/pkg/logs/util/testutils/go.mod +++ b/pkg/logs/util/testutils/go.mod @@ -92,7 +92,7 @@ require ( github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/pkg/logs/util/testutils/go.sum b/pkg/logs/util/testutils/go.sum index b70b04e70aa56..b60bbee1b243d 100644 --- a/pkg/logs/util/testutils/go.sum +++ b/pkg/logs/util/testutils/go.sum @@ -275,8 +275,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/metrics/go.mod b/pkg/metrics/go.mod index a00176bd56df9..98ca0a495a8db 100644 --- a/pkg/metrics/go.mod +++ b/pkg/metrics/go.mod @@ -116,7 +116,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/pkg/metrics/go.sum b/pkg/metrics/go.sum index 9528a7ab7312d..5bbafd25cf4f1 100644 --- a/pkg/metrics/go.sum +++ b/pkg/metrics/go.sum @@ -294,8 +294,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/obfuscate/go.mod b/pkg/obfuscate/go.mod index 198c5c2fc5cfe..6244babbebdad 100644 --- a/pkg/obfuscate/go.mod +++ b/pkg/obfuscate/go.mod @@ -21,7 +21,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/obfuscate/go.sum b/pkg/obfuscate/go.sum index 7a042c0a114ed..110dcdcb3b979 100644 --- a/pkg/obfuscate/go.sum +++ b/pkg/obfuscate/go.sum @@ -74,8 +74,8 @@ golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= diff --git a/pkg/process/util/api/go.mod b/pkg/process/util/api/go.mod index aabb46411e91a..f76e70cb9ee0f 100644 --- a/pkg/process/util/api/go.mod +++ b/pkg/process/util/api/go.mod @@ -43,7 +43,7 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/process/util/api/go.sum b/pkg/process/util/api/go.sum index e79f1957f4ded..7343a1cf6d04e 100644 --- a/pkg/process/util/api/go.sum +++ b/pkg/process/util/api/go.sum @@ -79,8 +79,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/proto/go.mod b/pkg/proto/go.mod index a32e4765c7eef..31b8133d579a2 100644 --- a/pkg/proto/go.mod +++ b/pkg/proto/go.mod @@ -25,7 +25,7 @@ require ( github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/vmihailenco/tagparser v0.1.2 // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect diff --git a/pkg/proto/go.sum b/pkg/proto/go.sum index f8c2e6a2fb3ba..e5169ad285286 100644 --- a/pkg/proto/go.sum +++ b/pkg/proto/go.sum @@ -109,8 +109,8 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/pkg/remoteconfig/state/go.mod b/pkg/remoteconfig/state/go.mod index 70621d8c5107a..cba41ddd27681 100644 --- a/pkg/remoteconfig/state/go.mod +++ b/pkg/remoteconfig/state/go.mod @@ -15,5 +15,6 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect golang.org/x/crypto v0.29.0 // indirect + golang.org/x/sys v0.28.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/remoteconfig/state/go.sum b/pkg/remoteconfig/state/go.sum index 3f95fd21b0871..5d971132d7ec4 100644 --- a/pkg/remoteconfig/state/go.sum +++ b/pkg/remoteconfig/state/go.sum @@ -23,8 +23,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/pkg/security/secl/go.mod b/pkg/security/secl/go.mod index e5f0a3c820483..8be4ff1e048be 100644 --- a/pkg/security/secl/go.mod +++ b/pkg/security/secl/go.mod @@ -17,7 +17,7 @@ require ( github.com/spf13/cast v1.7.0 github.com/stretchr/testify v1.10.0 github.com/xeipuuv/gojsonschema v1.2.0 - golang.org/x/sys v0.27.0 + golang.org/x/sys v0.28.0 golang.org/x/text v0.20.0 golang.org/x/tools v0.27.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/pkg/security/secl/go.sum b/pkg/security/secl/go.sum index 0c694b56983cf..354a1917077fc 100644 --- a/pkg/security/secl/go.sum +++ b/pkg/security/secl/go.sum @@ -90,8 +90,8 @@ golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/serializer/go.mod b/pkg/serializer/go.mod index 815c0bc0fca03..6975af71a3a78 100644 --- a/pkg/serializer/go.mod +++ b/pkg/serializer/go.mod @@ -179,7 +179,7 @@ require ( go.uber.org/zap v1.27.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/serializer/go.sum b/pkg/serializer/go.sum index ecef4fa7182fa..8260879f5cb4d 100644 --- a/pkg/serializer/go.sum +++ b/pkg/serializer/go.sum @@ -350,8 +350,8 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= diff --git a/pkg/telemetry/go.mod b/pkg/telemetry/go.mod index d50e41412bcc8..6b727ea0cfd97 100644 --- a/pkg/telemetry/go.mod +++ b/pkg/telemetry/go.mod @@ -36,7 +36,7 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/telemetry/go.sum b/pkg/telemetry/go.sum index a634eb0726e6e..6ba871b73d5aa 100644 --- a/pkg/telemetry/go.sum +++ b/pkg/telemetry/go.sum @@ -50,8 +50,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/pkg/trace/go.mod b/pkg/trace/go.mod index 575006dcc0326..6853ea9519164 100644 --- a/pkg/trace/go.mod +++ b/pkg/trace/go.mod @@ -44,7 +44,7 @@ require ( go.opentelemetry.io/otel v1.32.0 go.opentelemetry.io/otel/metric v1.32.0 go.uber.org/atomic v1.11.0 - golang.org/x/sys v0.27.0 + golang.org/x/sys v0.28.0 golang.org/x/time v0.8.0 google.golang.org/grpc v1.67.1 google.golang.org/protobuf v1.35.2 diff --git a/pkg/trace/go.sum b/pkg/trace/go.sum index 91f1b0b48ab3d..5d3d0d4a89d22 100644 --- a/pkg/trace/go.sum +++ b/pkg/trace/go.sum @@ -372,8 +372,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/pkg/trace/stats/oteltest/go.mod b/pkg/trace/stats/oteltest/go.mod index a145c90943402..e80c6fc27dccd 100644 --- a/pkg/trace/stats/oteltest/go.mod +++ b/pkg/trace/stats/oteltest/go.mod @@ -76,7 +76,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/net v0.31.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect golang.org/x/time v0.8.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect diff --git a/pkg/trace/stats/oteltest/go.sum b/pkg/trace/stats/oteltest/go.sum index 259d4a5ef2d1b..520e6d9e0d851 100644 --- a/pkg/trace/stats/oteltest/go.sum +++ b/pkg/trace/stats/oteltest/go.sum @@ -214,8 +214,8 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= diff --git a/pkg/util/cgroups/go.mod b/pkg/util/cgroups/go.mod index df4c25d4052b8..47a3c2c368f5f 100644 --- a/pkg/util/cgroups/go.mod +++ b/pkg/util/cgroups/go.mod @@ -29,7 +29,7 @@ require ( github.com/opencontainers/runtime-spec v1.2.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/util/cgroups/go.sum b/pkg/util/cgroups/go.sum index e85a1ea965ce8..69f8c3e58e44b 100644 --- a/pkg/util/cgroups/go.sum +++ b/pkg/util/cgroups/go.sum @@ -31,8 +31,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/pkg/util/defaultpaths/go.mod b/pkg/util/defaultpaths/go.mod index d87440f277c30..ad84aa45db6e9 100644 --- a/pkg/util/defaultpaths/go.mod +++ b/pkg/util/defaultpaths/go.mod @@ -13,7 +13,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/executable v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/winutil v0.56.0-rc.3 - golang.org/x/sys v0.27.0 + golang.org/x/sys v0.28.0 ) require ( diff --git a/pkg/util/defaultpaths/go.sum b/pkg/util/defaultpaths/go.sum index c3b0b0188c902..767c365bf98df 100644 --- a/pkg/util/defaultpaths/go.sum +++ b/pkg/util/defaultpaths/go.sum @@ -16,8 +16,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/pkg/util/filesystem/go.mod b/pkg/util/filesystem/go.mod index cb61a2bdb1701..bc466baa93e3e 100644 --- a/pkg/util/filesystem/go.mod +++ b/pkg/util/filesystem/go.mod @@ -15,7 +15,7 @@ require ( github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 github.com/shirou/gopsutil/v3 v3.24.5 github.com/stretchr/testify v1.10.0 - golang.org/x/sys v0.27.0 + golang.org/x/sys v0.28.0 ) require ( diff --git a/pkg/util/filesystem/go.sum b/pkg/util/filesystem/go.sum index 7bde33aa41ad5..ed5847ab111d3 100644 --- a/pkg/util/filesystem/go.sum +++ b/pkg/util/filesystem/go.sum @@ -29,8 +29,8 @@ golang.org/x/sys v0.0.0-20190529164535-6a60838ec259/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/pkg/util/flavor/go.mod b/pkg/util/flavor/go.mod index c9c0f4b4c6d60..e6597dff10c65 100644 --- a/pkg/util/flavor/go.mod +++ b/pkg/util/flavor/go.mod @@ -81,7 +81,7 @@ require ( github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/util/flavor/go.sum b/pkg/util/flavor/go.sum index b70b04e70aa56..b60bbee1b243d 100644 --- a/pkg/util/flavor/go.sum +++ b/pkg/util/flavor/go.sum @@ -275,8 +275,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/util/fxutil/go.mod b/pkg/util/fxutil/go.mod index 249b7b5223891..48681aa9b89a5 100644 --- a/pkg/util/fxutil/go.mod +++ b/pkg/util/fxutil/go.mod @@ -24,6 +24,6 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/util/fxutil/go.sum b/pkg/util/fxutil/go.sum index b6080ae54f78c..3dcc180d9ba1c 100644 --- a/pkg/util/fxutil/go.sum +++ b/pkg/util/fxutil/go.sum @@ -28,8 +28,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/pkg/util/grpc/go.mod b/pkg/util/grpc/go.mod index d4e591bfe5d0e..9798867b0e38d 100644 --- a/pkg/util/grpc/go.mod +++ b/pkg/util/grpc/go.mod @@ -97,7 +97,7 @@ require ( go.uber.org/atomic v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect golang.org/x/oauth2 v0.23.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 // indirect diff --git a/pkg/util/grpc/go.sum b/pkg/util/grpc/go.sum index 2670baa59f394..f3926160d06fa 100644 --- a/pkg/util/grpc/go.sum +++ b/pkg/util/grpc/go.sum @@ -322,8 +322,8 @@ golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= diff --git a/pkg/util/http/go.mod b/pkg/util/http/go.mod index 86386cd3fe51e..561ab50ecabe4 100644 --- a/pkg/util/http/go.mod +++ b/pkg/util/http/go.mod @@ -83,7 +83,7 @@ require ( github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/util/http/go.sum b/pkg/util/http/go.sum index d2da3c8b27c74..d12b0ce7595dd 100644 --- a/pkg/util/http/go.sum +++ b/pkg/util/http/go.sum @@ -277,8 +277,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/util/log/setup/go.mod b/pkg/util/log/setup/go.mod index a5fe63b6f8faa..11b3815ca0a92 100644 --- a/pkg/util/log/setup/go.mod +++ b/pkg/util/log/setup/go.mod @@ -82,7 +82,7 @@ require ( github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/util/log/setup/go.sum b/pkg/util/log/setup/go.sum index b70b04e70aa56..b60bbee1b243d 100644 --- a/pkg/util/log/setup/go.sum +++ b/pkg/util/log/setup/go.sum @@ -275,8 +275,8 @@ golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= diff --git a/pkg/util/system/go.mod b/pkg/util/system/go.mod index b4ff73911bd1a..19c8faadba063 100644 --- a/pkg/util/system/go.mod +++ b/pkg/util/system/go.mod @@ -20,7 +20,7 @@ require ( github.com/shirou/gopsutil/v3 v3.24.5 github.com/stretchr/testify v1.10.0 go.uber.org/atomic v1.11.0 - golang.org/x/sys v0.27.0 + golang.org/x/sys v0.28.0 ) require ( diff --git a/pkg/util/system/go.sum b/pkg/util/system/go.sum index 0789cc0a43849..5b8aa8f5cf5c1 100644 --- a/pkg/util/system/go.sum +++ b/pkg/util/system/go.sum @@ -42,8 +42,8 @@ golang.org/x/sys v0.0.0-20190529164535-6a60838ec259/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/pkg/util/system/socket/go.mod b/pkg/util/system/socket/go.mod index d3b2514425928..adca0da3a1292 100644 --- a/pkg/util/system/socket/go.mod +++ b/pkg/util/system/socket/go.mod @@ -4,4 +4,4 @@ go 1.22.0 require github.com/Microsoft/go-winio v0.6.2 -require golang.org/x/sys v0.27.0 // indirect +require golang.org/x/sys v0.28.0 // indirect diff --git a/pkg/util/system/socket/go.sum b/pkg/util/system/socket/go.sum index 58b1be1082c18..d723dbfa45f9e 100644 --- a/pkg/util/system/socket/go.sum +++ b/pkg/util/system/socket/go.sum @@ -1,4 +1,4 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= diff --git a/pkg/util/uuid/go.mod b/pkg/util/uuid/go.mod index cc1f446f76aba..36c2bd314e410 100644 --- a/pkg/util/uuid/go.mod +++ b/pkg/util/uuid/go.mod @@ -12,7 +12,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/cache v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 github.com/shirou/gopsutil/v3 v3.24.5 - golang.org/x/sys v0.27.0 + golang.org/x/sys v0.28.0 ) require ( diff --git a/pkg/util/uuid/go.sum b/pkg/util/uuid/go.sum index cb390b984f56b..45f247c1429f6 100644 --- a/pkg/util/uuid/go.sum +++ b/pkg/util/uuid/go.sum @@ -41,8 +41,8 @@ go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0 golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/pkg/util/winutil/go.mod b/pkg/util/winutil/go.mod index ffbe2bebbe915..801288c667f47 100644 --- a/pkg/util/winutil/go.mod +++ b/pkg/util/winutil/go.mod @@ -13,7 +13,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 github.com/stretchr/testify v1.10.0 go.uber.org/atomic v1.11.0 - golang.org/x/sys v0.27.0 + golang.org/x/sys v0.28.0 ) require ( diff --git a/pkg/util/winutil/go.sum b/pkg/util/winutil/go.sum index e5868006ccf3b..99e864f633ef6 100644 --- a/pkg/util/winutil/go.sum +++ b/pkg/util/winutil/go.sum @@ -16,8 +16,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/test/fakeintake/go.mod b/test/fakeintake/go.mod index 5caf2937f7ad5..b4094d4af835e 100644 --- a/test/fakeintake/go.mod +++ b/test/fakeintake/go.mod @@ -53,7 +53,7 @@ require ( github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/spf13/pflag v1.0.5 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.20.0 // indirect golang.org/x/tools v0.27.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/test/fakeintake/go.sum b/test/fakeintake/go.sum index 66dfefa293b31..7267f4b399133 100644 --- a/test/fakeintake/go.sum +++ b/test/fakeintake/go.sum @@ -115,8 +115,8 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= diff --git a/test/new-e2e/go.mod b/test/new-e2e/go.mod index 70a957028a0e0..f42ee4e61a984 100644 --- a/test/new-e2e/go.mod +++ b/test/new-e2e/go.mod @@ -81,7 +81,7 @@ require ( github.com/stretchr/testify v1.10.0 github.com/xeipuuv/gojsonschema v1.2.0 golang.org/x/crypto v0.29.0 - golang.org/x/sys v0.27.0 + golang.org/x/sys v0.28.0 golang.org/x/term v0.26.0 gopkg.in/yaml.v2 v2.4.0 gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 diff --git a/test/new-e2e/go.sum b/test/new-e2e/go.sum index 959fa036fca7d..2942cca211484 100644 --- a/test/new-e2e/go.sum +++ b/test/new-e2e/go.sum @@ -633,8 +633,8 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= diff --git a/test/otel/go.mod b/test/otel/go.mod index bee89d92f6c59..a20206bf8391a 100644 --- a/test/otel/go.mod +++ b/test/otel/go.mod @@ -294,7 +294,7 @@ require ( golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect golang.org/x/net v0.31.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/sys v0.28.0 // indirect golang.org/x/term v0.26.0 // indirect golang.org/x/text v0.20.0 // indirect golang.org/x/time v0.8.0 // indirect diff --git a/test/otel/go.sum b/test/otel/go.sum index 41eeabdd1023c..a2ed9a90d5779 100644 --- a/test/otel/go.sum +++ b/test/otel/go.sum @@ -550,8 +550,8 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= From 7bab2dc3c32ab019b7e5a03c4a14d0fb439a69ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20Juli=C3=A1n?= Date: Wed, 11 Dec 2024 14:49:54 +0100 Subject: [PATCH 120/303] usm: Refactor istio monitor to use new uprobe attacher (#29303) --- pkg/network/usm/ebpf_ssl.go | 7 +- pkg/network/usm/istio.go | 194 ++++++++-------------------------- pkg/network/usm/istio_test.go | 137 +++++++++++++----------- 3 files changed, 127 insertions(+), 211 deletions(-) diff --git a/pkg/network/usm/ebpf_ssl.go b/pkg/network/usm/ebpf_ssl.go index af4fa84364568..64e452ea7fe45 100644 --- a/pkg/network/usm/ebpf_ssl.go +++ b/pkg/network/usm/ebpf_ssl.go @@ -466,10 +466,15 @@ func newSSLProgramProtocolFactory(m *manager.Manager) protocols.ProtocolFactory return nil, fmt.Errorf("error initializing nodejs monitor: %w", err) } + istio, err := newIstioMonitor(c, m) + if err != nil { + return nil, fmt.Errorf("error initializing istio monitor: %w", err) + } + return &sslProgram{ cfg: c, watcher: watcher, - istioMonitor: newIstioMonitor(c, m), + istioMonitor: istio, nodeJSMonitor: nodejs, }, nil } diff --git a/pkg/network/usm/istio.go b/pkg/network/usm/istio.go index 6fff6b6fd493b..4abb8c8995869 100644 --- a/pkg/network/usm/istio.go +++ b/pkg/network/usm/istio.go @@ -9,24 +9,22 @@ package usm import ( "fmt" - "os" "strings" - "sync" - "time" manager "github.com/DataDog/ebpf-manager" + "github.com/DataDog/datadog-agent/pkg/ebpf/uprobes" "github.com/DataDog/datadog-agent/pkg/network/config" "github.com/DataDog/datadog-agent/pkg/network/usm/consts" - "github.com/DataDog/datadog-agent/pkg/network/usm/utils" "github.com/DataDog/datadog-agent/pkg/process/monitor" - "github.com/DataDog/datadog-agent/pkg/util/kernel" "github.com/DataDog/datadog-agent/pkg/util/log" ) const ( istioSslReadRetprobe = "istio_uretprobe__SSL_read" istioSslWriteRetprobe = "istio_uretprobe__SSL_write" + + istioAttacherName = "istio" ) var istioProbes = []manager.ProbesSelector{ @@ -83,64 +81,41 @@ var istioProbes = []manager.ProbesSelector{ // because the Envoy binary embedded in the Istio containers have debug symbols // whereas the "vanilla" Envoy images are distributed without them. type istioMonitor struct { - registry *utils.FileRegistry - procRoot string - envoyCmd string - - // `utils.FileRegistry` callbacks - registerCB func(utils.FilePath) error - unregisterCB func(utils.FilePath) error - - // Termination - wg sync.WaitGroup - done chan struct{} + attacher *uprobes.UprobeAttacher + envoyCmd string + processMonitor *monitor.ProcessMonitor } -// Validate that istioMonitor implements the Attacher interface. -var _ utils.Attacher = &istioMonitor{} - -func newIstioMonitor(c *config.Config, mgr *manager.Manager) *istioMonitor { +func newIstioMonitor(c *config.Config, mgr *manager.Manager) (*istioMonitor, error) { if !c.EnableIstioMonitoring { - return nil + return nil, nil } - procRoot := kernel.ProcFSRoot() - return &istioMonitor{ - registry: utils.NewFileRegistry(consts.USMModuleName, "istio"), - procRoot: procRoot, - envoyCmd: c.EnvoyPath, - done: make(chan struct{}), - - // Callbacks - registerCB: addHooks(mgr, procRoot, istioProbes), - unregisterCB: removeHooks(mgr, istioProbes), + m := &istioMonitor{ + envoyCmd: c.EnvoyPath, + attacher: nil, + processMonitor: monitor.GetProcessMonitor(), } -} - -// DetachPID detaches a given pid from the eBPF program -func (m *istioMonitor) DetachPID(pid uint32) error { - return m.registry.Unregister(pid) -} -var ( - // ErrNoEnvoyPath is returned when no envoy path is found for a given PID - ErrNoEnvoyPath = fmt.Errorf("no envoy path found for PID") -) - -// AttachPID attaches a given pid to the eBPF program -func (m *istioMonitor) AttachPID(pid uint32) error { - path := m.getEnvoyPath(pid) - if path == "" { - return ErrNoEnvoyPath + attachCfg := uprobes.AttacherConfig{ + ProcRoot: c.ProcRoot, + Rules: []*uprobes.AttachRule{{ + Targets: uprobes.AttachToExecutable, + ProbesSelector: istioProbes, + ExecutableFilter: m.isIstioBinary, + }}, + EbpfConfig: &c.Config, + ExcludeTargets: uprobes.ExcludeSelf | uprobes.ExcludeInternal | uprobes.ExcludeBuildkit | uprobes.ExcludeContainerdTmp, + EnablePeriodicScanNewProcesses: true, } + attacher, err := uprobes.NewUprobeAttacher(consts.USMModuleName, istioAttacherName, attachCfg, mgr, nil, &uprobes.NativeBinaryInspector{}, m.processMonitor) + if err != nil { + return nil, fmt.Errorf("Cannot create uprobe attacher: %w", err) + } + + m.attacher = attacher - return m.registry.Register( - path, - pid, - m.registerCB, - m.unregisterCB, - utils.IgnoreCB, - ) + return m, nil } // Start the istioMonitor @@ -149,49 +124,16 @@ func (m *istioMonitor) Start() { return } - processMonitor := monitor.GetProcessMonitor() - - // Subscribe to process events - doneExec := processMonitor.SubscribeExec(m.handleProcessExec) - doneExit := processMonitor.SubscribeExit(m.handleProcessExit) - - // Attach to existing processes - m.sync() - - m.wg.Add(1) - go func() { - // This ticker is responsible for controlling the rate at which - // we scrape the whole procFS again in order to ensure that we - // terminate any dangling uprobes and register new processes - // missed by the process monitor stream - processSync := time.NewTicker(scanTerminatedProcessesInterval) - - defer func() { - processSync.Stop() - // Execute process monitor callback termination functions - doneExec() - doneExit() - // Stopping the process monitor (if we're the last instance) - processMonitor.Stop() - // Cleaning up all active hooks - m.registry.Clear() - // marking we're finished. - m.wg.Done() - }() + if m.attacher == nil { + log.Error("istio monitoring is enabled but the attacher is nil") + return + } - for { - select { - case <-m.done: - return - case <-processSync.C: - m.sync() - m.registry.Log() - } - } - }() + if err := m.attacher.Start(); err != nil { + log.Errorf("Cannot start istio attacher: %s", err) + } - utils.AddAttacher(consts.USMModuleName, "istio", m) - log.Info("Istio monitoring enabled") + log.Info("istio monitoring enabled") } // Stop the istioMonitor. @@ -200,62 +142,16 @@ func (m *istioMonitor) Stop() { return } - close(m.done) - m.wg.Wait() -} - -// sync state of istioMonitor with the current state of procFS -// the purpose of this method is two-fold: -// 1) register processes for which we missed exec events (targeted mostly at startup) -// 2) unregister processes for which we missed exit events -func (m *istioMonitor) sync() { - deletionCandidates := m.registry.GetRegisteredProcesses() - - _ = kernel.WithAllProcs(m.procRoot, func(pid int) error { - if _, ok := deletionCandidates[uint32(pid)]; ok { - // We have previously hooked into this process and it remains active, - // so we remove it from the deletionCandidates list, and move on to the next PID - delete(deletionCandidates, uint32(pid)) - return nil - } - - // This is a new PID so we attempt to attach SSL probes to it - _ = m.AttachPID(uint32(pid)) - return nil - }) - - // At this point all entries from deletionCandidates are no longer alive, so - // we should detach our SSL probes from them - for pid := range deletionCandidates { - m.handleProcessExit(pid) + if m.attacher == nil { + log.Error("istio monitoring is enabled but the attacher is nil") + return } -} - -func (m *istioMonitor) handleProcessExit(pid uint32) { - // We avoid filtering PIDs here because it's cheaper to simply do a registry lookup - // instead of fetching a process name in order to determine whether it is an - // envoy process or not (which at the very minimum involves syscalls) - _ = m.DetachPID(pid) -} -func (m *istioMonitor) handleProcessExec(pid uint32) { - _ = m.AttachPID(pid) + m.attacher.Stop() } -// getEnvoyPath returns the executable path of the envoy binary for a given PID. -// It constructs the path to the symbolic link for the executable file of the process with the given PID, -// then resolves this symlink to determine the actual path of the binary. -// -// If the resolved path contains the expected envoy command substring (as defined by m.envoyCmd), -// the function returns this path. If the PID does not correspond to an envoy process or if an error -// occurs during resolution, it returns an empty string. -func (m *istioMonitor) getEnvoyPath(pid uint32) string { - exePath := fmt.Sprintf("%s/%d/exe", m.procRoot, pid) - - envoyPath, err := os.Readlink(exePath) - if err != nil || !strings.Contains(envoyPath, m.envoyCmd) { - return "" - } - - return envoyPath +// isIstioBinary checks whether the given file is an istioBinary, based on the expected envoy +// command substring (as defined by m.envoyCmd). +func (m *istioMonitor) isIstioBinary(path string, _ *uprobes.ProcInfo) bool { + return strings.Contains(path, m.envoyCmd) } diff --git a/pkg/network/usm/istio_test.go b/pkg/network/usm/istio_test.go index 73efaf1a4ef4b..72a4f4fb86fdf 100644 --- a/pkg/network/usm/istio_test.go +++ b/pkg/network/usm/istio_test.go @@ -8,32 +8,32 @@ package usm import ( - "os/exec" + "os" "path/filepath" - "strings" "testing" - "github.com/DataDog/datadog-agent/pkg/network/config" - "github.com/DataDog/datadog-agent/pkg/network/usm/utils" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/ebpf/uprobes" + "github.com/DataDog/datadog-agent/pkg/network/config" + "github.com/DataDog/datadog-agent/pkg/network/usm/utils" ) const ( defaultEnvoyName = "/bin/envoy" ) -func TestGetEnvoyPath(t *testing.T) { - _, pid := createFakeProcess(t, defaultEnvoyName) - monitor := newIstioTestMonitor(t) +func TestIsIstioBinary(t *testing.T) { + procRoot := uprobes.CreateFakeProcFS(t, []uprobes.FakeProcFSEntry{}) + m := newIstioTestMonitor(t, procRoot) t.Run("an actual envoy process", func(t *testing.T) { - path := monitor.getEnvoyPath(uint32(pid)) - assert.True(t, strings.HasSuffix(path, defaultEnvoyName)) + assert.True(t, m.isIstioBinary(defaultEnvoyName, uprobes.NewProcInfo(procRoot, 1))) }) t.Run("something else", func(t *testing.T) { - path := monitor.getEnvoyPath(uint32(2)) - assert.Empty(t, "", path) + assert.False(t, m.isIstioBinary("", uprobes.NewProcInfo(procRoot, 2))) }) } @@ -43,71 +43,86 @@ func TestGetEnvoyPathWithConfig(t *testing.T) { cfg.EnvoyPath = "/test/envoy" monitor := newIstioTestMonitorWithCFG(t, cfg) - _, pid := createFakeProcess(t, cfg.EnvoyPath) - - path := monitor.getEnvoyPath(uint32(pid)) - assert.True(t, strings.HasSuffix(path, cfg.EnvoyPath)) + assert.True(t, monitor.isIstioBinary(cfg.EnvoyPath, uprobes.NewProcInfo("", 0))) + assert.False(t, monitor.isIstioBinary("something/else/", uprobes.NewProcInfo("", 0))) } func TestIstioSync(t *testing.T) { - t.Run("calling sync multiple times", func(t *testing.T) { - procRoot1, _ := createFakeProcess(t, filepath.Join("test1", defaultEnvoyName)) - procRoot2, _ := createFakeProcess(t, filepath.Join("test2", defaultEnvoyName)) - monitor := newIstioTestMonitor(t) - registerRecorder := new(utils.CallbackRecorder) - - // Setup test callbacks - monitor.registerCB = registerRecorder.Callback() - monitor.unregisterCB = utils.IgnoreCB - - // Calling sync multiple times shouldn't matter. - // Once all envoy process are registered, calling it again shouldn't - // trigger additional callback executions - monitor.sync() - monitor.sync() - - pathID1, err := utils.NewPathIdentifier(procRoot1) - require.NoError(t, err) - - pathID2, err := utils.NewPathIdentifier(procRoot2) - require.NoError(t, err) - - // Each PathID should have triggered a callback exactly once - assert.Equal(t, 2, registerRecorder.TotalCalls()) - assert.Equal(t, 1, registerRecorder.CallsForPathID(pathID1)) - assert.Equal(t, 1, registerRecorder.CallsForPathID(pathID2)) + t.Run("calling sync for the first time", func(tt *testing.T) { + procRoot := uprobes.CreateFakeProcFS(tt, []uprobes.FakeProcFSEntry{ + {Pid: 1, Exe: defaultEnvoyName}, + {Pid: 2, Exe: "/bin/bash"}, + {Pid: 3, Exe: defaultEnvoyName}, + }) + monitor := newIstioTestMonitor(tt, procRoot) + + mockRegistry := &uprobes.MockFileRegistry{} + monitor.attacher.SetRegistry(mockRegistry) + mockRegistry.On("GetRegisteredProcesses").Return(map[uint32]struct{}{}) + mockRegistry.On("Register", defaultEnvoyName, uint32(1), mock.Anything, mock.Anything).Return(nil) + mockRegistry.On("Register", defaultEnvoyName, uint32(3), mock.Anything, mock.Anything).Return(nil) + + // Calling sync should detect the two envoy processes + monitor.attacher.Sync(true, true) + + mockRegistry.AssertExpectations(tt) }) -} - -// createFakeProcess creates a fake process in a temporary location. -// returns the full path of the temporary process and the PID of the fake process. -func createFakeProcess(t *testing.T, processName string) (procRoot string, pid int) { - fakePath := filepath.Join(t.TempDir(), processName) - require.NoError(t, exec.Command("mkdir", "-p", filepath.Dir(fakePath)).Run()) - - // we are using the `yes` command as a fake envoy binary. - require.NoError(t, exec.Command("cp", "/usr/bin/yes", fakePath).Run()) - cmd := exec.Command(fakePath) - require.NoError(t, cmd.Start()) - - // Schedule process termination after the test - t.Cleanup(func() { - _ = cmd.Process.Kill() + t.Run("detecting a dangling process", func(tt *testing.T) { + procRoot := uprobes.CreateFakeProcFS(tt, []uprobes.FakeProcFSEntry{ + {Pid: 1, Exe: defaultEnvoyName}, + {Pid: 2, Exe: "/bin/bash"}, + {Pid: 3, Exe: defaultEnvoyName}, + }) + monitor := newIstioTestMonitor(tt, procRoot) + + mockRegistry := &uprobes.MockFileRegistry{} + monitor.attacher.SetRegistry(mockRegistry) + mockRegistry.On("GetRegisteredProcesses").Return(map[uint32]struct{}{}) + mockRegistry.On("Register", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) // Tell the mock to just say ok to everything, we'll validate later + + monitor.attacher.Sync(true, true) + + mockRegistry.AssertCalled(tt, "Register", defaultEnvoyName, uint32(1), mock.Anything, mock.Anything) + mockRegistry.AssertCalled(tt, "Register", defaultEnvoyName, uint32(3), mock.Anything, mock.Anything) + mockRegistry.AssertCalled(tt, "GetRegisteredProcesses") + + // At this point we should have received: + // * 2 register calls + // * 1 GetRegisteredProcesses call + // * 0 unregister calls + require.Equal(tt, 3, len(mockRegistry.Calls), "calls made: %v", mockRegistry.Calls) + mockRegistry.AssertNotCalled(t, "Unregister", mock.Anything) + + // Now we emulate a process termination for PID 3 by removing it from the fake + // procFS tree + require.NoError(tt, os.RemoveAll(filepath.Join(procRoot, "3"))) + + // Now clear the mock registry expected calls and make it return the state as if the two PIDs were registered + mockRegistry.ExpectedCalls = nil + mockRegistry.On("Register", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) // Tell the mock to just say ok to everything, we'll validate later + mockRegistry.On("GetRegisteredProcesses").Return(map[uint32]struct{}{1: {}, 3: {}}) + mockRegistry.On("Unregister", mock.Anything).Return(nil) + + // Once we call sync() again, PID 3 termination should be detected + // and the unregister callback should be executed + monitor.attacher.Sync(true, true) + mockRegistry.AssertCalled(tt, "Unregister", uint32(3)) }) - - return fakePath, cmd.Process.Pid } -func newIstioTestMonitor(t *testing.T) *istioMonitor { +func newIstioTestMonitor(t *testing.T, procRoot string) *istioMonitor { cfg := utils.NewUSMEmptyConfig() cfg.EnableIstioMonitoring = true + cfg.ProcRoot = procRoot return newIstioTestMonitorWithCFG(t, cfg) } func newIstioTestMonitorWithCFG(t *testing.T, cfg *config.Config) *istioMonitor { - monitor := newIstioMonitor(cfg, nil) + monitor, err := newIstioMonitor(cfg, nil) + require.NoError(t, err) require.NotNil(t, monitor) + return monitor } From 1f604b43cf73806a784b8678dc93cc3f1735bca9 Mon Sep 17 00:00:00 2001 From: Baptiste Foy Date: Wed, 11 Dec 2024 15:47:34 +0100 Subject: [PATCH 121/303] chore(installer): Add boilerplate for install script E2Es (#32012) --- .../installer/script/all_scripts_test.go | 160 ++++++++++++++++++ .../tests/installer/script/databricks_test.go | 50 +++--- 2 files changed, 185 insertions(+), 25 deletions(-) create mode 100644 test/new-e2e/tests/installer/script/all_scripts_test.go diff --git a/test/new-e2e/tests/installer/script/all_scripts_test.go b/test/new-e2e/tests/installer/script/all_scripts_test.go new file mode 100644 index 0000000000000..f11119346e52e --- /dev/null +++ b/test/new-e2e/tests/installer/script/all_scripts_test.go @@ -0,0 +1,160 @@ +// 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 installscript + +import ( + "fmt" + "os" + "regexp" + "strings" + "testing" + + "github.com/DataDog/datadog-agent/pkg/util/testutil/flake" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" + awshost "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/host" + "github.com/DataDog/datadog-agent/test/new-e2e/tests/installer/host" + e2eos "github.com/DataDog/test-infra-definitions/components/os" + "github.com/DataDog/test-infra-definitions/scenarios/aws/ec2" + "github.com/stretchr/testify/require" +) + +type installerScriptTests func(os e2eos.Descriptor, arch e2eos.Architecture) installerScriptSuite + +type installerScriptTestsWithSkipedFlavors struct { + t installerScriptTests + skippedFlavors []e2eos.Descriptor +} + +var ( + amd64Flavors = []e2eos.Descriptor{ + e2eos.Ubuntu2204, + e2eos.AmazonLinux2, + e2eos.Debian12, + e2eos.RedHat9, + e2eos.FedoraDefault, + e2eos.CentOS7, + e2eos.Suse15, + } + arm64Flavors = []e2eos.Descriptor{ + e2eos.Ubuntu2204, + e2eos.AmazonLinux2, + e2eos.Suse15, + } + scriptTestsWithSkippedFlavors = []installerScriptTestsWithSkipedFlavors{ + {t: testDatabricksScript}, + } +) + +func shouldSkipFlavor(flavors []e2eos.Descriptor, flavor e2eos.Descriptor) bool { + for _, f := range flavors { + if f.Flavor == flavor.Flavor && f.Version == flavor.Version { + return true + } + } + return false +} + +func TestScripts(t *testing.T) { + if _, ok := os.LookupEnv("CI_COMMIT_SHA"); !ok { + t.Log("CI_COMMIT_SHA env var is not set, this test requires this variable to be set to work") + t.FailNow() + } + + var flavors []e2eos.Descriptor + for _, flavor := range amd64Flavors { + flavor.Architecture = e2eos.AMD64Arch + flavors = append(flavors, flavor) + } + for _, flavor := range arm64Flavors { + flavor.Architecture = e2eos.ARM64Arch + flavors = append(flavors, flavor) + } + for _, f := range flavors { + for _, test := range scriptTestsWithSkippedFlavors { + flavor := f // capture range variable for parallel tests closure + if shouldSkipFlavor(test.skippedFlavors, flavor) { + continue + } + + suite := test.t(flavor, flavor.Architecture) + t.Run(suite.Name(), func(t *testing.T) { + t.Parallel() + // FIXME: Fedora currently has DNS issues + if flavor.Flavor == e2eos.Fedora { + flake.Mark(t) + } + + opts := []awshost.ProvisionerOption{ + awshost.WithEC2InstanceOptions(ec2.WithOSArch(flavor, flavor.Architecture)), + awshost.WithoutAgent(), + } + opts = append(opts, suite.ProvisionerOptions()...) + e2e.Run(t, suite, + e2e.WithProvisioner(awshost.Provisioner(opts...)), + e2e.WithStackName(suite.Name()), + ) + }) + } + } +} + +type installerScriptSuite interface { + e2e.Suite[environments.Host] + + Name() string + ProvisionerOptions() []awshost.ProvisionerOption +} + +func newInstallerScriptSuite(pkg string, e2eos e2eos.Descriptor, arch e2eos.Architecture, opts ...awshost.ProvisionerOption) installerScriptBaseSuite { + return installerScriptBaseSuite{ + commitHash: os.Getenv("CI_COMMIT_SHA"), + os: e2eos, + arch: arch, + pkg: pkg, + opts: opts, + } +} + +func (s *installerScriptBaseSuite) Name() string { + return regexp.MustCompile("[^a-zA-Z0-9]+").ReplaceAllString(fmt.Sprintf("%s/%s", s.pkg, s.os), "_") +} + +func (s *installerScriptBaseSuite) ProvisionerOptions() []awshost.ProvisionerOption { + return s.opts +} + +func (s *installerScriptBaseSuite) SetupSuite() { + s.BaseSuite.SetupSuite() + s.host = host.New(s.T(), s.Env().RemoteHost, s.os, s.arch) +} + +type installerScriptBaseSuite struct { + commitHash string + e2e.BaseSuite[environments.Host] + + host *host.Host + opts []awshost.ProvisionerOption + pkg string + arch e2eos.Architecture + os e2eos.Descriptor +} + +func (s *installerScriptBaseSuite) RunInstallScript(url string, params ...string) { + err := s.RunInstallScriptWithError(url, params...) + require.NoErrorf(s.T(), err, "install script failed") +} + +func (s *installerScriptBaseSuite) RunInstallScriptWithError(url string, params ...string) error { + scriptParams := append(params, "DD_API_KEY=test", "DD_INSTALLER_REGISTRY_URL_INSTALLER_PACKAGE=installtesting.datad0g.com") + _, err := s.Env().RemoteHost.Execute(fmt.Sprintf("curl -L %s > install_script; sudo -E %s bash install_script", url, strings.Join(scriptParams, " "))) + return err +} + +func (s *installerScriptBaseSuite) Purge() { + s.Env().RemoteHost.MustExecute("sudo rm -rf install_script") + s.Env().RemoteHost.Execute("sudo datadog-installer purge") +} diff --git a/test/new-e2e/tests/installer/script/databricks_test.go b/test/new-e2e/tests/installer/script/databricks_test.go index af0a2d9439f76..970d8780c58ce 100644 --- a/test/new-e2e/tests/installer/script/databricks_test.go +++ b/test/new-e2e/tests/installer/script/databricks_test.go @@ -7,39 +7,39 @@ package installscript import ( "fmt" - "os" - "testing" - "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" - "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" awshost "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/host" - osdesc "github.com/DataDog/test-infra-definitions/components/os" - "github.com/DataDog/test-infra-definitions/scenarios/aws/ec2" + e2eos "github.com/DataDog/test-infra-definitions/components/os" ) -type vmUpdaterSuite struct { - commitHash string - e2e.BaseSuite[environments.Host] +type installScriptDatabricksSuite struct { + installerScriptBaseSuite + url string } -func (s *vmUpdaterSuite) TestInstallScript() { - url := fmt.Sprintf("https://installtesting.datad0g.com/%s/scripts/install-databricks.sh", s.commitHash) +func testDatabricksScript(os e2eos.Descriptor, arch e2eos.Architecture) installerScriptSuite { + s := &installScriptDatabricksSuite{ + installerScriptBaseSuite: newInstallerScriptSuite("installer", os, arch, awshost.WithoutFakeIntake()), + } + s.url = fmt.Sprintf("https://installtesting.datad0g.com/%s/scripts/install-databricks.sh", s.commitHash) - // worker - s.Env().RemoteHost.MustExecute(fmt.Sprintf("curl -L %s > install_script; export DD_API_KEY=test; export DD_INSTALLER_REGISTRY_URL_INSTALLER_PACKAGE=installtesting.datad0g.com; sudo -E bash install_script", url)) - s.Env().RemoteHost.MustExecute("sudo test -d /opt/datadog-packages/datadog-agent/7.57.2-1") + return s +} - // driver - s.Env().RemoteHost.MustExecute(fmt.Sprintf("curl -L %s > install_script; export DB_IS_DRIVER=true; export DD_API_KEY=test; export DD_INSTALLER_REGISTRY_URL_INSTALLER_PACKAGE=installtesting.datad0g.com; sudo -E bash install_script", url)) - s.Env().RemoteHost.MustExecute("sudo test -d /opt/datadog-packages/datadog-agent/7.57.2-1") - s.Env().RemoteHost.MustExecute("sudo test -d /opt/datadog-packages/datadog-apm-inject/0.21.0") - s.Env().RemoteHost.MustExecute("sudo test -d /opt/datadog-packages/datadog-apm-library-java/1.41.1") +func (s *installScriptDatabricksSuite) TestDatabricksWorkerInstallScript() { + s.RunInstallScript(s.url) + state := s.host.State() + state.AssertDirExists("/opt/datadog-packages/datadog-agent/7.57.2-1", 0755, "dd-agent", "dd-agent") + state.AssertSymlinkExists("/opt/datadog-packages/datadog-agent/stable", "/opt/datadog-packages/datadog-agent/7.57.2-1", "root", "root") } -func TestUpdaterSuite(t *testing.T) { - for _, arch := range []osdesc.Architecture{osdesc.AMD64Arch, osdesc.ARM64Arch} { - e2e.Run(t, &vmUpdaterSuite{commitHash: os.Getenv("CI_COMMIT_SHA")}, e2e.WithProvisioner(awshost.ProvisionerNoFakeIntake( - awshost.WithEC2InstanceOptions(ec2.WithOSArch(osdesc.UbuntuDefault, arch)), - ))) - } +func (s *installScriptDatabricksSuite) TestDatabricksDriverInstallScript() { + s.RunInstallScript(s.url, "DB_IS_DRIVER=true") + state := s.host.State() + state.AssertDirExists("/opt/datadog-packages/datadog-agent/7.57.2-1", 0755, "dd-agent", "dd-agent") + state.AssertSymlinkExists("/opt/datadog-packages/datadog-agent/stable", "/opt/datadog-packages/datadog-agent/7.57.2-1", "root", "root") + state.AssertDirExists("/opt/datadog-packages/datadog-apm-inject/0.21.0", 0755, "root", "root") + state.AssertSymlinkExists("/opt/datadog-packages/datadog-apm-inject/stable", "/opt/datadog-packages/datadog-apm-inject/0.21.0", "root", "root") + state.AssertDirExists("/opt/datadog-packages/datadog-apm-library-java/1.41.1", 0755, "root", "root") + state.AssertSymlinkExists("/opt/datadog-packages/datadog-apm-library-java/stable", "/opt/datadog-packages/datadog-apm-library-java/1.41.1", "root", "root") } From 91dc6364b51e2fda790ffe765975cf1fb1b9e3ac Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Wed, 11 Dec 2024 15:57:23 +0100 Subject: [PATCH 122/303] add a new remote workloadmeta only catalog (#32008) --- cmd/system-probe/subcommands/run/command.go | 2 +- .../collectors/catalog-remote/catalog.go | 27 +++++++++++++++++++ .../options.go} | 13 ++++----- .../collectors/catalog/catalog.go | 18 +------------ .../catalog/{all_options.go => options.go} | 5 ---- tasks/build_tags.py | 3 +-- 6 files changed, 37 insertions(+), 31 deletions(-) create mode 100644 comp/core/workloadmeta/collectors/catalog-remote/catalog.go rename comp/core/workloadmeta/collectors/{catalog/remote_options.go => catalog-remote/options.go} (71%) rename comp/core/workloadmeta/collectors/catalog/{all_options.go => options.go} (92%) diff --git a/cmd/system-probe/subcommands/run/command.go b/cmd/system-probe/subcommands/run/command.go index ab55fc4287c0a..cd35036946e88 100644 --- a/cmd/system-probe/subcommands/run/command.go +++ b/cmd/system-probe/subcommands/run/command.go @@ -47,7 +47,7 @@ import ( taggerTypes "github.com/DataDog/datadog-agent/comp/core/tagger/types" "github.com/DataDog/datadog-agent/comp/core/telemetry" "github.com/DataDog/datadog-agent/comp/core/telemetry/telemetryimpl" - wmcatalog "github.com/DataDog/datadog-agent/comp/core/workloadmeta/collectors/catalog" + wmcatalog "github.com/DataDog/datadog-agent/comp/core/workloadmeta/collectors/catalog-remote" workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" workloadmetafx "github.com/DataDog/datadog-agent/comp/core/workloadmeta/fx" compstatsd "github.com/DataDog/datadog-agent/comp/dogstatsd/statsd" diff --git a/comp/core/workloadmeta/collectors/catalog-remote/catalog.go b/comp/core/workloadmeta/collectors/catalog-remote/catalog.go new file mode 100644 index 0000000000000..f0d659ea1d7f6 --- /dev/null +++ b/comp/core/workloadmeta/collectors/catalog-remote/catalog.go @@ -0,0 +1,27 @@ +// 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 catalog is a wrapper that loads the available workloadmeta +// collectors. It exists as a shorthand for importing all packages manually in +// all of the agents. +package catalog + +import ( + "go.uber.org/fx" +) + +// GetCatalog returns the set of FX options to populate the catalog +func GetCatalog() fx.Option { + options := getCollectorOptions() + + // remove nil options + opts := make([]fx.Option, 0, len(options)) + for _, item := range options { + if item != nil { + opts = append(opts, item) + } + } + return fx.Options(opts...) +} diff --git a/comp/core/workloadmeta/collectors/catalog/remote_options.go b/comp/core/workloadmeta/collectors/catalog-remote/options.go similarity index 71% rename from comp/core/workloadmeta/collectors/catalog/remote_options.go rename to comp/core/workloadmeta/collectors/catalog-remote/options.go index d0cb01c69b2d2..5d5868723f1c3 100644 --- a/comp/core/workloadmeta/collectors/catalog/remote_options.go +++ b/comp/core/workloadmeta/collectors/catalog-remote/options.go @@ -3,9 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build remotewmonly - -// Package collectors is a wrapper that loads the available workloadmeta +// Package catalog is a wrapper that loads the available workloadmeta // collectors. It exists as a shorthand for importing all packages manually in // all of the agents. package catalog @@ -16,12 +14,15 @@ import ( remoteworkloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/collectors/internal/remote/workloadmeta" ) -// TODO: (components) Move remote-only to its own catalog, similar to how catalog-less works -// Depend on this catalog-remote using fx, instead of build tags - func getCollectorOptions() []fx.Option { return []fx.Option{ remoteworkloadmeta.GetFxOptions(), remoteWorkloadmetaParams(), } } + +func remoteWorkloadmetaParams() fx.Option { + return fx.Provide(func() remoteworkloadmeta.Params { + return remoteworkloadmeta.Params{} + }) +} diff --git a/comp/core/workloadmeta/collectors/catalog/catalog.go b/comp/core/workloadmeta/collectors/catalog/catalog.go index e303a42328269..9133c24eab5e2 100644 --- a/comp/core/workloadmeta/collectors/catalog/catalog.go +++ b/comp/core/workloadmeta/collectors/catalog/catalog.go @@ -12,8 +12,6 @@ import ( "go.uber.org/fx" remoteworkloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/collectors/internal/remote/workloadmeta" - workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" - "github.com/DataDog/datadog-agent/pkg/util/flavor" ) // GetCatalog returns the set of FX options to populate the catalog @@ -30,22 +28,8 @@ func GetCatalog() fx.Option { return fx.Options(opts...) } -// TODO: (components) Move remote-only to its own catalog, similar to how catalog-less works -// Depend on this catalog-remote using fx, instead of build tags - func remoteWorkloadmetaParams() fx.Option { - var filter *workloadmeta.Filter // Nil filter accepts everything - - // Security Agent is only interested in containers - // TODO: (components) create a Catalog component, the implementation used by - // security-agent can use this filter, instead of needing to chekc agent.flavor - if flavor.GetFlavor() == flavor.SecurityAgent { - filter = workloadmeta.NewFilterBuilder().AddKind(workloadmeta.KindContainer).Build() - } - return fx.Provide(func() remoteworkloadmeta.Params { - return remoteworkloadmeta.Params{ - Filter: filter, - } + return remoteworkloadmeta.Params{} }) } diff --git a/comp/core/workloadmeta/collectors/catalog/all_options.go b/comp/core/workloadmeta/collectors/catalog/options.go similarity index 92% rename from comp/core/workloadmeta/collectors/catalog/all_options.go rename to comp/core/workloadmeta/collectors/catalog/options.go index 65011caeccfc1..05f6ca9ac5e12 100644 --- a/comp/core/workloadmeta/collectors/catalog/all_options.go +++ b/comp/core/workloadmeta/collectors/catalog/options.go @@ -3,11 +3,6 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -// TODO: (components) Move remote-only to its own catalog, similar to how catalog-less works -// Depend on this catalog-remote using fx, instead of build tags - -//go:build !remotewmonly - // Package catalog is a wrapper that loads the available workloadmeta // collectors. It exists as a shorthand for importing all packages manually in // all of the agents. diff --git a/tasks/build_tags.py b/tasks/build_tags.py index c2cabdbb6d45e..ddd993490f389 100644 --- a/tasks/build_tags.py +++ b/tasks/build_tags.py @@ -43,7 +43,6 @@ "podman", "process", "python", - "remotewmonly", # used when you want to use only the remote workloadmeta store without importing all dependencies of local collectors "sds", "serverless", "systemd", @@ -162,7 +161,7 @@ SERVERLESS_TAGS = {"serverless", "otlp"} # SYSTEM_PROBE_TAGS lists the tags necessary to build system-probe -SYSTEM_PROBE_TAGS = AGENT_TAGS.union({"linux_bpf", "npm", "pcap", "remotewmonly"}).difference({"python", "systemd"}) +SYSTEM_PROBE_TAGS = AGENT_TAGS.union({"linux_bpf", "npm", "pcap"}).difference({"python", "systemd"}) # TRACE_AGENT_TAGS lists the tags that have to be added when the trace-agent TRACE_AGENT_TAGS = {"docker", "containerd", "datadog.no_waf", "kubeapiserver", "kubelet", "otlp", "netcgo", "podman"} From 2ef96185cc73ed7183af68256eb2f7df613fbcae Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Wed, 11 Dec 2024 16:01:32 +0100 Subject: [PATCH 123/303] [ASCII-2510] Add remote-autodiscovery scheduler streaming endpoint (#31324) --- comp/api/api/apiimpl/grpc.go | 17 +- comp/api/api/apiimpl/server_cmd.go | 1 + comp/core/autodiscovery/proto/proto.go | 104 ++++ comp/core/autodiscovery/proto/proto_test.go | 291 +++++++++ comp/core/autodiscovery/stream/stream.go | 89 +++ comp/core/autodiscovery/stream/stream_test.go | 168 +++++ pkg/proto/datadog/api/v1/api.proto | 9 + .../datadog/autodiscovery/autodiscovery.proto | 44 ++ pkg/proto/pbgo/core/api.pb.go | 356 +++++++---- pkg/proto/pbgo/core/api.pb.gw.go | 56 ++ pkg/proto/pbgo/core/autodiscovery.pb.go | 588 ++++++++++++++++++ pkg/proto/pbgo/mocks/core/api_mockgen.pb.go | 276 ++++++++ tasks/go.py | 1 + 13 files changed, 1857 insertions(+), 143 deletions(-) create mode 100644 comp/core/autodiscovery/proto/proto.go create mode 100644 comp/core/autodiscovery/proto/proto_test.go create mode 100644 comp/core/autodiscovery/stream/stream.go create mode 100644 comp/core/autodiscovery/stream/stream_test.go create mode 100644 pkg/proto/datadog/autodiscovery/autodiscovery.proto create mode 100644 pkg/proto/pbgo/core/autodiscovery.pb.go diff --git a/comp/api/api/apiimpl/grpc.go b/comp/api/api/apiimpl/grpc.go index 0386f022c6927..5f88cdb722163 100644 --- a/comp/api/api/apiimpl/grpc.go +++ b/comp/api/api/apiimpl/grpc.go @@ -10,30 +10,30 @@ import ( "fmt" "time" - "github.com/DataDog/datadog-agent/comp/remote-config/rcservice" - "github.com/DataDog/datadog-agent/comp/remote-config/rcservicemrf" - "github.com/DataDog/datadog-agent/pkg/util/optional" - "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/emptypb" + "github.com/DataDog/datadog-agent/comp/core/autodiscovery" + autodiscoverystream "github.com/DataDog/datadog-agent/comp/core/autodiscovery/stream" remoteagentregistry "github.com/DataDog/datadog-agent/comp/core/remoteagentregistry/def" rarproto "github.com/DataDog/datadog-agent/comp/core/remoteagentregistry/proto" - workloadmetaServer "github.com/DataDog/datadog-agent/comp/core/workloadmeta/server" - tagger "github.com/DataDog/datadog-agent/comp/core/tagger/def" taggerProto "github.com/DataDog/datadog-agent/comp/core/tagger/proto" taggerserver "github.com/DataDog/datadog-agent/comp/core/tagger/server" taggerTypes "github.com/DataDog/datadog-agent/comp/core/tagger/types" + workloadmetaServer "github.com/DataDog/datadog-agent/comp/core/workloadmeta/server" "github.com/DataDog/datadog-agent/comp/dogstatsd/pidmap" dsdReplay "github.com/DataDog/datadog-agent/comp/dogstatsd/replay/def" dogstatsdServer "github.com/DataDog/datadog-agent/comp/dogstatsd/server" + "github.com/DataDog/datadog-agent/comp/remote-config/rcservice" + "github.com/DataDog/datadog-agent/comp/remote-config/rcservicemrf" pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo/core" "github.com/DataDog/datadog-agent/pkg/util/grpc" "github.com/DataDog/datadog-agent/pkg/util/hostname" "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/util/optional" ) type grpcServer struct { @@ -51,6 +51,7 @@ type serverSecure struct { capture dsdReplay.Component pidMap pidmap.Component remoteAgentRegistry remoteagentregistry.Component + autodiscovery autodiscovery.Component } func (s *grpcServer) GetHostname(ctx context.Context, _ *pb.HostnameRequest) (*pb.HostnameReply, error) { @@ -202,6 +203,10 @@ func (s *serverSecure) RegisterRemoteAgent(_ context.Context, in *pb.RegisterRem }, nil } +func (s *serverSecure) AutodiscoveryStreamConfig(_ *emptypb.Empty, out pb.AgentSecure_AutodiscoveryStreamConfigServer) error { + return autodiscoverystream.Config(s.autodiscovery, out) +} + func init() { grpclog.SetLoggerV2(grpc.NewLogger()) } diff --git a/comp/api/api/apiimpl/server_cmd.go b/comp/api/api/apiimpl/server_cmd.go index daf855a161d41..2b806aa8726e3 100644 --- a/comp/api/api/apiimpl/server_cmd.go +++ b/comp/api/api/apiimpl/server_cmd.go @@ -76,6 +76,7 @@ func (server *apiServer) startCMDServer( capture: server.capture, pidMap: server.pidMap, remoteAgentRegistry: server.remoteAgentRegistry, + autodiscovery: server.autoConfig, }) dcreds := credentials.NewTLS(&tls.Config{ diff --git a/comp/core/autodiscovery/proto/proto.go b/comp/core/autodiscovery/proto/proto.go new file mode 100644 index 0000000000000..0ba534caebed3 --- /dev/null +++ b/comp/core/autodiscovery/proto/proto.go @@ -0,0 +1,104 @@ +// 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 proto provides autodiscovery proto util functions +package proto + +import ( + "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" + "github.com/DataDog/datadog-agent/pkg/proto/pbgo/core" +) + +// ProtobufConfigFromAutodiscoveryConfig converts an autodiscovery config to a protobuf config +func ProtobufConfigFromAutodiscoveryConfig(config *integration.Config) *core.Config { + if config == nil { + return nil + } + + instances := [][]byte{} + + for _, instance := range config.Instances { + instances = append(instances, []byte(instance)) + } + + advancedAdIdentifiers := make([]*core.AdvancedADIdentifier, 0, len(config.AdvancedADIdentifiers)) + for _, advancedAdIdentifier := range config.AdvancedADIdentifiers { + advancedAdIdentifiers = append(advancedAdIdentifiers, &core.AdvancedADIdentifier{ + KubeService: &core.KubeNamespacedName{ + Name: advancedAdIdentifier.KubeService.Name, + Namespace: advancedAdIdentifier.KubeService.Namespace, + }, + KubeEndpoints: &core.KubeNamespacedName{ + Name: advancedAdIdentifier.KubeEndpoints.Name, + Namespace: advancedAdIdentifier.KubeEndpoints.Namespace, + }, + }) + } + + return &core.Config{ + Name: config.Name, + Instances: instances, + InitConfig: config.InitConfig, + MetricConfig: config.MetricConfig, + LogsConfig: config.LogsConfig, + AdIdentifiers: config.ADIdentifiers, + AdvancedAdIdentifiers: advancedAdIdentifiers, + Provider: config.Provider, + ServiceId: config.ServiceID, + TaggerEntity: config.TaggerEntity, + ClusterCheck: config.ClusterCheck, + NodeName: config.NodeName, + Source: config.Source, + IgnoreAutodiscoveryTags: config.IgnoreAutodiscoveryTags, + MetricsExcluded: config.MetricsExcluded, + LogsExcluded: config.LogsExcluded, + } +} + +// AutodiscoveryConfigFromProtobufConfig converts a protobuf config to an autodiscovery config +func AutodiscoveryConfigFromProtobufConfig(config *core.Config) integration.Config { + if config == nil { + return integration.Config{} + } + + instances := []integration.Data{} + + for _, instance := range config.Instances { + instances = append(instances, integration.Data(instance)) + } + + advancedAdIdentifiers := make([]integration.AdvancedADIdentifier, 0, len(config.AdvancedAdIdentifiers)) + for _, advancedAdIdentifier := range config.AdvancedAdIdentifiers { + advancedAdIdentifiers = append(advancedAdIdentifiers, integration.AdvancedADIdentifier{ + KubeService: integration.KubeNamespacedName{ + Name: advancedAdIdentifier.KubeService.Name, + Namespace: advancedAdIdentifier.KubeService.Namespace, + }, + KubeEndpoints: integration.KubeNamespacedName{ + Name: advancedAdIdentifier.KubeEndpoints.Name, + Namespace: advancedAdIdentifier.KubeEndpoints.Namespace, + }, + }) + } + + return integration.Config{ + Name: config.Name, + Instances: instances, + InitConfig: config.InitConfig, + MetricConfig: config.MetricConfig, + LogsConfig: config.LogsConfig, + ADIdentifiers: config.AdIdentifiers, + AdvancedADIdentifiers: advancedAdIdentifiers, + Provider: config.Provider, + ServiceID: config.ServiceId, + TaggerEntity: config.TaggerEntity, + ClusterCheck: config.ClusterCheck, + NodeName: config.NodeName, + Source: config.Source, + IgnoreAutodiscoveryTags: config.IgnoreAutodiscoveryTags, + MetricsExcluded: config.MetricsExcluded, + LogsExcluded: config.LogsExcluded, + } +} diff --git a/comp/core/autodiscovery/proto/proto_test.go b/comp/core/autodiscovery/proto/proto_test.go new file mode 100644 index 0000000000000..6ae1620476d74 --- /dev/null +++ b/comp/core/autodiscovery/proto/proto_test.go @@ -0,0 +1,291 @@ +// 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 proto + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" + "github.com/DataDog/datadog-agent/pkg/proto/pbgo/core" +) + +func TestProtobufConfigFromAutodiscoveryConfig(t *testing.T) { + tests := []struct { + name string + input *integration.Config + expected *core.Config + }{ + { + name: "all fields set", + input: &integration.Config{ + Name: "test_config", + Instances: []integration.Data{ + []byte("instance1"), + []byte("instance2"), + }, + InitConfig: []byte("init_config"), + MetricConfig: []byte("metric_config"), + LogsConfig: []byte("logs_config"), + ADIdentifiers: []string{"ad_identifier1", "ad_identifier2"}, + AdvancedADIdentifiers: []integration.AdvancedADIdentifier{ + { + KubeService: integration.KubeNamespacedName{ + Name: "service1", + Namespace: "namespace1", + }, + KubeEndpoints: integration.KubeNamespacedName{ + Name: "endpoint1", + Namespace: "namespace1", + }, + }, + }, + Provider: "provider", + ServiceID: "service_id", + TaggerEntity: "tagger_entity", + ClusterCheck: true, + NodeName: "node_name", + Source: "source", + IgnoreAutodiscoveryTags: true, + MetricsExcluded: true, + LogsExcluded: true, + }, + expected: &core.Config{ + Name: "test_config", + Instances: [][]byte{ + []byte("instance1"), + []byte("instance2"), + }, + InitConfig: []byte("init_config"), + MetricConfig: []byte("metric_config"), + LogsConfig: []byte("logs_config"), + AdIdentifiers: []string{"ad_identifier1", "ad_identifier2"}, + AdvancedAdIdentifiers: []*core.AdvancedADIdentifier{ + { + KubeService: &core.KubeNamespacedName{ + Name: "service1", + Namespace: "namespace1", + }, + KubeEndpoints: &core.KubeNamespacedName{ + Name: "endpoint1", + Namespace: "namespace1", + }, + }, + }, + Provider: "provider", + ServiceId: "service_id", + TaggerEntity: "tagger_entity", + ClusterCheck: true, + NodeName: "node_name", + Source: "source", + IgnoreAutodiscoveryTags: true, + MetricsExcluded: true, + LogsExcluded: true, + }, + }, + { + name: "some fields set", + input: &integration.Config{ + Name: "test_config", + Instances: []integration.Data{ + []byte("instance1"), + }, + InitConfig: []byte("init_config"), + MetricConfig: []byte("metric_config"), + LogsConfig: []byte("logs_config"), + ADIdentifiers: []string{"ad_identifier1"}, + Provider: "provider", + ServiceID: "service_id", + TaggerEntity: "tagger_entity", + ClusterCheck: true, + NodeName: "node_name", + Source: "source", + IgnoreAutodiscoveryTags: true, + MetricsExcluded: true, + LogsExcluded: true, + }, + expected: &core.Config{ + Name: "test_config", + Instances: [][]byte{ + []byte("instance1"), + }, + InitConfig: []byte("init_config"), + MetricConfig: []byte("metric_config"), + LogsConfig: []byte("logs_config"), + AdIdentifiers: []string{"ad_identifier1"}, + Provider: "provider", + ServiceId: "service_id", + TaggerEntity: "tagger_entity", + ClusterCheck: true, + NodeName: "node_name", + Source: "source", + IgnoreAutodiscoveryTags: true, + MetricsExcluded: true, + LogsExcluded: true, + AdvancedAdIdentifiers: []*core.AdvancedADIdentifier{}, + }, + }, + { + name: "no fields set", + input: &integration.Config{}, + expected: &core.Config{ + Instances: [][]byte{}, + AdvancedAdIdentifiers: []*core.AdvancedADIdentifier{}, + }, + }, + { + "nil", + nil, + nil, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + result := ProtobufConfigFromAutodiscoveryConfig(test.input) + assert.Equal(t, test.expected, result) + }) + } +} + +func TestAutodiscoveryConfigFromProtobufConfig(t *testing.T) { + tests := []struct { + name string + input *core.Config + expected integration.Config + }{ + { + name: "all fields set", + input: &core.Config{ + Name: "test_config", + Instances: [][]byte{ + []byte("instance1"), + []byte("instance2"), + }, + InitConfig: []byte("init_config"), + MetricConfig: []byte("metric_config"), + LogsConfig: []byte("logs_config"), + AdIdentifiers: []string{"ad_identifier1", "ad_identifier2"}, + AdvancedAdIdentifiers: []*core.AdvancedADIdentifier{ + { + KubeService: &core.KubeNamespacedName{ + Name: "service1", + Namespace: "namespace1", + }, + KubeEndpoints: &core.KubeNamespacedName{ + Name: "endpoint1", + Namespace: "namespace1", + }, + }, + }, + Provider: "provider", + ServiceId: "service_id", + TaggerEntity: "tagger_entity", + ClusterCheck: true, + NodeName: "node_name", + Source: "source", + IgnoreAutodiscoveryTags: true, + MetricsExcluded: true, + LogsExcluded: true, + }, + expected: integration.Config{ + Name: "test_config", + Instances: []integration.Data{ + []byte("instance1"), + []byte("instance2"), + }, + InitConfig: []byte("init_config"), + MetricConfig: []byte("metric_config"), + LogsConfig: []byte("logs_config"), + ADIdentifiers: []string{"ad_identifier1", "ad_identifier2"}, + AdvancedADIdentifiers: []integration.AdvancedADIdentifier{ + { + KubeService: integration.KubeNamespacedName{ + Name: "service1", + Namespace: "namespace1", + }, + KubeEndpoints: integration.KubeNamespacedName{ + Name: "endpoint1", + Namespace: "namespace1", + }, + }, + }, + Provider: "provider", + ServiceID: "service_id", + TaggerEntity: "tagger_entity", + ClusterCheck: true, + NodeName: "node_name", + Source: "source", + IgnoreAutodiscoveryTags: true, + MetricsExcluded: true, + LogsExcluded: true, + }, + }, + { + name: "some fields set", + input: &core.Config{ + Name: "test_config", + Instances: [][]byte{ + []byte("instance1"), + }, + InitConfig: []byte("init_config"), + MetricConfig: []byte("metric_config"), + LogsConfig: []byte("logs_config"), + AdIdentifiers: []string{"ad_identifier1"}, + Provider: "provider", + ServiceId: "service_id", + TaggerEntity: "tagger_entity", + ClusterCheck: true, + NodeName: "node_name", + Source: "source", + IgnoreAutodiscoveryTags: true, + MetricsExcluded: true, + LogsExcluded: true, + }, + expected: integration.Config{ + Name: "test_config", + Instances: []integration.Data{ + []byte("instance1"), + }, + InitConfig: []byte("init_config"), + MetricConfig: []byte("metric_config"), + LogsConfig: []byte("logs_config"), + ADIdentifiers: []string{"ad_identifier1"}, + Provider: "provider", + ServiceID: "service_id", + TaggerEntity: "tagger_entity", + ClusterCheck: true, + NodeName: "node_name", + Source: "source", + IgnoreAutodiscoveryTags: true, + MetricsExcluded: true, + LogsExcluded: true, + AdvancedADIdentifiers: []integration.AdvancedADIdentifier{}, + }, + }, + { + name: "no fields set", + input: &core.Config{}, + expected: integration.Config{ + AdvancedADIdentifiers: []integration.AdvancedADIdentifier{}, + Instances: []integration.Data{}, + }, + }, + { + "nil", + nil, + integration.Config{}, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + result := AutodiscoveryConfigFromProtobufConfig(test.input) + assert.Equal(t, test.expected, result) + }) + } +} diff --git a/comp/core/autodiscovery/stream/stream.go b/comp/core/autodiscovery/stream/stream.go new file mode 100644 index 0000000000000..7fbbe04633090 --- /dev/null +++ b/comp/core/autodiscovery/stream/stream.go @@ -0,0 +1,89 @@ +// 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 stream provides the autodiscovery config streaming logic +package stream + +import ( + "time" + + "github.com/google/uuid" + + "github.com/DataDog/datadog-agent/comp/core/autodiscovery" + "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" + "github.com/DataDog/datadog-agent/comp/core/autodiscovery/proto" + pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo/core" + "github.com/DataDog/datadog-agent/pkg/util/grpc" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +// Config streams autodiscovery configs +func Config(ac autodiscovery.Component, out pb.AgentSecure_AutodiscoveryStreamConfigServer) error { + s := &scheduler{ + out: out, + done: make(chan error, 1), + } + + // Generate a unique scheduler name + id := uuid.New().String() + schedulerName := "remote-" + id + + // replay the existing configs + ac.AddScheduler(schedulerName, s, true) + defer ac.RemoveScheduler(schedulerName) + + select { + case err := <-s.done: + return err + case <-out.Context().Done(): + return nil + } +} + +type scheduler struct { + out pb.AgentSecure_AutodiscoveryStreamConfigServer + done chan error +} + +func (s *scheduler) Schedule(config []integration.Config) { + s.handleEvent(config, pb.ConfigEventType_SCHEDULE) +} + +func (s *scheduler) Unschedule(configs []integration.Config) { + s.handleEvent(configs, pb.ConfigEventType_UNSCHEDULE) +} + +func (s *scheduler) Stop() { + close(s.done) +} + +func (s *scheduler) handleEvent(configs []integration.Config, eventType pb.ConfigEventType) { + protobufConfigs := protobufConfigFromAutodiscoveryConfigs(configs, eventType) + + err := grpc.DoWithTimeout(func() error { + return s.out.Send(&pb.AutodiscoveryStreamResponse{ + Configs: protobufConfigs, + }) + }, 1*time.Minute) + + if err != nil { + log.Warnf("error sending %s autodiscovery event: %s", eventType.String(), err) + // do not block if an error was already sent + select { + case s.done <- err: + default: + } + } +} + +func protobufConfigFromAutodiscoveryConfigs(config []integration.Config, eventType pb.ConfigEventType) []*pb.Config { + res := make([]*pb.Config, 0, len(config)) + for _, c := range config { + protobufConfig := proto.ProtobufConfigFromAutodiscoveryConfig(&c) + protobufConfig.EventType = eventType + res = append(res, protobufConfig) + } + return res +} diff --git a/comp/core/autodiscovery/stream/stream_test.go b/comp/core/autodiscovery/stream/stream_test.go new file mode 100644 index 0000000000000..914c8d3a3654c --- /dev/null +++ b/comp/core/autodiscovery/stream/stream_test.go @@ -0,0 +1,168 @@ +// 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 stream + +import ( + "context" + "errors" + "testing" + + "google.golang.org/grpc/metadata" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/comp/core/autodiscovery" + "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" + noopautoconfig "github.com/DataDog/datadog-agent/comp/core/autodiscovery/noopimpl" + autodiscoveryscheduler "github.com/DataDog/datadog-agent/comp/core/autodiscovery/scheduler" + pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo/core" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func getAutodiscoveryNoop(t *testing.T) autodiscovery.Component { + return fxutil.Test[autodiscovery.Component]( + t, + noopautoconfig.Module(), + ) +} + +type acMock struct { + autodiscovery.Component + + addScheduler func(string, autodiscoveryscheduler.Scheduler, bool) +} + +func (ac *acMock) AddScheduler(name string, scheduler autodiscoveryscheduler.Scheduler, replay bool) { + ac.addScheduler(name, scheduler, replay) +} + +type outMock struct { + send func(*pb.AutodiscoveryStreamResponse) error + ctx context.Context +} + +func (out *outMock) Send(resp *pb.AutodiscoveryStreamResponse) error { + return out.send(resp) +} + +func (out *outMock) SetHeader(metadata.MD) error { + panic("not implemented") +} + +func (out *outMock) SendHeader(metadata.MD) error { + panic("not implemented") +} + +func (out *outMock) SetTrailer(metadata.MD) { + panic("not implemented") +} + +func (out *outMock) Context() context.Context { + return out.ctx +} + +func (out *outMock) SendMsg(any) error { + panic("not implemented") +} + +func (out *outMock) RecvMsg(any) error { + panic("not implemented") +} + +func setupTestConfig(t *testing.T, sendErr error) (chan error, chan autodiscoveryscheduler.Scheduler, chan *pb.AutodiscoveryStreamResponse, context.CancelFunc) { + schedulerChan := make(chan autodiscoveryscheduler.Scheduler, 1) + sendChan := make(chan *pb.AutodiscoveryStreamResponse, 1) + + acNoop := getAutodiscoveryNoop(t) + ac := &acMock{ + acNoop, + func(_ string, scheduler autodiscoveryscheduler.Scheduler, _ bool) { + schedulerChan <- scheduler + }, + } + + ctx, cancel := context.WithCancel(context.Background()) + + out := &outMock{ + send: func(resp *pb.AutodiscoveryStreamResponse) error { + sendChan <- resp + return sendErr + }, + ctx: ctx, + } + + configErrChan := make(chan error) + go func() { + configErrChan <- Config(ac, out) + }() + + return configErrChan, schedulerChan, sendChan, cancel +} + +func TestConfig(t *testing.T) { + configs := []integration.Config{ + { + Name: "test", + }, + } + + t.Run("schedule unschedule", func(t *testing.T) { + configErrChan, schedulerChan, sendChan, cancel := setupTestConfig(t, nil) + + scheduler := <-schedulerChan + require.NotNil(t, scheduler) + + scheduler.Schedule(configs) + sent := <-sendChan + require.NotNil(t, sent) + require.Len(t, sent.Configs, 1) + require.Equal(t, "test", sent.Configs[0].Name) + require.Equal(t, pb.ConfigEventType_SCHEDULE, sent.Configs[0].EventType) + + scheduler.Unschedule(configs) + sent = <-sendChan + require.NotNil(t, sent) + require.Len(t, sent.Configs, 1) + require.Equal(t, "test", sent.Configs[0].Name) + require.Equal(t, pb.ConfigEventType_UNSCHEDULE, sent.Configs[0].EventType) + + cancel() + + require.NoError(t, <-configErrChan) + }) + + t.Run("send error", func(t *testing.T) { + sendError := errors.New("send error") + configErrChan, schedulerChan, sendChan, _ := setupTestConfig(t, sendError) + + scheduler := <-schedulerChan + require.NotNil(t, scheduler) + + scheduler.Schedule(configs) + sent := <-sendChan + require.NotNil(t, sent) + require.Len(t, sent.Configs, 1) + require.Equal(t, "test", sent.Configs[0].Name) + require.Equal(t, pb.ConfigEventType_SCHEDULE, sent.Configs[0].EventType) + + require.ErrorIs(t, <-configErrChan, sendError) + }) + + t.Run("multiple errors", func(t *testing.T) { + sendError := errors.New("send error") + configErrChan, schedulerChan, sendChan, _ := setupTestConfig(t, sendError) + + scheduler := <-schedulerChan + require.NotNil(t, scheduler) + + scheduler.Schedule(configs) + <-sendChan + scheduler.Unschedule(configs) + <-sendChan + + require.ErrorIs(t, <-configErrChan, sendError) + }) +} diff --git a/pkg/proto/datadog/api/v1/api.proto b/pkg/proto/datadog/api/v1/api.proto index f6c16ff4cc45e..1ffbfa02aa562 100644 --- a/pkg/proto/datadog/api/v1/api.proto +++ b/pkg/proto/datadog/api/v1/api.proto @@ -6,6 +6,7 @@ import "datadog/model/v1/model.proto"; import "datadog/remoteagent/remoteagent.proto"; import "datadog/remoteconfig/remoteconfig.proto"; import "datadog/workloadmeta/workloadmeta.proto"; +import "datadog/autodiscovery/autodiscovery.proto"; import "google/api/annotations.proto"; import "google/protobuf/empty.proto"; @@ -153,6 +154,14 @@ service AgentSecure { body: "*" }; }; + + // Subscribes to autodiscovery config updates + rpc AutodiscoveryStreamConfig(google.protobuf.Empty) returns (stream datadog.autodiscovery.AutodiscoveryStreamResponse) { + option (google.api.http) = { + post: "/v1/grpc/autodiscovery/stream_configs" + body: "*" + }; + }; } // Service exposed by remote agents to allow querying by the Core Agent. diff --git a/pkg/proto/datadog/autodiscovery/autodiscovery.proto b/pkg/proto/datadog/autodiscovery/autodiscovery.proto new file mode 100644 index 0000000000000..2419747504513 --- /dev/null +++ b/pkg/proto/datadog/autodiscovery/autodiscovery.proto @@ -0,0 +1,44 @@ +syntax = "proto3"; + +package datadog.autodiscovery; + +option go_package = "pkg/proto/pbgo/core"; // golang\ + +enum ConfigEventType { + SCHEDULE = 0; + UNSCHEDULE = 1; +} + +message KubeNamespacedName { + string name = 1; + string namespace = 2; +} + +message AdvancedADIdentifier { + KubeNamespacedName kubeService = 1; + KubeNamespacedName kubeEndpoints = 2; +} + +message Config { + string name = 1; + repeated bytes instances = 2; + bytes initConfig = 3; + bytes metricConfig = 4; + bytes logsConfig = 5; + repeated string adIdentifiers = 6; + repeated AdvancedADIdentifier advancedAdIdentifiers = 7; + string provider = 8; + string serviceId = 9; + string taggerEntity = 10; + bool clusterCheck = 11; + string nodeName = 12; + string source = 13; + bool ignoreAutodiscoveryTags = 14; + bool metricsExcluded = 15; + bool logsExcluded = 16; + ConfigEventType eventType = 17; +} + +message AutodiscoveryStreamResponse { + repeated Config configs = 1; +} diff --git a/pkg/proto/pbgo/core/api.pb.go b/pkg/proto/pbgo/core/api.pb.go index 87ed4b2b3620e..6e23a0ef0f9c2 100644 --- a/pkg/proto/pbgo/core/api.pb.go +++ b/pkg/proto/pbgo/core/api.pb.go @@ -40,128 +40,141 @@ var file_datadog_api_v1_api_proto_rawDesc = []byte{ 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x71, 0x0a, 0x05, - 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x68, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, - 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x6e, - 0x61, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, - 0x12, 0x0d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x32, - 0xe2, 0x0b, 0x0a, 0x0b, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x12, - 0x8f, 0x01, 0x0a, 0x14, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, + 0x6f, 0x1a, 0x29, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x71, 0x0a, 0x05, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x12, 0x68, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x21, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, + 0x70, 0x6c, 0x79, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x76, 0x31, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x32, 0x80, 0x0d, 0x0a, 0x0b, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x14, 0x54, + 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x61, 0x67, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, + 0x61, 0x6d, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x67, + 0x72, 0x70, 0x63, 0x2f, 0x74, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x30, 0x01, 0x12, 0x89, 0x01, 0x0a, + 0x11, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x12, 0x24, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, + 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, + 0x68, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2f, 0x66, 0x65, 0x74, 0x63, + 0x68, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x9b, 0x01, 0x0a, 0x17, 0x44, 0x6f, 0x67, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x64, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x54, 0x72, 0x69, + 0x67, 0x67, 0x65, 0x72, 0x12, 0x27, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, + 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x54, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, - 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2f, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x30, - 0x01, 0x12, 0x89, 0x01, 0x0a, 0x11, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x46, 0x65, 0x74, 0x63, - 0x68, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x24, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, - 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, - 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x61, 0x67, 0x67, 0x65, 0x72, - 0x2f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x9b, 0x01, - 0x0a, 0x17, 0x44, 0x6f, 0x67, 0x73, 0x74, 0x61, 0x74, 0x73, 0x64, 0x43, 0x61, 0x70, 0x74, 0x75, - 0x72, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x27, 0x2e, 0x64, 0x61, 0x74, 0x61, - 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x70, - 0x74, 0x75, 0x72, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x54, 0x72, 0x69, - 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x22, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2f, 0x64, 0x6f, 0x67, 0x73, 0x74, 0x61, 0x74, 0x73, 0x64, 0x2f, 0x63, 0x61, 0x70, 0x74, - 0x75, 0x72, 0x65, 0x2f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x8c, 0x01, 0x0a, 0x17, - 0x44, 0x6f, 0x67, 0x73, 0x74, 0x61, 0x74, 0x73, 0x64, 0x53, 0x65, 0x74, 0x54, 0x61, 0x67, 0x67, - 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, - 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x65, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x25, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, - 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2f, 0x64, 0x6f, 0x67, 0x73, 0x74, 0x61, 0x74, 0x73, 0x64, 0x2f, 0x63, 0x61, 0x70, - 0x74, 0x75, 0x72, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x10, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, - 0x27, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, + 0x2e, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, + 0x01, 0x2a, 0x22, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x64, 0x6f, 0x67, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x64, 0x2f, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x2f, 0x74, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x8c, 0x01, 0x0a, 0x17, 0x44, 0x6f, 0x67, 0x73, 0x74, + 0x61, 0x74, 0x73, 0x64, 0x53, 0x65, 0x74, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x1a, 0x25, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, + 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x64, 0x6f, + 0x67, 0x73, 0x74, 0x61, 0x74, 0x73, 0x64, 0x2f, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x2f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x10, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x78, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x26, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x94, 0x01, 0x0a, 0x12, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x48, 0x41, 0x12, 0x27, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, - 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x78, 0x0a, 0x0e, - 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x26, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x94, 0x01, 0x0a, 0x12, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x48, 0x41, 0x12, 0x27, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x76, 0x31, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x5f, 0x68, 0x61, 0x12, 0x7d, 0x0a, - 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, - 0x41, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x26, 0x2e, 0x64, 0x61, 0x74, 0x61, - 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x76, - 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x61, 0x12, 0xb3, 0x01, 0x0a, - 0x1a, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x64, 0x61, - 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, - 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, - 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, - 0x65, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, - 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x30, 0x01, 0x12, 0xaf, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x64, 0x61, 0x74, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, + 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x73, 0x5f, 0x68, 0x61, 0x12, 0x7d, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, 0x41, 0x12, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x26, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, + 0x63, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x61, 0x12, 0xb3, 0x01, 0x0a, 0x1a, 0x57, 0x6f, 0x72, 0x6b, + 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, + 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x57, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, + 0x67, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x57, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x77, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x30, 0x01, 0x12, 0xaf, 0x01, + 0x0a, 0x13, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, + 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, + 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x12, + 0x9b, 0x01, 0x0a, 0x19, 0x41, 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x32, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, + 0x61, 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x75, + 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x61, + 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x30, 0x01, 0x32, 0xe6, 0x01, + 0x0a, 0x0b, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x6f, 0x0a, + 0x10, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x12, 0x2c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, + 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, + 0x29, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x72, 0x65, 0x46, 0x69, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x61, - 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x32, 0xe6, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x12, 0x6f, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x2c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, - 0x6f, 0x67, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x47, - 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, - 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x72, - 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, - 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, - 0x46, 0x6c, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x72, 0x65, - 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x15, 0x5a, - 0x13, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x67, 0x6f, 0x2f, - 0x63, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x15, 0x5a, 0x13, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x67, 0x6f, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var file_datadog_api_v1_api_proto_goTypes = []interface{}{ @@ -185,8 +198,9 @@ var file_datadog_api_v1_api_proto_goTypes = []interface{}{ (*GetStateConfigResponse)(nil), // 17: datadog.config.GetStateConfigResponse (*WorkloadmetaStreamResponse)(nil), // 18: datadog.workloadmeta.WorkloadmetaStreamResponse (*RegisterRemoteAgentResponse)(nil), // 19: datadog.remoteagent.RegisterRemoteAgentResponse - (*GetStatusDetailsResponse)(nil), // 20: datadog.remoteagent.GetStatusDetailsResponse - (*GetFlareFilesResponse)(nil), // 21: datadog.remoteagent.GetFlareFilesResponse + (*AutodiscoveryStreamResponse)(nil), // 20: datadog.autodiscovery.AutodiscoveryStreamResponse + (*GetStatusDetailsResponse)(nil), // 21: datadog.remoteagent.GetStatusDetailsResponse + (*GetFlareFilesResponse)(nil), // 22: datadog.remoteagent.GetFlareFilesResponse } var file_datadog_api_v1_api_proto_depIdxs = []int32{ 0, // 0: datadog.api.v1.Agent.GetHostname:input_type -> datadog.model.v1.HostnameRequest @@ -200,23 +214,25 @@ var file_datadog_api_v1_api_proto_depIdxs = []int32{ 6, // 8: datadog.api.v1.AgentSecure.GetConfigStateHA:input_type -> google.protobuf.Empty 7, // 9: datadog.api.v1.AgentSecure.WorkloadmetaStreamEntities:input_type -> datadog.workloadmeta.WorkloadmetaStreamRequest 8, // 10: datadog.api.v1.AgentSecure.RegisterRemoteAgent:input_type -> datadog.remoteagent.RegisterRemoteAgentRequest - 9, // 11: datadog.api.v1.RemoteAgent.GetStatusDetails:input_type -> datadog.remoteagent.GetStatusDetailsRequest - 10, // 12: datadog.api.v1.RemoteAgent.GetFlareFiles:input_type -> datadog.remoteagent.GetFlareFilesRequest - 11, // 13: datadog.api.v1.Agent.GetHostname:output_type -> datadog.model.v1.HostnameReply - 12, // 14: datadog.api.v1.AgentSecure.TaggerStreamEntities:output_type -> datadog.model.v1.StreamTagsResponse - 13, // 15: datadog.api.v1.AgentSecure.TaggerFetchEntity:output_type -> datadog.model.v1.FetchEntityResponse - 14, // 16: datadog.api.v1.AgentSecure.DogstatsdCaptureTrigger:output_type -> datadog.model.v1.CaptureTriggerResponse - 15, // 17: datadog.api.v1.AgentSecure.DogstatsdSetTaggerState:output_type -> datadog.model.v1.TaggerStateResponse - 16, // 18: datadog.api.v1.AgentSecure.ClientGetConfigs:output_type -> datadog.config.ClientGetConfigsResponse - 17, // 19: datadog.api.v1.AgentSecure.GetConfigState:output_type -> datadog.config.GetStateConfigResponse - 16, // 20: datadog.api.v1.AgentSecure.ClientGetConfigsHA:output_type -> datadog.config.ClientGetConfigsResponse - 17, // 21: datadog.api.v1.AgentSecure.GetConfigStateHA:output_type -> datadog.config.GetStateConfigResponse - 18, // 22: datadog.api.v1.AgentSecure.WorkloadmetaStreamEntities:output_type -> datadog.workloadmeta.WorkloadmetaStreamResponse - 19, // 23: datadog.api.v1.AgentSecure.RegisterRemoteAgent:output_type -> datadog.remoteagent.RegisterRemoteAgentResponse - 20, // 24: datadog.api.v1.RemoteAgent.GetStatusDetails:output_type -> datadog.remoteagent.GetStatusDetailsResponse - 21, // 25: datadog.api.v1.RemoteAgent.GetFlareFiles:output_type -> datadog.remoteagent.GetFlareFilesResponse - 13, // [13:26] is the sub-list for method output_type - 0, // [0:13] is the sub-list for method input_type + 6, // 11: datadog.api.v1.AgentSecure.AutodiscoveryStreamConfig:input_type -> google.protobuf.Empty + 9, // 12: datadog.api.v1.RemoteAgent.GetStatusDetails:input_type -> datadog.remoteagent.GetStatusDetailsRequest + 10, // 13: datadog.api.v1.RemoteAgent.GetFlareFiles:input_type -> datadog.remoteagent.GetFlareFilesRequest + 11, // 14: datadog.api.v1.Agent.GetHostname:output_type -> datadog.model.v1.HostnameReply + 12, // 15: datadog.api.v1.AgentSecure.TaggerStreamEntities:output_type -> datadog.model.v1.StreamTagsResponse + 13, // 16: datadog.api.v1.AgentSecure.TaggerFetchEntity:output_type -> datadog.model.v1.FetchEntityResponse + 14, // 17: datadog.api.v1.AgentSecure.DogstatsdCaptureTrigger:output_type -> datadog.model.v1.CaptureTriggerResponse + 15, // 18: datadog.api.v1.AgentSecure.DogstatsdSetTaggerState:output_type -> datadog.model.v1.TaggerStateResponse + 16, // 19: datadog.api.v1.AgentSecure.ClientGetConfigs:output_type -> datadog.config.ClientGetConfigsResponse + 17, // 20: datadog.api.v1.AgentSecure.GetConfigState:output_type -> datadog.config.GetStateConfigResponse + 16, // 21: datadog.api.v1.AgentSecure.ClientGetConfigsHA:output_type -> datadog.config.ClientGetConfigsResponse + 17, // 22: datadog.api.v1.AgentSecure.GetConfigStateHA:output_type -> datadog.config.GetStateConfigResponse + 18, // 23: datadog.api.v1.AgentSecure.WorkloadmetaStreamEntities:output_type -> datadog.workloadmeta.WorkloadmetaStreamResponse + 19, // 24: datadog.api.v1.AgentSecure.RegisterRemoteAgent:output_type -> datadog.remoteagent.RegisterRemoteAgentResponse + 20, // 25: datadog.api.v1.AgentSecure.AutodiscoveryStreamConfig:output_type -> datadog.autodiscovery.AutodiscoveryStreamResponse + 21, // 26: datadog.api.v1.RemoteAgent.GetStatusDetails:output_type -> datadog.remoteagent.GetStatusDetailsResponse + 22, // 27: datadog.api.v1.RemoteAgent.GetFlareFiles:output_type -> datadog.remoteagent.GetFlareFilesResponse + 14, // [14:28] is the sub-list for method output_type + 0, // [0:14] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name @@ -231,6 +247,7 @@ func file_datadog_api_v1_api_proto_init() { file_datadog_remoteagent_remoteagent_proto_init() file_datadog_remoteconfig_remoteconfig_proto_init() file_datadog_workloadmeta_workloadmeta_proto_init() + file_datadog_autodiscovery_autodiscovery_proto_init() type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ @@ -416,6 +433,8 @@ type AgentSecureClient interface { WorkloadmetaStreamEntities(ctx context.Context, in *WorkloadmetaStreamRequest, opts ...grpc.CallOption) (AgentSecure_WorkloadmetaStreamEntitiesClient, error) // Registers a remote agent. RegisterRemoteAgent(ctx context.Context, in *RegisterRemoteAgentRequest, opts ...grpc.CallOption) (*RegisterRemoteAgentResponse, error) + // Subscribes to autodiscovery config updates + AutodiscoveryStreamConfig(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (AgentSecure_AutodiscoveryStreamConfigClient, error) } type agentSecureClient struct { @@ -562,6 +581,38 @@ func (c *agentSecureClient) RegisterRemoteAgent(ctx context.Context, in *Registe return out, nil } +func (c *agentSecureClient) AutodiscoveryStreamConfig(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (AgentSecure_AutodiscoveryStreamConfigClient, error) { + stream, err := c.cc.NewStream(ctx, &_AgentSecure_serviceDesc.Streams[2], "/datadog.api.v1.AgentSecure/AutodiscoveryStreamConfig", opts...) + if err != nil { + return nil, err + } + x := &agentSecureAutodiscoveryStreamConfigClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type AgentSecure_AutodiscoveryStreamConfigClient interface { + Recv() (*AutodiscoveryStreamResponse, error) + grpc.ClientStream +} + +type agentSecureAutodiscoveryStreamConfigClient struct { + grpc.ClientStream +} + +func (x *agentSecureAutodiscoveryStreamConfigClient) Recv() (*AutodiscoveryStreamResponse, error) { + m := new(AutodiscoveryStreamResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // AgentSecureServer is the server API for AgentSecure service. type AgentSecureServer interface { // subscribes to added, removed, or changed entities in the Tagger @@ -644,6 +695,8 @@ type AgentSecureServer interface { WorkloadmetaStreamEntities(*WorkloadmetaStreamRequest, AgentSecure_WorkloadmetaStreamEntitiesServer) error // Registers a remote agent. RegisterRemoteAgent(context.Context, *RegisterRemoteAgentRequest) (*RegisterRemoteAgentResponse, error) + // Subscribes to autodiscovery config updates + AutodiscoveryStreamConfig(*empty.Empty, AgentSecure_AutodiscoveryStreamConfigServer) error } // UnimplementedAgentSecureServer can be embedded to have forward compatible implementations. @@ -680,6 +733,9 @@ func (*UnimplementedAgentSecureServer) WorkloadmetaStreamEntities(*WorkloadmetaS func (*UnimplementedAgentSecureServer) RegisterRemoteAgent(context.Context, *RegisterRemoteAgentRequest) (*RegisterRemoteAgentResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RegisterRemoteAgent not implemented") } +func (*UnimplementedAgentSecureServer) AutodiscoveryStreamConfig(*empty.Empty, AgentSecure_AutodiscoveryStreamConfigServer) error { + return status.Errorf(codes.Unimplemented, "method AutodiscoveryStreamConfig not implemented") +} func RegisterAgentSecureServer(s *grpc.Server, srv AgentSecureServer) { s.RegisterService(&_AgentSecure_serviceDesc, srv) @@ -871,6 +927,27 @@ func _AgentSecure_RegisterRemoteAgent_Handler(srv interface{}, ctx context.Conte return interceptor(ctx, in, info, handler) } +func _AgentSecure_AutodiscoveryStreamConfig_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(empty.Empty) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(AgentSecureServer).AutodiscoveryStreamConfig(m, &agentSecureAutodiscoveryStreamConfigServer{stream}) +} + +type AgentSecure_AutodiscoveryStreamConfigServer interface { + Send(*AutodiscoveryStreamResponse) error + grpc.ServerStream +} + +type agentSecureAutodiscoveryStreamConfigServer struct { + grpc.ServerStream +} + +func (x *agentSecureAutodiscoveryStreamConfigServer) Send(m *AutodiscoveryStreamResponse) error { + return x.ServerStream.SendMsg(m) +} + var _AgentSecure_serviceDesc = grpc.ServiceDesc{ ServiceName: "datadog.api.v1.AgentSecure", HandlerType: (*AgentSecureServer)(nil), @@ -919,6 +996,11 @@ var _AgentSecure_serviceDesc = grpc.ServiceDesc{ Handler: _AgentSecure_WorkloadmetaStreamEntities_Handler, ServerStreams: true, }, + { + StreamName: "AutodiscoveryStreamConfig", + Handler: _AgentSecure_AutodiscoveryStreamConfig_Handler, + ServerStreams: true, + }, }, Metadata: "datadog/api/v1/api.proto", } diff --git a/pkg/proto/pbgo/core/api.pb.gw.go b/pkg/proto/pbgo/core/api.pb.gw.go index fb843e96988c3..4ff263f83d888 100644 --- a/pkg/proto/pbgo/core/api.pb.gw.go +++ b/pkg/proto/pbgo/core/api.pb.gw.go @@ -372,6 +372,31 @@ func local_request_AgentSecure_RegisterRemoteAgent_0(ctx context.Context, marsha } +func request_AgentSecure_AutodiscoveryStreamConfig_0(ctx context.Context, marshaler runtime.Marshaler, client AgentSecureClient, req *http.Request, pathParams map[string]string) (AgentSecure_AutodiscoveryStreamConfigClient, runtime.ServerMetadata, error) { + var protoReq empty.Empty + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + stream, err := client.AutodiscoveryStreamConfig(ctx, &protoReq) + if err != nil { + return nil, metadata, err + } + header, err := stream.Header() + if err != nil { + return nil, metadata, err + } + metadata.HeaderMD = header + return stream, metadata, nil + +} + // RegisterAgentHandlerServer registers the http handlers for service Agent to "mux". // UnaryRPC :call AgentServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -579,6 +604,13 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux }) + mux.Handle("POST", pattern_AgentSecure_AutodiscoveryStreamConfig_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + }) + return nil } @@ -889,6 +921,26 @@ func RegisterAgentSecureHandlerClient(ctx context.Context, mux *runtime.ServeMux }) + mux.Handle("POST", pattern_AgentSecure_AutodiscoveryStreamConfig_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AgentSecure_AutodiscoveryStreamConfig_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AgentSecure_AutodiscoveryStreamConfig_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -912,6 +964,8 @@ var ( pattern_AgentSecure_WorkloadmetaStreamEntities_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "grpc", "workloadmeta", "stream_entities"}, "", runtime.AssumeColonVerbOpt(true))) pattern_AgentSecure_RegisterRemoteAgent_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "grpc", "remoteagent", "register_remote_agent"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_AgentSecure_AutodiscoveryStreamConfig_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "grpc", "autodiscovery", "stream_configs"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( @@ -934,4 +988,6 @@ var ( forward_AgentSecure_WorkloadmetaStreamEntities_0 = runtime.ForwardResponseStream forward_AgentSecure_RegisterRemoteAgent_0 = runtime.ForwardResponseMessage + + forward_AgentSecure_AutodiscoveryStreamConfig_0 = runtime.ForwardResponseStream ) diff --git a/pkg/proto/pbgo/core/autodiscovery.pb.go b/pkg/proto/pbgo/core/autodiscovery.pb.go new file mode 100644 index 0000000000000..20f2c5c010231 --- /dev/null +++ b/pkg/proto/pbgo/core/autodiscovery.pb.go @@ -0,0 +1,588 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.34.0 +// protoc v5.26.1 +// source: datadog/autodiscovery/autodiscovery.proto + +package core + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ConfigEventType int32 + +const ( + ConfigEventType_SCHEDULE ConfigEventType = 0 + ConfigEventType_UNSCHEDULE ConfigEventType = 1 +) + +// Enum value maps for ConfigEventType. +var ( + ConfigEventType_name = map[int32]string{ + 0: "SCHEDULE", + 1: "UNSCHEDULE", + } + ConfigEventType_value = map[string]int32{ + "SCHEDULE": 0, + "UNSCHEDULE": 1, + } +) + +func (x ConfigEventType) Enum() *ConfigEventType { + p := new(ConfigEventType) + *p = x + return p +} + +func (x ConfigEventType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ConfigEventType) Descriptor() protoreflect.EnumDescriptor { + return file_datadog_autodiscovery_autodiscovery_proto_enumTypes[0].Descriptor() +} + +func (ConfigEventType) Type() protoreflect.EnumType { + return &file_datadog_autodiscovery_autodiscovery_proto_enumTypes[0] +} + +func (x ConfigEventType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ConfigEventType.Descriptor instead. +func (ConfigEventType) EnumDescriptor() ([]byte, []int) { + return file_datadog_autodiscovery_autodiscovery_proto_rawDescGZIP(), []int{0} +} + +type KubeNamespacedName struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` +} + +func (x *KubeNamespacedName) Reset() { + *x = KubeNamespacedName{} + if protoimpl.UnsafeEnabled { + mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KubeNamespacedName) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KubeNamespacedName) ProtoMessage() {} + +func (x *KubeNamespacedName) ProtoReflect() protoreflect.Message { + mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KubeNamespacedName.ProtoReflect.Descriptor instead. +func (*KubeNamespacedName) Descriptor() ([]byte, []int) { + return file_datadog_autodiscovery_autodiscovery_proto_rawDescGZIP(), []int{0} +} + +func (x *KubeNamespacedName) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *KubeNamespacedName) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +type AdvancedADIdentifier struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + KubeService *KubeNamespacedName `protobuf:"bytes,1,opt,name=kubeService,proto3" json:"kubeService,omitempty"` + KubeEndpoints *KubeNamespacedName `protobuf:"bytes,2,opt,name=kubeEndpoints,proto3" json:"kubeEndpoints,omitempty"` +} + +func (x *AdvancedADIdentifier) Reset() { + *x = AdvancedADIdentifier{} + if protoimpl.UnsafeEnabled { + mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AdvancedADIdentifier) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdvancedADIdentifier) ProtoMessage() {} + +func (x *AdvancedADIdentifier) ProtoReflect() protoreflect.Message { + mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AdvancedADIdentifier.ProtoReflect.Descriptor instead. +func (*AdvancedADIdentifier) Descriptor() ([]byte, []int) { + return file_datadog_autodiscovery_autodiscovery_proto_rawDescGZIP(), []int{1} +} + +func (x *AdvancedADIdentifier) GetKubeService() *KubeNamespacedName { + if x != nil { + return x.KubeService + } + return nil +} + +func (x *AdvancedADIdentifier) GetKubeEndpoints() *KubeNamespacedName { + if x != nil { + return x.KubeEndpoints + } + return nil +} + +type Config struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Instances [][]byte `protobuf:"bytes,2,rep,name=instances,proto3" json:"instances,omitempty"` + InitConfig []byte `protobuf:"bytes,3,opt,name=initConfig,proto3" json:"initConfig,omitempty"` + MetricConfig []byte `protobuf:"bytes,4,opt,name=metricConfig,proto3" json:"metricConfig,omitempty"` + LogsConfig []byte `protobuf:"bytes,5,opt,name=logsConfig,proto3" json:"logsConfig,omitempty"` + AdIdentifiers []string `protobuf:"bytes,6,rep,name=adIdentifiers,proto3" json:"adIdentifiers,omitempty"` + AdvancedAdIdentifiers []*AdvancedADIdentifier `protobuf:"bytes,7,rep,name=advancedAdIdentifiers,proto3" json:"advancedAdIdentifiers,omitempty"` + Provider string `protobuf:"bytes,8,opt,name=provider,proto3" json:"provider,omitempty"` + ServiceId string `protobuf:"bytes,9,opt,name=serviceId,proto3" json:"serviceId,omitempty"` + TaggerEntity string `protobuf:"bytes,10,opt,name=taggerEntity,proto3" json:"taggerEntity,omitempty"` + ClusterCheck bool `protobuf:"varint,11,opt,name=clusterCheck,proto3" json:"clusterCheck,omitempty"` + NodeName string `protobuf:"bytes,12,opt,name=nodeName,proto3" json:"nodeName,omitempty"` + Source string `protobuf:"bytes,13,opt,name=source,proto3" json:"source,omitempty"` + IgnoreAutodiscoveryTags bool `protobuf:"varint,14,opt,name=ignoreAutodiscoveryTags,proto3" json:"ignoreAutodiscoveryTags,omitempty"` + MetricsExcluded bool `protobuf:"varint,15,opt,name=metricsExcluded,proto3" json:"metricsExcluded,omitempty"` + LogsExcluded bool `protobuf:"varint,16,opt,name=logsExcluded,proto3" json:"logsExcluded,omitempty"` + EventType ConfigEventType `protobuf:"varint,17,opt,name=eventType,proto3,enum=datadog.autodiscovery.ConfigEventType" json:"eventType,omitempty"` +} + +func (x *Config) Reset() { + *x = Config{} + if protoimpl.UnsafeEnabled { + mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Config) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Config) ProtoMessage() {} + +func (x *Config) ProtoReflect() protoreflect.Message { + mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Config.ProtoReflect.Descriptor instead. +func (*Config) Descriptor() ([]byte, []int) { + return file_datadog_autodiscovery_autodiscovery_proto_rawDescGZIP(), []int{2} +} + +func (x *Config) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Config) GetInstances() [][]byte { + if x != nil { + return x.Instances + } + return nil +} + +func (x *Config) GetInitConfig() []byte { + if x != nil { + return x.InitConfig + } + return nil +} + +func (x *Config) GetMetricConfig() []byte { + if x != nil { + return x.MetricConfig + } + return nil +} + +func (x *Config) GetLogsConfig() []byte { + if x != nil { + return x.LogsConfig + } + return nil +} + +func (x *Config) GetAdIdentifiers() []string { + if x != nil { + return x.AdIdentifiers + } + return nil +} + +func (x *Config) GetAdvancedAdIdentifiers() []*AdvancedADIdentifier { + if x != nil { + return x.AdvancedAdIdentifiers + } + return nil +} + +func (x *Config) GetProvider() string { + if x != nil { + return x.Provider + } + return "" +} + +func (x *Config) GetServiceId() string { + if x != nil { + return x.ServiceId + } + return "" +} + +func (x *Config) GetTaggerEntity() string { + if x != nil { + return x.TaggerEntity + } + return "" +} + +func (x *Config) GetClusterCheck() bool { + if x != nil { + return x.ClusterCheck + } + return false +} + +func (x *Config) GetNodeName() string { + if x != nil { + return x.NodeName + } + return "" +} + +func (x *Config) GetSource() string { + if x != nil { + return x.Source + } + return "" +} + +func (x *Config) GetIgnoreAutodiscoveryTags() bool { + if x != nil { + return x.IgnoreAutodiscoveryTags + } + return false +} + +func (x *Config) GetMetricsExcluded() bool { + if x != nil { + return x.MetricsExcluded + } + return false +} + +func (x *Config) GetLogsExcluded() bool { + if x != nil { + return x.LogsExcluded + } + return false +} + +func (x *Config) GetEventType() ConfigEventType { + if x != nil { + return x.EventType + } + return ConfigEventType_SCHEDULE +} + +type AutodiscoveryStreamResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Configs []*Config `protobuf:"bytes,1,rep,name=configs,proto3" json:"configs,omitempty"` +} + +func (x *AutodiscoveryStreamResponse) Reset() { + *x = AutodiscoveryStreamResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AutodiscoveryStreamResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AutodiscoveryStreamResponse) ProtoMessage() {} + +func (x *AutodiscoveryStreamResponse) ProtoReflect() protoreflect.Message { + mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AutodiscoveryStreamResponse.ProtoReflect.Descriptor instead. +func (*AutodiscoveryStreamResponse) Descriptor() ([]byte, []int) { + return file_datadog_autodiscovery_autodiscovery_proto_rawDescGZIP(), []int{3} +} + +func (x *AutodiscoveryStreamResponse) GetConfigs() []*Config { + if x != nil { + return x.Configs + } + return nil +} + +var File_datadog_autodiscovery_autodiscovery_proto protoreflect.FileDescriptor + +var file_datadog_autodiscovery_autodiscovery_proto_rawDesc = []byte{ + 0x0a, 0x29, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x64, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x64, 0x61, 0x74, + 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x79, 0x22, 0x46, 0x0a, 0x12, 0x4b, 0x75, 0x62, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x14, 0x41, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x41, 0x44, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x0b, 0x6b, 0x75, 0x62, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, + 0x6f, 0x67, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, + 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x64, 0x4e, + 0x61, 0x6d, 0x65, 0x52, 0x0b, 0x6b, 0x75, 0x62, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x4f, 0x0a, 0x0d, 0x6b, 0x75, 0x62, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, + 0x67, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, + 0x4b, 0x75, 0x62, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x64, 0x4e, 0x61, + 0x6d, 0x65, 0x52, 0x0d, 0x6b, 0x75, 0x62, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x73, 0x22, 0xab, 0x05, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0c, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1e, + 0x0a, 0x0a, 0x69, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0a, 0x69, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x22, + 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x6c, 0x6f, 0x67, 0x73, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x64, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x61, 0x0a, 0x15, 0x61, 0x64, 0x76, 0x61, + 0x6e, 0x63, 0x65, 0x64, 0x41, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, + 0x67, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, + 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x41, 0x44, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x52, 0x15, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x41, 0x64, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x61, 0x67, 0x67, 0x65, 0x72, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x61, 0x67, + 0x67, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x1a, 0x0a, + 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x38, 0x0a, 0x17, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x54, 0x61, 0x67, 0x73, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x17, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x64, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x54, 0x61, 0x67, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x78, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x6c, 0x6f, 0x67, 0x73, 0x45, 0x78, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6c, 0x6f, 0x67, + 0x73, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x09, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, + 0x56, 0x0a, 0x1b, 0x41, 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, + 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x64, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2a, 0x2f, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x43, + 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x4e, 0x53, 0x43, + 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x10, 0x01, 0x42, 0x15, 0x5a, 0x13, 0x70, 0x6b, 0x67, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x67, 0x6f, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_datadog_autodiscovery_autodiscovery_proto_rawDescOnce sync.Once + file_datadog_autodiscovery_autodiscovery_proto_rawDescData = file_datadog_autodiscovery_autodiscovery_proto_rawDesc +) + +func file_datadog_autodiscovery_autodiscovery_proto_rawDescGZIP() []byte { + file_datadog_autodiscovery_autodiscovery_proto_rawDescOnce.Do(func() { + file_datadog_autodiscovery_autodiscovery_proto_rawDescData = protoimpl.X.CompressGZIP(file_datadog_autodiscovery_autodiscovery_proto_rawDescData) + }) + return file_datadog_autodiscovery_autodiscovery_proto_rawDescData +} + +var file_datadog_autodiscovery_autodiscovery_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_datadog_autodiscovery_autodiscovery_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_datadog_autodiscovery_autodiscovery_proto_goTypes = []interface{}{ + (ConfigEventType)(0), // 0: datadog.autodiscovery.ConfigEventType + (*KubeNamespacedName)(nil), // 1: datadog.autodiscovery.KubeNamespacedName + (*AdvancedADIdentifier)(nil), // 2: datadog.autodiscovery.AdvancedADIdentifier + (*Config)(nil), // 3: datadog.autodiscovery.Config + (*AutodiscoveryStreamResponse)(nil), // 4: datadog.autodiscovery.AutodiscoveryStreamResponse +} +var file_datadog_autodiscovery_autodiscovery_proto_depIdxs = []int32{ + 1, // 0: datadog.autodiscovery.AdvancedADIdentifier.kubeService:type_name -> datadog.autodiscovery.KubeNamespacedName + 1, // 1: datadog.autodiscovery.AdvancedADIdentifier.kubeEndpoints:type_name -> datadog.autodiscovery.KubeNamespacedName + 2, // 2: datadog.autodiscovery.Config.advancedAdIdentifiers:type_name -> datadog.autodiscovery.AdvancedADIdentifier + 0, // 3: datadog.autodiscovery.Config.eventType:type_name -> datadog.autodiscovery.ConfigEventType + 3, // 4: datadog.autodiscovery.AutodiscoveryStreamResponse.configs:type_name -> datadog.autodiscovery.Config + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_datadog_autodiscovery_autodiscovery_proto_init() } +func file_datadog_autodiscovery_autodiscovery_proto_init() { + if File_datadog_autodiscovery_autodiscovery_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_datadog_autodiscovery_autodiscovery_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KubeNamespacedName); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_datadog_autodiscovery_autodiscovery_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AdvancedADIdentifier); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_datadog_autodiscovery_autodiscovery_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Config); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_datadog_autodiscovery_autodiscovery_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AutodiscoveryStreamResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_datadog_autodiscovery_autodiscovery_proto_rawDesc, + NumEnums: 1, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_datadog_autodiscovery_autodiscovery_proto_goTypes, + DependencyIndexes: file_datadog_autodiscovery_autodiscovery_proto_depIdxs, + EnumInfos: file_datadog_autodiscovery_autodiscovery_proto_enumTypes, + MessageInfos: file_datadog_autodiscovery_autodiscovery_proto_msgTypes, + }.Build() + File_datadog_autodiscovery_autodiscovery_proto = out.File + file_datadog_autodiscovery_autodiscovery_proto_rawDesc = nil + file_datadog_autodiscovery_autodiscovery_proto_goTypes = nil + file_datadog_autodiscovery_autodiscovery_proto_depIdxs = nil +} diff --git a/pkg/proto/pbgo/mocks/core/api_mockgen.pb.go b/pkg/proto/pbgo/mocks/core/api_mockgen.pb.go index f63731fc7bb98..7d7798b724aaa 100644 --- a/pkg/proto/pbgo/mocks/core/api_mockgen.pb.go +++ b/pkg/proto/pbgo/mocks/core/api_mockgen.pb.go @@ -119,6 +119,26 @@ func (m *MockAgentSecureClient) EXPECT() *MockAgentSecureClientMockRecorder { return m.recorder } +// AutodiscoveryStreamConfig mocks base method. +func (m *MockAgentSecureClient) AutodiscoveryStreamConfig(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (core.AgentSecure_AutodiscoveryStreamConfigClient, error) { + m.ctrl.T.Helper() + varargs := []interface{}{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "AutodiscoveryStreamConfig", varargs...) + ret0, _ := ret[0].(core.AgentSecure_AutodiscoveryStreamConfigClient) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AutodiscoveryStreamConfig indicates an expected call of AutodiscoveryStreamConfig. +func (mr *MockAgentSecureClientMockRecorder) AutodiscoveryStreamConfig(ctx, in interface{}, opts ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AutodiscoveryStreamConfig", reflect.TypeOf((*MockAgentSecureClient)(nil).AutodiscoveryStreamConfig), varargs...) +} + // ClientGetConfigs mocks base method. func (m *MockAgentSecureClient) ClientGetConfigs(ctx context.Context, in *core.ClientGetConfigsRequest, opts ...grpc.CallOption) (*core.ClientGetConfigsResponse, error) { m.ctrl.T.Helper() @@ -565,6 +585,129 @@ func (mr *MockAgentSecure_WorkloadmetaStreamEntitiesClientMockRecorder) Trailer( return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Trailer", reflect.TypeOf((*MockAgentSecure_WorkloadmetaStreamEntitiesClient)(nil).Trailer)) } +// MockAgentSecure_AutodiscoveryStreamConfigClient is a mock of AgentSecure_AutodiscoveryStreamConfigClient interface. +type MockAgentSecure_AutodiscoveryStreamConfigClient struct { + ctrl *gomock.Controller + recorder *MockAgentSecure_AutodiscoveryStreamConfigClientMockRecorder +} + +// MockAgentSecure_AutodiscoveryStreamConfigClientMockRecorder is the mock recorder for MockAgentSecure_AutodiscoveryStreamConfigClient. +type MockAgentSecure_AutodiscoveryStreamConfigClientMockRecorder struct { + mock *MockAgentSecure_AutodiscoveryStreamConfigClient +} + +// NewMockAgentSecure_AutodiscoveryStreamConfigClient creates a new mock instance. +func NewMockAgentSecure_AutodiscoveryStreamConfigClient(ctrl *gomock.Controller) *MockAgentSecure_AutodiscoveryStreamConfigClient { + mock := &MockAgentSecure_AutodiscoveryStreamConfigClient{ctrl: ctrl} + mock.recorder = &MockAgentSecure_AutodiscoveryStreamConfigClientMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockAgentSecure_AutodiscoveryStreamConfigClient) EXPECT() *MockAgentSecure_AutodiscoveryStreamConfigClientMockRecorder { + return m.recorder +} + +// CloseSend mocks base method. +func (m *MockAgentSecure_AutodiscoveryStreamConfigClient) CloseSend() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CloseSend") + ret0, _ := ret[0].(error) + return ret0 +} + +// CloseSend indicates an expected call of CloseSend. +func (mr *MockAgentSecure_AutodiscoveryStreamConfigClientMockRecorder) CloseSend() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CloseSend", reflect.TypeOf((*MockAgentSecure_AutodiscoveryStreamConfigClient)(nil).CloseSend)) +} + +// Context mocks base method. +func (m *MockAgentSecure_AutodiscoveryStreamConfigClient) Context() context.Context { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Context") + ret0, _ := ret[0].(context.Context) + return ret0 +} + +// Context indicates an expected call of Context. +func (mr *MockAgentSecure_AutodiscoveryStreamConfigClientMockRecorder) Context() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Context", reflect.TypeOf((*MockAgentSecure_AutodiscoveryStreamConfigClient)(nil).Context)) +} + +// Header mocks base method. +func (m *MockAgentSecure_AutodiscoveryStreamConfigClient) Header() (metadata.MD, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Header") + ret0, _ := ret[0].(metadata.MD) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Header indicates an expected call of Header. +func (mr *MockAgentSecure_AutodiscoveryStreamConfigClientMockRecorder) Header() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Header", reflect.TypeOf((*MockAgentSecure_AutodiscoveryStreamConfigClient)(nil).Header)) +} + +// Recv mocks base method. +func (m *MockAgentSecure_AutodiscoveryStreamConfigClient) Recv() (*core.AutodiscoveryStreamResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Recv") + ret0, _ := ret[0].(*core.AutodiscoveryStreamResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Recv indicates an expected call of Recv. +func (mr *MockAgentSecure_AutodiscoveryStreamConfigClientMockRecorder) Recv() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Recv", reflect.TypeOf((*MockAgentSecure_AutodiscoveryStreamConfigClient)(nil).Recv)) +} + +// RecvMsg mocks base method. +func (m_2 *MockAgentSecure_AutodiscoveryStreamConfigClient) RecvMsg(m any) error { + m_2.ctrl.T.Helper() + ret := m_2.ctrl.Call(m_2, "RecvMsg", m) + ret0, _ := ret[0].(error) + return ret0 +} + +// RecvMsg indicates an expected call of RecvMsg. +func (mr *MockAgentSecure_AutodiscoveryStreamConfigClientMockRecorder) RecvMsg(m interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RecvMsg", reflect.TypeOf((*MockAgentSecure_AutodiscoveryStreamConfigClient)(nil).RecvMsg), m) +} + +// SendMsg mocks base method. +func (m_2 *MockAgentSecure_AutodiscoveryStreamConfigClient) SendMsg(m any) error { + m_2.ctrl.T.Helper() + ret := m_2.ctrl.Call(m_2, "SendMsg", m) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendMsg indicates an expected call of SendMsg. +func (mr *MockAgentSecure_AutodiscoveryStreamConfigClientMockRecorder) SendMsg(m interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMsg", reflect.TypeOf((*MockAgentSecure_AutodiscoveryStreamConfigClient)(nil).SendMsg), m) +} + +// Trailer mocks base method. +func (m *MockAgentSecure_AutodiscoveryStreamConfigClient) Trailer() metadata.MD { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Trailer") + ret0, _ := ret[0].(metadata.MD) + return ret0 +} + +// Trailer indicates an expected call of Trailer. +func (mr *MockAgentSecure_AutodiscoveryStreamConfigClientMockRecorder) Trailer() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Trailer", reflect.TypeOf((*MockAgentSecure_AutodiscoveryStreamConfigClient)(nil).Trailer)) +} + // MockAgentSecureServer is a mock of AgentSecureServer interface. type MockAgentSecureServer struct { ctrl *gomock.Controller @@ -588,6 +731,20 @@ func (m *MockAgentSecureServer) EXPECT() *MockAgentSecureServerMockRecorder { return m.recorder } +// AutodiscoveryStreamConfig mocks base method. +func (m *MockAgentSecureServer) AutodiscoveryStreamConfig(arg0 *empty.Empty, arg1 core.AgentSecure_AutodiscoveryStreamConfigServer) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AutodiscoveryStreamConfig", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// AutodiscoveryStreamConfig indicates an expected call of AutodiscoveryStreamConfig. +func (mr *MockAgentSecureServerMockRecorder) AutodiscoveryStreamConfig(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AutodiscoveryStreamConfig", reflect.TypeOf((*MockAgentSecureServer)(nil).AutodiscoveryStreamConfig), arg0, arg1) +} + // ClientGetConfigs mocks base method. func (m *MockAgentSecureServer) ClientGetConfigs(arg0 context.Context, arg1 *core.ClientGetConfigsRequest) (*core.ClientGetConfigsResponse, error) { m.ctrl.T.Helper() @@ -974,6 +1131,125 @@ func (mr *MockAgentSecure_WorkloadmetaStreamEntitiesServerMockRecorder) SetTrail return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetTrailer", reflect.TypeOf((*MockAgentSecure_WorkloadmetaStreamEntitiesServer)(nil).SetTrailer), arg0) } +// MockAgentSecure_AutodiscoveryStreamConfigServer is a mock of AgentSecure_AutodiscoveryStreamConfigServer interface. +type MockAgentSecure_AutodiscoveryStreamConfigServer struct { + ctrl *gomock.Controller + recorder *MockAgentSecure_AutodiscoveryStreamConfigServerMockRecorder +} + +// MockAgentSecure_AutodiscoveryStreamConfigServerMockRecorder is the mock recorder for MockAgentSecure_AutodiscoveryStreamConfigServer. +type MockAgentSecure_AutodiscoveryStreamConfigServerMockRecorder struct { + mock *MockAgentSecure_AutodiscoveryStreamConfigServer +} + +// NewMockAgentSecure_AutodiscoveryStreamConfigServer creates a new mock instance. +func NewMockAgentSecure_AutodiscoveryStreamConfigServer(ctrl *gomock.Controller) *MockAgentSecure_AutodiscoveryStreamConfigServer { + mock := &MockAgentSecure_AutodiscoveryStreamConfigServer{ctrl: ctrl} + mock.recorder = &MockAgentSecure_AutodiscoveryStreamConfigServerMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockAgentSecure_AutodiscoveryStreamConfigServer) EXPECT() *MockAgentSecure_AutodiscoveryStreamConfigServerMockRecorder { + return m.recorder +} + +// Context mocks base method. +func (m *MockAgentSecure_AutodiscoveryStreamConfigServer) Context() context.Context { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Context") + ret0, _ := ret[0].(context.Context) + return ret0 +} + +// Context indicates an expected call of Context. +func (mr *MockAgentSecure_AutodiscoveryStreamConfigServerMockRecorder) Context() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Context", reflect.TypeOf((*MockAgentSecure_AutodiscoveryStreamConfigServer)(nil).Context)) +} + +// RecvMsg mocks base method. +func (m_2 *MockAgentSecure_AutodiscoveryStreamConfigServer) RecvMsg(m any) error { + m_2.ctrl.T.Helper() + ret := m_2.ctrl.Call(m_2, "RecvMsg", m) + ret0, _ := ret[0].(error) + return ret0 +} + +// RecvMsg indicates an expected call of RecvMsg. +func (mr *MockAgentSecure_AutodiscoveryStreamConfigServerMockRecorder) RecvMsg(m interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RecvMsg", reflect.TypeOf((*MockAgentSecure_AutodiscoveryStreamConfigServer)(nil).RecvMsg), m) +} + +// Send mocks base method. +func (m *MockAgentSecure_AutodiscoveryStreamConfigServer) Send(arg0 *core.AutodiscoveryStreamResponse) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Send", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// Send indicates an expected call of Send. +func (mr *MockAgentSecure_AutodiscoveryStreamConfigServerMockRecorder) Send(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Send", reflect.TypeOf((*MockAgentSecure_AutodiscoveryStreamConfigServer)(nil).Send), arg0) +} + +// SendHeader mocks base method. +func (m *MockAgentSecure_AutodiscoveryStreamConfigServer) SendHeader(arg0 metadata.MD) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SendHeader", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendHeader indicates an expected call of SendHeader. +func (mr *MockAgentSecure_AutodiscoveryStreamConfigServerMockRecorder) SendHeader(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendHeader", reflect.TypeOf((*MockAgentSecure_AutodiscoveryStreamConfigServer)(nil).SendHeader), arg0) +} + +// SendMsg mocks base method. +func (m_2 *MockAgentSecure_AutodiscoveryStreamConfigServer) SendMsg(m any) error { + m_2.ctrl.T.Helper() + ret := m_2.ctrl.Call(m_2, "SendMsg", m) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendMsg indicates an expected call of SendMsg. +func (mr *MockAgentSecure_AutodiscoveryStreamConfigServerMockRecorder) SendMsg(m interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendMsg", reflect.TypeOf((*MockAgentSecure_AutodiscoveryStreamConfigServer)(nil).SendMsg), m) +} + +// SetHeader mocks base method. +func (m *MockAgentSecure_AutodiscoveryStreamConfigServer) SetHeader(arg0 metadata.MD) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetHeader", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetHeader indicates an expected call of SetHeader. +func (mr *MockAgentSecure_AutodiscoveryStreamConfigServerMockRecorder) SetHeader(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetHeader", reflect.TypeOf((*MockAgentSecure_AutodiscoveryStreamConfigServer)(nil).SetHeader), arg0) +} + +// SetTrailer mocks base method. +func (m *MockAgentSecure_AutodiscoveryStreamConfigServer) SetTrailer(arg0 metadata.MD) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "SetTrailer", arg0) +} + +// SetTrailer indicates an expected call of SetTrailer. +func (mr *MockAgentSecure_AutodiscoveryStreamConfigServerMockRecorder) SetTrailer(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetTrailer", reflect.TypeOf((*MockAgentSecure_AutodiscoveryStreamConfigServer)(nil).SetTrailer), arg0) +} + // MockRemoteAgentClient is a mock of RemoteAgentClient interface. type MockRemoteAgentClient struct { ctrl *gomock.Controller diff --git a/tasks/go.py b/tasks/go.py index fafcaa008af35..13f451cce050f 100644 --- a/tasks/go.py +++ b/tasks/go.py @@ -217,6 +217,7 @@ def generate_protobuf(ctx): 'workloadmeta': (False, False), 'languagedetection': (False, False), 'remoteagent': (False, False), + 'autodiscovery': (False, False), } # maybe put this in a separate function From 5d5a26d34395eea748f9d308660c51247501bf91 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 15:09:50 +0000 Subject: [PATCH 124/303] Bump actions/upload-artifact from 4.3.6 to 4.4.0 (#28975) Co-authored-by: chouetz Co-authored-by: FlorentClarret --- .github/workflows/cws-btfhub-sync.yml | 2 +- .github/workflows/docs-dev.yml | 2 +- .github/workflows/serverless-benchmarks.yml | 4 ++-- .github/workflows/serverless-binary-size.yml | 2 +- .github/workflows/serverless-integration.yml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/cws-btfhub-sync.yml b/.github/workflows/cws-btfhub-sync.yml index 08d0ad720c1da..0a61cd6d38c0c 100644 --- a/.github/workflows/cws-btfhub-sync.yml +++ b/.github/workflows/cws-btfhub-sync.yml @@ -97,7 +97,7 @@ jobs: inv -e security-agent.generate-btfhub-constants --archive-path=./dev/dist/archive --output-path=./"$ARTIFACT_NAME".json --force-refresh - name: Upload artifact - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 + uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 with: name: ${{ steps.artifact-name.outputs.ARTIFACT_NAME }} path: ./${{ steps.artifact-name.outputs.ARTIFACT_NAME }}.json diff --git a/.github/workflows/docs-dev.yml b/.github/workflows/docs-dev.yml index 09d4dd1bbb98e..2f0cc36c01ce8 100644 --- a/.github/workflows/docs-dev.yml +++ b/.github/workflows/docs-dev.yml @@ -50,7 +50,7 @@ jobs: - name: Build documentation run: invoke docs.build - - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 + - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 with: name: documentation path: site diff --git a/.github/workflows/serverless-benchmarks.yml b/.github/workflows/serverless-benchmarks.yml index e618764a0ca3b..a393d8e08917e 100644 --- a/.github/workflows/serverless-benchmarks.yml +++ b/.github/workflows/serverless-benchmarks.yml @@ -48,7 +48,7 @@ jobs: ./pkg/serverless/... | tee "$TEMP_RUNNER"/benchmark.log - name: Upload result artifact - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 + uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 with: name: baseline.log path: ${{runner.temp}}/benchmark.log @@ -87,7 +87,7 @@ jobs: ./pkg/serverless/... | tee "$TEMP_RUNNER"/benchmark.log - name: Upload result artifact - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 + uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 with: name: current.log path: ${{runner.temp}}/benchmark.log diff --git a/.github/workflows/serverless-binary-size.yml b/.github/workflows/serverless-binary-size.yml index fe8e17d17d990..5bc272591f0e6 100644 --- a/.github/workflows/serverless-binary-size.yml +++ b/.github/workflows/serverless-binary-size.yml @@ -152,7 +152,7 @@ jobs: done - name: Archive dependency graphs - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 + uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 if: steps.should.outputs.should_run == 'true' with: name: dependency-graphs diff --git a/.github/workflows/serverless-integration.yml b/.github/workflows/serverless-integration.yml index 288d3ef5042e4..7414d78ac65b3 100644 --- a/.github/workflows/serverless-integration.yml +++ b/.github/workflows/serverless-integration.yml @@ -80,7 +80,7 @@ jobs: - name: Archive raw logs if: always() - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 + uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 with: name: rawlogs-${{ matrix.suite }}-${{ matrix.architecture }} path: ${{ steps.rawlogs.outputs.dir }} From 8a5e662d8c58c592bbba0766f66d04cabef762cf Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Wed, 11 Dec 2024 16:10:12 +0100 Subject: [PATCH 125/303] Revert "When running in CI, scrub e2e tests output to avoid leaking keys" (#32027) --- tasks/new_e2e_tests.py | 9 +-------- tasks/tools/gotest-scrubbed.sh | 6 ------ 2 files changed, 1 insertion(+), 14 deletions(-) delete mode 100755 tasks/tools/gotest-scrubbed.sh diff --git a/tasks/new_e2e_tests.py b/tasks/new_e2e_tests.py index 74f027afd1582..cf4b99caec7e6 100644 --- a/tasks/new_e2e_tests.py +++ b/tasks/new_e2e_tests.py @@ -111,14 +111,7 @@ def run( test_run_arg = f"-run {test_run_name}" cmd = f'gotestsum --format {gotestsum_format} ' - scrubber_raw_command = "" - # Scrub the test output to avoid leaking API or APP keys when running in the CI - if running_in_ci(): - scrubber_raw_command = ( - # Using custom go command piped with scrubber sed instructions https://github.com/gotestyourself/gotestsum#custom-go-test-command - f"--raw-command {os.path.join(os.path.dirname(__file__), 'tools', 'gotest-scrubbed.sh')} {{packages}}" - ) - cmd += f'{{junit_file_flag}} {{json_flag}} --packages="{{packages}}" {scrubber_raw_command} -- -ldflags="-X {{REPO_PATH}}/test/new-e2e/tests/containers.GitCommit={{commit}}" {{verbose}} -mod={{go_mod}} -vet=off -timeout {{timeout}} -tags "{{go_build_tags}}" {{nocache}} {{run}} {{skip}} {{test_run_arg}} -args {{osversion}} {{platform}} {{major_version}} {{arch}} {{flavor}} {{cws_supported_osversion}} {{src_agent_version}} {{dest_agent_version}} {{keep_stacks}} {{extra_flags}}' + cmd += '{junit_file_flag} {json_flag} --packages="{packages}" -- -ldflags="-X {REPO_PATH}/test/new-e2e/tests/containers.GitCommit={commit}" {verbose} -mod={go_mod} -vet=off -timeout {timeout} -tags "{go_build_tags}" {nocache} {run} {skip} {test_run_arg} -args {osversion} {platform} {major_version} {arch} {flavor} {cws_supported_osversion} {src_agent_version} {dest_agent_version} {keep_stacks} {extra_flags}' args = { "go_mod": "readonly", diff --git a/tasks/tools/gotest-scrubbed.sh b/tasks/tools/gotest-scrubbed.sh deleted file mode 100755 index 2000005289fae..0000000000000 --- a/tasks/tools/gotest-scrubbed.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -### This script is used to run go test and scrub the output, the command can be used as follow: -### ./gotest-scrubbed.sh -- -go test -json "$1" "${@:3}" | -sed -E 's/\b[a-fA-F0-9]{27}([a-fA-F0-9]{5})\b/**************************\1/g' | # Scrub API keys -sed -E 's/\b[a-fA-F0-9]{35}([a-fA-F0-9]{5})\b/************************************\1/g' # Scrub APP keys From 97fdc4dd76a239705a17f1d71b73eb43681f2304 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 15:14:59 +0000 Subject: [PATCH 126/303] Bump github/codeql-action from 3.27.5 to 3.27.6 (#31925) Co-authored-by: chouetz --- .github/workflows/codeql-analysis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 884c65f390ee8..4ce361a8a19f1 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -45,7 +45,7 @@ jobs: go-version-file: ".go-version" - name: Initialize CodeQL - uses: github/codeql-action/init@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5 + uses: github/codeql-action/init@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 with: languages: ${{ matrix.language }} config: | @@ -67,4 +67,4 @@ jobs: invoke agent.build --build-exclude=systemd - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5 + uses: github/codeql-action/analyze@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 From ed4a97e15e6246e0e06aa4368f3d558811288536 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 11 Dec 2024 17:02:38 +0100 Subject: [PATCH 127/303] [FA] Fix expected state log line (#31965) --- pkg/fleet/daemon/daemon.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/fleet/daemon/daemon.go b/pkg/fleet/daemon/daemon.go index 566275521126a..192587f641163 100644 --- a/pkg/fleet/daemon/daemon.go +++ b/pkg/fleet/daemon/daemon.go @@ -475,7 +475,10 @@ func (d *daemonImpl) handleRemoteAPIRequest(request remoteAPIRequest) (err error s.Experiment != request.ExpectedState.Experiment || c.Stable != request.ExpectedState.StableConfig || c.Experiment != request.ExpectedState.ExperimentConfig) { - log.Infof("remote request %s not executed as state does not match: expected %v, got %v", request.ID, request.ExpectedState, s) + log.Infof( + "remote request %s not executed as state does not match: expected %v, got package: %v, config: %v", + request.ID, request.ExpectedState, s, c, + ) setRequestInvalid(ctx) d.refreshState(ctx) return nil From 886af76ebfb032ec39f946e0ada27d1cbdd179e0 Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Wed, 11 Dec 2024 17:02:51 +0100 Subject: [PATCH 128/303] [ASCII-2578] Remove seelog imports outside pkg/util/log (#31788) --- .golangci.yml | 6 + cmd/agent/common/common_windows.go | 5 +- .../clcrunnerapi/clc_runner_server.go | 4 +- cmd/cluster-agent/admission/server.go | 3 +- cmd/cluster-agent/api/server.go | 4 +- cmd/security-agent/api/server.go | 4 +- .../test/testsuite/config_set_test.go | 4 +- comp/api/api/apiimpl/server.go | 5 +- comp/core/log/mock/go.mod | 2 +- comp/core/log/mock/mock.go | 6 +- .../serverDebug/serverdebugimpl/debug.go | 8 +- .../netflow/flowaggregator/aggregator_test.go | 3 +- comp/netflow/goflowlib/logger.go | 15 +- .../npcollectorimpl/npcollector_test.go | 9 +- .../pathteststore/pathteststore_test.go | 3 +- .../rcclient/rcclientimpl/rcclient_test.go | 3 +- comp/trace/config/config_test.go | 4 +- pkg/clusteragent/api/leader_forwarder.go | 5 +- pkg/collector/corechecks/ebpf/ebpf.go | 9 +- .../corechecks/ebpf/probe/ebpfcheck/probe.go | 3 +- .../snmp/internal/checkconfig/config.go | 3 +- .../snmp/internal/devicecheck/devicecheck.go | 7 +- .../snmp/internal/fetch/fetch_column.go | 5 +- .../snmp/internal/fetch/fetch_scalar.go | 3 +- .../snmp/internal/fetch/fetch_test.go | 3 +- .../internal/profile/profile_resolver_test.go | 3 +- .../internal/profile/profile_yaml_test.go | 10 +- .../report/report_device_metadata_test.go | 3 +- .../internal/report/report_metrics_test.go | 7 +- .../snmp/internal/report/report_utils_test.go | 5 +- .../snmp/internal/session/session.go | 3 +- .../snmp/internal/session/session_test.go | 5 +- pkg/collector/python/memory.go | 6 +- pkg/ebpf/ebpftest/fail_log.go | 3 +- pkg/ebpf/ebpftest/log.go | 3 +- pkg/ebpf/map_cleaner_test.go | 3 +- pkg/ebpf/verifier/stats_test.go | 3 +- pkg/gohai/cpu/util_linux.go | 2 +- pkg/gohai/filesystem/filesystem_nix.go | 4 +- pkg/gohai/go.mod | 2 +- pkg/gohai/memory/memory_linux.go | 2 +- pkg/gohai/platform/platform_darwin.go | 5 +- pkg/gohai/processes/gops/process_info.go | 6 +- pkg/logs/tailers/windowsevent/tailer_test.go | 4 +- pkg/network/encoding/marshal/usm.go | 4 +- pkg/network/go/bininspect/symbols.go | 6 +- .../netlink/conntrack_integration_test.go | 3 +- pkg/network/netlink/conntracker.go | 5 +- pkg/network/netlink/consumer.go | 3 +- pkg/network/port_test.go | 3 +- pkg/network/protocols/events/consumer.go | 4 +- pkg/network/protocols/http/telemetry.go | 4 +- pkg/network/protocols/http2/telemetry.go | 4 +- pkg/network/protocols/kafka/telemetry.go | 4 +- pkg/network/protocols/postgres/telemetry.go | 6 +- pkg/network/state.go | 3 +- pkg/network/tracer/connection/ebpf_tracer.go | 3 +- pkg/network/tracer/ebpf_conntracker.go | 9 +- pkg/network/tracer/process_cache.go | 3 +- pkg/network/tracer/tracer.go | 7 +- pkg/network/tracer/tracer_test.go | 3 +- pkg/network/usm/ebpf_gotls.go | 3 +- pkg/network/usm/monitor_test.go | 3 +- .../usm/tests/tracer_classification_test.go | 3 +- pkg/network/usm/utils/file_registry.go | 3 +- pkg/process/metadata/parser/service.go | 5 +- pkg/process/monitor/process_monitor.go | 5 +- pkg/process/procutil/process_linux_test.go | 1 + pkg/security/seclog/logger.go | 4 +- pkg/security/tests/main_test.go | 4 +- pkg/security/tests/module_tester_linux.go | 11 +- pkg/serverless/daemon/routes_test.go | 3 +- pkg/snmp/gosnmplib/gosnmp_log_test.go | 3 +- pkg/trace/go.mod | 2 +- .../remote_config_handler.go | 5 +- .../remote_config_handler_test.go | 13 +- pkg/util/grpc/agent_client_test.go | 3 +- pkg/util/grpc/go.mod | 2 +- .../controllers/wpa_controller_test.go | 4 +- pkg/util/log/levels.go | 47 ++++++ pkg/util/log/log.go | 143 +++++++++--------- pkg/util/log/log_bench_test.go | 16 +- pkg/util/log/log_not_serverless_test.go | 3 +- pkg/util/log/log_serverless_test.go | 3 +- pkg/util/log/log_test.go | 84 +++++----- pkg/util/log/log_test_init.go | 4 +- pkg/util/log/logger.go | 35 +++++ pkg/util/log/setup/log.go | 16 +- pkg/util/log/zap/zapcore.go | 13 +- .../subscription/subscription_test.go | 9 +- pkg/util/winutil/go.mod | 2 +- 91 files changed, 369 insertions(+), 362 deletions(-) create mode 100644 pkg/util/log/levels.go create mode 100644 pkg/util/log/logger.go diff --git a/.golangci.yml b/.golangci.yml index 0358a505b0118..320c25ce206a7 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -607,6 +607,12 @@ linters-settings: desc: "Not really forbidden to use, but it is usually imported by mistake instead of github.com/stretchr/testify/assert, and confusing since it actually has the behavior of github.com/stretchr/testify/require" - pkg: "debug/elf" desc: "prefer pkg/util/safeelf to prevent panics during parsing" + logger: + files: + - "!**/pkg/util/log/**" + deny: + - pkg: "github.com/cihub/seelog" + desc: "seelog should not be used directly. Use `pkg/util/log` instead." errcheck: exclude-functions: diff --git a/cmd/agent/common/common_windows.go b/cmd/agent/common/common_windows.go index 852d4d77d5ccd..33d215dccc84a 100644 --- a/cmd/agent/common/common_windows.go +++ b/cmd/agent/common/common_windows.go @@ -9,13 +9,14 @@ import ( "os" "path/filepath" + //nolint:depguard // creating a logger from a seelog config + "github.com/cihub/seelog" + pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/winutil" "github.com/DataDog/datadog-agent/pkg/util/winutil/messagestrings" - - "github.com/cihub/seelog" ) // ServiceName is the name of the Windows Service the agent runs as diff --git a/cmd/agent/subcommands/run/internal/clcrunnerapi/clc_runner_server.go b/cmd/agent/subcommands/run/internal/clcrunnerapi/clc_runner_server.go index 9b763d3a8b1df..7554f755a2d1b 100644 --- a/cmd/agent/subcommands/run/internal/clcrunnerapi/clc_runner_server.go +++ b/cmd/agent/subcommands/run/internal/clcrunnerapi/clc_runner_server.go @@ -19,7 +19,6 @@ import ( "net/http" "time" - "github.com/cihub/seelog" "github.com/gorilla/mux" v1 "github.com/DataDog/datadog-agent/cmd/agent/subcommands/run/internal/clcrunnerapi/v1" @@ -27,6 +26,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/api/security" "github.com/DataDog/datadog-agent/pkg/api/util" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" + "github.com/DataDog/datadog-agent/pkg/util/log" pkglogsetup "github.com/DataDog/datadog-agent/pkg/util/log/setup" ) @@ -85,7 +85,7 @@ func StartCLCRunnerServer(extraHandlers map[string]http.Handler, ac autodiscover } // Use a stack depth of 4 on top of the default one to get a relevant filename in the stdlib - logWriter, _ := pkglogsetup.NewLogWriter(4, seelog.WarnLvl) + logWriter, _ := pkglogsetup.NewLogWriter(4, log.WarnLvl) srv := &http.Server{ Handler: r, diff --git a/cmd/cluster-agent/admission/server.go b/cmd/cluster-agent/admission/server.go index ea53230e19a35..86b237001037b 100644 --- a/cmd/cluster-agent/admission/server.go +++ b/cmd/cluster-agent/admission/server.go @@ -18,7 +18,6 @@ import ( "net/http" "time" - "github.com/cihub/seelog" admiv1 "k8s.io/api/admission/v1" admiv1beta1 "k8s.io/api/admission/v1beta1" admissionregistrationv1 "k8s.io/api/admissionregistration/v1" @@ -117,7 +116,7 @@ func (s *Server) Run(mainCtx context.Context, client kubernetes.Interface) error tlsMinVersion = tls.VersionTLS10 } - logWriter, _ := pkglogsetup.NewTLSHandshakeErrorWriter(4, seelog.WarnLvl) + logWriter, _ := pkglogsetup.NewTLSHandshakeErrorWriter(4, log.WarnLvl) server := &http.Server{ Addr: fmt.Sprintf(":%d", pkgconfigsetup.Datadog().GetInt("admission_controller.port")), Handler: s.mux, diff --git a/cmd/cluster-agent/api/server.go b/cmd/cluster-agent/api/server.go index 7b2c26fb1d8d5..37efad4d900dd 100644 --- a/cmd/cluster-agent/api/server.go +++ b/cmd/cluster-agent/api/server.go @@ -25,7 +25,6 @@ import ( languagedetection "github.com/DataDog/datadog-agent/cmd/cluster-agent/api/v1/languagedetection" - "github.com/cihub/seelog" "github.com/gorilla/mux" grpc_auth "github.com/grpc-ecosystem/go-grpc-middleware/auth" "google.golang.org/grpc" @@ -44,6 +43,7 @@ import ( pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo/core" grpcutil "github.com/DataDog/datadog-agent/pkg/util/grpc" + "github.com/DataDog/datadog-agent/pkg/util/log" pkglogsetup "github.com/DataDog/datadog-agent/pkg/util/log/setup" ) @@ -113,7 +113,7 @@ func StartServer(ctx context.Context, w workloadmeta.Component, taggerComp tagge } // Use a stack depth of 4 on top of the default one to get a relevant filename in the stdlib - logWriter, _ := pkglogsetup.NewTLSHandshakeErrorWriter(4, seelog.WarnLvl) + logWriter, _ := pkglogsetup.NewTLSHandshakeErrorWriter(4, log.WarnLvl) authInterceptor := grpcutil.AuthInterceptor(func(token string) (interface{}, error) { if token != util.GetDCAAuthToken() { diff --git a/cmd/security-agent/api/server.go b/cmd/security-agent/api/server.go index 3b44b83e39436..e776628e5ccd4 100644 --- a/cmd/security-agent/api/server.go +++ b/cmd/security-agent/api/server.go @@ -20,7 +20,6 @@ import ( "net/http" "time" - "github.com/cihub/seelog" "github.com/gorilla/mux" "github.com/DataDog/datadog-agent/cmd/security-agent/api/agent" @@ -30,6 +29,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/api/security" "github.com/DataDog/datadog-agent/pkg/api/util" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" + "github.com/DataDog/datadog-agent/pkg/util/log" pkglogsetup "github.com/DataDog/datadog-agent/pkg/util/log/setup" ) @@ -90,7 +90,7 @@ func (s *Server) Start() error { } // Use a stack depth of 4 on top of the default one to get a relevant filename in the stdlib - logWriter, _ := pkglogsetup.NewLogWriter(4, seelog.ErrorLvl) + logWriter, _ := pkglogsetup.NewLogWriter(4, log.ErrorLvl) srv := &http.Server{ Handler: r, diff --git a/cmd/trace-agent/test/testsuite/config_set_test.go b/cmd/trace-agent/test/testsuite/config_set_test.go index ee2065f63c7a2..1a9175490aca2 100644 --- a/cmd/trace-agent/test/testsuite/config_set_test.go +++ b/cmd/trace-agent/test/testsuite/config_set_test.go @@ -11,10 +11,10 @@ import ( "testing" "time" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/cmd/trace-agent/test" + "github.com/DataDog/datadog-agent/pkg/util/log" ) func TestConfigSetHandlerUnauthenticated(t *testing.T) { @@ -36,7 +36,7 @@ func TestConfigSetHandlerUnauthenticated(t *testing.T) { assert.NotContains(t, logstr, "| DEBUG |") assert.Contains(t, logstr, "| INFO |") - resp, err := r.DoReq(fmt.Sprintf("config/set?log_level=%s", seelog.WarnStr), http.MethodPost, nil) + resp, err := r.DoReq(fmt.Sprintf("config/set?log_level=%s", log.WarnStr), http.MethodPost, nil) if err != nil { t.Fatal(err) } diff --git a/comp/api/api/apiimpl/server.go b/comp/api/api/apiimpl/server.go index b4d42f1178218..762a67b8a4a63 100644 --- a/comp/api/api/apiimpl/server.go +++ b/comp/api/api/apiimpl/server.go @@ -12,17 +12,14 @@ import ( "net" "net/http" - "github.com/cihub/seelog" - "github.com/DataDog/datadog-agent/comp/api/api/apiimpl/observability" - "github.com/DataDog/datadog-agent/pkg/util/log" pkglogsetup "github.com/DataDog/datadog-agent/pkg/util/log/setup" ) func startServer(listener net.Listener, srv *http.Server, name string) { // Use a stack depth of 4 on top of the default one to get a relevant filename in the stdlib - logWriter, _ := pkglogsetup.NewLogWriter(5, seelog.ErrorLvl) + logWriter, _ := pkglogsetup.NewLogWriter(5, log.ErrorLvl) srv.ErrorLog = stdLog.New(logWriter, fmt.Sprintf("Error from the Agent HTTP server '%s': ", name), 0) // log errors to seelog diff --git a/comp/core/log/mock/go.mod b/comp/core/log/mock/go.mod index bf511bfc7e266..6bf266c22d51d 100644 --- a/comp/core/log/mock/go.mod +++ b/comp/core/log/mock/go.mod @@ -33,7 +33,6 @@ require ( github.com/DataDog/datadog-agent/comp/core/log/def v0.0.0-00010101000000-000000000000 github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/util/log/setup v0.0.0-00010101000000-000000000000 - github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 ) require ( @@ -43,6 +42,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect + github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect github.com/magiconair/properties v1.8.7 // indirect diff --git a/comp/core/log/mock/mock.go b/comp/core/log/mock/mock.go index b3dde056dcb8f..9e29cdf5fb65a 100644 --- a/comp/core/log/mock/mock.go +++ b/comp/core/log/mock/mock.go @@ -10,8 +10,6 @@ import ( "strings" "testing" - "github.com/cihub/seelog" - log "github.com/DataDog/datadog-agent/comp/core/log/def" pkglog "github.com/DataDog/datadog-agent/pkg/util/log" @@ -37,7 +35,7 @@ func (tbw *tbWriter) Write(p []byte) (n int, err error) { // New returns a new mock for the log Component func New(t testing.TB) log.Component { // Build a logger that only logs to t.Log(..) - iface, err := seelog.LoggerFromWriterWithMinLevelAndFormat(&tbWriter{t}, seelog.TraceLvl, + iface, err := pkglog.LoggerFromWriterWithMinLevelAndFormat(&tbWriter{t}, pkglog.TraceLvl, "%Date(2006-01-02 15:04:05 MST) | %LEVEL | (%ShortFilePath:%Line in %FuncShort) | %ExtraTextContext%Msg%n") if err != nil { t.Fatal(err.Error()) @@ -45,7 +43,7 @@ func New(t testing.TB) log.Component { t.Cleanup(func() { // stop using the logger to avoid a race condition - pkglog.ChangeLogLevel(seelog.Default, "debug") + pkglog.ChangeLogLevel(pkglog.Default(), "debug") iface.Flush() }) diff --git a/comp/dogstatsd/serverDebug/serverdebugimpl/debug.go b/comp/dogstatsd/serverDebug/serverdebugimpl/debug.go index 90c528919bef1..4a8a7a5926ba4 100644 --- a/comp/dogstatsd/serverDebug/serverdebugimpl/debug.go +++ b/comp/dogstatsd/serverDebug/serverdebugimpl/debug.go @@ -16,7 +16,6 @@ import ( "time" "github.com/benbjohnson/clock" - slog "github.com/cihub/seelog" "go.uber.org/atomic" "go.uber.org/fx" @@ -31,6 +30,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/tagset" "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/fxutil" + pkglog "github.com/DataDog/datadog-agent/pkg/util/log" pkglogsetup "github.com/DataDog/datadog-agent/pkg/util/log/setup" ) @@ -71,7 +71,7 @@ type serverDebugImpl struct { clock clock.Clock tagsAccumulator *tagset.HashingTagsAccumulator // dogstatsdDebugLogger is an instance of the logger config that can be used to create new logger for dogstatsd-stats metrics - dogstatsdDebugLogger slog.LoggerInterface + dogstatsdDebugLogger pkglog.LoggerInterface } // NewServerlessServerDebug creates a new instance of serverDebug.Component @@ -279,9 +279,9 @@ func (d *serverDebugImpl) disableMetricsStats() { } // build a local dogstatsd logger and bubbling up any errors -func (d *serverDebugImpl) getDogstatsdDebug(cfg model.Reader) slog.LoggerInterface { +func (d *serverDebugImpl) getDogstatsdDebug(cfg model.Reader) pkglog.LoggerInterface { - var dogstatsdLogger slog.LoggerInterface + var dogstatsdLogger pkglog.LoggerInterface // Configuring the log file path logFile := cfg.GetString("dogstatsd_log_file") diff --git a/comp/netflow/flowaggregator/aggregator_test.go b/comp/netflow/flowaggregator/aggregator_test.go index 181915ab3f628..3ba87f0a12639 100644 --- a/comp/netflow/flowaggregator/aggregator_test.go +++ b/comp/netflow/flowaggregator/aggregator_test.go @@ -18,7 +18,6 @@ import ( "testing" "time" - "github.com/cihub/seelog" "github.com/gogo/protobuf/proto" "github.com/golang/mock/gomock" "github.com/prometheus/client_golang/prometheus" @@ -336,7 +335,7 @@ func TestFlowAggregator_flush_submitCollectorMetrics_error(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := ddlog.LoggerFromWriterWithMinLevelAndFormat(w, ddlog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") require.NoError(t, err) ddlog.SetupLogger(l, "debug") diff --git a/comp/netflow/goflowlib/logger.go b/comp/netflow/goflowlib/logger.go index 62035bcd052e5..e0a61338c7c46 100644 --- a/comp/netflow/goflowlib/logger.go +++ b/comp/netflow/goflowlib/logger.go @@ -6,20 +6,19 @@ package goflowlib import ( - "github.com/cihub/seelog" "github.com/sirupsen/logrus" log "github.com/DataDog/datadog-agent/comp/core/log/def" ddlog "github.com/DataDog/datadog-agent/pkg/util/log" ) -var ddLogToLogrusLevel = map[seelog.LogLevel]logrus.Level{ - seelog.TraceLvl: logrus.TraceLevel, - seelog.DebugLvl: logrus.DebugLevel, - seelog.InfoLvl: logrus.InfoLevel, - seelog.WarnLvl: logrus.WarnLevel, - seelog.ErrorLvl: logrus.ErrorLevel, - seelog.CriticalLvl: logrus.FatalLevel, +var ddLogToLogrusLevel = map[ddlog.LogLevel]logrus.Level{ + ddlog.TraceLvl: logrus.TraceLevel, + ddlog.DebugLvl: logrus.DebugLevel, + ddlog.InfoLvl: logrus.InfoLevel, + ddlog.WarnLvl: logrus.WarnLevel, + ddlog.ErrorLvl: logrus.ErrorLevel, + ddlog.CriticalLvl: logrus.FatalLevel, } // GetLogrusLevel returns logrus log level from log.GetLogLevel() diff --git a/comp/networkpath/npcollector/npcollectorimpl/npcollector_test.go b/comp/networkpath/npcollector/npcollectorimpl/npcollector_test.go index 6b6416e0d47ae..a5bdcd86f7e4f 100644 --- a/comp/networkpath/npcollector/npcollectorimpl/npcollector_test.go +++ b/comp/networkpath/npcollector/npcollectorimpl/npcollector_test.go @@ -19,7 +19,6 @@ import ( "time" model "github.com/DataDog/agent-payload/v5/process" - "github.com/cihub/seelog" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" @@ -46,7 +45,7 @@ func Test_NpCollector_StartAndStop(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := utillog.LoggerFromWriterWithMinLevelAndFormat(w, utillog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") assert.Nil(t, err) utillog.SetupLogger(l, "debug") @@ -510,7 +509,7 @@ func Test_npCollectorImpl_ScheduleConns(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := utillog.LoggerFromWriterWithMinLevelAndFormat(w, utillog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") assert.Nil(t, err) utillog.SetupLogger(l, "debug") @@ -564,7 +563,7 @@ func Test_npCollectorImpl_stopWorker(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := utillog.LoggerFromWriterWithMinLevelAndFormat(w, utillog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") assert.Nil(t, err) utillog.SetupLogger(l, "debug") @@ -759,7 +758,7 @@ func Benchmark_npCollectorImpl_ScheduleConns(b *testing.B) { assert.Nil(b, err) defer file.Close() w := bufio.NewWriter(file) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg\n") + l, err := utillog.LoggerFromWriterWithMinLevelAndFormat(w, utillog.DebugLvl, "[%LEVEL] %FuncShort: %Msg\n") assert.Nil(b, err) utillog.SetupLogger(l, "debug") defer w.Flush() diff --git a/comp/networkpath/npcollector/npcollectorimpl/pathteststore/pathteststore_test.go b/comp/networkpath/npcollector/npcollectorimpl/pathteststore/pathteststore_test.go index a758c0664fa14..bf809bd31d9b6 100644 --- a/comp/networkpath/npcollector/npcollectorimpl/pathteststore/pathteststore_test.go +++ b/comp/networkpath/npcollector/npcollectorimpl/pathteststore/pathteststore_test.go @@ -12,7 +12,6 @@ import ( "testing" "time" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" logmock "github.com/DataDog/datadog-agent/comp/core/log/mock" @@ -87,7 +86,7 @@ func Test_pathtestStore_add(t *testing.T) { t.Run(tc.name, func(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := utillog.LoggerFromWriterWithMinLevelAndFormat(w, utillog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") assert.Nil(t, err) utillog.SetupLogger(l, "debug") diff --git a/comp/remote-config/rcclient/rcclientimpl/rcclient_test.go b/comp/remote-config/rcclient/rcclientimpl/rcclient_test.go index cf5a3cb093139..f6974273d3325 100644 --- a/comp/remote-config/rcclient/rcclientimpl/rcclient_test.go +++ b/comp/remote-config/rcclient/rcclientimpl/rcclient_test.go @@ -25,7 +25,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/fxutil" pkglog "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" "go.uber.org/fx" ) @@ -96,7 +95,7 @@ func TestRCClientCreate(t *testing.T) { } func TestAgentConfigCallback(t *testing.T) { - pkglog.SetupLogger(seelog.Default, "info") + pkglog.SetupLogger(pkglog.Default(), "info") cfg := configmock.New(t) rc := fxutil.Test[rcclient.Component](t, diff --git a/comp/trace/config/config_test.go b/comp/trace/config/config_test.go index f428a7da51bc4..9c9d45eb284ac 100644 --- a/comp/trace/config/config_test.go +++ b/comp/trace/config/config_test.go @@ -23,7 +23,6 @@ import ( "text/template" "time" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.uber.org/fx" @@ -136,9 +135,8 @@ func TestSplitTagRegex(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - logger, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %Msg") + logger, err := log.LoggerFromWriterWithMinLevelAndFormat(w, log.DebugLvl, "[%LEVEL] %Msg") assert.Nil(t, err) - seelog.ReplaceLogger(logger) //nolint:errcheck log.SetupLogger(logger, "debug") assert.Nil(t, splitTagRegex(bad.tag)) w.Flush() diff --git a/pkg/clusteragent/api/leader_forwarder.go b/pkg/clusteragent/api/leader_forwarder.go index a5989f62d112b..94d054d6508b5 100644 --- a/pkg/clusteragent/api/leader_forwarder.go +++ b/pkg/clusteragent/api/leader_forwarder.go @@ -18,8 +18,7 @@ import ( "sync" "time" - "github.com/cihub/seelog" - + "github.com/DataDog/datadog-agent/pkg/util/log" pkglogsetup "github.com/DataDog/datadog-agent/pkg/util/log/setup" ) @@ -43,7 +42,7 @@ type LeaderForwarder struct { // NewLeaderForwarder initializes a new LeaderForwarder instance and is used for test purposes func NewLeaderForwarder(apiPort, maxConnections int) *LeaderForwarder { // Use a stack depth of 4 on top of the default one to get a relevant filename in the stdlib - logWriter, _ := pkglogsetup.NewLogWriter(4, seelog.DebugLvl) + logWriter, _ := pkglogsetup.NewLogWriter(4, log.DebugLvl) return &LeaderForwarder{ apiPort: strconv.Itoa(apiPort), transport: &http.Transport{ diff --git a/pkg/collector/corechecks/ebpf/ebpf.go b/pkg/collector/corechecks/ebpf/ebpf.go index 934cb5bab4f12..1638f60cef9d4 100644 --- a/pkg/collector/corechecks/ebpf/ebpf.go +++ b/pkg/collector/corechecks/ebpf/ebpf.go @@ -13,7 +13,6 @@ import ( "net/http" "strings" - "github.com/cihub/seelog" "gopkg.in/yaml.v2" sysprobeclient "github.com/DataDog/datadog-agent/cmd/system-probe/api/client" @@ -152,7 +151,7 @@ func (m *EBPFCheck) Run() error { "module:" + progInfo.Module, } var debuglogs []string - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { debuglogs = []string{"program=" + progInfo.Name, "type=" + progInfo.Type.String()} } @@ -166,7 +165,7 @@ func (m *EBPFCheck) Run() error { continue } sender.Gauge("ebpf.programs."+k, v, "", tags) - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { debuglogs = append(debuglogs, fmt.Sprintf("%s=%.0f", k, v)) } } @@ -184,12 +183,12 @@ func (m *EBPFCheck) Run() error { continue } sender.MonotonicCountWithFlushFirstValue("ebpf.programs."+k, v, "", tags, true) - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { debuglogs = append(debuglogs, fmt.Sprintf("%s=%.0f", k, v)) } } - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("ebpf check: %s", strings.Join(debuglogs, " ")) } } diff --git a/pkg/collector/corechecks/ebpf/probe/ebpfcheck/probe.go b/pkg/collector/corechecks/ebpf/probe/ebpfcheck/probe.go index a25d5d49db2da..d09baa968c0a5 100644 --- a/pkg/collector/corechecks/ebpf/probe/ebpfcheck/probe.go +++ b/pkg/collector/corechecks/ebpf/probe/ebpfcheck/probe.go @@ -20,7 +20,6 @@ import ( "unsafe" manager "github.com/DataDog/ebpf-manager" - "github.com/cihub/seelog" "github.com/cilium/ebpf" "github.com/cilium/ebpf/asm" "github.com/cilium/ebpf/features" @@ -318,7 +317,7 @@ func (k *Probe) getProgramStats(stats *model.EBPFStats) error { stats.Programs = append(stats.Programs, ps) } - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("found %d programs", len(stats.Programs)) for _, ps := range stats.Programs { log.Tracef("name=%s prog_id=%d type=%s", ps.Name, ps.ID, ps.Type.String()) diff --git a/pkg/collector/corechecks/snmp/internal/checkconfig/config.go b/pkg/collector/corechecks/snmp/internal/checkconfig/config.go index 1dc318f384825..9084d26e664e7 100644 --- a/pkg/collector/corechecks/snmp/internal/checkconfig/config.go +++ b/pkg/collector/corechecks/snmp/internal/checkconfig/config.go @@ -17,7 +17,6 @@ import ( "strings" "time" - "github.com/cihub/seelog" "gopkg.in/yaml.v2" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" @@ -227,7 +226,7 @@ func (c *CheckConfig) SetProfile(profile string) error { c.ProfileDef = &definition c.Profile = profile - if log.ShouldLog(seelog.DebugLvl) { + if log.ShouldLog(log.DebugLvl) { profileDefJSON, _ := json.Marshal(definition) log.Debugf("Profile content `%s`: %s", profile, string(profileDefJSON)) } diff --git a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go index 8737e5845378f..f63d0a4c33791 100644 --- a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go +++ b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go @@ -15,7 +15,6 @@ import ( "strings" "time" - "github.com/cihub/seelog" "go.uber.org/atomic" "github.com/DataDog/datadog-agent/pkg/collector/externalhost" @@ -284,7 +283,7 @@ func (d *DeviceCheck) getValuesAndTags() (bool, []string, *valuestore.ResultValu checkErrors = append(checkErrors, fmt.Sprintf("check device reachable: failed: %s", err)) } else { deviceReachable = true - if log.ShouldLog(seelog.DebugLvl) { + if log.ShouldLog(log.DebugLvl) { log.Debugf("check device reachable: success: %v", gosnmplib.PacketAsString(getNextValue)) } } @@ -298,7 +297,7 @@ func (d *DeviceCheck) getValuesAndTags() (bool, []string, *valuestore.ResultValu tags = append(tags, d.config.ProfileTags...) valuesStore, err := fetch.Fetch(d.session, d.config) - if log.ShouldLog(seelog.DebugLvl) { + if log.ShouldLog(log.DebugLvl) { log.Debugf("fetched values: %v", valuestore.ResultValueStoreAsString(valuesStore)) } @@ -352,7 +351,7 @@ func (d *DeviceCheck) detectAvailableMetrics() ([]profiledefinition.MetricsConfi log.Debugf("fetched OIDs: %v", fetchedOIDs) root := common.BuildOidTrie(fetchedOIDs) - if log.ShouldLog(seelog.DebugLvl) { + if log.ShouldLog(log.DebugLvl) { root.DebugPrint() } diff --git a/pkg/collector/corechecks/snmp/internal/fetch/fetch_column.go b/pkg/collector/corechecks/snmp/internal/fetch/fetch_column.go index 9d06254d86156..2ebfce8c4acd5 100644 --- a/pkg/collector/corechecks/snmp/internal/fetch/fetch_column.go +++ b/pkg/collector/corechecks/snmp/internal/fetch/fetch_column.go @@ -9,7 +9,6 @@ import ( "fmt" "sort" - "github.com/cihub/seelog" "github.com/gosnmp/gosnmp" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -105,7 +104,7 @@ func getResults(sess session.Session, requestOids []string, bulkMaxRepetitions u return nil, fmt.Errorf("fetch column: failed getting oids `%v` using GetNext: %s", requestOids, err) } results = getNextResults - if log.ShouldLog(seelog.DebugLvl) { + if log.ShouldLog(log.DebugLvl) { log.Debugf("fetch column: GetNext results: %v", gosnmplib.PacketAsString(results)) } } else { @@ -115,7 +114,7 @@ func getResults(sess session.Session, requestOids []string, bulkMaxRepetitions u return nil, fmt.Errorf("fetch column: failed getting oids `%v` using GetBulk: %s", requestOids, err) } results = getBulkResults - if log.ShouldLog(seelog.DebugLvl) { + if log.ShouldLog(log.DebugLvl) { log.Debugf("fetch column: GetBulk results: %v", gosnmplib.PacketAsString(results)) } } diff --git a/pkg/collector/corechecks/snmp/internal/fetch/fetch_scalar.go b/pkg/collector/corechecks/snmp/internal/fetch/fetch_scalar.go index 0fc948b17a061..d7b219ad72c53 100644 --- a/pkg/collector/corechecks/snmp/internal/fetch/fetch_scalar.go +++ b/pkg/collector/corechecks/snmp/internal/fetch/fetch_scalar.go @@ -10,7 +10,6 @@ import ( "sort" "strings" - "github.com/cihub/seelog" "github.com/gosnmp/gosnmp" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -127,7 +126,7 @@ func doDoFetchScalarOids(session session.Session, oids []string) (*gosnmp.SnmpPa log.Debugf("fetch scalar: error getting oids `%v`: %v", oids, err) return nil, fmt.Errorf("fetch scalar: error getting oids `%v`: %v", oids, err) } - if log.ShouldLog(seelog.DebugLvl) { + if log.ShouldLog(log.DebugLvl) { log.Debugf("fetch scalar: results: %s", gosnmplib.PacketAsString(results)) } return results, nil diff --git a/pkg/collector/corechecks/snmp/internal/fetch/fetch_test.go b/pkg/collector/corechecks/snmp/internal/fetch/fetch_test.go index b615d40681dc0..c0bf331b2f7e5 100644 --- a/pkg/collector/corechecks/snmp/internal/fetch/fetch_test.go +++ b/pkg/collector/corechecks/snmp/internal/fetch/fetch_test.go @@ -12,7 +12,6 @@ import ( "strings" "testing" - "github.com/cihub/seelog" "github.com/gosnmp/gosnmp" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -775,7 +774,7 @@ func Test_fetchValues_errors(t *testing.T) { func Test_fetchColumnOids_alreadyProcessed(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := log.LoggerFromWriterWithMinLevelAndFormat(w, log.DebugLvl, "[%LEVEL] %FuncShort: %Msg") require.NoError(t, err) log.SetupLogger(l, "debug") diff --git a/pkg/collector/corechecks/snmp/internal/profile/profile_resolver_test.go b/pkg/collector/corechecks/snmp/internal/profile/profile_resolver_test.go index d0e03a880b928..1b744b66f38f4 100644 --- a/pkg/collector/corechecks/snmp/internal/profile/profile_resolver_test.go +++ b/pkg/collector/corechecks/snmp/internal/profile/profile_resolver_test.go @@ -13,7 +13,6 @@ import ( "strings" "testing" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -147,7 +146,7 @@ func Test_resolveProfiles(t *testing.T) { t.Run(tt.name, func(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := log.LoggerFromWriterWithMinLevelAndFormat(w, log.DebugLvl, "[%LEVEL] %FuncShort: %Msg") assert.Nil(t, err) log.SetupLogger(l, "debug") diff --git a/pkg/collector/corechecks/snmp/internal/profile/profile_yaml_test.go b/pkg/collector/corechecks/snmp/internal/profile/profile_yaml_test.go index 81d7513ab9fa7..b617764b44cb2 100644 --- a/pkg/collector/corechecks/snmp/internal/profile/profile_yaml_test.go +++ b/pkg/collector/corechecks/snmp/internal/profile/profile_yaml_test.go @@ -13,13 +13,11 @@ import ( "strings" "testing" - "github.com/cihub/seelog" assert "github.com/stretchr/testify/require" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" - "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/networkdevice/profile/profiledefinition" + "github.com/DataDog/datadog-agent/pkg/util/log" ) func getMetricFromProfile(p profiledefinition.ProfileDefinition, metricName string) *profiledefinition.MetricsConfig { @@ -124,7 +122,7 @@ func Test_loadYamlProfiles_invalidDir(t *testing.T) { func Test_loadYamlProfiles_invalidExtendProfile(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := log.LoggerFromWriterWithMinLevelAndFormat(w, log.DebugLvl, "[%LEVEL] %FuncShort: %Msg") assert.Nil(t, err) log.SetupLogger(l, "debug") @@ -145,7 +143,7 @@ func Test_loadYamlProfiles_invalidExtendProfile(t *testing.T) { func Test_loadYamlProfiles_userAndDefaultProfileFolderDoesNotExist(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := log.LoggerFromWriterWithMinLevelAndFormat(w, log.DebugLvl, "[%LEVEL] %FuncShort: %Msg") assert.Nil(t, err) log.SetupLogger(l, "debug") @@ -168,7 +166,7 @@ func Test_loadYamlProfiles_validAndInvalidProfiles(t *testing.T) { // Valid profiles should be returned even if some profiles are invalid var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := log.LoggerFromWriterWithMinLevelAndFormat(w, log.DebugLvl, "[%LEVEL] %FuncShort: %Msg") assert.Nil(t, err) log.SetupLogger(l, "debug") diff --git a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go index 92b745060bb59..2cff0364b107f 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go @@ -12,7 +12,6 @@ import ( "testing" "time" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" @@ -31,7 +30,7 @@ import ( func Test_metricSender_reportNetworkDeviceMetadata_withoutInterfaces(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.TraceLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := log.LoggerFromWriterWithMinLevelAndFormat(w, log.TraceLvl, "[%LEVEL] %FuncShort: %Msg") assert.Nil(t, err) log.SetupLogger(l, "debug") diff --git a/pkg/collector/corechecks/snmp/internal/report/report_metrics_test.go b/pkg/collector/corechecks/snmp/internal/report/report_metrics_test.go index bf5ea9de7a72e..8d11ffc5e08a4 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_metrics_test.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_metrics_test.go @@ -11,7 +11,6 @@ import ( "strings" "testing" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" @@ -316,7 +315,7 @@ func TestSendMetric(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := log.LoggerFromWriterWithMinLevelAndFormat(w, log.DebugLvl, "[%LEVEL] %FuncShort: %Msg") assert.Nil(t, err) log.SetupLogger(l, "debug") @@ -453,7 +452,7 @@ func Test_metricSender_reportMetrics(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := log.LoggerFromWriterWithMinLevelAndFormat(w, log.DebugLvl, "[%LEVEL] %FuncShort: %Msg") assert.Nil(t, err) log.SetupLogger(l, "debug") @@ -640,7 +639,7 @@ func Test_metricSender_getCheckInstanceMetricTags(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := log.LoggerFromWriterWithMinLevelAndFormat(w, log.DebugLvl, "[%LEVEL] %FuncShort: %Msg") assert.Nil(t, err) log.SetupLogger(l, "debug") diff --git a/pkg/collector/corechecks/snmp/internal/report/report_utils_test.go b/pkg/collector/corechecks/snmp/internal/report/report_utils_test.go index de9fefb130581..6b530f3f7d763 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_utils_test.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_utils_test.go @@ -12,7 +12,6 @@ import ( "strings" "testing" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" "gopkg.in/yaml.v2" @@ -772,7 +771,7 @@ metric_tags: var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := log.LoggerFromWriterWithMinLevelAndFormat(w, log.DebugLvl, "[%LEVEL] %FuncShort: %Msg") assert.Nil(t, err) log.SetupLogger(l, "debug") @@ -1091,7 +1090,7 @@ func Test_getContantMetricValues(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := log.LoggerFromWriterWithMinLevelAndFormat(w, log.DebugLvl, "[%LEVEL] %FuncShort: %Msg") assert.Nil(t, err) log.SetupLogger(l, "debug") diff --git a/pkg/collector/corechecks/snmp/internal/session/session.go b/pkg/collector/corechecks/snmp/internal/session/session.go index c39518d0a3f0a..1d0995c1ed3c1 100644 --- a/pkg/collector/corechecks/snmp/internal/session/session.go +++ b/pkg/collector/corechecks/snmp/internal/session/session.go @@ -11,7 +11,6 @@ import ( "strings" "time" - "github.com/cihub/seelog" "github.com/gosnmp/gosnmp" "github.com/DataDog/datadog-agent/pkg/snmp/gosnmplib" @@ -137,7 +136,7 @@ func NewGosnmpSession(config *checkconfig.CheckConfig) (Session, error) { if err != nil { log.Warnf("failed to get logger: %s", err) } else { - if lvl == seelog.TraceLvl { + if lvl == log.TraceLvl { TraceLevelLogWriter := gosnmplib.TraceLevelLogWriter{} s.gosnmpInst.Logger = gosnmp.NewLogger(stdlog.New(&TraceLevelLogWriter, "", stdlog.Lshortfile)) } diff --git a/pkg/collector/corechecks/snmp/internal/session/session_test.go b/pkg/collector/corechecks/snmp/internal/session/session_test.go index 1042bc7b5de28..3986365f01e59 100644 --- a/pkg/collector/corechecks/snmp/internal/session/session_test.go +++ b/pkg/collector/corechecks/snmp/internal/session/session_test.go @@ -14,7 +14,6 @@ import ( "testing" "time" - "github.com/cihub/seelog" "github.com/gosnmp/gosnmp" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -289,7 +288,7 @@ func Test_snmpSession_traceLog_disabled(t *testing.T) { } var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.InfoLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := log.LoggerFromWriterWithMinLevelAndFormat(w, log.InfoLvl, "[%LEVEL] %FuncShort: %Msg") assert.Nil(t, err) log.SetupLogger(l, "info") @@ -306,7 +305,7 @@ func Test_snmpSession_traceLog_enabled(t *testing.T) { } var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.TraceLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := log.LoggerFromWriterWithMinLevelAndFormat(w, log.TraceLvl, "[%LEVEL] %FuncShort: %Msg") assert.Nil(t, err) log.SetupLogger(l, "trace") diff --git a/pkg/collector/python/memory.go b/pkg/collector/python/memory.go index 38060ef37b462..3d77d1bdd31bb 100644 --- a/pkg/collector/python/memory.go +++ b/pkg/collector/python/memory.go @@ -14,8 +14,6 @@ import ( "sync" "unsafe" - "github.com/cihub/seelog" - pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -76,7 +74,7 @@ func MemoryTracker(ptr unsafe.Pointer, sz C.size_t, op C.rtloader_mem_ops_t) { // but from profiling, even passing these vars through as arguments allocates to the heap. // This is an optimization to avoid even evaluating the `Tracef` call if the trace log // level is not enabled. - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("Memory Tracker - ptr: %v, sz: %v, op: %v", ptr, sz, op) } switch op { @@ -94,7 +92,7 @@ func MemoryTracker(ptr unsafe.Pointer, sz C.size_t, op C.rtloader_mem_ops_t) { if !ok { log.Debugf("untracked memory was attempted to be freed - set trace level for details") lvl, err := log.GetLogLevel() - if err == nil && lvl == seelog.TraceLvl { + if err == nil && lvl == log.TraceLvl { stack := string(debug.Stack()) log.Tracef("Memory Tracker - stacktrace: \n%s", stack) } diff --git a/pkg/ebpf/ebpftest/fail_log.go b/pkg/ebpf/ebpftest/fail_log.go index ccc8df5e112b4..15c98ef098188 100644 --- a/pkg/ebpf/ebpftest/fail_log.go +++ b/pkg/ebpf/ebpftest/fail_log.go @@ -10,6 +10,7 @@ import ( "strings" "testing" + //nolint:depguard // creating a custom logger for testing "github.com/cihub/seelog" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -21,7 +22,7 @@ func FailLogLevel(t testing.TB, level string) { inner := &failureTestLogger{TB: t} t.Cleanup(func() { t.Helper() - log.SetupLogger(seelog.Default, "off") + log.SetupLogger(log.Default(), "off") inner.outputIfFailed() }) logger, err := seelog.LoggerFromCustomReceiver(inner) diff --git a/pkg/ebpf/ebpftest/log.go b/pkg/ebpf/ebpftest/log.go index a13f7e14d9d34..06b1fb11fb707 100644 --- a/pkg/ebpf/ebpftest/log.go +++ b/pkg/ebpf/ebpftest/log.go @@ -9,6 +9,7 @@ import ( "strings" "testing" + //nolint:depguard // creating a custom logger for testing "github.com/cihub/seelog" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -17,7 +18,7 @@ import ( // LogLevel sets the logger level for this test only func LogLevel(t testing.TB, level string) { t.Cleanup(func() { - log.SetupLogger(seelog.Default, "off") + log.SetupLogger(log.Default(), "off") }) logger, err := seelog.LoggerFromCustomReceiver(testLogger{t}) if err != nil { diff --git a/pkg/ebpf/map_cleaner_test.go b/pkg/ebpf/map_cleaner_test.go index 635c882a36bed..a9dfdbd1cb32b 100644 --- a/pkg/ebpf/map_cleaner_test.go +++ b/pkg/ebpf/map_cleaner_test.go @@ -12,7 +12,6 @@ import ( "testing" "time" - "github.com/cihub/seelog" "github.com/cilium/ebpf" "github.com/cilium/ebpf/rlimit" "github.com/stretchr/testify/assert" @@ -26,7 +25,7 @@ func TestMain(m *testing.M) { if logLevel == "" { logLevel = "warn" } - log.SetupLogger(seelog.Default, logLevel) + log.SetupLogger(log.Default(), logLevel) os.Exit(m.Run()) } diff --git a/pkg/ebpf/verifier/stats_test.go b/pkg/ebpf/verifier/stats_test.go index 9af6a7c3f4cc2..fca00b8840f16 100644 --- a/pkg/ebpf/verifier/stats_test.go +++ b/pkg/ebpf/verifier/stats_test.go @@ -19,7 +19,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/kernel" "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/cihub/seelog" "github.com/cilium/ebpf" "github.com/cilium/ebpf/rlimit" "github.com/stretchr/testify/assert" @@ -37,7 +36,7 @@ func TestMain(m *testing.M) { if logLevel == "" { logLevel = "warn" } - log.SetupLogger(seelog.Default, logLevel) + log.SetupLogger(log.Default(), logLevel) os.Exit(m.Run()) } diff --git a/pkg/gohai/cpu/util_linux.go b/pkg/gohai/cpu/util_linux.go index 129801f8bdaf2..fc82760141e56 100644 --- a/pkg/gohai/cpu/util_linux.go +++ b/pkg/gohai/cpu/util_linux.go @@ -12,7 +12,7 @@ import ( "strconv" "strings" - log "github.com/cihub/seelog" + "github.com/DataDog/datadog-agent/pkg/util/log" ) var prefix = "" // only used for testing diff --git a/pkg/gohai/filesystem/filesystem_nix.go b/pkg/gohai/filesystem/filesystem_nix.go index 27f5094d1e282..f4171904f60bd 100644 --- a/pkg/gohai/filesystem/filesystem_nix.go +++ b/pkg/gohai/filesystem/filesystem_nix.go @@ -10,10 +10,10 @@ import ( "fmt" "strings" + "github.com/moby/sys/mountinfo" "golang.org/x/sys/unix" - log "github.com/cihub/seelog" - "github.com/moby/sys/mountinfo" + "github.com/DataDog/datadog-agent/pkg/util/log" ) type fsInfoGetter func(*mountinfo.Info) (uint64, error) diff --git a/pkg/gohai/go.mod b/pkg/gohai/go.mod index c0363c2bcc074..fb749217ba632 100644 --- a/pkg/gohai/go.mod +++ b/pkg/gohai/go.mod @@ -6,7 +6,6 @@ go 1.23.0 require ( github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 - github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 github.com/moby/sys/mountinfo v0.7.2 github.com/shirou/gopsutil/v3 v3.24.5 github.com/stretchr/testify v1.10.0 @@ -16,6 +15,7 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect + github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect diff --git a/pkg/gohai/memory/memory_linux.go b/pkg/gohai/memory/memory_linux.go index 356d9dee67d9e..822a082fc4aee 100644 --- a/pkg/gohai/memory/memory_linux.go +++ b/pkg/gohai/memory/memory_linux.go @@ -14,7 +14,7 @@ import ( "strings" "github.com/DataDog/datadog-agent/pkg/gohai/utils" - log "github.com/cihub/seelog" + "github.com/DataDog/datadog-agent/pkg/util/log" ) func parseMemoryInfo(reader io.Reader) (totalBytes utils.Value[uint64], swapTotalKb utils.Value[uint64], err error) { diff --git a/pkg/gohai/platform/platform_darwin.go b/pkg/gohai/platform/platform_darwin.go index e1fb7ed154923..a28bdf3ebead5 100644 --- a/pkg/gohai/platform/platform_darwin.go +++ b/pkg/gohai/platform/platform_darwin.go @@ -9,9 +9,10 @@ import ( "errors" "runtime" - "github.com/DataDog/datadog-agent/pkg/gohai/utils" - log "github.com/cihub/seelog" "golang.org/x/sys/unix" + + "github.com/DataDog/datadog-agent/pkg/gohai/utils" + "github.com/DataDog/datadog-agent/pkg/util/log" ) // getUnameProcessor is similar to `uname -p` diff --git a/pkg/gohai/processes/gops/process_info.go b/pkg/gohai/processes/gops/process_info.go index 8f21f07ba5dc8..9f830d935ea47 100644 --- a/pkg/gohai/processes/gops/process_info.go +++ b/pkg/gohai/processes/gops/process_info.go @@ -12,12 +12,10 @@ import ( "fmt" "runtime" - // 3p - log "github.com/cihub/seelog" - - // project "github.com/shirou/gopsutil/v3/mem" "github.com/shirou/gopsutil/v3/process" + + "github.com/DataDog/datadog-agent/pkg/util/log" ) // ProcessInfo contains information about a single process diff --git a/pkg/logs/tailers/windowsevent/tailer_test.go b/pkg/logs/tailers/windowsevent/tailer_test.go index 5c8c635314edb..8fb0c2311d49a 100644 --- a/pkg/logs/tailers/windowsevent/tailer_test.go +++ b/pkg/logs/tailers/windowsevent/tailer_test.go @@ -13,8 +13,6 @@ import ( "testing" "time" - "github.com/cihub/seelog" - pkglog "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/cenkalti/backoff" @@ -61,7 +59,7 @@ func TestReadEventsSuite(t *testing.T) { func (s *ReadEventsSuite) SetupSuite() { // Enable logger if false { - pkglog.SetupLogger(seelog.Default, "debug") + pkglog.SetupLogger(pkglog.Default(), "debug") } s.ti = eventlog_test.GetAPITesterByName(s.testAPI, s.T()) diff --git a/pkg/network/encoding/marshal/usm.go b/pkg/network/encoding/marshal/usm.go index bcae7a12ecc12..437a0ba4b0d64 100644 --- a/pkg/network/encoding/marshal/usm.go +++ b/pkg/network/encoding/marshal/usm.go @@ -9,8 +9,6 @@ import ( "fmt" "sync" - "github.com/cihub/seelog" - pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/network" "github.com/DataDog/datadog-agent/pkg/network/protocols/telemetry" @@ -192,7 +190,7 @@ func (bc *USMConnectionIndex[K, V]) Close() { var total int for key, value := range bc.data { if !value.claimed { - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("key %+v unclaimed", key) } total += len(value.Data) diff --git a/pkg/network/go/bininspect/symbols.go b/pkg/network/go/bininspect/symbols.go index 6b5f135179fe1..8549fde56f406 100644 --- a/pkg/network/go/bininspect/symbols.go +++ b/pkg/network/go/bininspect/symbols.go @@ -14,8 +14,6 @@ import ( "io" "math" - "github.com/cihub/seelog" - "github.com/DataDog/datadog-agent/pkg/util/common" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/safeelf" @@ -222,7 +220,7 @@ func getSymbols(f *safeelf.File, typ safeelf.SectionType, filter symbolFilter) ( // returned. func GetAllSymbolsByName(elfFile *safeelf.File, filter symbolFilter) (map[string]safeelf.Symbol, error) { regularSymbols, regularSymbolsErr := getSymbols(elfFile, safeelf.SHT_SYMTAB, filter) - if regularSymbolsErr != nil && log.ShouldLog(seelog.TraceLvl) { + if regularSymbolsErr != nil && log.ShouldLog(log.TraceLvl) { log.Tracef("Failed getting regular symbols of elf file: %s", regularSymbolsErr) } @@ -231,7 +229,7 @@ func GetAllSymbolsByName(elfFile *safeelf.File, filter symbolFilter) (map[string numWanted := filter.getNumWanted() if len(regularSymbols) != numWanted { dynamicSymbols, dynamicSymbolsErr = getSymbols(elfFile, safeelf.SHT_DYNSYM, filter) - if dynamicSymbolsErr != nil && log.ShouldLog(seelog.TraceLvl) { + if dynamicSymbolsErr != nil && log.ShouldLog(log.TraceLvl) { log.Tracef("Failed getting dynamic symbols of elf file: %s", dynamicSymbolsErr) } } diff --git a/pkg/network/netlink/conntrack_integration_test.go b/pkg/network/netlink/conntrack_integration_test.go index 2788153c3f325..46049481e9945 100644 --- a/pkg/network/netlink/conntrack_integration_test.go +++ b/pkg/network/netlink/conntrack_integration_test.go @@ -13,7 +13,6 @@ import ( "os" "testing" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -31,7 +30,7 @@ func TestMain(m *testing.M) { if logLevel == "" { logLevel = "warn" } - log.SetupLogger(seelog.Default, logLevel) + log.SetupLogger(log.Default(), logLevel) os.Exit(m.Run()) } diff --git a/pkg/network/netlink/conntracker.go b/pkg/network/netlink/conntracker.go index 901e763bf2e4b..16e9ff3a4f8c6 100644 --- a/pkg/network/netlink/conntracker.go +++ b/pkg/network/netlink/conntracker.go @@ -20,7 +20,6 @@ import ( "github.com/syndtr/gocapability/capability" "golang.org/x/sys/unix" - "github.com/cihub/seelog" "github.com/hashicorp/golang-lru/v2/simplelru" telemetryComp "github.com/DataDog/datadog-agent/comp/core/telemetry" @@ -411,7 +410,7 @@ func (cc *conntrackCache) Add(c Con, orphan bool) (evicts int) { } } - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("%s", c) } @@ -433,7 +432,7 @@ func (cc *conntrackCache) removeOrphans(now time.Time) (removed int64) { cc.cache.Remove(o.key) removed++ - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("removed orphan %+v", o.key) } } diff --git a/pkg/network/netlink/consumer.go b/pkg/network/netlink/consumer.go index ff3d2950e809d..c912db22715e5 100644 --- a/pkg/network/netlink/consumer.go +++ b/pkg/network/netlink/consumer.go @@ -13,7 +13,6 @@ import ( "strings" "syscall" - "github.com/cihub/seelog" "github.com/mdlayher/netlink" "github.com/pkg/errors" "github.com/vishvananda/netns" @@ -205,7 +204,7 @@ func (c *Consumer) isPeerNS(conn *netlink.Conn, ns netns.NsHandle) bool { return false } - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("netlink reply: %v", msgs) } diff --git a/pkg/network/port_test.go b/pkg/network/port_test.go index 995a4e8ef0a2f..067417ae79d48 100644 --- a/pkg/network/port_test.go +++ b/pkg/network/port_test.go @@ -17,7 +17,6 @@ import ( "strconv" "testing" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/vishvananda/netns" @@ -32,7 +31,7 @@ func TestMain(m *testing.M) { if logLevel == "" { logLevel = "warn" } - log.SetupLogger(seelog.Default, logLevel) + log.SetupLogger(log.Default(), logLevel) os.Exit(m.Run()) } diff --git a/pkg/network/protocols/events/consumer.go b/pkg/network/protocols/events/consumer.go index dea561ee8297f..eb00d29678b65 100644 --- a/pkg/network/protocols/events/consumer.go +++ b/pkg/network/protocols/events/consumer.go @@ -13,8 +13,6 @@ import ( "sync" "unsafe" - "github.com/cihub/seelog" - manager "github.com/DataDog/ebpf-manager" ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" @@ -169,7 +167,7 @@ func (c *Consumer[V]) Start() { c.batchReader.ReadAll(func(_ int, b *batch) { c.process(b, true) }) - if log.ShouldLog(seelog.DebugLvl) { + if log.ShouldLog(log.DebugLvl) { log.Debugf("usm events summary: name=%q %s", c.proto, c.metricGroup.Summary()) } close(done) diff --git a/pkg/network/protocols/http/telemetry.go b/pkg/network/protocols/http/telemetry.go index 0dddb2591fee9..2d73136b7417b 100644 --- a/pkg/network/protocols/http/telemetry.go +++ b/pkg/network/protocols/http/telemetry.go @@ -10,8 +10,6 @@ package http import ( "fmt" - "github.com/cihub/seelog" - libtelemetry "github.com/DataDog/datadog-agent/pkg/network/protocols/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -99,7 +97,7 @@ func (t *Telemetry) Count(tx Transaction) { // Log logs the telemetry. func (t *Telemetry) Log() { - if log.ShouldLog(seelog.DebugLvl) { + if log.ShouldLog(log.DebugLvl) { log.Debugf("%s stats summary: %s", t.protocol, t.metricGroup.Summary()) } } diff --git a/pkg/network/protocols/http2/telemetry.go b/pkg/network/protocols/http2/telemetry.go index e80b5efd1a898..6e74ad3e7ba07 100644 --- a/pkg/network/protocols/http2/telemetry.go +++ b/pkg/network/protocols/http2/telemetry.go @@ -10,8 +10,6 @@ package http2 import ( "strconv" - "github.com/cihub/seelog" - libtelemetry "github.com/DataDog/datadog-agent/pkg/network/protocols/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -91,7 +89,7 @@ func (t *kernelTelemetry) update(tel *HTTP2Telemetry, isTLS bool) { } func (t *kernelTelemetry) Log() { - if log.ShouldLog(seelog.DebugLvl) { + if log.ShouldLog(log.DebugLvl) { log.Debugf("http2 kernel telemetry summary: %s", t.metricGroup.Summary()) } } diff --git a/pkg/network/protocols/kafka/telemetry.go b/pkg/network/protocols/kafka/telemetry.go index 9905756dd880e..cb91b714f0984 100644 --- a/pkg/network/protocols/kafka/telemetry.go +++ b/pkg/network/protocols/kafka/telemetry.go @@ -8,8 +8,6 @@ package kafka import ( - "github.com/cihub/seelog" - libtelemetry "github.com/DataDog/datadog-agent/pkg/network/protocols/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -51,7 +49,7 @@ func (t *Telemetry) Count(tx *KafkaTransaction) { // Log logs the kafka stats summary func (t *Telemetry) Log() { - if log.ShouldLog(seelog.DebugLvl) { + if log.ShouldLog(log.DebugLvl) { log.Debugf("kafka stats summary: %s", t.metricGroup.Summary()) } } diff --git a/pkg/network/protocols/postgres/telemetry.go b/pkg/network/protocols/postgres/telemetry.go index d8cb08725a80e..3c26d92ada9c2 100644 --- a/pkg/network/protocols/postgres/telemetry.go +++ b/pkg/network/protocols/postgres/telemetry.go @@ -11,8 +11,6 @@ import ( "fmt" "strconv" - "github.com/cihub/seelog" - "github.com/DataDog/datadog-agent/pkg/network/config" "github.com/DataDog/datadog-agent/pkg/network/protocols/postgres/ebpf" libtelemetry "github.com/DataDog/datadog-agent/pkg/network/protocols/telemetry" @@ -175,7 +173,7 @@ func (t *Telemetry) Count(tx *ebpf.EbpfEvent, eventWrapper *EventWrapper) { // Log logs the postgres stats summary func (t *Telemetry) Log() { - if log.ShouldLog(seelog.DebugLvl) { + if log.ShouldLog(log.DebugLvl) { log.Debugf("postgres stats summary: %s", t.metricGroup.Summary()) } } @@ -220,7 +218,7 @@ func (t *kernelTelemetry) update(kernCounts *ebpf.PostgresKernelMsgCount, isTLS // Log logs summary of telemetry func (t *kernelTelemetry) Log() { - if log.ShouldLog(seelog.DebugLvl) { + if log.ShouldLog(log.DebugLvl) { s := t.metricGroup.Summary() log.Debugf("postgres kernel telemetry, summary: %s", s) } diff --git a/pkg/network/state.go b/pkg/network/state.go index 155e75e78ca07..39094959989ac 100644 --- a/pkg/network/state.go +++ b/pkg/network/state.go @@ -11,7 +11,6 @@ import ( "sync" "time" - "github.com/cihub/seelog" "go4.org/intern" telemetryComponent "github.com/DataDog/datadog-agent/comp/core/telemetry" @@ -565,7 +564,7 @@ func (ns *networkState) mergeByCookie(conns []ConnectionStats) ([]ConnectionStat return true } - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("duplicate connection in collection: cookie: %d, c1: %+v, c2: %+v", c.Cookie, *ck, *c) } diff --git a/pkg/network/tracer/connection/ebpf_tracer.go b/pkg/network/tracer/connection/ebpf_tracer.go index ba58ada66b19c..d181471578d21 100644 --- a/pkg/network/tracer/connection/ebpf_tracer.go +++ b/pkg/network/tracer/connection/ebpf_tracer.go @@ -17,7 +17,6 @@ import ( manager "github.com/DataDog/ebpf-manager" "github.com/DataDog/ebpf-manager/tracefs" - "github.com/cihub/seelog" "github.com/cilium/ebpf" "github.com/prometheus/client_golang/prometheus" "go.uber.org/atomic" @@ -501,7 +500,7 @@ func (t *ebpfTracer) getEBPFTelemetry() *netebpf.Telemetry { if err := mp.Lookup(&zero, tm); err != nil { // This can happen if we haven't initialized the telemetry object yet // so let's just use a trace log - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("error retrieving the telemetry struct: %s", err) } return nil diff --git a/pkg/network/tracer/ebpf_conntracker.go b/pkg/network/tracer/ebpf_conntracker.go index 89c34dca9578b..873ee9d453005 100644 --- a/pkg/network/tracer/ebpf_conntracker.go +++ b/pkg/network/tracer/ebpf_conntracker.go @@ -16,7 +16,6 @@ import ( "time" manager "github.com/DataDog/ebpf-manager" - "github.com/cihub/seelog" "github.com/cilium/ebpf" "github.com/cilium/ebpf/features" "github.com/prometheus/client_golang/prometheus" @@ -239,7 +238,7 @@ func (e *ebpfConntracker) GetTranslationForConn(stats *network.ConnectionTuple) defer tuplePool.Put(src) toConntrackTupleFromTuple(src, stats) - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("looking up in conntrack (stats): %s", stats) } @@ -247,14 +246,14 @@ func (e *ebpfConntracker) GetTranslationForConn(stats *network.ConnectionTuple) // NAT rules referencing conntrack are installed there instead // of other network namespaces (for pods, for instance) src.Netns = e.rootNS - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("looking up in conntrack (tuple): %s", src) } dst := e.get(src) if dst == nil && stats.NetNS != e.rootNS { // Perform another lookup, this time using the connection namespace src.Netns = stats.NetNS - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("looking up in conntrack (tuple,netns): %s", src) } dst = e.get(src) @@ -299,7 +298,7 @@ func (e *ebpfConntracker) delete(key *netebpf.ConntrackTuple) { if err := e.ctMap.Delete(key); err != nil { if errors.Is(err, ebpf.ErrKeyNotExist) { - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("connection does not exist in ebpf conntrack map: %s", key) } diff --git a/pkg/network/tracer/process_cache.go b/pkg/network/tracer/process_cache.go index b44eb56f044cc..acfb96bbde0f2 100644 --- a/pkg/network/tracer/process_cache.go +++ b/pkg/network/tracer/process_cache.go @@ -12,7 +12,6 @@ import ( "sync" "time" - "github.com/cihub/seelog" lru "github.com/hashicorp/golang-lru/v2" "github.com/prometheus/client_golang/prometheus" @@ -175,7 +174,7 @@ func (pc *processCache) add(p *events.Process) { pc.mu.Lock() defer pc.mu.Unlock() - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("adding process %+v to process cache", p) } p.Expiry = time.Now().Add(defaultExpiry).Unix() diff --git a/pkg/network/tracer/tracer.go b/pkg/network/tracer/tracer.go index 20e97a49ac3e6..56eaf657a802f 100644 --- a/pkg/network/tracer/tracer.go +++ b/pkg/network/tracer/tracer.go @@ -16,7 +16,6 @@ import ( "sync" "time" - "github.com/cihub/seelog" "github.com/cilium/ebpf" "go.uber.org/atomic" "go4.org/intern" @@ -346,7 +345,7 @@ func (t *Tracer) addProcessInfo(c *network.ConnectionStats) { return } - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("got process cache entry for pid %d: %+v", c.Pid, p) } @@ -413,7 +412,7 @@ func (t *Tracer) Stop() { func (t *Tracer) GetActiveConnections(clientID string) (*network.Connections, error) { t.bufferLock.Lock() defer t.bufferLock.Unlock() - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("GetActiveConnections clientID=%s", clientID) } t.ebpfTracer.FlushPending() @@ -611,7 +610,7 @@ func (t *Tracer) removeEntries(entries []network.ConnectionStats) { t.state.RemoveConnections(toRemove) - if log.ShouldLog(seelog.DebugLvl) { + if log.ShouldLog(log.DebugLvl) { log.Debugf("Removed %d connection entries in %s", len(toRemove), time.Since(now)) } } diff --git a/pkg/network/tracer/tracer_test.go b/pkg/network/tracer/tracer_test.go index a108e11363fef..710e5eb142253 100644 --- a/pkg/network/tracer/tracer_test.go +++ b/pkg/network/tracer/tracer_test.go @@ -26,7 +26,6 @@ import ( "testing" "time" - "github.com/cihub/seelog" "github.com/miekg/dns" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -55,7 +54,7 @@ func TestMain(m *testing.M) { if logLevel == "" { logLevel = "warn" } - log.SetupLogger(seelog.Default, logLevel) + log.SetupLogger(log.Default(), logLevel) platformInit() os.Exit(m.Run()) } diff --git a/pkg/network/usm/ebpf_gotls.go b/pkg/network/usm/ebpf_gotls.go index e12871aa619bf..2c1e31300612a 100644 --- a/pkg/network/usm/ebpf_gotls.go +++ b/pkg/network/usm/ebpf_gotls.go @@ -19,7 +19,6 @@ import ( "time" "unsafe" - "github.com/cihub/seelog" "github.com/cilium/ebpf" "golang.org/x/sys/unix" @@ -355,7 +354,7 @@ func (p *goTLSProgram) AttachPID(pid uint32) error { // Check if the process is datadog's internal process, if so, we don't want to hook the process. if internalProcessRegex.MatchString(binPath) { - if log.ShouldLog(seelog.DebugLvl) { + if log.ShouldLog(log.DebugLvl) { log.Debugf("ignoring pid %d, as it is an internal datadog component (%q)", pid, binPath) } return ErrInternalDDogProcessRejected diff --git a/pkg/network/usm/monitor_test.go b/pkg/network/usm/monitor_test.go index 402243c2562d1..f899eb6c295b9 100644 --- a/pkg/network/usm/monitor_test.go +++ b/pkg/network/usm/monitor_test.go @@ -24,7 +24,6 @@ import ( "time" manager "github.com/DataDog/ebpf-manager" - "github.com/cihub/seelog" "github.com/cilium/ebpf" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -49,7 +48,7 @@ func TestMain(m *testing.M) { if logLevel == "" { logLevel = "warn" } - log.SetupLogger(seelog.Default, logLevel) + log.SetupLogger(log.Default(), logLevel) os.Exit(m.Run()) } diff --git a/pkg/network/usm/tests/tracer_classification_test.go b/pkg/network/usm/tests/tracer_classification_test.go index fb167ab7e093c..1ddaa35bed5a5 100644 --- a/pkg/network/usm/tests/tracer_classification_test.go +++ b/pkg/network/usm/tests/tracer_classification_test.go @@ -20,7 +20,6 @@ import ( "testing" "time" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -44,7 +43,7 @@ func TestMain(m *testing.M) { if logLevel == "" { logLevel = "warn" } - log.SetupLogger(seelog.Default, logLevel) + log.SetupLogger(log.Default(), logLevel) platformInit() os.Exit(m.Run()) } diff --git a/pkg/network/usm/utils/file_registry.go b/pkg/network/usm/utils/file_registry.go index 177a4ac7c5857..851d816618e86 100644 --- a/pkg/network/usm/utils/file_registry.go +++ b/pkg/network/usm/utils/file_registry.go @@ -13,7 +13,6 @@ import ( "os" "sync" - "github.com/cihub/seelog" "github.com/hashicorp/golang-lru/v2/simplelru" "go.uber.org/atomic" @@ -263,7 +262,7 @@ func (r *FileRegistry) GetRegisteredProcesses() map[uint32]struct{} { // Log state of `FileRegistry` func (r *FileRegistry) Log() { - if log.ShouldLog(seelog.DebugLvl) { + if log.ShouldLog(log.DebugLvl) { log.Debugf("file_registry summary: program=%s %s", r.telemetry.programName, r.telemetry.metricGroup.Summary()) } } diff --git a/pkg/process/metadata/parser/service.go b/pkg/process/metadata/parser/service.go index a2ef465a410a7..bacff8563b51c 100644 --- a/pkg/process/metadata/parser/service.go +++ b/pkg/process/metadata/parser/service.go @@ -14,7 +14,6 @@ import ( "unicode" "github.com/Masterminds/semver" - "github.com/cihub/seelog" "github.com/DataDog/datadog-agent/pkg/process/metadata" javaparser "github.com/DataDog/datadog-agent/pkg/process/metadata/parser/java" @@ -109,7 +108,7 @@ func (d *ServiceExtractor) Extract(processes map[int32]*procutil.Process) { } } meta := d.extractServiceMetadata(proc) - if meta != nil && log.ShouldLog(seelog.TraceLvl) { + if meta != nil && log.ShouldLog(log.TraceLvl) { log.Tracef("detected service metadata: %v", meta) } serviceByPID[proc.Pid] = meta @@ -132,7 +131,7 @@ func (d *ServiceExtractor) GetServiceContext(pid int32) []string { // Service tag was found from the SCM, return it. if len(tags) > 0 { - if log.ShouldLog(seelog.TraceLvl) { + if log.ShouldLog(log.TraceLvl) { log.Tracef("Found process_context from SCM for pid:%v service tags:%v", pid, tags) } return tags diff --git a/pkg/process/monitor/process_monitor.go b/pkg/process/monitor/process_monitor.go index 8dbdefc99a822..cdc1770ddb488 100644 --- a/pkg/process/monitor/process_monitor.go +++ b/pkg/process/monitor/process_monitor.go @@ -14,7 +14,6 @@ import ( "sync" "time" - "github.com/cihub/seelog" "github.com/vishvananda/netlink" "go.uber.org/atomic" @@ -176,7 +175,7 @@ func (pm *ProcessMonitor) handleProcessExec(pid uint32) { continue default: pm.tel.processExecChannelIsFull.Add(1) - if log.ShouldLog(seelog.DebugLvl) && pm.oversizedLogLimit.ShouldLog() { + if log.ShouldLog(log.DebugLvl) && pm.oversizedLogLimit.ShouldLog() { log.Debug("can't send exec callback to callbackRunner, channel is full") } } @@ -196,7 +195,7 @@ func (pm *ProcessMonitor) handleProcessExit(pid uint32) { continue default: pm.tel.processExitChannelIsFull.Add(1) - if log.ShouldLog(seelog.DebugLvl) && pm.oversizedLogLimit.ShouldLog() { + if log.ShouldLog(log.DebugLvl) && pm.oversizedLogLimit.ShouldLog() { log.Debug("can't send exit callback to callbackRunner, channel is full") } } diff --git a/pkg/process/procutil/process_linux_test.go b/pkg/process/procutil/process_linux_test.go index 7684ed119720e..646984befc8c6 100644 --- a/pkg/process/procutil/process_linux_test.go +++ b/pkg/process/procutil/process_linux_test.go @@ -16,6 +16,7 @@ import ( "testing" "time" + //nolint:depguard // disable logs from DataDog/gopsutil "github.com/cihub/seelog" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/pkg/security/seclog/logger.go b/pkg/security/seclog/logger.go index 632c9efde7498..c6f2aff1a24f7 100644 --- a/pkg/security/seclog/logger.go +++ b/pkg/security/seclog/logger.go @@ -13,8 +13,6 @@ import ( "strings" "sync" - "github.com/cihub/seelog" - "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -138,7 +136,7 @@ func (l *PatternLogger) Tracef(format string, params ...interface{}) { // IsTracing is used to check if TraceF would actually log func (l *PatternLogger) IsTracing() bool { - if logLevel, err := log.GetLogLevel(); err != nil || logLevel != seelog.TraceLvl { + if logLevel, err := log.GetLogLevel(); err != nil || logLevel != log.TraceLvl { return false } return true diff --git a/pkg/security/tests/main_test.go b/pkg/security/tests/main_test.go index 6ef5e6cdb8a80..36b434722dc9d 100644 --- a/pkg/security/tests/main_test.go +++ b/pkg/security/tests/main_test.go @@ -15,7 +15,7 @@ import ( "testing" "time" - "github.com/cihub/seelog" + "github.com/DataDog/datadog-agent/pkg/util/log" ) // TestMain is the entry points for functional tests @@ -43,7 +43,7 @@ var ( ) func init() { - flag.StringVar(&logLevelStr, "loglevel", seelog.WarnStr, "log level") + flag.StringVar(&logLevelStr, "loglevel", log.WarnStr, "log level") flag.Var(&logPatterns, "logpattern", "List of log pattern") flag.Var(&logTags, "logtag", "List of log tag") diff --git a/pkg/security/tests/module_tester_linux.go b/pkg/security/tests/module_tester_linux.go index 268fc839f625e..54d262fdf599d 100644 --- a/pkg/security/tests/module_tester_linux.go +++ b/pkg/security/tests/module_tester_linux.go @@ -27,7 +27,6 @@ import ( "time" "github.com/avast/retry-go/v4" - "github.com/cihub/seelog" "github.com/davecgh/go-spew/spew" "github.com/hashicorp/go-multierror" "github.com/oliveagle/jsonpath" @@ -57,7 +56,7 @@ import ( ) var ( - logger seelog.LoggerInterface + logger log.LoggerInterface ) const ( @@ -999,7 +998,7 @@ func (tm *testModule) Close() { var logInitilialized bool func initLogger() error { - logLevel, found := seelog.LogLevelFromString(logLevelStr) + logLevel, found := log.LogLevelFromString(logLevelStr) if !found { return fmt.Errorf("invalid log level '%s'", logLevel) } @@ -1014,20 +1013,20 @@ func initLogger() error { return nil } -func swapLogLevel(logLevel seelog.LogLevel) (seelog.LogLevel, error) { +func swapLogLevel(logLevel log.LogLevel) (log.LogLevel, error) { if logger == nil { logFormat := "[%Date(2006-01-02 15:04:05.000)] [%LEVEL] %Func:%Line %Msg\n" var err error - logger, err = seelog.LoggerFromWriterWithMinLevelAndFormat(os.Stdout, logLevel, logFormat) + logger, err = log.LoggerFromWriterWithMinLevelAndFormat(os.Stdout, logLevel, logFormat) if err != nil { return 0, err } } log.SetupLogger(logger, logLevel.String()) - prevLevel, _ := seelog.LogLevelFromString(logLevelStr) + prevLevel, _ := log.LogLevelFromString(logLevelStr) logLevelStr = logLevel.String() return prevLevel, nil } diff --git a/pkg/serverless/daemon/routes_test.go b/pkg/serverless/daemon/routes_test.go index e0f2fea43a637..25231204af6c8 100644 --- a/pkg/serverless/daemon/routes_test.go +++ b/pkg/serverless/daemon/routes_test.go @@ -17,7 +17,6 @@ import ( "testing" "time" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" nooptagger "github.com/DataDog/datadog-agent/comp/core/tagger/impl-noop" @@ -399,7 +398,7 @@ func getEventFromFile(filename string) string { func BenchmarkStartEndInvocation(b *testing.B) { // Set the logger up, so that it does not buffer all entries forever (some of these are BIG as they include the // JSON payload). We're not interested in any output here, so we send it all to `io.Discard`. - l, err := seelog.LoggerFromWriterWithMinLevel(io.Discard, seelog.ErrorLvl) + l, err := log.LoggerFromWriterWithMinLevel(io.Discard, log.ErrorLvl) assert.Nil(b, err) log.SetupLogger(l, "error") diff --git a/pkg/snmp/gosnmplib/gosnmp_log_test.go b/pkg/snmp/gosnmplib/gosnmp_log_test.go index 264c81142d427..30394a680cc13 100644 --- a/pkg/snmp/gosnmplib/gosnmp_log_test.go +++ b/pkg/snmp/gosnmplib/gosnmp_log_test.go @@ -10,7 +10,6 @@ import ( "bytes" "testing" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -92,7 +91,7 @@ func TestTraceLevelLogWriter_Write(t *testing.T) { t.Run(tt.name, func(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.TraceLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := log.LoggerFromWriterWithMinLevelAndFormat(w, log.TraceLvl, "[%LEVEL] %FuncShort: %Msg") require.NoError(t, err) log.SetupLogger(l, "trace") diff --git a/pkg/trace/go.mod b/pkg/trace/go.mod index 6853ea9519164..382915cd7b380 100644 --- a/pkg/trace/go.mod +++ b/pkg/trace/go.mod @@ -24,7 +24,7 @@ require ( github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 github.com/DataDog/sketches-go v1.4.6 github.com/Microsoft/go-winio v0.6.2 - github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 + github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc github.com/golang/mock v1.6.0 github.com/golang/protobuf v1.5.4 diff --git a/pkg/trace/remoteconfighandler/remote_config_handler.go b/pkg/trace/remoteconfighandler/remote_config_handler.go index a1d24e7b8e744..0aff0f665099e 100644 --- a/pkg/trace/remoteconfighandler/remote_config_handler.go +++ b/pkg/trace/remoteconfighandler/remote_config_handler.go @@ -19,7 +19,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/log" pkglog "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/cihub/seelog" "github.com/davecgh/go-spew/spew" ) @@ -95,7 +94,7 @@ func (h *RemoteConfigHandler) onAgentConfigUpdate(updates map[string]state.RawCo if len(mergedConfig.LogLevel) > 0 { // Get the current log level - var newFallback seelog.LogLevel + var newFallback pkglog.LogLevel newFallback, err = pkglog.GetLogLevel() if err == nil { h.configState.FallbackLogLevel = newFallback.String() @@ -113,7 +112,7 @@ func (h *RemoteConfigHandler) onAgentConfigUpdate(updates map[string]state.RawCo } } } else { - var currentLogLevel seelog.LogLevel + var currentLogLevel pkglog.LogLevel currentLogLevel, err = pkglog.GetLogLevel() if err == nil && currentLogLevel.String() == h.configState.LatestLogLevel { pkglog.Infof("Removing remote-config log level override of the trace-agent, falling back to %s", h.configState.FallbackLogLevel) diff --git a/pkg/trace/remoteconfighandler/remote_config_handler_test.go b/pkg/trace/remoteconfighandler/remote_config_handler_test.go index 6d3cde4a49711..d53ea39325c79 100644 --- a/pkg/trace/remoteconfighandler/remote_config_handler_test.go +++ b/pkg/trace/remoteconfighandler/remote_config_handler_test.go @@ -13,7 +13,6 @@ import ( "strings" "testing" - "github.com/cihub/seelog" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" @@ -34,7 +33,7 @@ func TestStart(t *testing.T) { prioritySampler := NewMockprioritySampler(ctrl) errorsSampler := NewMockerrorsSampler(ctrl) rareSampler := NewMockrareSampler(ctrl) - pkglog.SetupLogger(seelog.Default, "debug") + pkglog.SetupLogger(pkglog.Default(), "debug") h := New(&agentConfig, prioritySampler, rareSampler, errorsSampler) @@ -58,7 +57,7 @@ func TestPrioritySampler(t *testing.T) { prioritySampler := NewMockprioritySampler(ctrl) errorsSampler := NewMockerrorsSampler(ctrl) rareSampler := NewMockrareSampler(ctrl) - pkglog.SetupLogger(seelog.Default, "debug") + pkglog.SetupLogger(pkglog.Default(), "debug") agentConfig := config.AgentConfig{RemoteConfigClient: remoteClient, TargetTPS: 41, ErrorTPS: 41, RareSamplerEnabled: true} h := New(&agentConfig, prioritySampler, rareSampler, errorsSampler) @@ -89,7 +88,7 @@ func TestErrorsSampler(t *testing.T) { prioritySampler := NewMockprioritySampler(ctrl) errorsSampler := NewMockerrorsSampler(ctrl) rareSampler := NewMockrareSampler(ctrl) - pkglog.SetupLogger(seelog.Default, "debug") + pkglog.SetupLogger(pkglog.Default(), "debug") agentConfig := config.AgentConfig{RemoteConfigClient: remoteClient, TargetTPS: 41, ErrorTPS: 41, RareSamplerEnabled: true} h := New(&agentConfig, prioritySampler, rareSampler, errorsSampler) @@ -120,7 +119,7 @@ func TestRareSampler(t *testing.T) { prioritySampler := NewMockprioritySampler(ctrl) errorsSampler := NewMockerrorsSampler(ctrl) rareSampler := NewMockrareSampler(ctrl) - pkglog.SetupLogger(seelog.Default, "debug") + pkglog.SetupLogger(pkglog.Default(), "debug") agentConfig := config.AgentConfig{RemoteConfigClient: remoteClient, TargetTPS: 41, ErrorTPS: 41, RareSamplerEnabled: true} h := New(&agentConfig, prioritySampler, rareSampler, errorsSampler) @@ -151,7 +150,7 @@ func TestEnvPrecedence(t *testing.T) { prioritySampler := NewMockprioritySampler(ctrl) errorsSampler := NewMockerrorsSampler(ctrl) rareSampler := NewMockrareSampler(ctrl) - pkglog.SetupLogger(seelog.Default, "debug") + pkglog.SetupLogger(pkglog.Default(), "debug") agentConfig := config.AgentConfig{RemoteConfigClient: remoteClient, TargetTPS: 41, ErrorTPS: 41, RareSamplerEnabled: true, DefaultEnv: "agent-env"} h := New(&agentConfig, prioritySampler, rareSampler, errorsSampler) @@ -193,7 +192,7 @@ func TestLogLevel(t *testing.T) { errorsSampler := NewMockerrorsSampler(ctrl) rareSampler := NewMockrareSampler(ctrl) - pkglog.SetupLogger(seelog.Default, "debug") + pkglog.SetupLogger(pkglog.Default(), "debug") srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { assert.Equal(t, "Bearer fakeToken", r.Header.Get("Authorization")) w.WriteHeader(200) diff --git a/pkg/util/grpc/agent_client_test.go b/pkg/util/grpc/agent_client_test.go index 0bc586fae3fdb..8fcc62aeb51a3 100644 --- a/pkg/util/grpc/agent_client_test.go +++ b/pkg/util/grpc/agent_client_test.go @@ -11,14 +11,13 @@ import ( "testing" "time" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/util/log" ) func TestMain(m *testing.M) { - log.SetupLogger(seelog.Default, "trace") + log.SetupLogger(log.Default(), "trace") os.Exit(m.Run()) } diff --git a/pkg/util/grpc/go.mod b/pkg/util/grpc/go.mod index 9798867b0e38d..8aacd9bf986f0 100644 --- a/pkg/util/grpc/go.mod +++ b/pkg/util/grpc/go.mod @@ -38,7 +38,6 @@ require ( github.com/DataDog/datadog-agent/pkg/api v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 - github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 github.com/stretchr/testify v1.10.0 golang.org/x/net v0.31.0 @@ -68,6 +67,7 @@ require ( github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect diff --git a/pkg/util/kubernetes/apiserver/controllers/wpa_controller_test.go b/pkg/util/kubernetes/apiserver/controllers/wpa_controller_test.go index 89374ba3ea185..ffc573d99d355 100644 --- a/pkg/util/kubernetes/apiserver/controllers/wpa_controller_test.go +++ b/pkg/util/kubernetes/apiserver/controllers/wpa_controller_test.go @@ -18,7 +18,6 @@ import ( "github.com/DataDog/watermarkpodautoscaler/apis/datadoghq/v1alpha1" "github.com/cenkalti/backoff" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gopkg.in/zorkian/go-datadog-api.v2" @@ -654,11 +653,10 @@ func TestWPACRDCheck(t *testing.T) { } func configureLoggerForTest(t *testing.T) func() { - logger, err := seelog.LoggerFromWriterWithMinLevel(testWriter{t}, seelog.TraceLvl) + logger, err := log.LoggerFromWriterWithMinLevel(testWriter{t}, log.TraceLvl) if err != nil { t.Fatalf("unable to configure logger, err: %v", err) } - seelog.ReplaceLogger(logger) //nolint:errcheck log.SetupLogger(logger, "trace") return log.Flush } diff --git a/pkg/util/log/levels.go b/pkg/util/log/levels.go new file mode 100644 index 0000000000000..52e8dd99c49e0 --- /dev/null +++ b/pkg/util/log/levels.go @@ -0,0 +1,47 @@ +// 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 log + +import "github.com/cihub/seelog" + +// LogLevel is the type of log levels +// +//nolint:revive // keeping the original type name from seelog +type LogLevel seelog.LogLevel + +// Log levels +const ( + TraceLvl LogLevel = seelog.TraceLvl + DebugLvl LogLevel = seelog.DebugLvl + InfoLvl LogLevel = seelog.InfoLvl + WarnLvl LogLevel = seelog.WarnLvl + ErrorLvl LogLevel = seelog.ErrorLvl + CriticalLvl LogLevel = seelog.CriticalLvl + Off LogLevel = seelog.Off +) + +// Log level string representations +const ( + TraceStr = seelog.TraceStr + DebugStr = seelog.DebugStr + InfoStr = seelog.InfoStr + WarnStr = seelog.WarnStr + ErrorStr = seelog.ErrorStr + CriticalStr = seelog.CriticalStr + OffStr = seelog.OffStr +) + +func (level LogLevel) String() string { + return seelog.LogLevel(level).String() +} + +// LogLevelFromString returns a LogLevel from a string +// +//nolint:revive // keeping the original function name from seelog +func LogLevelFromString(levelStr string) (LogLevel, bool) { + level, ok := seelog.LogLevelFromString(levelStr) + return LogLevel(level), ok +} diff --git a/pkg/util/log/log.go b/pkg/util/log/log.go index 0e1ecaa23e3e5..3eb9ef9fb2679 100644 --- a/pkg/util/log/log.go +++ b/pkg/util/log/log.go @@ -22,7 +22,6 @@ import ( "strings" "sync" - "github.com/cihub/seelog" "go.uber.org/atomic" "github.com/DataDog/datadog-agent/pkg/util/scrubber" @@ -53,9 +52,9 @@ var ( // DatadogLogger wrapper structure for seelog type DatadogLogger struct { - inner seelog.LoggerInterface - level seelog.LogLevel - extra map[string]seelog.LoggerInterface + inner LoggerInterface + level LogLevel + extra map[string]LoggerInterface l sync.RWMutex } @@ -64,7 +63,7 @@ type DatadogLogger struct { */ // SetupLogger setup agent wide logger -func SetupLogger(i seelog.LoggerInterface, level string) { +func SetupLogger(i LoggerInterface, level string) { logger.Store(setupCommonLogger(i, level)) // Flush the log entries logged before initialization now that the logger is initialized @@ -76,17 +75,17 @@ func SetupLogger(i seelog.LoggerInterface, level string) { logsBuffer = []func(){} } -func setupCommonLogger(i seelog.LoggerInterface, level string) *DatadogLogger { +func setupCommonLogger(i LoggerInterface, level string) *DatadogLogger { l := &DatadogLogger{ inner: i, - extra: make(map[string]seelog.LoggerInterface), + extra: make(map[string]LoggerInterface), } - lvl, ok := seelog.LogLevelFromString(level) + lvl, ok := LogLevelFromString(level) if !ok { - lvl = seelog.InfoLvl + lvl = InfoLvl } - l.level = lvl + l.level = LogLevel(lvl) // We're not going to call DatadogLogger directly, but using the // exported functions, that will give us two frames in the stack @@ -121,7 +120,7 @@ func (sw *DatadogLogger) scrub(s string) string { // ChangeLogLevel changes the current log level, valid levels are trace, debug, // info, warn, error, critical and off, it requires a new seelog logger because // an existing one cannot be updated -func ChangeLogLevel(li seelog.LoggerInterface, level string) error { +func ChangeLogLevel(li LoggerInterface, level string) error { if err := logger.changeLogLevel(level); err != nil { return err } @@ -149,36 +148,36 @@ func (sw *loggerPointer) changeLogLevel(level string) error { return errors.New("cannot change loglevel: logger is initialized however logger.inner is nil") } - lvl, ok := seelog.LogLevelFromString(strings.ToLower(level)) + lvl, ok := LogLevelFromString(strings.ToLower(level)) if !ok { return errors.New("bad log level") } - l.level = lvl + l.level = LogLevel(lvl) return nil } // GetLogLevel returns a seelog native representation of the current log level -func GetLogLevel() (seelog.LogLevel, error) { +func GetLogLevel() (LogLevel, error) { return logger.getLogLevel() } -func (sw *loggerPointer) getLogLevel() (seelog.LogLevel, error) { +func (sw *loggerPointer) getLogLevel() (LogLevel, error) { l := sw.Load() if l == nil { - return seelog.InfoLvl, errors.New("cannot get loglevel: logger not initialized") + return InfoLvl, errors.New("cannot get loglevel: logger not initialized") } l.l.RLock() defer l.l.RUnlock() if l.inner == nil { - return seelog.InfoLvl, errors.New("cannot get loglevel: logger not initialized") + return InfoLvl, errors.New("cannot get loglevel: logger not initialized") } return l.level, nil } // ShouldLog returns whether a given log level should be logged by the default logger -func ShouldLog(lvl seelog.LogLevel) bool { +func ShouldLog(lvl LogLevel) bool { // The lock stay in the exported function due to the use of `shouldLog` in function that already hold the lock l := logger.Load() if l != nil { @@ -190,7 +189,7 @@ func ShouldLog(lvl seelog.LogLevel) bool { } // This function should be called with `sw.l` held -func (sw *DatadogLogger) shouldLog(level seelog.LogLevel) bool { +func (sw *DatadogLogger) shouldLog(level LogLevel) bool { return level >= sw.level } @@ -203,7 +202,7 @@ func ValidateLogLevel(logLevel string) (string, error) { seelogLogLevel = "warn" } - if _, found := seelog.LogLevelFromString(seelogLogLevel); !found { + if _, found := LogLevelFromString(seelogLogLevel); !found { return "", fmt.Errorf("unknown log level: %s", seelogLogLevel) } return seelogLogLevel, nil @@ -214,10 +213,10 @@ func ValidateLogLevel(logLevel string) (string, error) { */ // RegisterAdditionalLogger registers an additional logger for logging -func RegisterAdditionalLogger(n string, li seelog.LoggerInterface) error { +func RegisterAdditionalLogger(n string, li LoggerInterface) error { return logger.registerAdditionalLogger(n, li) } -func (sw *loggerPointer) registerAdditionalLogger(n string, li seelog.LoggerInterface) error { +func (sw *loggerPointer) registerAdditionalLogger(n string, li LoggerInterface) error { l := sw.Load() if l == nil { return errors.New("cannot register: logger not initialized") @@ -244,10 +243,10 @@ func (sw *loggerPointer) registerAdditionalLogger(n string, li seelog.LoggerInte } // ReplaceLogger allows replacing the internal logger, returns old logger -func ReplaceLogger(li seelog.LoggerInterface) seelog.LoggerInterface { +func ReplaceLogger(li LoggerInterface) LoggerInterface { return logger.replaceInnerLogger(li) } -func (sw *loggerPointer) replaceInnerLogger(li seelog.LoggerInterface) seelog.LoggerInterface { +func (sw *loggerPointer) replaceInnerLogger(li LoggerInterface) LoggerInterface { l := sw.Load() if l == nil { return nil // Return nil if logger is not initialized @@ -291,7 +290,7 @@ func (sw *loggerPointer) flush() { // log logs a message at the given level, using either bufferFunc (if logging is not yet set up) or // scrubAndLogFunc, and treating the variadic args as the message. -func log(logLevel seelog.LogLevel, bufferFunc func(), scrubAndLogFunc func(string), v ...interface{}) { +func log(logLevel LogLevel, bufferFunc func(), scrubAndLogFunc func(string), v ...interface{}) { l := logger.Load() if l == nil { @@ -310,7 +309,7 @@ func log(logLevel seelog.LogLevel, bufferFunc func(), scrubAndLogFunc func(strin } } -func logWithError(logLevel seelog.LogLevel, bufferFunc func(), scrubAndLogFunc func(string) error, fallbackStderr bool, v ...interface{}) error { +func logWithError(logLevel LogLevel, bufferFunc func(), scrubAndLogFunc func(string) error, fallbackStderr bool, v ...interface{}) error { l := logger.Load() if l == nil { @@ -353,7 +352,7 @@ func logWithError(logLevel seelog.LogLevel, bufferFunc func(), scrubAndLogFunc f * logFormat functions */ -func logFormat(logLevel seelog.LogLevel, bufferFunc func(), scrubAndLogFunc func(string, ...interface{}), format string, params ...interface{}) { +func logFormat(logLevel LogLevel, bufferFunc func(), scrubAndLogFunc func(string, ...interface{}), format string, params ...interface{}) { l := logger.Load() if l == nil { @@ -370,7 +369,7 @@ func logFormat(logLevel seelog.LogLevel, bufferFunc func(), scrubAndLogFunc func scrubAndLogFunc(format, params...) } } -func logFormatWithError(logLevel seelog.LogLevel, bufferFunc func(), scrubAndLogFunc func(string, ...interface{}) error, format string, fallbackStderr bool, params ...interface{}) error { +func logFormatWithError(logLevel LogLevel, bufferFunc func(), scrubAndLogFunc func(string, ...interface{}) error, format string, fallbackStderr bool, params ...interface{}) error { l := logger.Load() if l == nil { @@ -412,7 +411,7 @@ func logFormatWithError(logLevel seelog.LogLevel, bufferFunc func(), scrubAndLog * logContext functions */ -func logContext(logLevel seelog.LogLevel, bufferFunc func(), scrubAndLogFunc func(string), message string, depth int, context ...interface{}) { +func logContext(logLevel LogLevel, bufferFunc func(), scrubAndLogFunc func(string), message string, depth int, context ...interface{}) { l := logger.Load() if l == nil { @@ -433,7 +432,7 @@ func logContext(logLevel seelog.LogLevel, bufferFunc func(), scrubAndLogFunc fun l.inner.SetAdditionalStackDepth(defaultStackDepth) //nolint:errcheck } } -func logContextWithError(logLevel seelog.LogLevel, bufferFunc func(), scrubAndLogFunc func(string) error, message string, fallbackStderr bool, depth int, context ...interface{}) error { +func logContextWithError(logLevel LogLevel, bufferFunc func(), scrubAndLogFunc func(string) error, message string, fallbackStderr bool, depth int, context ...interface{}) error { l := logger.Load() if l == nil { @@ -758,29 +757,29 @@ func formatErrorc(message string, context ...interface{}) error { // Trace logs at the trace level func Trace(v ...interface{}) { - log(seelog.TraceLvl, func() { Trace(v...) }, logger.trace, v...) + log(TraceLvl, func() { Trace(v...) }, logger.trace, v...) } // Tracef logs with format at the trace level func Tracef(format string, params ...interface{}) { - logFormat(seelog.TraceLvl, func() { Tracef(format, params...) }, logger.tracef, format, params...) + logFormat(TraceLvl, func() { Tracef(format, params...) }, logger.tracef, format, params...) } // TracefStackDepth logs with format at the trace level and the current stack depth plus the given depth func TracefStackDepth(depth int, format string, params ...interface{}) { currentLevel, _ := GetLogLevel() - if currentLevel > seelog.TraceLvl { + if currentLevel > TraceLvl { return } msg := fmt.Sprintf(format, params...) - log(seelog.TraceLvl, func() { TraceStackDepth(depth, msg) }, func(s string) { + log(TraceLvl, func() { TraceStackDepth(depth, msg) }, func(s string) { logger.traceStackDepth(s, depth) }, msg) } // TracecStackDepth logs at the trace level with context and the current stack depth plus the additional given one func TracecStackDepth(message string, depth int, context ...interface{}) { - logContext(seelog.TraceLvl, func() { Tracec(message, context...) }, logger.trace, message, depth, context...) + logContext(TraceLvl, func() { Tracec(message, context...) }, logger.trace, message, depth, context...) } // Tracec logs at the trace level with context @@ -791,36 +790,36 @@ func Tracec(message string, context ...interface{}) { // TraceFunc calls and logs the result of 'logFunc' if and only if Trace (or more verbose) logs are enabled func TraceFunc(logFunc func() string) { currentLevel, _ := GetLogLevel() - if currentLevel <= seelog.TraceLvl { + if currentLevel <= TraceLvl { TraceStackDepth(2, logFunc()) } } // Debug logs at the debug level func Debug(v ...interface{}) { - log(seelog.DebugLvl, func() { Debug(v...) }, logger.debug, v...) + log(DebugLvl, func() { Debug(v...) }, logger.debug, v...) } // Debugf logs with format at the debug level func Debugf(format string, params ...interface{}) { - logFormat(seelog.DebugLvl, func() { Debugf(format, params...) }, logger.debugf, format, params...) + logFormat(DebugLvl, func() { Debugf(format, params...) }, logger.debugf, format, params...) } // DebugfStackDepth logs with format at the debug level and the current stack depth plus the given depth func DebugfStackDepth(depth int, format string, params ...interface{}) { currentLevel, _ := GetLogLevel() - if currentLevel > seelog.DebugLvl { + if currentLevel > DebugLvl { return } msg := fmt.Sprintf(format, params...) - log(seelog.DebugLvl, func() { DebugStackDepth(depth, msg) }, func(s string) { + log(DebugLvl, func() { DebugStackDepth(depth, msg) }, func(s string) { logger.debugStackDepth(s, depth) }, msg) } // DebugcStackDepth logs at the debug level with context and the current stack depth plus the additional given one func DebugcStackDepth(message string, depth int, context ...interface{}) { - logContext(seelog.DebugLvl, func() { Debugc(message, context...) }, logger.debug, message, depth, context...) + logContext(DebugLvl, func() { Debugc(message, context...) }, logger.debug, message, depth, context...) } // Debugc logs at the debug level with context @@ -831,36 +830,36 @@ func Debugc(message string, context ...interface{}) { // DebugFunc calls and logs the result of 'logFunc' if and only if Debug (or more verbose) logs are enabled func DebugFunc(logFunc func() string) { currentLevel, _ := GetLogLevel() - if currentLevel <= seelog.DebugLvl { + if currentLevel <= DebugLvl { DebugStackDepth(2, logFunc()) } } // Info logs at the info level func Info(v ...interface{}) { - log(seelog.InfoLvl, func() { Info(v...) }, logger.info, v...) + log(InfoLvl, func() { Info(v...) }, logger.info, v...) } // Infof logs with format at the info level func Infof(format string, params ...interface{}) { - logFormat(seelog.InfoLvl, func() { Infof(format, params...) }, logger.infof, format, params...) + logFormat(InfoLvl, func() { Infof(format, params...) }, logger.infof, format, params...) } // InfofStackDepth logs with format at the info level and the current stack depth plus the given depth func InfofStackDepth(depth int, format string, params ...interface{}) { currentLevel, _ := GetLogLevel() - if currentLevel > seelog.InfoLvl { + if currentLevel > InfoLvl { return } msg := fmt.Sprintf(format, params...) - log(seelog.InfoLvl, func() { InfoStackDepth(depth, msg) }, func(s string) { + log(InfoLvl, func() { InfoStackDepth(depth, msg) }, func(s string) { logger.infoStackDepth(s, depth) }, msg) } // InfocStackDepth logs at the info level with context and the current stack depth plus the additional given one func InfocStackDepth(message string, depth int, context ...interface{}) { - logContext(seelog.InfoLvl, func() { Infoc(message, context...) }, logger.info, message, depth, context...) + logContext(InfoLvl, func() { Infoc(message, context...) }, logger.info, message, depth, context...) } // Infoc logs at the info level with context @@ -871,32 +870,32 @@ func Infoc(message string, context ...interface{}) { // InfoFunc calls and logs the result of 'logFunc' if and only if Info (or more verbose) logs are enabled func InfoFunc(logFunc func() string) { currentLevel, _ := GetLogLevel() - if currentLevel <= seelog.InfoLvl { + if currentLevel <= InfoLvl { InfoStackDepth(2, logFunc()) } } // Warn logs at the warn level and returns an error containing the formated log message func Warn(v ...interface{}) error { - return logWithError(seelog.WarnLvl, func() { _ = Warn(v...) }, logger.warn, false, v...) + return logWithError(WarnLvl, func() { _ = Warn(v...) }, logger.warn, false, v...) } // Warnf logs with format at the warn level and returns an error containing the formated log message func Warnf(format string, params ...interface{}) error { - return logFormatWithError(seelog.WarnLvl, func() { _ = Warnf(format, params...) }, logger.warnf, format, false, params...) + return logFormatWithError(WarnLvl, func() { _ = Warnf(format, params...) }, logger.warnf, format, false, params...) } // WarnfStackDepth logs with format at the warn level and the current stack depth plus the given depth func WarnfStackDepth(depth int, format string, params ...interface{}) error { msg := fmt.Sprintf(format, params...) - return logWithError(seelog.WarnLvl, func() { _ = WarnStackDepth(depth, msg) }, func(s string) error { + return logWithError(WarnLvl, func() { _ = WarnStackDepth(depth, msg) }, func(s string) error { return logger.warnStackDepth(s, depth) }, false, msg) } // WarncStackDepth logs at the warn level with context and the current stack depth plus the additional given one and returns an error containing the formated log message func WarncStackDepth(message string, depth int, context ...interface{}) error { - return logContextWithError(seelog.WarnLvl, func() { _ = Warnc(message, context...) }, logger.warn, message, false, depth, context...) + return logContextWithError(WarnLvl, func() { _ = Warnc(message, context...) }, logger.warn, message, false, depth, context...) } // Warnc logs at the warn level with context and returns an error containing the formated log message @@ -907,32 +906,32 @@ func Warnc(message string, context ...interface{}) error { // WarnFunc calls and logs the result of 'logFunc' if and only if Warn (or more verbose) logs are enabled func WarnFunc(logFunc func() string) { currentLevel, _ := GetLogLevel() - if currentLevel <= seelog.WarnLvl { + if currentLevel <= WarnLvl { _ = WarnStackDepth(2, logFunc()) } } // Error logs at the error level and returns an error containing the formated log message func Error(v ...interface{}) error { - return logWithError(seelog.ErrorLvl, func() { _ = Error(v...) }, logger.error, true, v...) + return logWithError(ErrorLvl, func() { _ = Error(v...) }, logger.error, true, v...) } // Errorf logs with format at the error level and returns an error containing the formated log message func Errorf(format string, params ...interface{}) error { - return logFormatWithError(seelog.ErrorLvl, func() { _ = Errorf(format, params...) }, logger.errorf, format, true, params...) + return logFormatWithError(ErrorLvl, func() { _ = Errorf(format, params...) }, logger.errorf, format, true, params...) } // ErrorfStackDepth logs with format at the error level and the current stack depth plus the given depth func ErrorfStackDepth(depth int, format string, params ...interface{}) error { msg := fmt.Sprintf(format, params...) - return logWithError(seelog.ErrorLvl, func() { _ = ErrorStackDepth(depth, msg) }, func(s string) error { + return logWithError(ErrorLvl, func() { _ = ErrorStackDepth(depth, msg) }, func(s string) error { return logger.errorStackDepth(s, depth) }, true, msg) } // ErrorcStackDepth logs at the error level with context and the current stack depth plus the additional given one and returns an error containing the formated log message func ErrorcStackDepth(message string, depth int, context ...interface{}) error { - return logContextWithError(seelog.ErrorLvl, func() { _ = Errorc(message, context...) }, logger.error, message, true, depth, context...) + return logContextWithError(ErrorLvl, func() { _ = Errorc(message, context...) }, logger.error, message, true, depth, context...) } // Errorc logs at the error level with context and returns an error containing the formated log message @@ -943,32 +942,32 @@ func Errorc(message string, context ...interface{}) error { // ErrorFunc calls and logs the result of 'logFunc' if and only if Error (or more verbose) logs are enabled func ErrorFunc(logFunc func() string) { currentLevel, _ := GetLogLevel() - if currentLevel <= seelog.ErrorLvl { + if currentLevel <= ErrorLvl { _ = ErrorStackDepth(2, logFunc()) } } // Critical logs at the critical level and returns an error containing the formated log message func Critical(v ...interface{}) error { - return logWithError(seelog.CriticalLvl, func() { _ = Critical(v...) }, logger.critical, true, v...) + return logWithError(CriticalLvl, func() { _ = Critical(v...) }, logger.critical, true, v...) } // Criticalf logs with format at the critical level and returns an error containing the formated log message func Criticalf(format string, params ...interface{}) error { - return logFormatWithError(seelog.CriticalLvl, func() { _ = Criticalf(format, params...) }, logger.criticalf, format, true, params...) + return logFormatWithError(CriticalLvl, func() { _ = Criticalf(format, params...) }, logger.criticalf, format, true, params...) } // CriticalfStackDepth logs with format at the critical level and the current stack depth plus the given depth func CriticalfStackDepth(depth int, format string, params ...interface{}) error { msg := fmt.Sprintf(format, params...) - return logWithError(seelog.CriticalLvl, func() { _ = CriticalStackDepth(depth, msg) }, func(s string) error { + return logWithError(CriticalLvl, func() { _ = CriticalStackDepth(depth, msg) }, func(s string) error { return logger.criticalStackDepth(s, depth) }, false, msg) } // CriticalcStackDepth logs at the critical level with context and the current stack depth plus the additional given one and returns an error containing the formated log message func CriticalcStackDepth(message string, depth int, context ...interface{}) error { - return logContextWithError(seelog.CriticalLvl, func() { _ = Criticalc(message, context...) }, logger.critical, message, true, depth, context...) + return logContextWithError(CriticalLvl, func() { _ = Criticalc(message, context...) }, logger.critical, message, true, depth, context...) } // Criticalc logs at the critical level with context and returns an error containing the formated log message @@ -979,49 +978,49 @@ func Criticalc(message string, context ...interface{}) error { // CriticalFunc calls and logs the result of 'logFunc' if and only if Critical (or more verbose) logs are enabled func CriticalFunc(logFunc func() string) { currentLevel, _ := GetLogLevel() - if currentLevel <= seelog.CriticalLvl { + if currentLevel <= CriticalLvl { _ = CriticalStackDepth(2, logFunc()) } } // InfoStackDepth logs at the info level and the current stack depth plus the additional given one func InfoStackDepth(depth int, v ...interface{}) { - log(seelog.InfoLvl, func() { InfoStackDepth(depth, v...) }, func(s string) { + log(InfoLvl, func() { InfoStackDepth(depth, v...) }, func(s string) { logger.infoStackDepth(s, depth) }, v...) } // WarnStackDepth logs at the warn level and the current stack depth plus the additional given one and returns an error containing the formated log message func WarnStackDepth(depth int, v ...interface{}) error { - return logWithError(seelog.WarnLvl, func() { _ = WarnStackDepth(depth, v...) }, func(s string) error { + return logWithError(WarnLvl, func() { _ = WarnStackDepth(depth, v...) }, func(s string) error { return logger.warnStackDepth(s, depth) }, false, v...) } // DebugStackDepth logs at the debug level and the current stack depth plus the additional given one and returns an error containing the formated log message func DebugStackDepth(depth int, v ...interface{}) { - log(seelog.DebugLvl, func() { DebugStackDepth(depth, v...) }, func(s string) { + log(DebugLvl, func() { DebugStackDepth(depth, v...) }, func(s string) { logger.debugStackDepth(s, depth) }, v...) } // TraceStackDepth logs at the trace level and the current stack depth plus the additional given one and returns an error containing the formated log message func TraceStackDepth(depth int, v ...interface{}) { - log(seelog.TraceLvl, func() { TraceStackDepth(depth, v...) }, func(s string) { + log(TraceLvl, func() { TraceStackDepth(depth, v...) }, func(s string) { logger.traceStackDepth(s, depth) }, v...) } // ErrorStackDepth logs at the error level and the current stack depth plus the additional given one and returns an error containing the formated log message func ErrorStackDepth(depth int, v ...interface{}) error { - return logWithError(seelog.ErrorLvl, func() { _ = ErrorStackDepth(depth, v...) }, func(s string) error { + return logWithError(ErrorLvl, func() { _ = ErrorStackDepth(depth, v...) }, func(s string) error { return logger.errorStackDepth(s, depth) }, true, v...) } // CriticalStackDepth logs at the critical level and the current stack depth plus the additional given one and returns an error containing the formated log message func CriticalStackDepth(depth int, v ...interface{}) error { - return logWithError(seelog.CriticalLvl, func() { _ = CriticalStackDepth(depth, v...) }, func(s string) error { + return logWithError(CriticalLvl, func() { _ = CriticalStackDepth(depth, v...) }, func(s string) error { return logger.criticalStackDepth(s, depth) }, true, v...) } @@ -1032,15 +1031,15 @@ func CriticalStackDepth(depth int, v ...interface{}) error { // JMXError Logs for JMX check func JMXError(v ...interface{}) error { - return logWithError(seelog.ErrorLvl, func() { _ = JMXError(v...) }, jmxLogger.error, true, v...) + return logWithError(ErrorLvl, func() { _ = JMXError(v...) }, jmxLogger.error, true, v...) } // JMXInfo Logs func JMXInfo(v ...interface{}) { - log(seelog.InfoLvl, func() { JMXInfo(v...) }, jmxLogger.info, v...) + log(InfoLvl, func() { JMXInfo(v...) }, jmxLogger.info, v...) } // SetupJMXLogger setup JMXfetch specific logger -func SetupJMXLogger(i seelog.LoggerInterface, level string) { +func SetupJMXLogger(i LoggerInterface, level string) { jmxLogger.Store(setupCommonLogger(i, level)) } diff --git a/pkg/util/log/log_bench_test.go b/pkg/util/log/log_bench_test.go index 61ab1ec8ccbc3..bf700aae85e75 100644 --- a/pkg/util/log/log_bench_test.go +++ b/pkg/util/log/log_bench_test.go @@ -9,15 +9,13 @@ import ( "bufio" "bytes" "testing" - - "github.com/cihub/seelog" ) func BenchmarkLogVanilla(b *testing.B) { var buff bytes.Buffer w := bufio.NewWriter(&buff) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, DebugLvl, "[%LEVEL] %FuncShort: %Msg") for n := 0; n < b.N; n++ { l.Infof("this is a credential encoding uri: %s", "http://user:password@host:port") @@ -28,7 +26,7 @@ func BenchmarkLogVanillaLevels(b *testing.B) { var buff bytes.Buffer w := bufio.NewWriter(&buff) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.InfoLvl, "[%LEVEL] %FuncShort: %Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, InfoLvl, "[%LEVEL] %FuncShort: %Msg") for n := 0; n < b.N; n++ { l.Debugf("this is a credential encoding uri: %s", "http://user:password@host:port") @@ -39,7 +37,7 @@ func BenchmarkLogScrubbing(b *testing.B) { var buff bytes.Buffer w := bufio.NewWriter(&buff) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, DebugLvl, "[%LEVEL] %FuncShort: %Msg") SetupLogger(l, "info") for n := 0; n < b.N; n++ { @@ -51,7 +49,7 @@ func BenchmarkLogScrubbingLevels(b *testing.B) { var buff bytes.Buffer w := bufio.NewWriter(&buff) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, DebugLvl, "[%LEVEL] %FuncShort: %Msg") SetupLogger(l, "info") for n := 0; n < b.N; n++ { @@ -64,8 +62,8 @@ func BenchmarkLogScrubbingMulti(b *testing.B) { wA := bufio.NewWriter(&buffA) wB := bufio.NewWriter(&buffB) - lA, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(wA, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") - lB, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(wB, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + lA, _ := LoggerFromWriterWithMinLevelAndFormat(wA, DebugLvl, "[%LEVEL] %FuncShort: %Msg") + lB, _ := LoggerFromWriterWithMinLevelAndFormat(wB, DebugLvl, "[%LEVEL] %FuncShort: %Msg") SetupLogger(lA, "info") _ = RegisterAdditionalLogger("extra", lB) @@ -82,7 +80,7 @@ func BenchmarkLogWithContext(b *testing.B) { var buff bytes.Buffer w := bufio.NewWriter(&buff) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, DebugLvl, "[%LEVEL] %FuncShort: %Msg") SetupLogger(l, "info") for n := 0; n < b.N; n++ { diff --git a/pkg/util/log/log_not_serverless_test.go b/pkg/util/log/log_not_serverless_test.go index 5bc245912cc49..c684977738602 100644 --- a/pkg/util/log/log_not_serverless_test.go +++ b/pkg/util/log/log_not_serverless_test.go @@ -12,7 +12,6 @@ import ( "bytes" "testing" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" ) @@ -20,7 +19,7 @@ func TestServerlessLoggingNotInServerlessContext(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevel(w, seelog.DebugLvl) + l, err := LoggerFromWriterWithMinLevel(w, DebugLvl) assert.NoError(t, err) SetupLogger(l, "debug") diff --git a/pkg/util/log/log_serverless_test.go b/pkg/util/log/log_serverless_test.go index cb9c2ed83b9a3..a6520631ce741 100644 --- a/pkg/util/log/log_serverless_test.go +++ b/pkg/util/log/log_serverless_test.go @@ -12,7 +12,6 @@ import ( "bytes" "testing" - "github.com/cihub/seelog" "github.com/stretchr/testify/assert" ) @@ -20,7 +19,7 @@ func TestServerlessLoggingInServerlessContext(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevel(w, seelog.DebugLvl) + l, err := LoggerFromWriterWithMinLevel(w, DebugLvl) assert.NoError(t, err) SetupLogger(l, "debug") diff --git a/pkg/util/log/log_test.go b/pkg/util/log/log_test.go index b6af55dd37c7c..ca1bbf45d737a 100644 --- a/pkg/util/log/log_test.go +++ b/pkg/util/log/log_test.go @@ -49,7 +49,7 @@ func TestBasicLogging(t *testing.T) { w := bufio.NewWriter(&b) seelog.RegisterCustomFormatter("ExtraTextContext", createExtraTextContext) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %ExtraTextContext%Msg\n") + l, err := LoggerFromWriterWithMinLevelAndFormat(w, DebugLvl, "[%LEVEL] %FuncShort: %ExtraTextContext%Msg\n") assert.NoError(t, err) SetupLogger(l, "debug") @@ -108,7 +108,7 @@ func TestLogBuffer(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := LoggerFromWriterWithMinLevelAndFormat(w, DebugLvl, "[%LEVEL] %FuncShort: %Msg") assert.NoError(t, err) Tracef("%s", "foo") @@ -134,7 +134,7 @@ func TestLogBufferWithContext(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := LoggerFromWriterWithMinLevelAndFormat(w, DebugLvl, "[%LEVEL] %FuncShort: %Msg") assert.NoError(t, err) Tracec("baz", "number", 1, "str", "hello") @@ -170,7 +170,7 @@ func TestCredentialScrubbingLogging(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := LoggerFromWriterWithMinLevelAndFormat(w, DebugLvl, "[%LEVEL] %FuncShort: %Msg") assert.NoError(t, err) SetupLogger(l, "info") @@ -192,9 +192,9 @@ func TestExtraLogging(t *testing.T) { w := bufio.NewWriter(&a) wA := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %Msg") + l, err := LoggerFromWriterWithMinLevelAndFormat(w, DebugLvl, "[%LEVEL] %Msg") assert.NoError(t, err) - lA, err := seelog.LoggerFromWriterWithMinLevelAndFormat(wA, seelog.DebugLvl, "[%LEVEL] %Msg") + lA, err := LoggerFromWriterWithMinLevelAndFormat(wA, DebugLvl, "[%LEVEL] %Msg") assert.NoError(t, err) SetupLogger(l, "info") @@ -244,7 +244,7 @@ func TestWarnNotNil(t *testing.T) { assert.NotNil(t, Warn("test")) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.CriticalLvl, "[%LEVEL] %FuncShort: %Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, CriticalLvl, "[%LEVEL] %FuncShort: %Msg") SetupLogger(l, "critical") assert.NotNil(t, Warn("test")) @@ -260,7 +260,7 @@ func TestWarnfNotNil(t *testing.T) { assert.NotNil(t, Warn("test")) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.CriticalLvl, "[%LEVEL] %FuncShort: %Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, CriticalLvl, "[%LEVEL] %FuncShort: %Msg") SetupLogger(l, "critical") assert.NotNil(t, Warn("test")) @@ -277,7 +277,7 @@ func TestWarncNotNil(t *testing.T) { assert.NotNil(t, Warnc("test", "key", "val")) seelog.RegisterCustomFormatter("ExtraTextContext", createExtraTextContext) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.CriticalLvl, "[%LEVEL] %FuncShort: %ExtraTextContext%Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, CriticalLvl, "[%LEVEL] %FuncShort: %ExtraTextContext%Msg") SetupLogger(l, "critical") assert.NotNil(t, Warnc("test", "key", "val")) @@ -293,7 +293,7 @@ func TestErrorNotNil(t *testing.T) { assert.NotNil(t, Error("test")) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.CriticalLvl, "[%LEVEL] %FuncShort: %Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, CriticalLvl, "[%LEVEL] %FuncShort: %Msg") SetupLogger(l, "critical") assert.NotNil(t, Error("test")) @@ -309,7 +309,7 @@ func TestErrorfNotNil(t *testing.T) { assert.NotNil(t, Errorf("test")) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.CriticalLvl, "[%LEVEL] %FuncShort: %Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, CriticalLvl, "[%LEVEL] %FuncShort: %Msg") SetupLogger(l, "critical") assert.NotNil(t, Errorf("test")) @@ -326,7 +326,7 @@ func TestErrorcNotNil(t *testing.T) { assert.NotNil(t, Errorc("test", "key", "val")) seelog.RegisterCustomFormatter("ExtraTextContext", createExtraTextContext) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.CriticalLvl, "[%LEVEL] %FuncShort: %ExtraTextContext%Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, CriticalLvl, "[%LEVEL] %FuncShort: %ExtraTextContext%Msg") SetupLogger(l, "critical") assert.NotNil(t, Errorc("test", "key", "val")) @@ -342,7 +342,7 @@ func TestCriticalNotNil(t *testing.T) { assert.NotNil(t, Critical("test")) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.InfoLvl, "[%LEVEL] %FuncShort: %Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, InfoLvl, "[%LEVEL] %FuncShort: %Msg") SetupLogger(l, "info") assert.NotNil(t, Critical("test")) @@ -354,7 +354,7 @@ func TestCriticalfNotNil(t *testing.T) { assert.NotNil(t, Criticalf("test")) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.InfoLvl, "[%LEVEL] %FuncShort: %Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, InfoLvl, "[%LEVEL] %FuncShort: %Msg") SetupLogger(l, "info") assert.NotNil(t, Criticalf("test")) @@ -367,7 +367,7 @@ func TestCriticalcNotNil(t *testing.T) { assert.NotNil(t, Criticalc("test", "key", "val")) seelog.RegisterCustomFormatter("ExtraTextContext", createExtraTextContext) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.InfoLvl, "[%LEVEL] %FuncShort: %ExtraTextContext%Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, InfoLvl, "[%LEVEL] %FuncShort: %ExtraTextContext%Msg") SetupLogger(l, "info") assert.NotNil(t, Criticalc("test", "key", "val")) @@ -377,7 +377,7 @@ func TestDebugFuncNoExecute(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.InfoLvl, "[%LEVEL] %FuncShort: %Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, InfoLvl, "[%LEVEL] %FuncShort: %Msg") SetupLogger(l, "info") i := 0 @@ -393,7 +393,7 @@ func TestDebugFuncExecute(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.DebugLvl, "[%LEVEL] %FuncShort: %Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, DebugLvl, "[%LEVEL] %FuncShort: %Msg") SetupLogger(l, "debug") i := 0 @@ -410,37 +410,37 @@ func TestDebugFuncExecute(t *testing.T) { func TestFuncVersions(t *testing.T) { cases := []struct { - seelogLevel seelog.LogLevel + seelogLevel LogLevel strLogLevel string logFunc func(func() string) expectedToBeCalled bool }{ - {seelog.ErrorLvl, "error", DebugFunc, false}, - {seelog.WarnLvl, "warn", DebugFunc, false}, - {seelog.InfoLvl, "info", DebugFunc, false}, - {seelog.DebugLvl, "debug", DebugFunc, true}, - {seelog.TraceLvl, "trace", DebugFunc, true}, + {ErrorLvl, "error", DebugFunc, false}, + {WarnLvl, "warn", DebugFunc, false}, + {InfoLvl, "info", DebugFunc, false}, + {DebugLvl, "debug", DebugFunc, true}, + {TraceLvl, "trace", DebugFunc, true}, - {seelog.TraceLvl, "trace", TraceFunc, true}, - {seelog.InfoLvl, "info", TraceFunc, false}, + {TraceLvl, "trace", TraceFunc, true}, + {InfoLvl, "info", TraceFunc, false}, - {seelog.InfoLvl, "info", InfoFunc, true}, - {seelog.WarnLvl, "warn", InfoFunc, false}, + {InfoLvl, "info", InfoFunc, true}, + {WarnLvl, "warn", InfoFunc, false}, - {seelog.WarnLvl, "warn", WarnFunc, true}, - {seelog.ErrorLvl, "error", WarnFunc, false}, + {WarnLvl, "warn", WarnFunc, true}, + {ErrorLvl, "error", WarnFunc, false}, - {seelog.ErrorLvl, "error", ErrorFunc, true}, - {seelog.CriticalLvl, "critical", ErrorFunc, false}, + {ErrorLvl, "error", ErrorFunc, true}, + {CriticalLvl, "critical", ErrorFunc, false}, - {seelog.CriticalLvl, "critical", CriticalFunc, true}, + {CriticalLvl, "critical", CriticalFunc, true}, } for _, tc := range cases { var b bytes.Buffer w := bufio.NewWriter(&b) - l, _ := seelog.LoggerFromWriterWithMinLevelAndFormat(w, tc.seelogLevel, "[%LEVEL] %FuncShort: %Msg") + l, _ := LoggerFromWriterWithMinLevelAndFormat(w, tc.seelogLevel, "[%LEVEL] %FuncShort: %Msg") SetupLogger(l, tc.strLogLevel) i := 0 @@ -463,16 +463,16 @@ func TestStackDepthfLogging(t *testing.T) { const stackDepth = 1 cases := []struct { - seelogLevel seelog.LogLevel + seelogLevel LogLevel strLogLevel string expectedToBeCalled int }{ - {seelog.CriticalLvl, "critical", 1}, - {seelog.ErrorLvl, "error", 2}, - {seelog.WarnLvl, "warn", 3}, - {seelog.InfoLvl, "info", 4}, - {seelog.DebugLvl, "debug", 5}, - {seelog.TraceLvl, "trace", 6}, + {CriticalLvl, "critical", 1}, + {ErrorLvl, "error", 2}, + {WarnLvl, "warn", 3}, + {InfoLvl, "info", 4}, + {DebugLvl, "debug", 5}, + {TraceLvl, "trace", 6}, } for _, tc := range cases { @@ -480,7 +480,7 @@ func TestStackDepthfLogging(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, tc.seelogLevel, "[%LEVEL] %Func: %Msg\n") + l, err := LoggerFromWriterWithMinLevelAndFormat(w, tc.seelogLevel, "[%LEVEL] %Func: %Msg\n") assert.NoError(t, err) SetupLogger(l, tc.strLogLevel) @@ -529,7 +529,7 @@ func getFuncName(val reflect.Value) (string, error) { func TestLoggerScrubbingCount(t *testing.T) { var b bytes.Buffer w := bufio.NewWriter(&b) - l, err := seelog.LoggerFromWriterWithMinLevelAndFormat(w, seelog.TraceLvl, "[%LEVEL] %FuncShort: %Msg") + l, err := LoggerFromWriterWithMinLevelAndFormat(w, TraceLvl, "[%LEVEL] %FuncShort: %Msg") require.NoError(t, err) SetupLogger(l, "trace") diff --git a/pkg/util/log/log_test_init.go b/pkg/util/log/log_test_init.go index 7dd6bcd7e3c7c..b1b5e3bbedba2 100644 --- a/pkg/util/log/log_test_init.go +++ b/pkg/util/log/log_test_init.go @@ -9,8 +9,6 @@ package log import ( "os" - - "github.com/cihub/seelog" ) func init() { @@ -18,5 +16,5 @@ func init() { if level == "" { level = "debug" } - SetupLogger(seelog.Default, level) + SetupLogger(Default(), level) } diff --git a/pkg/util/log/logger.go b/pkg/util/log/logger.go new file mode 100644 index 0000000000000..5de956c854f07 --- /dev/null +++ b/pkg/util/log/logger.go @@ -0,0 +1,35 @@ +// 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 log + +import ( + "io" + + "github.com/cihub/seelog" +) + +// LoggerInterface provides basic logging methods. +type LoggerInterface seelog.LoggerInterface + +// Default returns a default logger +func Default() LoggerInterface { + return seelog.Default +} + +// Disabled returns a disabled logger +func Disabled() LoggerInterface { + return seelog.Disabled +} + +// LoggerFromWriterWithMinLevelAndFormat creates a new logger from a writer, a minimum log level and a format. +func LoggerFromWriterWithMinLevelAndFormat(output io.Writer, minLevel LogLevel, format string) (LoggerInterface, error) { + return seelog.LoggerFromWriterWithMinLevelAndFormat(output, seelog.LogLevel(minLevel), format) +} + +// LoggerFromWriterWithMinLevel creates a new logger from a writer and a minimum log level. +func LoggerFromWriterWithMinLevel(output io.Writer, minLevel LogLevel) (LoggerInterface, error) { + return seelog.LoggerFromWriterWithMinLevel(output, seelog.LogLevel(minLevel)) +} diff --git a/pkg/util/log/setup/log.go b/pkg/util/log/setup/log.go index 959918853ba55..87b8a27da455a 100644 --- a/pkg/util/log/setup/log.go +++ b/pkg/util/log/setup/log.go @@ -246,29 +246,29 @@ type logWriter struct { } // NewLogWriter returns a logWriter set with given logLevel. Returns an error if logLevel is unknown/not set. -func NewLogWriter(additionalDepth int, logLevel seelog.LogLevel) (io.Writer, error) { +func NewLogWriter(additionalDepth int, logLevel log.LogLevel) (io.Writer, error) { writer := &logWriter{ additionalDepth: additionalDepth, } switch logLevel { - case seelog.TraceLvl: + case log.TraceLvl: writer.logFunc = log.TraceStackDepth - case seelog.DebugLvl: + case log.DebugLvl: writer.logFunc = log.DebugStackDepth - case seelog.InfoLvl: + case log.InfoLvl: writer.logFunc = log.InfoStackDepth - case seelog.WarnLvl: + case log.WarnLvl: writer.logFunc = func(dept int, v ...interface{}) { _ = log.WarnStackDepth(dept, v...) } writer.additionalDepth++ - case seelog.ErrorLvl: + case log.ErrorLvl: writer.logFunc = func(dept int, v ...interface{}) { _ = log.ErrorStackDepth(dept, v...) } writer.additionalDepth++ - case seelog.CriticalLvl: + case log.CriticalLvl: writer.logFunc = func(dept int, v ...interface{}) { _ = log.CriticalStackDepth(dept, v...) } @@ -294,7 +294,7 @@ type tlsHandshakeErrorWriter struct { } // NewTLSHandshakeErrorWriter is a wrapper function which creates a new logWriter. -func NewTLSHandshakeErrorWriter(additionalDepth int, logLevel seelog.LogLevel) (io.Writer, error) { +func NewTLSHandshakeErrorWriter(additionalDepth int, logLevel log.LogLevel) (io.Writer, error) { logWriter, err := NewLogWriter(additionalDepth, logLevel) if err != nil { return nil, err diff --git a/pkg/util/log/zap/zapcore.go b/pkg/util/log/zap/zapcore.go index 576e443557f21..4d77c3e1c8612 100644 --- a/pkg/util/log/zap/zapcore.go +++ b/pkg/util/log/zap/zapcore.go @@ -7,7 +7,6 @@ package log import ( - "github.com/cihub/seelog" "go.uber.org/zap/zapcore" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -20,18 +19,18 @@ type core struct { } func (c *core) Enabled(level zapcore.Level) bool { - var seelogLevel seelog.LogLevel + var seelogLevel log.LogLevel switch level { case zapcore.DebugLevel: - seelogLevel = seelog.DebugLvl + seelogLevel = log.DebugLvl case zapcore.InfoLevel: - seelogLevel = seelog.InfoLvl + seelogLevel = log.InfoLvl case zapcore.WarnLevel: - seelogLevel = seelog.WarnLvl + seelogLevel = log.WarnLvl case zapcore.ErrorLevel: - seelogLevel = seelog.ErrorLvl + seelogLevel = log.ErrorLvl case zapcore.DPanicLevel, zapcore.PanicLevel, zapcore.FatalLevel: - seelogLevel = seelog.CriticalLvl + seelogLevel = log.CriticalLvl } return log.ShouldLog(seelogLevel) } diff --git a/pkg/util/winutil/eventlog/subscription/subscription_test.go b/pkg/util/winutil/eventlog/subscription/subscription_test.go index bc59447aec2b7..f9ba0b1cca496 100644 --- a/pkg/util/winutil/eventlog/subscription/subscription_test.go +++ b/pkg/util/winutil/eventlog/subscription/subscription_test.go @@ -13,11 +13,10 @@ import ( "testing" pkglog "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/cihub/seelog" - "github.com/DataDog/datadog-agent/pkg/util/winutil/eventlog/api" - "github.com/DataDog/datadog-agent/pkg/util/winutil/eventlog/bookmark" - "github.com/DataDog/datadog-agent/pkg/util/winutil/eventlog/test" + evtapi "github.com/DataDog/datadog-agent/pkg/util/winutil/eventlog/api" + evtbookmark "github.com/DataDog/datadog-agent/pkg/util/winutil/eventlog/bookmark" + eventlog_test "github.com/DataDog/datadog-agent/pkg/util/winutil/eventlog/test" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -31,7 +30,7 @@ var debuglogFlag = flag.Bool("debuglog", false, "Enable seelog debug logging") func optEnableDebugLogging() { // Enable logger if *debuglogFlag { - pkglog.SetupLogger(seelog.Default, "debug") + pkglog.SetupLogger(pkglog.Default(), "debug") } } diff --git a/pkg/util/winutil/go.mod b/pkg/util/winutil/go.mod index 801288c667f47..1facedf93843c 100644 --- a/pkg/util/winutil/go.mod +++ b/pkg/util/winutil/go.mod @@ -9,7 +9,6 @@ replace ( require ( github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 - github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 github.com/fsnotify/fsnotify v1.8.0 github.com/stretchr/testify v1.10.0 go.uber.org/atomic v1.11.0 @@ -19,6 +18,7 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect + github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect From 6b70b84aebd4b35f9661d0fb3fe97dbe6f90dddf Mon Sep 17 00:00:00 2001 From: "John L. Peterson (Jack)" Date: Wed, 11 Dec 2024 11:03:12 -0500 Subject: [PATCH 129/303] add missing variable to collector.update task (#31989) --- tasks/collector.py | 1 + test/otel/testdata/ocb_build_script.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/tasks/collector.py b/tasks/collector.py index a5da1a784b8d1..cc684ea42623b 100644 --- a/tasks/collector.py +++ b/tasks/collector.py @@ -478,6 +478,7 @@ def update_files(self): "./comp/otelcol/collector/impl/collector.go", "./tasks/collector.py", "./.gitlab/integration_test/otel.yml", + "./test/otel/testdata/ocb_build_script.sh", ] for root, _, files in os.walk("./tasks/unit_tests/testdata/collector"): for file in files: diff --git a/test/otel/testdata/ocb_build_script.sh b/test/otel/testdata/ocb_build_script.sh index 43dd7b34be343..9f451624eb3ae 100755 --- a/test/otel/testdata/ocb_build_script.sh +++ b/test/otel/testdata/ocb_build_script.sh @@ -19,7 +19,7 @@ cp ./test/otel/testdata/collector-config.yaml /tmp/otel-ci/ cp ./tools/ci/retry.sh /tmp/otel-ci/ chmod +x /tmp/otel-ci/retry.sh -OCB_VERSION="0.114.0" +OCB_VERSION="0.115.0" CGO_ENABLED=0 go install -trimpath -ldflags="-s -w" go.opentelemetry.io/collector/cmd/builder@v${OCB_VERSION} mv "$(go env GOPATH)/bin/builder" /tmp/otel-ci/ocb From ab1dbf473c0313819bff37e2e5e04a870a495789 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20Juli=C3=A1n?= Date: Wed, 11 Dec 2024 17:32:55 +0100 Subject: [PATCH 130/303] [EBPF] Ignore unchanged programs when calculating complexity changes (#32015) --- tasks/ebpf.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/tasks/ebpf.py b/tasks/ebpf.py index dc84b410e43d0..711639cebd073 100644 --- a/tasks/ebpf.py +++ b/tasks/ebpf.py @@ -804,6 +804,7 @@ def _try_delete_github_comment(msg: str): max_complexity_abs_change = -9e9 threshold_for_max_limit = 0.85 programs_now_below_limit, programs_now_above_limit = 0, 0 + has_programs_with_changes = False for program, entries in sorted(program_complexity.items(), key=lambda x: max(e[2] for e in x[1])): avg_new_complexity, avg_old_complexity = 0, 0 highest_new_complexity, highest_old_complexity = 0, 0 @@ -833,8 +834,11 @@ def _try_delete_github_comment(msg: str): programs_now_above_limit += 1 abs_change = new_complexity - old_complexity - max_complexity_rel_change = max(max_complexity_rel_change, abs_change / old_complexity) - max_complexity_abs_change = max(max_complexity_abs_change, abs_change) + + if abs_change != 0: + max_complexity_rel_change = max(max_complexity_rel_change, abs_change / old_complexity) + max_complexity_abs_change = max(max_complexity_abs_change, abs_change) + has_programs_with_changes = True avg_new_complexity /= len(entries) avg_old_complexity /= len(entries) @@ -854,6 +858,12 @@ def _try_delete_github_comment(msg: str): ] summarized_complexity_changes.append(row) + # Reset the max values if we have no programs with changes, as we don't want the -9e9 values + # which are used as the initial values + if not has_programs_with_changes: + max_complexity_abs_change = 0 + max_complexity_rel_change = 0 + headers = ["Program", "Avg. complexity", "Distro with highest complexity", "Distro with lowest complexity"] summarized_complexity_changes = sorted(summarized_complexity_changes, key=lambda x: x[0]) From cbae694698bcd55bf801259c641ea597f9be5ba3 Mon Sep 17 00:00:00 2001 From: Daniel Tafoya <63120739+daniel-taf@users.noreply.github.com> Date: Wed, 11 Dec 2024 11:35:40 -0500 Subject: [PATCH 131/303] [PROCS-4568] Split ECS Fargate e2e test (#31990) --- test/new-e2e/tests/process/fargate_test.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/test/new-e2e/tests/process/fargate_test.go b/test/new-e2e/tests/process/fargate_test.go index 709139df4cdb0..695500ca7a8fe 100644 --- a/test/new-e2e/tests/process/fargate_test.go +++ b/test/new-e2e/tests/process/fargate_test.go @@ -73,14 +73,27 @@ func (s *ECSFargateSuite) TestProcessCheck() { assertContainersCollected(t, payloads, []string{"stress-ng"}) } -func (s *ECSFargateSuite) TestProcessCheckInCoreAgent() { - t := s.T() +type ECSFargateCoreAgentSuite struct { + e2e.BaseSuite[environments.ECS] +} + +func TestECSFargateCoreAgentTestSuite(t *testing.T) { + t.Parallel() + s := ECSFargateCoreAgentSuite{} extraConfig := runner.ConfigMap{ "ddagent:extraEnvVars": auto.ConfigValue{Value: "DD_PROCESS_CONFIG_RUN_IN_CORE_AGENT_ENABLED=true"}, } + e2eParams := []e2e.SuiteOption{e2e.WithProvisioner( + getFargateProvisioner(extraConfig), + ), + } + + e2e.Run(t, &s, e2eParams...) +} - s.UpdateEnv(getFargateProvisioner(extraConfig)) +func (s *ECSFargateCoreAgentSuite) TestProcessCheckInCoreAgent() { + t := s.T() // Flush fake intake to remove any payloads which may have s.Env().FakeIntake.Client().FlushServerAndResetAggregators() From 1ad15a5a58c7534f0ff2f265a43e308c518fb8e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Wed, 11 Dec 2024 17:36:11 +0100 Subject: [PATCH 132/303] omnibus cache: simplify the build images handling (#32021) --- tasks/libs/common/omnibus.py | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/tasks/libs/common/omnibus.py b/tasks/libs/common/omnibus.py index b789b287da611..b60b710ff384b 100644 --- a/tasks/libs/common/omnibus.py +++ b/tasks/libs/common/omnibus.py @@ -11,13 +11,6 @@ from tasks.release import _get_release_json_value -def _get_build_images(ctx): - # We intentionally include both build images & their test suffixes in the pattern - # as a test image and the merged version shouldn't share their cache - tags = ctx.run("grep -E 'DATADOG_AGENT_.*BUILDIMAGES' .gitlab-ci.yml | cut -d ':' -f 2", hide='stdout').stdout - return (t.strip() for t in tags.splitlines()) - - def _get_omnibus_commits(field): if 'RELEASE_VERSION' in os.environ: release_version = os.environ['RELEASE_VERSION'] @@ -211,9 +204,7 @@ def omnibus_compute_cache_key(ctx): h = hashlib.sha1() omnibus_last_changes = _last_omnibus_changes(ctx) h.update(str.encode(omnibus_last_changes)) - buildimages_hash = _get_build_images(ctx) - for img_hash in buildimages_hash: - h.update(str.encode(img_hash)) + h.update(str.encode(os.getenv('CI_JOB_IMAGE', 'local_build'))) omnibus_ruby_commit = _get_omnibus_commits('OMNIBUS_RUBY_VERSION') omnibus_software_commit = _get_omnibus_commits('OMNIBUS_SOFTWARE_VERSION') print(f'Omnibus ruby commit: {omnibus_ruby_commit}') From 49325ca36da43ab0c2cd3d5201a228e4190d7ef3 Mon Sep 17 00:00:00 2001 From: Yang Song Date: Wed, 11 Dec 2024 11:36:35 -0500 Subject: [PATCH 133/303] [chore] ignore otel collector package updates in dependabot (#32024) --- .github/dependabot.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml index fbbec5da82991..7eb0cdbc4e0dc 100644 --- a/.github/dependabot.yaml +++ b/.github/dependabot.yaml @@ -27,6 +27,9 @@ updates: - dependency-name: github.com/ugorji/go # Ignore internal modules - dependency-name: github.com/DataDog/datadog-agent/* + # OpenTelemetry collector packages need to be updated with inv rather than dependabot + - dependency-name: go.opentelemetry.io/collector/* + - dependency-name: github.com/open-telemetry/opentelemetry-collector-contrib/* schedule: interval: weekly open-pull-requests-limit: 100 @@ -52,6 +55,9 @@ updates: - dependency-name: github.com/DataDog/datadog-agent/* # See https://github.com/DataDog/datadog-agent/pull/10112 - dependency-name: github.com/mailru/easyjson + # OpenTelemetry collector packages need to be updated with inv rather than dependabot + - dependency-name: go.opentelemetry.io/collector/* + - dependency-name: github.com/open-telemetry/opentelemetry-collector-contrib/* schedule: interval: weekly open-pull-requests-limit: 100 From 56658fee3937e50cae033381d308c96880b91faa Mon Sep 17 00:00:00 2001 From: Steven Blumenthal Date: Wed, 11 Dec 2024 17:36:58 +0100 Subject: [PATCH 134/303] Add changelog entry for kube_cache_sync_timeout_seconds change (#32002) --- ...sync-timeout-seconds-default-0bb13defed7ae192.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 releasenotes/notes/kube-cache-sync-timeout-seconds-default-0bb13defed7ae192.yaml diff --git a/releasenotes/notes/kube-cache-sync-timeout-seconds-default-0bb13defed7ae192.yaml b/releasenotes/notes/kube-cache-sync-timeout-seconds-default-0bb13defed7ae192.yaml new file mode 100644 index 0000000000000..d79275c25c19b --- /dev/null +++ b/releasenotes/notes/kube-cache-sync-timeout-seconds-default-0bb13defed7ae192.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +other: + - | + Bumps the default value for `kube_cache_sync_timeout_seconds` from 5 to 10 seconds. From 56af0cab095ed4214eddbde54d6bb21096a4cdec Mon Sep 17 00:00:00 2001 From: "John L. Peterson (Jack)" Date: Wed, 11 Dec 2024 11:58:08 -0500 Subject: [PATCH 135/303] add collector update PR inv task and fix inv collector.update (#31545) Co-authored-by: github-actions[bot] --- .github/CODEOWNERS | 28 +++++---- .../collector-generate-and-update.yml | 60 +++++-------------- tasks/collector.py | 56 ++++++++++++++++- tasks/libs/ciproviders/github_api.py | 6 +- 4 files changed, 87 insertions(+), 63 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4647c2ede6ae0..1569d87fd96ef 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -50,19 +50,20 @@ /.circleci/ @DataDog/agent-devx-infra -/.github/CODEOWNERS # do not notify anyone -/.github/*_TEMPLATE.md @DataDog/agent-devx-loops -/.github/dependabot.yaml @DataDog/agent-devx-infra -/.github/workflows/serverless-benchmarks.yml @DataDog/serverless @Datadog/serverless-aws -/.github/workflows/serverless-binary-size.yml @DataDog/serverless @Datadog/serverless-aws -/.github/workflows/serverless-integration.yml @DataDog/serverless @Datadog/serverless-aws -/.github/workflows/cws-btfhub-sync.yml @DataDog/agent-security -/.github/workflows/gohai.yml @DataDog/agent-shared-components -/.github/workflows/go-update-commenter.yml @DataDog/agent-shared-components -/.github/workflows/buildimages-update.yml @DataDog/agent-delivery @DataDog/agent-shared-components - -/.run @DataDog/agent-devx-loops -/.run/docker/ @DataDog/container-integrations @DataDog/container-platform +/.github/CODEOWNERS # do not notify anyone +/.github/*_TEMPLATE.md @DataDog/agent-devx-loops +/.github/dependabot.yaml @DataDog/agent-devx-infra +/.github/workflows/serverless-benchmarks.yml @DataDog/serverless @Datadog/serverless-aws +/.github/workflows/serverless-binary-size.yml @DataDog/serverless @Datadog/serverless-aws +/.github/workflows/serverless-integration.yml @DataDog/serverless @Datadog/serverless-aws +/.github/workflows/cws-btfhub-sync.yml @DataDog/agent-security +/.github/workflows/gohai.yml @DataDog/agent-shared-components +/.github/workflows/go-update-commenter.yml @DataDog/agent-shared-components +/.github/workflows/buildimages-update.yml @DataDog/agent-delivery @DataDog/agent-shared-components +/.github/workflows/collector-generate-and-update.yml @DataDog/opentelemetry + +/.run @DataDog/agent-devx-loops +/.run/docker/ @DataDog/container-integrations @DataDog/container-platform # Gitlab files # Files containing job contents are owned by teams in charge of the jobs + agent-devx-infra or agent-delivery @@ -572,6 +573,7 @@ /tasks/winbuildscripts/ @DataDog/windows-agent /tasks/winbuild.py @DataDog/windows-agent /tasks/windows_resources.py @DataDog/windows-agent +/tasks/collector.py @DataDog/opentelemetry /tasks/components.py @DataDog/agent-shared-components /tasks/components_templates @DataDog/agent-shared-components /tasks/libs/ciproviders/ @DataDog/agent-devx-infra diff --git a/.github/workflows/collector-generate-and-update.yml b/.github/workflows/collector-generate-and-update.yml index b0d3326cc44b2..8852a0ca424c0 100644 --- a/.github/workflows/collector-generate-and-update.yml +++ b/.github/workflows/collector-generate-and-update.yml @@ -11,62 +11,30 @@ jobs: permissions: pull-requests: write steps: - - name: Set date - id: date - run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT - - name: Checkout repository uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 - name: Set up Python uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0 with: - python-version: '3.12.6' + python-version: 3.12 + cache: 'pip' + + - name: Set up Go + uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 + with: + go-version: '1.22.8' - - name: Install dependencies + - name: Install Dependencies run: | - python -m pip install --upgrade pip + python3 -m pip install --upgrade pip pip install -r requirements.txt - - name: Run update task - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: inv -e collector.update - - - name: Run generate task + - name: Run Collector Update Script env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: inv -e collector.generate - - - name: Check for changes - id: check_changes - run: | - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - git add . - if git diff-index --quiet HEAD; then - echo "No changes detected" - echo "changes_detected=false" >> $GITHUB_OUTPUT - else - echo "Changes detected" - echo "changes_detected=true" >> $GITHUB_OUTPUT - fi - - - name: Commit changes - if: steps.check_changes.outputs.changes_detected == 'true' - run: | - git switch -c update-otel-collector-dependencies-${{ steps.date.outputs.date }} - git commit -m "Update OTel Collector dependencies and generate OTel Agent" - git push -u origin update-otel-collector-dependencies-${{ steps.date.outputs.date }} - - - name: Install GitHub CLI - if: steps.check_changes.outputs.changes_detected == 'true' - run: | - sudo apt-get update - sudo apt-get install gh - - - name: Create draft pull request - if: steps.check_changes.outputs.changes_detected == 'true' run: | - gh auth login --with-token <<< ${{ secrets.GITHUB_TOKEN }} - gh pr create --title "Update OTel collector dependencies" --body "This PR updates the OTel Collector dependencies to the latest version. Please ensure that all tests pass before marking ready for review." --base main --head update-otel-collector-dependencies-${{ steps.date.outputs.date }} --draft + inv -e collector.update + inv -e collector.generate + inv -e generate-licenses + inv -e collector.pull-request diff --git a/tasks/collector.py b/tasks/collector.py index cc684ea42623b..e4dbd4ae4d68d 100644 --- a/tasks/collector.py +++ b/tasks/collector.py @@ -14,6 +14,7 @@ from tasks.go import tidy from tasks.libs.ciproviders.github_api import GithubAPI from tasks.libs.common.color import Color, color_message +from tasks.libs.common.git import check_uncommitted_changes LICENSE_HEADER = """// Unless explicitly stated otherwise all files in this repository are licensed // under the Apache License Version 2.0. @@ -480,8 +481,8 @@ def update_files(self): "./.gitlab/integration_test/otel.yml", "./test/otel/testdata/ocb_build_script.sh", ] - for root, _, files in os.walk("./tasks/unit_tests/testdata/collector"): - for file in files: + for root, _, testfiles in os.walk("./tasks/unit_tests/testdata/collector"): + for file in testfiles: files.append(os.path.join(root, file)) collector_version = self.core_collector.get_version()[1:] for file in files: @@ -499,3 +500,54 @@ def update(ctx): updater = CollectorVersionUpdater() updater.update() print("Update complete.") + + +def get_git_config(key): + result = subprocess.run(['git', 'config', '--get', key], capture_output=True, text=True) + return result.stdout.strip() if result.returncode == 0 else None + + +def set_git_config(key, value): + subprocess.run(['git', 'config', key, value]) + + +def revert_git_config(original_config): + for key, value in original_config.items(): + if value is None: + subprocess.run(['git', 'config', '--unset', key]) + else: + subprocess.run(['git', 'config', key, value]) + + +@task() +def pull_request(ctx): + # Save current Git configuration + original_config = {'user.name': get_git_config('user.name'), 'user.email': get_git_config('user.email')} + + try: + # Set new Git configuration + set_git_config('user.name', 'github-actions[bot]') + set_git_config('user.email', 'github-actions[bot]@users.noreply.github.com') + + # Perform Git operations + ctx.run('git add .') + if check_uncommitted_changes(ctx): + branch_name = f"update-otel-collector-dependencies-{OCB_VERSION}" + ctx.run(f'git switch -c {branch_name}') + ctx.run( + f'git commit -m "Update OTel Collector dependencies to {OCB_VERSION} and generate OTel Agent" --no-verify' + ) + ctx.run(f'git push -u origin {branch_name} --no-verify') # skip pre-commit hook if installed locally + gh = GithubAPI() + gh.create_pr( + pr_title=f"Update OTel Collector dependencies to v{OCB_VERSION}", + pr_body=f"This PR updates the dependencies of the OTel Collector to v{OCB_VERSION} and generates the OTel Agent code.", + target_branch=branch_name, + base_branch="main", + draft=True, + ) + else: + print("No changes detected, skipping PR creation.") + finally: + # Revert to original Git configuration + revert_git_config(original_config) diff --git a/tasks/libs/ciproviders/github_api.py b/tasks/libs/ciproviders/github_api.py index 4021b5d7937e5..a32546d23ee38 100644 --- a/tasks/libs/ciproviders/github_api.py +++ b/tasks/libs/ciproviders/github_api.py @@ -64,11 +64,13 @@ def get_branch(self, branch_name): return None raise e - def create_pr(self, pr_title, pr_body, base_branch, target_branch): + def create_pr(self, pr_title, pr_body, base_branch, target_branch, draft=False): """ Creates a PR in the given Github repository. """ - return self._repository.create_pull(title=pr_title, body=pr_body, base=base_branch, head=target_branch) + return self._repository.create_pull( + title=pr_title, body=pr_body, base=base_branch, head=target_branch, draft=draft + ) def update_pr(self, pull_number, milestone_number, labels): """ From e49efd5a1b34f2f86d5c5b7d46d41c95a9c90fe7 Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Wed, 11 Dec 2024 18:00:31 +0100 Subject: [PATCH 136/303] [CWS] make the security-agent use the remote workload meta only (#32009) --- cmd/security-agent/main_windows.go | 13 ++----------- cmd/security-agent/subcommands/start/command.go | 12 +++--------- pkg/config/setup/config.go | 1 - 3 files changed, 5 insertions(+), 21 deletions(-) diff --git a/cmd/security-agent/main_windows.go b/cmd/security-agent/main_windows.go index 6aa47f99d56b4..b81223e6aebc1 100644 --- a/cmd/security-agent/main_windows.go +++ b/cmd/security-agent/main_windows.go @@ -121,17 +121,8 @@ func (s *service) Run(svcctx context.Context) error { // workloadmeta setup wmcatalog.GetCatalog(), - workloadmetafx.ModuleWithProvider(func(config config.Component) workloadmeta.Params { - - catalog := workloadmeta.NodeAgent - - if config.GetBool("security_agent.remote_workloadmeta") { - catalog = workloadmeta.Remote - } - - return workloadmeta.Params{ - AgentType: catalog, - } + workloadmetafx.Module(workloadmeta.Params{ + AgentType: workloadmeta.Remote, }), fx.Provide(func(log log.Component, config config.Component, statsd statsd.Component, wmeta workloadmeta.Component) (status.InformationProvider, *agent.RuntimeSecurityAgent, error) { stopper := startstop.NewSerialStopper() diff --git a/cmd/security-agent/subcommands/start/command.go b/cmd/security-agent/subcommands/start/command.go index 6dec7ce712a4e..8386100c0031b 100644 --- a/cmd/security-agent/subcommands/start/command.go +++ b/cmd/security-agent/subcommands/start/command.go @@ -48,7 +48,7 @@ import ( remoteTaggerfx "github.com/DataDog/datadog-agent/comp/core/tagger/fx-remote" taggerTypes "github.com/DataDog/datadog-agent/comp/core/tagger/types" "github.com/DataDog/datadog-agent/comp/core/telemetry" - wmcatalog "github.com/DataDog/datadog-agent/comp/core/workloadmeta/collectors/catalog" + wmcatalog "github.com/DataDog/datadog-agent/comp/core/workloadmeta/collectors/catalog-remote" workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" workloadmetafx "github.com/DataDog/datadog-agent/comp/core/workloadmeta/fx" "github.com/DataDog/datadog-agent/comp/dogstatsd" @@ -104,14 +104,8 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { dogstatsd.ClientBundle, // workloadmeta setup wmcatalog.GetCatalog(), - workloadmetafx.ModuleWithProvider(func(config config.Component) workloadmeta.Params { - catalog := workloadmeta.NodeAgent - if config.GetBool("security_agent.remote_workloadmeta") { - catalog = workloadmeta.Remote - } - return workloadmeta.Params{ - AgentType: catalog, - } + workloadmetafx.Module(workloadmeta.Params{ + AgentType: workloadmeta.Remote, }), remoteTaggerfx.Module(tagger.RemoteParams{ RemoteTarget: func(c config.Component) (string, error) { diff --git a/pkg/config/setup/config.go b/pkg/config/setup/config.go index a19de1ebed171..da2fb45d704bb 100644 --- a/pkg/config/setup/config.go +++ b/pkg/config/setup/config.go @@ -898,7 +898,6 @@ func InitConfig(config pkgconfigmodel.Setup) { config.BindEnvAndSetDefault("security_agent.cmd_port", DefaultSecurityAgentCmdPort) config.BindEnvAndSetDefault("security_agent.expvar_port", 5011) config.BindEnvAndSetDefault("security_agent.log_file", DefaultSecurityAgentLogFile) - config.BindEnvAndSetDefault("security_agent.remote_workloadmeta", true) // debug config to enable a remote client to receive data from the workloadmeta agent without a timeout config.BindEnvAndSetDefault("workloadmeta.remote.recv_without_timeout", true) From 14eca6c8f963050fdd58e759a8bb78404fe884d4 Mon Sep 17 00:00:00 2001 From: Guillaume Pagnoux Date: Wed, 11 Dec 2024 18:48:34 +0100 Subject: [PATCH 137/303] discovery: put service name generated from container tags in a separate field (#31951) --- .../corechecks/servicediscovery/events.go | 4 + .../servicediscovery/events_test.go | 52 ++++--- .../corechecks/servicediscovery/impl_linux.go | 4 + .../servicediscovery/impl_linux_test.go | 142 +++++++++++------- .../servicediscovery/model/model.go | 32 ++-- .../servicediscovery/module/impl_linux.go | 27 ++-- .../module/impl_linux_test.go | 26 +++- .../servicediscovery/usm/service.go | 2 - 8 files changed, 178 insertions(+), 111 deletions(-) diff --git a/pkg/collector/corechecks/servicediscovery/events.go b/pkg/collector/corechecks/servicediscovery/events.go index fba57253ad552..f1d040dacefcb 100644 --- a/pkg/collector/corechecks/servicediscovery/events.go +++ b/pkg/collector/corechecks/servicediscovery/events.go @@ -30,6 +30,8 @@ type eventPayload struct { ServiceName string `json:"service_name"` GeneratedServiceName string `json:"generated_service_name"` GeneratedServiceNameSource string `json:"generated_service_name_source,omitempty"` + ContainerServiceName string `json:"container_service_name,omitempty"` + ContainerServiceNameSource string `json:"container_service_name_source,omitempty"` DDService string `json:"dd_service,omitempty"` HostName string `json:"host_name"` Env string `json:"env"` @@ -79,6 +81,8 @@ func (ts *telemetrySender) newEvent(t eventType, svc serviceInfo) *event { ServiceName: svc.meta.Name, GeneratedServiceName: svc.service.GeneratedName, GeneratedServiceNameSource: svc.service.GeneratedNameSource, + ContainerServiceName: svc.service.ContainerServiceName, + ContainerServiceNameSource: svc.service.ContainerServiceNameSource, DDService: svc.service.DDService, HostName: host, Env: env, diff --git a/pkg/collector/corechecks/servicediscovery/events_test.go b/pkg/collector/corechecks/servicediscovery/events_test.go index f8b7fc92bcfb3..b38dc5ddf084f 100644 --- a/pkg/collector/corechecks/servicediscovery/events_test.go +++ b/pkg/collector/corechecks/servicediscovery/events_test.go @@ -56,17 +56,19 @@ func Test_telemetrySender(t *testing.T) { svc := serviceInfo{ service: model.Service{ - PID: 99, - CommandLine: []string{"test-service", "--args"}, - Ports: []uint16{80, 8080}, - StartTimeMilli: uint64(now.Add(-20 * time.Minute).UnixMilli()), - RSS: 500 * 1024 * 1024, - GeneratedName: "generated-name", - GeneratedNameSource: "generated-name-source", - DDService: "dd-service", - DDServiceInjected: true, - CPUCores: 1.5, - ContainerID: "abcd", + PID: 99, + CommandLine: []string{"test-service", "--args"}, + Ports: []uint16{80, 8080}, + StartTimeMilli: uint64(now.Add(-20 * time.Minute).UnixMilli()), + RSS: 500 * 1024 * 1024, + GeneratedName: "generated-name", + GeneratedNameSource: "generated-name-source", + ContainerServiceName: "container-service-name", + ContainerServiceNameSource: "service", + DDService: "dd-service", + DDServiceInjected: true, + CPUCores: 1.5, + ContainerID: "abcd", }, meta: ServiceMetadata{ Name: "test-service", @@ -90,6 +92,8 @@ func Test_telemetrySender(t *testing.T) { ServiceName: "test-service", GeneratedServiceName: "generated-name", GeneratedServiceNameSource: "generated-name-source", + ContainerServiceName: "container-service-name", + ContainerServiceNameSource: "service", DDService: "dd-service", ServiceNameSource: "injected", HostName: "test-host", @@ -116,6 +120,8 @@ func Test_telemetrySender(t *testing.T) { ServiceName: "test-service", GeneratedServiceName: "generated-name", GeneratedServiceNameSource: "generated-name-source", + ContainerServiceName: "container-service-name", + ContainerServiceNameSource: "service", DDService: "dd-service", ServiceNameSource: "injected", HostName: "test-host", @@ -142,6 +148,8 @@ func Test_telemetrySender(t *testing.T) { ServiceName: "test-service", GeneratedServiceName: "generated-name", GeneratedServiceNameSource: "generated-name-source", + ContainerServiceName: "container-service-name", + ContainerServiceNameSource: "service", DDService: "dd-service", ServiceNameSource: "injected", HostName: "test-host", @@ -188,13 +196,15 @@ func Test_telemetrySender_name_provided(t *testing.T) { svc := serviceInfo{ service: model.Service{ - PID: 55, - CommandLine: []string{"foo", "--option"}, - StartTimeMilli: uint64(now.Add(-20 * time.Minute).UnixMilli()), - GeneratedName: "generated-name2", - GeneratedNameSource: "generated-name-source2", - DDService: "dd-service-provided", - ContainerID: "abcd", + PID: 55, + CommandLine: []string{"foo", "--option"}, + StartTimeMilli: uint64(now.Add(-20 * time.Minute).UnixMilli()), + GeneratedName: "generated-name2", + GeneratedNameSource: "generated-name-source2", + ContainerServiceName: "container-service-name2", + ContainerServiceNameSource: "service", + DDService: "dd-service-provided", + ContainerID: "abcd", }, meta: ServiceMetadata{ Name: "test-service", @@ -218,6 +228,8 @@ func Test_telemetrySender_name_provided(t *testing.T) { ServiceName: "test-service", GeneratedServiceName: "generated-name2", GeneratedServiceNameSource: "generated-name-source2", + ContainerServiceName: "container-service-name2", + ContainerServiceNameSource: "service", DDService: "dd-service-provided", ServiceNameSource: "provided", HostName: "test-host", @@ -241,6 +253,8 @@ func Test_telemetrySender_name_provided(t *testing.T) { ServiceName: "test-service", GeneratedServiceName: "generated-name2", GeneratedServiceNameSource: "generated-name-source2", + ContainerServiceName: "container-service-name2", + ContainerServiceNameSource: "service", DDService: "dd-service-provided", ServiceNameSource: "provided", HostName: "test-host", @@ -264,6 +278,8 @@ func Test_telemetrySender_name_provided(t *testing.T) { ServiceName: "test-service", GeneratedServiceName: "generated-name2", GeneratedServiceNameSource: "generated-name-source2", + ContainerServiceName: "container-service-name2", + ContainerServiceNameSource: "service", DDService: "dd-service-provided", ServiceNameSource: "provided", HostName: "test-host", diff --git a/pkg/collector/corechecks/servicediscovery/impl_linux.go b/pkg/collector/corechecks/servicediscovery/impl_linux.go index 617b740990922..2f0b3df61d63f 100644 --- a/pkg/collector/corechecks/servicediscovery/impl_linux.go +++ b/pkg/collector/corechecks/servicediscovery/impl_linux.go @@ -128,6 +128,8 @@ func (li *linuxImpl) DiscoverServices() (*discoveredServices, error) { svc.service.CPUCores = service.CPUCores svc.service.ContainerID = service.ContainerID svc.service.GeneratedName = service.GeneratedName + svc.service.ContainerServiceName = service.ContainerServiceName + svc.service.ContainerServiceNameSource = service.ContainerServiceNameSource svc.service.Name = service.Name svc.meta.Name = service.Name events.heartbeat = append(events.heartbeat, *svc) @@ -167,6 +169,8 @@ func (li *linuxImpl) handlePotentialServices(events *serviceEvents, now time.Tim svc.service.CPUCores = service.CPUCores svc.service.ContainerID = service.ContainerID svc.service.GeneratedName = service.GeneratedName + svc.service.ContainerServiceName = service.ContainerServiceName + svc.service.ContainerServiceNameSource = service.ContainerServiceNameSource svc.service.Name = service.Name svc.meta.Name = service.Name diff --git a/pkg/collector/corechecks/servicediscovery/impl_linux_test.go b/pkg/collector/corechecks/servicediscovery/impl_linux_test.go index e6da859352596..ba5e0e5a1caad 100644 --- a/pkg/collector/corechecks/servicediscovery/impl_linux_test.go +++ b/pkg/collector/corechecks/servicediscovery/impl_linux_test.go @@ -71,47 +71,53 @@ var ( var ( portTCP8080 = model.Service{ - PID: procTestService1.pid, - Name: "test-service-1", - GeneratedName: "test-service-1-generated", - GeneratedNameSource: "test-service-1-generated-source", - DDService: "test-service-1", - DDServiceInjected: true, - Ports: []uint16{8080}, - APMInstrumentation: string(apm.None), - RSS: 100 * 1024 * 1024, - CPUCores: 1.5, - CommandLine: []string{"test-service-1"}, - StartTimeMilli: procLaunchedMilli, - ContainerID: dummyContainerID, + PID: procTestService1.pid, + Name: "test-service-1", + GeneratedName: "test-service-1-generated", + GeneratedNameSource: "test-service-1-generated-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "service", + DDService: "test-service-1", + DDServiceInjected: true, + Ports: []uint16{8080}, + APMInstrumentation: string(apm.None), + RSS: 100 * 1024 * 1024, + CPUCores: 1.5, + CommandLine: []string{"test-service-1"}, + StartTimeMilli: procLaunchedMilli, + ContainerID: dummyContainerID, } portTCP8080UpdatedRSS = model.Service{ - PID: procTestService1.pid, - Name: "test-service-1", - GeneratedName: "test-service-1-generated", - GeneratedNameSource: "test-service-1-generated-source", - DDService: "test-service-1", - DDServiceInjected: true, - Ports: []uint16{8080}, - APMInstrumentation: string(apm.None), - RSS: 200 * 1024 * 1024, - CPUCores: 1.5, - CommandLine: []string{"test-service-1"}, - StartTimeMilli: procLaunchedMilli, - ContainerID: dummyContainerID, + PID: procTestService1.pid, + Name: "test-service-1", + GeneratedName: "test-service-1-generated", + GeneratedNameSource: "test-service-1-generated-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "service", + DDService: "test-service-1", + DDServiceInjected: true, + Ports: []uint16{8080}, + APMInstrumentation: string(apm.None), + RSS: 200 * 1024 * 1024, + CPUCores: 1.5, + CommandLine: []string{"test-service-1"}, + StartTimeMilli: procLaunchedMilli, + ContainerID: dummyContainerID, } portTCP8080DifferentPID = model.Service{ - PID: procTestService1DifferentPID.pid, - Name: "test-service-1", - GeneratedName: "test-service-1-generated", - GeneratedNameSource: "test-service-1-generated-source", - DDService: "test-service-1", - DDServiceInjected: true, - Ports: []uint16{8080}, - APMInstrumentation: string(apm.Injected), - CommandLine: []string{"test-service-1"}, - StartTimeMilli: procLaunchedMilli, - ContainerID: dummyContainerID, + PID: procTestService1DifferentPID.pid, + Name: "test-service-1", + GeneratedName: "test-service-1-generated", + GeneratedNameSource: "test-service-1-generated-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "service", + DDService: "test-service-1", + DDServiceInjected: true, + Ports: []uint16{8080}, + APMInstrumentation: string(apm.Injected), + CommandLine: []string{"test-service-1"}, + StartTimeMilli: procLaunchedMilli, + ContainerID: dummyContainerID, } portTCP8081 = model.Service{ PID: procIgnoreService1.pid, @@ -122,25 +128,29 @@ var ( ContainerID: dummyContainerID, } portTCP5000 = model.Service{ - PID: procPythonService.pid, - Name: "python-service", - GeneratedName: "python-service", - GeneratedNameSource: "python-service-source", - Language: "python", - Ports: []uint16{5000}, - CommandLine: pythonCommandLine, - StartTimeMilli: procLaunchedMilli, - ContainerID: dummyContainerID, + PID: procPythonService.pid, + Name: "python-service", + GeneratedName: "python-service", + GeneratedNameSource: "python-service-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "app", + Language: "python", + Ports: []uint16{5000}, + CommandLine: pythonCommandLine, + StartTimeMilli: procLaunchedMilli, + ContainerID: dummyContainerID, } portTCP5432 = model.Service{ - PID: procTestService1Repeat.pid, - Name: "test-service-1", - GeneratedName: "test-service-1", - GeneratedNameSource: "test-service-1-generated-source", - Ports: []uint16{5432}, - CommandLine: []string{"test-service-1"}, - StartTimeMilli: procLaunchedMilli, - ContainerID: dummyContainerID, + PID: procTestService1Repeat.pid, + Name: "test-service-1", + GeneratedName: "test-service-1", + GeneratedNameSource: "test-service-1-generated-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "service", + Ports: []uint16{5432}, + CommandLine: []string{"test-service-1"}, + StartTimeMilli: procLaunchedMilli, + ContainerID: dummyContainerID, } ) @@ -235,6 +245,8 @@ func Test_linuxImpl(t *testing.T) { ServiceName: "test-service-1", GeneratedServiceName: "test-service-1-generated", GeneratedServiceNameSource: "test-service-1-generated-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "service", DDService: "test-service-1", ServiceNameSource: "injected", ServiceType: "web_service", @@ -260,6 +272,8 @@ func Test_linuxImpl(t *testing.T) { ServiceName: "test-service-1", GeneratedServiceName: "test-service-1-generated", GeneratedServiceNameSource: "test-service-1-generated-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "service", DDService: "test-service-1", ServiceNameSource: "injected", ServiceType: "web_service", @@ -285,6 +299,8 @@ func Test_linuxImpl(t *testing.T) { ServiceName: "test-service-1", GeneratedServiceName: "test-service-1-generated", GeneratedServiceNameSource: "test-service-1-generated-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "service", DDService: "test-service-1", ServiceNameSource: "injected", ServiceType: "web_service", @@ -310,6 +326,8 @@ func Test_linuxImpl(t *testing.T) { ServiceName: "python-service", GeneratedServiceName: "python-service", GeneratedServiceNameSource: "python-service-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "app", ServiceType: "web_service", HostName: host, Env: "", @@ -331,6 +349,8 @@ func Test_linuxImpl(t *testing.T) { ServiceName: "python-service", GeneratedServiceName: "python-service", GeneratedServiceNameSource: "python-service-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "app", ServiceType: "web_service", HostName: host, Env: "", @@ -389,6 +409,8 @@ func Test_linuxImpl(t *testing.T) { ServiceName: "test-service-1", GeneratedServiceName: "test-service-1", GeneratedServiceNameSource: "test-service-1-generated-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "service", ServiceType: "db", HostName: host, Env: "", @@ -409,6 +431,8 @@ func Test_linuxImpl(t *testing.T) { ServiceName: "test-service-1", GeneratedServiceName: "test-service-1-generated", GeneratedServiceNameSource: "test-service-1-generated-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "service", DDService: "test-service-1", ServiceNameSource: "injected", ServiceType: "web_service", @@ -434,6 +458,8 @@ func Test_linuxImpl(t *testing.T) { ServiceName: "test-service-1", GeneratedServiceName: "test-service-1", GeneratedServiceNameSource: "test-service-1-generated-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "service", ServiceType: "db", HostName: host, Env: "", @@ -454,6 +480,8 @@ func Test_linuxImpl(t *testing.T) { ServiceName: "test-service-1", GeneratedServiceName: "test-service-1", GeneratedServiceNameSource: "test-service-1-generated-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "service", ServiceType: "db", HostName: host, Env: "", @@ -474,6 +502,8 @@ func Test_linuxImpl(t *testing.T) { ServiceName: "test-service-1", GeneratedServiceName: "test-service-1-generated", GeneratedServiceNameSource: "test-service-1-generated-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "service", DDService: "test-service-1", ServiceNameSource: "injected", ServiceType: "web_service", @@ -534,6 +564,8 @@ func Test_linuxImpl(t *testing.T) { ServiceName: "test-service-1", GeneratedServiceName: "test-service-1-generated", GeneratedServiceNameSource: "test-service-1-generated-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "service", DDService: "test-service-1", ServiceNameSource: "injected", ServiceType: "web_service", @@ -559,6 +591,8 @@ func Test_linuxImpl(t *testing.T) { ServiceName: "test-service-1", GeneratedServiceName: "test-service-1-generated", GeneratedServiceNameSource: "test-service-1-generated-source", + ContainerServiceName: "test-service-1-container", + ContainerServiceNameSource: "service", DDService: "test-service-1", ServiceNameSource: "injected", ServiceType: "web_service", diff --git a/pkg/collector/corechecks/servicediscovery/model/model.go b/pkg/collector/corechecks/servicediscovery/model/model.go index ccaa3fc2a961c..9a99681fe6cfc 100644 --- a/pkg/collector/corechecks/servicediscovery/model/model.go +++ b/pkg/collector/corechecks/servicediscovery/model/model.go @@ -8,21 +8,23 @@ package model // Service represents a listening process. type Service struct { - PID int `json:"pid"` - Name string `json:"name"` - GeneratedName string `json:"generated_name"` - GeneratedNameSource string `json:"generated_name_source"` - DDService string `json:"dd_service"` - DDServiceInjected bool `json:"dd_service_injected"` - CheckedContainerData bool `json:"checked_container_data"` - Ports []uint16 `json:"ports"` - APMInstrumentation string `json:"apm_instrumentation"` - Language string `json:"language"` - RSS uint64 `json:"rss"` - CommandLine []string `json:"cmdline"` - StartTimeMilli uint64 `json:"start_time"` - CPUCores float64 `json:"cpu_cores"` - ContainerID string `json:"container_id"` + PID int `json:"pid"` + Name string `json:"name"` + GeneratedName string `json:"generated_name"` + GeneratedNameSource string `json:"generated_name_source"` + ContainerServiceName string `json:"container_service_name"` + ContainerServiceNameSource string `json:"container_service_name_source"` + DDService string `json:"dd_service"` + DDServiceInjected bool `json:"dd_service_injected"` + CheckedContainerData bool `json:"checked_container_data"` + Ports []uint16 `json:"ports"` + APMInstrumentation string `json:"apm_instrumentation"` + Language string `json:"language"` + RSS uint64 `json:"rss"` + CommandLine []string `json:"cmdline"` + StartTimeMilli uint64 `json:"start_time"` + CPUCores float64 `json:"cpu_cores"` + ContainerID string `json:"container_id"` } // ServicesResponse is the response for the system-probe /discovery/services endpoint. diff --git a/pkg/collector/corechecks/servicediscovery/module/impl_linux.go b/pkg/collector/corechecks/servicediscovery/module/impl_linux.go index c70f64efeae37..dca31b0890c33 100644 --- a/pkg/collector/corechecks/servicediscovery/module/impl_linux.go +++ b/pkg/collector/corechecks/servicediscovery/module/impl_linux.go @@ -51,6 +51,7 @@ var _ module.Module = &discovery{} type serviceInfo struct { generatedName string generatedNameSource string + containerServiceName string ddServiceName string ddServiceInjected bool checkedContainerData bool @@ -600,7 +601,7 @@ func (s *discovery) updateServicesCPUStats(services []model.Service) error { return nil } -func getServiceNameFromContainerTags(tags []string) string { +func getServiceNameFromContainerTags(tags []string) (string, string) { // The tags we look for service name generation, in their priority order. // The map entries will be filled as we go through the containers tags. tagsPriority := []struct { @@ -641,10 +642,10 @@ func getServiceNameFromContainerTags(tags []string) string { } log.Debugf("Using %v:%v tag for service name", tag.tagName, *tag.tagValue) - return *tag.tagValue + return tag.tagName, *tag.tagValue } - return "" + return "", "" } func (s *discovery) enrichContainerData(service *model.Service, containers map[string]*agentPayload.Container, pidToCid map[int]string) { @@ -655,7 +656,7 @@ func (s *discovery) enrichContainerData(service *model.Service, containers map[s service.ContainerID = id - // We got the service name from container tags before, no need to do it again. + // We checked the container tags before, no need to do it again. if service.CheckedContainerData { return } @@ -665,25 +666,15 @@ func (s *discovery) enrichContainerData(service *model.Service, containers map[s return } - serviceName := getServiceNameFromContainerTags(container.Tags) - - if serviceName != "" { - service.GeneratedName = serviceName - // Update the legacy name field as well - if service.DDService == "" { - service.Name = serviceName - } - service.GeneratedNameSource = string(usm.Container) - } + tagName, serviceName := getServiceNameFromContainerTags(container.Tags) + service.ContainerServiceName = serviceName + service.ContainerServiceNameSource = tagName service.CheckedContainerData = true s.mux.Lock() serviceInfo, ok := s.cache[int32(service.PID)] if ok { - if serviceName != "" { - serviceInfo.generatedName = serviceName - serviceInfo.generatedNameSource = string(usm.Container) - } + serviceInfo.containerServiceName = serviceName serviceInfo.checkedContainerData = true } s.mux.Unlock() diff --git a/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go b/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go index 6970f36651c8f..a578ccce8cc8e 100644 --- a/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go +++ b/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go @@ -847,9 +847,11 @@ func TestDocker(t *testing.T) { require.Contains(t, portMap, pid1111) require.Contains(t, portMap[pid1111].Ports, uint16(1234)) require.Contains(t, portMap[pid1111].ContainerID, "dummyCID") - require.Contains(t, portMap[pid1111].Name, "foo_from_app_tag") - require.Contains(t, portMap[pid1111].GeneratedName, "foo_from_app_tag") - require.Contains(t, portMap[pid1111].GeneratedNameSource, string(usm.Container)) + require.Contains(t, portMap[pid1111].Name, "http.server") + require.Contains(t, portMap[pid1111].GeneratedName, "http.server") + require.Contains(t, portMap[pid1111].GeneratedNameSource, string(usm.CommandLine)) + require.Contains(t, portMap[pid1111].ContainerServiceName, "foo_from_app_tag") + require.Contains(t, portMap[pid1111].ContainerServiceNameSource, "app") } // Check that the cache is cleaned when procceses die. @@ -922,56 +924,67 @@ func TestTagsPriority(t *testing.T) { cases := []struct { name string tags []string + expectedTagName string expectedServiceName string }{ { "nil tag list", nil, "", + "", }, { "empty tag list", []string{}, "", + "", }, { "no useful tags", []string{"foo:bar"}, "", + "", }, { "malformed tag", []string{"foobar"}, "", + "", }, { "service tag", []string{"service:foo"}, + "service", "foo", }, { "app tag", []string{"app:foo"}, + "app", "foo", }, { "short_image tag", []string{"short_image:foo"}, + "short_image", "foo", }, { "kube_container_name tag", []string{"kube_container_name:foo"}, + "kube_container_name", "foo", }, { "kube_deployment tag", []string{"kube_deployment:foo"}, + "kube_deployment", "foo", }, { "kube_service tag", []string{"kube_service:foo"}, + "kube_service", "foo", }, { @@ -982,6 +995,7 @@ func TestTagsPriority(t *testing.T) { "service:my_service", "malformed", }, + "service", "my_service", }, { @@ -990,6 +1004,7 @@ func TestTagsPriority(t *testing.T) { "service:", "app:foo", }, + "app", "foo", }, { @@ -1001,6 +1016,7 @@ func TestTagsPriority(t *testing.T) { "service:my_service", "malformed", }, + "service", "my_service", }, { @@ -1013,14 +1029,16 @@ func TestTagsPriority(t *testing.T) { "app:my_app", "service:my_service", }, + "service", "my_service", }, } for _, c := range cases { t.Run(c.name, func(t *testing.T) { - name := getServiceNameFromContainerTags(c.tags) + tagName, name := getServiceNameFromContainerTags(c.tags) require.Equalf(t, c.expectedServiceName, name, "got wrong service name from container tags") + require.Equalf(t, c.expectedTagName, tagName, "got wrong tag name for service naming") }) } } diff --git a/pkg/collector/corechecks/servicediscovery/usm/service.go b/pkg/collector/corechecks/servicediscovery/usm/service.go index 407b77179dfb7..89bfd3cfb6003 100644 --- a/pkg/collector/corechecks/servicediscovery/usm/service.go +++ b/pkg/collector/corechecks/servicediscovery/usm/service.go @@ -64,8 +64,6 @@ type ServiceNameSource string const ( // CommandLine indicates that the name comes from the command line CommandLine ServiceNameSource = "command-line" - // Container indicates the name comes from the container tags - Container ServiceNameSource = "container" // Laravel indicates that the name comes from the Laravel application name Laravel ServiceNameSource = "laravel" // Python indicates that the name comes from the Python package name From b1ed33fe5cf53db5565d675898bcd83ea3d29893 Mon Sep 17 00:00:00 2001 From: Vincent Whitchurch Date: Wed, 11 Dec 2024 18:50:09 +0100 Subject: [PATCH 138/303] usm: kafka: Check packet size before load (#32028) --- pkg/network/ebpf/c/protocols/kafka/kafka-parsing.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/network/ebpf/c/protocols/kafka/kafka-parsing.h b/pkg/network/ebpf/c/protocols/kafka/kafka-parsing.h index 81af62163fa9f..b4dfe339107e5 100644 --- a/pkg/network/ebpf/c/protocols/kafka/kafka-parsing.h +++ b/pkg/network/ebpf/c/protocols/kafka/kafka-parsing.h @@ -1602,6 +1602,12 @@ static __always_inline bool kafka_process(conn_tuple_t *tup, kafka_info_t *kafka */ u32 offset = pktbuf_data_offset(pkt); + u32 pktlen = pktbuf_data_end(pkt) - offset; + + if (pktlen < sizeof(kafka_header_t)) { + return false; + } + kafka_transaction_t *kafka_transaction = &kafka->event.transaction; kafka_header_t kafka_header; bpf_memset(&kafka_header, 0, sizeof(kafka_header)); From ebe2afff96984bf1de2f97fd8a1fda6d60f210df Mon Sep 17 00:00:00 2001 From: Vincent Whitchurch Date: Wed, 11 Dec 2024 18:50:43 +0100 Subject: [PATCH 139/303] usm: Remove telemetry from load in big endian helper (#32030) --- pkg/network/ebpf/c/protocols/helpers/big_endian.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/network/ebpf/c/protocols/helpers/big_endian.h b/pkg/network/ebpf/c/protocols/helpers/big_endian.h index 0b9d6ff14c022..b0867ce719d7b 100644 --- a/pkg/network/ebpf/c/protocols/helpers/big_endian.h +++ b/pkg/network/ebpf/c/protocols/helpers/big_endian.h @@ -16,7 +16,7 @@ } \ type val; \ bpf_memset(&val, 0, sizeof(type)); \ - bpf_skb_load_bytes_with_telemetry(skb, offset, &val, sizeof(type)); \ + bpf_skb_load_bytes(skb, offset, &val, sizeof(type)); \ *out = transformer(val); \ return true; \ } From 3c882e71c8b1830d40be8d4cfae580e40414d207 Mon Sep 17 00:00:00 2001 From: Raphael Gavache Date: Wed, 11 Dec 2024 18:51:29 +0100 Subject: [PATCH 140/303] [fleet] Improvements to script telemetry (#32022) --- cmd/installer-downloader/main.go | 4 ++-- pkg/fleet/internal/exec/installer_exec.go | 2 +- pkg/fleet/telemetry/telemetry.go | 23 +++++++++++++++++------ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/cmd/installer-downloader/main.go b/cmd/installer-downloader/main.go index db35a6c337519..45c628dc13069 100644 --- a/cmd/installer-downloader/main.go +++ b/cmd/installer-downloader/main.go @@ -48,7 +48,7 @@ func main() { _ = t.Start(ctx) defer func() { _ = t.Stop(ctx) }() var err error - span, ctx := telemetry.StartSpanFromEnv(ctx, "downloader") + span, ctx := telemetry.StartSpanFromEnv(ctx, fmt.Sprintf("downloader-%s", Flavor)) defer func() { span.Finish(tracer.WithError(err)) }() err = runDownloader(ctx, env, Version, Flavor) if err != nil { @@ -74,7 +74,7 @@ func runDownloader(ctx context.Context, env *env.Env, version string, flavor str cmd := exec.CommandContext(ctx, filepath.Join(tmpDir, installerBinPath), "setup", "--flavor", flavor) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr - cmd.Env = os.Environ() + cmd.Env = append(os.Environ(), telemetry.EnvFromContext(ctx)...) err = cmd.Run() if err != nil { return fmt.Errorf("failed to run installer: %w", err) diff --git a/pkg/fleet/internal/exec/installer_exec.go b/pkg/fleet/internal/exec/installer_exec.go index 29ca01999dcb9..74b7a49beb897 100644 --- a/pkg/fleet/internal/exec/installer_exec.go +++ b/pkg/fleet/internal/exec/installer_exec.go @@ -58,7 +58,7 @@ func (i *InstallerExec) newInstallerCmd(ctx context.Context, command string, arg return cmd.Process.Signal(os.Interrupt) } } - env = append(env, telemetry.EnvFromSpanContext(span.Context())...) + env = append(env, telemetry.EnvFromContext(ctx)...) cmd.Env = env cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr diff --git a/pkg/fleet/telemetry/telemetry.go b/pkg/fleet/telemetry/telemetry.go index b63bdfb0de764..f484e06822cd4 100644 --- a/pkg/fleet/telemetry/telemetry.go +++ b/pkg/fleet/telemetry/telemetry.go @@ -11,9 +11,11 @@ import ( "errors" "fmt" "io" + "math/rand/v2" "net" "net/http" "os" + "strconv" "strings" "sync" @@ -216,8 +218,14 @@ func StartSpanFromEnv(ctx context.Context, operationName string, spanOptions ... // spanContextFromEnv injects the traceID and parentID from the environment into the context if available. func spanContextFromEnv() (ddtrace.SpanContext, bool) { - traceID := os.Getenv(EnvTraceID) - parentID := os.Getenv(EnvParentID) + traceID, ok := os.LookupEnv(EnvTraceID) + if !ok { + traceID = strconv.FormatUint(rand.Uint64(), 10) + } + parentID, ok := os.LookupEnv(EnvParentID) + if !ok { + parentID = "0" + } ctxCarrier := tracer.TextMapCarrier{ tracer.DefaultTraceIDHeader: traceID, tracer.DefaultParentIDHeader: parentID, @@ -231,13 +239,16 @@ func spanContextFromEnv() (ddtrace.SpanContext, bool) { return spanCtx, true } -// EnvFromSpanContext returns the environment variables for the span context. -func EnvFromSpanContext(spanCtx ddtrace.SpanContext) []string { - env := []string{ +// EnvFromContext returns the environment variables for the context. +func EnvFromContext(ctx context.Context) []string { + spanCtx, ok := SpanContextFromContext(ctx) + if !ok { + return []string{} + } + return []string{ fmt.Sprintf("%s=%d", EnvTraceID, spanCtx.TraceID()), fmt.Sprintf("%s=%d", EnvParentID, spanCtx.SpanID()), } - return env } // SpanContextFromContext extracts the span context from the context if available. From c7f3db37bc333998c332892433071dc2cba1554f Mon Sep 17 00:00:00 2001 From: Branden Clark Date: Wed, 11 Dec 2024 14:44:38 -0500 Subject: [PATCH 141/303] Publish FIPS Agent release artifacts (#32035) --- .gitlab/deploy_packages/windows.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/.gitlab/deploy_packages/windows.yml b/.gitlab/deploy_packages/windows.yml index 6ef503bc234be..dd794d832b56c 100644 --- a/.gitlab/deploy_packages/windows.yml +++ b/.gitlab/deploy_packages/windows.yml @@ -69,3 +69,23 @@ deploy_installer_packages_windows-x64: --include "datadog-installer-*-1-x86_64.zip" --include "datadog-installer-*-1-x86_64.exe" $OMNIBUS_PACKAGE_DIR $S3_RELEASE_INSTALLER_ARTIFACTS_URI/msi/x86_64/ + +deploy_packages_windows-x64-7-fips: + rules: + !reference [.on_deploy] + stage: deploy_packages + image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES + tags: ["arch:amd64"] + needs: ["windows_msi_and_bosh_zip_x64-a7-fips"] + before_script: + - ls $OMNIBUS_PACKAGE_DIR + script: + - $S3_CP_CMD + --recursive + --exclude "*" + --include "datadog-fips-agent-7*.msi" + --include "datadog-fips-agent-7*.debug.zip" + $OMNIBUS_PACKAGE_DIR $S3_RELEASE_ARTIFACTS_URI/msi/x86_64/ + artifacts: + paths: + - $OMNIBUS_PACKAGE_DIR From c88488aab3e7287fd3954ed0f56ccff77f020412 Mon Sep 17 00:00:00 2001 From: Bryce Kahle Date: Wed, 11 Dec 2024 12:18:38 -0800 Subject: [PATCH 142/303] move processes/networks to simpler sysprobe client (#31365) --- .github/CODEOWNERS | 1 - pkg/networkdevice/pinger/pinger_linux.go | 45 ++- pkg/networkpath/traceroute/sysprobe.go | 57 +++ .../traceroute/traceroute_linux.go | 20 +- .../traceroute/traceroute_windows.go | 19 +- pkg/process/checks/container.go | 14 +- pkg/process/checks/net.go | 90 +++-- pkg/process/checks/process.go | 61 +-- pkg/process/checks/process_rt.go | 9 +- pkg/process/checks/sysprobe_stats_test.go | 34 +- pkg/process/net/common.go | 252 +----------- pkg/process/net/common_all.go | 9 +- pkg/process/net/common_linux.go | 56 --- pkg/process/net/common_unsupported.go | 65 +-- pkg/process/net/common_windows.go | 63 --- pkg/process/net/mocks/sys_probe_util.go | 382 ------------------ pkg/process/net/shared.go | 28 -- 17 files changed, 231 insertions(+), 974 deletions(-) create mode 100644 pkg/networkpath/traceroute/sysprobe.go delete mode 100644 pkg/process/net/common_linux.go delete mode 100644 pkg/process/net/common_windows.go delete mode 100644 pkg/process/net/mocks/sys_probe_util.go delete mode 100644 pkg/process/net/shared.go diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 1569d87fd96ef..042dc565a8f9f 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -493,7 +493,6 @@ /pkg/process/metadata/parser/*windows* @DataDog/universal-service-monitoring @DataDog/processes @DataDog/Networks @DataDog/windows-kernel-integrations /pkg/process/monitor/ @DataDog/universal-service-monitoring /pkg/process/net/ @DataDog/universal-service-monitoring @DataDog/Networks -/pkg/process/net/common_windows.go @DataDog/windows-agent /pkg/proto/datadog/remoteconfig/ @DataDog/remote-config /pkg/proto/pbgo/ # do not notify anyone /pkg/proto/pbgo/trace @DataDog/agent-apm diff --git a/pkg/networkdevice/pinger/pinger_linux.go b/pkg/networkdevice/pinger/pinger_linux.go index 89476acbc920b..5b8ff36bac672 100644 --- a/pkg/networkdevice/pinger/pinger_linux.go +++ b/pkg/networkdevice/pinger/pinger_linux.go @@ -9,10 +9,13 @@ package pinger import ( "encoding/json" + "fmt" + "net/http" + "time" + sysprobeclient "github.com/DataDog/datadog-agent/cmd/system-probe/api/client" + sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" - "github.com/DataDog/datadog-agent/pkg/process/net" - "github.com/DataDog/datadog-agent/pkg/util/log" ) const ( @@ -22,14 +25,16 @@ const ( // LinuxPinger implements the Pinger interface for // Linux users type LinuxPinger struct { - cfg Config + cfg Config + sysprobeClient *http.Client } // New creates a LinuxPinger using the passed in // config func New(cfg Config) (Pinger, error) { return &LinuxPinger{ - cfg: cfg, + cfg: cfg, + sysprobeClient: sysprobeclient.Get(pkgconfigsetup.SystemProbe().GetString("system_probe_config.sysprobe_socket")), }, nil } @@ -41,21 +46,41 @@ func (p *LinuxPinger) Ping(host string) (*Result, error) { return RunPing(&p.cfg, host) } - tu, err := net.GetRemoteSystemProbeUtil( - pkgconfigsetup.SystemProbe().GetString("system_probe_config.sysprobe_socket")) + return getPing(p.sysprobeClient, clientID, host, p.cfg.Count, p.cfg.Interval, p.cfg.Timeout) +} + +func getPing(client *http.Client, clientID string, host string, count int, interval time.Duration, timeout time.Duration) (*Result, error) { + url := sysprobeclient.ModuleURL(sysconfig.PingModule, fmt.Sprintf("/ping/%s?client_id=%s&count=%d&interval=%d&timeout=%d", host, clientID, count, interval, timeout)) + req, err := http.NewRequest("GET", url, nil) if err != nil { - log.Warnf("could not initialize system-probe connection: %s", err.Error()) return nil, err } - resp, err := tu.GetPing(clientID, host, p.cfg.Count, p.cfg.Interval, p.cfg.Timeout) + + req.Header.Set("Accept", "application/json") + resp, err := client.Do(req) if err != nil { return nil, err } + defer resp.Body.Close() - var result Result - if err := json.Unmarshal(resp, &result); err != nil { + if resp.StatusCode == http.StatusBadRequest { + body, err := sysprobeclient.ReadAllResponseBody(resp) + if err != nil { + return nil, fmt.Errorf("ping request failed: url: %s, status code: %d", req.URL, resp.StatusCode) + } + return nil, fmt.Errorf("ping request failed: url: %s, status code: %d, error: %s", req.URL, resp.StatusCode, string(body)) + } else if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("ping request failed: url: %s, status code: %d", req.URL, resp.StatusCode) + } + + body, err := sysprobeclient.ReadAllResponseBody(resp) + if err != nil { return nil, err } + var result Result + if err := json.Unmarshal(body, &result); err != nil { + return nil, err + } return &result, nil } diff --git a/pkg/networkpath/traceroute/sysprobe.go b/pkg/networkpath/traceroute/sysprobe.go new file mode 100644 index 0000000000000..f95974f059a88 --- /dev/null +++ b/pkg/networkpath/traceroute/sysprobe.go @@ -0,0 +1,57 @@ +// 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 2024-present Datadog, Inc. + +//go:build linux || windows + +package traceroute + +import ( + "context" + "fmt" + "net/http" + "time" + + sysprobeclient "github.com/DataDog/datadog-agent/cmd/system-probe/api/client" + sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" + "github.com/DataDog/datadog-agent/pkg/networkpath/payload" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +func getTraceroute(client *http.Client, clientID string, host string, port uint16, protocol payload.Protocol, maxTTL uint8, timeout time.Duration) ([]byte, error) { + httpTimeout := timeout*time.Duration(maxTTL) + 10*time.Second // allow extra time for the system probe communication overhead, calculate full timeout for TCP traceroute + log.Tracef("Network Path traceroute HTTP request timeout: %s", httpTimeout) + ctx, cancel := context.WithTimeout(context.Background(), httpTimeout) + defer cancel() + + url := sysprobeclient.ModuleURL(sysconfig.TracerouteModule, fmt.Sprintf("/traceroute/%s?client_id=%s&port=%d&max_ttl=%d&timeout=%d&protocol=%s", host, clientID, port, maxTTL, timeout, protocol)) + req, err := http.NewRequestWithContext(ctx, "GET", url, nil) + if err != nil { + return nil, err + } + + req.Header.Set("Accept", "application/json") + resp, err := client.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode == http.StatusBadRequest { + body, err := sysprobeclient.ReadAllResponseBody(resp) + if err != nil { + return nil, fmt.Errorf("traceroute request failed: url: %s, status code: %d", req.URL, resp.StatusCode) + } + return nil, fmt.Errorf("traceroute request failed: url: %s, status code: %d, error: %s", req.URL, resp.StatusCode, string(body)) + } else if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("traceroute request failed: url: %s, status code: %d", req.URL, resp.StatusCode) + } + + body, err := sysprobeclient.ReadAllResponseBody(resp) + if err != nil { + return nil, err + } + + return body, nil +} diff --git a/pkg/networkpath/traceroute/traceroute_linux.go b/pkg/networkpath/traceroute/traceroute_linux.go index 536d360f4f6c3..e3d54f61ccf48 100644 --- a/pkg/networkpath/traceroute/traceroute_linux.go +++ b/pkg/networkpath/traceroute/traceroute_linux.go @@ -10,12 +10,13 @@ package traceroute import ( "context" "encoding/json" + "net/http" + sysprobeclient "github.com/DataDog/datadog-agent/cmd/system-probe/api/client" "github.com/DataDog/datadog-agent/comp/core/telemetry" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/networkpath/payload" "github.com/DataDog/datadog-agent/pkg/networkpath/traceroute/config" - "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -27,7 +28,8 @@ const ( // running traceroute from an agent running // on Linux type LinuxTraceroute struct { - cfg config.Config + cfg config.Config + sysprobeClient *http.Client } // New creates a new instance of LinuxTraceroute @@ -36,19 +38,17 @@ func New(cfg config.Config, _ telemetry.Component) (*LinuxTraceroute, error) { log.Debugf("Creating new traceroute with config: %+v", cfg) return &LinuxTraceroute{ cfg: cfg, + sysprobeClient: &http.Client{ + Transport: &http.Transport{ + DialContext: sysprobeclient.DialContextFunc(pkgconfigsetup.SystemProbe().GetString("system_probe_config.sysprobe_socket")), + }, + }, }, nil } // Run executes a traceroute func (l *LinuxTraceroute) Run(_ context.Context) (payload.NetworkPath, error) { - tu, err := net.GetRemoteSystemProbeUtil( - pkgconfigsetup.SystemProbe().GetString("system_probe_config.sysprobe_socket")) - if err != nil { - log.Warnf("could not initialize system-probe connection: %s", err.Error()) - return payload.NetworkPath{}, err - } - - resp, err := tu.GetTraceroute(clientID, l.cfg.DestHostname, l.cfg.DestPort, l.cfg.Protocol, l.cfg.MaxTTL, l.cfg.Timeout) + resp, err := getTraceroute(l.sysprobeClient, clientID, l.cfg.DestHostname, l.cfg.DestPort, l.cfg.Protocol, l.cfg.MaxTTL, l.cfg.Timeout) if err != nil { return payload.NetworkPath{}, err } diff --git a/pkg/networkpath/traceroute/traceroute_windows.go b/pkg/networkpath/traceroute/traceroute_windows.go index 316caabd7cb03..8e05c249e4a35 100644 --- a/pkg/networkpath/traceroute/traceroute_windows.go +++ b/pkg/networkpath/traceroute/traceroute_windows.go @@ -11,12 +11,13 @@ import ( "context" "encoding/json" "errors" + "net/http" + sysprobeclient "github.com/DataDog/datadog-agent/cmd/system-probe/api/client" "github.com/DataDog/datadog-agent/comp/core/telemetry" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/networkpath/payload" "github.com/DataDog/datadog-agent/pkg/networkpath/traceroute/config" - "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -29,7 +30,8 @@ const ( // running traceroute from an agent running // on Windows type WindowsTraceroute struct { - cfg config.Config + cfg config.Config + sysprobeClient *http.Client } // New creates a new instance of WindowsTraceroute @@ -44,18 +46,17 @@ func New(cfg config.Config, _ telemetry.Component) (*WindowsTraceroute, error) { return &WindowsTraceroute{ cfg: cfg, + sysprobeClient: &http.Client{ + Transport: &http.Transport{ + DialContext: sysprobeclient.DialContextFunc(pkgconfigsetup.SystemProbe().GetString("system_probe_config.sysprobe_socket")), + }, + }, }, nil } // Run executes a traceroute func (w *WindowsTraceroute) Run(_ context.Context) (payload.NetworkPath, error) { - tu, err := net.GetRemoteSystemProbeUtil( - pkgconfigsetup.SystemProbe().GetString("system_probe_config.sysprobe_socket")) - if err != nil { - log.Warnf("could not initialize system-probe connection: %s", err.Error()) - return payload.NetworkPath{}, err - } - resp, err := tu.GetTraceroute(clientID, w.cfg.DestHostname, w.cfg.DestPort, w.cfg.Protocol, w.cfg.MaxTTL, w.cfg.Timeout) + resp, err := getTraceroute(w.sysprobeClient, clientID, w.cfg.DestHostname, w.cfg.DestPort, w.cfg.Protocol, w.cfg.MaxTTL, w.cfg.Timeout) if err != nil { return payload.NetworkPath{}, err } diff --git a/pkg/process/checks/container.go b/pkg/process/checks/container.go index 533c6f55a050f..3d18e0ed02daf 100644 --- a/pkg/process/checks/container.go +++ b/pkg/process/checks/container.go @@ -8,14 +8,15 @@ package checks import ( "fmt" "math" + "net/http" "sync" "time" model "github.com/DataDog/agent-payload/v5/process" + "github.com/DataDog/datadog-agent/cmd/system-probe/api/client" workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" pkgconfigmodel "github.com/DataDog/datadog-agent/pkg/config/model" - "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/process/statsd" proccontainers "github.com/DataDog/datadog-agent/pkg/process/util/containers" "github.com/DataDog/datadog-agent/pkg/util/flavor" @@ -49,6 +50,8 @@ type ContainerCheck struct { maxBatchSize int wmeta workloadmeta.Component + + sysprobeClient *http.Client } // Init initializes a ContainerCheck instance. @@ -60,16 +63,11 @@ func (c *ContainerCheck) Init(syscfg *SysProbeConfig, info *HostInfo, _ bool) er c.containerProvider = sharedContainerProvider c.hostInfo = info - var tu net.SysProbeUtil if syscfg.NetworkTracerModuleEnabled { - // Calling the remote tracer will cause it to initialize and check connectivity - tu, err = net.GetRemoteSystemProbeUtil(syscfg.SystemProbeAddress) - if err != nil { - log.Warnf("could not initiate connection with system probe: %s", err) - } + c.sysprobeClient = client.Get(syscfg.SystemProbeAddress) } - networkID, err := retryGetNetworkID(tu) + networkID, err := retryGetNetworkID(c.sysprobeClient) if err != nil { log.Infof("no network ID detected: %s", err) } diff --git a/pkg/process/checks/net.go b/pkg/process/checks/net.go index 054ce6a4fb670..169cf139ac995 100644 --- a/pkg/process/checks/net.go +++ b/pkg/process/checks/net.go @@ -7,15 +7,16 @@ package checks import ( "context" - "errors" + "fmt" + "net/http" "runtime" "sort" "time" - "github.com/benbjohnson/clock" - model "github.com/DataDog/agent-payload/v5/process" + "github.com/benbjohnson/clock" + sysprobeclient "github.com/DataDog/datadog-agent/cmd/system-probe/api/client" sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" sysconfigtypes "github.com/DataDog/datadog-agent/cmd/system-probe/config/types" workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" @@ -23,6 +24,7 @@ import ( "github.com/DataDog/datadog-agent/comp/networkpath/npcollector" pkgconfigmodel "github.com/DataDog/datadog-agent/pkg/config/model" "github.com/DataDog/datadog-agent/pkg/network/dns" + netEncoding "github.com/DataDog/datadog-agent/pkg/network/encoding/unmarshal" "github.com/DataDog/datadog-agent/pkg/process/metadata/parser" "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/process/net/resolver" @@ -39,9 +41,6 @@ const ( ) var ( - // ErrTracerStillNotInitialized signals that the tracer is _still_ not ready, so we shouldn't log additional errors - ErrTracerStillNotInitialized = errors.New("remote tracer is still not initialized") - // ProcessAgentClientID process-agent unique ID ProcessAgentClientID = "process-agent-unique-id" ) @@ -65,7 +64,6 @@ type ConnectionsCheck struct { hostInfo *HostInfo maxConnsPerMessage int - tracerClientID string networkID string notInitializedLogLimit *log.Limit @@ -79,6 +77,8 @@ type ConnectionsCheck struct { wmeta workloadmeta.Component npCollector npcollector.Component + + sysprobeClient *http.Client } // ProcessConnRates describes connection rates for processes @@ -89,25 +89,16 @@ func (c *ConnectionsCheck) Init(syscfg *SysProbeConfig, hostInfo *HostInfo, _ bo c.hostInfo = hostInfo c.maxConnsPerMessage = syscfg.MaxConnsPerMessage c.notInitializedLogLimit = log.NewLogLimit(1, time.Minute*10) + c.sysprobeClient = sysprobeclient.Get(syscfg.SystemProbeAddress) - // We use the current process PID as the system-probe client ID - c.tracerClientID = ProcessAgentClientID - - // Calling the remote tracer will cause it to initialize and check connectivity - tu, err := net.GetRemoteSystemProbeUtil(syscfg.SystemProbeAddress) - + // Register process agent as a system probe's client + // This ensures we start recording data from now to the first call to `Run` + err := c.register() if err != nil { - log.Warnf("could not initiate connection with system probe: %s", err) - } else { - // Register process agent as a system probe's client - // This ensures we start recording data from now to the first call to `Run` - err = tu.Register(c.tracerClientID) - if err != nil { - log.Warnf("could not register process-agent to system-probe: %s", err) - } + log.Warnf("could not register process-agent to system-probe: %s", err) } - networkID, err := retryGetNetworkID(tu) + networkID, err := retryGetNetworkID(c.sysprobeClient) if err != nil { log.Infof("no network ID detected: %s", err) } @@ -172,10 +163,6 @@ func (c *ConnectionsCheck) Run(nextGroupID func() int32, _ *RunOptions) (RunResu conns, err := c.getConnections() if err != nil { - // If the tracer is not initialized, or still not initialized, then we want to exit without error'ing - if errors.Is(err, net.ErrNotImplemented) || errors.Is(err, ErrTracerStillNotInitialized) { - return nil, nil - } return nil, err } @@ -205,15 +192,48 @@ func (c *ConnectionsCheck) Cleanup() { c.localresolver.Stop() } +func (c *ConnectionsCheck) register() error { + url := sysprobeclient.ModuleURL(sysconfig.NetworkTracerModule, "/register?client_id="+ProcessAgentClientID) + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return err + } + + resp, err := c.sysprobeClient.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("conn request failed: url: %s, status code: %d", req.URL, resp.StatusCode) + } + return nil +} + func (c *ConnectionsCheck) getConnections() (*model.Connections, error) { - tu, err := net.GetRemoteSystemProbeUtil(c.syscfg.SocketAddress) + url := sysprobeclient.ModuleURL(sysconfig.NetworkTracerModule, "/connections?client_id="+ProcessAgentClientID) + req, err := http.NewRequest("GET", url, nil) if err != nil { - if c.notInitializedLogLimit.ShouldLog() { - log.Warnf("could not initialize system-probe connection: %v (will only log every 10 minutes)", err) - } - return nil, ErrTracerStillNotInitialized + return nil, err } - return tu.GetConnections(c.tracerClientID) + + req.Header.Set("Accept", "application/protobuf") + resp, err := c.sysprobeClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("conn request failed: url: %s, status code: %d", req.URL, resp.StatusCode) + } + + body, err := sysprobeclient.ReadAllResponseBody(resp) + if err != nil { + return nil, err + } + + contentType := resp.Header.Get("Content-type") + return netEncoding.GetUnmarshaler(contentType).Unmarshal(body) } func (c *ConnectionsCheck) notifyProcessConnRates(config pkgconfigmodel.Reader, conns *model.Connections) { @@ -509,11 +529,11 @@ func convertAndEnrichWithServiceCtx(tags []string, tagOffsets []uint32, serviceC } // fetches network_id from the current netNS or from the system probe if necessary, where the root netNS is used -func retryGetNetworkID(sysProbeUtil net.SysProbeUtil) (string, error) { +func retryGetNetworkID(sysProbeClient *http.Client) (string, error) { networkID, err := cloudproviders.GetNetworkID(context.TODO()) - if err != nil && sysProbeUtil != nil { + if err != nil && sysProbeClient != nil { log.Infof("no network ID detected. retrying via system-probe: %s", err) - networkID, err = sysProbeUtil.GetNetworkID() + networkID, err = net.GetNetworkID(sysProbeClient) if err != nil { log.Infof("failed to get network ID from system-probe: %s", err) return "", err diff --git a/pkg/process/checks/process.go b/pkg/process/checks/process.go index f1837d183e540..2fd7fe7e1c3fd 100644 --- a/pkg/process/checks/process.go +++ b/pkg/process/checks/process.go @@ -9,6 +9,7 @@ import ( "errors" "fmt" "math" + "net/http" "regexp" "strings" "time" @@ -17,6 +18,7 @@ import ( "github.com/shirou/gopsutil/v3/cpu" "go.uber.org/atomic" + "github.com/DataDog/datadog-agent/cmd/system-probe/api/client" workloadmetacomp "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" pkgconfigmodel "github.com/DataDog/datadog-agent/pkg/config/model" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" @@ -123,6 +125,8 @@ type ProcessCheck struct { serviceExtractor *parser.ServiceExtractor wmeta workloadmetacomp.Component + + sysprobeClient *http.Client } // Init initializes the singleton ProcessCheck. @@ -140,17 +144,11 @@ func (p *ProcessCheck) Init(syscfg *SysProbeConfig, info *HostInfo, oneShot bool p.notInitializedLogLimit = log.NewLogLimit(1, time.Minute*10) - var tu net.SysProbeUtil - - if syscfg.NetworkTracerModuleEnabled { - // Calling the remote tracer will cause it to initialize and check connectivity - tu, err = net.GetRemoteSystemProbeUtil(syscfg.SystemProbeAddress) - if err != nil { - log.Warnf("could not initiate connection with system probe: %s", err) - } + if syscfg.NetworkTracerModuleEnabled || syscfg.ProcessModuleEnabled { + p.sysprobeClient = client.Get(syscfg.SystemProbeAddress) } - networkID, err := retryGetNetworkID(tu) + networkID, err := retryGetNetworkID(p.sysprobeClient) if err != nil { log.Infof("no network ID detected: %s", err) } @@ -271,8 +269,13 @@ func (p *ProcessCheck) run(groupID int32, collectRealTime bool) (RunResult, erro p.lastPIDs = append(p.lastPIDs, pid) } - if sysProbeUtil := p.getRemoteSysProbeUtil(); sysProbeUtil != nil { - mergeProcWithSysprobeStats(p.lastPIDs, procs, sysProbeUtil) + if p.sysprobeClient != nil && p.sysProbeConfig.ProcessModuleEnabled { + pStats, err := net.GetProcStats(p.sysprobeClient, p.lastPIDs) + if err == nil { + mergeProcWithSysprobeStats(procs, pStats) + } else { + log.Debugf("cannot do GetProcStats from system-probe for process check: %s", err) + } } var containers []*model.Container @@ -661,36 +664,16 @@ func skipProcess( return false } -func (p *ProcessCheck) getRemoteSysProbeUtil() net.SysProbeUtil { - if !p.sysProbeConfig.ProcessModuleEnabled { - return nil - } - - pu, err := net.GetRemoteSystemProbeUtil(p.sysProbeConfig.SystemProbeAddress) - if err != nil { - if p.notInitializedLogLimit.ShouldLog() { - log.Warnf("could not initialize system-probe connection in process check: %v (will only log every 10 minutes)", err) - } - return nil - } - return pu -} - // mergeProcWithSysprobeStats takes a process by PID map and fill the stats from system probe into the processes in the map -func mergeProcWithSysprobeStats(pids []int32, procs map[int32]*procutil.Process, pu net.SysProbeUtil) { - pStats, err := pu.GetProcStats(pids) - if err == nil { - for pid, proc := range procs { - if s, ok := pStats.StatsByPID[pid]; ok { - proc.Stats.OpenFdCount = s.OpenFDCount - proc.Stats.IOStat.ReadCount = s.ReadCount - proc.Stats.IOStat.WriteCount = s.WriteCount - proc.Stats.IOStat.ReadBytes = s.ReadBytes - proc.Stats.IOStat.WriteBytes = s.WriteBytes - } +func mergeProcWithSysprobeStats(procs map[int32]*procutil.Process, pStats *model.ProcStatsWithPermByPID) { + for pid, proc := range procs { + if s, ok := pStats.StatsByPID[pid]; ok { + proc.Stats.OpenFdCount = s.OpenFDCount + proc.Stats.IOStat.ReadCount = s.ReadCount + proc.Stats.IOStat.WriteCount = s.WriteCount + proc.Stats.IOStat.ReadBytes = s.ReadBytes + proc.Stats.IOStat.WriteBytes = s.WriteBytes } - } else { - log.Debugf("cannot do GetProcStats from system-probe for process check: %s", err) } } diff --git a/pkg/process/checks/process_rt.go b/pkg/process/checks/process_rt.go index 33bf93f06a793..04be7253f42e4 100644 --- a/pkg/process/checks/process_rt.go +++ b/pkg/process/checks/process_rt.go @@ -6,6 +6,7 @@ package checks import ( + "net/http" "time" model "github.com/DataDog/agent-payload/v5/process" @@ -38,8 +39,8 @@ func (p *ProcessCheck) runRealtime(groupID int32) (RunResult, error) { return nil, err } - if sysProbeUtil := p.getRemoteSysProbeUtil(); sysProbeUtil != nil { - mergeStatWithSysprobeStats(p.lastPIDs, procs, sysProbeUtil) + if p.sysprobeClient != nil && p.sysProbeConfig.ProcessModuleEnabled { + mergeStatWithSysprobeStats(p.lastPIDs, procs, p.sysprobeClient) } var containers []*model.Container @@ -160,8 +161,8 @@ func calculateRate(cur, prev uint64, before time.Time) float32 { } // mergeStatWithSysprobeStats takes a process by PID map and fill the stats from system probe into the processes in the map -func mergeStatWithSysprobeStats(pids []int32, stats map[int32]*procutil.Stats, pu net.SysProbeUtil) { - pStats, err := pu.GetProcStats(pids) +func mergeStatWithSysprobeStats(pids []int32, stats map[int32]*procutil.Stats, client *http.Client) { + pStats, err := net.GetProcStats(client, pids) if err == nil { for pid, stats := range stats { if s, ok := pStats.StatsByPID[pid]; ok { diff --git a/pkg/process/checks/sysprobe_stats_test.go b/pkg/process/checks/sysprobe_stats_test.go index 2990b5bb7e957..9f7e315f2ebc6 100644 --- a/pkg/process/checks/sysprobe_stats_test.go +++ b/pkg/process/checks/sysprobe_stats_test.go @@ -6,14 +6,12 @@ package checks import ( - "fmt" "math/rand" "testing" "github.com/DataDog/agent-payload/v5/process" "github.com/stretchr/testify/assert" - netMocks "github.com/DataDog/datadog-agent/pkg/process/net/mocks" "github.com/DataDog/datadog-agent/pkg/process/procutil" ) @@ -46,12 +44,9 @@ func TestMergeProcWithSysprobeStats(t *testing.T) { proc1Stats := makeProcStatsWithPerm(1) proc2Stats := makeProcStatsWithPerm(2) - mockSysProbe := netMocks.NewSysProbeUtil(t) - mockSysProbe.On("GetProcStats", []int32{1, 2}).Return(&process.ProcStatsWithPermByPID{ + mergeProcWithSysprobeStats(map[int32]*procutil.Process{1: proc1, 2: proc2}, &process.ProcStatsWithPermByPID{ StatsByPID: map[int32]*process.ProcStatsWithPerm{1: proc1Stats, 2: proc2Stats}, - }, nil) - - mergeProcWithSysprobeStats([]int32{1, 2}, map[int32]*procutil.Process{1: proc1, 2: proc2}, mockSysProbe) + }) assertMatchesSysProbeStats(t, proc1, proc1Stats) assertMatchesSysProbeStats(t, proc2, proc2Stats) @@ -63,12 +58,9 @@ func TestMergeProcWithSysprobeStats(t *testing.T) { proc1Stats := makeProcStatsWithPerm(1) - mockSysProbe := netMocks.NewSysProbeUtil(t) - mockSysProbe.On("GetProcStats", []int32{1}).Return(&process.ProcStatsWithPermByPID{ + mergeProcWithSysprobeStats(map[int32]*procutil.Process{1: proc1, 2: proc2}, &process.ProcStatsWithPermByPID{ StatsByPID: map[int32]*process.ProcStatsWithPerm{1: proc1Stats}, - }, nil) - - mergeProcWithSysprobeStats([]int32{1}, map[int32]*procutil.Process{1: proc1, 2: proc2}, mockSysProbe) + }) assertMatchesSysProbeStats(t, proc1, proc1Stats) assert.False(t, hasSysProbeStats(proc2)) @@ -80,24 +72,10 @@ func TestMergeProcWithSysprobeStats(t *testing.T) { proc1Stats := makeProcStatsWithPerm(1) proc2Stats := makeProcStatsWithPerm(2) - mockSysProbe := netMocks.NewSysProbeUtil(t) - mockSysProbe.On("GetProcStats", []int32{1, 2}).Return(&process.ProcStatsWithPermByPID{ + mergeProcWithSysprobeStats(map[int32]*procutil.Process{2: proc2}, &process.ProcStatsWithPermByPID{ StatsByPID: map[int32]*process.ProcStatsWithPerm{1: proc1Stats, 2: proc2Stats}, - }, nil) - - mergeProcWithSysprobeStats([]int32{1, 2}, map[int32]*procutil.Process{2: proc2}, mockSysProbe) + }) assertMatchesSysProbeStats(t, proc2, proc2Stats) }) - - t.Run("error", func(t *testing.T) { - proc1 := makeProcess(1, "git clone google.com") - - mockSysProbe := netMocks.NewSysProbeUtil(t) - mockSysProbe.On("GetProcStats", []int32{1}).Return(nil, fmt.Errorf("catastrophic failure")) - - mergeProcWithSysprobeStats([]int32{1}, map[int32]*procutil.Process{1: proc1}, mockSysProbe) - - assert.False(t, hasSysProbeStats(proc1)) - }) } diff --git a/pkg/process/net/common.go b/pkg/process/net/common.go index b9f1b787d52ad..83b1b603584fd 100644 --- a/pkg/process/net/common.go +++ b/pkg/process/net/common.go @@ -9,92 +9,20 @@ package net import ( "bytes" - "context" "fmt" - "io" - "net" "net/http" - "time" model "github.com/DataDog/agent-payload/v5/process" - netEncoding "github.com/DataDog/datadog-agent/pkg/network/encoding/unmarshal" - nppayload "github.com/DataDog/datadog-agent/pkg/networkpath/payload" + sysprobeclient "github.com/DataDog/datadog-agent/cmd/system-probe/api/client" + sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" procEncoding "github.com/DataDog/datadog-agent/pkg/process/encoding" reqEncoding "github.com/DataDog/datadog-agent/pkg/process/encoding/request" pbgo "github.com/DataDog/datadog-agent/pkg/proto/pbgo/process" - "github.com/DataDog/datadog-agent/pkg/util/funcs" - "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/util/retry" ) -// Conn is a wrapper over some net.Listener -type Conn interface { - // GetListener returns the underlying net.Listener - GetListener() net.Listener - - // Stop and clean up resources for the underlying connection - Stop() -} - -const ( - contentTypeProtobuf = "application/protobuf" - contentTypeJSON = "application/json" -) - -var _ SysProbeUtil = &RemoteSysProbeUtil{} - -// RemoteSysProbeUtil wraps interactions with a remote system probe service -type RemoteSysProbeUtil struct { - // Retrier used to setup system probe - initRetry retry.Retrier - - path string - httpClient http.Client - tracerouteClient http.Client -} - -// ensure that GetRemoteSystemProbeUtil implements SysProbeUtilGetter -var _ SysProbeUtilGetter = GetRemoteSystemProbeUtil - -// GetRemoteSystemProbeUtil returns a ready to use RemoteSysProbeUtil. It is backed by a shared singleton. -func GetRemoteSystemProbeUtil(path string) (SysProbeUtil, error) { - sysProbeUtil, err := getRemoteSystemProbeUtil(path) - if err != nil { - return nil, err - } - - if err := sysProbeUtil.initRetry.TriggerRetry(); err != nil { - log.Debugf("system probe init error: %s", err) - return nil, err - } - - return sysProbeUtil, nil -} - -var getRemoteSystemProbeUtil = funcs.MemoizeArg(func(path string) (*RemoteSysProbeUtil, error) { - err := CheckPath(path) - if err != nil { - return nil, fmt.Errorf("error setting up remote system probe util, %v", err) - } - - sysProbeUtil := newSystemProbe(path) - err = sysProbeUtil.initRetry.SetupRetrier(&retry.Config{ //nolint:errcheck - Name: "system-probe-util", - AttemptMethod: sysProbeUtil.init, - Strategy: retry.RetryCount, - // 10 tries w/ 30s delays = 5m of trying before permafail - RetryCount: 10, - RetryDelay: 30 * time.Second, - }) - if err != nil { - return nil, err - } - return sysProbeUtil, nil -}) - // GetProcStats returns a set of process stats by querying system-probe -func (r *RemoteSysProbeUtil) GetProcStats(pids []int32) (*model.ProcStatsWithPermByPID, error) { +func GetProcStats(client *http.Client, pids []int32) (*model.ProcStatsWithPermByPID, error) { procReq := &pbgo.ProcessStatRequest{ Pids: pids, } @@ -104,24 +32,25 @@ func (r *RemoteSysProbeUtil) GetProcStats(pids []int32) (*model.ProcStatsWithPer return nil, err } - req, err := http.NewRequest("POST", procStatsURL, bytes.NewReader(reqBody)) + url := sysprobeclient.ModuleURL(sysconfig.ProcessModule, "/stats") + req, err := http.NewRequest("POST", url, bytes.NewReader(reqBody)) if err != nil { return nil, err } - req.Header.Set("Accept", contentTypeProtobuf) + req.Header.Set("Accept", procEncoding.ContentTypeProtobuf) req.Header.Set("Content-Type", procEncoding.ContentTypeProtobuf) - resp, err := r.httpClient.Do(req) + resp, err := client.Do(req) if err != nil { return nil, err } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf("proc_stats request failed: Probe Path %s, url: %s, status code: %d", r.path, procStatsURL, resp.StatusCode) + return nil, fmt.Errorf("proc_stats request failed: url: %s, status code: %d", req.URL, resp.StatusCode) } - body, err := readAllResponseBody(resp) + body, err := sysprobeclient.ReadAllResponseBody(resp) if err != nil { return nil, err } @@ -135,180 +64,29 @@ func (r *RemoteSysProbeUtil) GetProcStats(pids []int32) (*model.ProcStatsWithPer return results, nil } -// GetConnections returns a set of active network connections, retrieved from the system probe service -func (r *RemoteSysProbeUtil) GetConnections(clientID string) (*model.Connections, error) { - req, err := http.NewRequest("GET", fmt.Sprintf("%s?client_id=%s", connectionsURL, clientID), nil) - if err != nil { - return nil, err - } - - req.Header.Set("Accept", contentTypeProtobuf) - resp, err := r.httpClient.Do(req) - if err != nil { - return nil, err - } - - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf("conn request failed: Probe Path %s, url: %s, status code: %d", r.path, connectionsURL, resp.StatusCode) - } - - body, err := readAllResponseBody(resp) - if err != nil { - return nil, err - } - - contentType := resp.Header.Get("Content-type") - conns, err := netEncoding.GetUnmarshaler(contentType).Unmarshal(body) - if err != nil { - return nil, err - } - - return conns, nil -} - // GetNetworkID fetches the network_id (vpc_id) from system-probe -func (r *RemoteSysProbeUtil) GetNetworkID() (string, error) { - req, err := http.NewRequest("GET", networkIDURL, nil) +func GetNetworkID(client *http.Client) (string, error) { + url := sysprobeclient.ModuleURL(sysconfig.NetworkTracerModule, "/network_id") + req, err := http.NewRequest("GET", url, nil) if err != nil { return "", fmt.Errorf("failed to create request: %w", err) } req.Header.Set("Accept", "text/plain") - resp, err := r.httpClient.Do(req) + resp, err := client.Do(req) if err != nil { return "", fmt.Errorf("failed to execute request: %w", err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { - return "", fmt.Errorf("network_id request failed: url: %s, status code: %d", networkIDURL, resp.StatusCode) + return "", fmt.Errorf("network_id request failed: url: %s, status code: %d", req.URL, resp.StatusCode) } - body, err := readAllResponseBody(resp) + body, err := sysprobeclient.ReadAllResponseBody(resp) if err != nil { return "", fmt.Errorf("failed to read response body: %w", err) } return string(body), nil } - -// GetPing returns the results of a ping to a host -func (r *RemoteSysProbeUtil) GetPing(clientID string, host string, count int, interval time.Duration, timeout time.Duration) ([]byte, error) { - req, err := http.NewRequest("GET", fmt.Sprintf("%s/%s?client_id=%s&count=%d&interval=%d&timeout=%d", pingURL, host, clientID, count, interval, timeout), nil) - if err != nil { - return nil, err - } - - req.Header.Set("Accept", contentTypeJSON) - resp, err := r.httpClient.Do(req) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - if resp.StatusCode == http.StatusBadRequest { - body, err := readAllResponseBody(resp) - if err != nil { - return nil, fmt.Errorf("ping request failed: Probe Path %s, url: %s, status code: %d", r.path, pingURL, resp.StatusCode) - } - return nil, fmt.Errorf("ping request failed: Probe Path %s, url: %s, status code: %d, error: %s", r.path, pingURL, resp.StatusCode, string(body)) - } else if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf("ping request failed: Probe Path %s, url: %s, status code: %d", r.path, pingURL, resp.StatusCode) - } - - body, err := readAllResponseBody(resp) - if err != nil { - return nil, err - } - - return body, nil -} - -// GetTraceroute returns the results of a traceroute to a host -func (r *RemoteSysProbeUtil) GetTraceroute(clientID string, host string, port uint16, protocol nppayload.Protocol, maxTTL uint8, timeout time.Duration) ([]byte, error) { - httpTimeout := timeout*time.Duration(maxTTL) + 10*time.Second // allow extra time for the system probe communication overhead, calculate full timeout for TCP traceroute - log.Tracef("Network Path traceroute HTTP request timeout: %s", httpTimeout) - ctx, cancel := context.WithTimeout(context.Background(), httpTimeout) - defer cancel() - - req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("%s/%s?client_id=%s&port=%d&max_ttl=%d&timeout=%d&protocol=%s", tracerouteURL, host, clientID, port, maxTTL, timeout, protocol), nil) - if err != nil { - return nil, err - } - - req.Header.Set("Accept", contentTypeJSON) - resp, err := r.tracerouteClient.Do(req) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - if resp.StatusCode == http.StatusBadRequest { - body, err := readAllResponseBody(resp) - if err != nil { - return nil, fmt.Errorf("traceroute request failed: Probe Path %s, url: %s, status code: %d", r.path, tracerouteURL, resp.StatusCode) - } - return nil, fmt.Errorf("traceroute request failed: Probe Path %s, url: %s, status code: %d, error: %s", r.path, tracerouteURL, resp.StatusCode, string(body)) - } else if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf("traceroute request failed: Probe Path %s, url: %s, status code: %d", r.path, tracerouteURL, resp.StatusCode) - } - - body, err := readAllResponseBody(resp) - if err != nil { - return nil, err - } - - return body, nil -} - -// Register registers the client to system probe -func (r *RemoteSysProbeUtil) Register(clientID string) error { - req, err := http.NewRequest("GET", fmt.Sprintf("%s?client_id=%s", registerURL, clientID), nil) - if err != nil { - return err - } - - resp, err := r.httpClient.Do(req) - if err != nil { - return err - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - return fmt.Errorf("conn request failed: Path %s, url: %s, status code: %d", r.path, statsURL, resp.StatusCode) - } - - return nil -} - -func (r *RemoteSysProbeUtil) init() error { - resp, err := r.httpClient.Get(statsURL) - if err != nil { - return err - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - return fmt.Errorf("remote tracer status check failed: socket %s, url: %s, status code: %d", r.path, statsURL, resp.StatusCode) - } - return nil -} - -func readAllResponseBody(resp *http.Response) ([]byte, error) { - // if we are not able to determine the content length - // we read the whole body without pre-allocation - if resp.ContentLength <= 0 { - return io.ReadAll(resp.Body) - } - - // if we know the content length we pre-allocate the buffer - var buf bytes.Buffer - buf.Grow(int(resp.ContentLength)) - - _, err := buf.ReadFrom(resp.Body) - if err != nil { - return nil, err - } - - return buf.Bytes(), nil -} diff --git a/pkg/process/net/common_all.go b/pkg/process/net/common_all.go index 9dee717e7b6bb..1e1cc1fcb17a1 100644 --- a/pkg/process/net/common_all.go +++ b/pkg/process/net/common_all.go @@ -1,14 +1,7 @@ // 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. +// Copyright 2024-present Datadog, Inc. // Package net provides local access to system probe package net - -import "errors" - -var ( - // ErrNotImplemented is an error used when system-probe is attempted to be accessed on an unsupported OS - ErrNotImplemented = errors.New("system-probe unsupported") -) diff --git a/pkg/process/net/common_linux.go b/pkg/process/net/common_linux.go deleted file mode 100644 index 3529180ba9576..0000000000000 --- a/pkg/process/net/common_linux.go +++ /dev/null @@ -1,56 +0,0 @@ -// 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. - -//go:build linux - -package net - -import ( - "errors" - "fmt" - "net/http" - "os" - - "github.com/DataDog/datadog-agent/cmd/system-probe/api/client" - sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" -) - -const ( - pingURL = "http://unix/" + string(sysconfig.PingModule) + "/ping/" - tracerouteURL = "http://unix/" + string(sysconfig.TracerouteModule) + "/traceroute/" - connectionsURL = "http://unix/" + string(sysconfig.NetworkTracerModule) + "/connections" - networkIDURL = "http://unix/" + string(sysconfig.NetworkTracerModule) + "/network_id" - procStatsURL = "http://unix/" + string(sysconfig.ProcessModule) + "/stats" - registerURL = "http://unix/" + string(sysconfig.NetworkTracerModule) + "/register" - statsURL = "http://unix/debug/stats" -) - -// CheckPath is used in conjunction with calling the stats endpoint, since we are calling this -// From the main agent and want to ensure the socket exists -func CheckPath(path string) error { - if path == "" { - return errors.New("socket path is empty") - } - - if _, err := os.Stat(path); err != nil { - return fmt.Errorf("socket path does not exist: %v", err) - } - return nil -} - -// newSystemProbe creates a group of clients to interact with system-probe. -func newSystemProbe(path string) *RemoteSysProbeUtil { - return &RemoteSysProbeUtil{ - path: path, - httpClient: *client.Get(path), - tracerouteClient: http.Client{ - // no timeout set here, the expected usage of this client - // is that the caller will set a timeout on each request - Transport: &http.Transport{ - DialContext: client.DialContextFunc(path), - }, - }, - } -} diff --git a/pkg/process/net/common_unsupported.go b/pkg/process/net/common_unsupported.go index c4354fce03fd9..c145137a3a0af 100644 --- a/pkg/process/net/common_unsupported.go +++ b/pkg/process/net/common_unsupported.go @@ -1,72 +1,25 @@ // 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. +// Copyright 2024-present Datadog, Inc. //go:build !linux && !windows package net import ( - "time" + "errors" + "net/http" model "github.com/DataDog/agent-payload/v5/process" - - nppayload "github.com/DataDog/datadog-agent/pkg/networkpath/payload" ) -var _ SysProbeUtil = &RemoteSysProbeUtil{} -var _ SysProbeUtilGetter = GetRemoteSystemProbeUtil - -// RemoteSysProbeUtil is not supported -type RemoteSysProbeUtil struct{} - -// CheckPath is not supported -// -//nolint:revive // TODO(PROC) Fix revive linter -func CheckPath(_ string) error { - return ErrNotImplemented -} - -// GetRemoteSystemProbeUtil is not supported -// -//nolint:revive // TODO(PROC) Fix revive linter -func GetRemoteSystemProbeUtil(_ string) (SysProbeUtil, error) { - return &RemoteSysProbeUtil{}, ErrNotImplemented -} - -// GetConnections is not supported -// -//nolint:revive // TODO(PROC) Fix revive linter -func (r *RemoteSysProbeUtil) GetConnections(_ string) (*model.Connections, error) { - return nil, ErrNotImplemented -} - -// GetNetworkID is not supported -func (r *RemoteSysProbeUtil) GetNetworkID() (string, error) { - return "", ErrNotImplemented -} - -// GetProcStats is not supported -// -//nolint:revive // TODO(PROC) Fix revive linter -func (r *RemoteSysProbeUtil) GetProcStats(_ []int32) (*model.ProcStatsWithPermByPID, error) { - return nil, ErrNotImplemented -} - -// Register is not supported -// -//nolint:revive // TODO(PROC) Fix revive linter -func (r *RemoteSysProbeUtil) Register(_ string) error { - return ErrNotImplemented -} - -// GetPing is not supported -func (r *RemoteSysProbeUtil) GetPing(_ string, _ string, _ int, _ time.Duration, _ time.Duration) ([]byte, error) { - return nil, ErrNotImplemented +// GetProcStats returns a set of process stats by querying system-probe +func GetProcStats(_ *http.Client, _ []int32) (*model.ProcStatsWithPermByPID, error) { + return nil, errors.New("unsupported platform") } -// GetTraceroute is not supported -func (r *RemoteSysProbeUtil) GetTraceroute(_ string, _ string, _ uint16, _ nppayload.Protocol, _ uint8, _ time.Duration) ([]byte, error) { - return nil, ErrNotImplemented +// GetNetworkID fetches the network_id (vpc_id) from system-probe +func GetNetworkID(_ *http.Client) (string, error) { + return "", errors.New("unsupported platform") } diff --git a/pkg/process/net/common_windows.go b/pkg/process/net/common_windows.go deleted file mode 100644 index 7a08bca481b93..0000000000000 --- a/pkg/process/net/common_windows.go +++ /dev/null @@ -1,63 +0,0 @@ -// 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. - -//go:build windows - -package net - -import ( - "errors" - "net/http" - "time" - - "github.com/DataDog/datadog-agent/cmd/system-probe/api/client" - sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" -) - -const ( - connectionsURL = "http://localhost:3333/" + string(sysconfig.NetworkTracerModule) + "/connections" - networkIDURL = "http://unix/" + string(sysconfig.NetworkTracerModule) + "/network_id" - registerURL = "http://localhost:3333/" + string(sysconfig.NetworkTracerModule) + "/register" - statsURL = "http://localhost:3333/debug/stats" - tracerouteURL = "http://localhost:3333/" + string(sysconfig.TracerouteModule) + "/traceroute/" - - // procStatsURL is not used in windows, the value is added to avoid compilation error in windows - procStatsURL = "http://localhost:3333/" + string(sysconfig.ProcessModule) + "stats" - // pingURL is not used in windows, the value is added to avoid compilation error in windows - pingURL = "http://localhost:3333/" + string(sysconfig.PingModule) + "/ping/" - - // systemProbeMaxIdleConns sets the maximum number of idle named pipe connections. - systemProbeMaxIdleConns = 2 - - // systemProbeIdleConnTimeout is the time a named pipe connection is held up idle before being closed. - // This should be small since connections are local, to close them as soon as they are done, - // and to quickly service new pending connections. - systemProbeIdleConnTimeout = 5 * time.Second -) - -// CheckPath is used to make sure the globalSocketPath has been set before attempting to connect -func CheckPath(path string) error { - if path == "" { - return errors.New("socket path is empty") - } - return nil -} - -// newSystemProbe creates a group of clients to interact with system-probe. -func newSystemProbe(path string) *RemoteSysProbeUtil { - return &RemoteSysProbeUtil{ - path: path, - httpClient: *client.Get(path), - tracerouteClient: http.Client{ - // no timeout set here, the expected usage of this client - // is that the caller will set a timeout on each request - Transport: &http.Transport{ - MaxIdleConns: systemProbeMaxIdleConns, - IdleConnTimeout: systemProbeIdleConnTimeout, - DialContext: client.DialContextFunc(path), - }, - }, - } -} diff --git a/pkg/process/net/mocks/sys_probe_util.go b/pkg/process/net/mocks/sys_probe_util.go deleted file mode 100644 index 00c03f639df65..0000000000000 --- a/pkg/process/net/mocks/sys_probe_util.go +++ /dev/null @@ -1,382 +0,0 @@ -// Code generated by mockery v2.49.2. DO NOT EDIT. - -package mocks - -import ( - mock "github.com/stretchr/testify/mock" - - payload "github.com/DataDog/datadog-agent/pkg/networkpath/payload" - - process "github.com/DataDog/agent-payload/v5/process" - - time "time" -) - -// SysProbeUtil is an autogenerated mock type for the SysProbeUtil type -type SysProbeUtil struct { - mock.Mock -} - -type SysProbeUtil_Expecter struct { - mock *mock.Mock -} - -func (_m *SysProbeUtil) EXPECT() *SysProbeUtil_Expecter { - return &SysProbeUtil_Expecter{mock: &_m.Mock} -} - -// GetConnections provides a mock function with given fields: clientID -func (_m *SysProbeUtil) GetConnections(clientID string) (*process.Connections, error) { - ret := _m.Called(clientID) - - if len(ret) == 0 { - panic("no return value specified for GetConnections") - } - - var r0 *process.Connections - var r1 error - if rf, ok := ret.Get(0).(func(string) (*process.Connections, error)); ok { - return rf(clientID) - } - if rf, ok := ret.Get(0).(func(string) *process.Connections); ok { - r0 = rf(clientID) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*process.Connections) - } - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(clientID) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// SysProbeUtil_GetConnections_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetConnections' -type SysProbeUtil_GetConnections_Call struct { - *mock.Call -} - -// GetConnections is a helper method to define mock.On call -// - clientID string -func (_e *SysProbeUtil_Expecter) GetConnections(clientID interface{}) *SysProbeUtil_GetConnections_Call { - return &SysProbeUtil_GetConnections_Call{Call: _e.mock.On("GetConnections", clientID)} -} - -func (_c *SysProbeUtil_GetConnections_Call) Run(run func(clientID string)) *SysProbeUtil_GetConnections_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].(string)) - }) - return _c -} - -func (_c *SysProbeUtil_GetConnections_Call) Return(_a0 *process.Connections, _a1 error) *SysProbeUtil_GetConnections_Call { - _c.Call.Return(_a0, _a1) - return _c -} - -func (_c *SysProbeUtil_GetConnections_Call) RunAndReturn(run func(string) (*process.Connections, error)) *SysProbeUtil_GetConnections_Call { - _c.Call.Return(run) - return _c -} - -// GetNetworkID provides a mock function with no fields -func (_m *SysProbeUtil) GetNetworkID() (string, error) { - ret := _m.Called() - - if len(ret) == 0 { - panic("no return value specified for GetNetworkID") - } - - var r0 string - var r1 error - if rf, ok := ret.Get(0).(func() (string, error)); ok { - return rf() - } - if rf, ok := ret.Get(0).(func() string); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(string) - } - - if rf, ok := ret.Get(1).(func() error); ok { - r1 = rf() - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// SysProbeUtil_GetNetworkID_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetNetworkID' -type SysProbeUtil_GetNetworkID_Call struct { - *mock.Call -} - -// GetNetworkID is a helper method to define mock.On call -func (_e *SysProbeUtil_Expecter) GetNetworkID() *SysProbeUtil_GetNetworkID_Call { - return &SysProbeUtil_GetNetworkID_Call{Call: _e.mock.On("GetNetworkID")} -} - -func (_c *SysProbeUtil_GetNetworkID_Call) Run(run func()) *SysProbeUtil_GetNetworkID_Call { - _c.Call.Run(func(args mock.Arguments) { - run() - }) - return _c -} - -func (_c *SysProbeUtil_GetNetworkID_Call) Return(_a0 string, _a1 error) *SysProbeUtil_GetNetworkID_Call { - _c.Call.Return(_a0, _a1) - return _c -} - -func (_c *SysProbeUtil_GetNetworkID_Call) RunAndReturn(run func() (string, error)) *SysProbeUtil_GetNetworkID_Call { - _c.Call.Return(run) - return _c -} - -// GetPing provides a mock function with given fields: clientID, host, count, interval, timeout -func (_m *SysProbeUtil) GetPing(clientID string, host string, count int, interval time.Duration, timeout time.Duration) ([]byte, error) { - ret := _m.Called(clientID, host, count, interval, timeout) - - if len(ret) == 0 { - panic("no return value specified for GetPing") - } - - var r0 []byte - var r1 error - if rf, ok := ret.Get(0).(func(string, string, int, time.Duration, time.Duration) ([]byte, error)); ok { - return rf(clientID, host, count, interval, timeout) - } - if rf, ok := ret.Get(0).(func(string, string, int, time.Duration, time.Duration) []byte); ok { - r0 = rf(clientID, host, count, interval, timeout) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]byte) - } - } - - if rf, ok := ret.Get(1).(func(string, string, int, time.Duration, time.Duration) error); ok { - r1 = rf(clientID, host, count, interval, timeout) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// SysProbeUtil_GetPing_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetPing' -type SysProbeUtil_GetPing_Call struct { - *mock.Call -} - -// GetPing is a helper method to define mock.On call -// - clientID string -// - host string -// - count int -// - interval time.Duration -// - timeout time.Duration -func (_e *SysProbeUtil_Expecter) GetPing(clientID interface{}, host interface{}, count interface{}, interval interface{}, timeout interface{}) *SysProbeUtil_GetPing_Call { - return &SysProbeUtil_GetPing_Call{Call: _e.mock.On("GetPing", clientID, host, count, interval, timeout)} -} - -func (_c *SysProbeUtil_GetPing_Call) Run(run func(clientID string, host string, count int, interval time.Duration, timeout time.Duration)) *SysProbeUtil_GetPing_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].(string), args[1].(string), args[2].(int), args[3].(time.Duration), args[4].(time.Duration)) - }) - return _c -} - -func (_c *SysProbeUtil_GetPing_Call) Return(_a0 []byte, _a1 error) *SysProbeUtil_GetPing_Call { - _c.Call.Return(_a0, _a1) - return _c -} - -func (_c *SysProbeUtil_GetPing_Call) RunAndReturn(run func(string, string, int, time.Duration, time.Duration) ([]byte, error)) *SysProbeUtil_GetPing_Call { - _c.Call.Return(run) - return _c -} - -// GetProcStats provides a mock function with given fields: pids -func (_m *SysProbeUtil) GetProcStats(pids []int32) (*process.ProcStatsWithPermByPID, error) { - ret := _m.Called(pids) - - if len(ret) == 0 { - panic("no return value specified for GetProcStats") - } - - var r0 *process.ProcStatsWithPermByPID - var r1 error - if rf, ok := ret.Get(0).(func([]int32) (*process.ProcStatsWithPermByPID, error)); ok { - return rf(pids) - } - if rf, ok := ret.Get(0).(func([]int32) *process.ProcStatsWithPermByPID); ok { - r0 = rf(pids) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*process.ProcStatsWithPermByPID) - } - } - - if rf, ok := ret.Get(1).(func([]int32) error); ok { - r1 = rf(pids) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// SysProbeUtil_GetProcStats_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetProcStats' -type SysProbeUtil_GetProcStats_Call struct { - *mock.Call -} - -// GetProcStats is a helper method to define mock.On call -// - pids []int32 -func (_e *SysProbeUtil_Expecter) GetProcStats(pids interface{}) *SysProbeUtil_GetProcStats_Call { - return &SysProbeUtil_GetProcStats_Call{Call: _e.mock.On("GetProcStats", pids)} -} - -func (_c *SysProbeUtil_GetProcStats_Call) Run(run func(pids []int32)) *SysProbeUtil_GetProcStats_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].([]int32)) - }) - return _c -} - -func (_c *SysProbeUtil_GetProcStats_Call) Return(_a0 *process.ProcStatsWithPermByPID, _a1 error) *SysProbeUtil_GetProcStats_Call { - _c.Call.Return(_a0, _a1) - return _c -} - -func (_c *SysProbeUtil_GetProcStats_Call) RunAndReturn(run func([]int32) (*process.ProcStatsWithPermByPID, error)) *SysProbeUtil_GetProcStats_Call { - _c.Call.Return(run) - return _c -} - -// GetTraceroute provides a mock function with given fields: clientID, host, port, protocol, maxTTL, timeout -func (_m *SysProbeUtil) GetTraceroute(clientID string, host string, port uint16, protocol payload.Protocol, maxTTL uint8, timeout time.Duration) ([]byte, error) { - ret := _m.Called(clientID, host, port, protocol, maxTTL, timeout) - - if len(ret) == 0 { - panic("no return value specified for GetTraceroute") - } - - var r0 []byte - var r1 error - if rf, ok := ret.Get(0).(func(string, string, uint16, payload.Protocol, uint8, time.Duration) ([]byte, error)); ok { - return rf(clientID, host, port, protocol, maxTTL, timeout) - } - if rf, ok := ret.Get(0).(func(string, string, uint16, payload.Protocol, uint8, time.Duration) []byte); ok { - r0 = rf(clientID, host, port, protocol, maxTTL, timeout) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]byte) - } - } - - if rf, ok := ret.Get(1).(func(string, string, uint16, payload.Protocol, uint8, time.Duration) error); ok { - r1 = rf(clientID, host, port, protocol, maxTTL, timeout) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// SysProbeUtil_GetTraceroute_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetTraceroute' -type SysProbeUtil_GetTraceroute_Call struct { - *mock.Call -} - -// GetTraceroute is a helper method to define mock.On call -// - clientID string -// - host string -// - port uint16 -// - protocol payload.Protocol -// - maxTTL uint8 -// - timeout time.Duration -func (_e *SysProbeUtil_Expecter) GetTraceroute(clientID interface{}, host interface{}, port interface{}, protocol interface{}, maxTTL interface{}, timeout interface{}) *SysProbeUtil_GetTraceroute_Call { - return &SysProbeUtil_GetTraceroute_Call{Call: _e.mock.On("GetTraceroute", clientID, host, port, protocol, maxTTL, timeout)} -} - -func (_c *SysProbeUtil_GetTraceroute_Call) Run(run func(clientID string, host string, port uint16, protocol payload.Protocol, maxTTL uint8, timeout time.Duration)) *SysProbeUtil_GetTraceroute_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].(string), args[1].(string), args[2].(uint16), args[3].(payload.Protocol), args[4].(uint8), args[5].(time.Duration)) - }) - return _c -} - -func (_c *SysProbeUtil_GetTraceroute_Call) Return(_a0 []byte, _a1 error) *SysProbeUtil_GetTraceroute_Call { - _c.Call.Return(_a0, _a1) - return _c -} - -func (_c *SysProbeUtil_GetTraceroute_Call) RunAndReturn(run func(string, string, uint16, payload.Protocol, uint8, time.Duration) ([]byte, error)) *SysProbeUtil_GetTraceroute_Call { - _c.Call.Return(run) - return _c -} - -// Register provides a mock function with given fields: clientID -func (_m *SysProbeUtil) Register(clientID string) error { - ret := _m.Called(clientID) - - if len(ret) == 0 { - panic("no return value specified for Register") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string) error); ok { - r0 = rf(clientID) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// SysProbeUtil_Register_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Register' -type SysProbeUtil_Register_Call struct { - *mock.Call -} - -// Register is a helper method to define mock.On call -// - clientID string -func (_e *SysProbeUtil_Expecter) Register(clientID interface{}) *SysProbeUtil_Register_Call { - return &SysProbeUtil_Register_Call{Call: _e.mock.On("Register", clientID)} -} - -func (_c *SysProbeUtil_Register_Call) Run(run func(clientID string)) *SysProbeUtil_Register_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].(string)) - }) - return _c -} - -func (_c *SysProbeUtil_Register_Call) Return(_a0 error) *SysProbeUtil_Register_Call { - _c.Call.Return(_a0) - return _c -} - -func (_c *SysProbeUtil_Register_Call) RunAndReturn(run func(string) error) *SysProbeUtil_Register_Call { - _c.Call.Return(run) - return _c -} - -// NewSysProbeUtil creates a new instance of SysProbeUtil. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -// The first argument is typically a *testing.T value. -func NewSysProbeUtil(t interface { - mock.TestingT - Cleanup(func()) -}) *SysProbeUtil { - mock := &SysProbeUtil{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/pkg/process/net/shared.go b/pkg/process/net/shared.go deleted file mode 100644 index 33ca74d07863d..0000000000000 --- a/pkg/process/net/shared.go +++ /dev/null @@ -1,28 +0,0 @@ -// 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 net - -import ( - "time" - - model "github.com/DataDog/agent-payload/v5/process" - - nppayload "github.com/DataDog/datadog-agent/pkg/networkpath/payload" -) - -// SysProbeUtilGetter is a function that returns a SysProbeUtil for the given path -// The standard implementation is GetRemoteSysProbeUtil -type SysProbeUtilGetter func(string) (SysProbeUtil, error) - -// SysProbeUtil fetches info from the SysProbe running remotely -type SysProbeUtil interface { - GetConnections(clientID string) (*model.Connections, error) - GetProcStats(pids []int32) (*model.ProcStatsWithPermByPID, error) - Register(clientID string) error - GetNetworkID() (string, error) - GetPing(clientID string, host string, count int, interval time.Duration, timeout time.Duration) ([]byte, error) - GetTraceroute(clientID string, host string, port uint16, protocol nppayload.Protocol, maxTTL uint8, timeout time.Duration) ([]byte, error) -} From 61e2e6f25a35afa79e2d1bc7dfa46c36f6016537 Mon Sep 17 00:00:00 2001 From: Ilia Kurenkov Date: Wed, 11 Dec 2024 21:22:37 +0100 Subject: [PATCH 143/303] Add metrics origins for Nvidia Nim integration (#32059) --- pkg/metrics/metricsource.go | 5 +++++ pkg/serializer/internal/metrics/origin_mapping.go | 3 +++ ...-for-Nvidia-Nim-integration.-8c799e83d78947b0.yaml | 11 +++++++++++ 3 files changed, 19 insertions(+) create mode 100644 releasenotes/notes/Add-metrics-origins-for-Nvidia-Nim-integration.-8c799e83d78947b0.yaml diff --git a/pkg/metrics/metricsource.go b/pkg/metrics/metricsource.go index 57a802188d380..f3afa888d60b4 100644 --- a/pkg/metrics/metricsource.go +++ b/pkg/metrics/metricsource.go @@ -307,6 +307,7 @@ const ( MetricSourceAppgateSDP MetricSourceAnyscale MetricSourceMilvus + MetricSourceNvidiaNim ) // String returns a string representation of MetricSource @@ -714,6 +715,8 @@ func (ms MetricSource) String() string { return "karpenter" case MetricSourceNvidiaTriton: return "nvidia_triton" + case MetricSourceNvidiaNim: + return "nvidia_nim" case MetricSourceRay: return "ray" case MetricSourceStrimzi: @@ -1248,6 +1251,8 @@ func CheckNameToMetricSource(name string) MetricSource { return MetricSourceKarpenter case "nvidia_triton": return MetricSourceNvidiaTriton + case "nvidia_nim": + return MetricSourceNvidiaNim case "ray": return MetricSourceRay case "strimzi": diff --git a/pkg/serializer/internal/metrics/origin_mapping.go b/pkg/serializer/internal/metrics/origin_mapping.go index 6b64e3e602078..45e433d7135b5 100644 --- a/pkg/serializer/internal/metrics/origin_mapping.go +++ b/pkg/serializer/internal/metrics/origin_mapping.go @@ -307,6 +307,7 @@ func metricSourceToOriginCategory(ms metrics.MetricSource) int32 { metrics.MetricSourceYarn, metrics.MetricSourceZk, metrics.MetricSourceAwsNeuron, + metrics.MetricSourceNvidiaNim, metrics.MetricSourceMilvus: return 11 // integrationMetrics default: @@ -899,6 +900,8 @@ func metricSourceToOriginService(ms metrics.MetricSource) int32 { return 419 case metrics.MetricSourceMilvus: return 425 + case metrics.MetricSourceNvidiaNim: + return 426 default: return 0 } diff --git a/releasenotes/notes/Add-metrics-origins-for-Nvidia-Nim-integration.-8c799e83d78947b0.yaml b/releasenotes/notes/Add-metrics-origins-for-Nvidia-Nim-integration.-8c799e83d78947b0.yaml new file mode 100644 index 0000000000000..6bec889b9c4e7 --- /dev/null +++ b/releasenotes/notes/Add-metrics-origins-for-Nvidia-Nim-integration.-8c799e83d78947b0.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + Add metrics origins for Nvidia Nim integration. From 47c78b0ba60f84c48a177533a3a26f258c6fdf9c Mon Sep 17 00:00:00 2001 From: Raphael Gavache Date: Wed, 11 Dec 2024 21:56:28 +0100 Subject: [PATCH 144/303] [fleet] propagate env (#32057) --- pkg/fleet/installer/setup/install.sh | 4 +++- test/new-e2e/tests/installer/script/all_scripts_test.go | 2 +- test/new-e2e/tests/installer/script/databricks_test.go | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pkg/fleet/installer/setup/install.sh b/pkg/fleet/installer/setup/install.sh index d76e790de910f..074b275028111 100644 --- a/pkg/fleet/installer/setup/install.sh +++ b/pkg/fleet/installer/setup/install.sh @@ -15,8 +15,10 @@ downloader_path="${tmp_dir}/download-installer" install() { if [ "$UID" == "0" ]; then sudo_cmd='' + sudo_cmd_with_envs='' else sudo_cmd='sudo' + sudo_cmd_with_envs='sudo -E' fi $sudo_cmd mkdir -p "${tmp_dir}" @@ -30,7 +32,7 @@ install() { esac $sudo_cmd chmod +x "${downloader_path}" echo "Starting the Datadog installer..." - $sudo_cmd "${downloader_path}" "$@" + $sudo_cmd_with_envs "${downloader_path}" "$@" $sudo_cmd rm -f "${downloader_path}" } diff --git a/test/new-e2e/tests/installer/script/all_scripts_test.go b/test/new-e2e/tests/installer/script/all_scripts_test.go index f11119346e52e..b79d99de89f1c 100644 --- a/test/new-e2e/tests/installer/script/all_scripts_test.go +++ b/test/new-e2e/tests/installer/script/all_scripts_test.go @@ -150,7 +150,7 @@ func (s *installerScriptBaseSuite) RunInstallScript(url string, params ...string func (s *installerScriptBaseSuite) RunInstallScriptWithError(url string, params ...string) error { scriptParams := append(params, "DD_API_KEY=test", "DD_INSTALLER_REGISTRY_URL_INSTALLER_PACKAGE=installtesting.datad0g.com") - _, err := s.Env().RemoteHost.Execute(fmt.Sprintf("curl -L %s > install_script; sudo -E %s bash install_script", url, strings.Join(scriptParams, " "))) + _, err := s.Env().RemoteHost.Execute(fmt.Sprintf("curl -L %s > install_script; %s bash install_script", url, strings.Join(scriptParams, " "))) return err } diff --git a/test/new-e2e/tests/installer/script/databricks_test.go b/test/new-e2e/tests/installer/script/databricks_test.go index 970d8780c58ce..5ec2ad8b6001e 100644 --- a/test/new-e2e/tests/installer/script/databricks_test.go +++ b/test/new-e2e/tests/installer/script/databricks_test.go @@ -19,7 +19,7 @@ type installScriptDatabricksSuite struct { func testDatabricksScript(os e2eos.Descriptor, arch e2eos.Architecture) installerScriptSuite { s := &installScriptDatabricksSuite{ - installerScriptBaseSuite: newInstallerScriptSuite("installer", os, arch, awshost.WithoutFakeIntake()), + installerScriptBaseSuite: newInstallerScriptSuite("installer", os, arch, awshost.WithoutFakeIntake(), awshost.WithoutAgent()), } s.url = fmt.Sprintf("https://installtesting.datad0g.com/%s/scripts/install-databricks.sh", s.commitHash) From 367c4b6154a709751eac1c92b7d0b0957aa83511 Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Wed, 11 Dec 2024 21:57:49 +0100 Subject: [PATCH 145/303] [CWS] split host workloads and container workloads in cgroup resolver (#32018) --- pkg/security/resolvers/cgroup/resolver.go | 87 ++++++++++++++--------- 1 file changed, 53 insertions(+), 34 deletions(-) diff --git a/pkg/security/resolvers/cgroup/resolver.go b/pkg/security/resolvers/cgroup/resolver.go index 825d7cc92cf42..2137cccf14506 100644 --- a/pkg/security/resolvers/cgroup/resolver.go +++ b/pkg/security/resolvers/cgroup/resolver.go @@ -47,8 +47,9 @@ type ResolverInterface interface { // Resolver defines a cgroup monitor type Resolver struct { *utils.Notifier[Event, *cgroupModel.CacheEntry] - sync.RWMutex - workloads *simplelru.LRU[containerutils.CGroupID, *cgroupModel.CacheEntry] + sync.Mutex + hostWorkloads *simplelru.LRU[containerutils.CGroupID, *cgroupModel.CacheEntry] + containerWorkloads *simplelru.LRU[containerutils.ContainerID, *cgroupModel.CacheEntry] } // NewResolver returns a new cgroups monitor @@ -56,16 +57,29 @@ func NewResolver() (*Resolver, error) { cr := &Resolver{ Notifier: utils.NewNotifier[Event, *cgroupModel.CacheEntry](), } - workloads, err := simplelru.NewLRU(1024, func(_ containerutils.CGroupID, value *cgroupModel.CacheEntry) { + + cleanup := func(value *cgroupModel.CacheEntry) { value.CallReleaseCallback() value.Deleted.Store(true) cr.NotifyListeners(CGroupDeleted, value) + } + + var err error + cr.hostWorkloads, err = simplelru.NewLRU(1024, func(_ containerutils.CGroupID, value *cgroupModel.CacheEntry) { + cleanup(value) + }) + if err != nil { + return nil, err + } + + cr.containerWorkloads, err = simplelru.NewLRU(1024, func(_ containerutils.ContainerID, value *cgroupModel.CacheEntry) { + cleanup(value) }) if err != nil { return nil, err } - cr.workloads = workloads + return cr, nil } @@ -78,7 +92,15 @@ func (cr *Resolver) AddPID(process *model.ProcessCacheEntry) { cr.Lock() defer cr.Unlock() - entry, exists := cr.workloads.Get(process.CGroup.CGroupID) + if process.ContainerID != "" { + entry, exists := cr.containerWorkloads.Get(process.ContainerID) + if exists { + entry.AddPID(process.Pid) + return + } + } + + entry, exists := cr.hostWorkloads.Get(process.CGroup.CGroupID) if exists { entry.AddPID(process.Pid) return @@ -94,33 +116,25 @@ func (cr *Resolver) AddPID(process *model.ProcessCacheEntry) { newCGroup.CreatedAt = uint64(process.ProcessContext.ExecTime.UnixNano()) // add the new CGroup to the cache - cr.workloads.Add(process.CGroup.CGroupID, newCGroup) + if process.ContainerID != "" { + cr.containerWorkloads.Add(process.ContainerID, newCGroup) + } else { + cr.hostWorkloads.Add(process.CGroup.CGroupID, newCGroup) + } cr.NotifyListeners(CGroupCreated, newCGroup) } -// Get returns the workload referenced by the provided ID -func (cr *Resolver) Get(id containerutils.CGroupID) (*cgroupModel.CacheEntry, bool) { - cr.RLock() - defer cr.RUnlock() - - return cr.workloads.Get(id) -} - // GetWorkload returns the workload referenced by the provided ID func (cr *Resolver) GetWorkload(id containerutils.ContainerID) (*cgroupModel.CacheEntry, bool) { - cr.RLock() - defer cr.RUnlock() - - if id != "" { - for _, workload := range cr.workloads.Values() { - if workload.ContainerID == id { - return workload, true - } - } + if id == "" { + return nil, false } - return nil, false + cr.Lock() + defer cr.Unlock() + + return cr.containerWorkloads.Get(id) } // DelPID removes a PID from the cgroup resolver @@ -128,7 +142,11 @@ func (cr *Resolver) DelPID(pid uint32) { cr.Lock() defer cr.Unlock() - for _, workload := range cr.workloads.Values() { + for _, workload := range cr.containerWorkloads.Values() { + cr.deleteWorkloadPID(pid, workload) + } + + for _, workload := range cr.hostWorkloads.Values() { cr.deleteWorkloadPID(pid, workload) } } @@ -138,11 +156,9 @@ func (cr *Resolver) DelPIDWithID(id containerutils.ContainerID, pid uint32) { cr.Lock() defer cr.Unlock() - for _, workload := range cr.workloads.Values() { - if workload.ContainerID == id { - cr.deleteWorkloadPID(pid, workload) - return - } + entry, exists := cr.containerWorkloads.Get(id) + if exists { + cr.deleteWorkloadPID(pid, entry) } } @@ -155,14 +171,17 @@ func (cr *Resolver) deleteWorkloadPID(pid uint32, workload *cgroupModel.CacheEnt // check if the workload should be deleted if len(workload.PIDs) <= 0 { - cr.workloads.Remove(workload.CGroupID) + cr.hostWorkloads.Remove(workload.CGroupID) + if workload.ContainerID != "" { + cr.containerWorkloads.Remove(workload.ContainerID) + } } } // Len return the number of entries func (cr *Resolver) Len() int { - cr.RLock() - defer cr.RUnlock() + cr.Lock() + defer cr.Unlock() - return cr.workloads.Len() + return cr.hostWorkloads.Len() + cr.containerWorkloads.Len() } From f2959c49b8cd131fa786bea95f4fdba4ed801bb5 Mon Sep 17 00:00:00 2001 From: Rey Abolofia Date: Wed, 11 Dec 2024 22:30:44 +0100 Subject: [PATCH 146/303] Increase serverless integration tests timeout. (#32036) --- .github/workflows/serverless-integration.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/serverless-integration.yml b/.github/workflows/serverless-integration.yml index 7414d78ac65b3..de78371e895e1 100644 --- a/.github/workflows/serverless-integration.yml +++ b/.github/workflows/serverless-integration.yml @@ -70,7 +70,7 @@ jobs: AWS_SECRET_ACCESS_KEY: ${{ secrets.SERVERLESS_AWS_SECRET_ACCESS_KEY }} GOWORK: off with: - timeout_minutes: 60 + timeout_minutes: 120 max_attempts: 2 command: | RAWLOGS_DIR="${{ steps.rawlogs.outputs.dir }}/${{ matrix.architecture }}" From aee886d40941a1119ee8a2668ac1d4f9bb47a63f Mon Sep 17 00:00:00 2001 From: Dan Lepage <140522866+dplepage-dd@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:34:50 -0500 Subject: [PATCH 147/303] [NDMII-2360] Replace the profile map with a profile provider (#31210) --- .../snmp/integration_profile_bundle_test.go | 53 --- .../snmp/internal/checkconfig/config.go | 130 +++----- .../snmp/internal/checkconfig/config_test.go | 213 ++---------- .../snmp/internal/devicecheck/devicecheck.go | 97 +----- .../internal/devicecheck/devicecheck_test.go | 311 ------------------ .../snmp/internal/profile/config_profile.go | 42 ++- .../snmp/internal/profile/profile.go | 26 +- .../internal/profile/profile_json_bundle.go | 100 ------ .../profile/profile_json_bundle_test.go | 59 ---- .../internal/profile/profile_resolver_test.go | 2 +- .../snmp/internal/profile/profile_test.go | 22 +- .../snmp/internal/profile/profile_yaml.go | 1 - .../internal/report/report_device_metadata.go | 12 +- .../report/report_device_metadata_test.go | 27 +- .../snmp.d/default_profiles/_base.yaml | 6 - .../snmp.d/default_profiles/def-p1.yaml | 24 -- .../snmp.d/profiles/f5-big-ip.yaml | 5 - .../snmp.d/profiles/profiles.json.gz | Bin 335 -> 0 bytes .../snmp.d/profiles/profiles.json.gz | 0 19 files changed, 155 insertions(+), 975 deletions(-) delete mode 100644 pkg/collector/corechecks/snmp/integration_profile_bundle_test.go delete mode 100644 pkg/collector/corechecks/snmp/internal/profile/profile_json_bundle.go delete mode 100644 pkg/collector/corechecks/snmp/internal/profile/profile_json_bundle_test.go delete mode 100644 pkg/collector/corechecks/snmp/internal/test/zipprofiles.d/snmp.d/default_profiles/_base.yaml delete mode 100644 pkg/collector/corechecks/snmp/internal/test/zipprofiles.d/snmp.d/default_profiles/def-p1.yaml delete mode 100644 pkg/collector/corechecks/snmp/internal/test/zipprofiles.d/snmp.d/profiles/f5-big-ip.yaml delete mode 100644 pkg/collector/corechecks/snmp/internal/test/zipprofiles.d/snmp.d/profiles/profiles.json.gz delete mode 100644 pkg/collector/corechecks/snmp/internal/test/zipprofiles_err.d/snmp.d/profiles/profiles.json.gz diff --git a/pkg/collector/corechecks/snmp/integration_profile_bundle_test.go b/pkg/collector/corechecks/snmp/integration_profile_bundle_test.go deleted file mode 100644 index 6e7c55f230fcc..0000000000000 --- a/pkg/collector/corechecks/snmp/integration_profile_bundle_test.go +++ /dev/null @@ -1,53 +0,0 @@ -// 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-2020 Datadog, Inc. - -package snmp - -import ( - "path/filepath" - "testing" - "time" - - "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" - nooptagger "github.com/DataDog/datadog-agent/comp/core/tagger/impl-noop" - "github.com/DataDog/datadog-agent/pkg/aggregator" - "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" - pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" - - "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/checkconfig" - "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/common" - "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/session" -) - -func TestProfileBundleJsonZip(t *testing.T) { - timeNow = common.MockTimeNow - aggregator.NewBufferedAggregator(nil, nil, nil, nooptagger.NewComponent(), "", 1*time.Hour) - invalidPath, _ := filepath.Abs(filepath.Join("internal", "test", "zipprofiles.d")) - pkgconfigsetup.Datadog().SetWithoutSource("confd_path", invalidPath) - - sess := session.CreateMockSession() - sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { - return sess, nil - } - chk := Check{sessionFactory: sessionFactory} - // language=yaml - rawInstanceConfig := []byte(` -ip_address: 1.2.3.4 -community_string: public -profile: profile-from-ui -oid_batch_size: 20 -namespace: profile-metadata -collect_topology: false -`) - // language=yaml - rawInitConfig := []byte(``) - senderManager := mocksender.CreateDefaultDemultiplexer() - err := chk.Configure(senderManager, integration.FakeConfigHash, rawInstanceConfig, rawInitConfig, "test") - assert.NoError(t, err) - - assert.Contains(t, chk.config.Profiles, "profile-from-ui") -} diff --git a/pkg/collector/corechecks/snmp/internal/checkconfig/config.go b/pkg/collector/corechecks/snmp/internal/checkconfig/config.go index 9084d26e664e7..688b2cd9350e2 100644 --- a/pkg/collector/corechecks/snmp/internal/checkconfig/config.go +++ b/pkg/collector/corechecks/snmp/internal/checkconfig/config.go @@ -48,7 +48,6 @@ const defaultWorkers = 5 const defaultDiscoveryWorkers = 5 const defaultDiscoveryAllowedFailures = 3 const defaultDiscoveryInterval = 3600 -const defaultDetectMetricsRefreshInterval = 3600 // subnetTagKey is the prefix used for subnet tag const subnetTagKey = "autodiscovery_subnet" @@ -80,18 +79,16 @@ type DeviceDigest string // InitConfig is used to deserialize integration init config type InitConfig struct { - Profiles profile.ProfileConfigMap `yaml:"profiles"` - GlobalMetrics []profiledefinition.MetricsConfig `yaml:"global_metrics"` - OidBatchSize Number `yaml:"oid_batch_size"` - BulkMaxRepetitions Number `yaml:"bulk_max_repetitions"` - CollectDeviceMetadata Boolean `yaml:"collect_device_metadata"` - CollectTopology Boolean `yaml:"collect_topology"` - UseDeviceIDAsHostname Boolean `yaml:"use_device_id_as_hostname"` - MinCollectionInterval int `yaml:"min_collection_interval"` - Namespace string `yaml:"namespace"` - PingConfig snmpintegration.PackedPingConfig `yaml:"ping"` - DetectMetricsEnabled Boolean `yaml:"experimental_detect_metrics_enabled"` - DetectMetricsRefreshInterval int `yaml:"experimental_detect_metrics_refresh_interval"` + Profiles profile.ProfileConfigMap `yaml:"profiles"` + GlobalMetrics []profiledefinition.MetricsConfig `yaml:"global_metrics"` + OidBatchSize Number `yaml:"oid_batch_size"` + BulkMaxRepetitions Number `yaml:"bulk_max_repetitions"` + CollectDeviceMetadata Boolean `yaml:"collect_device_metadata"` + CollectTopology Boolean `yaml:"collect_topology"` + UseDeviceIDAsHostname Boolean `yaml:"use_device_id_as_hostname"` + MinCollectionInterval int `yaml:"min_collection_interval"` + Namespace string `yaml:"namespace"` + PingConfig snmpintegration.PackedPingConfig `yaml:"ping"` } // InstanceConfig is used to deserialize integration instance config @@ -147,11 +144,6 @@ type InstanceConfig struct { Workers int `yaml:"workers"` Namespace string `yaml:"namespace"` - // When DetectMetricsEnabled is enabled, instead of using profile detection using sysObjectID - // the integration will fetch OIDs from the devices and deduct which metrics can be monitored (from all OOTB profile metrics definition) - DetectMetricsEnabled *Boolean `yaml:"experimental_detect_metrics_enabled"` - DetectMetricsRefreshInterval int `yaml:"experimental_detect_metrics_refresh_interval"` - // `interface_configs` option is not supported by SNMP corecheck autodiscovery (`network_address`) // it's only supported for single device instance (`ip_address`) InterfaceConfigs InterfaceConfigs `yaml:"interface_configs"` @@ -184,10 +176,9 @@ type CheckConfig struct { MetricTags []profiledefinition.MetricTagConfig OidBatchSize int BulkMaxRepetitions uint32 - Profiles profile.ProfileConfigMap + ProfileProvider profile.Provider ProfileTags []string - Profile string - ProfileDef *profiledefinition.ProfileDefinition + ProfileName string ExtraTags []string InstanceTags []string CollectDeviceMetadata bool @@ -200,9 +191,6 @@ type CheckConfig struct { AutodetectProfile bool MinCollectionInterval time.Duration - DetectMetricsEnabled bool - DetectMetricsRefreshInterval int - Network string DiscoveryWorkers int Workers int @@ -216,41 +204,33 @@ type CheckConfig struct { } // SetProfile refreshes config based on profile -func (c *CheckConfig) SetProfile(profile string) error { - if _, ok := c.Profiles[profile]; !ok { - return fmt.Errorf("unknown profile `%s`", profile) +func (c *CheckConfig) SetProfile(profileName string) error { + profileConf := c.ProfileProvider.GetProfile(profileName) + if profileConf == nil { + return fmt.Errorf("unknown profile `%s`", profileName) } - log.Debugf("Refreshing with profile `%s`", profile) - tags := []string{"snmp_profile:" + profile} - definition := c.Profiles[profile].Definition - c.ProfileDef = &definition - c.Profile = profile + log.Debugf("Refreshing with profile `%s`", profileName) + c.ProfileName = profileName if log.ShouldLog(log.DebugLvl) { - profileDefJSON, _ := json.Marshal(definition) - log.Debugf("Profile content `%s`: %s", profile, string(profileDefJSON)) - } - - if definition.Device.Vendor != "" { - tags = append(tags, "device_vendor:"+definition.Device.Vendor) + profileDefJSON, _ := json.Marshal(profileConf.Definition) + log.Debugf("Profile content `%s`: %s", profileName, string(profileDefJSON)) } - tags = append(tags, definition.StaticTags...) - c.ProfileTags = tags c.RebuildMetadataMetricsAndTags() return nil } -// SetAutodetectProfile sets the profile to the provided auto-detected metrics -// and tags. This overwrites any preexisting profile but does not affect -// RequestedMetrics or RequestedMetricTags, which will still be queried. -func (c *CheckConfig) SetAutodetectProfile(metrics []profiledefinition.MetricsConfig, tags []profiledefinition.MetricTagConfig) { - c.Profile = "autodetect" - c.ProfileDef = &profiledefinition.ProfileDefinition{ - Metrics: metrics, - MetricTags: tags, +// GetProfileDef returns the autodetected profile definition if there is one, +// the active profile if it exists, or nil if neither is true. +func (c *CheckConfig) GetProfileDef() *profiledefinition.ProfileDefinition { + if c.ProfileName != "" { + profile := c.ProfileProvider.GetProfile(c.ProfileName) + if profile != nil { + return &profile.Definition + } + log.Warnf("profile `%s` not found", c.ProfileName) } - c.ProfileTags = nil - c.RebuildMetadataMetricsAndTags() + return nil } // RebuildMetadataMetricsAndTags rebuilds c.Metrics, c.Metadata, c.MetricTags, @@ -259,10 +239,17 @@ func (c *CheckConfig) SetAutodetectProfile(metrics []profiledefinition.MetricsCo func (c *CheckConfig) RebuildMetadataMetricsAndTags() { c.Metrics = c.RequestedMetrics c.MetricTags = c.RequestedMetricTags - if c.ProfileDef != nil { - c.Metadata = updateMetadataDefinitionWithDefaults(c.ProfileDef.Metadata, c.CollectTopology) - c.Metrics = append(c.Metrics, c.ProfileDef.Metrics...) - c.MetricTags = append(c.MetricTags, c.ProfileDef.MetricTags...) + c.ProfileTags = nil + profileDef := c.GetProfileDef() + if profileDef != nil { + c.ProfileTags = append(c.ProfileTags, "snmp_profile:"+c.ProfileName) + if profileDef.Device.Vendor != "" { + c.ProfileTags = append(c.ProfileTags, "device_vendor:"+profileDef.Device.Vendor) + } + c.ProfileTags = append(c.ProfileTags, profileDef.StaticTags...) + c.Metadata = updateMetadataDefinitionWithDefaults(profileDef.Metadata, c.CollectTopology) + c.Metrics = append(c.Metrics, profileDef.Metrics...) + c.MetricTags = append(c.MetricTags, profileDef.MetricTags...) } else { c.Metadata = updateMetadataDefinitionWithDefaults(nil, c.CollectTopology) } @@ -394,20 +381,6 @@ func NewCheckConfig(rawInstance integration.Data, rawInitConfig integration.Data c.CollectTopology = bool(initConfig.CollectTopology) } - if instance.DetectMetricsEnabled != nil { - c.DetectMetricsEnabled = bool(*instance.DetectMetricsEnabled) - } else { - c.DetectMetricsEnabled = bool(initConfig.DetectMetricsEnabled) - } - - if instance.DetectMetricsRefreshInterval != 0 { - c.DetectMetricsRefreshInterval = int(instance.DetectMetricsRefreshInterval) - } else if initConfig.DetectMetricsRefreshInterval != 0 { - c.DetectMetricsRefreshInterval = int(initConfig.DetectMetricsRefreshInterval) - } else { - c.DetectMetricsRefreshInterval = defaultDetectMetricsRefreshInterval - } - if instance.UseDeviceIDAsHostname != nil { c.UseDeviceIDAsHostname = bool(*instance.UseDeviceIDAsHostname) } else { @@ -519,15 +492,15 @@ func NewCheckConfig(rawInstance integration.Data, rawInitConfig integration.Data return nil, err } - profiles, err := profile.GetProfiles(initConfig.Profiles) + profiles, err := profile.GetProfileProvider(initConfig.Profiles) if err != nil { return nil, err } - c.Profiles = profiles + c.ProfileProvider = profiles // profile configs - profile := instance.Profile - if profile != "" || len(instance.Metrics) > 0 { + profileName := instance.Profile + if profileName != "" || len(instance.Metrics) > 0 { c.AutodetectProfile = false } else { c.AutodetectProfile = true @@ -552,10 +525,10 @@ func NewCheckConfig(rawInstance integration.Data, rawInitConfig integration.Data return nil, fmt.Errorf("validation errors: %s", strings.Join(errors, "\n")) } - if profile != "" { - err = c.SetProfile(profile) + if profileName != "" { + err = c.SetProfile(profileName) if err != nil { - return nil, fmt.Errorf("failed to refresh with profile `%s`: %s", profile, err) + return nil, fmt.Errorf("failed to refresh with profile `%s`: %s", profileName, err) } } else { c.RebuildMetadataMetricsAndTags() @@ -688,10 +661,9 @@ func (c *CheckConfig) Copy() *CheckConfig { copy(newConfig.MetricTags, c.MetricTags) newConfig.OidBatchSize = c.OidBatchSize newConfig.BulkMaxRepetitions = c.BulkMaxRepetitions - newConfig.Profiles = c.Profiles + newConfig.ProfileProvider = c.ProfileProvider newConfig.ProfileTags = netutils.CopyStrings(c.ProfileTags) - newConfig.Profile = c.Profile - newConfig.ProfileDef = c.ProfileDef + newConfig.ProfileName = c.ProfileName newConfig.ExtraTags = netutils.CopyStrings(c.ExtraTags) newConfig.InstanceTags = netutils.CopyStrings(c.InstanceTags) newConfig.CollectDeviceMetadata = c.CollectDeviceMetadata @@ -703,8 +675,6 @@ func (c *CheckConfig) Copy() *CheckConfig { newConfig.ResolvedSubnetName = c.ResolvedSubnetName newConfig.Namespace = c.Namespace newConfig.AutodetectProfile = c.AutodetectProfile - newConfig.DetectMetricsEnabled = c.DetectMetricsEnabled - newConfig.DetectMetricsRefreshInterval = c.DetectMetricsRefreshInterval newConfig.MinCollectionInterval = c.MinCollectionInterval newConfig.InterfaceConfigs = c.InterfaceConfigs diff --git a/pkg/collector/corechecks/snmp/internal/checkconfig/config_test.go b/pkg/collector/corechecks/snmp/internal/checkconfig/config_test.go index 07b6ba9eefaa4..ef9b8628da93a 100644 --- a/pkg/collector/corechecks/snmp/internal/checkconfig/config_test.go +++ b/pkg/collector/corechecks/snmp/internal/checkconfig/config_test.go @@ -250,7 +250,7 @@ bulk_max_repetitions: 20 assert.Equal(t, expectedMetrics, config.Metrics) assert.Equal(t, expectedMetricTags, config.MetricTags) assert.Equal(t, []string{"snmp_profile:f5-big-ip", "device_vendor:f5", "static_tag:from_profile_root", "static_tag:from_base_profile"}, config.ProfileTags) - assert.Equal(t, 1, len(config.Profiles)) + assert.True(t, config.ProfileProvider.HasProfile("f5-big-ip")) assert.Equal(t, "default:1.2.3.4", config.DeviceID) assert.Equal(t, []string{"device_namespace:default", "snmp_device:1.2.3.4"}, config.DeviceIDTags) assert.Equal(t, "127.0.0.0/30", config.ResolvedSubnetName) @@ -372,7 +372,8 @@ profiles: assert.Equal(t, "123", config.CommunityString) assert.Equal(t, metrics, config.Metrics) assert.Equal(t, metricsTags, config.MetricTags) - assert.Equal(t, 2, len(config.Profiles)) + assert.True(t, config.ProfileProvider.HasProfile("f5-big-ip")) + assert.True(t, config.ProfileProvider.HasProfile("inline-profile")) assert.Equal(t, "default:1.2.3.4", config.DeviceID) assert.Equal(t, []string{"device_namespace:default", "snmp_device:1.2.3.4"}, config.DeviceIDTags) assert.Equal(t, false, config.AutodetectProfile) @@ -406,8 +407,10 @@ community_string: abc assert.Equal(t, metrics, config.Metrics) assert.Equal(t, metricsTags, config.MetricTags) - assert.Equal(t, 2, len(config.Profiles)) - assert.Equal(t, profile.FixtureProfileDefinitionMap()["f5-big-ip"].Definition.Metrics, config.Profiles["f5-big-ip"].Definition.Metrics) + // assert.Equal(t, 2, len(config.Profiles)) + assert.True(t, config.ProfileProvider.HasProfile("f5-big-ip")) + assert.True(t, config.ProfileProvider.HasProfile("another_profile")) + assert.Equal(t, profile.FixtureProfileDefinitionMap()["f5-big-ip"].Definition.Metrics, config.ProfileProvider.GetProfile("f5-big-ip").Definition.Metrics) } func TestPortConfiguration(t *testing.T) { @@ -927,17 +930,17 @@ func Test_snmpConfig_setProfile(t *testing.T) { SysObjectIDs: profiledefinition.StringArray{"1.3.6.1.4.1.3375.2.1.3.4.*"}, } - mockProfiles := profile.ProfileConfigMap{ + mockProfiles := profile.StaticProvider(profile.ProfileConfigMap{ "profile1": profile.ProfileConfig{ Definition: profile1, }, "profile2": profile.ProfileConfig{ Definition: profile2, }, - } + }) c := &CheckConfig{ - IPAddress: "1.2.3.4", - Profiles: mockProfiles, + IPAddress: "1.2.3.4", + ProfileProvider: mockProfiles, } err := c.SetProfile("f5") assert.EqualError(t, err, "unknown profile `f5`") @@ -945,8 +948,8 @@ func Test_snmpConfig_setProfile(t *testing.T) { err = c.SetProfile("profile1") assert.NoError(t, err) - assert.Equal(t, "profile1", c.Profile) - assert.Equal(t, profile1, *c.ProfileDef) + assert.Equal(t, "profile1", c.ProfileName) + assert.Equal(t, &profile1, c.GetProfileDef()) assert.Equal(t, metrics, c.Metrics) assert.Equal(t, []profiledefinition.MetricTagConfig{ {Tag: "location", Symbol: profiledefinition.SymbolConfigCompat{OID: "1.3.6.1.2.1.1.6.0", Name: "sysLocation"}}, @@ -959,7 +962,7 @@ func Test_snmpConfig_setProfile(t *testing.T) { c = &CheckConfig{ IPAddress: "1.2.3.4", - Profiles: mockProfiles, + ProfileProvider: mockProfiles, CollectDeviceMetadata: true, CollectTopology: false, } @@ -1000,7 +1003,7 @@ func Test_snmpConfig_setProfile(t *testing.T) { c = &CheckConfig{ IPAddress: "1.2.3.4", - Profiles: mockProfiles, + ProfileProvider: mockProfiles, CollectDeviceMetadata: true, CollectTopology: false, } @@ -1331,181 +1334,6 @@ use_device_id_as_hostname: true assert.Equal(t, false, config.UseDeviceIDAsHostname) } -func Test_buildConfig_DetectMetricsEnabled(t *testing.T) { - // language=yaml - rawInstanceConfig := []byte(` -ip_address: 1.2.3.4 -community_string: "abc" -`) - // language=yaml - rawInitConfig := []byte(` -oid_batch_size: 10 -`) - config, err := NewCheckConfig(rawInstanceConfig, rawInitConfig) - assert.Nil(t, err) - assert.Equal(t, false, config.DetectMetricsEnabled) - - // language=yaml - rawInstanceConfig = []byte(` -ip_address: 1.2.3.4 -community_string: "abc" -`) - // language=yaml - rawInitConfig = []byte(` -oid_batch_size: 10 -experimental_detect_metrics_enabled: true -`) - config, err = NewCheckConfig(rawInstanceConfig, rawInitConfig) - assert.Nil(t, err) - assert.Equal(t, true, config.DetectMetricsEnabled) - - // language=yaml - rawInstanceConfig = []byte(` -ip_address: 1.2.3.4 -community_string: "abc" -experimental_detect_metrics_enabled: true -`) - // language=yaml - rawInitConfig = []byte(` -oid_batch_size: 10 -`) - config, err = NewCheckConfig(rawInstanceConfig, rawInitConfig) - assert.Nil(t, err) - assert.Equal(t, true, config.DetectMetricsEnabled) - - // language=yaml - rawInstanceConfig = []byte(` -ip_address: 1.2.3.4 -community_string: "abc" -experimental_detect_metrics_enabled: false -`) - // language=yaml - rawInitConfig = []byte(` -oid_batch_size: 10 -experimental_detect_metrics_enabled: true -`) - config, err = NewCheckConfig(rawInstanceConfig, rawInitConfig) - assert.Nil(t, err) - assert.Equal(t, false, config.DetectMetricsEnabled) -} - -func TestSetAutodetectPreservesRequests(t *testing.T) { - metric := func(oid, name string) profiledefinition.MetricsConfig { - return profiledefinition.MetricsConfig{Symbol: profiledefinition.SymbolConfig{OID: oid, Name: name}} - } - - met1 := metric("1.1", "metricOne") - met2 := metric("1.2", "metricTwo") - met3 := metric("1.3", "metricThree") - tag1 := profiledefinition.MetricTagConfig{Tag: "tag_one", Symbol: profiledefinition.SymbolConfigCompat{OID: "2.1", Name: "tagOne"}} - tag2 := profiledefinition.MetricTagConfig{Tag: "tag_two", Symbol: profiledefinition.SymbolConfigCompat{OID: "2.2", Name: "tagTwo"}} - tag3 := profiledefinition.MetricTagConfig{Tag: "tag_three", Symbol: profiledefinition.SymbolConfigCompat{OID: "2.3", Name: "tagThree"}} - - config := &CheckConfig{ - CollectTopology: false, - RequestedMetrics: []profiledefinition.MetricsConfig{met1}, - RequestedMetricTags: []profiledefinition.MetricTagConfig{tag1}, - } - - config.RebuildMetadataMetricsAndTags() - - assert.Equal(t, []profiledefinition.MetricsConfig{met1}, config.Metrics) - assert.Equal(t, []profiledefinition.MetricTagConfig{tag1}, config.MetricTags) - assert.Equal(t, OidConfig{ - ScalarOids: []string{ - "1.1", - "2.1", - }, - ColumnOids: nil, - }, config.OidConfig) - - config.SetAutodetectProfile([]profiledefinition.MetricsConfig{met2}, []profiledefinition.MetricTagConfig{tag2}) - - assert.Equal(t, []profiledefinition.MetricsConfig{met1, met2}, config.Metrics) - assert.Equal(t, []profiledefinition.MetricTagConfig{tag1, tag2}, config.MetricTags) - assert.Equal(t, OidConfig{ - ScalarOids: []string{ - "1.1", - "1.2", - "2.1", - "2.2", - }, - ColumnOids: nil, - }, config.OidConfig) - - config.SetAutodetectProfile([]profiledefinition.MetricsConfig{met3}, []profiledefinition.MetricTagConfig{tag3}) - - assert.Equal(t, []profiledefinition.MetricsConfig{met1, met3}, config.Metrics) - assert.Equal(t, []profiledefinition.MetricTagConfig{tag1, tag3}, config.MetricTags) - assert.Equal(t, OidConfig{ - ScalarOids: []string{ - "1.1", - "1.3", - "2.1", - "2.3", - }, - ColumnOids: nil, - }, config.OidConfig) -} - -func Test_buildConfig_DetectMetricsRefreshInterval(t *testing.T) { - // language=yaml - rawInstanceConfig := []byte(` -ip_address: 1.2.3.4 -community_string: "abc" -`) - // language=yaml - rawInitConfig := []byte(` -oid_batch_size: 10 -`) - config, err := NewCheckConfig(rawInstanceConfig, rawInitConfig) - assert.Nil(t, err) - assert.Equal(t, 3600, config.DetectMetricsRefreshInterval) - - // language=yaml - rawInstanceConfig = []byte(` -ip_address: 1.2.3.4 -community_string: "abc" -`) - // language=yaml - rawInitConfig = []byte(` -oid_batch_size: 10 -experimental_detect_metrics_refresh_interval: 10 -`) - config, err = NewCheckConfig(rawInstanceConfig, rawInitConfig) - assert.Nil(t, err) - assert.Equal(t, 10, config.DetectMetricsRefreshInterval) - - // language=yaml - rawInstanceConfig = []byte(` -ip_address: 1.2.3.4 -community_string: "abc" -experimental_detect_metrics_refresh_interval: 10 -`) - // language=yaml - rawInitConfig = []byte(` -oid_batch_size: 20 -`) - config, err = NewCheckConfig(rawInstanceConfig, rawInitConfig) - assert.Nil(t, err) - assert.Equal(t, 10, config.DetectMetricsRefreshInterval) - - // language=yaml - rawInstanceConfig = []byte(` -ip_address: 1.2.3.4 -community_string: "abc" -experimental_detect_metrics_refresh_interval: 20 -`) - // language=yaml - rawInitConfig = []byte(` -oid_batch_size: 10 -experimental_detect_metrics_refresh_interval: 30 -`) - config, err = NewCheckConfig(rawInstanceConfig, rawInitConfig) - assert.Nil(t, err) - assert.Equal(t, 20, config.DetectMetricsRefreshInterval) -} - func Test_buildConfig_minCollectionInterval(t *testing.T) { tests := []struct { name string @@ -2113,16 +1941,13 @@ func TestCheckConfig_Copy(t *testing.T) { }, OidBatchSize: 10, BulkMaxRepetitions: 10, - Profiles: profile.ProfileConfigMap{"f5-big-ip": profile.ProfileConfig{ + ProfileProvider: profile.StaticProvider(profile.ProfileConfigMap{"f5-big-ip": profile.ProfileConfig{ Definition: profiledefinition.ProfileDefinition{ Device: profiledefinition.DeviceMeta{Vendor: "f5"}, }, - }}, - ProfileTags: []string{"profile_tag:atag"}, - Profile: "f5", - ProfileDef: &profiledefinition.ProfileDefinition{ - Device: profiledefinition.DeviceMeta{Vendor: "f5"}, - }, + }}), + ProfileTags: []string{"profile_tag:atag"}, + ProfileName: "f5", ExtraTags: []string{"ExtraTags:tag"}, InstanceTags: []string{"InstanceTags:tag"}, CollectDeviceMetadata: true, diff --git a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go index f63d0a4c33791..969fd45d2da52 100644 --- a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go +++ b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go @@ -26,14 +26,12 @@ import ( "github.com/DataDog/datadog-agent/pkg/networkdevice/metadata" "github.com/DataDog/datadog-agent/pkg/networkdevice/pinger" - "github.com/DataDog/datadog-agent/pkg/networkdevice/profile/profiledefinition" "github.com/DataDog/datadog-agent/pkg/networkdevice/utils" coresnmp "github.com/DataDog/datadog-agent/pkg/snmp" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/checkconfig" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/common" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/fetch" - "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/profile" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/report" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/session" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/valuestore" @@ -56,9 +54,6 @@ const ( checkDurationThreshold = 30 // Thirty seconds ) -// define timeNow as variable to make it possible to mock it during test -var timeNow = time.Now - // DeviceCheck hold info necessary to collect info for a single device type DeviceCheck struct { config *checkconfig.CheckConfig @@ -68,7 +63,6 @@ type DeviceCheck struct { devicePinger pinger.Pinger sessionCloseErrorCount *atomic.Uint64 savedDynamicTags []string - nextAutodetectMetrics time.Time diagnoses *diagnoses.Diagnoses interfaceBandwidthState report.InterfaceBandwidthState cacheKey string @@ -97,7 +91,6 @@ func NewDeviceCheck(config *checkconfig.CheckConfig, ipAddress string, sessionFa sessionFactory: sessionFactory, devicePinger: devicePinger, sessionCloseErrorCount: atomic.NewUint64(0), - nextAutodetectMetrics: timeNow(), diagnoses: diagnoses.NewDeviceDiagnoses(newConfig.DeviceID), interfaceBandwidthState: report.MakeInterfaceBandwidthState(), cacheKey: cacheKey, @@ -315,30 +308,21 @@ func (d *DeviceCheck) getValuesAndTags() (bool, []string, *valuestore.ResultValu } func (d *DeviceCheck) detectMetricsToMonitor(sess session.Session) error { - if d.config.DetectMetricsEnabled { - if d.nextAutodetectMetrics.After(timeNow()) { - return nil - } - d.nextAutodetectMetrics = d.nextAutodetectMetrics.Add(time.Duration(d.config.DetectMetricsRefreshInterval) * time.Second) - - detectedMetrics, metricTagConfigs := d.detectAvailableMetrics() - log.Debugf("detected metrics: %v", detectedMetrics) - d.config.SetAutodetectProfile(detectedMetrics, metricTagConfigs) - } else if d.config.AutodetectProfile { + if d.config.AutodetectProfile { // detect using sysObjectID sysObjectID, err := session.FetchSysObjectID(sess) if err != nil { return fmt.Errorf("failed to fetch sysobjectid: %s", err) } - profile, err := profile.GetProfileForSysObjectID(d.config.Profiles, sysObjectID) + profile, err := d.config.ProfileProvider.GetProfileNameForSysObjectID(sysObjectID) if err != nil { return fmt.Errorf("failed to get profile sys object id for `%s`: %s", sysObjectID, err) } - if profile != d.config.Profile { - log.Debugf("detected profile change: %s -> %s", d.config.Profile, profile) + if profile != d.config.ProfileName { + log.Debugf("detected profile change: %s -> %s", d.config.ProfileName, profile) err = d.config.SetProfile(profile) if err != nil { - // Should not happen since the profile is one of those we matched in GetProfileForSysObjectID + // Should not happen since the profile is one of those we matched in GetProfileNameForSysObjectID return fmt.Errorf("failed to refresh with profile `%s` detected using sysObjectID `%s`: %s", profile, sysObjectID, err) } } @@ -346,77 +330,6 @@ func (d *DeviceCheck) detectMetricsToMonitor(sess session.Session) error { return nil } -func (d *DeviceCheck) detectAvailableMetrics() ([]profiledefinition.MetricsConfig, []profiledefinition.MetricTagConfig) { - fetchedOIDs := session.FetchAllOIDsUsingGetNext(d.session) - log.Debugf("fetched OIDs: %v", fetchedOIDs) - - root := common.BuildOidTrie(fetchedOIDs) - if log.ShouldLog(log.DebugLvl) { - root.DebugPrint() - } - - var metricConfigs []profiledefinition.MetricsConfig - var metricTagConfigs []profiledefinition.MetricTagConfig - - // If a metric name has already been encountered, we won't try to add it again. - alreadySeenMetrics := make(map[string]bool) - // If a global tag has already been encountered, we won't try to add it again. - alreadyGlobalTags := make(map[string]bool) - for _, profileConfig := range d.config.Profiles { - for _, metricConfig := range profileConfig.Definition.Metrics { - newMetricConfig := metricConfig - if metricConfig.IsScalar() { - metricName := metricConfig.Symbol.Name - if metricConfig.Options.MetricSuffix != "" { - metricName = metricName + "." + metricConfig.Options.MetricSuffix - } - if !alreadySeenMetrics[metricName] && root.LeafExist(metricConfig.Symbol.OID) { - alreadySeenMetrics[metricName] = true - metricConfigs = append(metricConfigs, newMetricConfig) - } - } else if metricConfig.IsColumn() { - newMetricConfig.Symbols = []profiledefinition.SymbolConfig{} - for _, symbol := range metricConfig.Symbols { - if !alreadySeenMetrics[symbol.Name] && root.NonLeafNodeExist(symbol.OID) { - alreadySeenMetrics[symbol.Name] = true - newMetricConfig.Symbols = append(newMetricConfig.Symbols, symbol) - } - } - if len(newMetricConfig.Symbols) > 0 { - metricConfigs = append(metricConfigs, newMetricConfig) - } - } - } - for _, metricTag := range profileConfig.Definition.MetricTags { - if root.LeafExist(metricTag.Symbol.OID) { - if metricTag.Tag != "" { - if alreadyGlobalTags[metricTag.Tag] { - continue - } - alreadyGlobalTags[metricTag.Tag] = true - } else { - // We don't add `metricTag` if any of the `metricTag.Tags` has already been encountered. - alreadyPresent := false - for tagKey := range metricTag.Tags { - if alreadyGlobalTags[tagKey] { - alreadyPresent = true - break - } - } - if alreadyPresent { - continue - } - for tagKey := range metricTag.Tags { - alreadyGlobalTags[tagKey] = true - } - } - metricTagConfigs = append(metricTagConfigs, metricTag) - } - } - } - return metricConfigs, metricTagConfigs -} - func (d *DeviceCheck) submitTelemetryMetrics(startTime time.Time, tags []string) { newTags := append(utils.CopyStrings(tags), snmpLoaderTag, utils.GetAgentVersionTag()) diff --git a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go index 028e233687aca..c56235171d3a2 100644 --- a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go +++ b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go @@ -9,7 +9,6 @@ import ( "encoding/json" "errors" "fmt" - "path/filepath" "strings" "testing" "time" @@ -19,18 +18,14 @@ import ( "github.com/stretchr/testify/mock" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" - pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/metrics/servicecheck" "github.com/DataDog/datadog-agent/pkg/version" "github.com/DataDog/datadog-agent/pkg/networkdevice/pinger" - "github.com/DataDog/datadog-agent/pkg/networkdevice/profile/profiledefinition" "github.com/DataDog/datadog-agent/pkg/networkdevice/utils" "github.com/DataDog/datadog-agent/pkg/snmp/gosnmplib" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/checkconfig" - "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/common" - "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/configvalidation" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/profile" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/report" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/session" @@ -237,225 +232,6 @@ global_metrics: } -func TestDetectMetricsToCollect(t *testing.T) { - timeNow = common.MockTimeNow - defer func() { timeNow = time.Now }() - - profilesWithInvalidExtendConfdPath, _ := filepath.Abs(filepath.Join("..", "test", "detectmetr.d")) - pkgconfigsetup.Datadog().SetWithoutSource("confd_path", profilesWithInvalidExtendConfdPath) - - sess := session.CreateFakeSession() - sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { - return sess, nil - } - - // language=yaml - rawInstanceConfig := []byte(` -ip_address: 1.2.3.4 -community_string: public -experimental_detect_metrics_enabled: true -experimental_detect_metrics_refresh_interval: 10 -collect_topology: false -`) - // language=yaml - rawInitConfig := []byte(``) - - config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) - assert.Nil(t, err) - - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) - assert.Nil(t, err) - - sender := mocksender.NewMockSender("123") // required to initiate aggregator - sender.On("Gauge", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return() - sender.On("MonotonicCount", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return() - sender.On("ServiceCheck", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return() - sender.On("EventPlatformEvent", mock.Anything, mock.Anything).Return() - sender.On("Commit").Return() - - deviceCk.SetSender(report.NewMetricSender(sender, "", nil, report.MakeInterfaceBandwidthState())) - - sess. - SetObj("1.3.6.1.2.1.1.2.0", "1.3.6.1.4.1.3375.2.1.3.4.1"). - SetTime("1.3.6.1.2.1.1.3.0", 20). - SetStr("1.3.6.1.2.1.1.1.0", "my_desc"). - SetStr("1.3.6.1.2.1.1.5.0", "foo_sys_name"). - SetStr("1.3.6.1.4.1.318.1.1.1.11.1.1.0", "1010"). - SetInt("1.3.6.1.2.1.2.2.1.13.1", 131). - SetInt("1.3.6.1.2.1.2.2.1.14.1", 141). - SetStr("1.3.6.1.2.1.2.2.1.2.1", `desc1`). - SetByte("1.3.6.1.2.1.2.2.1.6.1", []byte{00, 00, 00, 00, 00, 01}). - SetInt("1.3.6.1.2.1.2.2.1.7.1", 1). - SetInt("1.3.6.1.2.1.2.2.1.13.2", 132). - SetInt("1.3.6.1.2.1.2.2.1.14.2", 142). - SetByte("1.3.6.1.2.1.2.2.1.6.2", []byte{00, 00, 00, 00, 00, 01}). - SetStr("1.3.6.1.2.1.2.2.1.2.2", `desc2`). - SetInt("1.3.6.1.2.1.2.2.1.7.2", 1). - SetInt("1.3.6.1.2.1.2.2.1.8.1", 1). - SetStr("1.3.6.1.2.1.31.1.1.1.1.1", "nameRow1"). - SetStr("1.3.6.1.2.1.31.1.1.1.18.1", "descRow1"). - SetInt("1.3.6.1.2.1.4.20.1.2.10.0.0.1", 1). - SetIP("1.3.6.1.2.1.4.20.1.3.10.0.0.1", "255.255.255.0"). - SetInt("1.3.6.1.2.1.2.2.1.8.2", 1). - SetStr("1.3.6.1.2.1.31.1.1.1.1.2", "nameRow2"). - SetStr("1.3.6.1.2.1.31.1.1.1.18.2", "descRow2"). - SetInt("1.3.6.1.2.1.4.20.1.2.10.0.0.2", 1). - SetIP("1.3.6.1.2.1.4.20.1.3.10.0.0.2", "255.255.255.0") - - savedAutodetectMetricsTime := deviceCk.nextAutodetectMetrics - err = deviceCk.Run(timeNow()) - assert.Nil(t, err) - - snmpTags := []string{"snmp_device:1.2.3.4", "device_ip:1.2.3.4", "device_id:default:1.2.3.4"} - telemetryTags := append(utils.CopyStrings(snmpTags), "agent_version:"+version.AgentVersion) - row1Tags := append(utils.CopyStrings(snmpTags), "interface:nameRow1", "interface_alias:descRow1", "table_static_tag:val") - row2Tags := append(utils.CopyStrings(snmpTags), "interface:nameRow2", "interface_alias:descRow2", "table_static_tag:val") - - sender.AssertMetric(t, "Gauge", "snmp.sysUpTimeInstance", float64(20), "", snmpTags) - sender.AssertMetric(t, "MonotonicCount", "snmp.ifInErrors", float64(70.5), "", row1Tags) - sender.AssertMetric(t, "MonotonicCount", "snmp.ifInErrors", float64(71), "", row2Tags) - sender.AssertMetric(t, "MonotonicCount", "snmp.ifInDiscards", float64(131), "", row1Tags) - sender.AssertMetric(t, "MonotonicCount", "snmp.ifInDiscards", float64(132), "", row2Tags) - sender.AssertNotCalled(t, "Gauge", "snmp.sysStatMemoryTotal", mock.Anything, mock.Anything, mock.Anything) - - sender.AssertMetric(t, "Gauge", "snmp.devices_monitored", float64(1), "", telemetryTags) - sender.AssertMetricTaggedWith(t, "MonotonicCount", "datadog.snmp.check_interval", telemetryTags) - sender.AssertMetricTaggedWith(t, "Gauge", "datadog.snmp.check_duration", telemetryTags) - sender.AssertMetricTaggedWith(t, "Gauge", "datadog.snmp.submitted_metrics", telemetryTags) - - expectedNextAutodetectMetricsTime := savedAutodetectMetricsTime.Add(time.Duration(deviceCk.config.DetectMetricsRefreshInterval) * time.Second) - assert.WithinDuration(t, expectedNextAutodetectMetricsTime, deviceCk.nextAutodetectMetrics, time.Second) - - expectedMetrics := []profiledefinition.MetricsConfig{ - {Symbol: profiledefinition.SymbolConfig{OID: "1.3.6.1.2.1.1.3.0", Name: "sysUpTimeInstance"}}, - {Symbol: profiledefinition.SymbolConfig{OID: "1.3.6.1.4.1.318.1.1.1.11.1.1.0", Name: "upsBasicStateOutputState"}, MetricType: "flag_stream", Options: profiledefinition.MetricsConfigOption{Placement: 1, MetricSuffix: "OnLine"}}, - {Symbol: profiledefinition.SymbolConfig{OID: "1.3.6.1.4.1.318.1.1.1.11.1.1.0", Name: "upsBasicStateOutputState"}, MetricType: "flag_stream", Options: profiledefinition.MetricsConfigOption{Placement: 2, MetricSuffix: "ReplaceBattery"}}, - { - MetricType: profiledefinition.ProfileMetricTypeMonotonicCount, - MIB: "IF-MIB", - Table: profiledefinition.SymbolConfig{ - OID: "1.3.6.1.2.1.2.2", - Name: "ifTable", - }, - Symbols: []profiledefinition.SymbolConfig{ - {OID: "1.3.6.1.2.1.2.2.1.14", Name: "ifInErrors", ScaleFactor: 0.5}, - {OID: "1.3.6.1.2.1.2.2.1.13", Name: "ifInDiscards"}, - }, - MetricTags: []profiledefinition.MetricTagConfig{ - {Tag: "interface", Symbol: profiledefinition.SymbolConfigCompat{OID: "1.3.6.1.2.1.31.1.1.1.1", Name: "ifName"}}, - {Tag: "interface_alias", Symbol: profiledefinition.SymbolConfigCompat{OID: "1.3.6.1.2.1.31.1.1.1.18", Name: "ifAlias"}}, - {Tag: "mac_address", Symbol: profiledefinition.SymbolConfigCompat{OID: "1.3.6.1.2.1.2.2.1.6", Name: "ifPhysAddress", Format: "mac_address"}}, - }, - StaticTags: []string{"table_static_tag:val"}, - }, - } - - expectedMetricTags := []profiledefinition.MetricTagConfig{ - {Tag: "snmp_host2", Symbol: profiledefinition.SymbolConfigCompat{OID: "1.3.6.1.2.1.1.5.0", Name: "sysName"}}, - { - Symbol: profiledefinition.SymbolConfigCompat{OID: "1.3.6.1.2.1.1.5.0", Name: "sysName"}, - Match: "(\\w)(\\w+)", - Tags: map[string]string{ - "prefix": "\\1", - "suffix": "\\2", - "some_tag": "some_tag_value", - }, - }, - {Tag: "snmp_host", Symbol: profiledefinition.SymbolConfigCompat{OID: "1.3.6.1.2.1.1.5.0", Name: "sysName"}}, - } - configvalidation.ValidateEnrichMetrics(expectedMetrics) - configvalidation.ValidateEnrichMetricTags(expectedMetricTags) - - assert.ElementsMatch(t, deviceCk.config.Metrics, expectedMetrics) - - assert.ElementsMatch(t, deviceCk.config.MetricTags, expectedMetricTags) - - // Add a new metric and make sure it is added but nothing else is re-added - sess.SetInt("1.3.6.1.4.1.3375.2.1.1.2.1.44.0", 30) - sender.ResetCalls() - timeNow = func() time.Time { - return common.MockTimeNow().Add(time.Second * 100) - } - - err = deviceCk.Run(timeNow()) - assert.Nil(t, err) - - sender.AssertMetric(t, "Gauge", "snmp.sysStatMemoryTotal", float64(60), "", snmpTags) - - expectedMetrics = append(expectedMetrics, profiledefinition.MetricsConfig{ - MIB: "F5-BIGIP-SYSTEM-MIB", - Symbol: profiledefinition.SymbolConfig{OID: "1.3.6.1.4.1.3375.2.1.1.2.1.44.0", Name: "sysStatMemoryTotal", ScaleFactor: 2}, - MetricType: profiledefinition.ProfileMetricTypeGauge, - }) - assert.ElementsMatch(t, expectedMetrics, deviceCk.config.Metrics) - assert.ElementsMatch(t, expectedMetricTags, deviceCk.config.MetricTags) - -} - -func TestDetectMetricsToCollect_detectMetricsToMonitor_nextAutodetectMetrics(t *testing.T) { - timeNow = common.MockTimeNow - defer func() { timeNow = time.Now }() - - sess := session.CreateMockSession() - sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { - return sess, nil - } - - // language=yaml - rawInstanceConfig := []byte(` -ip_address: 1.2.3.4 -community_string: public -experimental_detect_metrics_enabled: true -experimental_detect_metrics_refresh_interval: 600 # 10min -`) - // language=yaml - rawInitConfig := []byte(` -profiles: - f5-big-ip: - definition_file: f5-big-ip.yaml -`) - - config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) - assert.Nil(t, err) - - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) - assert.Nil(t, err) - - deviceCk.session, err = sessionFactory(config) - assert.Nil(t, err) - - sender := mocksender.NewMockSender("123") // required to initiate aggregator - deviceCk.SetSender(report.NewMetricSender(sender, "", nil, report.MakeInterfaceBandwidthState())) - sess.On("GetNext", []string{"1.0"}).Return(session.CreateGetNextPacket("9999", gosnmp.EndOfMibView, nil), nil) - - deviceCk.detectMetricsToMonitor(sess) - - expectedNextAutodetectMetricsTime := common.MockTimeNow().Add(600 * time.Second) - assert.Equal(t, expectedNextAutodetectMetricsTime, deviceCk.nextAutodetectMetrics) - - // 10 seconds after - timeNow = func() time.Time { - return common.MockTimeNow().Add(10 * time.Second) - } - deviceCk.detectMetricsToMonitor(sess) - assert.Equal(t, expectedNextAutodetectMetricsTime, deviceCk.nextAutodetectMetrics) - - // 599 seconds after - timeNow = func() time.Time { - return common.MockTimeNow().Add(599 * time.Second) - } - deviceCk.detectMetricsToMonitor(sess) - assert.Equal(t, expectedNextAutodetectMetricsTime, deviceCk.nextAutodetectMetrics) - - // 600 seconds after - expectedNextAutodetectMetricsTime = common.MockTimeNow().Add(1200 * time.Second) - timeNow = func() time.Time { - return common.MockTimeNow().Add(600 * time.Second) - } - deviceCk.detectMetricsToMonitor(sess) - assert.Equal(t, expectedNextAutodetectMetricsTime, deviceCk.nextAutodetectMetrics) -} - func TestDeviceCheck_Hostname(t *testing.T) { profile.SetConfdPathAndCleanProfiles() // language=yaml @@ -892,93 +668,6 @@ profiles: assert.Equal(t, uint64(1), deviceCk.sessionCloseErrorCount.Load()) } -func TestDeviceCheck_detectAvailableMetrics(t *testing.T) { - profile.SetConfdPathAndCleanProfiles() - - sess := session.CreateMockSession() - sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { - return sess, nil - } - - // language=yaml - rawInstanceConfig := []byte(` -collect_device_metadata: false -ip_address: 1.2.3.4 -community_string: public -`) - // language=yaml - rawInitConfig := []byte(``) - - config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) - assert.Nil(t, err) - - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) - assert.Nil(t, err) - - deviceCk.session, err = sessionFactory(config) - assert.Nil(t, err) - - sender := mocksender.NewMockSender("123") // required to initiate aggregator - sender.SetupAcceptAll() - - deviceCk.SetSender(report.NewMetricSender(sender, "", nil, report.MakeInterfaceBandwidthState())) - - sess.On("GetNext", []string{"1.0"}).Return(&gosnmplib.MockValidReachableGetNextPacket, nil) - sess.On("GetNext", []string{"1.3.6.1.2.1.1.2.0"}).Return(session.CreateGetNextPacket("1.3.6.1.2.1.1.5.0", gosnmp.OctetString, []byte(`123`)), nil) - sess.On("GetNext", []string{"1.3.6.1.2.1.1.5.0"}).Return(session.CreateGetNextPacket("1.3.6.1.2.1.2.2.1.13.1", gosnmp.OctetString, []byte(`123`)), nil) - sess.On("GetNext", []string{"1.3.6.1.2.1.2.2.1.14"}).Return(session.CreateGetNextPacket("1.3.6.1.2.1.2.2.1.14.1", gosnmp.OctetString, []byte(`123`)), nil) - sess.On("GetNext", []string{"1.3.6.1.2.1.2.2.1.15"}).Return(session.CreateGetNextPacket("1.3.6.1.2.1.2.2.1.15.1", gosnmp.OctetString, []byte(`123`)), nil) - sess.On("GetNext", []string{"1.3.6.1.2.1.2.2.1.16"}).Return(session.CreateGetNextPacket("1.3.6.1.4.1.3375.2.1.1.2.1.44.0", gosnmp.OctetString, []byte(`123`)), nil) - sess.On("GetNext", []string{"1.3.6.1.4.1.3375.2.1.1.2.1.44.0"}).Return(session.CreateGetNextPacket("", gosnmp.EndOfMibView, nil), nil) - - metricsConfigs, metricTagConfigs := deviceCk.detectAvailableMetrics() - - expectedMetricsConfigs := []profiledefinition.MetricsConfig{ - { - MIB: "F5-BIGIP-SYSTEM-MIB", - Symbol: profiledefinition.SymbolConfig{OID: "1.3.6.1.4.1.3375.2.1.1.2.1.44.0", Name: "sysStatMemoryTotal", ScaleFactor: 2}, - MetricType: profiledefinition.ProfileMetricTypeGauge, - }, - { - MIB: "IF-MIB", - Table: profiledefinition.SymbolConfig{ - OID: "1.3.6.1.2.1.2.2", - Name: "ifTable", - }, - MetricType: profiledefinition.ProfileMetricTypeMonotonicCount, - Symbols: []profiledefinition.SymbolConfig{ - {OID: "1.3.6.1.2.1.2.2.1.14", Name: "ifInErrors", ScaleFactor: 0.5}, - {OID: "1.3.6.1.2.1.2.2.1.13", Name: "ifInDiscards"}, - }, - MetricTags: []profiledefinition.MetricTagConfig{ - {Tag: "interface", Symbol: profiledefinition.SymbolConfigCompat{OID: "1.3.6.1.2.1.31.1.1.1.1", Name: "ifName"}}, - {Tag: "interface_alias", Symbol: profiledefinition.SymbolConfigCompat{OID: "1.3.6.1.2.1.31.1.1.1.18", Name: "ifAlias"}}, - {Tag: "mac_address", Symbol: profiledefinition.SymbolConfigCompat{OID: "1.3.6.1.2.1.2.2.1.6", Name: "ifPhysAddress", Format: "mac_address"}}, - }, - StaticTags: []string{"table_static_tag:val"}, - }, - } - assert.ElementsMatch(t, expectedMetricsConfigs, metricsConfigs) - - expectedMetricsTagConfigs := []profiledefinition.MetricTagConfig{ - { - Symbol: profiledefinition.SymbolConfigCompat{OID: "1.3.6.1.2.1.1.5.0", Name: "sysName"}, - Match: "(\\w)(\\w+)", - Tags: map[string]string{ - "some_tag": "some_tag_value", - "prefix": "\\1", - "suffix": "\\2", - }, - }, - {Tag: "snmp_host", Symbol: profiledefinition.SymbolConfigCompat{OID: "1.3.6.1.2.1.1.5.0", Name: "sysName"}}, - {Tag: "snmp_host2", Symbol: profiledefinition.SymbolConfigCompat{OID: "1.3.6.1.2.1.1.5.0", Name: "sysName"}}, - } - - configvalidation.ValidateEnrichMetricTags(expectedMetricsTagConfigs) - - assert.ElementsMatch(t, expectedMetricsTagConfigs, metricTagConfigs) -} - func TestDeviceCheck_WithPing(t *testing.T) { profile.SetConfdPathAndCleanProfiles() sess := session.CreateFakeSession() diff --git a/pkg/collector/corechecks/snmp/internal/profile/config_profile.go b/pkg/collector/corechecks/snmp/internal/profile/config_profile.go index a2cca802ba6f5..0cf4355fe3ea7 100644 --- a/pkg/collector/corechecks/snmp/internal/profile/config_profile.go +++ b/pkg/collector/corechecks/snmp/internal/profile/config_profile.go @@ -9,10 +9,48 @@ import ( "github.com/DataDog/datadog-agent/pkg/networkdevice/profile/profiledefinition" ) -// ProfileConfigMap represent a map of ProfileConfig +// Provider is an interface that provides profiles by name +type Provider interface { + // HasProfile returns true if and only if we have a profile by this name. + HasProfile(profileName string) bool + // GetProfile returns the profile with this name, or nil if there isn't one. + GetProfile(profileName string) *ProfileConfig + // GetProfileNameForSysObjectID returns the best matching profile for this sysObjectID, or nil if there isn't one. + GetProfileNameForSysObjectID(sysObjectID string) (string, error) +} + +// staticProvider is a static implementation of Provider +type staticProvider struct { + configMap ProfileConfigMap +} + +func (s *staticProvider) GetProfile(name string) *ProfileConfig { + if profile, ok := s.configMap[name]; ok { + return &profile + } + return nil +} + +func (s *staticProvider) HasProfile(profileName string) bool { + _, ok := s.configMap[profileName] + return ok +} + +func (s *staticProvider) GetProfileNameForSysObjectID(sysObjectID string) (string, error) { + return getProfileForSysObjectID(s.configMap, sysObjectID) +} + +// StaticProvider makes a provider that serves the static data from this config map. +func StaticProvider(profiles ProfileConfigMap) Provider { + return &staticProvider{ + configMap: profiles, + } +} + +// ProfileConfigMap is a set of ProfileConfig instances each identified by name. type ProfileConfigMap map[string]ProfileConfig -// ProfileConfig represent a profile configuration +// ProfileConfig represents a profile configuration. type ProfileConfig struct { DefinitionFile string `yaml:"definition_file"` Definition profiledefinition.ProfileDefinition `yaml:"definition"` diff --git a/pkg/collector/corechecks/snmp/internal/profile/profile.go b/pkg/collector/corechecks/snmp/internal/profile/profile.go index 52d61f6170629..916be04fe7035 100644 --- a/pkg/collector/corechecks/snmp/internal/profile/profile.go +++ b/pkg/collector/corechecks/snmp/internal/profile/profile.go @@ -15,12 +15,16 @@ import ( "github.com/DataDog/datadog-agent/pkg/networkdevice/profile/profiledefinition" ) -// GetProfiles returns profiles depending on various sources: -// - init config profiles -// - yaml profiles -// - downloaded json gzip profiles -// - remote config profiles -func GetProfiles(initConfigProfiles ProfileConfigMap) (ProfileConfigMap, error) { +// GetProfileProvider returns a Provider that knows the on-disk profiles as well as any overrides from the initConfig. +func GetProfileProvider(initConfigProfiles ProfileConfigMap) (Provider, error) { + profiles, err := loadProfiles(initConfigProfiles) + if err != nil { + return nil, err + } + return StaticProvider(profiles), nil +} + +func loadProfiles(initConfigProfiles ProfileConfigMap) (ProfileConfigMap, error) { var profiles ProfileConfigMap if len(initConfigProfiles) > 0 { // TODO: [PERFORMANCE] Load init config custom profiles once for all integrations @@ -30,12 +34,6 @@ func GetProfiles(initConfigProfiles ProfileConfigMap) (ProfileConfigMap, error) return nil, fmt.Errorf("failed to load profiles from initConfig: %w", err) } profiles = customProfiles - } else if bundlePath := findProfileBundleFilePath(); bundlePath != "" { - defaultProfiles, err := loadBundleJSONProfiles(bundlePath) - if err != nil { - return nil, fmt.Errorf("failed to load profiles from json bundle %q: %w", bundlePath, err) - } - profiles = defaultProfiles } else { defaultProfiles, err := loadYamlProfiles() if err != nil { @@ -49,8 +47,8 @@ func GetProfiles(initConfigProfiles ProfileConfigMap) (ProfileConfigMap, error) return profiles, nil } -// GetProfileForSysObjectID return a profile for a sys object id -func GetProfileForSysObjectID(profiles ProfileConfigMap, sysObjectID string) (string, error) { +// getProfileForSysObjectID return a profile for a sys object id +func getProfileForSysObjectID(profiles ProfileConfigMap, sysObjectID string) (string, error) { tmpSysOidToProfile := map[string]string{} var matchedOids []string diff --git a/pkg/collector/corechecks/snmp/internal/profile/profile_json_bundle.go b/pkg/collector/corechecks/snmp/internal/profile/profile_json_bundle.go deleted file mode 100644 index efe94b970e053..0000000000000 --- a/pkg/collector/corechecks/snmp/internal/profile/profile_json_bundle.go +++ /dev/null @@ -1,100 +0,0 @@ -// 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 profile - -import ( - "compress/gzip" - "encoding/json" - "io" - "os" - "path/filepath" - - "github.com/DataDog/datadog-agent/pkg/util/log" - - "github.com/DataDog/datadog-agent/pkg/networkdevice/profile/profiledefinition" -) - -// loadBundleJSONProfiles finds the gzipped profile bundle and loads profiles from it. -func loadBundleJSONProfiles(gzipFilePath string) (ProfileConfigMap, error) { - jsonStr, err := loadGzipFile(gzipFilePath) - if err != nil { - return nil, err - } - - userProfiles, err := unmarshallProfilesBundleJSON(jsonStr, gzipFilePath) - if err != nil { - return nil, err - } - // TODO (separate PR): Use default profiles from json Bundle in priority once it's implemented. - // We fallback on Yaml Default Profiles if default profiles are not present in json Bundle. - defaultProfiles := getYamlDefaultProfiles() - - resolvedProfiles, err := resolveProfiles(userProfiles, defaultProfiles) - if err != nil { - return nil, err - } - - return resolvedProfiles, nil -} - -// unmarshallProfilesBundleJSON parses json data into a profile bundle. -// Duplicate profiles and profiles without names will be skipped, and warnings will be logged; -// filenameForLogging is only used for making more readable log messages. -func unmarshallProfilesBundleJSON(raw []byte, filenameForLogging string) (ProfileConfigMap, error) { - bundle := profiledefinition.ProfileBundle{} - err := json.Unmarshal(raw, &bundle) - if err != nil { - return nil, err - } - - profiles := make(ProfileConfigMap) - for i, p := range bundle.Profiles { - if p.Profile.Name == "" { - log.Warnf("ignoring profile #%d from %q - no name provided", i, filenameForLogging) - continue - } - - if _, exist := profiles[p.Profile.Name]; exist { - log.Warnf("ignoring duplicate profile in %q for name %q", filenameForLogging, p.Profile.Name) - continue - } - // TODO: (separate PR) resolve extends with custom + local default profiles (yaml) - profiles[p.Profile.Name] = ProfileConfig{ - Definition: p.Profile, - IsUserProfile: true, - } - } - return profiles, nil -} - -// loadGzipFile extracts the contents of a gzip file. -func loadGzipFile(filePath string) ([]byte, error) { - gzipFile, err := os.Open(filePath) - if err != nil { - return nil, err - } - defer gzipFile.Close() - gzipReader, err := gzip.NewReader(gzipFile) - if err != nil { - return nil, err - } - defer gzipReader.Close() - return io.ReadAll(gzipReader) -} - -// getProfileBundleFilePath returns the expected location of the gzipped profiles bundle, based on config.Datadog(). -func getProfileBundleFilePath() string { - return getProfileConfdRoot(filepath.Join(userProfilesFolder, profilesJSONGzipFile)) -} - -// findProfileBundleFilePath returns the path to the gzipped profiles bundle, or "" if one doesn't exist. -func findProfileBundleFilePath() string { - filePath := getProfileBundleFilePath() - if pathExists(filePath) { - return filePath - } - return "" -} diff --git a/pkg/collector/corechecks/snmp/internal/profile/profile_json_bundle_test.go b/pkg/collector/corechecks/snmp/internal/profile/profile_json_bundle_test.go deleted file mode 100644 index 7ca8bcbbe3172..0000000000000 --- a/pkg/collector/corechecks/snmp/internal/profile/profile_json_bundle_test.go +++ /dev/null @@ -1,59 +0,0 @@ -// 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 2023-present Datadog, Inc. - -package profile - -import ( - "path/filepath" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" -) - -func Test_loadBundleJSONProfiles(t *testing.T) { - defaultTestConfdPath, _ := filepath.Abs(filepath.Join("..", "test", "zipprofiles.d")) - SetGlobalProfileConfigMap(nil) - pkgconfigsetup.Datadog().SetWithoutSource("confd_path", defaultTestConfdPath) - pth := findProfileBundleFilePath() - require.FileExists(t, pth) - resolvedProfiles, err := loadBundleJSONProfiles(pth) - assert.Nil(t, err) - - var actualProfiles []string - var actualMetrics []string - for key, profile := range resolvedProfiles { - actualProfiles = append(actualProfiles, key) - for _, metric := range profile.Definition.Metrics { - actualMetrics = append(actualMetrics, metric.Symbol.Name) - } - } - - expectedProfiles := []string{ - "def-p1", // yaml default profile - "my-profile-name", // downloaded json profile - "profile-from-ui", // downloaded json profile - } - assert.ElementsMatch(t, expectedProfiles, actualProfiles) - - expectedMetrics := []string{ - "metricFromUi2", - "metricFromUi3", - "default_p1_metric", - "default_p1_metric", // from 2 profiles - } - assert.ElementsMatch(t, expectedMetrics, actualMetrics) - - var myProfileMetrics []string - for _, metric := range resolvedProfiles["my-profile-name"].Definition.Metrics { - myProfileMetrics = append(myProfileMetrics, metric.Symbol.Name) - } - expectedMyProfileMetrics := []string{ - "default_p1_metric", - } - assert.ElementsMatch(t, expectedMyProfileMetrics, myProfileMetrics) -} diff --git a/pkg/collector/corechecks/snmp/internal/profile/profile_resolver_test.go b/pkg/collector/corechecks/snmp/internal/profile/profile_resolver_test.go index 1b744b66f38f4..d95c902a7cc3b 100644 --- a/pkg/collector/corechecks/snmp/internal/profile/profile_resolver_test.go +++ b/pkg/collector/corechecks/snmp/internal/profile/profile_resolver_test.go @@ -155,7 +155,7 @@ func Test_resolveProfiles(t *testing.T) { assert.Contains(t, err.Error(), errorMsg) } - w.Flush() + assert.NoError(t, w.Flush()) logs := b.String() for _, aLogCount := range tt.expectedLogs { diff --git a/pkg/collector/corechecks/snmp/internal/profile/profile_test.go b/pkg/collector/corechecks/snmp/internal/profile/profile_test.go index a79103d7e7a49..cb46896c2db7b 100644 --- a/pkg/collector/corechecks/snmp/internal/profile/profile_test.go +++ b/pkg/collector/corechecks/snmp/internal/profile/profile_test.go @@ -17,7 +17,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/networkdevice/profile/profiledefinition" ) -func Test_getProfiles(t *testing.T) { +func Test_loadProfiles(t *testing.T) { tests := []struct { name string mockConfd string @@ -74,22 +74,6 @@ func Test_getProfiles(t *testing.T) { }, expectedProfileNames: []string(nil), // invalid profiles are skipped }, - - // json profiles.json.gz profiles - { - name: "OK Use json profiles.json.gz profiles", - mockConfd: "zipprofiles.d", - expectedProfileNames: []string{ - "def-p1", - "my-profile-name", - "profile-from-ui", - }, - }, - { - name: "ERROR Invalid profiles.json.gz profiles", - mockConfd: "zipprofiles_err.d", - expectedErr: "failed to load profiles from json bundle", - }, // yaml profiles { name: "OK Use yaml profiles", @@ -111,7 +95,7 @@ func Test_getProfiles(t *testing.T) { path, _ := filepath.Abs(filepath.Join("..", "test", tt.mockConfd)) pkgconfigsetup.Datadog().SetWithoutSource("confd_path", path) - actualProfiles, err := GetProfiles(tt.profiles) + actualProfiles, err := loadProfiles(tt.profiles) if tt.expectedErr != "" { assert.ErrorContains(t, err, tt.expectedErr) } @@ -373,7 +357,7 @@ func Test_getProfileForSysObjectID(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - profile, err := GetProfileForSysObjectID(tt.profiles, tt.sysObjectID) + profile, err := getProfileForSysObjectID(tt.profiles, tt.sysObjectID) if tt.expectedError == "" { assert.Nil(t, err) } else { diff --git a/pkg/collector/corechecks/snmp/internal/profile/profile_yaml.go b/pkg/collector/corechecks/snmp/internal/profile/profile_yaml.go index 03d7be924a9f3..600809768a026 100644 --- a/pkg/collector/corechecks/snmp/internal/profile/profile_yaml.go +++ b/pkg/collector/corechecks/snmp/internal/profile/profile_yaml.go @@ -23,7 +23,6 @@ import ( const defaultProfilesFolder = "default_profiles" const userProfilesFolder = "profiles" -const profilesJSONGzipFile = "profiles.json.gz" var defaultProfilesMu = &sync.Mutex{} diff --git a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata.go b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata.go index ff8d90912efb3..3e9ad39677d4c 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata.go @@ -210,8 +210,9 @@ func buildNetworkDeviceMetadata(deviceID string, idTags []string, config *checkc } // fallback to Device.Vendor for backward compatibility - if config.ProfileDef != nil && vendor == "" { - vendor = config.ProfileDef.Device.Vendor + profileDef := config.GetProfileDef() + if profileDef != nil && vendor == "" { + vendor = profileDef.Device.Vendor } return devicemetadata.DeviceMetadata{ @@ -222,7 +223,7 @@ func buildNetworkDeviceMetadata(deviceID string, idTags []string, config *checkc IPAddress: config.IPAddress, SysObjectID: sysObjectID, Location: location, - Profile: config.Profile, + Profile: config.ProfileName, ProfileVersion: getProfileVersion(config), Vendor: vendor, Tags: tags, @@ -243,8 +244,9 @@ func buildNetworkDeviceMetadata(deviceID string, idTags []string, config *checkc func getProfileVersion(config *checkconfig.CheckConfig) uint64 { var profileVersion uint64 - if config.ProfileDef != nil { - profileVersion = config.ProfileDef.Version + profileDef := config.GetProfileDef() + if profileDef != nil { + profileVersion = profileDef.Version } return profileVersion } diff --git a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go index 2cff0364b107f..22d58e9530216 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go @@ -61,11 +61,15 @@ func Test_metricSender_reportNetworkDeviceMetadata_withoutInterfaces(t *testing. DeviceIDTags: []string{"device_name:127.0.0.1"}, ResolvedSubnetName: "127.0.0.0/29", Namespace: "my-ns", - Profile: "my-profile", - ProfileDef: &profiledefinition.ProfileDefinition{ - Name: "my-profile", - Version: 10, - }, + ProfileName: "my-profile", + ProfileProvider: profile.StaticProvider(profile.ProfileConfigMap{ + "my-profile": profile.ProfileConfig{ + Definition: profiledefinition.ProfileDefinition{ + Name: "my-profile", + Version: 10, + }, + }, + }), Metadata: profiledefinition.MetadataConfig{ "device": { Fields: map[string]profiledefinition.MetadataField{ @@ -970,10 +974,15 @@ func Test_getProfileVersion(t *testing.T) { { name: "profile definition is present", config: checkconfig.CheckConfig{ - ProfileDef: &profiledefinition.ProfileDefinition{ - Name: "my-profile", - Version: 42, - }, + ProfileName: "my-profile", + ProfileProvider: profile.StaticProvider(profile.ProfileConfigMap{ + "my-profile": profile.ProfileConfig{ + Definition: profiledefinition.ProfileDefinition{ + Name: "my-profile", + Version: 42, + }, + }, + }), }, expectedProfileVersion: 42, }, diff --git a/pkg/collector/corechecks/snmp/internal/test/zipprofiles.d/snmp.d/default_profiles/_base.yaml b/pkg/collector/corechecks/snmp/internal/test/zipprofiles.d/snmp.d/default_profiles/_base.yaml deleted file mode 100644 index 71e7d7b5bc742..0000000000000 --- a/pkg/collector/corechecks/snmp/internal/test/zipprofiles.d/snmp.d/default_profiles/_base.yaml +++ /dev/null @@ -1,6 +0,0 @@ -# Base profile that should only contain any items we want to provide for all profiles. - -metric_tags: - - OID: 1.3.6.1.2.1.1.5.0 - symbol: sysName - tag: base_datadog diff --git a/pkg/collector/corechecks/snmp/internal/test/zipprofiles.d/snmp.d/default_profiles/def-p1.yaml b/pkg/collector/corechecks/snmp/internal/test/zipprofiles.d/snmp.d/default_profiles/def-p1.yaml deleted file mode 100644 index ca814c375fef3..0000000000000 --- a/pkg/collector/corechecks/snmp/internal/test/zipprofiles.d/snmp.d/default_profiles/def-p1.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# Profile for F5 BIG-IP devices -# -extends: - - _base.yaml - -device: - vendor: "def-p1" - -sysobjectid: 1.2.3.* - -metrics: - - symbol: - OID: 1.2.3.5 - name: default_p1_metric - -# metadata section helps test the bug related to nil metadata -# that is fixed by this PR: https://github.com/DataDog/datadog-agent/pull/20859 -metadata: - device: - fields: - name: - symbol: - OID: 1.3.6.1.2.1.1.5.0 - name: sysName diff --git a/pkg/collector/corechecks/snmp/internal/test/zipprofiles.d/snmp.d/profiles/f5-big-ip.yaml b/pkg/collector/corechecks/snmp/internal/test/zipprofiles.d/snmp.d/profiles/f5-big-ip.yaml deleted file mode 100644 index 8eead496f206b..0000000000000 --- a/pkg/collector/corechecks/snmp/internal/test/zipprofiles.d/snmp.d/profiles/f5-big-ip.yaml +++ /dev/null @@ -1,5 +0,0 @@ - -metric_tags: - - OID: 1.3.6.1.2.1.1.5.0 - symbol: sysName - tag: snmp_host diff --git a/pkg/collector/corechecks/snmp/internal/test/zipprofiles.d/snmp.d/profiles/profiles.json.gz b/pkg/collector/corechecks/snmp/internal/test/zipprofiles.d/snmp.d/profiles/profiles.json.gz deleted file mode 100644 index f9e134879b4a82227ae5a07bbaafa2337b65d796..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335 zcmV-V0kHlbiwFqIdNySM18{P0W@&6?b1rIgZ*Bn9Q%!5cAP~LhS1g_r$rtIS=Tg|y zo_Z=vF>1hNjX_Q6vgE(lm=7v3(3Y0c0fTYg%=l(}w_s-sU`dgtQL_tG#{Fzh2D>dgi{Vrwf;2K1*JHg(bP`kJ1GrOKaNt1t(9Jc~ z^QUSMw}~cDR7=65j)8CuB~)R_TFpc=M4$@$Q0l5gb*5M|;t+H|3Cv&t6POPxGoP|7 zJ;^3)3UjdXojkQo*CfMgv+kPz5~@)(wy5`CW8%guaq%|N!5t3|Lx*OT>9pbvic8!) zjFHEq8O0Mz*VJe0y`BvM|B-w4W$vGPCWO8+JQ8+=v;2K%#9s@OU!z%@_UN~TnZoP` hlt|w+ZHQH(xn3Q$3HatD?Cuow!8<&gLnLMe001PFplSdB diff --git a/pkg/collector/corechecks/snmp/internal/test/zipprofiles_err.d/snmp.d/profiles/profiles.json.gz b/pkg/collector/corechecks/snmp/internal/test/zipprofiles_err.d/snmp.d/profiles/profiles.json.gz deleted file mode 100644 index e69de29bb2d1d..0000000000000 From 7cddbb865e751fb5a9a2d54755ca76d4158cf56d Mon Sep 17 00:00:00 2001 From: "John L. Peterson (Jack)" Date: Wed, 11 Dec 2024 17:36:44 -0500 Subject: [PATCH 148/303] add 'inv install-tools' to otel collector github action (#32067) --- .github/workflows/collector-generate-and-update.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/collector-generate-and-update.yml b/.github/workflows/collector-generate-and-update.yml index 8852a0ca424c0..275f6fbbcf410 100644 --- a/.github/workflows/collector-generate-and-update.yml +++ b/.github/workflows/collector-generate-and-update.yml @@ -14,16 +14,22 @@ jobs: - name: Checkout repository uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + - name: Read tool versions + id: tool-versions + run: | + echo "PYTHON_VERSION=$(cat .python-version)" >> $GITHUB_ENV + echo "GO_VERSION=$(cat .go-version)" >> $GITHUB_ENV + - name: Set up Python uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0 with: - python-version: 3.12 + python-version: ${{ env.PYTHON_VERSION }} cache: 'pip' - name: Set up Go uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 with: - go-version: '1.22.8' + go-version: ${{ env.GO_VERSION }} - name: Install Dependencies run: | @@ -34,6 +40,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | + inv -e install-tools inv -e collector.update inv -e collector.generate inv -e generate-licenses From a35ae1abc227bde75767e24be08e5aa1158db6aa Mon Sep 17 00:00:00 2001 From: Maxime Riaud <65339037+misteriaud@users.noreply.github.com> Date: Thu, 12 Dec 2024 09:19:33 +0100 Subject: [PATCH 149/303] [ASCII-2582] Add certificate generation and retrieval for IPC communications (#31838) --- comp/api/authtoken/component.go | 7 +- .../authtoken/createandfetchimpl/authtoken.go | 12 ++ .../createandfetchimpl/authtoken_test.go | 6 +- comp/api/authtoken/fetchonlyimpl/authtoken.go | 43 ++++- .../authtoken/fetchonlyimpl/authtoken_test.go | 14 +- comp/api/authtoken/fetchonlyimpl/mock.go | 17 +- pkg/api/security/cert/cert_generator.go | 75 ++++++++ pkg/api/security/cert/cert_generator_test.go | 71 +++++++ pkg/api/security/cert/cert_getter.go | 128 +++++++++++++ pkg/api/security/cert/cert_getter_test.go | 139 ++++++++++++++ pkg/api/util/ipc_endpoint_test.go | 178 ++++++++++-------- pkg/api/util/util.go | 126 ++++++++++++- pkg/config/setup/config.go | 2 + 13 files changed, 716 insertions(+), 102 deletions(-) create mode 100644 pkg/api/security/cert/cert_generator.go create mode 100644 pkg/api/security/cert/cert_generator_test.go create mode 100644 pkg/api/security/cert/cert_getter.go create mode 100644 pkg/api/security/cert/cert_getter_test.go diff --git a/comp/api/authtoken/component.go b/comp/api/authtoken/component.go index 2aae4096f392d..fbe0ef3558028 100644 --- a/comp/api/authtoken/component.go +++ b/comp/api/authtoken/component.go @@ -9,9 +9,12 @@ package authtoken import ( + "crypto/tls" + + "go.uber.org/fx" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/optional" - "go.uber.org/fx" ) // team: agent-shared-components @@ -19,6 +22,8 @@ import ( // Component is the component type. type Component interface { Get() string + GetTLSClientConfig() *tls.Config + GetTLSServerConfig() *tls.Config } // NoneModule return a None optional type for authtoken.Component. diff --git a/comp/api/authtoken/createandfetchimpl/authtoken.go b/comp/api/authtoken/createandfetchimpl/authtoken.go index 9afffdeff362d..8f5408083f49f 100644 --- a/comp/api/authtoken/createandfetchimpl/authtoken.go +++ b/comp/api/authtoken/createandfetchimpl/authtoken.go @@ -8,6 +8,8 @@ package createandfetchimpl import ( + "crypto/tls" + "go.uber.org/fx" "github.com/DataDog/datadog-agent/comp/api/authtoken" @@ -49,3 +51,13 @@ func newAuthToken(deps dependencies) (authtoken.Component, error) { func (at *authToken) Get() string { return util.GetAuthToken() } + +// GetTLSServerConfig return a TLS configuration with the IPC certificate for http.Server +func (at *authToken) GetTLSClientConfig() *tls.Config { + return util.GetTLSClientConfig() +} + +// GetTLSServerConfig return a TLS configuration with the IPC certificate for http.Client +func (at *authToken) GetTLSServerConfig() *tls.Config { + return util.GetTLSServerConfig() +} diff --git a/comp/api/authtoken/createandfetchimpl/authtoken_test.go b/comp/api/authtoken/createandfetchimpl/authtoken_test.go index 1eb9e11f6ba81..51f2db29e1142 100644 --- a/comp/api/authtoken/createandfetchimpl/authtoken_test.go +++ b/comp/api/authtoken/createandfetchimpl/authtoken_test.go @@ -10,8 +10,6 @@ import ( "path/filepath" "testing" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.uber.org/fx" @@ -19,13 +17,17 @@ import ( "github.com/DataDog/datadog-agent/comp/core/config" log "github.com/DataDog/datadog-agent/comp/core/log/def" logmock "github.com/DataDog/datadog-agent/comp/core/log/mock" + "github.com/DataDog/datadog-agent/pkg/api/util" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) func TestGet(t *testing.T) { dir := t.TempDir() authPath := filepath.Join(dir, "auth_token") + ipcPath := filepath.Join(dir, "ipc_cert") overrides := map[string]any{ "auth_token_file_path": authPath, + "ipc_cert_file_path": ipcPath, } comp, err := newAuthToken( diff --git a/comp/api/authtoken/fetchonlyimpl/authtoken.go b/comp/api/authtoken/fetchonlyimpl/authtoken.go index ac07402b8c960..f353bc3706c3d 100644 --- a/comp/api/authtoken/fetchonlyimpl/authtoken.go +++ b/comp/api/authtoken/fetchonlyimpl/authtoken.go @@ -8,6 +8,9 @@ package fetchonlyimpl import ( + "crypto/tls" + "fmt" + "go.uber.org/fx" "github.com/DataDog/datadog-agent/comp/api/authtoken" @@ -26,9 +29,8 @@ func Module() fxutil.Module { } type authToken struct { - log log.Component - conf config.Component - + log log.Component + conf config.Component tokenLoaded bool } @@ -48,17 +50,44 @@ func newAuthToken(deps dependencies) authtoken.Component { } } -// Get returns the session token -func (at *authToken) Get() string { +func (at *authToken) setToken() error { if !at.tokenLoaded { // We try to load the auth_token until we succeed since it might be created at some point by another // process. if err := util.SetAuthToken(at.conf); err != nil { - at.log.Debugf("could not load auth_token: %s", err) - return "" + return fmt.Errorf("could not load auth_token: %s", err) } at.tokenLoaded = true } + return nil +} + +// Get returns the session token +func (at *authToken) Get() string { + if err := at.setToken(); err != nil { + at.log.Debugf("%s", err.Error()) + return "" + } return util.GetAuthToken() } + +// GetTLSClientConfig return a TLS configuration with the IPC certificate for http.Client +func (at *authToken) GetTLSClientConfig() *tls.Config { + if err := at.setToken(); err != nil { + at.log.Debugf("%s", err.Error()) + return nil + } + + return util.GetTLSClientConfig() +} + +// GetTLSServerConfig return a TLS configuration with the IPC certificate for http.Server +func (at *authToken) GetTLSServerConfig() *tls.Config { + if err := at.setToken(); err != nil { + at.log.Debugf("%s", err.Error()) + return nil + } + + return util.GetTLSServerConfig() +} diff --git a/comp/api/authtoken/fetchonlyimpl/authtoken_test.go b/comp/api/authtoken/fetchonlyimpl/authtoken_test.go index 4492ab4ff4105..4073ee0db7779 100644 --- a/comp/api/authtoken/fetchonlyimpl/authtoken_test.go +++ b/comp/api/authtoken/fetchonlyimpl/authtoken_test.go @@ -10,11 +10,13 @@ import ( "path/filepath" "testing" - "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.uber.org/fx" + "github.com/DataDog/datadog-agent/pkg/api/security/cert" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/DataDog/datadog-agent/comp/core/config" log "github.com/DataDog/datadog-agent/comp/core/log/def" logmock "github.com/DataDog/datadog-agent/comp/core/log/mock" @@ -23,6 +25,7 @@ import ( func TestGet(t *testing.T) { dir := t.TempDir() authPath := filepath.Join(dir, "auth_token") + var cfg config.Component overrides := map[string]any{ "auth_token_file_path": authPath, } @@ -32,6 +35,7 @@ func TestGet(t *testing.T) { t, fx.Provide(func() log.Component { return logmock.New(t) }), config.MockModule(), + fx.Populate(&cfg), fx.Replace(config.MockParams{Overrides: overrides}), ), ).(*authToken) @@ -42,6 +46,14 @@ func TestGet(t *testing.T) { err := os.WriteFile(authPath, []byte("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), 0777) require.NoError(t, err) + // Should be empty because the cert/key weren't generated yet + assert.Empty(t, comp.Get()) + assert.False(t, comp.tokenLoaded) + + // generating IPC cert/key files + _, _, err = cert.CreateOrFetchAgentIPCCert(cfg) + require.NoError(t, err) + assert.Equal(t, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", comp.Get()) assert.True(t, comp.tokenLoaded) diff --git a/comp/api/authtoken/fetchonlyimpl/mock.go b/comp/api/authtoken/fetchonlyimpl/mock.go index 2dea209906a3c..3fa24b25731aa 100644 --- a/comp/api/authtoken/fetchonlyimpl/mock.go +++ b/comp/api/authtoken/fetchonlyimpl/mock.go @@ -8,9 +8,12 @@ package fetchonlyimpl import ( + "crypto/tls" + + "go.uber.org/fx" + authtokeninterface "github.com/DataDog/datadog-agent/comp/api/authtoken" "github.com/DataDog/datadog-agent/pkg/util/fxutil" - "go.uber.org/fx" ) // MockModule defines the fx options for the mock component. @@ -28,6 +31,18 @@ func (fc *MockFetchOnly) Get() string { return "a string" } +// GetTLSClientConfig is a mock of the fetchonly GetTLSClientConfig function +func (fc *MockFetchOnly) GetTLSClientConfig() *tls.Config { + return &tls.Config{ + InsecureSkipVerify: true, + } +} + +// GetTLSServerConfig is a mock of the fetchonly GetTLSServerConfig function +func (fc *MockFetchOnly) GetTLSServerConfig() *tls.Config { + return &tls.Config{} +} + // NewMock returns a new fetch only authtoken mock func newMock() authtokeninterface.Component { return &MockFetchOnly{} diff --git a/pkg/api/security/cert/cert_generator.go b/pkg/api/security/cert/cert_generator.go new file mode 100644 index 0000000000000..46b9c1076c611 --- /dev/null +++ b/pkg/api/security/cert/cert_generator.go @@ -0,0 +1,75 @@ +// 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 cert provide useful functions to generate certificates +package cert + +import ( + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "fmt" + "math/big" + "net" + "time" +) + +func certTemplate() (*x509.Certificate, error) { + serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) + serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) + if err != nil { + return nil, fmt.Errorf("failed to generate serial number: %s", err) + } + + notBefore := time.Now() + // 50 years duration + notAfter := notBefore.Add(50 * 365 * 24 * time.Hour) + template := x509.Certificate{ + SerialNumber: serialNumber, + Subject: pkix.Name{ + Organization: []string{"Datadog, Inc."}, + }, + NotBefore: notBefore, + NotAfter: notAfter, + BasicConstraintsValid: true, + KeyUsage: x509.KeyUsageCertSign | x509.KeyUsageDigitalSignature | x509.KeyUsageCRLSign, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}, + IsCA: true, + IPAddresses: []net.IP{net.ParseIP("127.0.0.1"), net.ParseIP("::1")}, + DNSNames: []string{"localhost"}, + } + + return &template, nil +} + +func generateCertKeyPair() ([]byte, []byte, error) { + rootCertTmpl, err := certTemplate() + if err != nil { + return nil, nil, err + } + + rootKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + return nil, nil, fmt.Errorf("Unable to generate IPC private key: %v", err) + } + + certDER, err := x509.CreateCertificate(rand.Reader, rootCertTmpl, rootCertTmpl, &rootKey.PublicKey, rootKey) + if err != nil { + return nil, nil, err + } + + certPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: certDER}) + rawKey, err := x509.MarshalECPrivateKey(rootKey) + if err != nil { + return nil, nil, fmt.Errorf("Unable to marshall private key: %v", err) + } + + keyPEM := pem.EncodeToMemory(&pem.Block{Type: "EC PRIVATE KEY", Bytes: rawKey}) + + return certPEM, keyPEM, nil +} diff --git a/pkg/api/security/cert/cert_generator_test.go b/pkg/api/security/cert/cert_generator_test.go new file mode 100644 index 0000000000000..888eb28240a84 --- /dev/null +++ b/pkg/api/security/cert/cert_generator_test.go @@ -0,0 +1,71 @@ +// 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 cert + +import ( + "crypto/tls" + "crypto/x509" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestCertCommunication(t *testing.T) { + certPEM, keyPEM, err := generateCertKeyPair() + assert.NoError(t, err) + + // Load server certificate + serverCert, err := tls.X509KeyPair(certPEM, keyPEM) + assert.NoError(t, err) + + // Create a certificate pool with the generated certificate + certPool := x509.NewCertPool() + ok := certPool.AppendCertsFromPEM(certPEM) + assert.True(t, ok) + + // Create a TLS config for the server + serverTLSConfig := &tls.Config{ + Certificates: []tls.Certificate{serverCert}, + } + + // Create a TLS config for the client + clientTLSConfig := &tls.Config{ + RootCAs: certPool, + } + + expectedResult := []byte("hello word") + + // Create a HTTPS Server + s := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Write(expectedResult) + })) + + s.TLS = serverTLSConfig + s.StartTLS() + t.Cleanup(func() { + s.Close() + }) + + // Create a HTTPS Client + client := http.Client{ + Transport: &http.Transport{ + TLSClientConfig: clientTLSConfig, + }, + } + + // Try to communicate together + resp, err := client.Get(s.URL) + require.NoError(t, err) + defer resp.Body.Close() + + body, err := io.ReadAll(resp.Body) + require.NoError(t, err) + require.Equal(t, body, expectedResult) +} diff --git a/pkg/api/security/cert/cert_getter.go b/pkg/api/security/cert/cert_getter.go new file mode 100644 index 0000000000000..09edb10e1cf5e --- /dev/null +++ b/pkg/api/security/cert/cert_getter.go @@ -0,0 +1,128 @@ +// 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 cert provide useful functions to generate certificates +package cert + +import ( + "bytes" + "encoding/pem" + "fmt" + "os" + "path/filepath" + "runtime" + + configModel "github.com/DataDog/datadog-agent/pkg/config/model" + "github.com/DataDog/datadog-agent/pkg/util/filesystem" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +// defaultCertFileName represent the default IPC certificate root name (without .cert or .key) +const defaultCertFileName = "ipc_cert.pem" + +// GetCertFilepath returns the path to the IPC cert file. +func GetCertFilepath(config configModel.Reader) string { + if configPath := config.GetString("ipc_cert_file_path"); configPath != "" { + return configPath + } + // Since customers who set the "auth_token_file_path" configuration likely prefer to avoid writing it next to the configuration file, + // we should follow this behavior for the cert/key generation as well to minimize the risk of disrupting IPC functionality. + if config.GetString("auth_token_file_path") != "" { + dest := filepath.Join(filepath.Dir(config.GetString("auth_token_file_path")), defaultCertFileName) + log.Warnf("IPC cert/key created or retrieved next to auth_token_file_path location: %v", dest) + return dest + } + return filepath.Join(filepath.Dir(config.ConfigFileUsed()), defaultCertFileName) +} + +// FetchAgentIPCCert return the IPC certificate and key from the path set in the configuration +// Requires that the config has been set up before calling +func FetchAgentIPCCert(config configModel.Reader) ([]byte, []byte, error) { + return fetchAgentIPCCert(config, false) +} + +// CreateOrFetchAgentIPCCert return the IPC certificate and key from the path set in the configuration or create if not present +// Requires that the config has been set up before calling +func CreateOrFetchAgentIPCCert(config configModel.Reader) ([]byte, []byte, error) { + return fetchAgentIPCCert(config, true) +} + +func fetchAgentIPCCert(config configModel.Reader, certCreationAllowed bool) ([]byte, []byte, error) { + certPath := GetCertFilepath(config) + + // Create cert&key if it doesn't exist and if permitted by calling func + if _, e := os.Stat(certPath); os.IsNotExist(e) && certCreationAllowed { + // print the caller to identify what is calling this function + if _, file, line, ok := runtime.Caller(2); ok { + log.Infof("[%s:%d] Creating a new IPC certificate", file, line) + } + + cert, key, err := generateCertKeyPair() + + if err != nil { + return nil, nil, err + } + + // Write the IPC cert/key in the FS (platform-specific) + e = saveIPCCertKey(cert, key, certPath) + if e != nil { + return nil, nil, fmt.Errorf("error writing IPC cert/key file on fs: %s", e) + } + log.Infof("Saved a new IPC certificate/key pair to %s", certPath) + + return cert, key, nil + } + + // Read the IPC certAndKey/key + certAndKey, e := os.ReadFile(certPath) + if e != nil { + return nil, nil, fmt.Errorf("unable to read authentication IPC cert/key files: %s", e.Error()) + } + + // Demultiplexing cert and key from file + var block *pem.Block + + block, rest := pem.Decode(certAndKey) + + if block == nil || block.Type != "CERTIFICATE" { + return nil, nil, log.Error("failed to decode PEM block containing certificate") + } + cert := pem.EncodeToMemory(block) + + block, _ = pem.Decode(rest) + + if block == nil || block.Type != "EC PRIVATE KEY" { + return nil, nil, log.Error("failed to decode PEM block containing key") + } + + key := pem.EncodeToMemory(block) + + return cert, key, nil +} + +// writes IPC cert/key files to a file with the same permissions as datadog.yaml +func saveIPCCertKey(cert, key []byte, dest string) (err error) { + log.Infof("Saving a new IPC certificate/key pair in %s", dest) + + perms, err := filesystem.NewPermission() + if err != nil { + return err + } + + // Concatenating cert and key together + certAndKey := bytes.Join([][]byte{cert, key}, []byte{}) + + if err = os.WriteFile(dest, certAndKey, 0o600); err != nil { + return err + } + + if err := perms.RestrictAccessToUser(dest); err != nil { + log.Errorf("Failed to set IPC cert permissions: %s", err) + return err + } + + log.Infof("Wrote IPC certificate/key pair in %s", dest) + return nil +} diff --git a/pkg/api/security/cert/cert_getter_test.go b/pkg/api/security/cert/cert_getter_test.go new file mode 100644 index 0000000000000..4915d2cb5d8b5 --- /dev/null +++ b/pkg/api/security/cert/cert_getter_test.go @@ -0,0 +1,139 @@ +// 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 cert + +import ( + "crypto/tls" + "crypto/x509" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + configmock "github.com/DataDog/datadog-agent/pkg/config/mock" + "github.com/DataDog/datadog-agent/pkg/config/model" +) + +func initMockConf(t *testing.T) (model.Config, string) { + testDir := t.TempDir() + + f, err := os.CreateTemp(testDir, "fake-datadog-yaml-") + require.NoError(t, err) + t.Cleanup(func() { + f.Close() + }) + + mockConfig := configmock.New(t) + mockConfig.SetConfigFile(f.Name()) + mockConfig.SetWithoutSource("auth_token", "") + + return mockConfig, filepath.Join(testDir, "auth_token") +} + +func TestCreateOrFetchAuthTokenValidGen(t *testing.T) { + config, _ := initMockConf(t) + ipccert, ipckey, err := CreateOrFetchAgentIPCCert(config) + require.NoError(t, err) + + certPool := x509.NewCertPool() + ok := certPool.AppendCertsFromPEM(ipccert) + assert.True(t, ok) + + _, err = tls.X509KeyPair(ipccert, ipckey) + assert.NoError(t, err) +} + +func TestFetchAuthToken(t *testing.T) { + config, _ := initMockConf(t) + + // Trying to fetch before create cert: must fail + _, _, err := FetchAgentIPCCert(config) + require.Error(t, err) + + // Creating a cert + ipcCert, ipcKey, err := CreateOrFetchAgentIPCCert(config) + require.NoError(t, err) + + certPool := x509.NewCertPool() + ok := certPool.AppendCertsFromPEM(ipcCert) + assert.True(t, ok) + + _, err = tls.X509KeyPair(ipcCert, ipcKey) + assert.NoError(t, err) + + // Trying to fetch after creating cert: must succeed + fetchedCert, fetchedKey, err := FetchAgentIPCCert(config) + require.NoError(t, err) + require.Equal(t, string(ipcCert), string(fetchedCert)) + require.Equal(t, string(ipcKey), string(fetchedKey)) +} + +func TestFetchAuthTokenWithAuthTokenFilePath(t *testing.T) { + config, _ := initMockConf(t) + + // Setting custom auth_token filepath + dname, err := os.MkdirTemp("", "auth_token_dir") + require.NoError(t, err) + config.SetWithoutSource("auth_token_file_path", filepath.Join(dname, "auth_token")) + + // Creating a cert + ipcCert, ipcKey, err := CreateOrFetchAgentIPCCert(config) + require.NoError(t, err) + + certPool := x509.NewCertPool() + ok := certPool.AppendCertsFromPEM(ipcCert) + assert.True(t, ok) + + _, err = tls.X509KeyPair(ipcCert, ipcKey) + assert.NoError(t, err) + + // Checking that the cert have been created next to the auth_token_file path + _, err = os.Stat(filepath.Join(dname, defaultCertFileName)) + require.NoError(t, err) + + // Trying to fetch after creating cert: must succeed + fetchedCert, fetchedKey, err := FetchAgentIPCCert(config) + require.NoError(t, err) + require.Equal(t, string(ipcCert), string(fetchedCert)) + require.Equal(t, string(ipcKey), string(fetchedKey)) +} + +func TestFetchAuthTokenWithIPCCertFilePath(t *testing.T) { + config, _ := initMockConf(t) + + // Setting custom auth_token filepath + authTokenDirName, err := os.MkdirTemp("", "auth_token_dir") + require.NoError(t, err) + config.SetWithoutSource("auth_token_file_path", filepath.Join(authTokenDirName, "custom_auth_token")) + + // Setting custom IPC cert filepath + ipcDirName, err := os.MkdirTemp("", "ipc_cert_dir") + require.NoError(t, err) + config.SetWithoutSource("ipc_cert_file_path", filepath.Join(ipcDirName, "custom_ipc_cert")) + + // Creating a cert + ipcCert, ipcKey, err := CreateOrFetchAgentIPCCert(config) + require.NoError(t, err) + + certPool := x509.NewCertPool() + ok := certPool.AppendCertsFromPEM(ipcCert) + assert.True(t, ok) + + _, err = tls.X509KeyPair(ipcCert, ipcKey) + assert.NoError(t, err) + + // Checking that the cert have been created at the custom IPC cert filepath + _, err = os.Stat(filepath.Join(ipcDirName, "custom_ipc_cert")) + require.NoError(t, err) + + // Trying to fetch after creating cert: must succeed + fetchedCert, fetchedKey, err := FetchAgentIPCCert(config) + require.NoError(t, err) + require.Equal(t, string(ipcCert), string(fetchedCert)) + require.Equal(t, string(ipcKey), string(fetchedKey)) +} diff --git a/pkg/api/util/ipc_endpoint_test.go b/pkg/api/util/ipc_endpoint_test.go index 26df3f8ce7205..5f2be0a513062 100644 --- a/pkg/api/util/ipc_endpoint_test.go +++ b/pkg/api/util/ipc_endpoint_test.go @@ -17,96 +17,108 @@ import ( "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" configmock "github.com/DataDog/datadog-agent/pkg/config/mock" pkgconfigmodel "github.com/DataDog/datadog-agent/pkg/config/model" ) -func createConfig(t *testing.T, ts *httptest.Server) pkgconfigmodel.Config { - conf := configmock.New(t) +type IPCEndpointTestSuite struct { + suite.Suite + conf pkgconfigmodel.Config +} + +func TestIPCEndpointTestSuite(t *testing.T) { + // cleaning auth_token and cert globals to be able initialize again the authToken and IPC cert + token = "" + dcaToken = "" + clientTLSConfig = nil + serverTLSConfig = nil + + // creating test suite + testSuite := new(IPCEndpointTestSuite) + + // simulating a normal startup of Agent with auth_token and cert generation + testSuite.conf = configmock.New(t) // create a fake auth token authTokenFile, err := os.CreateTemp("", "") - assert.NoError(t, err) + require.NoError(t, err) authTokenPath := authTokenFile.Name() os.WriteFile(authTokenPath, []byte("0123456789abcdef0123456789abcdef"), 0640) + testSuite.conf.Set("auth_token_file_path", authTokenPath, pkgconfigmodel.SourceAgentRuntime) - addr, err := url.Parse(ts.URL) - assert.NoError(t, err) - localHost, localPort, _ := net.SplitHostPort(addr.Host) - - // set minimal configuration that IPCEndpoint needs - conf.Set("auth_token_file_path", authTokenPath, pkgconfigmodel.SourceAgentRuntime) - conf.Set("cmd_host", localHost, pkgconfigmodel.SourceAgentRuntime) - conf.Set("cmd_port", localPort, pkgconfigmodel.SourceAgentRuntime) + // use the cert in the httptest server + CreateAndSetAuthToken(testSuite.conf) - return conf + suite.Run(t, testSuite) } -func TestNewIPCEndpoint(t *testing.T) { - conf := configmock.New(t) +func (suite *IPCEndpointTestSuite) setTestServerAndConfig(t *testing.T, ts *httptest.Server, isHTTPS bool) { + if isHTTPS { + ts.TLS = GetTLSServerConfig() + ts.StartTLS() + } else { + ts.Start() + } - // create a fake auth token - authTokenFile, err := os.CreateTemp("", "") - assert.NoError(t, err) - authTokenPath := authTokenFile.Name() - os.WriteFile(authTokenPath, []byte("0123456789abcdef0123456789abcdef"), 0640) + // use the httptest server as the CMD_API + addr, err := url.Parse(ts.URL) + require.NoError(t, err) + localHost, localPort, _ := net.SplitHostPort(addr.Host) + suite.conf.Set("cmd_host", localHost, pkgconfigmodel.SourceAgentRuntime) + suite.conf.Set("cmd_port", localPort, pkgconfigmodel.SourceAgentRuntime) +} + +func (suite *IPCEndpointTestSuite) TestNewIPCEndpoint() { + t := suite.T() // set minimal configuration that IPCEndpoint needs - conf.Set("auth_token_file_path", authTokenPath, pkgconfigmodel.SourceAgentRuntime) - conf.Set("cmd_host", "localhost", pkgconfigmodel.SourceAgentRuntime) - conf.Set("cmd_port", "6789", pkgconfigmodel.SourceAgentRuntime) + suite.conf.Set("cmd_host", "localhost", pkgconfigmodel.SourceAgentRuntime) + suite.conf.Set("cmd_port", "6789", pkgconfigmodel.SourceAgentRuntime) // test the endpoint construction - end, err := NewIPCEndpoint(conf, "test/api") + end, err := NewIPCEndpoint(suite.conf, "test/api") assert.NoError(t, err) assert.Equal(t, end.target.String(), "https://localhost:6789/test/api") } -func TestNewIPCEndpointWithCloseConnection(t *testing.T) { - conf := configmock.New(t) - - // create a fake auth token - authTokenFile, err := os.CreateTemp("", "") - assert.NoError(t, err) - authTokenPath := authTokenFile.Name() - os.WriteFile(authTokenPath, []byte("0123456789abcdef0123456789abcdef"), 0640) - - // set minimal configuration that IPCEndpoint needs - conf.Set("auth_token_file_path", authTokenPath, pkgconfigmodel.SourceAgentRuntime) - conf.Set("cmd_host", "localhost", pkgconfigmodel.SourceAgentRuntime) - conf.Set("cmd_port", "6789", pkgconfigmodel.SourceAgentRuntime) +func (suite *IPCEndpointTestSuite) TestNewIPCEndpointWithCloseConnection() { + t := suite.T() // test constructing with the CloseConnection option - end, err := NewIPCEndpoint(conf, "test/api", WithCloseConnection(true)) - assert.NoError(t, err) + end, err := NewIPCEndpoint(suite.conf, "test/api", WithCloseConnection(true)) + require.NoError(t, err) assert.True(t, end.closeConn) } -func TestIPCEndpointDoGet(t *testing.T) { +func (suite *IPCEndpointTestSuite) TestIPCEndpointDoGet() { + t := suite.T() gotURL := "" - ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { gotURL = r.URL.String() _, _ = io.ReadAll(r.Body) w.Write([]byte("ok")) })) defer ts.Close() - conf := createConfig(t, ts) - end, err := NewIPCEndpoint(conf, "test/api") + suite.setTestServerAndConfig(t, ts, true) + end, err := NewIPCEndpoint(suite.conf, "test/api") assert.NoError(t, err) // test that DoGet will hit the endpoint url res, err := end.DoGet() - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, res, []byte("ok")) assert.Equal(t, gotURL, "/test/api") } -func TestIPCEndpointGetWithHTTPClientAndNonTLS(t *testing.T) { +func (suite *IPCEndpointTestSuite) TestIPCEndpointGetWithHTTPClientAndNonTLS() { + t := suite.T() // non-http server gotURL := "" - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { gotURL = r.URL.String() _, _ = io.ReadAll(r.Body) w.Write([]byte("ok")) @@ -114,106 +126,112 @@ func TestIPCEndpointGetWithHTTPClientAndNonTLS(t *testing.T) { defer ts.Close() // create non-TLS client and use the "http" protocol + suite.setTestServerAndConfig(t, ts, false) client := http.Client{} - conf := createConfig(t, ts) - end, err := NewIPCEndpoint(conf, "test/api", WithHTTPClient(&client), WithURLScheme("http")) + end, err := NewIPCEndpoint(suite.conf, "test/api", WithHTTPClient(&client), WithURLScheme("http")) assert.NoError(t, err) // test that DoGet will hit the endpoint url res, err := end.DoGet() - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, res, []byte("ok")) assert.Equal(t, gotURL, "/test/api") } -func TestIPCEndpointGetWithValues(t *testing.T) { +func (suite *IPCEndpointTestSuite) TestIPCEndpointGetWithValues() { + t := suite.T() gotURL := "" - ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { gotURL = r.URL.String() _, _ = io.ReadAll(r.Body) w.Write([]byte("ok")) })) defer ts.Close() - conf := createConfig(t, ts) + suite.setTestServerAndConfig(t, ts, true) // set url values for GET request v := url.Values{} v.Set("verbose", "true") // test construction with option for url.Values - end, err := NewIPCEndpoint(conf, "test/api") + end, err := NewIPCEndpoint(suite.conf, "test/api") assert.NoError(t, err) // test that DoGet will use query parameters from the url.Values res, err := end.DoGet(WithValues(v)) - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, res, []byte("ok")) assert.Equal(t, gotURL, "/test/api?verbose=true") } -func TestIPCEndpointGetWithHostAndPort(t *testing.T) { - ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { +func (suite *IPCEndpointTestSuite) TestIPCEndpointGetWithHostAndPort() { + t := suite.T() + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, _ = io.ReadAll(r.Body) w.Write([]byte("ok")) })) defer ts.Close() - conf := createConfig(t, ts) + suite.setTestServerAndConfig(t, ts, true) // modify the config so that it uses a different setting for the cmd_host - conf.Set("process_config.cmd_host", "127.0.0.1", pkgconfigmodel.SourceAgentRuntime) + suite.conf.Set("process_config.cmd_host", "127.0.0.1", pkgconfigmodel.SourceAgentRuntime) // test construction with alternate values for the host and port - end, err := NewIPCEndpoint(conf, "test/api", WithHostAndPort(conf.GetString("process_config.cmd_host"), conf.GetInt("cmd_port"))) + end, err := NewIPCEndpoint(suite.conf, "test/api", WithHostAndPort(suite.conf.GetString("process_config.cmd_host"), suite.conf.GetInt("cmd_port"))) assert.NoError(t, err) // test that host provided by WithHostAndPort is used for the endpoint res, err := end.DoGet() - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, res, []byte("ok")) - assert.Equal(t, end.target.Host, fmt.Sprintf("127.0.0.1:%d", conf.GetInt("cmd_port"))) + assert.Equal(t, end.target.Host, fmt.Sprintf("127.0.0.1:%d", suite.conf.GetInt("cmd_port"))) } -func TestIPCEndpointDeprecatedIPCAddress(t *testing.T) { - ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { +func (suite *IPCEndpointTestSuite) TestIPCEndpointDeprecatedIPCAddress() { + t := suite.T() + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, _ = io.ReadAll(r.Body) w.Write([]byte("ok")) })) defer ts.Close() - conf := createConfig(t, ts) + suite.setTestServerAndConfig(t, ts, true) // Use the deprecated (but still supported) option "ipc_address" - conf.UnsetForSource("cmd_host", pkgconfigmodel.SourceAgentRuntime) - conf.Set("ipc_address", "127.0.0.1", pkgconfigmodel.SourceAgentRuntime) + suite.conf.UnsetForSource("cmd_host", pkgconfigmodel.SourceAgentRuntime) + suite.conf.Set("ipc_address", "127.0.0.1", pkgconfigmodel.SourceAgentRuntime) + defer suite.conf.UnsetForSource("ipc_address", pkgconfigmodel.SourceAgentRuntime) // test construction, uses ipc_address instead of cmd_host - end, err := NewIPCEndpoint(conf, "test/api") + end, err := NewIPCEndpoint(suite.conf, "test/api") assert.NoError(t, err) // test that host provided by "ipc_address" is used for the endpoint res, err := end.DoGet() - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, res, []byte("ok")) - assert.Equal(t, end.target.Host, fmt.Sprintf("127.0.0.1:%d", conf.GetInt("cmd_port"))) + assert.Equal(t, end.target.Host, fmt.Sprintf("127.0.0.1:%d", suite.conf.GetInt("cmd_port"))) } -func TestIPCEndpointErrorText(t *testing.T) { - ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { +func (suite *IPCEndpointTestSuite) TestIPCEndpointErrorText() { + t := suite.T() + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(400) w.Write([]byte("bad request")) })) defer ts.Close() - conf := createConfig(t, ts) - end, err := NewIPCEndpoint(conf, "test/api") - assert.NoError(t, err) + suite.setTestServerAndConfig(t, ts, true) + end, err := NewIPCEndpoint(suite.conf, "test/api") + require.NoError(t, err) // test that error is returned by the endpoint _, err = end.DoGet() - assert.Error(t, err) + require.Error(t, err) } -func TestIPCEndpointErrorMap(t *testing.T) { - ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { +func (suite *IPCEndpointTestSuite) TestIPCEndpointErrorMap() { + t := suite.T() + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(400) data, _ := json.Marshal(map[string]string{ "error": "something went wrong", @@ -222,12 +240,12 @@ func TestIPCEndpointErrorMap(t *testing.T) { })) defer ts.Close() - conf := createConfig(t, ts) - end, err := NewIPCEndpoint(conf, "test/api") - assert.NoError(t, err) + suite.setTestServerAndConfig(t, ts, true) + end, err := NewIPCEndpoint(suite.conf, "test/api") + require.NoError(t, err) // test that error gets unwrapped from the errmap _, err = end.DoGet() - assert.Error(t, err) + require.Error(t, err) assert.Equal(t, err.Error(), "something went wrong") } diff --git a/pkg/api/util/util.go b/pkg/api/util/util.go index 6aece9c03c648..b22c2e7b04ad0 100644 --- a/pkg/api/util/util.go +++ b/pkg/api/util/util.go @@ -8,52 +8,138 @@ package util import ( "crypto/subtle" + "crypto/tls" + "crypto/x509" "fmt" "net" "net/http" "strings" "sync" - "github.com/DataDog/datadog-agent/pkg/api/security" + pkgtoken "github.com/DataDog/datadog-agent/pkg/api/security" + "github.com/DataDog/datadog-agent/pkg/api/security/cert" "github.com/DataDog/datadog-agent/pkg/config/model" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +type source int + +const ( + uninitialized source = iota + setAuthToken + createAndSetAuthToken ) var ( tokenLock sync.RWMutex token string dcaToken string + // The clientTLSConfig is set by default with `InsecureSkipVerify: true`. + // This is intentionally done to allow the Agent to local Agent APIs when the clientTLSConfig is not yet initialized. + // However, this default value should be removed in the future. + // TODO: Monitor and fix the logs printed by GetTLSClientConfig and GetTLSServerConfig. + clientTLSConfig = &tls.Config{ + InsecureSkipVerify: true, + } + serverTLSConfig *tls.Config + initSource source ) -// SetAuthToken sets the session token +// SetAuthToken sets the session token and IPC certificate // Requires that the config has been set up before calling func SetAuthToken(config model.Reader) error { tokenLock.Lock() defer tokenLock.Unlock() // Noop if token is already set - if token != "" { + if initSource != uninitialized { return nil } var err error - token, err = security.FetchAuthToken(config) - return err + token, err = pkgtoken.FetchAuthToken(config) + if err != nil { + return err + } + ipccert, ipckey, err := cert.FetchAgentIPCCert(config) + if err != nil { + return err + } + + certPool := x509.NewCertPool() + if ok := certPool.AppendCertsFromPEM(ipccert); !ok { + return fmt.Errorf("unable to use cert for creating CertPool") + } + + clientTLSConfig = &tls.Config{ + RootCAs: certPool, + } + + tlsCert, err := tls.X509KeyPair(ipccert, ipckey) + if err != nil { + return err + } + serverTLSConfig = &tls.Config{ + Certificates: []tls.Certificate{tlsCert}, + } + + initSource = setAuthToken + + return nil } -// CreateAndSetAuthToken creates and sets the authorization token +// CreateAndSetAuthToken creates and sets the authorization token and IPC certificate // Requires that the config has been set up before calling func CreateAndSetAuthToken(config model.Reader) error { tokenLock.Lock() defer tokenLock.Unlock() // Noop if token is already set - if token != "" { + switch initSource { + case setAuthToken: + log.Infof("function CreateAndSetAuthToken was called after SetAuthToken was called") + return nil + case createAndSetAuthToken: return nil } var err error - token, err = security.CreateOrFetchToken(config) - return err + token, err = pkgtoken.CreateOrFetchToken(config) + if err != nil { + return err + } + ipccert, ipckey, err := cert.CreateOrFetchAgentIPCCert(config) + if err != nil { + return err + } + + certPool := x509.NewCertPool() + if ok := certPool.AppendCertsFromPEM(ipccert); !ok { + return fmt.Errorf("Unable to generate certPool from PERM IPC cert") + } + + clientTLSConfig = &tls.Config{ + RootCAs: certPool, + } + + tlsCert, err := tls.X509KeyPair(ipccert, ipckey) + if err != nil { + return fmt.Errorf("Unable to generate x509 cert from PERM IPC cert and key") + } + serverTLSConfig = &tls.Config{ + Certificates: []tls.Certificate{tlsCert}, + } + + initSource = createAndSetAuthToken + + return nil +} + +// IsInitialized return true if the auth_token and IPC cert/key pair have been initialized with SetAuthToken or CreateAndSetAuthToken functions +func IsInitialized() bool { + tokenLock.RLock() + defer tokenLock.Unlock() + return initSource != uninitialized } // GetAuthToken gets the session token @@ -63,6 +149,26 @@ func GetAuthToken() string { return token } +// GetTLSClientConfig gets the certificate and key used for IPC +func GetTLSClientConfig() *tls.Config { + tokenLock.RLock() + defer tokenLock.RUnlock() + if initSource == uninitialized { + log.Errorf("GetTLSClientConfig was called before being initialized (through SetAuthToken or CreateAndSetAuthToken function)") + } + return clientTLSConfig.Clone() +} + +// GetTLSServerConfig gets the certificate and key used for IPC +func GetTLSServerConfig() *tls.Config { + tokenLock.RLock() + defer tokenLock.RUnlock() + if initSource == uninitialized { + log.Errorf("GetTLSServerConfig was called before being initialized (through SetAuthToken or CreateAndSetAuthToken function)") + } + return serverTLSConfig.Clone() +} + // InitDCAAuthToken initialize the session token for the Cluster Agent based on config options // Requires that the config has been set up before calling func InitDCAAuthToken(config model.Reader) error { @@ -75,7 +181,7 @@ func InitDCAAuthToken(config model.Reader) error { } var err error - dcaToken, err = security.CreateOrGetClusterAgentAuthToken(config) + dcaToken, err = pkgtoken.CreateOrGetClusterAgentAuthToken(config) return err } diff --git a/pkg/config/setup/config.go b/pkg/config/setup/config.go index da2fb45d704bb..66942a316486e 100644 --- a/pkg/config/setup/config.go +++ b/pkg/config/setup/config.go @@ -1093,6 +1093,8 @@ func agent(config pkgconfigmodel.Setup) { config.BindEnvAndSetDefault("check_runners", int64(4)) config.BindEnvAndSetDefault("check_cancel_timeout", 500*time.Millisecond) config.BindEnvAndSetDefault("auth_token_file_path", "") + // used to override the path where the IPC cert/key files are stored/retrieved + config.BindEnvAndSetDefault("ipc_cert_file_path", "") config.BindEnv("bind_host") config.BindEnvAndSetDefault("health_port", int64(0)) config.BindEnvAndSetDefault("disable_py3_validation", false) From 5148130538d7b2f32a9f4a050792ab4101ffd5f2 Mon Sep 17 00:00:00 2001 From: Florent Clarret Date: Thu, 12 Dec 2024 09:51:29 +0100 Subject: [PATCH 150/303] Update the name of a step in the create RC PR workflow (#32079) --- .github/workflows/create_rc_pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create_rc_pr.yml b/.github/workflows/create_rc_pr.yml index 5539dc44532b1..623b6e9dee395 100644 --- a/.github/workflows/create_rc_pr.yml +++ b/.github/workflows/create_rc_pr.yml @@ -59,7 +59,7 @@ jobs: value: ${{fromJSON(needs.find_release_branches.outputs.branches)}} fail-fast: false steps: - - name: Checkout release branch + - name: Checkout the main branch uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 with: persist-credentials: true From c96e64710cdd2f6683e54fe07067b4273291eb98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Thu, 12 Dec 2024 09:51:36 +0100 Subject: [PATCH 151/303] omnibus cache: add more env variables to the exclusion list (#32080) --- tasks/libs/common/omnibus.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tasks/libs/common/omnibus.py b/tasks/libs/common/omnibus.py index b60b710ff384b..38208c6a4d1fe 100644 --- a/tasks/libs/common/omnibus.py +++ b/tasks/libs/common/omnibus.py @@ -97,7 +97,7 @@ def env_filter(item): "CHANNEL", "CHART", "CI", - "CLUSTER", + "CLUSTERS", "CODECOV", "CODECOV_TOKEN", "COMPUTERNAME", @@ -115,7 +115,9 @@ def env_filter(item): "GENERAL_ARTIFACTS_CACHE_BUCKET_URL", "GET_SOURCES_ATTEMPTS", "GO_TEST_SKIP_FLAKE", + "GONOSUMDB", "HELM_HOOKS_CI_IMAGE", + "HELM_HOOKS_PERIODICAL_REBUILD_CONDUCTOR_ENV", "HOME", "HOSTNAME", "HOST_IP", @@ -134,9 +136,11 @@ def env_filter(item): "MANPATH", "MESSAGE", "NEW_CLUSTER", + "NEW_CLUSTER_PR_SLACK_WORKFLOW_WEBHOOK", "OLDPWD", "PCP_DIR", "PACKAGE_ARCH", + "PIP_EXTRA_INDEX_URL", "PIP_INDEX_URL", "PROCESS_S3_BUCKET", "PWD", From 5dac3829e767f1280b1b6ebdec0256f0eeb8b2fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lian=20Raimbault?= <161456554+CelianR@users.noreply.github.com> Date: Thu, 12 Dec 2024 04:42:42 -0500 Subject: [PATCH 152/303] [ADXT-512] Dual shipping disabled by default (#31873) --- .gitlab/common/test_infra_version.yml | 2 +- test/new-e2e/go.mod | 15 +++++----- test/new-e2e/go.sum | 30 +++++++++---------- test/new-e2e/tests/containers/docker_test.go | 12 ++++---- test/new-e2e/tests/containers/eks_test.go | 1 + test/new-e2e/tests/containers/kindvm_test.go | 1 + test/new-e2e/tests/cspm/cspm_test.go | 2 +- test/new-e2e/tests/orchestrator/apply.go | 1 + test/new-e2e/tests/orchestrator/suite_test.go | 1 + .../tests/otel/otel-agent/complete_test.go | 2 +- .../otel-agent/infraattributes_eks_test.go | 4 +-- .../otel/otel-agent/infraattributes_test.go | 2 +- .../tests/otel/otel-agent/minimal_test.go | 2 +- .../receive_resource_spans_v2_test.go | 2 +- .../tests/otel/otel-agent/sampling_test.go | 2 +- ...eration_and_resource_name_logic_v2_test.go | 8 ++--- .../otlp-ingest/pipelines_sampling_test.go | 2 +- .../tests/otel/otlp-ingest/pipelines_test.go | 2 +- .../receive_resource_spans_v2_test.go | 2 +- 19 files changed, 48 insertions(+), 45 deletions(-) diff --git a/.gitlab/common/test_infra_version.yml b/.gitlab/common/test_infra_version.yml index 7844ff82e9ee3..7d435a4bc3a4b 100644 --- a/.gitlab/common/test_infra_version.yml +++ b/.gitlab/common/test_infra_version.yml @@ -4,4 +4,4 @@ variables: # and check the job creating the image to make sure you have the right SHA prefix TEST_INFRA_DEFINITIONS_BUILDIMAGES_SUFFIX: "" # Make sure to update test-infra-definitions version in go.mod as well - TEST_INFRA_DEFINITIONS_BUILDIMAGES: 1f340fd450e3 + TEST_INFRA_DEFINITIONS_BUILDIMAGES: 9c7c5005ca28 diff --git a/test/new-e2e/go.mod b/test/new-e2e/go.mod index f42ee4e61a984..e8dde1fd6d8b6 100644 --- a/test/new-e2e/go.mod +++ b/test/new-e2e/go.mod @@ -58,7 +58,7 @@ require ( // `TEST_INFRA_DEFINITIONS_BUILDIMAGES` matches the commit sha in the module version // Example: github.com/DataDog/test-infra-definitions v0.0.0-YYYYMMDDHHmmSS-0123456789AB // => TEST_INFRA_DEFINITIONS_BUILDIMAGES: 0123456789AB - github.com/DataDog/test-infra-definitions v0.0.0-20241129143439-1f340fd450e3 + github.com/DataDog/test-infra-definitions v0.0.0-20241211124138-9c7c5005ca28 github.com/aws/aws-sdk-go-v2 v1.32.5 github.com/aws/aws-sdk-go-v2/config v1.28.5 github.com/aws/aws-sdk-go-v2/service/ec2 v1.190.0 @@ -74,8 +74,7 @@ require ( github.com/pkg/sftp v1.13.6 github.com/pulumi/pulumi-aws/sdk/v6 v6.56.1 github.com/pulumi/pulumi-awsx/sdk/v2 v2.16.1 - github.com/pulumi/pulumi-eks/sdk/v2 v2.8.1 // indirect - github.com/pulumi/pulumi-kubernetes/sdk/v4 v4.17.1 + github.com/pulumi/pulumi-kubernetes/sdk/v4 v4.18.3 github.com/pulumi/pulumi/sdk/v3 v3.140.0 github.com/samber/lo v1.47.0 github.com/stretchr/testify v1.10.0 @@ -303,13 +302,13 @@ require ( github.com/moby/docker-image-spec v1.3.1 // indirect github.com/onsi/ginkgo/v2 v2.20.2 // indirect github.com/onsi/gomega v1.34.1 // indirect - github.com/pulumi/pulumi-azure-native-sdk/authorization/v2 v2.67.0 // indirect - github.com/pulumi/pulumi-azure-native-sdk/compute/v2 v2.56.0 // indirect - github.com/pulumi/pulumi-azure-native-sdk/containerservice/v2 v2.67.0 // indirect + github.com/pulumi/pulumi-azure-native-sdk/authorization/v2 v2.73.1 // indirect + github.com/pulumi/pulumi-azure-native-sdk/compute/v2 v2.73.1 // indirect + github.com/pulumi/pulumi-azure-native-sdk/containerservice/v2 v2.73.1 // indirect github.com/pulumi/pulumi-azure-native-sdk/managedidentity/v2 v2.73.1 // indirect - github.com/pulumi/pulumi-azure-native-sdk/network/v2 v2.67.0 // indirect + github.com/pulumi/pulumi-azure-native-sdk/network/v2 v2.73.1 // indirect github.com/pulumi/pulumi-azure-native-sdk/v2 v2.73.1 // indirect - github.com/pulumi/pulumi-gcp/sdk/v6 v6.67.1 // indirect + github.com/pulumi/pulumi-eks/sdk/v3 v3.3.0 // indirect github.com/pulumi/pulumi-gcp/sdk/v7 v7.38.0 // indirect github.com/twinj/uuid v0.0.0-20151029044442-89173bcdda19 // indirect github.com/x448/float16 v0.8.4 // indirect diff --git a/test/new-e2e/go.sum b/test/new-e2e/go.sum index 2942cca211484..516b220165409 100644 --- a/test/new-e2e/go.sum +++ b/test/new-e2e/go.sum @@ -17,8 +17,8 @@ github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= -github.com/DataDog/test-infra-definitions v0.0.0-20241129143439-1f340fd450e3 h1:s+bNaiOoY3W7vCSQVqD4mU3mrtXsbkeRX+vVTwCyStQ= -github.com/DataDog/test-infra-definitions v0.0.0-20241129143439-1f340fd450e3/go.mod h1:7nVt9okOqKKC9B9YfKqk4jitYuv1I3q2Cd/yZWuViZU= +github.com/DataDog/test-infra-definitions v0.0.0-20241211124138-9c7c5005ca28 h1:LaZgAke+RN4wBKNl+R10ewdtKe/C2MJCbp9ozXKlLP8= +github.com/DataDog/test-infra-definitions v0.0.0-20241211124138-9c7c5005ca28/go.mod h1:blPG0VXBgk1oXm2+KHMTMyR0sNI2jv51FACAYPNQvNo= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/DataDog/zstd_0 v0.0.0-20210310093942-586c1286621f h1:5Vuo4niPKFkfwW55jV4vY0ih3VQ9RaQqeqY67fvRn8A= @@ -405,30 +405,28 @@ github.com/pulumi/pulumi-aws/sdk/v6 v6.56.1 h1:wA38Ep4sEphX+3YGwFfaxRHs7NQv8dNOb github.com/pulumi/pulumi-aws/sdk/v6 v6.56.1/go.mod h1:m/ejZ2INurqq/ncDjJfgC1Ff/lnbt0J/uO33BnPVots= github.com/pulumi/pulumi-awsx/sdk/v2 v2.16.1 h1:6082hB+ILpPB/0V5F+LTmHbX1BO54tCVOQCVOL/FYI4= github.com/pulumi/pulumi-awsx/sdk/v2 v2.16.1/go.mod h1:z2bnBPHNYfk72IW1P01H9qikBtBSBhCwi3QpH6Y/38Q= -github.com/pulumi/pulumi-azure-native-sdk/authorization/v2 v2.67.0 h1:mgmmbFEoc1YOu81K9Bl/MVWE8cGloEdiCeIw394vXcM= -github.com/pulumi/pulumi-azure-native-sdk/authorization/v2 v2.67.0/go.mod h1:WmvulRFoc+dOk/el9y6u7z3CvA+yljL8HJXajmvZTYo= -github.com/pulumi/pulumi-azure-native-sdk/compute/v2 v2.56.0 h1:MFOd6X9FPlixzriy14fBHv7pFCCh/mu1pwHtSSjqfJ4= -github.com/pulumi/pulumi-azure-native-sdk/compute/v2 v2.56.0/go.mod h1:453Ff5wNscroYfq+zxME7Nbt7HdZv+dh0zLZwLyGBws= -github.com/pulumi/pulumi-azure-native-sdk/containerservice/v2 v2.67.0 h1:jvruQQSO1ESk7APFQ3mAge7C9SWKU9nbBHrilcyeSGU= -github.com/pulumi/pulumi-azure-native-sdk/containerservice/v2 v2.67.0/go.mod h1:d5nmekK1mrjM9Xo/JGGVlAs7mqqftBo3DmKji+1zbmw= +github.com/pulumi/pulumi-azure-native-sdk/authorization/v2 v2.73.1 h1:miIJy4njnFYw7VxMLvEztoMPr9zYC2kqBTwRlaFAf48= +github.com/pulumi/pulumi-azure-native-sdk/authorization/v2 v2.73.1/go.mod h1:LR1QBq0C1NIhmD9E0uKozCAu32j5qsamhrIsTSNVMS8= +github.com/pulumi/pulumi-azure-native-sdk/compute/v2 v2.73.1 h1:79HTKSE1uJQolCRUHRFnIbSPNSIhxekIhznHnjpLi6s= +github.com/pulumi/pulumi-azure-native-sdk/compute/v2 v2.73.1/go.mod h1:sN7rQ3n6T/KGaQqMXdoERPjiKzE8L89H6sFj1CSFk/U= +github.com/pulumi/pulumi-azure-native-sdk/containerservice/v2 v2.73.1 h1:8xyjq2nYeBNwqdIf0Su2DHprEMbW0Rs82ZliFNY+14o= +github.com/pulumi/pulumi-azure-native-sdk/containerservice/v2 v2.73.1/go.mod h1:UYRkyT4qRuQ39GPtyxE509zTVwbfunE/32npB0bhr1E= github.com/pulumi/pulumi-azure-native-sdk/managedidentity/v2 v2.73.1 h1:rkNZDAik+qlIhbmFoa09ln/oJMXey5+olw8ShmljgXc= github.com/pulumi/pulumi-azure-native-sdk/managedidentity/v2 v2.73.1/go.mod h1:P/N/xG2lVxsHdspmKjH+d8d4ln+2arXBmOl3zhjWnnw= -github.com/pulumi/pulumi-azure-native-sdk/network/v2 v2.67.0 h1:r26Xl6FdOJnbLs1ny9ekuRjFxAocZK8jS8SLrgXKEFE= -github.com/pulumi/pulumi-azure-native-sdk/network/v2 v2.67.0/go.mod h1:8yXZtmHe2Zet5pb8gZ7D730d0VAm4kYUdwCj7sjhz6g= +github.com/pulumi/pulumi-azure-native-sdk/network/v2 v2.73.1 h1:glI1LKNu/erhOZpHq7/tdwMwerZxHKv6Xaaz4ILvKAs= +github.com/pulumi/pulumi-azure-native-sdk/network/v2 v2.73.1/go.mod h1:Ckfh040vb9BE28NMNQcjYleSYAhaFhz2+E9gFYEDUGc= github.com/pulumi/pulumi-azure-native-sdk/v2 v2.73.1 h1:yzXxwwq3tHdtSOi5vjKmKXq7HyKvDaKulF53MFTMbh8= github.com/pulumi/pulumi-azure-native-sdk/v2 v2.73.1/go.mod h1:ChjIUNDNeN6jI33ZOivHUFqM6purDiLP01mghMGe1Fs= github.com/pulumi/pulumi-command/sdk v1.0.1 h1:ZuBSFT57nxg/fs8yBymUhKLkjJ6qmyN3gNvlY/idiN0= github.com/pulumi/pulumi-command/sdk v1.0.1/go.mod h1:C7sfdFbUIoXKoIASfXUbP/U9xnwPfxvz8dBpFodohlA= github.com/pulumi/pulumi-docker/sdk/v4 v4.5.5 h1:7OjAfgLz5PAy95ynbgPAlWls5WBe4I/QW/61TdPWRlQ= github.com/pulumi/pulumi-docker/sdk/v4 v4.5.5/go.mod h1:XZKLFXbw13olxuztlWnmVUPYZp2a+BqzqhuMl0j/Ow8= -github.com/pulumi/pulumi-eks/sdk/v2 v2.8.1 h1:upeongxe3/2oCO2BHq78qqQbO7SGJz9rnp/KyDmJwqs= -github.com/pulumi/pulumi-eks/sdk/v2 v2.8.1/go.mod h1:ARGNnIZENIpDUVSX21JEQJKrESj/0u0r0iT61rpb86I= -github.com/pulumi/pulumi-gcp/sdk/v6 v6.67.1 h1:PUH/sUbJmBmHjNFNthJ/dW2+riFuJV0FhrGAwuUuRIg= -github.com/pulumi/pulumi-gcp/sdk/v6 v6.67.1/go.mod h1:OmZeji3dNMwB1qldAlaQfcfJPc2BaZyweVGH7Ej4SJg= +github.com/pulumi/pulumi-eks/sdk/v3 v3.3.0 h1:F3xAOBZ/In4PqydTsKeg3tou/c5FZ+JTp5dQO0oMjqE= +github.com/pulumi/pulumi-eks/sdk/v3 v3.3.0/go.mod h1:QbAamxfUpDJC81BGtyEuV0P88RrdbOjQEhbgY+OOPpg= github.com/pulumi/pulumi-gcp/sdk/v7 v7.38.0 h1:21oSj+TKlKTzQcxN9Hik7iSNNHPUQXN4s3itOnahy/w= github.com/pulumi/pulumi-gcp/sdk/v7 v7.38.0/go.mod h1:YaEZms1NgXFqGhObKVofcAeWXu2V+3t/BAXdHQZq7fU= -github.com/pulumi/pulumi-kubernetes/sdk/v4 v4.17.1 h1:VDX+hu+qK3fbf2FodgG5kfh2h1bHK0FKirW1YqKWkRc= -github.com/pulumi/pulumi-kubernetes/sdk/v4 v4.17.1/go.mod h1:e69ohZtUePLLYNLXYgiOWp0FvRGg6ya/3fsq3o00nN0= +github.com/pulumi/pulumi-kubernetes/sdk/v4 v4.18.3 h1:quqoGsLbF7lpGpGU4mi5WfVLIAo4gfvoQeYYmemx1Dg= +github.com/pulumi/pulumi-kubernetes/sdk/v4 v4.18.3/go.mod h1:9dBA6+rtpKmyZB3k1XryUOHDOuNdoTODFKEEZZCtrz8= github.com/pulumi/pulumi-libvirt/sdk v0.4.7 h1:/BBnqqx/Gbg2vINvJxXIVb58THXzw2lSqFqxlRSXH9M= github.com/pulumi/pulumi-libvirt/sdk v0.4.7/go.mod h1:VKvjhAm1sGtzKZruYwIhgascabEx7+oVVRCoxp/cPi4= github.com/pulumi/pulumi-random/sdk/v4 v4.16.7 h1:39rhOe/PTUGMYia8pR5T2wbxxMt2pwrlonf0ncYKSzE= diff --git a/test/new-e2e/tests/containers/docker_test.go b/test/new-e2e/tests/containers/docker_test.go index a7d27f4fa2987..329fd2ca1a68b 100644 --- a/test/new-e2e/tests/containers/docker_test.go +++ b/test/new-e2e/tests/containers/docker_test.go @@ -9,14 +9,16 @@ import ( "context" "encoding/json" "fmt" - "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" - "github.com/DataDog/datadog-agent/test/new-e2e/pkg/runner" - "github.com/DataDog/datadog-agent/test/new-e2e/pkg/utils/infra" + "os" + "testing" + "github.com/DataDog/test-infra-definitions/scenarios/aws/ec2" "github.com/pulumi/pulumi/sdk/v3/go/auto" "github.com/stretchr/testify/suite" - "os" - "testing" + + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/runner" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/utils/infra" ) type DockerSuite struct { diff --git a/test/new-e2e/tests/containers/eks_test.go b/test/new-e2e/tests/containers/eks_test.go index 6562eff6abb80..02ddc3cf4e1d4 100644 --- a/test/new-e2e/tests/containers/eks_test.go +++ b/test/new-e2e/tests/containers/eks_test.go @@ -44,6 +44,7 @@ func (suite *eksSuite) SetupSuite() { "ddagent:fakeintake": auto.ConfigValue{Value: "true"}, "ddtestworkload:deploy": auto.ConfigValue{Value: "true"}, "dddogstatsd:deploy": auto.ConfigValue{Value: "true"}, + "ddagent:dualshipping": auto.ConfigValue{Value: "true"}, } _, stackOutput, err := infra.GetStackManager().GetStackNoDeleteOnFailure( diff --git a/test/new-e2e/tests/containers/kindvm_test.go b/test/new-e2e/tests/containers/kindvm_test.go index 5282e6fd65e34..84be75e550403 100644 --- a/test/new-e2e/tests/containers/kindvm_test.go +++ b/test/new-e2e/tests/containers/kindvm_test.go @@ -38,6 +38,7 @@ func (suite *kindSuite) SetupSuite() { "ddagent:fakeintake": auto.ConfigValue{Value: "true"}, "ddtestworkload:deploy": auto.ConfigValue{Value: "true"}, "dddogstatsd:deploy": auto.ConfigValue{Value: "true"}, + "ddagent:dualshipping": auto.ConfigValue{Value: "true"}, } _, stackOutput, err := infra.GetStackManager().GetStackNoDeleteOnFailure( diff --git a/test/new-e2e/tests/cspm/cspm_test.go b/test/new-e2e/tests/cspm/cspm_test.go index 2c7a03f8b67b1..6f5d881214691 100644 --- a/test/new-e2e/tests/cspm/cspm_test.go +++ b/test/new-e2e/tests/cspm/cspm_test.go @@ -172,7 +172,7 @@ var expectedFindingsWorkerNode = findings{ var values string func TestCSPM(t *testing.T) { - e2e.Run(t, &cspmTestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(values), kubernetesagentparams.WithoutDualShipping())))) + e2e.Run(t, &cspmTestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(values))))) } func (s *cspmTestSuite) TestFindings() { diff --git a/test/new-e2e/tests/orchestrator/apply.go b/test/new-e2e/tests/orchestrator/apply.go index f7300ddc78833..ee4e8668ab40c 100644 --- a/test/new-e2e/tests/orchestrator/apply.go +++ b/test/new-e2e/tests/orchestrator/apply.go @@ -114,6 +114,7 @@ func deployAgent(ctx *pulumi.Context, awsEnv *resAws.Environment, cluster *local if awsEnv.AgentDeploy() { customValues := fmt.Sprintf(agentCustomValuesFmt, clusterName) helmComponent, err := agent.NewHelmInstallation(awsEnv, agent.HelmInstallationArgs{ + DualShipping: true, KubeProvider: kindKubeProvider, Namespace: "datadog", ValuesYAML: pulumi.AssetOrArchiveArray{ diff --git a/test/new-e2e/tests/orchestrator/suite_test.go b/test/new-e2e/tests/orchestrator/suite_test.go index 196acb7611ea5..c159b25a868ab 100644 --- a/test/new-e2e/tests/orchestrator/suite_test.go +++ b/test/new-e2e/tests/orchestrator/suite_test.go @@ -23,6 +23,7 @@ import ( "k8s.io/client-go/tools/clientcmd" agentmodel "github.com/DataDog/agent-payload/v5/process" + "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/components" diff --git a/test/new-e2e/tests/otel/otel-agent/complete_test.go b/test/new-e2e/tests/otel/otel-agent/complete_test.go index 357a6e754cee6..d3359aae3cb87 100644 --- a/test/new-e2e/tests/otel/otel-agent/complete_test.go +++ b/test/new-e2e/tests/otel/otel-agent/complete_test.go @@ -39,7 +39,7 @@ agents: value: 'false' ` t.Parallel() - e2e.Run(t, &completeTestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithoutDualShipping(), kubernetesagentparams.WithHelmValues(values), kubernetesagentparams.WithOTelAgent(), kubernetesagentparams.WithOTelConfig(completeConfig))))) + e2e.Run(t, &completeTestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(values), kubernetesagentparams.WithOTelAgent(), kubernetesagentparams.WithOTelConfig(completeConfig))))) } func (s *completeTestSuite) SetupSuite() { diff --git a/test/new-e2e/tests/otel/otel-agent/infraattributes_eks_test.go b/test/new-e2e/tests/otel/otel-agent/infraattributes_eks_test.go index 4bbfc390a861b..81b57d87917d9 100644 --- a/test/new-e2e/tests/otel/otel-agent/infraattributes_eks_test.go +++ b/test/new-e2e/tests/otel/otel-agent/infraattributes_eks_test.go @@ -32,7 +32,7 @@ datadog: containerCollectUsingFiles: false ` t.Parallel() - e2e.Run(t, &iaEKSTestSuite{}, e2e.WithProvisioner(awskubernetes.EKSProvisioner(awskubernetes.WithEKSOptions(eks.WithLinuxNodeGroup()), awskubernetes.WithAgentOptions(kubernetesagentparams.WithoutDualShipping(), kubernetesagentparams.WithHelmValues(values), kubernetesagentparams.WithOTelAgent(), kubernetesagentparams.WithOTelConfig(iaConfig))))) + e2e.Run(t, &iaEKSTestSuite{}, e2e.WithProvisioner(awskubernetes.EKSProvisioner(awskubernetes.WithEKSOptions(eks.WithLinuxNodeGroup()), awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(values), kubernetesagentparams.WithOTelAgent(), kubernetesagentparams.WithOTelConfig(iaConfig))))) } var eksParams = utils.IAParams{ @@ -78,7 +78,7 @@ datadog: containerCollectUsingFiles: false ` t.Parallel() - e2e.Run(t, &iaUSTEKSTestSuite{}, e2e.WithProvisioner(awskubernetes.EKSProvisioner(awskubernetes.WithEKSOptions(eks.WithLinuxNodeGroup()), awskubernetes.WithAgentOptions(kubernetesagentparams.WithoutDualShipping(), kubernetesagentparams.WithHelmValues(values), kubernetesagentparams.WithOTelAgent(), kubernetesagentparams.WithOTelConfig(iaConfig))))) + e2e.Run(t, &iaUSTEKSTestSuite{}, e2e.WithProvisioner(awskubernetes.EKSProvisioner(awskubernetes.WithEKSOptions(eks.WithLinuxNodeGroup()), awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(values), kubernetesagentparams.WithOTelAgent(), kubernetesagentparams.WithOTelConfig(iaConfig))))) } func (s *iaUSTEKSTestSuite) SetupSuite() { diff --git a/test/new-e2e/tests/otel/otel-agent/infraattributes_test.go b/test/new-e2e/tests/otel/otel-agent/infraattributes_test.go index cf330ff1ba7ea..b0706f90e10ba 100644 --- a/test/new-e2e/tests/otel/otel-agent/infraattributes_test.go +++ b/test/new-e2e/tests/otel/otel-agent/infraattributes_test.go @@ -34,7 +34,7 @@ datadog: containerCollectUsingFiles: false ` t.Parallel() - e2e.Run(t, &iaTestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithoutDualShipping(), kubernetesagentparams.WithHelmValues(values), kubernetesagentparams.WithOTelAgent(), kubernetesagentparams.WithOTelConfig(iaConfig))))) + e2e.Run(t, &iaTestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(values), kubernetesagentparams.WithOTelAgent(), kubernetesagentparams.WithOTelConfig(iaConfig))))) } var iaParams = utils.IAParams{ diff --git a/test/new-e2e/tests/otel/otel-agent/minimal_test.go b/test/new-e2e/tests/otel/otel-agent/minimal_test.go index 47c0076ffce3a..9377c56fd514f 100644 --- a/test/new-e2e/tests/otel/otel-agent/minimal_test.go +++ b/test/new-e2e/tests/otel/otel-agent/minimal_test.go @@ -43,7 +43,7 @@ datadog: containerCollectUsingFiles: false ` t.Parallel() - e2e.Run(t, &minimalTestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithoutDualShipping(), kubernetesagentparams.WithHelmValues(values), kubernetesagentparams.WithOTelAgent(), kubernetesagentparams.WithOTelConfig(minimalConfig))))) + e2e.Run(t, &minimalTestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(values), kubernetesagentparams.WithOTelAgent(), kubernetesagentparams.WithOTelConfig(minimalConfig))))) } var minimalParams = utils.IAParams{ diff --git a/test/new-e2e/tests/otel/otel-agent/receive_resource_spans_v2_test.go b/test/new-e2e/tests/otel/otel-agent/receive_resource_spans_v2_test.go index d551b53b7e82b..aa9e8163e1664 100644 --- a/test/new-e2e/tests/otel/otel-agent/receive_resource_spans_v2_test.go +++ b/test/new-e2e/tests/otel/otel-agent/receive_resource_spans_v2_test.go @@ -36,7 +36,7 @@ agents: value: 'false' ` t.Parallel() - e2e.Run(t, &otelAgentSpanReceiverV2TestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithoutDualShipping(), kubernetesagentparams.WithHelmValues(values), kubernetesagentparams.WithOTelAgent(), kubernetesagentparams.WithOTelConfig(minimalConfig))))) + e2e.Run(t, &otelAgentSpanReceiverV2TestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(values), kubernetesagentparams.WithOTelAgent(), kubernetesagentparams.WithOTelConfig(minimalConfig))))) } func (s *otelAgentSpanReceiverV2TestSuite) SetupSuite() { diff --git a/test/new-e2e/tests/otel/otel-agent/sampling_test.go b/test/new-e2e/tests/otel/otel-agent/sampling_test.go index 98133826ee708..99f92bc32cc63 100644 --- a/test/new-e2e/tests/otel/otel-agent/sampling_test.go +++ b/test/new-e2e/tests/otel/otel-agent/sampling_test.go @@ -27,7 +27,7 @@ var samplingConfig string func TestOTelAgentSampling(t *testing.T) { t.Parallel() - e2e.Run(t, &samplingTestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithoutDualShipping(), kubernetesagentparams.WithOTelAgent(), kubernetesagentparams.WithOTelConfig(samplingConfig))))) + e2e.Run(t, &samplingTestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithOTelAgent(), kubernetesagentparams.WithOTelConfig(samplingConfig))))) } func (s *samplingTestSuite) TestSampling() { diff --git a/test/new-e2e/tests/otel/otlp-ingest/operation_and_resource_name_logic_v2_test.go b/test/new-e2e/tests/otel/otlp-ingest/operation_and_resource_name_logic_v2_test.go index 8c3ef3508799a..89a30686706be 100644 --- a/test/new-e2e/tests/otel/otlp-ingest/operation_and_resource_name_logic_v2_test.go +++ b/test/new-e2e/tests/otel/otlp-ingest/operation_and_resource_name_logic_v2_test.go @@ -41,7 +41,7 @@ agents: value: 'enable_operation_and_resource_name_logic_v2' ` t.Parallel() - e2e.Run(t, &otlpIngestOpNameV2RecvrV1TestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithoutDualShipping(), kubernetesagentparams.WithHelmValues(values))))) + e2e.Run(t, &otlpIngestOpNameV2RecvrV1TestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(values))))) } func (s *otlpIngestOpNameV2RecvrV1TestSuite) SetupSuite() { @@ -78,7 +78,7 @@ agents: value: 'enable_operation_and_resource_name_logic_v2,enable_receive_resource_spans_v2' ` t.Parallel() - e2e.Run(t, &otlpIngestOpNameV2RecvrV2TestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithoutDualShipping(), kubernetesagentparams.WithHelmValues(values))))) + e2e.Run(t, &otlpIngestOpNameV2RecvrV2TestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(values))))) } func (s *otlpIngestOpNameV2RecvrV2TestSuite) SetupSuite() { @@ -117,7 +117,7 @@ agents: value: 'true' ` t.Parallel() - e2e.Run(t, &otlpIngestOpNameV2SpanAsResNameTestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithoutDualShipping(), kubernetesagentparams.WithHelmValues(values))))) + e2e.Run(t, &otlpIngestOpNameV2SpanAsResNameTestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(values))))) } func (s *otlpIngestOpNameV2SpanAsResNameTestSuite) SetupSuite() { @@ -157,7 +157,7 @@ agents: ` t.Parallel() ts := &otlpIngestOpNameV2RemappingTestSuite{} - e2e.Run(t, ts, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithoutDualShipping(), kubernetesagentparams.WithHelmValues(values))))) + e2e.Run(t, ts, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(values))))) } func (s *otlpIngestOpNameV2RemappingTestSuite) SetupSuite() { diff --git a/test/new-e2e/tests/otel/otlp-ingest/pipelines_sampling_test.go b/test/new-e2e/tests/otel/otlp-ingest/pipelines_sampling_test.go index 0db1211c09749..62b882e4def47 100644 --- a/test/new-e2e/tests/otel/otlp-ingest/pipelines_sampling_test.go +++ b/test/new-e2e/tests/otel/otlp-ingest/pipelines_sampling_test.go @@ -46,7 +46,7 @@ agents: value: '50' ` t.Parallel() - e2e.Run(t, &otlpIngestSamplingTestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithoutDualShipping(), kubernetesagentparams.WithHelmValues(values))))) + e2e.Run(t, &otlpIngestSamplingTestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(values))))) } func (s *otlpIngestSamplingTestSuite) TestSampling() { diff --git a/test/new-e2e/tests/otel/otlp-ingest/pipelines_test.go b/test/new-e2e/tests/otel/otlp-ingest/pipelines_test.go index b91361b7e9866..eb1e879491051 100644 --- a/test/new-e2e/tests/otel/otlp-ingest/pipelines_test.go +++ b/test/new-e2e/tests/otel/otlp-ingest/pipelines_test.go @@ -43,7 +43,7 @@ agents: value: 'true' ` t.Parallel() - e2e.Run(t, &otlpIngestTestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithoutDualShipping(), kubernetesagentparams.WithHelmValues(values))))) + e2e.Run(t, &otlpIngestTestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(values))))) } var otlpIngestParams = utils.IAParams{ diff --git a/test/new-e2e/tests/otel/otlp-ingest/receive_resource_spans_v2_test.go b/test/new-e2e/tests/otel/otlp-ingest/receive_resource_spans_v2_test.go index dbe8642df94fd..5f83e4dba06cf 100644 --- a/test/new-e2e/tests/otel/otlp-ingest/receive_resource_spans_v2_test.go +++ b/test/new-e2e/tests/otel/otlp-ingest/receive_resource_spans_v2_test.go @@ -41,7 +41,7 @@ agents: value: 'enable_receive_resource_spans_v2' ` t.Parallel() - e2e.Run(t, &otlpIngestSpanReceiverV2TestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithoutDualShipping(), kubernetesagentparams.WithHelmValues(values))))) + e2e.Run(t, &otlpIngestSpanReceiverV2TestSuite{}, e2e.WithProvisioner(awskubernetes.KindProvisioner(awskubernetes.WithAgentOptions(kubernetesagentparams.WithHelmValues(values))))) } func (s *otlpIngestSpanReceiverV2TestSuite) SetupSuite() { From 22edfebf2aa1cc44aceff9da5b46f2fb185a5a53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lian=20Raimbault?= <161456554+CelianR@users.noreply.github.com> Date: Thu, 12 Dec 2024 04:50:41 -0500 Subject: [PATCH 153/303] Print worktree log to stderr (#32082) --- tasks/libs/common/worktree.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tasks/libs/common/worktree.py b/tasks/libs/common/worktree.py index 74dd5e04e4877..e8c9d740f07bc 100644 --- a/tasks/libs/common/worktree.py +++ b/tasks/libs/common/worktree.py @@ -5,6 +5,7 @@ """ import os +import sys from contextlib import contextmanager from pathlib import Path @@ -27,7 +28,7 @@ def init_env(ctx, branch: str | None = None): """ if not WORKTREE_DIRECTORY.is_dir(): - print(f'{color_message("Info", Color.BLUE)}: Cloning datadog agent into {WORKTREE_DIRECTORY}') + print(f'{color_message("Info", Color.BLUE)}: Cloning datadog agent into {WORKTREE_DIRECTORY}', file=sys.stderr) remote = ctx.run("git remote get-url origin", hide=True).stdout.strip() # Try to use this option to reduce cloning time if all( From 408926fdc126e1ade9040d16f7ab216ea98fd84e Mon Sep 17 00:00:00 2001 From: Raphael Gavache Date: Thu, 12 Dec 2024 11:31:48 +0100 Subject: [PATCH 154/303] [fleet] fix driver var check (#32075) --- pkg/fleet/installer/setup/djm/databricks.go | 2 +- test/new-e2e/tests/installer/script/databricks_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/fleet/installer/setup/djm/databricks.go b/pkg/fleet/installer/setup/djm/databricks.go index 0e6675b3aa2ae..21db9b4b7a934 100644 --- a/pkg/fleet/installer/setup/djm/databricks.go +++ b/pkg/fleet/installer/setup/djm/databricks.go @@ -60,7 +60,7 @@ func (ds *databricksSetup) setup() error { span, _ := tracer.SpanFromContext(ds.ctx) switch os.Getenv("DB_IS_DRIVER") { - case "true": + case "TRUE": span.SetTag("spark_node", "driver") return ds.setupDatabricksDriver() default: diff --git a/test/new-e2e/tests/installer/script/databricks_test.go b/test/new-e2e/tests/installer/script/databricks_test.go index 5ec2ad8b6001e..7195da6805295 100644 --- a/test/new-e2e/tests/installer/script/databricks_test.go +++ b/test/new-e2e/tests/installer/script/databricks_test.go @@ -34,7 +34,7 @@ func (s *installScriptDatabricksSuite) TestDatabricksWorkerInstallScript() { } func (s *installScriptDatabricksSuite) TestDatabricksDriverInstallScript() { - s.RunInstallScript(s.url, "DB_IS_DRIVER=true") + s.RunInstallScript(s.url, "DB_IS_DRIVER=TRUE") state := s.host.State() state.AssertDirExists("/opt/datadog-packages/datadog-agent/7.57.2-1", 0755, "dd-agent", "dd-agent") state.AssertSymlinkExists("/opt/datadog-packages/datadog-agent/stable", "/opt/datadog-packages/datadog-agent/7.57.2-1", "root", "root") From 28b37370144d20d72d7748e6207291ba962daccf Mon Sep 17 00:00:00 2001 From: Florent Clarret Date: Thu, 12 Dec 2024 12:37:13 +0100 Subject: [PATCH 155/303] Revert "[ASCII-2582] Add certificate generation and retrieval for IPC communications" (#32089) --- comp/api/authtoken/component.go | 7 +- .../authtoken/createandfetchimpl/authtoken.go | 12 -- .../createandfetchimpl/authtoken_test.go | 6 +- comp/api/authtoken/fetchonlyimpl/authtoken.go | 43 +---- .../authtoken/fetchonlyimpl/authtoken_test.go | 14 +- comp/api/authtoken/fetchonlyimpl/mock.go | 17 +- pkg/api/security/cert/cert_generator.go | 75 -------- pkg/api/security/cert/cert_generator_test.go | 71 ------- pkg/api/security/cert/cert_getter.go | 128 ------------- pkg/api/security/cert/cert_getter_test.go | 139 -------------- pkg/api/util/ipc_endpoint_test.go | 178 ++++++++---------- pkg/api/util/util.go | 126 +------------ pkg/config/setup/config.go | 2 - 13 files changed, 102 insertions(+), 716 deletions(-) delete mode 100644 pkg/api/security/cert/cert_generator.go delete mode 100644 pkg/api/security/cert/cert_generator_test.go delete mode 100644 pkg/api/security/cert/cert_getter.go delete mode 100644 pkg/api/security/cert/cert_getter_test.go diff --git a/comp/api/authtoken/component.go b/comp/api/authtoken/component.go index fbe0ef3558028..2aae4096f392d 100644 --- a/comp/api/authtoken/component.go +++ b/comp/api/authtoken/component.go @@ -9,12 +9,9 @@ package authtoken import ( - "crypto/tls" - - "go.uber.org/fx" - "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/optional" + "go.uber.org/fx" ) // team: agent-shared-components @@ -22,8 +19,6 @@ import ( // Component is the component type. type Component interface { Get() string - GetTLSClientConfig() *tls.Config - GetTLSServerConfig() *tls.Config } // NoneModule return a None optional type for authtoken.Component. diff --git a/comp/api/authtoken/createandfetchimpl/authtoken.go b/comp/api/authtoken/createandfetchimpl/authtoken.go index 8f5408083f49f..9afffdeff362d 100644 --- a/comp/api/authtoken/createandfetchimpl/authtoken.go +++ b/comp/api/authtoken/createandfetchimpl/authtoken.go @@ -8,8 +8,6 @@ package createandfetchimpl import ( - "crypto/tls" - "go.uber.org/fx" "github.com/DataDog/datadog-agent/comp/api/authtoken" @@ -51,13 +49,3 @@ func newAuthToken(deps dependencies) (authtoken.Component, error) { func (at *authToken) Get() string { return util.GetAuthToken() } - -// GetTLSServerConfig return a TLS configuration with the IPC certificate for http.Server -func (at *authToken) GetTLSClientConfig() *tls.Config { - return util.GetTLSClientConfig() -} - -// GetTLSServerConfig return a TLS configuration with the IPC certificate for http.Client -func (at *authToken) GetTLSServerConfig() *tls.Config { - return util.GetTLSServerConfig() -} diff --git a/comp/api/authtoken/createandfetchimpl/authtoken_test.go b/comp/api/authtoken/createandfetchimpl/authtoken_test.go index 51f2db29e1142..1eb9e11f6ba81 100644 --- a/comp/api/authtoken/createandfetchimpl/authtoken_test.go +++ b/comp/api/authtoken/createandfetchimpl/authtoken_test.go @@ -10,6 +10,8 @@ import ( "path/filepath" "testing" + "github.com/DataDog/datadog-agent/pkg/api/util" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.uber.org/fx" @@ -17,17 +19,13 @@ import ( "github.com/DataDog/datadog-agent/comp/core/config" log "github.com/DataDog/datadog-agent/comp/core/log/def" logmock "github.com/DataDog/datadog-agent/comp/core/log/mock" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) func TestGet(t *testing.T) { dir := t.TempDir() authPath := filepath.Join(dir, "auth_token") - ipcPath := filepath.Join(dir, "ipc_cert") overrides := map[string]any{ "auth_token_file_path": authPath, - "ipc_cert_file_path": ipcPath, } comp, err := newAuthToken( diff --git a/comp/api/authtoken/fetchonlyimpl/authtoken.go b/comp/api/authtoken/fetchonlyimpl/authtoken.go index f353bc3706c3d..ac07402b8c960 100644 --- a/comp/api/authtoken/fetchonlyimpl/authtoken.go +++ b/comp/api/authtoken/fetchonlyimpl/authtoken.go @@ -8,9 +8,6 @@ package fetchonlyimpl import ( - "crypto/tls" - "fmt" - "go.uber.org/fx" "github.com/DataDog/datadog-agent/comp/api/authtoken" @@ -29,8 +26,9 @@ func Module() fxutil.Module { } type authToken struct { - log log.Component - conf config.Component + log log.Component + conf config.Component + tokenLoaded bool } @@ -50,44 +48,17 @@ func newAuthToken(deps dependencies) authtoken.Component { } } -func (at *authToken) setToken() error { +// Get returns the session token +func (at *authToken) Get() string { if !at.tokenLoaded { // We try to load the auth_token until we succeed since it might be created at some point by another // process. if err := util.SetAuthToken(at.conf); err != nil { - return fmt.Errorf("could not load auth_token: %s", err) + at.log.Debugf("could not load auth_token: %s", err) + return "" } at.tokenLoaded = true } - return nil -} - -// Get returns the session token -func (at *authToken) Get() string { - if err := at.setToken(); err != nil { - at.log.Debugf("%s", err.Error()) - return "" - } return util.GetAuthToken() } - -// GetTLSClientConfig return a TLS configuration with the IPC certificate for http.Client -func (at *authToken) GetTLSClientConfig() *tls.Config { - if err := at.setToken(); err != nil { - at.log.Debugf("%s", err.Error()) - return nil - } - - return util.GetTLSClientConfig() -} - -// GetTLSServerConfig return a TLS configuration with the IPC certificate for http.Server -func (at *authToken) GetTLSServerConfig() *tls.Config { - if err := at.setToken(); err != nil { - at.log.Debugf("%s", err.Error()) - return nil - } - - return util.GetTLSServerConfig() -} diff --git a/comp/api/authtoken/fetchonlyimpl/authtoken_test.go b/comp/api/authtoken/fetchonlyimpl/authtoken_test.go index 4073ee0db7779..4492ab4ff4105 100644 --- a/comp/api/authtoken/fetchonlyimpl/authtoken_test.go +++ b/comp/api/authtoken/fetchonlyimpl/authtoken_test.go @@ -10,13 +10,11 @@ import ( "path/filepath" "testing" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.uber.org/fx" - "github.com/DataDog/datadog-agent/pkg/api/security/cert" - "github.com/DataDog/datadog-agent/pkg/util/fxutil" - "github.com/DataDog/datadog-agent/comp/core/config" log "github.com/DataDog/datadog-agent/comp/core/log/def" logmock "github.com/DataDog/datadog-agent/comp/core/log/mock" @@ -25,7 +23,6 @@ import ( func TestGet(t *testing.T) { dir := t.TempDir() authPath := filepath.Join(dir, "auth_token") - var cfg config.Component overrides := map[string]any{ "auth_token_file_path": authPath, } @@ -35,7 +32,6 @@ func TestGet(t *testing.T) { t, fx.Provide(func() log.Component { return logmock.New(t) }), config.MockModule(), - fx.Populate(&cfg), fx.Replace(config.MockParams{Overrides: overrides}), ), ).(*authToken) @@ -46,14 +42,6 @@ func TestGet(t *testing.T) { err := os.WriteFile(authPath, []byte("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), 0777) require.NoError(t, err) - // Should be empty because the cert/key weren't generated yet - assert.Empty(t, comp.Get()) - assert.False(t, comp.tokenLoaded) - - // generating IPC cert/key files - _, _, err = cert.CreateOrFetchAgentIPCCert(cfg) - require.NoError(t, err) - assert.Equal(t, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", comp.Get()) assert.True(t, comp.tokenLoaded) diff --git a/comp/api/authtoken/fetchonlyimpl/mock.go b/comp/api/authtoken/fetchonlyimpl/mock.go index 3fa24b25731aa..2dea209906a3c 100644 --- a/comp/api/authtoken/fetchonlyimpl/mock.go +++ b/comp/api/authtoken/fetchonlyimpl/mock.go @@ -8,12 +8,9 @@ package fetchonlyimpl import ( - "crypto/tls" - - "go.uber.org/fx" - authtokeninterface "github.com/DataDog/datadog-agent/comp/api/authtoken" "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "go.uber.org/fx" ) // MockModule defines the fx options for the mock component. @@ -31,18 +28,6 @@ func (fc *MockFetchOnly) Get() string { return "a string" } -// GetTLSClientConfig is a mock of the fetchonly GetTLSClientConfig function -func (fc *MockFetchOnly) GetTLSClientConfig() *tls.Config { - return &tls.Config{ - InsecureSkipVerify: true, - } -} - -// GetTLSServerConfig is a mock of the fetchonly GetTLSServerConfig function -func (fc *MockFetchOnly) GetTLSServerConfig() *tls.Config { - return &tls.Config{} -} - // NewMock returns a new fetch only authtoken mock func newMock() authtokeninterface.Component { return &MockFetchOnly{} diff --git a/pkg/api/security/cert/cert_generator.go b/pkg/api/security/cert/cert_generator.go deleted file mode 100644 index 46b9c1076c611..0000000000000 --- a/pkg/api/security/cert/cert_generator.go +++ /dev/null @@ -1,75 +0,0 @@ -// 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 cert provide useful functions to generate certificates -package cert - -import ( - "crypto/ecdsa" - "crypto/elliptic" - "crypto/rand" - "crypto/x509" - "crypto/x509/pkix" - "encoding/pem" - "fmt" - "math/big" - "net" - "time" -) - -func certTemplate() (*x509.Certificate, error) { - serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) - serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) - if err != nil { - return nil, fmt.Errorf("failed to generate serial number: %s", err) - } - - notBefore := time.Now() - // 50 years duration - notAfter := notBefore.Add(50 * 365 * 24 * time.Hour) - template := x509.Certificate{ - SerialNumber: serialNumber, - Subject: pkix.Name{ - Organization: []string{"Datadog, Inc."}, - }, - NotBefore: notBefore, - NotAfter: notAfter, - BasicConstraintsValid: true, - KeyUsage: x509.KeyUsageCertSign | x509.KeyUsageDigitalSignature | x509.KeyUsageCRLSign, - ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}, - IsCA: true, - IPAddresses: []net.IP{net.ParseIP("127.0.0.1"), net.ParseIP("::1")}, - DNSNames: []string{"localhost"}, - } - - return &template, nil -} - -func generateCertKeyPair() ([]byte, []byte, error) { - rootCertTmpl, err := certTemplate() - if err != nil { - return nil, nil, err - } - - rootKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) - if err != nil { - return nil, nil, fmt.Errorf("Unable to generate IPC private key: %v", err) - } - - certDER, err := x509.CreateCertificate(rand.Reader, rootCertTmpl, rootCertTmpl, &rootKey.PublicKey, rootKey) - if err != nil { - return nil, nil, err - } - - certPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: certDER}) - rawKey, err := x509.MarshalECPrivateKey(rootKey) - if err != nil { - return nil, nil, fmt.Errorf("Unable to marshall private key: %v", err) - } - - keyPEM := pem.EncodeToMemory(&pem.Block{Type: "EC PRIVATE KEY", Bytes: rawKey}) - - return certPEM, keyPEM, nil -} diff --git a/pkg/api/security/cert/cert_generator_test.go b/pkg/api/security/cert/cert_generator_test.go deleted file mode 100644 index 888eb28240a84..0000000000000 --- a/pkg/api/security/cert/cert_generator_test.go +++ /dev/null @@ -1,71 +0,0 @@ -// 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 cert - -import ( - "crypto/tls" - "crypto/x509" - "io" - "net/http" - "net/http/httptest" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestCertCommunication(t *testing.T) { - certPEM, keyPEM, err := generateCertKeyPair() - assert.NoError(t, err) - - // Load server certificate - serverCert, err := tls.X509KeyPair(certPEM, keyPEM) - assert.NoError(t, err) - - // Create a certificate pool with the generated certificate - certPool := x509.NewCertPool() - ok := certPool.AppendCertsFromPEM(certPEM) - assert.True(t, ok) - - // Create a TLS config for the server - serverTLSConfig := &tls.Config{ - Certificates: []tls.Certificate{serverCert}, - } - - // Create a TLS config for the client - clientTLSConfig := &tls.Config{ - RootCAs: certPool, - } - - expectedResult := []byte("hello word") - - // Create a HTTPS Server - s := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { - w.Write(expectedResult) - })) - - s.TLS = serverTLSConfig - s.StartTLS() - t.Cleanup(func() { - s.Close() - }) - - // Create a HTTPS Client - client := http.Client{ - Transport: &http.Transport{ - TLSClientConfig: clientTLSConfig, - }, - } - - // Try to communicate together - resp, err := client.Get(s.URL) - require.NoError(t, err) - defer resp.Body.Close() - - body, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, body, expectedResult) -} diff --git a/pkg/api/security/cert/cert_getter.go b/pkg/api/security/cert/cert_getter.go deleted file mode 100644 index 09edb10e1cf5e..0000000000000 --- a/pkg/api/security/cert/cert_getter.go +++ /dev/null @@ -1,128 +0,0 @@ -// 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 cert provide useful functions to generate certificates -package cert - -import ( - "bytes" - "encoding/pem" - "fmt" - "os" - "path/filepath" - "runtime" - - configModel "github.com/DataDog/datadog-agent/pkg/config/model" - "github.com/DataDog/datadog-agent/pkg/util/filesystem" - "github.com/DataDog/datadog-agent/pkg/util/log" -) - -// defaultCertFileName represent the default IPC certificate root name (without .cert or .key) -const defaultCertFileName = "ipc_cert.pem" - -// GetCertFilepath returns the path to the IPC cert file. -func GetCertFilepath(config configModel.Reader) string { - if configPath := config.GetString("ipc_cert_file_path"); configPath != "" { - return configPath - } - // Since customers who set the "auth_token_file_path" configuration likely prefer to avoid writing it next to the configuration file, - // we should follow this behavior for the cert/key generation as well to minimize the risk of disrupting IPC functionality. - if config.GetString("auth_token_file_path") != "" { - dest := filepath.Join(filepath.Dir(config.GetString("auth_token_file_path")), defaultCertFileName) - log.Warnf("IPC cert/key created or retrieved next to auth_token_file_path location: %v", dest) - return dest - } - return filepath.Join(filepath.Dir(config.ConfigFileUsed()), defaultCertFileName) -} - -// FetchAgentIPCCert return the IPC certificate and key from the path set in the configuration -// Requires that the config has been set up before calling -func FetchAgentIPCCert(config configModel.Reader) ([]byte, []byte, error) { - return fetchAgentIPCCert(config, false) -} - -// CreateOrFetchAgentIPCCert return the IPC certificate and key from the path set in the configuration or create if not present -// Requires that the config has been set up before calling -func CreateOrFetchAgentIPCCert(config configModel.Reader) ([]byte, []byte, error) { - return fetchAgentIPCCert(config, true) -} - -func fetchAgentIPCCert(config configModel.Reader, certCreationAllowed bool) ([]byte, []byte, error) { - certPath := GetCertFilepath(config) - - // Create cert&key if it doesn't exist and if permitted by calling func - if _, e := os.Stat(certPath); os.IsNotExist(e) && certCreationAllowed { - // print the caller to identify what is calling this function - if _, file, line, ok := runtime.Caller(2); ok { - log.Infof("[%s:%d] Creating a new IPC certificate", file, line) - } - - cert, key, err := generateCertKeyPair() - - if err != nil { - return nil, nil, err - } - - // Write the IPC cert/key in the FS (platform-specific) - e = saveIPCCertKey(cert, key, certPath) - if e != nil { - return nil, nil, fmt.Errorf("error writing IPC cert/key file on fs: %s", e) - } - log.Infof("Saved a new IPC certificate/key pair to %s", certPath) - - return cert, key, nil - } - - // Read the IPC certAndKey/key - certAndKey, e := os.ReadFile(certPath) - if e != nil { - return nil, nil, fmt.Errorf("unable to read authentication IPC cert/key files: %s", e.Error()) - } - - // Demultiplexing cert and key from file - var block *pem.Block - - block, rest := pem.Decode(certAndKey) - - if block == nil || block.Type != "CERTIFICATE" { - return nil, nil, log.Error("failed to decode PEM block containing certificate") - } - cert := pem.EncodeToMemory(block) - - block, _ = pem.Decode(rest) - - if block == nil || block.Type != "EC PRIVATE KEY" { - return nil, nil, log.Error("failed to decode PEM block containing key") - } - - key := pem.EncodeToMemory(block) - - return cert, key, nil -} - -// writes IPC cert/key files to a file with the same permissions as datadog.yaml -func saveIPCCertKey(cert, key []byte, dest string) (err error) { - log.Infof("Saving a new IPC certificate/key pair in %s", dest) - - perms, err := filesystem.NewPermission() - if err != nil { - return err - } - - // Concatenating cert and key together - certAndKey := bytes.Join([][]byte{cert, key}, []byte{}) - - if err = os.WriteFile(dest, certAndKey, 0o600); err != nil { - return err - } - - if err := perms.RestrictAccessToUser(dest); err != nil { - log.Errorf("Failed to set IPC cert permissions: %s", err) - return err - } - - log.Infof("Wrote IPC certificate/key pair in %s", dest) - return nil -} diff --git a/pkg/api/security/cert/cert_getter_test.go b/pkg/api/security/cert/cert_getter_test.go deleted file mode 100644 index 4915d2cb5d8b5..0000000000000 --- a/pkg/api/security/cert/cert_getter_test.go +++ /dev/null @@ -1,139 +0,0 @@ -// 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 cert - -import ( - "crypto/tls" - "crypto/x509" - "os" - "path/filepath" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - configmock "github.com/DataDog/datadog-agent/pkg/config/mock" - "github.com/DataDog/datadog-agent/pkg/config/model" -) - -func initMockConf(t *testing.T) (model.Config, string) { - testDir := t.TempDir() - - f, err := os.CreateTemp(testDir, "fake-datadog-yaml-") - require.NoError(t, err) - t.Cleanup(func() { - f.Close() - }) - - mockConfig := configmock.New(t) - mockConfig.SetConfigFile(f.Name()) - mockConfig.SetWithoutSource("auth_token", "") - - return mockConfig, filepath.Join(testDir, "auth_token") -} - -func TestCreateOrFetchAuthTokenValidGen(t *testing.T) { - config, _ := initMockConf(t) - ipccert, ipckey, err := CreateOrFetchAgentIPCCert(config) - require.NoError(t, err) - - certPool := x509.NewCertPool() - ok := certPool.AppendCertsFromPEM(ipccert) - assert.True(t, ok) - - _, err = tls.X509KeyPair(ipccert, ipckey) - assert.NoError(t, err) -} - -func TestFetchAuthToken(t *testing.T) { - config, _ := initMockConf(t) - - // Trying to fetch before create cert: must fail - _, _, err := FetchAgentIPCCert(config) - require.Error(t, err) - - // Creating a cert - ipcCert, ipcKey, err := CreateOrFetchAgentIPCCert(config) - require.NoError(t, err) - - certPool := x509.NewCertPool() - ok := certPool.AppendCertsFromPEM(ipcCert) - assert.True(t, ok) - - _, err = tls.X509KeyPair(ipcCert, ipcKey) - assert.NoError(t, err) - - // Trying to fetch after creating cert: must succeed - fetchedCert, fetchedKey, err := FetchAgentIPCCert(config) - require.NoError(t, err) - require.Equal(t, string(ipcCert), string(fetchedCert)) - require.Equal(t, string(ipcKey), string(fetchedKey)) -} - -func TestFetchAuthTokenWithAuthTokenFilePath(t *testing.T) { - config, _ := initMockConf(t) - - // Setting custom auth_token filepath - dname, err := os.MkdirTemp("", "auth_token_dir") - require.NoError(t, err) - config.SetWithoutSource("auth_token_file_path", filepath.Join(dname, "auth_token")) - - // Creating a cert - ipcCert, ipcKey, err := CreateOrFetchAgentIPCCert(config) - require.NoError(t, err) - - certPool := x509.NewCertPool() - ok := certPool.AppendCertsFromPEM(ipcCert) - assert.True(t, ok) - - _, err = tls.X509KeyPair(ipcCert, ipcKey) - assert.NoError(t, err) - - // Checking that the cert have been created next to the auth_token_file path - _, err = os.Stat(filepath.Join(dname, defaultCertFileName)) - require.NoError(t, err) - - // Trying to fetch after creating cert: must succeed - fetchedCert, fetchedKey, err := FetchAgentIPCCert(config) - require.NoError(t, err) - require.Equal(t, string(ipcCert), string(fetchedCert)) - require.Equal(t, string(ipcKey), string(fetchedKey)) -} - -func TestFetchAuthTokenWithIPCCertFilePath(t *testing.T) { - config, _ := initMockConf(t) - - // Setting custom auth_token filepath - authTokenDirName, err := os.MkdirTemp("", "auth_token_dir") - require.NoError(t, err) - config.SetWithoutSource("auth_token_file_path", filepath.Join(authTokenDirName, "custom_auth_token")) - - // Setting custom IPC cert filepath - ipcDirName, err := os.MkdirTemp("", "ipc_cert_dir") - require.NoError(t, err) - config.SetWithoutSource("ipc_cert_file_path", filepath.Join(ipcDirName, "custom_ipc_cert")) - - // Creating a cert - ipcCert, ipcKey, err := CreateOrFetchAgentIPCCert(config) - require.NoError(t, err) - - certPool := x509.NewCertPool() - ok := certPool.AppendCertsFromPEM(ipcCert) - assert.True(t, ok) - - _, err = tls.X509KeyPair(ipcCert, ipcKey) - assert.NoError(t, err) - - // Checking that the cert have been created at the custom IPC cert filepath - _, err = os.Stat(filepath.Join(ipcDirName, "custom_ipc_cert")) - require.NoError(t, err) - - // Trying to fetch after creating cert: must succeed - fetchedCert, fetchedKey, err := FetchAgentIPCCert(config) - require.NoError(t, err) - require.Equal(t, string(ipcCert), string(fetchedCert)) - require.Equal(t, string(ipcKey), string(fetchedKey)) -} diff --git a/pkg/api/util/ipc_endpoint_test.go b/pkg/api/util/ipc_endpoint_test.go index 5f2be0a513062..26df3f8ce7205 100644 --- a/pkg/api/util/ipc_endpoint_test.go +++ b/pkg/api/util/ipc_endpoint_test.go @@ -17,108 +17,96 @@ import ( "testing" "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "github.com/stretchr/testify/suite" configmock "github.com/DataDog/datadog-agent/pkg/config/mock" pkgconfigmodel "github.com/DataDog/datadog-agent/pkg/config/model" ) -type IPCEndpointTestSuite struct { - suite.Suite - conf pkgconfigmodel.Config -} - -func TestIPCEndpointTestSuite(t *testing.T) { - // cleaning auth_token and cert globals to be able initialize again the authToken and IPC cert - token = "" - dcaToken = "" - clientTLSConfig = nil - serverTLSConfig = nil - - // creating test suite - testSuite := new(IPCEndpointTestSuite) - - // simulating a normal startup of Agent with auth_token and cert generation - testSuite.conf = configmock.New(t) +func createConfig(t *testing.T, ts *httptest.Server) pkgconfigmodel.Config { + conf := configmock.New(t) // create a fake auth token authTokenFile, err := os.CreateTemp("", "") - require.NoError(t, err) + assert.NoError(t, err) authTokenPath := authTokenFile.Name() os.WriteFile(authTokenPath, []byte("0123456789abcdef0123456789abcdef"), 0640) - testSuite.conf.Set("auth_token_file_path", authTokenPath, pkgconfigmodel.SourceAgentRuntime) - - // use the cert in the httptest server - CreateAndSetAuthToken(testSuite.conf) - - suite.Run(t, testSuite) -} - -func (suite *IPCEndpointTestSuite) setTestServerAndConfig(t *testing.T, ts *httptest.Server, isHTTPS bool) { - if isHTTPS { - ts.TLS = GetTLSServerConfig() - ts.StartTLS() - } else { - ts.Start() - } - // use the httptest server as the CMD_API addr, err := url.Parse(ts.URL) - require.NoError(t, err) + assert.NoError(t, err) localHost, localPort, _ := net.SplitHostPort(addr.Host) - suite.conf.Set("cmd_host", localHost, pkgconfigmodel.SourceAgentRuntime) - suite.conf.Set("cmd_port", localPort, pkgconfigmodel.SourceAgentRuntime) + + // set minimal configuration that IPCEndpoint needs + conf.Set("auth_token_file_path", authTokenPath, pkgconfigmodel.SourceAgentRuntime) + conf.Set("cmd_host", localHost, pkgconfigmodel.SourceAgentRuntime) + conf.Set("cmd_port", localPort, pkgconfigmodel.SourceAgentRuntime) + + return conf } -func (suite *IPCEndpointTestSuite) TestNewIPCEndpoint() { - t := suite.T() +func TestNewIPCEndpoint(t *testing.T) { + conf := configmock.New(t) + + // create a fake auth token + authTokenFile, err := os.CreateTemp("", "") + assert.NoError(t, err) + authTokenPath := authTokenFile.Name() + os.WriteFile(authTokenPath, []byte("0123456789abcdef0123456789abcdef"), 0640) // set minimal configuration that IPCEndpoint needs - suite.conf.Set("cmd_host", "localhost", pkgconfigmodel.SourceAgentRuntime) - suite.conf.Set("cmd_port", "6789", pkgconfigmodel.SourceAgentRuntime) + conf.Set("auth_token_file_path", authTokenPath, pkgconfigmodel.SourceAgentRuntime) + conf.Set("cmd_host", "localhost", pkgconfigmodel.SourceAgentRuntime) + conf.Set("cmd_port", "6789", pkgconfigmodel.SourceAgentRuntime) // test the endpoint construction - end, err := NewIPCEndpoint(suite.conf, "test/api") + end, err := NewIPCEndpoint(conf, "test/api") assert.NoError(t, err) assert.Equal(t, end.target.String(), "https://localhost:6789/test/api") } -func (suite *IPCEndpointTestSuite) TestNewIPCEndpointWithCloseConnection() { - t := suite.T() +func TestNewIPCEndpointWithCloseConnection(t *testing.T) { + conf := configmock.New(t) + + // create a fake auth token + authTokenFile, err := os.CreateTemp("", "") + assert.NoError(t, err) + authTokenPath := authTokenFile.Name() + os.WriteFile(authTokenPath, []byte("0123456789abcdef0123456789abcdef"), 0640) + + // set minimal configuration that IPCEndpoint needs + conf.Set("auth_token_file_path", authTokenPath, pkgconfigmodel.SourceAgentRuntime) + conf.Set("cmd_host", "localhost", pkgconfigmodel.SourceAgentRuntime) + conf.Set("cmd_port", "6789", pkgconfigmodel.SourceAgentRuntime) // test constructing with the CloseConnection option - end, err := NewIPCEndpoint(suite.conf, "test/api", WithCloseConnection(true)) - require.NoError(t, err) + end, err := NewIPCEndpoint(conf, "test/api", WithCloseConnection(true)) + assert.NoError(t, err) assert.True(t, end.closeConn) } -func (suite *IPCEndpointTestSuite) TestIPCEndpointDoGet() { - t := suite.T() +func TestIPCEndpointDoGet(t *testing.T) { gotURL := "" - ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { gotURL = r.URL.String() _, _ = io.ReadAll(r.Body) w.Write([]byte("ok")) })) defer ts.Close() - suite.setTestServerAndConfig(t, ts, true) - end, err := NewIPCEndpoint(suite.conf, "test/api") + conf := createConfig(t, ts) + end, err := NewIPCEndpoint(conf, "test/api") assert.NoError(t, err) // test that DoGet will hit the endpoint url res, err := end.DoGet() - require.NoError(t, err) + assert.NoError(t, err) assert.Equal(t, res, []byte("ok")) assert.Equal(t, gotURL, "/test/api") } -func (suite *IPCEndpointTestSuite) TestIPCEndpointGetWithHTTPClientAndNonTLS() { - t := suite.T() +func TestIPCEndpointGetWithHTTPClientAndNonTLS(t *testing.T) { // non-http server gotURL := "" - ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { gotURL = r.URL.String() _, _ = io.ReadAll(r.Body) w.Write([]byte("ok")) @@ -126,112 +114,106 @@ func (suite *IPCEndpointTestSuite) TestIPCEndpointGetWithHTTPClientAndNonTLS() { defer ts.Close() // create non-TLS client and use the "http" protocol - suite.setTestServerAndConfig(t, ts, false) client := http.Client{} - end, err := NewIPCEndpoint(suite.conf, "test/api", WithHTTPClient(&client), WithURLScheme("http")) + conf := createConfig(t, ts) + end, err := NewIPCEndpoint(conf, "test/api", WithHTTPClient(&client), WithURLScheme("http")) assert.NoError(t, err) // test that DoGet will hit the endpoint url res, err := end.DoGet() - require.NoError(t, err) + assert.NoError(t, err) assert.Equal(t, res, []byte("ok")) assert.Equal(t, gotURL, "/test/api") } -func (suite *IPCEndpointTestSuite) TestIPCEndpointGetWithValues() { - t := suite.T() +func TestIPCEndpointGetWithValues(t *testing.T) { gotURL := "" - ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { gotURL = r.URL.String() _, _ = io.ReadAll(r.Body) w.Write([]byte("ok")) })) defer ts.Close() - suite.setTestServerAndConfig(t, ts, true) + conf := createConfig(t, ts) // set url values for GET request v := url.Values{} v.Set("verbose", "true") // test construction with option for url.Values - end, err := NewIPCEndpoint(suite.conf, "test/api") + end, err := NewIPCEndpoint(conf, "test/api") assert.NoError(t, err) // test that DoGet will use query parameters from the url.Values res, err := end.DoGet(WithValues(v)) - require.NoError(t, err) + assert.NoError(t, err) assert.Equal(t, res, []byte("ok")) assert.Equal(t, gotURL, "/test/api?verbose=true") } -func (suite *IPCEndpointTestSuite) TestIPCEndpointGetWithHostAndPort() { - t := suite.T() - ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { +func TestIPCEndpointGetWithHostAndPort(t *testing.T) { + ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, _ = io.ReadAll(r.Body) w.Write([]byte("ok")) })) defer ts.Close() - suite.setTestServerAndConfig(t, ts, true) + conf := createConfig(t, ts) // modify the config so that it uses a different setting for the cmd_host - suite.conf.Set("process_config.cmd_host", "127.0.0.1", pkgconfigmodel.SourceAgentRuntime) + conf.Set("process_config.cmd_host", "127.0.0.1", pkgconfigmodel.SourceAgentRuntime) // test construction with alternate values for the host and port - end, err := NewIPCEndpoint(suite.conf, "test/api", WithHostAndPort(suite.conf.GetString("process_config.cmd_host"), suite.conf.GetInt("cmd_port"))) + end, err := NewIPCEndpoint(conf, "test/api", WithHostAndPort(conf.GetString("process_config.cmd_host"), conf.GetInt("cmd_port"))) assert.NoError(t, err) // test that host provided by WithHostAndPort is used for the endpoint res, err := end.DoGet() - require.NoError(t, err) + assert.NoError(t, err) assert.Equal(t, res, []byte("ok")) - assert.Equal(t, end.target.Host, fmt.Sprintf("127.0.0.1:%d", suite.conf.GetInt("cmd_port"))) + assert.Equal(t, end.target.Host, fmt.Sprintf("127.0.0.1:%d", conf.GetInt("cmd_port"))) } -func (suite *IPCEndpointTestSuite) TestIPCEndpointDeprecatedIPCAddress() { - t := suite.T() - ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { +func TestIPCEndpointDeprecatedIPCAddress(t *testing.T) { + ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, _ = io.ReadAll(r.Body) w.Write([]byte("ok")) })) defer ts.Close() - suite.setTestServerAndConfig(t, ts, true) + conf := createConfig(t, ts) // Use the deprecated (but still supported) option "ipc_address" - suite.conf.UnsetForSource("cmd_host", pkgconfigmodel.SourceAgentRuntime) - suite.conf.Set("ipc_address", "127.0.0.1", pkgconfigmodel.SourceAgentRuntime) - defer suite.conf.UnsetForSource("ipc_address", pkgconfigmodel.SourceAgentRuntime) + conf.UnsetForSource("cmd_host", pkgconfigmodel.SourceAgentRuntime) + conf.Set("ipc_address", "127.0.0.1", pkgconfigmodel.SourceAgentRuntime) // test construction, uses ipc_address instead of cmd_host - end, err := NewIPCEndpoint(suite.conf, "test/api") + end, err := NewIPCEndpoint(conf, "test/api") assert.NoError(t, err) // test that host provided by "ipc_address" is used for the endpoint res, err := end.DoGet() - require.NoError(t, err) + assert.NoError(t, err) assert.Equal(t, res, []byte("ok")) - assert.Equal(t, end.target.Host, fmt.Sprintf("127.0.0.1:%d", suite.conf.GetInt("cmd_port"))) + assert.Equal(t, end.target.Host, fmt.Sprintf("127.0.0.1:%d", conf.GetInt("cmd_port"))) } -func (suite *IPCEndpointTestSuite) TestIPCEndpointErrorText() { - t := suite.T() - ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { +func TestIPCEndpointErrorText(t *testing.T) { + ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(400) w.Write([]byte("bad request")) })) defer ts.Close() - suite.setTestServerAndConfig(t, ts, true) - end, err := NewIPCEndpoint(suite.conf, "test/api") - require.NoError(t, err) + conf := createConfig(t, ts) + end, err := NewIPCEndpoint(conf, "test/api") + assert.NoError(t, err) // test that error is returned by the endpoint _, err = end.DoGet() - require.Error(t, err) + assert.Error(t, err) } -func (suite *IPCEndpointTestSuite) TestIPCEndpointErrorMap() { - t := suite.T() - ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { +func TestIPCEndpointErrorMap(t *testing.T) { + ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(400) data, _ := json.Marshal(map[string]string{ "error": "something went wrong", @@ -240,12 +222,12 @@ func (suite *IPCEndpointTestSuite) TestIPCEndpointErrorMap() { })) defer ts.Close() - suite.setTestServerAndConfig(t, ts, true) - end, err := NewIPCEndpoint(suite.conf, "test/api") - require.NoError(t, err) + conf := createConfig(t, ts) + end, err := NewIPCEndpoint(conf, "test/api") + assert.NoError(t, err) // test that error gets unwrapped from the errmap _, err = end.DoGet() - require.Error(t, err) + assert.Error(t, err) assert.Equal(t, err.Error(), "something went wrong") } diff --git a/pkg/api/util/util.go b/pkg/api/util/util.go index b22c2e7b04ad0..6aece9c03c648 100644 --- a/pkg/api/util/util.go +++ b/pkg/api/util/util.go @@ -8,138 +8,52 @@ package util import ( "crypto/subtle" - "crypto/tls" - "crypto/x509" "fmt" "net" "net/http" "strings" "sync" - pkgtoken "github.com/DataDog/datadog-agent/pkg/api/security" - "github.com/DataDog/datadog-agent/pkg/api/security/cert" + "github.com/DataDog/datadog-agent/pkg/api/security" "github.com/DataDog/datadog-agent/pkg/config/model" - "github.com/DataDog/datadog-agent/pkg/util/log" -) - -type source int - -const ( - uninitialized source = iota - setAuthToken - createAndSetAuthToken ) var ( tokenLock sync.RWMutex token string dcaToken string - // The clientTLSConfig is set by default with `InsecureSkipVerify: true`. - // This is intentionally done to allow the Agent to local Agent APIs when the clientTLSConfig is not yet initialized. - // However, this default value should be removed in the future. - // TODO: Monitor and fix the logs printed by GetTLSClientConfig and GetTLSServerConfig. - clientTLSConfig = &tls.Config{ - InsecureSkipVerify: true, - } - serverTLSConfig *tls.Config - initSource source ) -// SetAuthToken sets the session token and IPC certificate +// SetAuthToken sets the session token // Requires that the config has been set up before calling func SetAuthToken(config model.Reader) error { tokenLock.Lock() defer tokenLock.Unlock() // Noop if token is already set - if initSource != uninitialized { + if token != "" { return nil } var err error - token, err = pkgtoken.FetchAuthToken(config) - if err != nil { - return err - } - ipccert, ipckey, err := cert.FetchAgentIPCCert(config) - if err != nil { - return err - } - - certPool := x509.NewCertPool() - if ok := certPool.AppendCertsFromPEM(ipccert); !ok { - return fmt.Errorf("unable to use cert for creating CertPool") - } - - clientTLSConfig = &tls.Config{ - RootCAs: certPool, - } - - tlsCert, err := tls.X509KeyPair(ipccert, ipckey) - if err != nil { - return err - } - serverTLSConfig = &tls.Config{ - Certificates: []tls.Certificate{tlsCert}, - } - - initSource = setAuthToken - - return nil + token, err = security.FetchAuthToken(config) + return err } -// CreateAndSetAuthToken creates and sets the authorization token and IPC certificate +// CreateAndSetAuthToken creates and sets the authorization token // Requires that the config has been set up before calling func CreateAndSetAuthToken(config model.Reader) error { tokenLock.Lock() defer tokenLock.Unlock() // Noop if token is already set - switch initSource { - case setAuthToken: - log.Infof("function CreateAndSetAuthToken was called after SetAuthToken was called") - return nil - case createAndSetAuthToken: + if token != "" { return nil } var err error - token, err = pkgtoken.CreateOrFetchToken(config) - if err != nil { - return err - } - ipccert, ipckey, err := cert.CreateOrFetchAgentIPCCert(config) - if err != nil { - return err - } - - certPool := x509.NewCertPool() - if ok := certPool.AppendCertsFromPEM(ipccert); !ok { - return fmt.Errorf("Unable to generate certPool from PERM IPC cert") - } - - clientTLSConfig = &tls.Config{ - RootCAs: certPool, - } - - tlsCert, err := tls.X509KeyPair(ipccert, ipckey) - if err != nil { - return fmt.Errorf("Unable to generate x509 cert from PERM IPC cert and key") - } - serverTLSConfig = &tls.Config{ - Certificates: []tls.Certificate{tlsCert}, - } - - initSource = createAndSetAuthToken - - return nil -} - -// IsInitialized return true if the auth_token and IPC cert/key pair have been initialized with SetAuthToken or CreateAndSetAuthToken functions -func IsInitialized() bool { - tokenLock.RLock() - defer tokenLock.Unlock() - return initSource != uninitialized + token, err = security.CreateOrFetchToken(config) + return err } // GetAuthToken gets the session token @@ -149,26 +63,6 @@ func GetAuthToken() string { return token } -// GetTLSClientConfig gets the certificate and key used for IPC -func GetTLSClientConfig() *tls.Config { - tokenLock.RLock() - defer tokenLock.RUnlock() - if initSource == uninitialized { - log.Errorf("GetTLSClientConfig was called before being initialized (through SetAuthToken or CreateAndSetAuthToken function)") - } - return clientTLSConfig.Clone() -} - -// GetTLSServerConfig gets the certificate and key used for IPC -func GetTLSServerConfig() *tls.Config { - tokenLock.RLock() - defer tokenLock.RUnlock() - if initSource == uninitialized { - log.Errorf("GetTLSServerConfig was called before being initialized (through SetAuthToken or CreateAndSetAuthToken function)") - } - return serverTLSConfig.Clone() -} - // InitDCAAuthToken initialize the session token for the Cluster Agent based on config options // Requires that the config has been set up before calling func InitDCAAuthToken(config model.Reader) error { @@ -181,7 +75,7 @@ func InitDCAAuthToken(config model.Reader) error { } var err error - dcaToken, err = pkgtoken.CreateOrGetClusterAgentAuthToken(config) + dcaToken, err = security.CreateOrGetClusterAgentAuthToken(config) return err } diff --git a/pkg/config/setup/config.go b/pkg/config/setup/config.go index 66942a316486e..da2fb45d704bb 100644 --- a/pkg/config/setup/config.go +++ b/pkg/config/setup/config.go @@ -1093,8 +1093,6 @@ func agent(config pkgconfigmodel.Setup) { config.BindEnvAndSetDefault("check_runners", int64(4)) config.BindEnvAndSetDefault("check_cancel_timeout", 500*time.Millisecond) config.BindEnvAndSetDefault("auth_token_file_path", "") - // used to override the path where the IPC cert/key files are stored/retrieved - config.BindEnvAndSetDefault("ipc_cert_file_path", "") config.BindEnv("bind_host") config.BindEnvAndSetDefault("health_port", int64(0)) config.BindEnvAndSetDefault("disable_py3_validation", false) From ba08dfcc0bb4b569fc5a59e65652b46eeeba42a4 Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Thu, 12 Dec 2024 12:43:11 +0100 Subject: [PATCH 156/303] bump github.com/shirou/gopsutil to v4 (#31982) --- .../subcommands/compliance/command.go | 2 +- comp/agent/autoexit/autoexitimpl/manager.go | 2 +- comp/api/authtoken/go.mod | 4 ++-- comp/api/authtoken/go.sum | 10 ++++------ comp/core/config/go.mod | 4 ++-- comp/core/config/go.sum | 10 ++++------ comp/core/log/impl-trace/go.mod | 4 ++-- comp/core/log/impl-trace/go.sum | 10 ++++------ comp/core/log/impl/go.mod | 4 ++-- comp/core/log/impl/go.sum | 10 ++++------ comp/core/log/mock/go.sum | 8 ++++---- comp/core/status/statusimpl/go.mod | 4 ++-- comp/core/status/statusimpl/go.sum | 10 ++++------ .../listeners/ratelimit/host_memory_usage.go | 2 +- comp/forwarder/defaultforwarder/go.mod | 4 ++-- comp/forwarder/defaultforwarder/go.sum | 10 ++++------ .../orchestrator/orchestratorinterface/go.mod | 4 ++-- .../orchestrator/orchestratorinterface/go.sum | 10 ++++------ comp/logs/agent/config/go.mod | 4 ++-- comp/logs/agent/config/go.sum | 10 ++++------ comp/metadata/host/hostimpl/utils/host_nix.go | 4 ++-- .../host/hostimpl/utils/host_nix_test.go | 4 ++-- comp/otelcol/converter/impl/go.mod | 4 ++-- comp/otelcol/converter/impl/go.sum | 10 ++++------ comp/otelcol/ddflareextension/impl/go.mod | 2 -- comp/otelcol/logsagentpipeline/go.mod | 4 ++-- comp/otelcol/logsagentpipeline/go.sum | 10 ++++------ .../logsagentpipelineimpl/go.mod | 4 ++-- .../logsagentpipelineimpl/go.sum | 10 ++++------ .../components/exporter/datadogexporter/go.mod | 4 ++-- .../components/exporter/datadogexporter/go.sum | 10 ++++------ .../exporter/logsagentexporter/go.mod | 4 ++-- .../exporter/logsagentexporter/go.sum | 10 ++++------ .../exporter/serializerexporter/go.mod | 4 ++-- .../exporter/serializerexporter/go.sum | 10 ++++------ .../otlp/components/statsprocessor/go.mod | 4 ++-- .../otlp/components/statsprocessor/go.sum | 10 ++++------ comp/otelcol/otlp/testutil/go.mod | 4 ++-- comp/otelcol/otlp/testutil/go.sum | 10 ++++------ comp/serializer/compression/go.mod | 4 ++-- comp/serializer/compression/go.sum | 10 ++++------ go.mod | 6 ++++-- pkg/api/go.mod | 4 ++-- pkg/api/go.sum | 10 ++++------ .../servicediscovery/module/comm_test.go | 2 +- .../corechecks/servicediscovery/module/envs.go | 2 +- .../servicediscovery/module/envs_test.go | 2 +- .../servicediscovery/module/impl_linux.go | 2 +- .../servicediscovery/module/impl_linux_test.go | 2 +- .../corechecks/servicediscovery/usm/ruby.go | 2 +- pkg/compliance/agent.go | 2 +- pkg/compliance/dbconfig/loader.go | 2 +- pkg/compliance/dbconfig/loader_test.go | 2 +- pkg/compliance/k8sconfig/loader.go | 2 +- pkg/compliance/resolver.go | 2 +- pkg/config/env/go.mod | 3 ++- pkg/config/env/go.sum | 6 ++++-- pkg/config/mock/go.mod | 4 ++-- pkg/config/mock/go.sum | 10 ++++------ pkg/config/remote/go.mod | 3 +-- pkg/config/remote/go.sum | 8 ++------ pkg/config/setup/go.mod | 4 ++-- pkg/config/setup/go.sum | 10 ++++------ pkg/config/utils/go.mod | 4 ++-- pkg/config/utils/go.sum | 10 ++++------ pkg/fleet/installer/packages/docker.go | 2 +- pkg/gohai/go.mod | 5 ++--- pkg/gohai/go.sum | 10 ++++------ pkg/gohai/processes/gops/process_info.go | 4 ++-- pkg/internaltelemetry/client.go | 2 +- pkg/logs/auditor/go.mod | 4 ++-- pkg/logs/auditor/go.sum | 10 ++++------ pkg/logs/client/go.mod | 4 ++-- pkg/logs/client/go.sum | 10 ++++------ pkg/logs/diagnostic/go.mod | 4 ++-- pkg/logs/diagnostic/go.sum | 10 ++++------ pkg/logs/message/go.mod | 4 ++-- pkg/logs/message/go.sum | 10 ++++------ pkg/logs/pipeline/go.mod | 4 ++-- pkg/logs/pipeline/go.sum | 10 ++++------ pkg/logs/processor/go.mod | 4 ++-- pkg/logs/processor/go.sum | 10 ++++------ pkg/logs/sds/go.mod | 4 ++-- pkg/logs/sds/go.sum | 10 ++++------ pkg/logs/sender/go.mod | 4 ++-- pkg/logs/sender/go.sum | 10 ++++------ pkg/logs/sources/go.mod | 4 ++-- pkg/logs/sources/go.sum | 10 ++++------ pkg/logs/util/testutils/go.mod | 4 ++-- pkg/logs/util/testutils/go.sum | 10 ++++------ pkg/metrics/go.mod | 4 ++-- pkg/metrics/go.sum | 10 ++++------ pkg/process/checks/process.go | 2 +- pkg/process/checks/process_common_test.go | 2 +- pkg/process/checks/process_nix.go | 2 +- pkg/process/checks/process_nix_test.go | 2 +- pkg/process/checks/process_rt.go | 2 +- pkg/process/checks/process_test.go | 2 +- pkg/process/checks/process_windows.go | 2 +- pkg/process/checks/process_windows_test.go | 2 +- pkg/process/checks/system_info.go | 4 ++-- pkg/process/checks/system_info_darwin.go | 4 ++-- pkg/process/checks/system_info_darwin_test.go | 2 +- .../procutil/process_windows_toolhelp.go | 2 +- pkg/sbom/collectors/host/host_wmi.go | 2 +- .../probe/monitors/runtime/runtime_monitor.go | 2 +- pkg/security/probe/probe_linux.go | 2 +- pkg/security/probe/process_killer_linux.go | 2 +- pkg/security/ptracer/proc.go | 2 +- pkg/security/resolvers/process/resolver_ebpf.go | 14 +++++++------- .../activity_tree/process_node_snapshot.go | 2 +- pkg/security/utils/numcpu.go | 2 +- pkg/security/utils/proc_common.go | 6 +++--- pkg/security/utils/proc_linux.go | 2 +- pkg/serializer/go.mod | 4 ++-- pkg/serializer/go.sum | 10 ++++------ pkg/trace/go.mod | 9 +++++---- pkg/trace/go.sum | 17 ----------------- pkg/trace/stats/oteltest/go.mod | 4 ++-- pkg/trace/stats/oteltest/go.sum | 10 ++++------ pkg/trace/watchdog/cpu.go | 2 +- pkg/util/filesystem/disk.go | 2 +- pkg/util/filesystem/go.mod | 3 ++- pkg/util/filesystem/go.sum | 6 ++++-- pkg/util/flavor/go.mod | 4 ++-- pkg/util/flavor/go.sum | 10 ++++------ pkg/util/grpc/go.mod | 4 ++-- pkg/util/grpc/go.sum | 10 ++++------ pkg/util/http/go.mod | 4 ++-- pkg/util/http/go.sum | 10 ++++------ pkg/util/ktime/resolver.go | 2 +- pkg/util/log/setup/go.mod | 4 ++-- pkg/util/log/setup/go.sum | 10 ++++------ pkg/util/process_file_stats_linux.go | 2 +- pkg/util/system/cpu_unix.go | 2 +- pkg/util/system/go.mod | 5 ++--- pkg/util/system/go.sum | 10 ++++------ pkg/util/uuid/go.mod | 5 ++--- pkg/util/uuid/go.sum | 10 ++++------ pkg/util/uuid/uuid_nix.go | 2 +- test/otel/go.mod | 4 ++-- test/otel/go.sum | 10 ++++------ 142 files changed, 340 insertions(+), 442 deletions(-) diff --git a/cmd/security-agent/subcommands/compliance/command.go b/cmd/security-agent/subcommands/compliance/command.go index d38285ee8d2b3..c6614a89232f7 100644 --- a/cmd/security-agent/subcommands/compliance/command.go +++ b/cmd/security-agent/subcommands/compliance/command.go @@ -14,7 +14,7 @@ import ( "path/filepath" "strings" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" "github.com/spf13/cobra" "go.uber.org/fx" diff --git a/comp/agent/autoexit/autoexitimpl/manager.go b/comp/agent/autoexit/autoexitimpl/manager.go index db71ad7c4e042..44089dd4538d0 100644 --- a/comp/agent/autoexit/autoexitimpl/manager.go +++ b/comp/agent/autoexit/autoexitimpl/manager.go @@ -14,7 +14,7 @@ import ( "github.com/DataDog/datadog-agent/comp/core/config" log "github.com/DataDog/datadog-agent/comp/core/log/def" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" ) const ( diff --git a/comp/api/authtoken/go.mod b/comp/api/authtoken/go.mod index 0d71335ec37a3..e727e718a6054 100644 --- a/comp/api/authtoken/go.mod +++ b/comp/api/authtoken/go.mod @@ -80,6 +80,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -93,8 +94,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/comp/api/authtoken/go.sum b/comp/api/authtoken/go.sum index 1441562d69bde..dc0ab4305d421 100644 --- a/comp/api/authtoken/go.sum +++ b/comp/api/authtoken/go.sum @@ -39,6 +39,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -169,12 +171,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/comp/core/config/go.mod b/comp/core/config/go.mod index f7a43ae0beee2..2d3997d7f778b 100644 --- a/comp/core/config/go.mod +++ b/comp/core/config/go.mod @@ -71,6 +71,7 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -89,8 +90,7 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.60.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/comp/core/config/go.sum b/comp/core/config/go.sum index 12326d3e1f9b6..72766499eff8d 100644 --- a/comp/core/config/go.sum +++ b/comp/core/config/go.sum @@ -40,6 +40,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -172,12 +174,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/comp/core/log/impl-trace/go.mod b/comp/core/log/impl-trace/go.mod index 5784f2a4cb400..bf2f0e158a0b0 100644 --- a/comp/core/log/impl-trace/go.mod +++ b/comp/core/log/impl-trace/go.mod @@ -80,6 +80,7 @@ require ( github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -93,8 +94,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/comp/core/log/impl-trace/go.sum b/comp/core/log/impl-trace/go.sum index 1441562d69bde..dc0ab4305d421 100644 --- a/comp/core/log/impl-trace/go.sum +++ b/comp/core/log/impl-trace/go.sum @@ -39,6 +39,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -169,12 +171,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/comp/core/log/impl/go.mod b/comp/core/log/impl/go.mod index ea5f5ddb29885..8ed4ca6c7fef9 100644 --- a/comp/core/log/impl/go.mod +++ b/comp/core/log/impl/go.mod @@ -70,6 +70,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -83,8 +84,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/comp/core/log/impl/go.sum b/comp/core/log/impl/go.sum index 1441562d69bde..dc0ab4305d421 100644 --- a/comp/core/log/impl/go.sum +++ b/comp/core/log/impl/go.sum @@ -39,6 +39,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -169,12 +171,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/comp/core/log/mock/go.sum b/comp/core/log/mock/go.sum index 1c7b17d164a5d..430d4ba766a61 100644 --- a/comp/core/log/mock/go.sum +++ b/comp/core/log/mock/go.sum @@ -34,6 +34,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -149,10 +151,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/comp/core/status/statusimpl/go.mod b/comp/core/status/statusimpl/go.mod index cfb7ac9182260..2f55879031d33 100644 --- a/comp/core/status/statusimpl/go.mod +++ b/comp/core/status/statusimpl/go.mod @@ -83,6 +83,7 @@ require ( github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dustin/go-humanize v1.0.1 // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fatih/color v1.18.0 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect @@ -99,8 +100,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/comp/core/status/statusimpl/go.sum b/comp/core/status/statusimpl/go.sum index 358c24ff26324..dba3ab3934aa2 100644 --- a/comp/core/status/statusimpl/go.sum +++ b/comp/core/status/statusimpl/go.sum @@ -41,6 +41,8 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= @@ -180,12 +182,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/comp/dogstatsd/listeners/ratelimit/host_memory_usage.go b/comp/dogstatsd/listeners/ratelimit/host_memory_usage.go index de42845d803f2..a70a1331b31aa 100644 --- a/comp/dogstatsd/listeners/ratelimit/host_memory_usage.go +++ b/comp/dogstatsd/listeners/ratelimit/host_memory_usage.go @@ -6,7 +6,7 @@ package ratelimit import ( - "github.com/shirou/gopsutil/v3/mem" + "github.com/shirou/gopsutil/v4/mem" ) var _ memoryUsage = (*hostMemoryUsage)(nil) diff --git a/comp/forwarder/defaultforwarder/go.mod b/comp/forwarder/defaultforwarder/go.mod index b3f2578ab6a84..41c6273f20aa8 100644 --- a/comp/forwarder/defaultforwarder/go.mod +++ b/comp/forwarder/defaultforwarder/go.mod @@ -107,6 +107,7 @@ require ( github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dustin/go-humanize v1.0.1 // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fatih/color v1.18.0 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect @@ -131,8 +132,7 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.60.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/comp/forwarder/defaultforwarder/go.sum b/comp/forwarder/defaultforwarder/go.sum index 9c26c44f1cda8..744cfff2ec136 100644 --- a/comp/forwarder/defaultforwarder/go.sum +++ b/comp/forwarder/defaultforwarder/go.sum @@ -40,6 +40,8 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= @@ -190,12 +192,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/comp/forwarder/orchestrator/orchestratorinterface/go.mod b/comp/forwarder/orchestrator/orchestratorinterface/go.mod index 501885a0c7b7b..29dcff0c8c429 100644 --- a/comp/forwarder/orchestrator/orchestratorinterface/go.mod +++ b/comp/forwarder/orchestrator/orchestratorinterface/go.mod @@ -109,6 +109,7 @@ require ( github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dustin/go-humanize v1.0.1 // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fatih/color v1.18.0 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect @@ -135,8 +136,7 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.60.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/comp/forwarder/orchestrator/orchestratorinterface/go.sum b/comp/forwarder/orchestrator/orchestratorinterface/go.sum index debd6cceb8b31..23a50467e927d 100644 --- a/comp/forwarder/orchestrator/orchestratorinterface/go.sum +++ b/comp/forwarder/orchestrator/orchestratorinterface/go.sum @@ -43,6 +43,8 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= @@ -195,12 +197,8 @@ github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/f github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/comp/logs/agent/config/go.mod b/comp/logs/agent/config/go.mod index da4be1701769d..1c98c4cbf92f8 100644 --- a/comp/logs/agent/config/go.mod +++ b/comp/logs/agent/config/go.mod @@ -72,6 +72,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -85,8 +86,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/comp/logs/agent/config/go.sum b/comp/logs/agent/config/go.sum index 1441562d69bde..dc0ab4305d421 100644 --- a/comp/logs/agent/config/go.sum +++ b/comp/logs/agent/config/go.sum @@ -39,6 +39,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -169,12 +171,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/comp/metadata/host/hostimpl/utils/host_nix.go b/comp/metadata/host/hostimpl/utils/host_nix.go index c78fc6098aa84..637b15c100ae8 100644 --- a/comp/metadata/host/hostimpl/utils/host_nix.go +++ b/comp/metadata/host/hostimpl/utils/host_nix.go @@ -10,8 +10,8 @@ package utils import ( "runtime" - "github.com/shirou/gopsutil/v3/cpu" - "github.com/shirou/gopsutil/v3/host" + "github.com/shirou/gopsutil/v4/cpu" + "github.com/shirou/gopsutil/v4/host" "github.com/DataDog/datadog-agent/pkg/collector/python" "github.com/DataDog/datadog-agent/pkg/util/cache" diff --git a/comp/metadata/host/hostimpl/utils/host_nix_test.go b/comp/metadata/host/hostimpl/utils/host_nix_test.go index 4eeb421827a75..ac5067f53e219 100644 --- a/comp/metadata/host/hostimpl/utils/host_nix_test.go +++ b/comp/metadata/host/hostimpl/utils/host_nix_test.go @@ -11,8 +11,8 @@ import ( "runtime" "testing" - "github.com/shirou/gopsutil/v3/cpu" - "github.com/shirou/gopsutil/v3/host" + "github.com/shirou/gopsutil/v4/cpu" + "github.com/shirou/gopsutil/v4/host" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/comp/otelcol/converter/impl/go.mod b/comp/otelcol/converter/impl/go.mod index b13dbe2c343f9..31c49f2e1381b 100644 --- a/comp/otelcol/converter/impl/go.mod +++ b/comp/otelcol/converter/impl/go.mod @@ -81,6 +81,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-viper/mapstructure/v2 v2.2.1 // indirect @@ -100,8 +101,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/comp/otelcol/converter/impl/go.sum b/comp/otelcol/converter/impl/go.sum index dd15ede05c8be..b97062bfa5313 100644 --- a/comp/otelcol/converter/impl/go.sum +++ b/comp/otelcol/converter/impl/go.sum @@ -39,6 +39,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -181,12 +183,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/comp/otelcol/ddflareextension/impl/go.mod b/comp/otelcol/ddflareextension/impl/go.mod index dd9308fb62aa6..6422371da2f2c 100644 --- a/comp/otelcol/ddflareextension/impl/go.mod +++ b/comp/otelcol/ddflareextension/impl/go.mod @@ -429,9 +429,7 @@ require ( github.com/rs/cors v1.11.1 // indirect github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 // indirect github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect github.com/shirou/gopsutil/v4 v4.24.11 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/comp/otelcol/logsagentpipeline/go.mod b/comp/otelcol/logsagentpipeline/go.mod index 4966bc8e9fbad..d3347ab6c6669 100644 --- a/comp/otelcol/logsagentpipeline/go.mod +++ b/comp/otelcol/logsagentpipeline/go.mod @@ -114,6 +114,7 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -136,8 +137,7 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.60.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/comp/otelcol/logsagentpipeline/go.sum b/comp/otelcol/logsagentpipeline/go.sum index 2046340fbb070..920238d6c8024 100644 --- a/comp/otelcol/logsagentpipeline/go.sum +++ b/comp/otelcol/logsagentpipeline/go.sum @@ -44,6 +44,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -186,12 +188,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod index 245d0eb4b48b0..e76cecb0f1e19 100644 --- a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod +++ b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod @@ -129,6 +129,7 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -151,8 +152,7 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.60.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum index 2046340fbb070..920238d6c8024 100644 --- a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum +++ b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum @@ -44,6 +44,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -186,12 +188,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod index 0cc920d4b5d13..f84cdc77b7d5d 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod @@ -220,6 +220,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fatih/color v1.18.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect @@ -276,8 +277,7 @@ require ( github.com/richardartoul/molecule v1.0.1-0.20240531184615-7ca0df43c0b3 // indirect github.com/rs/cors v1.11.1 // indirect github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum index 0b1fe883a8e59..f8b034bc6c73e 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum @@ -89,6 +89,8 @@ github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= @@ -322,12 +324,8 @@ github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbmfHkLguCE9laoZCUzEEpIZXA= github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod index 72c156cf15e0d..a1f756dc64c47 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod @@ -100,6 +100,7 @@ require ( github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fatih/color v1.18.0 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-logr/logr v1.4.2 // indirect @@ -124,8 +125,7 @@ require ( github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum index 908ead2935092..88d5e3656f78f 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum @@ -54,6 +54,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= @@ -215,12 +217,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod index ff05177cb587d..00bd83d7866ec 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod @@ -187,8 +187,6 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/richardartoul/molecule v1.0.1-0.20240531184615-7ca0df43c0b3 // indirect github.com/rs/cors v1.11.1 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect @@ -239,11 +237,13 @@ require ( ) require ( + github.com/ebitengine/purego v0.8.1 // indirect github.com/knadh/koanf/maps v0.1.1 // indirect github.com/knadh/koanf/providers/confmap v0.1.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect go.opentelemetry.io/collector/client v1.21.0 // indirect go.opentelemetry.io/collector/config/configauth v0.115.0 // indirect go.opentelemetry.io/collector/config/configcompression v1.21.0 // indirect diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum index 691529b929edd..03bd78609ead8 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum @@ -60,6 +60,8 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= @@ -271,12 +273,8 @@ github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWN github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/comp/otelcol/otlp/components/statsprocessor/go.mod b/comp/otelcol/otlp/components/statsprocessor/go.mod index 907edfd516589..9df46434c305c 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.mod +++ b/comp/otelcol/otlp/components/statsprocessor/go.mod @@ -52,6 +52,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect @@ -73,8 +74,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/tinylib/msgp v1.2.4 // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect diff --git a/comp/otelcol/otlp/components/statsprocessor/go.sum b/comp/otelcol/otlp/components/statsprocessor/go.sum index 520e6d9e0d851..d1dd6e5377312 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.sum +++ b/comp/otelcol/otlp/components/statsprocessor/go.sum @@ -34,6 +34,8 @@ github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -99,12 +101,8 @@ github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbmfHkLguCE9laoZCUzEEpIZXA= github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= diff --git a/comp/otelcol/otlp/testutil/go.mod b/comp/otelcol/otlp/testutil/go.mod index 4db266071873e..f93da83f2c03d 100644 --- a/comp/otelcol/otlp/testutil/go.mod +++ b/comp/otelcol/otlp/testutil/go.mod @@ -67,6 +67,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -84,8 +85,7 @@ require ( github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect diff --git a/comp/otelcol/otlp/testutil/go.sum b/comp/otelcol/otlp/testutil/go.sum index 4b7a189aa89a0..173f120daf80f 100644 --- a/comp/otelcol/otlp/testutil/go.sum +++ b/comp/otelcol/otlp/testutil/go.sum @@ -44,6 +44,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -187,12 +189,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/comp/serializer/compression/go.mod b/comp/serializer/compression/go.mod index 2fd30c52fb34f..a96150a98b2c6 100644 --- a/comp/serializer/compression/go.mod +++ b/comp/serializer/compression/go.mod @@ -67,6 +67,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -80,8 +81,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/comp/serializer/compression/go.sum b/comp/serializer/compression/go.sum index c969810bfb058..82cfdd5791b99 100644 --- a/comp/serializer/compression/go.sum +++ b/comp/serializer/compression/go.sum @@ -41,6 +41,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -171,12 +173,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/go.mod b/go.mod index 1d48e947979d0..510771137b673 100644 --- a/go.mod +++ b/go.mod @@ -615,7 +615,10 @@ require ( go.opentelemetry.io/collector/config/configtelemetry v0.115.0 ) -require go.opentelemetry.io/collector/component/componenttest v0.115.0 +require ( + github.com/shirou/gopsutil/v4 v4.24.11 + go.opentelemetry.io/collector/component/componenttest v0.115.0 +) require ( go.opentelemetry.io/collector/extension/extensiontest v0.115.0 // indirect @@ -972,7 +975,6 @@ require ( github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 // indirect - github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/signalfx/sapm-proto v0.17.0 // indirect github.com/sigstore/rekor v1.2.2 // indirect diff --git a/pkg/api/go.mod b/pkg/api/go.mod index 0fd5914a9094d..1ee4065b68545 100644 --- a/pkg/api/go.mod +++ b/pkg/api/go.mod @@ -72,6 +72,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -85,8 +86,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/pkg/api/go.sum b/pkg/api/go.sum index 1441562d69bde..dc0ab4305d421 100644 --- a/pkg/api/go.sum +++ b/pkg/api/go.sum @@ -39,6 +39,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -169,12 +171,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/collector/corechecks/servicediscovery/module/comm_test.go b/pkg/collector/corechecks/servicediscovery/module/comm_test.go index 23568d19ecd2c..5cdcac6d5a368 100644 --- a/pkg/collector/corechecks/servicediscovery/module/comm_test.go +++ b/pkg/collector/corechecks/servicediscovery/module/comm_test.go @@ -15,7 +15,7 @@ import ( "testing" "time" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/pkg/collector/corechecks/servicediscovery/module/envs.go b/pkg/collector/corechecks/servicediscovery/module/envs.go index 0c841b3d108c5..2c958586098c8 100644 --- a/pkg/collector/corechecks/servicediscovery/module/envs.go +++ b/pkg/collector/corechecks/servicediscovery/module/envs.go @@ -15,7 +15,7 @@ import ( "strconv" "strings" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/servicediscovery/envs" "github.com/DataDog/datadog-agent/pkg/util/kernel" diff --git a/pkg/collector/corechecks/servicediscovery/module/envs_test.go b/pkg/collector/corechecks/servicediscovery/module/envs_test.go index 3d2987797ff0a..c1ff43cb82d98 100644 --- a/pkg/collector/corechecks/servicediscovery/module/envs_test.go +++ b/pkg/collector/corechecks/servicediscovery/module/envs_test.go @@ -13,7 +13,7 @@ import ( "strings" "testing" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" "github.com/stretchr/testify/require" "golang.org/x/sys/unix" diff --git a/pkg/collector/corechecks/servicediscovery/module/impl_linux.go b/pkg/collector/corechecks/servicediscovery/module/impl_linux.go index dca31b0890c33..defee82dc4c72 100644 --- a/pkg/collector/corechecks/servicediscovery/module/impl_linux.go +++ b/pkg/collector/corechecks/servicediscovery/module/impl_linux.go @@ -21,7 +21,7 @@ import ( "time" agentPayload "github.com/DataDog/agent-payload/v5/process" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" "github.com/DataDog/datadog-agent/cmd/system-probe/api/module" sysconfigtypes "github.com/DataDog/datadog-agent/cmd/system-probe/config/types" diff --git a/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go b/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go index a578ccce8cc8e..d40a5216f1355 100644 --- a/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go +++ b/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go @@ -32,7 +32,7 @@ import ( "github.com/golang/mock/gomock" gorillamux "github.com/gorilla/mux" "github.com/prometheus/procfs" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/vishvananda/netns" diff --git a/pkg/collector/corechecks/servicediscovery/usm/ruby.go b/pkg/collector/corechecks/servicediscovery/usm/ruby.go index 5404a1753d77d..a0d0a5e8ea42b 100644 --- a/pkg/collector/corechecks/servicediscovery/usm/ruby.go +++ b/pkg/collector/corechecks/servicediscovery/usm/ruby.go @@ -14,7 +14,7 @@ import ( "path" "regexp" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" "github.com/DataDog/datadog-agent/pkg/util/log" ) diff --git a/pkg/compliance/agent.go b/pkg/compliance/agent.go index 663e7a5f067b6..f839b5a7cb8c1 100644 --- a/pkg/compliance/agent.go +++ b/pkg/compliance/agent.go @@ -23,7 +23,7 @@ import ( "sync" "time" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" "github.com/DataDog/datadog-agent/pkg/compliance/aptconfig" diff --git a/pkg/compliance/dbconfig/loader.go b/pkg/compliance/dbconfig/loader.go index 92c1ad12e978a..d70f673a070ee 100644 --- a/pkg/compliance/dbconfig/loader.go +++ b/pkg/compliance/dbconfig/loader.go @@ -18,7 +18,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/compliance/utils" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" yaml "gopkg.in/yaml.v3" ) diff --git a/pkg/compliance/dbconfig/loader_test.go b/pkg/compliance/dbconfig/loader_test.go index f39ab441ad820..bb2002d96aa81 100644 --- a/pkg/compliance/dbconfig/loader_test.go +++ b/pkg/compliance/dbconfig/loader_test.go @@ -14,7 +14,7 @@ import ( "path/filepath" "testing" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" "github.com/stretchr/testify/assert" ) diff --git a/pkg/compliance/k8sconfig/loader.go b/pkg/compliance/k8sconfig/loader.go index 3dc23ebde78c2..f58aaec4636b3 100644 --- a/pkg/compliance/k8sconfig/loader.go +++ b/pkg/compliance/k8sconfig/loader.go @@ -25,7 +25,7 @@ import ( "time" "github.com/DataDog/datadog-agent/pkg/compliance/utils" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" "gopkg.in/yaml.v3" ) diff --git a/pkg/compliance/resolver.go b/pkg/compliance/resolver.go index 769c5fc91bd16..057cd7a413a3f 100644 --- a/pkg/compliance/resolver.go +++ b/pkg/compliance/resolver.go @@ -32,7 +32,7 @@ import ( docker "github.com/docker/docker/client" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" yamlv2 "gopkg.in/yaml.v2" yamlv3 "gopkg.in/yaml.v3" diff --git a/pkg/config/env/go.mod b/pkg/config/env/go.mod index c98d3f9e2d11e..c2fa1454d2fee 100644 --- a/pkg/config/env/go.mod +++ b/pkg/config/env/go.mod @@ -27,6 +27,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -37,7 +38,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect diff --git a/pkg/config/env/go.sum b/pkg/config/env/go.sum index b7b383aee36ed..3714c29c49041 100644 --- a/pkg/config/env/go.sum +++ b/pkg/config/env/go.sum @@ -34,6 +34,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -146,8 +148,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/config/mock/go.mod b/pkg/config/mock/go.mod index e526a9aa1d0ee..60543231cb311 100644 --- a/pkg/config/mock/go.mod +++ b/pkg/config/mock/go.mod @@ -57,6 +57,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -69,8 +70,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect diff --git a/pkg/config/mock/go.sum b/pkg/config/mock/go.sum index b60bbee1b243d..fc14fcc51ad7e 100644 --- a/pkg/config/mock/go.sum +++ b/pkg/config/mock/go.sum @@ -38,6 +38,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -167,12 +169,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/config/remote/go.mod b/pkg/config/remote/go.mod index 7442b0348731d..1e2695599a4ca 100644 --- a/pkg/config/remote/go.mod +++ b/pkg/config/remote/go.mod @@ -108,8 +108,7 @@ require ( github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/ryanuber/go-glob v1.0.0 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect diff --git a/pkg/config/remote/go.sum b/pkg/config/remote/go.sum index a5c2739769aa2..eb4fa22065545 100644 --- a/pkg/config/remote/go.sum +++ b/pkg/config/remote/go.sum @@ -255,12 +255,8 @@ github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkB github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbmfHkLguCE9laoZCUzEEpIZXA= github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= diff --git a/pkg/config/setup/go.mod b/pkg/config/setup/go.mod index 1813f0c12bcbd..0fc0b943272aa 100644 --- a/pkg/config/setup/go.mod +++ b/pkg/config/setup/go.mod @@ -69,6 +69,7 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -87,8 +88,7 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.60.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/pkg/config/setup/go.sum b/pkg/config/setup/go.sum index a67414c323f7c..8f0854bbfc0b9 100644 --- a/pkg/config/setup/go.sum +++ b/pkg/config/setup/go.sum @@ -43,6 +43,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -177,12 +179,8 @@ github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/f github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/config/utils/go.mod b/pkg/config/utils/go.mod index c27cbcf9b59f8..3894ed026ecc5 100644 --- a/pkg/config/utils/go.mod +++ b/pkg/config/utils/go.mod @@ -62,6 +62,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -74,8 +75,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect diff --git a/pkg/config/utils/go.sum b/pkg/config/utils/go.sum index b60bbee1b243d..fc14fcc51ad7e 100644 --- a/pkg/config/utils/go.sum +++ b/pkg/config/utils/go.sum @@ -38,6 +38,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -167,12 +169,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/fleet/installer/packages/docker.go b/pkg/fleet/installer/packages/docker.go index 8c19fc04a4ec8..45984ca96a652 100644 --- a/pkg/fleet/installer/packages/docker.go +++ b/pkg/fleet/installer/packages/docker.go @@ -21,7 +21,7 @@ import ( "time" "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) diff --git a/pkg/gohai/go.mod b/pkg/gohai/go.mod index fb749217ba632..45edc82c08f38 100644 --- a/pkg/gohai/go.mod +++ b/pkg/gohai/go.mod @@ -7,7 +7,7 @@ go 1.23.0 require ( github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 github.com/moby/sys/mountinfo v0.7.2 - github.com/shirou/gopsutil/v3 v3.24.5 + github.com/shirou/gopsutil/v4 v4.24.11 github.com/stretchr/testify v1.10.0 golang.org/x/sys v0.28.0 ) @@ -17,12 +17,11 @@ require ( github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect - github.com/shoenig/test v1.7.1 // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect diff --git a/pkg/gohai/go.sum b/pkg/gohai/go.sum index d08fc94f6ffe7..99c1b368ae068 100644 --- a/pkg/gohai/go.sum +++ b/pkg/gohai/go.sum @@ -2,6 +2,8 @@ github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1 github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= @@ -22,12 +24,8 @@ github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c h1:NRoLoZvkB github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= diff --git a/pkg/gohai/processes/gops/process_info.go b/pkg/gohai/processes/gops/process_info.go index 9f830d935ea47..bdbd3c4601109 100644 --- a/pkg/gohai/processes/gops/process_info.go +++ b/pkg/gohai/processes/gops/process_info.go @@ -12,8 +12,8 @@ import ( "fmt" "runtime" - "github.com/shirou/gopsutil/v3/mem" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/mem" + "github.com/shirou/gopsutil/v4/process" "github.com/DataDog/datadog-agent/pkg/util/log" ) diff --git a/pkg/internaltelemetry/client.go b/pkg/internaltelemetry/client.go index 4469ba0d0f060..52b1b2010edf0 100644 --- a/pkg/internaltelemetry/client.go +++ b/pkg/internaltelemetry/client.go @@ -25,7 +25,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" - "github.com/shirou/gopsutil/v3/host" + "github.com/shirou/gopsutil/v4/host" ) const ( diff --git a/pkg/logs/auditor/go.mod b/pkg/logs/auditor/go.mod index ddbd7465dad7f..56b528a2ff3d4 100644 --- a/pkg/logs/auditor/go.mod +++ b/pkg/logs/auditor/go.mod @@ -76,6 +76,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -88,8 +89,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect diff --git a/pkg/logs/auditor/go.sum b/pkg/logs/auditor/go.sum index b60bbee1b243d..fc14fcc51ad7e 100644 --- a/pkg/logs/auditor/go.sum +++ b/pkg/logs/auditor/go.sum @@ -38,6 +38,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -167,12 +169,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/logs/client/go.mod b/pkg/logs/client/go.mod index 98d517064e966..a19f07054482e 100644 --- a/pkg/logs/client/go.mod +++ b/pkg/logs/client/go.mod @@ -96,6 +96,7 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -115,8 +116,7 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.60.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/pkg/logs/client/go.sum b/pkg/logs/client/go.sum index 1280297d26d15..30b75d8cb57df 100644 --- a/pkg/logs/client/go.sum +++ b/pkg/logs/client/go.sum @@ -40,6 +40,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -174,12 +176,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/logs/diagnostic/go.mod b/pkg/logs/diagnostic/go.mod index 5d1ec2ef8d375..5b5fbaf9df94f 100644 --- a/pkg/logs/diagnostic/go.mod +++ b/pkg/logs/diagnostic/go.mod @@ -80,6 +80,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -93,8 +94,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/pkg/logs/diagnostic/go.sum b/pkg/logs/diagnostic/go.sum index 1441562d69bde..dc0ab4305d421 100644 --- a/pkg/logs/diagnostic/go.sum +++ b/pkg/logs/diagnostic/go.sum @@ -39,6 +39,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -169,12 +171,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/logs/message/go.mod b/pkg/logs/message/go.mod index 926d1755736a7..2a031a302ff66 100644 --- a/pkg/logs/message/go.mod +++ b/pkg/logs/message/go.mod @@ -72,6 +72,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -84,8 +85,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect diff --git a/pkg/logs/message/go.sum b/pkg/logs/message/go.sum index b60bbee1b243d..fc14fcc51ad7e 100644 --- a/pkg/logs/message/go.sum +++ b/pkg/logs/message/go.sum @@ -38,6 +38,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -167,12 +169,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/logs/pipeline/go.mod b/pkg/logs/pipeline/go.mod index 8e94ae545d913..2802d7256f594 100644 --- a/pkg/logs/pipeline/go.mod +++ b/pkg/logs/pipeline/go.mod @@ -114,6 +114,7 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -135,8 +136,7 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.60.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/pkg/logs/pipeline/go.sum b/pkg/logs/pipeline/go.sum index 2046340fbb070..920238d6c8024 100644 --- a/pkg/logs/pipeline/go.sum +++ b/pkg/logs/pipeline/go.sum @@ -44,6 +44,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -186,12 +188,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/logs/processor/go.mod b/pkg/logs/processor/go.mod index 92711d3f0904c..699fe4e8ad518 100644 --- a/pkg/logs/processor/go.mod +++ b/pkg/logs/processor/go.mod @@ -94,6 +94,7 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -114,8 +115,7 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.60.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/pkg/logs/processor/go.sum b/pkg/logs/processor/go.sum index 90a3df8fcf57a..09e7a690fdf60 100644 --- a/pkg/logs/processor/go.sum +++ b/pkg/logs/processor/go.sum @@ -44,6 +44,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -181,12 +183,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/logs/sds/go.mod b/pkg/logs/sds/go.mod index de57c77f0c334..a0d137977450b 100644 --- a/pkg/logs/sds/go.mod +++ b/pkg/logs/sds/go.mod @@ -89,6 +89,7 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -108,8 +109,7 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.60.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/pkg/logs/sds/go.sum b/pkg/logs/sds/go.sum index f4fe0336fb3e7..e23451e060e85 100644 --- a/pkg/logs/sds/go.sum +++ b/pkg/logs/sds/go.sum @@ -40,6 +40,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -174,12 +176,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/logs/sender/go.mod b/pkg/logs/sender/go.mod index 34f1b22725b61..b769f58828d16 100644 --- a/pkg/logs/sender/go.mod +++ b/pkg/logs/sender/go.mod @@ -96,6 +96,7 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -115,8 +116,7 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.60.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/pkg/logs/sender/go.sum b/pkg/logs/sender/go.sum index 1280297d26d15..30b75d8cb57df 100644 --- a/pkg/logs/sender/go.sum +++ b/pkg/logs/sender/go.sum @@ -40,6 +40,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -174,12 +176,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/logs/sources/go.mod b/pkg/logs/sources/go.mod index d4cb6c8fae893..2e7aaed02aad4 100644 --- a/pkg/logs/sources/go.mod +++ b/pkg/logs/sources/go.mod @@ -70,6 +70,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -82,8 +83,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect diff --git a/pkg/logs/sources/go.sum b/pkg/logs/sources/go.sum index b60bbee1b243d..fc14fcc51ad7e 100644 --- a/pkg/logs/sources/go.sum +++ b/pkg/logs/sources/go.sum @@ -38,6 +38,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -167,12 +169,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/logs/util/testutils/go.mod b/pkg/logs/util/testutils/go.mod index c8bdb9b516e9f..1669f7f2029b8 100644 --- a/pkg/logs/util/testutils/go.mod +++ b/pkg/logs/util/testutils/go.mod @@ -70,6 +70,7 @@ require ( github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -81,8 +82,7 @@ require ( github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect diff --git a/pkg/logs/util/testutils/go.sum b/pkg/logs/util/testutils/go.sum index b60bbee1b243d..fc14fcc51ad7e 100644 --- a/pkg/logs/util/testutils/go.sum +++ b/pkg/logs/util/testutils/go.sum @@ -38,6 +38,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -167,12 +169,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/metrics/go.mod b/pkg/metrics/go.mod index 98ca0a495a8db..3e1a7d68759a6 100644 --- a/pkg/metrics/go.mod +++ b/pkg/metrics/go.mod @@ -81,6 +81,7 @@ require ( github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dustin/go-humanize v1.0.1 // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -100,8 +101,7 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.60.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/pkg/metrics/go.sum b/pkg/metrics/go.sum index 5bbafd25cf4f1..245b5a427d4a7 100644 --- a/pkg/metrics/go.sum +++ b/pkg/metrics/go.sum @@ -46,6 +46,8 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -182,12 +184,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/process/checks/process.go b/pkg/process/checks/process.go index 2fd7fe7e1c3fd..add33a5f22d6a 100644 --- a/pkg/process/checks/process.go +++ b/pkg/process/checks/process.go @@ -15,7 +15,7 @@ import ( "time" model "github.com/DataDog/agent-payload/v5/process" - "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v4/cpu" "go.uber.org/atomic" "github.com/DataDog/datadog-agent/cmd/system-probe/api/client" diff --git a/pkg/process/checks/process_common_test.go b/pkg/process/checks/process_common_test.go index 129b1c436aa88..4e8d5a7b6cbf5 100644 --- a/pkg/process/checks/process_common_test.go +++ b/pkg/process/checks/process_common_test.go @@ -12,7 +12,7 @@ import ( "testing" "time" - "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v4/cpu" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/pkg/process/checks/process_nix.go b/pkg/process/checks/process_nix.go index 4fe8a11e1ea92..1fd0bc4d89452 100644 --- a/pkg/process/checks/process_nix.go +++ b/pkg/process/checks/process_nix.go @@ -13,7 +13,7 @@ import ( "strconv" model "github.com/DataDog/agent-payload/v5/process" - "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v4/cpu" "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/util/system" diff --git a/pkg/process/checks/process_nix_test.go b/pkg/process/checks/process_nix_test.go index 2cbd10d5e3217..c819e7fddebd7 100644 --- a/pkg/process/checks/process_nix_test.go +++ b/pkg/process/checks/process_nix_test.go @@ -17,7 +17,7 @@ import ( "github.com/stretchr/testify/assert" model "github.com/DataDog/agent-payload/v5/process" - "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v4/cpu" "github.com/DataDog/datadog-agent/pkg/process/metadata/parser" "github.com/DataDog/datadog-agent/pkg/process/procutil" diff --git a/pkg/process/checks/process_rt.go b/pkg/process/checks/process_rt.go index 04be7253f42e4..e218a80fa732e 100644 --- a/pkg/process/checks/process_rt.go +++ b/pkg/process/checks/process_rt.go @@ -10,7 +10,7 @@ import ( "time" model "github.com/DataDog/agent-payload/v5/process" - "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v4/cpu" "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/process/procutil" diff --git a/pkg/process/checks/process_test.go b/pkg/process/checks/process_test.go index c1f4be9e64388..d306809c51967 100644 --- a/pkg/process/checks/process_test.go +++ b/pkg/process/checks/process_test.go @@ -13,7 +13,7 @@ import ( "time" model "github.com/DataDog/agent-payload/v5/process" - "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v4/cpu" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" diff --git a/pkg/process/checks/process_windows.go b/pkg/process/checks/process_windows.go index bb9d2eb7c6f3e..3fb6cdce2058a 100644 --- a/pkg/process/checks/process_windows.go +++ b/pkg/process/checks/process_windows.go @@ -11,7 +11,7 @@ import ( "math" "runtime" - "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v4/cpu" model "github.com/DataDog/agent-payload/v5/process" diff --git a/pkg/process/checks/process_windows_test.go b/pkg/process/checks/process_windows_test.go index b6c310ff3e580..b0eb246ee88bb 100644 --- a/pkg/process/checks/process_windows_test.go +++ b/pkg/process/checks/process_windows_test.go @@ -11,7 +11,7 @@ import ( "testing" model "github.com/DataDog/agent-payload/v5/process" - "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v4/cpu" "github.com/stretchr/testify/assert" configmock "github.com/DataDog/datadog-agent/pkg/config/mock" diff --git a/pkg/process/checks/system_info.go b/pkg/process/checks/system_info.go index bb187880b77b4..1f101e6ff5b7f 100644 --- a/pkg/process/checks/system_info.go +++ b/pkg/process/checks/system_info.go @@ -10,8 +10,8 @@ package checks import ( // waiting for upstream fix to platform collection in containerized environments "github.com/DataDog/gopsutil/host" - "github.com/shirou/gopsutil/v3/cpu" - "github.com/shirou/gopsutil/v3/mem" + "github.com/shirou/gopsutil/v4/cpu" + "github.com/shirou/gopsutil/v4/mem" model "github.com/DataDog/agent-payload/v5/process" ) diff --git a/pkg/process/checks/system_info_darwin.go b/pkg/process/checks/system_info_darwin.go index 908df5428d5c8..065eec50b19fa 100644 --- a/pkg/process/checks/system_info_darwin.go +++ b/pkg/process/checks/system_info_darwin.go @@ -14,8 +14,8 @@ import ( // difference between methods for collecting macOS platform, kernel version // between shirou and Datadog psutil "github.com/DataDog/gopsutil/host" - "github.com/shirou/gopsutil/v3/cpu" - "github.com/shirou/gopsutil/v3/mem" + "github.com/shirou/gopsutil/v4/cpu" + "github.com/shirou/gopsutil/v4/mem" "golang.org/x/sys/unix" ) diff --git a/pkg/process/checks/system_info_darwin_test.go b/pkg/process/checks/system_info_darwin_test.go index 264aae24a1868..d7bc8230b3df9 100644 --- a/pkg/process/checks/system_info_darwin_test.go +++ b/pkg/process/checks/system_info_darwin_test.go @@ -10,7 +10,7 @@ package checks import ( "testing" - "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v4/cpu" "github.com/stretchr/testify/assert" ) diff --git a/pkg/process/procutil/process_windows_toolhelp.go b/pkg/process/procutil/process_windows_toolhelp.go index e96b9aabebb78..204496f30701c 100644 --- a/pkg/process/procutil/process_windows_toolhelp.go +++ b/pkg/process/procutil/process_windows_toolhelp.go @@ -16,7 +16,7 @@ import ( "github.com/shirou/w32" "golang.org/x/sys/windows" - process "github.com/shirou/gopsutil/v3/process" + process "github.com/shirou/gopsutil/v4/process" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/winutil" diff --git a/pkg/sbom/collectors/host/host_wmi.go b/pkg/sbom/collectors/host/host_wmi.go index 6af66de787354..937e2823dad90 100644 --- a/pkg/sbom/collectors/host/host_wmi.go +++ b/pkg/sbom/collectors/host/host_wmi.go @@ -21,7 +21,7 @@ import ( "github.com/DataDog/gopsutil/host" cyclonedxgo "github.com/CycloneDX/cyclonedx-go" - host2 "github.com/shirou/gopsutil/v3/host" + host2 "github.com/shirou/gopsutil/v4/host" "github.com/yusufpapurcu/wmi" ) diff --git a/pkg/security/probe/monitors/runtime/runtime_monitor.go b/pkg/security/probe/monitors/runtime/runtime_monitor.go index 403cba55e8052..8f0d3511def76 100644 --- a/pkg/security/probe/monitors/runtime/runtime_monitor.go +++ b/pkg/security/probe/monitors/runtime/runtime_monitor.go @@ -14,7 +14,7 @@ import ( "strconv" "strings" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" "github.com/DataDog/datadog-go/v5/statsd" diff --git a/pkg/security/probe/probe_linux.go b/pkg/security/probe/probe_linux.go index 83c2c4800215d..b4b557db19aea 100644 --- a/pkg/security/probe/probe_linux.go +++ b/pkg/security/probe/probe_linux.go @@ -11,7 +11,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/utils" - gopsutilProcess "github.com/shirou/gopsutil/v3/process" + gopsutilProcess "github.com/shirou/gopsutil/v4/process" ) const ( diff --git a/pkg/security/probe/process_killer_linux.go b/pkg/security/probe/process_killer_linux.go index 6586399fa8585..0d038f62b44a2 100644 --- a/pkg/security/probe/process_killer_linux.go +++ b/pkg/security/probe/process_killer_linux.go @@ -11,7 +11,7 @@ import ( "fmt" "syscall" - psutil "github.com/shirou/gopsutil/v3/process" + psutil "github.com/shirou/gopsutil/v4/process" "github.com/DataDog/datadog-agent/pkg/security/secl/model" ) diff --git a/pkg/security/ptracer/proc.go b/pkg/security/ptracer/proc.go index 0484449f2ac94..8a435e4599534 100644 --- a/pkg/security/ptracer/proc.go +++ b/pkg/security/ptracer/proc.go @@ -16,7 +16,7 @@ import ( "strings" "time" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" "github.com/DataDog/datadog-agent/pkg/security/proto/ebpfless" ) diff --git a/pkg/security/resolvers/process/resolver_ebpf.go b/pkg/security/resolvers/process/resolver_ebpf.go index c9a3fd4f8ad7e..dc5694dd55647 100644 --- a/pkg/security/resolvers/process/resolver_ebpf.go +++ b/pkg/security/resolvers/process/resolver_ebpf.go @@ -26,7 +26,7 @@ import ( manager "github.com/DataDog/ebpf-manager" lib "github.com/cilium/ebpf" "github.com/hashicorp/golang-lru/v2/simplelru" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" "go.uber.org/atomic" "github.com/DataDog/datadog-agent/pkg/process/procutil" @@ -384,14 +384,14 @@ func (p *EBPFResolver) enrichEventFromProc(entry *model.ProcessCacheEntry, proc entry.ProcessContext.Pid = pid entry.ProcessContext.Tid = pid if len(filledProc.Uids) >= 4 { - entry.Credentials.UID = uint32(filledProc.Uids[0]) - entry.Credentials.EUID = uint32(filledProc.Uids[1]) - entry.Credentials.FSUID = uint32(filledProc.Uids[3]) + entry.Credentials.UID = filledProc.Uids[0] + entry.Credentials.EUID = filledProc.Uids[1] + entry.Credentials.FSUID = filledProc.Uids[3] } if len(filledProc.Gids) >= 4 { - entry.Credentials.GID = uint32(filledProc.Gids[0]) - entry.Credentials.EGID = uint32(filledProc.Gids[1]) - entry.Credentials.FSGID = uint32(filledProc.Gids[3]) + entry.Credentials.GID = filledProc.Gids[0] + entry.Credentials.EGID = filledProc.Gids[1] + entry.Credentials.FSGID = filledProc.Gids[3] } // fetch login_uid entry.Credentials.AUID, err = utils.GetLoginUID(uint32(proc.Pid)) diff --git a/pkg/security/security_profile/activity_tree/process_node_snapshot.go b/pkg/security/security_profile/activity_tree/process_node_snapshot.go index aea6151f018e2..bd5cb069083b4 100644 --- a/pkg/security/security_profile/activity_tree/process_node_snapshot.go +++ b/pkg/security/security_profile/activity_tree/process_node_snapshot.go @@ -23,7 +23,7 @@ import ( "time" "github.com/prometheus/procfs" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" "golang.org/x/sys/unix" "github.com/DataDog/datadog-agent/pkg/security/secl/containerutils" diff --git a/pkg/security/utils/numcpu.go b/pkg/security/utils/numcpu.go index b6e7506a3c351..7f488e739d166 100644 --- a/pkg/security/utils/numcpu.go +++ b/pkg/security/utils/numcpu.go @@ -9,7 +9,7 @@ package utils import ( - "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v4/cpu" ) // NumCPU returns the count of CPUs in the CPU affinity mask of the pid 1 process diff --git a/pkg/security/utils/proc_common.go b/pkg/security/utils/proc_common.go index 755221d676f20..2b5542a28f8b8 100644 --- a/pkg/security/utils/proc_common.go +++ b/pkg/security/utils/proc_common.go @@ -7,7 +7,7 @@ package utils import ( - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" ) // GetProcesses returns list of active processes @@ -37,8 +37,8 @@ type FilledProcess struct { Ppid int32 CreateTime int64 Name string - Uids []int32 - Gids []int32 + Uids []uint32 + Gids []uint32 MemInfo *process.MemoryInfoStat Cmdline []string } diff --git a/pkg/security/utils/proc_linux.go b/pkg/security/utils/proc_linux.go index 5868a0a958457..1ee6765ae737e 100644 --- a/pkg/security/utils/proc_linux.go +++ b/pkg/security/utils/proc_linux.go @@ -21,7 +21,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/util/kernel" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" ) // Getpid returns the current process ID in the host namespace diff --git a/pkg/serializer/go.mod b/pkg/serializer/go.mod index 6975af71a3a78..4b5e86e94590c 100644 --- a/pkg/serializer/go.mod +++ b/pkg/serializer/go.mod @@ -132,6 +132,7 @@ require ( github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dustin/go-humanize v1.0.1 // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fatih/color v1.18.0 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect @@ -160,8 +161,7 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.60.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/pkg/serializer/go.sum b/pkg/serializer/go.sum index 8260879f5cb4d..de83965cdf01f 100644 --- a/pkg/serializer/go.sum +++ b/pkg/serializer/go.sum @@ -54,6 +54,8 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= @@ -222,12 +224,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/trace/go.mod b/pkg/trace/go.mod index 382915cd7b380..9a1f316511e3a 100644 --- a/pkg/trace/go.mod +++ b/pkg/trace/go.mod @@ -32,7 +32,6 @@ require ( github.com/google/gofuzz v1.2.0 github.com/google/uuid v1.6.0 github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.115.0 - github.com/shirou/gopsutil/v3 v3.24.4 github.com/stretchr/testify v1.10.0 github.com/tinylib/msgp v1.2.4 github.com/vmihailenco/msgpack/v4 v4.3.13 @@ -52,7 +51,10 @@ require ( k8s.io/apimachinery v0.31.2 ) -require go.opentelemetry.io/collector/component/componenttest v0.115.0 +require ( + github.com/shirou/gopsutil/v4 v4.24.11 + go.opentelemetry.io/collector/component/componenttest v0.115.0 +) require go.opentelemetry.io/collector/processor v0.115.0 // indirect @@ -66,6 +68,7 @@ require ( github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect @@ -85,8 +88,6 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect - github.com/shoenig/test v1.7.1 // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect github.com/vmihailenco/tagparser v0.1.2 // indirect diff --git a/pkg/trace/go.sum b/pkg/trace/go.sum index 5d3d0d4a89d22..f4ee6919325a7 100644 --- a/pkg/trace/go.sum +++ b/pkg/trace/go.sum @@ -64,7 +64,6 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -101,7 +100,6 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c h1:VtwQ41oftZwlMnOEbMWQtSEUgU64U4s+GHk7hZK+jtY= github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= @@ -134,7 +132,6 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c h1:NRoLoZvkBTKvR5gQLgA3e0hqjkY9u1wm+iOL45VN/qI= github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= @@ -149,15 +146,8 @@ github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbmfHkLguCE9laoZCUzEEpIZXA= github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= -github.com/shirou/gopsutil/v3 v3.24.4 h1:dEHgzZXt4LMNm+oYELpzl9YCqV65Yr/6SfrvgRBtXeU= -github.com/shirou/gopsutil/v3 v3.24.4/go.mod h1:lTd2mdiOspcqLgAnr9/nGi71NkeMpWKdmhuxm9GusH8= github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= @@ -174,16 +164,12 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tinylib/msgp v1.2.4 h1:yLFeUGostXXSGW5vxfT5dXG/qzkn4schv2I7at5+hVU= github.com/tinylib/msgp v1.2.4/go.mod h1:ykjzy2wzgrlvpDCRc4LA8UXy6D8bzMSuAF3WD57Gok0= -github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY= -github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/tklauser/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYgY= github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE= github.com/vmihailenco/msgpack/v4 v4.3.13 h1:A2wsiTbvp63ilDaWmsk2wjx6xZdxQOvpiNlKBGKKXKI= @@ -369,9 +355,6 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= diff --git a/pkg/trace/stats/oteltest/go.mod b/pkg/trace/stats/oteltest/go.mod index e80c6fc27dccd..1880e691cf094 100644 --- a/pkg/trace/stats/oteltest/go.mod +++ b/pkg/trace/stats/oteltest/go.mod @@ -40,6 +40,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect @@ -61,8 +62,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/tinylib/msgp v1.2.4 // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect diff --git a/pkg/trace/stats/oteltest/go.sum b/pkg/trace/stats/oteltest/go.sum index 520e6d9e0d851..d1dd6e5377312 100644 --- a/pkg/trace/stats/oteltest/go.sum +++ b/pkg/trace/stats/oteltest/go.sum @@ -34,6 +34,8 @@ github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -99,12 +101,8 @@ github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbmfHkLguCE9laoZCUzEEpIZXA= github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= diff --git a/pkg/trace/watchdog/cpu.go b/pkg/trace/watchdog/cpu.go index a1799701ab3d1..a2feda3f58d32 100644 --- a/pkg/trace/watchdog/cpu.go +++ b/pkg/trace/watchdog/cpu.go @@ -14,7 +14,7 @@ import ( "strconv" "github.com/DataDog/datadog-agent/pkg/trace/log" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" ) func getpid() int { diff --git a/pkg/util/filesystem/disk.go b/pkg/util/filesystem/disk.go index a80165d0ca872..a851bcd1dfb2d 100644 --- a/pkg/util/filesystem/disk.go +++ b/pkg/util/filesystem/disk.go @@ -6,7 +6,7 @@ package filesystem -import "github.com/shirou/gopsutil/v3/disk" +import "github.com/shirou/gopsutil/v4/disk" // Disk gets information about the disk type Disk struct{} diff --git a/pkg/util/filesystem/go.mod b/pkg/util/filesystem/go.mod index bc466baa93e3e..1a0effc2f07e8 100644 --- a/pkg/util/filesystem/go.mod +++ b/pkg/util/filesystem/go.mod @@ -13,7 +13,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 - github.com/shirou/gopsutil/v3 v3.24.5 + github.com/shirou/gopsutil/v4 v4.24.11 github.com/stretchr/testify v1.10.0 golang.org/x/sys v0.28.0 ) @@ -23,6 +23,7 @@ require ( github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect diff --git a/pkg/util/filesystem/go.sum b/pkg/util/filesystem/go.sum index ed5847ab111d3..97cab95a8f162 100644 --- a/pkg/util/filesystem/go.sum +++ b/pkg/util/filesystem/go.sum @@ -2,6 +2,8 @@ github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1 github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= @@ -17,8 +19,8 @@ github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c h1:NRoLoZvkB github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= diff --git a/pkg/util/flavor/go.mod b/pkg/util/flavor/go.mod index e6597dff10c65..2b3a00706f758 100644 --- a/pkg/util/flavor/go.mod +++ b/pkg/util/flavor/go.mod @@ -58,6 +58,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -70,8 +71,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect diff --git a/pkg/util/flavor/go.sum b/pkg/util/flavor/go.sum index b60bbee1b243d..fc14fcc51ad7e 100644 --- a/pkg/util/flavor/go.sum +++ b/pkg/util/flavor/go.sum @@ -38,6 +38,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -167,12 +169,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/util/grpc/go.mod b/pkg/util/grpc/go.mod index 8aacd9bf986f0..b2b70c55bbeb2 100644 --- a/pkg/util/grpc/go.mod +++ b/pkg/util/grpc/go.mod @@ -69,6 +69,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/golang/protobuf v1.5.4 // indirect @@ -84,8 +85,7 @@ require ( github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect diff --git a/pkg/util/grpc/go.sum b/pkg/util/grpc/go.sum index f3926160d06fa..1ca8e8dc8a8df 100644 --- a/pkg/util/grpc/go.sum +++ b/pkg/util/grpc/go.sum @@ -44,6 +44,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -189,12 +191,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/util/http/go.mod b/pkg/util/http/go.mod index 561ab50ecabe4..abb2860789433 100644 --- a/pkg/util/http/go.mod +++ b/pkg/util/http/go.mod @@ -60,6 +60,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -72,8 +73,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect diff --git a/pkg/util/http/go.sum b/pkg/util/http/go.sum index d12b0ce7595dd..60bade5a7db31 100644 --- a/pkg/util/http/go.sum +++ b/pkg/util/http/go.sum @@ -38,6 +38,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -167,12 +169,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/util/ktime/resolver.go b/pkg/util/ktime/resolver.go index 36cfda9f166fa..e4f83638dafa6 100644 --- a/pkg/util/ktime/resolver.go +++ b/pkg/util/ktime/resolver.go @@ -13,7 +13,7 @@ import ( _ "unsafe" // unsafe import to call nanotime() which should be 2x quick than time.Now() - "github.com/shirou/gopsutil/v3/host" + "github.com/shirou/gopsutil/v4/host" ) // Resolver converts kernel monotonic timestamps to absolute times diff --git a/pkg/util/log/setup/go.mod b/pkg/util/log/setup/go.mod index 11b3815ca0a92..74ca271074423 100644 --- a/pkg/util/log/setup/go.mod +++ b/pkg/util/log/setup/go.mod @@ -59,6 +59,7 @@ require ( github.com/DataDog/viper v1.13.5 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect @@ -71,8 +72,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect diff --git a/pkg/util/log/setup/go.sum b/pkg/util/log/setup/go.sum index b60bbee1b243d..fc14fcc51ad7e 100644 --- a/pkg/util/log/setup/go.sum +++ b/pkg/util/log/setup/go.sum @@ -38,6 +38,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -167,12 +169,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/pkg/util/process_file_stats_linux.go b/pkg/util/process_file_stats_linux.go index 7da505889c0d3..79ef22922dc24 100644 --- a/pkg/util/process_file_stats_linux.go +++ b/pkg/util/process_file_stats_linux.go @@ -11,7 +11,7 @@ import ( "os" "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/shirou/gopsutil/v3/process" + "github.com/shirou/gopsutil/v4/process" ) // GetProcessFileStats returns the number of file handles the Agent process has open diff --git a/pkg/util/system/cpu_unix.go b/pkg/util/system/cpu_unix.go index c963b5e914692..124fa24e74474 100644 --- a/pkg/util/system/cpu_unix.go +++ b/pkg/util/system/cpu_unix.go @@ -8,7 +8,7 @@ package system import ( - "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v4/cpu" ) func init() { diff --git a/pkg/util/system/go.mod b/pkg/util/system/go.mod index 19c8faadba063..b91b137b720c2 100644 --- a/pkg/util/system/go.mod +++ b/pkg/util/system/go.mod @@ -17,7 +17,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/pointer v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/testutil v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 - github.com/shirou/gopsutil/v3 v3.24.5 + github.com/shirou/gopsutil/v4 v4.24.11 github.com/stretchr/testify v1.10.0 go.uber.org/atomic v1.11.0 golang.org/x/sys v0.28.0 @@ -28,13 +28,12 @@ require ( github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect - github.com/shoenig/test v1.7.1 // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect diff --git a/pkg/util/system/go.sum b/pkg/util/system/go.sum index 5b8aa8f5cf5c1..5dc55f7f10161 100644 --- a/pkg/util/system/go.sum +++ b/pkg/util/system/go.sum @@ -2,6 +2,8 @@ github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1 github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= @@ -22,12 +24,8 @@ github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c h1:NRoLoZvkB github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= diff --git a/pkg/util/uuid/go.mod b/pkg/util/uuid/go.mod index 36c2bd314e410..ad2e7ef2c7f0a 100644 --- a/pkg/util/uuid/go.mod +++ b/pkg/util/uuid/go.mod @@ -11,7 +11,7 @@ replace ( require ( github.com/DataDog/datadog-agent/pkg/util/cache v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 - github.com/shirou/gopsutil/v3 v3.24.5 + github.com/shirou/gopsutil/v4 v4.24.11 golang.org/x/sys v0.28.0 ) @@ -19,12 +19,11 @@ require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect - github.com/shoenig/test v1.7.1 // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect diff --git a/pkg/util/uuid/go.sum b/pkg/util/uuid/go.sum index 45f247c1429f6..2e5f8b7759901 100644 --- a/pkg/util/uuid/go.sum +++ b/pkg/util/uuid/go.sum @@ -2,6 +2,8 @@ github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1 github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= @@ -22,12 +24,8 @@ github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c h1:NRoLoZvkB github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= diff --git a/pkg/util/uuid/uuid_nix.go b/pkg/util/uuid/uuid_nix.go index 508f8da6dc4ff..9f8eb0ab85065 100644 --- a/pkg/util/uuid/uuid_nix.go +++ b/pkg/util/uuid/uuid_nix.go @@ -8,7 +8,7 @@ package uuid import ( - gopsutilhost "github.com/shirou/gopsutil/v3/host" + gopsutilhost "github.com/shirou/gopsutil/v4/host" "github.com/DataDog/datadog-agent/pkg/util/cache" "github.com/DataDog/datadog-agent/pkg/util/log" diff --git a/test/otel/go.mod b/test/otel/go.mod index a20206bf8391a..81bc6ea692e7b 100644 --- a/test/otel/go.mod +++ b/test/otel/go.mod @@ -196,6 +196,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect + github.com/ebitengine/purego v0.8.1 // indirect github.com/fatih/color v1.18.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect @@ -248,8 +249,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/rs/cors v1.11.1 // indirect github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect - github.com/shirou/gopsutil/v3 v3.24.5 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/shirou/gopsutil/v4 v4.24.11 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/spf13/cobra v1.8.1 // indirect diff --git a/test/otel/go.sum b/test/otel/go.sum index a2ed9a90d5779..3637c4f1bd224 100644 --- a/test/otel/go.sum +++ b/test/otel/go.sum @@ -85,6 +85,8 @@ github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE= +github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= @@ -307,12 +309,8 @@ github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbmfHkLguCE9laoZCUzEEpIZXA= github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY= -github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI= +github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8= +github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= From 9419cbbcba6e76f5f99dbd52323cc1584f622270 Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Thu, 12 Dec 2024 13:44:59 +0100 Subject: [PATCH 157/303] Revert "Revert "When running in CI, scrub e2e tests output to avoid leaking keys"" (#32044) --- tasks/new_e2e_tests.py | 9 ++++++++- tasks/tools/gotest-scrubbed.sh | 7 +++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100755 tasks/tools/gotest-scrubbed.sh diff --git a/tasks/new_e2e_tests.py b/tasks/new_e2e_tests.py index cf4b99caec7e6..74f027afd1582 100644 --- a/tasks/new_e2e_tests.py +++ b/tasks/new_e2e_tests.py @@ -111,7 +111,14 @@ def run( test_run_arg = f"-run {test_run_name}" cmd = f'gotestsum --format {gotestsum_format} ' - cmd += '{junit_file_flag} {json_flag} --packages="{packages}" -- -ldflags="-X {REPO_PATH}/test/new-e2e/tests/containers.GitCommit={commit}" {verbose} -mod={go_mod} -vet=off -timeout {timeout} -tags "{go_build_tags}" {nocache} {run} {skip} {test_run_arg} -args {osversion} {platform} {major_version} {arch} {flavor} {cws_supported_osversion} {src_agent_version} {dest_agent_version} {keep_stacks} {extra_flags}' + scrubber_raw_command = "" + # Scrub the test output to avoid leaking API or APP keys when running in the CI + if running_in_ci(): + scrubber_raw_command = ( + # Using custom go command piped with scrubber sed instructions https://github.com/gotestyourself/gotestsum#custom-go-test-command + f"--raw-command {os.path.join(os.path.dirname(__file__), 'tools', 'gotest-scrubbed.sh')} {{packages}}" + ) + cmd += f'{{junit_file_flag}} {{json_flag}} --packages="{{packages}}" {scrubber_raw_command} -- -ldflags="-X {{REPO_PATH}}/test/new-e2e/tests/containers.GitCommit={{commit}}" {{verbose}} -mod={{go_mod}} -vet=off -timeout {{timeout}} -tags "{{go_build_tags}}" {{nocache}} {{run}} {{skip}} {{test_run_arg}} -args {{osversion}} {{platform}} {{major_version}} {{arch}} {{flavor}} {{cws_supported_osversion}} {{src_agent_version}} {{dest_agent_version}} {{keep_stacks}} {{extra_flags}}' args = { "go_mod": "readonly", diff --git a/tasks/tools/gotest-scrubbed.sh b/tasks/tools/gotest-scrubbed.sh new file mode 100755 index 0000000000000..25ffaf544dd11 --- /dev/null +++ b/tasks/tools/gotest-scrubbed.sh @@ -0,0 +1,7 @@ +#!/bin/bash +### This script is used to run go test and scrub the output, the command can be used as follow: +### ./gotest-scrubbed.sh -- +set -euo pipefail +go test -json "$1" "${@:3}" | +sed -E 's/\b[a-fA-F0-9]{27}([a-fA-F0-9]{5})\b/**************************\1/g' | # Scrub API keys +sed -E 's/\b[a-fA-F0-9]{35}([a-fA-F0-9]{5})\b/************************************\1/g' # Scrub APP keys From d2548eb924601aa2427ff3566b18ebf14b5fa4e9 Mon Sep 17 00:00:00 2001 From: maxime mouial Date: Thu, 12 Dec 2024 14:15:27 +0100 Subject: [PATCH 158/303] Bumping viper to v1.14.0 (#31973) --- comp/api/authtoken/go.mod | 2 +- comp/api/authtoken/go.sum | 4 ++-- comp/core/config/go.mod | 2 +- comp/core/config/go.sum | 4 ++-- comp/core/log/impl-trace/go.mod | 2 +- comp/core/log/impl-trace/go.sum | 4 ++-- comp/core/log/impl/go.mod | 2 +- comp/core/log/impl/go.sum | 4 ++-- comp/core/log/mock/go.mod | 2 +- comp/core/log/mock/go.sum | 4 ++-- comp/core/status/statusimpl/go.mod | 2 +- comp/core/status/statusimpl/go.sum | 4 ++-- comp/forwarder/defaultforwarder/go.mod | 2 +- comp/forwarder/defaultforwarder/go.sum | 4 ++-- comp/forwarder/orchestrator/orchestratorinterface/go.mod | 2 +- comp/forwarder/orchestrator/orchestratorinterface/go.sum | 4 ++-- comp/logs/agent/config/go.mod | 2 +- comp/logs/agent/config/go.sum | 4 ++-- comp/otelcol/converter/impl/go.mod | 2 +- comp/otelcol/converter/impl/go.sum | 4 ++-- comp/otelcol/ddflareextension/impl/go.mod | 2 +- comp/otelcol/ddflareextension/impl/go.sum | 4 ++-- comp/otelcol/logsagentpipeline/go.mod | 2 +- comp/otelcol/logsagentpipeline/go.sum | 4 ++-- comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod | 2 +- comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum | 4 ++-- comp/otelcol/otlp/components/exporter/datadogexporter/go.mod | 2 +- comp/otelcol/otlp/components/exporter/datadogexporter/go.sum | 4 ++-- .../otelcol/otlp/components/exporter/logsagentexporter/go.mod | 2 +- .../otelcol/otlp/components/exporter/logsagentexporter/go.sum | 4 ++-- .../otlp/components/exporter/serializerexporter/go.mod | 2 +- .../otlp/components/exporter/serializerexporter/go.sum | 4 ++-- comp/otelcol/otlp/testutil/go.mod | 2 +- comp/otelcol/otlp/testutil/go.sum | 4 ++-- comp/serializer/compression/go.mod | 2 +- comp/serializer/compression/go.sum | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- pkg/api/go.mod | 2 +- pkg/api/go.sum | 4 ++-- pkg/config/env/go.mod | 2 +- pkg/config/env/go.sum | 4 ++-- pkg/config/mock/go.mod | 2 +- pkg/config/mock/go.sum | 4 ++-- pkg/config/model/go.mod | 2 +- pkg/config/model/go.sum | 4 ++-- pkg/config/nodetreemodel/go.mod | 2 +- pkg/config/nodetreemodel/go.sum | 4 ++-- pkg/config/remote/go.mod | 2 +- pkg/config/remote/go.sum | 4 ++-- pkg/config/setup/go.mod | 2 +- pkg/config/setup/go.sum | 4 ++-- pkg/config/structure/go.mod | 2 +- pkg/config/structure/go.sum | 4 ++-- pkg/config/teeconfig/go.mod | 2 +- pkg/config/teeconfig/go.sum | 4 ++-- pkg/config/utils/go.mod | 2 +- pkg/config/utils/go.sum | 4 ++-- pkg/logs/auditor/go.mod | 2 +- pkg/logs/auditor/go.sum | 4 ++-- pkg/logs/client/go.mod | 2 +- pkg/logs/client/go.sum | 4 ++-- pkg/logs/diagnostic/go.mod | 2 +- pkg/logs/diagnostic/go.sum | 4 ++-- pkg/logs/message/go.mod | 2 +- pkg/logs/message/go.sum | 4 ++-- pkg/logs/pipeline/go.mod | 2 +- pkg/logs/pipeline/go.sum | 4 ++-- pkg/logs/processor/go.mod | 2 +- pkg/logs/processor/go.sum | 4 ++-- pkg/logs/sds/go.mod | 2 +- pkg/logs/sds/go.sum | 4 ++-- pkg/logs/sender/go.mod | 2 +- pkg/logs/sender/go.sum | 4 ++-- pkg/logs/sources/go.mod | 2 +- pkg/logs/sources/go.sum | 4 ++-- pkg/logs/util/testutils/go.mod | 2 +- pkg/logs/util/testutils/go.sum | 4 ++-- pkg/metrics/go.mod | 2 +- pkg/metrics/go.sum | 4 ++-- pkg/serializer/go.mod | 2 +- pkg/serializer/go.sum | 4 ++-- pkg/util/flavor/go.mod | 2 +- pkg/util/flavor/go.sum | 4 ++-- pkg/util/grpc/go.mod | 2 +- pkg/util/grpc/go.sum | 4 ++-- pkg/util/http/go.mod | 2 +- pkg/util/http/go.sum | 4 ++-- pkg/util/log/setup/go.mod | 2 +- pkg/util/log/setup/go.sum | 4 ++-- test/otel/go.mod | 2 +- test/otel/go.sum | 4 ++-- 92 files changed, 138 insertions(+), 138 deletions(-) diff --git a/comp/api/authtoken/go.mod b/comp/api/authtoken/go.mod index e727e718a6054..6bf63f57e855b 100644 --- a/comp/api/authtoken/go.mod +++ b/comp/api/authtoken/go.mod @@ -76,7 +76,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/comp/api/authtoken/go.sum b/comp/api/authtoken/go.sum index dc0ab4305d421..e3973187c6caa 100644 --- a/comp/api/authtoken/go.sum +++ b/comp/api/authtoken/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/comp/core/config/go.mod b/comp/core/config/go.mod index 2d3997d7f778b..42ae3495ec40c 100644 --- a/comp/core/config/go.mod +++ b/comp/core/config/go.mod @@ -43,7 +43,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 - github.com/DataDog/viper v1.13.5 + github.com/DataDog/viper v1.14.0 github.com/stretchr/testify v1.10.0 go.uber.org/fx v1.23.0 ) diff --git a/comp/core/config/go.sum b/comp/core/config/go.sum index 72766499eff8d..def69bbe0b7b4 100644 --- a/comp/core/config/go.sum +++ b/comp/core/config/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/comp/core/log/impl-trace/go.mod b/comp/core/log/impl-trace/go.mod index bf2f0e158a0b0..1b107db1db8ee 100644 --- a/comp/core/log/impl-trace/go.mod +++ b/comp/core/log/impl-trace/go.mod @@ -77,7 +77,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/ebitengine/purego v0.8.1 // indirect diff --git a/comp/core/log/impl-trace/go.sum b/comp/core/log/impl-trace/go.sum index dc0ab4305d421..e3973187c6caa 100644 --- a/comp/core/log/impl-trace/go.sum +++ b/comp/core/log/impl-trace/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/comp/core/log/impl/go.mod b/comp/core/log/impl/go.mod index 8ed4ca6c7fef9..e6db1f6b650ff 100644 --- a/comp/core/log/impl/go.mod +++ b/comp/core/log/impl/go.mod @@ -66,7 +66,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/comp/core/log/impl/go.sum b/comp/core/log/impl/go.sum index dc0ab4305d421..e3973187c6caa 100644 --- a/comp/core/log/impl/go.sum +++ b/comp/core/log/impl/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/comp/core/log/mock/go.mod b/comp/core/log/mock/go.mod index 6bf266c22d51d..9f9b990745843 100644 --- a/comp/core/log/mock/go.mod +++ b/comp/core/log/mock/go.mod @@ -41,7 +41,7 @@ require ( github.com/DataDog/datadog-agent/pkg/config/teeconfig v0.60.0-devel // indirect github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect diff --git a/comp/core/log/mock/go.sum b/comp/core/log/mock/go.sum index 430d4ba766a61..be954babd5c73 100644 --- a/comp/core/log/mock/go.sum +++ b/comp/core/log/mock/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/comp/core/status/statusimpl/go.mod b/comp/core/status/statusimpl/go.mod index 2f55879031d33..78738479544c0 100644 --- a/comp/core/status/statusimpl/go.mod +++ b/comp/core/status/statusimpl/go.mod @@ -78,7 +78,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/comp/core/status/statusimpl/go.sum b/comp/core/status/statusimpl/go.sum index dba3ab3934aa2..650216cc0ce50 100644 --- a/comp/core/status/statusimpl/go.sum +++ b/comp/core/status/statusimpl/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/comp/forwarder/defaultforwarder/go.mod b/comp/forwarder/defaultforwarder/go.mod index 41c6273f20aa8..05d96eab4fbcf 100644 --- a/comp/forwarder/defaultforwarder/go.mod +++ b/comp/forwarder/defaultforwarder/go.mod @@ -100,7 +100,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect diff --git a/comp/forwarder/defaultforwarder/go.sum b/comp/forwarder/defaultforwarder/go.sum index 744cfff2ec136..e668380b7ef00 100644 --- a/comp/forwarder/defaultforwarder/go.sum +++ b/comp/forwarder/defaultforwarder/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/comp/forwarder/orchestrator/orchestratorinterface/go.mod b/comp/forwarder/orchestrator/orchestratorinterface/go.mod index 29dcff0c8c429..cb7b6044aeca0 100644 --- a/comp/forwarder/orchestrator/orchestratorinterface/go.mod +++ b/comp/forwarder/orchestrator/orchestratorinterface/go.mod @@ -102,7 +102,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect diff --git a/comp/forwarder/orchestrator/orchestratorinterface/go.sum b/comp/forwarder/orchestrator/orchestratorinterface/go.sum index 23a50467e927d..49efb0a3efaf4 100644 --- a/comp/forwarder/orchestrator/orchestratorinterface/go.sum +++ b/comp/forwarder/orchestrator/orchestratorinterface/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/cast v1.8.0 h1:uooY8bMzq+cjgiNP1VTquCWve5emgk8fRspZojJwQa8= github.com/DataDog/cast v1.8.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/comp/logs/agent/config/go.mod b/comp/logs/agent/config/go.mod index 1c98c4cbf92f8..c8360536b53c1 100644 --- a/comp/logs/agent/config/go.mod +++ b/comp/logs/agent/config/go.mod @@ -45,7 +45,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/fxutil v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 - github.com/DataDog/viper v1.13.5 + github.com/DataDog/viper v1.14.0 github.com/stretchr/testify v1.10.0 go.uber.org/fx v1.23.0 ) diff --git a/comp/logs/agent/config/go.sum b/comp/logs/agent/config/go.sum index dc0ab4305d421..e3973187c6caa 100644 --- a/comp/logs/agent/config/go.sum +++ b/comp/logs/agent/config/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/comp/otelcol/converter/impl/go.mod b/comp/otelcol/converter/impl/go.mod index 31c49f2e1381b..8b903df1c03a1 100644 --- a/comp/otelcol/converter/impl/go.mod +++ b/comp/otelcol/converter/impl/go.mod @@ -77,7 +77,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/comp/otelcol/converter/impl/go.sum b/comp/otelcol/converter/impl/go.sum index b97062bfa5313..f3a0f24d8dbe0 100644 --- a/comp/otelcol/converter/impl/go.sum +++ b/comp/otelcol/converter/impl/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/comp/otelcol/ddflareextension/impl/go.mod b/comp/otelcol/ddflareextension/impl/go.mod index 6422371da2f2c..aff23ccf9501f 100644 --- a/comp/otelcol/ddflareextension/impl/go.mod +++ b/comp/otelcol/ddflareextension/impl/go.mod @@ -273,7 +273,7 @@ require ( github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0 // indirect github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/DataDog/zstd v1.5.6 // indirect github.com/DataDog/zstd_0 v0.0.0-20210310093942-586c1286621f // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/comp/otelcol/ddflareextension/impl/go.sum b/comp/otelcol/ddflareextension/impl/go.sum index 7dd61c4dad8ad..be1b5d78f453d 100644 --- a/comp/otelcol/ddflareextension/impl/go.sum +++ b/comp/otelcol/ddflareextension/impl/go.sum @@ -92,8 +92,8 @@ github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 h1:/Dp1WBvekdus github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0/go.mod h1:asNuwNy1O2HbadkcZVuqmFGonfEzXS/SBvOo8V1MJvQ= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/DataDog/zstd_0 v0.0.0-20210310093942-586c1286621f h1:5Vuo4niPKFkfwW55jV4vY0ih3VQ9RaQqeqY67fvRn8A= diff --git a/comp/otelcol/logsagentpipeline/go.mod b/comp/otelcol/logsagentpipeline/go.mod index d3347ab6c6669..603e8abcce366 100644 --- a/comp/otelcol/logsagentpipeline/go.mod +++ b/comp/otelcol/logsagentpipeline/go.mod @@ -107,7 +107,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/benbjohnson/clock v1.3.5 // indirect github.com/beorn7/perks v1.0.1 // indirect diff --git a/comp/otelcol/logsagentpipeline/go.sum b/comp/otelcol/logsagentpipeline/go.sum index 920238d6c8024..0816ff6b27cb5 100644 --- a/comp/otelcol/logsagentpipeline/go.sum +++ b/comp/otelcol/logsagentpipeline/go.sum @@ -4,8 +4,8 @@ github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytlju github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 h1:RoH7VLzTnxHEugRPIgnGlxwDFszFGI7b3WZZUtWuPRM= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42/go.mod h1:TX7CTOQ3LbQjfAi4SwqUoR5gY1zfUk7VRBDTuArjaDc= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod index e76cecb0f1e19..a21412d390c1b 100644 --- a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod +++ b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod @@ -122,7 +122,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/benbjohnson/clock v1.3.5 // indirect github.com/beorn7/perks v1.0.1 // indirect diff --git a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum index 920238d6c8024..0816ff6b27cb5 100644 --- a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum +++ b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum @@ -4,8 +4,8 @@ github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytlju github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 h1:RoH7VLzTnxHEugRPIgnGlxwDFszFGI7b3WZZUtWuPRM= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42/go.mod h1:TX7CTOQ3LbQjfAi4SwqUoR5gY1zfUk7VRBDTuArjaDc= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod index f84cdc77b7d5d..5f275b6f0bb73 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod @@ -205,7 +205,7 @@ require ( github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0 // indirect github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/DataDog/zstd v1.5.6 // indirect github.com/DataDog/zstd_0 v0.0.0-20210310093942-586c1286621f // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum index f8b034bc6c73e..fc769d52cb6f5 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum @@ -28,8 +28,8 @@ github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 h1:/Dp1WBvekdus github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0/go.mod h1:asNuwNy1O2HbadkcZVuqmFGonfEzXS/SBvOo8V1MJvQ= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/DataDog/zstd_0 v0.0.0-20210310093942-586c1286621f h1:5Vuo4niPKFkfwW55jV4vY0ih3VQ9RaQqeqY67fvRn8A= diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod index a1f756dc64c47..94fee13bbfe24 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod @@ -93,7 +93,7 @@ require ( github.com/DataDog/datadog-api-client-go/v2 v2.31.0 // indirect github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/DataDog/zstd v1.5.6 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/briandowns/spinner v1.23.0 // indirect diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum index 88d5e3656f78f..4798a24352a51 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum @@ -10,8 +10,8 @@ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0 h1:XD9Kd+baO66 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0/go.mod h1:9ByLz9jISc176DzjIdaRfRKwaitqF8ie6RTvfP8Aufo= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod index 00bd83d7866ec..f767ab1daffe5 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod @@ -137,7 +137,7 @@ require ( github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/DataDog/zstd v1.5.6 // indirect github.com/DataDog/zstd_0 v0.0.0-20210310093942-586c1286621f // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum index 03bd78609ead8..b2344c6db0ff7 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum @@ -14,8 +14,8 @@ github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 h1:/Dp1WBvekdus github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0/go.mod h1:asNuwNy1O2HbadkcZVuqmFGonfEzXS/SBvOo8V1MJvQ= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/DataDog/zstd_0 v0.0.0-20210310093942-586c1286621f h1:5Vuo4niPKFkfwW55jV4vY0ih3VQ9RaQqeqY67fvRn8A= diff --git a/comp/otelcol/otlp/testutil/go.mod b/comp/otelcol/otlp/testutil/go.mod index f93da83f2c03d..ebc99a3dd4da4 100644 --- a/comp/otelcol/otlp/testutil/go.mod +++ b/comp/otelcol/otlp/testutil/go.mod @@ -63,7 +63,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/comp/otelcol/otlp/testutil/go.sum b/comp/otelcol/otlp/testutil/go.sum index 173f120daf80f..b4642ab1ea7f1 100644 --- a/comp/otelcol/otlp/testutil/go.sum +++ b/comp/otelcol/otlp/testutil/go.sum @@ -6,8 +6,8 @@ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 h1:hgbTF github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/comp/serializer/compression/go.mod b/comp/serializer/compression/go.mod index a96150a98b2c6..7540d0254c299 100644 --- a/comp/serializer/compression/go.mod +++ b/comp/serializer/compression/go.mod @@ -63,7 +63,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/comp/serializer/compression/go.sum b/comp/serializer/compression/go.sum index 82cfdd5791b99..47b6f74242930 100644 --- a/comp/serializer/compression/go.sum +++ b/comp/serializer/compression/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= diff --git a/go.mod b/go.mod index 510771137b673..a0b1c786a0280 100644 --- a/go.mod +++ b/go.mod @@ -166,7 +166,7 @@ require ( github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0 github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 github.com/DataDog/sketches-go v1.4.6 - github.com/DataDog/viper v1.13.5 + github.com/DataDog/viper v1.14.0 github.com/DataDog/watermarkpodautoscaler v0.5.3-0.20241023200123-ab786c1724cf github.com/DataDog/zstd v1.5.6 github.com/DataDog/zstd_0 v0.0.0-20210310093942-586c1286621f // indirect diff --git a/go.sum b/go.sum index bf22e29643077..eff56174f57ba 100644 --- a/go.sum +++ b/go.sum @@ -176,8 +176,8 @@ github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vH github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/trivy v0.0.0-20241126101205-8517f9b946f4 h1:UVL5oU/8o0JhEv8Js6qxJgiqeV+PzPw/aldojyexS/U= github.com/DataDog/trivy v0.0.0-20241126101205-8517f9b946f4/go.mod h1:hLiUAm3v175M5jWbq34TdGmX6mvHIJY7FMuZ3wBugtw= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/DataDog/walker v0.0.0-20230418153152-7f29bb2dc950 h1:2imDajw3V85w1iqHsuXN+hUBZQVF+r9eME8tsPq/HpA= github.com/DataDog/walker v0.0.0-20230418153152-7f29bb2dc950/go.mod h1:FU+7qU8DeQQgSZDmmThMJi93kPkLFgy0oVAcLxurjIk= github.com/DataDog/watermarkpodautoscaler v0.5.3-0.20241023200123-ab786c1724cf h1:nbsZ9srTWTTlHzWDGkVE6R5hnqENXTK9N8doMC2YPps= diff --git a/pkg/api/go.mod b/pkg/api/go.mod index 1ee4065b68545..cc581a79c93ff 100644 --- a/pkg/api/go.mod +++ b/pkg/api/go.mod @@ -68,7 +68,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/pkg/api/go.sum b/pkg/api/go.sum index dc0ab4305d421..e3973187c6caa 100644 --- a/pkg/api/go.sum +++ b/pkg/api/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/config/env/go.mod b/pkg/config/env/go.mod index c2fa1454d2fee..34b158b27e106 100644 --- a/pkg/config/env/go.mod +++ b/pkg/config/env/go.mod @@ -23,7 +23,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/pkg/config/env/go.sum b/pkg/config/env/go.sum index 3714c29c49041..55897bd029c82 100644 --- a/pkg/config/env/go.sum +++ b/pkg/config/env/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/config/mock/go.mod b/pkg/config/mock/go.mod index 60543231cb311..a358e04841b8b 100644 --- a/pkg/config/mock/go.mod +++ b/pkg/config/mock/go.mod @@ -53,7 +53,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/pkg/config/mock/go.sum b/pkg/config/mock/go.sum index fc14fcc51ad7e..6df24d44986c1 100644 --- a/pkg/config/mock/go.sum +++ b/pkg/config/mock/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/config/model/go.mod b/pkg/config/model/go.mod index 7f648a0c2076c..4fb2df929ebac 100644 --- a/pkg/config/model/go.mod +++ b/pkg/config/model/go.mod @@ -11,7 +11,7 @@ replace ( require ( github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 - github.com/DataDog/viper v1.13.5 + github.com/DataDog/viper v1.14.0 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 github.com/stretchr/testify v1.10.0 golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f diff --git a/pkg/config/model/go.sum b/pkg/config/model/go.sum index ddbfab1c363b2..7b03b89cac861 100644 --- a/pkg/config/model/go.sum +++ b/pkg/config/model/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= diff --git a/pkg/config/nodetreemodel/go.mod b/pkg/config/nodetreemodel/go.mod index fddf0197843dc..de9da422721ad 100644 --- a/pkg/config/nodetreemodel/go.mod +++ b/pkg/config/nodetreemodel/go.mod @@ -14,7 +14,7 @@ replace github.com/spf13/cast => github.com/DataDog/cast v1.8.0 require ( github.com/DataDog/datadog-agent/pkg/config/model v0.0.0-00010101000000-000000000000 github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 - github.com/DataDog/viper v1.13.5 + github.com/DataDog/viper v1.14.0 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 github.com/spf13/cast v1.7.0 github.com/stretchr/testify v1.10.0 diff --git a/pkg/config/nodetreemodel/go.sum b/pkg/config/nodetreemodel/go.sum index e896db4ce9103..ebb19c16de189 100644 --- a/pkg/config/nodetreemodel/go.sum +++ b/pkg/config/nodetreemodel/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/cast v1.8.0 h1:uooY8bMzq+cjgiNP1VTquCWve5emgk8fRspZojJwQa8= github.com/DataDog/cast v1.8.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= diff --git a/pkg/config/remote/go.mod b/pkg/config/remote/go.mod index 1e2695599a4ca..418e2f017f81d 100644 --- a/pkg/config/remote/go.mod +++ b/pkg/config/remote/go.mod @@ -122,7 +122,7 @@ require ( require ( github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 // indirect github.com/DataDog/go-tuf v1.1.0-0.5.2 - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect diff --git a/pkg/config/remote/go.sum b/pkg/config/remote/go.sum index eb4fa22065545..fa403bade18cb 100644 --- a/pkg/config/remote/go.sum +++ b/pkg/config/remote/go.sum @@ -19,8 +19,8 @@ github.com/DataDog/gostackparse v0.7.0 h1:i7dLkXHvYzHV308hnkvVGDL3BR4FWl7IsXNPz/ github.com/DataDog/gostackparse v0.7.0/go.mod h1:lTfqcJKqS9KnXQGnyQMCugq3u1FP6UZMfWR0aitKFMM= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= diff --git a/pkg/config/setup/go.mod b/pkg/config/setup/go.mod index 0fc0b943272aa..c02d710d51f13 100644 --- a/pkg/config/setup/go.mod +++ b/pkg/config/setup/go.mod @@ -63,7 +63,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect diff --git a/pkg/config/setup/go.sum b/pkg/config/setup/go.sum index 8f0854bbfc0b9..18e09a82750bb 100644 --- a/pkg/config/setup/go.sum +++ b/pkg/config/setup/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/cast v1.8.0 h1:uooY8bMzq+cjgiNP1VTquCWve5emgk8fRspZojJwQa8= github.com/DataDog/cast v1.8.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/config/structure/go.mod b/pkg/config/structure/go.mod index 6f87e72960ea6..83c57b35c79fd 100644 --- a/pkg/config/structure/go.mod +++ b/pkg/config/structure/go.mod @@ -36,7 +36,7 @@ replace github.com/spf13/cast => github.com/DataDog/cast v1.8.0 require ( github.com/DataDog/datadog-agent/pkg/config/model v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/config/nodetreemodel v0.0.0-00010101000000-000000000000 - github.com/DataDog/viper v1.13.5 + github.com/DataDog/viper v1.14.0 github.com/spf13/cast v1.7.0 github.com/stretchr/testify v1.10.0 ) diff --git a/pkg/config/structure/go.sum b/pkg/config/structure/go.sum index e896db4ce9103..ebb19c16de189 100644 --- a/pkg/config/structure/go.sum +++ b/pkg/config/structure/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/cast v1.8.0 h1:uooY8bMzq+cjgiNP1VTquCWve5emgk8fRspZojJwQa8= github.com/DataDog/cast v1.8.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= diff --git a/pkg/config/teeconfig/go.mod b/pkg/config/teeconfig/go.mod index c65facf0b1e58..7644391c8d1bf 100644 --- a/pkg/config/teeconfig/go.mod +++ b/pkg/config/teeconfig/go.mod @@ -11,7 +11,7 @@ replace ( require ( github.com/DataDog/datadog-agent/pkg/config/model v0.0.0-00010101000000-000000000000 github.com/DataDog/datadog-agent/pkg/util/log v0.56.0-rc.3 - github.com/DataDog/viper v1.13.5 + github.com/DataDog/viper v1.14.0 ) require ( diff --git a/pkg/config/teeconfig/go.sum b/pkg/config/teeconfig/go.sum index ddbfab1c363b2..7b03b89cac861 100644 --- a/pkg/config/teeconfig/go.sum +++ b/pkg/config/teeconfig/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= diff --git a/pkg/config/utils/go.mod b/pkg/config/utils/go.mod index 3894ed026ecc5..d8f776a5d5ebd 100644 --- a/pkg/config/utils/go.mod +++ b/pkg/config/utils/go.mod @@ -58,7 +58,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/pkg/config/utils/go.sum b/pkg/config/utils/go.sum index fc14fcc51ad7e..6df24d44986c1 100644 --- a/pkg/config/utils/go.sum +++ b/pkg/config/utils/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/logs/auditor/go.mod b/pkg/logs/auditor/go.mod index 56b528a2ff3d4..d375aa6e7038d 100644 --- a/pkg/logs/auditor/go.mod +++ b/pkg/logs/auditor/go.mod @@ -72,7 +72,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/pkg/logs/auditor/go.sum b/pkg/logs/auditor/go.sum index fc14fcc51ad7e..6df24d44986c1 100644 --- a/pkg/logs/auditor/go.sum +++ b/pkg/logs/auditor/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/logs/client/go.mod b/pkg/logs/client/go.mod index a19f07054482e..8ca05dfb2f632 100644 --- a/pkg/logs/client/go.mod +++ b/pkg/logs/client/go.mod @@ -89,7 +89,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/benbjohnson/clock v1.3.5 // indirect github.com/beorn7/perks v1.0.1 // indirect diff --git a/pkg/logs/client/go.sum b/pkg/logs/client/go.sum index 30b75d8cb57df..65b369f190875 100644 --- a/pkg/logs/client/go.sum +++ b/pkg/logs/client/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/logs/diagnostic/go.mod b/pkg/logs/diagnostic/go.mod index 5b5fbaf9df94f..b8ef753620e44 100644 --- a/pkg/logs/diagnostic/go.mod +++ b/pkg/logs/diagnostic/go.mod @@ -76,7 +76,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/pkg/logs/diagnostic/go.sum b/pkg/logs/diagnostic/go.sum index dc0ab4305d421..e3973187c6caa 100644 --- a/pkg/logs/diagnostic/go.sum +++ b/pkg/logs/diagnostic/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/logs/message/go.mod b/pkg/logs/message/go.mod index 2a031a302ff66..463f6366031f4 100644 --- a/pkg/logs/message/go.mod +++ b/pkg/logs/message/go.mod @@ -68,7 +68,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/pkg/logs/message/go.sum b/pkg/logs/message/go.sum index fc14fcc51ad7e..6df24d44986c1 100644 --- a/pkg/logs/message/go.sum +++ b/pkg/logs/message/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/logs/pipeline/go.mod b/pkg/logs/pipeline/go.mod index 2802d7256f594..8b584b5b1aa03 100644 --- a/pkg/logs/pipeline/go.mod +++ b/pkg/logs/pipeline/go.mod @@ -107,7 +107,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/benbjohnson/clock v1.3.5 // indirect github.com/beorn7/perks v1.0.1 // indirect diff --git a/pkg/logs/pipeline/go.sum b/pkg/logs/pipeline/go.sum index 920238d6c8024..0816ff6b27cb5 100644 --- a/pkg/logs/pipeline/go.sum +++ b/pkg/logs/pipeline/go.sum @@ -4,8 +4,8 @@ github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytlju github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 h1:RoH7VLzTnxHEugRPIgnGlxwDFszFGI7b3WZZUtWuPRM= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42/go.mod h1:TX7CTOQ3LbQjfAi4SwqUoR5gY1zfUk7VRBDTuArjaDc= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/logs/processor/go.mod b/pkg/logs/processor/go.mod index 699fe4e8ad518..ffa047656aa16 100644 --- a/pkg/logs/processor/go.mod +++ b/pkg/logs/processor/go.mod @@ -87,7 +87,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/benbjohnson/clock v1.3.5 // indirect github.com/beorn7/perks v1.0.1 // indirect diff --git a/pkg/logs/processor/go.sum b/pkg/logs/processor/go.sum index 09e7a690fdf60..df30b2959c6d8 100644 --- a/pkg/logs/processor/go.sum +++ b/pkg/logs/processor/go.sum @@ -4,8 +4,8 @@ github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytlju github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 h1:RoH7VLzTnxHEugRPIgnGlxwDFszFGI7b3WZZUtWuPRM= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42/go.mod h1:TX7CTOQ3LbQjfAi4SwqUoR5gY1zfUk7VRBDTuArjaDc= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/logs/sds/go.mod b/pkg/logs/sds/go.mod index a0d137977450b..71861e9789dd6 100644 --- a/pkg/logs/sds/go.mod +++ b/pkg/logs/sds/go.mod @@ -83,7 +83,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect diff --git a/pkg/logs/sds/go.sum b/pkg/logs/sds/go.sum index e23451e060e85..ba2765ae6cc8c 100644 --- a/pkg/logs/sds/go.sum +++ b/pkg/logs/sds/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 h1:RoH7VLzTnxHEugRPIgnGlxwDFszFGI7b3WZZUtWuPRM= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42/go.mod h1:TX7CTOQ3LbQjfAi4SwqUoR5gY1zfUk7VRBDTuArjaDc= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/logs/sender/go.mod b/pkg/logs/sender/go.mod index b769f58828d16..c6222c7c0214c 100644 --- a/pkg/logs/sender/go.mod +++ b/pkg/logs/sender/go.mod @@ -90,7 +90,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect diff --git a/pkg/logs/sender/go.sum b/pkg/logs/sender/go.sum index 30b75d8cb57df..65b369f190875 100644 --- a/pkg/logs/sender/go.sum +++ b/pkg/logs/sender/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/logs/sources/go.mod b/pkg/logs/sources/go.mod index 2e7aaed02aad4..736839618c355 100644 --- a/pkg/logs/sources/go.mod +++ b/pkg/logs/sources/go.mod @@ -66,7 +66,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/pkg/logs/sources/go.sum b/pkg/logs/sources/go.sum index fc14fcc51ad7e..6df24d44986c1 100644 --- a/pkg/logs/sources/go.sum +++ b/pkg/logs/sources/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/logs/util/testutils/go.mod b/pkg/logs/util/testutils/go.mod index 1669f7f2029b8..6c8ce3a26dae3 100644 --- a/pkg/logs/util/testutils/go.mod +++ b/pkg/logs/util/testutils/go.mod @@ -67,7 +67,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/ebitengine/purego v0.8.1 // indirect diff --git a/pkg/logs/util/testutils/go.sum b/pkg/logs/util/testutils/go.sum index fc14fcc51ad7e..6df24d44986c1 100644 --- a/pkg/logs/util/testutils/go.sum +++ b/pkg/logs/util/testutils/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/metrics/go.mod b/pkg/metrics/go.mod index 3e1a7d68759a6..e506cd41e855c 100644 --- a/pkg/metrics/go.mod +++ b/pkg/metrics/go.mod @@ -74,7 +74,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect diff --git a/pkg/metrics/go.sum b/pkg/metrics/go.sum index 245b5a427d4a7..6316d64a4973c 100644 --- a/pkg/metrics/go.sum +++ b/pkg/metrics/go.sum @@ -6,8 +6,8 @@ github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 h1:/Dp1WBvekdus github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0/go.mod h1:asNuwNy1O2HbadkcZVuqmFGonfEzXS/SBvOo8V1MJvQ= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/serializer/go.mod b/pkg/serializer/go.mod index 4b5e86e94590c..545b645414136 100644 --- a/pkg/serializer/go.mod +++ b/pkg/serializer/go.mod @@ -123,7 +123,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/DataDog/zstd v1.5.6 // indirect github.com/DataDog/zstd_0 v0.0.0-20210310093942-586c1286621f // indirect github.com/Microsoft/go-winio v0.6.2 // indirect diff --git a/pkg/serializer/go.sum b/pkg/serializer/go.sum index de83965cdf01f..74a1c5f4717db 100644 --- a/pkg/serializer/go.sum +++ b/pkg/serializer/go.sum @@ -10,8 +10,8 @@ github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 h1:/Dp1WBvekdus github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0/go.mod h1:asNuwNy1O2HbadkcZVuqmFGonfEzXS/SBvOo8V1MJvQ= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/DataDog/zstd_0 v0.0.0-20210310093942-586c1286621f h1:5Vuo4niPKFkfwW55jV4vY0ih3VQ9RaQqeqY67fvRn8A= diff --git a/pkg/util/flavor/go.mod b/pkg/util/flavor/go.mod index 2b3a00706f758..b4cde61713931 100644 --- a/pkg/util/flavor/go.mod +++ b/pkg/util/flavor/go.mod @@ -54,7 +54,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/pkg/util/flavor/go.sum b/pkg/util/flavor/go.sum index fc14fcc51ad7e..6df24d44986c1 100644 --- a/pkg/util/flavor/go.sum +++ b/pkg/util/flavor/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/util/grpc/go.mod b/pkg/util/grpc/go.mod index b2b70c55bbeb2..977343bfe3c4d 100644 --- a/pkg/util/grpc/go.mod +++ b/pkg/util/grpc/go.mod @@ -65,7 +65,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/pkg/util/grpc/go.sum b/pkg/util/grpc/go.sum index 1ca8e8dc8a8df..6467120987601 100644 --- a/pkg/util/grpc/go.sum +++ b/pkg/util/grpc/go.sum @@ -3,8 +3,8 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo= cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/util/http/go.mod b/pkg/util/http/go.mod index abb2860789433..39e32393df50d 100644 --- a/pkg/util/http/go.mod +++ b/pkg/util/http/go.mod @@ -56,7 +56,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect diff --git a/pkg/util/http/go.sum b/pkg/util/http/go.sum index 60bade5a7db31..d2f68d6435b82 100644 --- a/pkg/util/http/go.sum +++ b/pkg/util/http/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/pkg/util/log/setup/go.mod b/pkg/util/log/setup/go.mod index 74ca271074423..f865653e53d51 100644 --- a/pkg/util/log/setup/go.mod +++ b/pkg/util/log/setup/go.mod @@ -56,7 +56,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/ebitengine/purego v0.8.1 // indirect diff --git a/pkg/util/log/setup/go.sum b/pkg/util/log/setup/go.sum index fc14fcc51ad7e..6df24d44986c1 100644 --- a/pkg/util/log/setup/go.sum +++ b/pkg/util/log/setup/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= diff --git a/test/otel/go.mod b/test/otel/go.mod index 81bc6ea692e7b..3bb758c1620d7 100644 --- a/test/otel/go.mod +++ b/test/otel/go.mod @@ -182,7 +182,7 @@ require ( github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 // indirect github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect - github.com/DataDog/viper v1.13.5 // indirect + github.com/DataDog/viper v1.14.0 // indirect github.com/DataDog/zstd v1.5.6 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/benbjohnson/clock v1.3.5 // indirect diff --git a/test/otel/go.sum b/test/otel/go.sum index 3637c4f1bd224..2fcc58afcf90e 100644 --- a/test/otel/go.sum +++ b/test/otel/go.sum @@ -26,8 +26,8 @@ github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 h1:/Dp1WBvekdus github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0/go.mod h1:asNuwNy1O2HbadkcZVuqmFGonfEzXS/SBvOo8V1MJvQ= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= -github.com/DataDog/viper v1.13.5 h1:SZMcyMknYQN2jRY/40A16gUXexlNJOI8sDs1cWZnI64= -github.com/DataDog/viper v1.13.5/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= +github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= +github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= From 9e01e492d350a4b46e1e8db29153f6c4b10650bd Mon Sep 17 00:00:00 2001 From: Dustin Long Date: Thu, 12 Dec 2024 14:45:01 +0100 Subject: [PATCH 159/303] Implement MergeFleetPolicy for nodetreemodel (#31961) --- .golangci.yml | 2 - pkg/config/nodetreemodel/config.go | 21 ++++--- pkg/config/nodetreemodel/config_test.go | 17 ++++++ pkg/config/nodetreemodel/read_config_file.go | 64 +++++++++----------- 4 files changed, 57 insertions(+), 47 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 320c25ce206a7..ece414c77fc1b 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -18,8 +18,6 @@ issues: exclude: - "Error return value of `io.WriteString` is not checked" # 'errcheck' errors in tools/dep_tree_resolver/go_deps.go - "Error return value of `pem.Encode` is not checked" # 'errcheck' errors in test/integration/utils/certificates.go - - "Error return value of `c.logErrorNotImplemented` is not checked" # 'errcheck' errors in pkg/config/nodetreemodel/config.go - - "Error return value of `n.logErrorNotImplemented` is not checked" # 'errcheck' errors in pkg/config/nodetreemodel/config.go - "exported: exported const Exec should have comment \\(or a comment on this block\\) or be unexported" # 'revive' errors in pkg/process/events/model/model_common.go - "exported: exported const APIName should have comment \\(or a comment on this block\\) or be unexported" # 'revive' errors in pkg/serverless/trace/inferredspan/constants.go - "unnecessary conversion" # 'unconvert' errors in test/integration/utils/certificates_test.go diff --git a/pkg/config/nodetreemodel/config.go b/pkg/config/nodetreemodel/config.go index e2f6c4b8f7139..e9854f1db99d1 100644 --- a/pkg/config/nodetreemodel/config.go +++ b/pkg/config/nodetreemodel/config.go @@ -128,12 +128,6 @@ type NodeTreeConfig interface { GetNode(string) (Node, error) } -func (c *ntmConfig) logErrorNotImplemented(method string) error { - err := fmt.Errorf("not implemented: %s", method) - log.Error(err) - return err -} - // OnUpdate adds a callback to the list of receivers to be called each time a value is changed in the configuration // by a call to the 'Set' method. // Callbacks are only called if the value is effectively changed. @@ -634,7 +628,7 @@ func (c *ntmConfig) MergeConfig(in io.Reader) error { } other := newInnerNode(nil) - if err = c.readConfigurationContent(other, content); err != nil { + if err = c.readConfigurationContent(other, model.SourceFile, content); err != nil { return err } @@ -663,8 +657,17 @@ func (c *ntmConfig) MergeFleetPolicy(configPath string) error { } defer in.Close() - // TODO: Implement merging, merge in the policy that was read - return c.logErrorNotImplemented("MergeFleetPolicy") + content, err := io.ReadAll(in) + if err != nil { + return err + } + + other := newInnerNode(nil) + if err = c.readConfigurationContent(other, model.SourceFleetPolicies, content); err != nil { + return err + } + + return c.root.Merge(other) } // AllSettings returns all settings from the config diff --git a/pkg/config/nodetreemodel/config_test.go b/pkg/config/nodetreemodel/config_test.go index 4738b4e446767..0fbac128999c9 100644 --- a/pkg/config/nodetreemodel/config_test.go +++ b/pkg/config/nodetreemodel/config_test.go @@ -575,3 +575,20 @@ func TestUnsetForSource(t *testing.T) { val:4, source:default` assert.Equal(t, expect, txt) } + +func TestMergeFleetPolicy(t *testing.T) { + config := NewConfig("test", "TEST", strings.NewReplacer(".", "_")) // nolint: forbidigo + config.SetConfigType("yaml") + config.SetDefault("foo", "") + config.BuildSchema() + config.Set("foo", "bar", model.SourceFile) + + file, err := os.CreateTemp("", "datadog.yaml") + assert.NoError(t, err, "failed to create temporary file: %w", err) + file.Write([]byte("foo: baz")) + err = config.MergeFleetPolicy(file.Name()) + assert.NoError(t, err) + + assert.Equal(t, "baz", config.Get("foo")) + assert.Equal(t, model.SourceFleetPolicies, config.GetSource("foo")) +} diff --git a/pkg/config/nodetreemodel/read_config_file.go b/pkg/config/nodetreemodel/read_config_file.go index 8354a012376b0..e006d188ea794 100644 --- a/pkg/config/nodetreemodel/read_config_file.go +++ b/pkg/config/nodetreemodel/read_config_file.go @@ -67,7 +67,7 @@ func (c *ntmConfig) ReadConfig(in io.Reader) error { if err != nil { return err } - if err := c.readConfigurationContent(c.file, content); err != nil { + if err := c.readConfigurationContent(c.file, model.SourceFile, content); err != nil { return err } return c.mergeAllLayers() @@ -78,19 +78,19 @@ func (c *ntmConfig) readInConfig(filePath string) error { if err != nil { return err } - return c.readConfigurationContent(c.file, content) + return c.readConfigurationContent(c.file, model.SourceFile, content) } -func (c *ntmConfig) readConfigurationContent(target InnerNode, content []byte) error { - var obj map[string]interface{} +func (c *ntmConfig) readConfigurationContent(target InnerNode, source model.Source, content []byte) error { + var inData map[string]interface{} - if strictErr := yaml.UnmarshalStrict(content, &obj); strictErr != nil { + if strictErr := yaml.UnmarshalStrict(content, &inData); strictErr != nil { log.Errorf("warning reading config file: %v\n", strictErr) - if err := yaml.Unmarshal(content, &obj); err != nil { + if err := yaml.Unmarshal(content, &inData); err != nil { return err } } - c.warnings = append(c.warnings, loadYamlInto(c.schema, target, obj, "")...) + c.warnings = append(c.warnings, loadYamlInto(target, source, inData, "", c.schema)...) return nil } @@ -119,64 +119,56 @@ func toMapStringInterface(data any, path string) (map[string]interface{}, error) return nil, fmt.Errorf("invalid type from configuration for key '%s'", path) } -// loadYamlInto fetch the value for known setings and set them in a tree. The function returns a list of warning about -// unknown settings or invalid types from the YAML. -// -// The function traverses a object loaded from YAML, checking if each node is known within the configuration. -// If known, the value from the YAML blob is imported into the 'dest' tree. If unknown, a warning will be created. -func loadYamlInto(schema InnerNode, dest InnerNode, data map[string]interface{}, path string) []string { - if path != "" { - path = path + "." - } - +// loadYamlInto traverses input data parsed from YAML, checking if each node is defined by the schema. +// If found, the value from the YAML blob is imported into the 'dest' tree. Otherwise, a warning will be created. +func loadYamlInto(dest InnerNode, source model.Source, inData map[string]interface{}, atPath string, schema InnerNode) []string { warnings := []string{} - for key, value := range data { + for key, value := range inData { key = strings.ToLower(key) - curPath := path + key + currPath := joinKey(atPath, key) - // check if the key is know in the schema - schemaNode, err := schema.GetChild(key) + // check if the key is defined in the schema + schemaChild, err := schema.GetChild(key) if err != nil { - warnings = append(warnings, fmt.Sprintf("unknown key from YAML: %s", curPath)) + warnings = append(warnings, fmt.Sprintf("unknown key from YAML: %s", currPath)) continue } - // if the default is a leaf we create a new leaf in dest - if _, isLeaf := schemaNode.(LeafNode); isLeaf { - // check that dest don't have a inner leaf under that name + // if the node in the schema is a leaf, then we create a new leaf in dest + if _, isLeaf := schemaChild.(LeafNode); isLeaf { + // check that dest doesn't have a inner leaf under that name c, _ := dest.GetChild(key) if _, ok := c.(InnerNode); ok { // Both default and dest have a child but they conflict in type. This should never happen. warnings = append(warnings, "invalid tree: default and dest tree don't have the same layout") } else { - dest.InsertChildNode(key, newLeafNode(value, model.SourceFile)) + dest.InsertChildNode(key, newLeafNode(value, source)) } continue } + // by now we know schemaNode is an InnerNode + schemaInner, _ := schemaChild.(InnerNode) - mapString, err := toMapStringInterface(value, curPath) + childValue, err := toMapStringInterface(value, currPath) if err != nil { warnings = append(warnings, err.Error()) } - // by now we know schemaNode is an InnerNode - defaultNext, _ := schemaNode.(InnerNode) - if !dest.HasChild(key) { - destInner := newInnerNode(nil) - warnings = append(warnings, loadYamlInto(defaultNext, destInner, mapString, curPath)...) - dest.InsertChildNode(key, destInner) + destChildInner := newInnerNode(nil) + warnings = append(warnings, loadYamlInto(destChildInner, source, childValue, currPath, schemaInner)...) + dest.InsertChildNode(key, destChildInner) continue } - child, _ := dest.GetChild(key) - destChildInner, ok := child.(InnerNode) + destChild, _ := dest.GetChild(key) + destChildInner, ok := destChild.(InnerNode) if !ok { // Both default and dest have a child but they conflict in type. This should never happen. warnings = append(warnings, "invalid tree: default and dest tree don't have the same layout") continue } - warnings = append(warnings, loadYamlInto(defaultNext, destChildInner, mapString, curPath)...) + warnings = append(warnings, loadYamlInto(destChildInner, source, childValue, currPath, schemaInner)...) } return warnings } From 021ff675b936500389da4939165409df705db7b7 Mon Sep 17 00:00:00 2001 From: Baptiste Foy Date: Thu, 12 Dec 2024 14:55:54 +0100 Subject: [PATCH 160/303] feat(installer): Publish install scripts on installtesting.datad0g.com on success on main (#32084) --- .gitlab-ci.yml | 7 +++++++ .gitlab/JOBOWNERS | 4 ++-- .gitlab/e2e_install_packages/include.yml | 1 + .gitlab/e2e_install_packages/installer.yml | 15 +++++++++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 .gitlab/e2e_install_packages/installer.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 67afb78dc55d8..38a0cde349fc8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -282,6 +282,9 @@ variables: .if_main_branch: &if_main_branch if: $CI_COMMIT_BRANCH == "main" +.if_not_main_branch: &if_not_main_branch + if: $CI_COMMIT_BRANCH != "main" + .if_release_branch: &if_release_branch if: $CI_COMMIT_BRANCH =~ /^[0-9]+\.[0-9]+\.x$/ @@ -628,6 +631,10 @@ workflow: variables: FAST_TESTS: "true" +.only_main: + - <<: *if_not_main_branch + when: never + .except_main_or_release_branch: - <<: *if_main_branch when: never diff --git a/.gitlab/JOBOWNERS b/.gitlab/JOBOWNERS index 361807d382218..e03f28a2d537d 100644 --- a/.gitlab/JOBOWNERS +++ b/.gitlab/JOBOWNERS @@ -114,9 +114,9 @@ deploy_packages* @DataDog/agent-delivery deploy_staging* @DataDog/agent-delivery publish_winget* @DataDog/windows-agent powershell_script_deploy @DataDog/windows-agent -windows_bootstrapper_deploy @DataDog/windows-agent +windows_bootstrapper_deploy @DataDog/windows-agent qa_*_oci @DataDog/agent-delivery -qa_installer_script @DataDog/agent-delivery +qa_installer_script* @DataDog/agent-delivery # Deploy containers deploy_containers* @Datadog/agent-delivery diff --git a/.gitlab/e2e_install_packages/include.yml b/.gitlab/e2e_install_packages/include.yml index d710d975dc41a..cf50d55e12238 100644 --- a/.gitlab/e2e_install_packages/include.yml +++ b/.gitlab/e2e_install_packages/include.yml @@ -9,3 +9,4 @@ include: - .gitlab/e2e_install_packages/centos.yml - .gitlab/e2e_install_packages/suse.yml - .gitlab/e2e_install_packages/windows.yml + - .gitlab/e2e_install_packages/installer.yml diff --git a/.gitlab/e2e_install_packages/installer.yml b/.gitlab/e2e_install_packages/installer.yml new file mode 100644 index 0000000000000..da1cb2536b626 --- /dev/null +++ b/.gitlab/e2e_install_packages/installer.yml @@ -0,0 +1,15 @@ +qa_installer_script_main: + image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES + stage: e2e_install_packages + tags: ["arch:amd64"] + rules: + - !reference [.only_main] # Disable non-main branch. Must be first. + - !reference [.on_installer_or_e2e_changes] + - !reference [.manual] + needs: + - new-e2e-installer-script + - installer-install-scripts + before_script: + - ls $OMNIBUS_PACKAGE_DIR + script: + - $S3_CP_CMD --recursive --exclude "*" --include "install-*.sh" "$OMNIBUS_PACKAGE_DIR" "s3://${INSTALLER_TESTING_S3_BUCKET}/scripts/" From 185ffe31ba911d506a34622ec28609e43be73f58 Mon Sep 17 00:00:00 2001 From: Vickenty Fesunov Date: Thu, 12 Dec 2024 15:07:45 +0100 Subject: [PATCH 161/303] AMLII-2210 enable Java FIPS provider on Windows FIPS images (#32026) --- Dockerfiles/agent/windows/amd64/Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Dockerfiles/agent/windows/amd64/Dockerfile b/Dockerfiles/agent/windows/amd64/Dockerfile index 72c7060810838..d99782f40167f 100755 --- a/Dockerfiles/agent/windows/amd64/Dockerfile +++ b/Dockerfiles/agent/windows/amd64/Dockerfile @@ -7,7 +7,8 @@ ARG WITH_JMX="false" ARG VARIANT="unknown" ARG INSTALL_INFO="unknown" ARG GENERAL_ARTIFACTS_CACHE_BUCKET_URL -ARG WITH_FIPS="false" +# Should be empty for non-FIPS builds +ARG WITH_FIPS LABEL maintainer "Datadog " @@ -23,6 +24,7 @@ RUN . ./install.ps1 COPY bouncycastle-fips /fips-build COPY install-fips.ps1 ./ RUN . ./install-fips.ps1 +ENV JAVA_TOOL_OPTIONS="${WITH_FIPS:+--module-path=\'c:\\program files\\datadog\\bouncycastle fips\' -Djava.security.properties==\'c:\\program files\\datadog\\bouncycastle fips\\java.security\' -Dpolicy.url.2=\'file:c:\\program files\\datadog\\bouncycastle fips\\bc-fips.policy\'}" EXPOSE 8125/udp 8126/tcp From 68f07c6efd56010f4c23d64da525f3aadc8b3409 Mon Sep 17 00:00:00 2001 From: Arthur Bellal Date: Thu, 12 Dec 2024 16:08:26 +0100 Subject: [PATCH 162/303] (fleet) installer setup scripts improvements (#32062) --- cmd/installer-downloader/main.go | 5 + pkg/fleet/installer/packages/datadog_agent.go | 4 +- .../installer/packages/datadog_installer.go | 6 +- pkg/fleet/installer/setup/common/config.go | 345 ++++++++---------- .../installer/setup/common/config_test.go | 186 ++++++++-- pkg/fleet/installer/setup/common/packages.go | 74 ++++ pkg/fleet/installer/setup/common/setup.go | 95 +++++ pkg/fleet/installer/setup/djm/databricks.go | 251 ++++++------- .../installer/setup/djm/databricks_windows.go | 21 -- pkg/fleet/installer/setup/setup.go | 18 +- 10 files changed, 598 insertions(+), 407 deletions(-) create mode 100644 pkg/fleet/installer/setup/common/packages.go create mode 100644 pkg/fleet/installer/setup/common/setup.go delete mode 100644 pkg/fleet/installer/setup/djm/databricks_windows.go diff --git a/cmd/installer-downloader/main.go b/cmd/installer-downloader/main.go index 45c628dc13069..5ddadc54c0d60 100644 --- a/cmd/installer-downloader/main.go +++ b/cmd/installer-downloader/main.go @@ -72,6 +72,7 @@ func runDownloader(ctx context.Context, env *env.Env, version string, flavor str return fmt.Errorf("failed to download installer: %w", err) } cmd := exec.CommandContext(ctx, filepath.Join(tmpDir, installerBinPath), "setup", "--flavor", flavor) + cmd.Dir = tmpDir cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmd.Env = append(os.Environ(), telemetry.EnvFromContext(ctx)...) @@ -92,6 +93,10 @@ func downloadInstaller(ctx context.Context, env *env.Env, version string, tmpDir if downloadedPackage.Name != installerPackage { return fmt.Errorf("unexpected package name: %s, expected %s", downloadedPackage.Name, installerPackage) } + err = downloadedPackage.WriteOCILayout(tmpDir) + if err != nil { + return fmt.Errorf("failed to write OCI layout: %w", err) + } err = downloadedPackage.ExtractLayers(oci.DatadogPackageLayerMediaType, tmpDir) if err != nil { return fmt.Errorf("failed to extract layers: %w", err) diff --git a/pkg/fleet/installer/packages/datadog_agent.go b/pkg/fleet/installer/packages/datadog_agent.go index 7236096bbf1e1..2b7d4192d4592 100644 --- a/pkg/fleet/installer/packages/datadog_agent.go +++ b/pkg/fleet/installer/packages/datadog_agent.go @@ -104,7 +104,7 @@ func SetupAgent(ctx context.Context, _ []string) (err error) { if err = os.MkdirAll("/etc/datadog-agent", 0755); err != nil { return fmt.Errorf("failed to create /etc/datadog-agent: %v", err) } - ddAgentUID, ddAgentGID, err := GetAgentIDs() + ddAgentUID, ddAgentGID, err := getAgentIDs() if err != nil { return fmt.Errorf("error getting dd-agent user and group IDs: %w", err) } @@ -230,7 +230,7 @@ func chownRecursive(path string, uid int, gid int, ignorePaths []string) error { // StartAgentExperiment starts the agent experiment func StartAgentExperiment(ctx context.Context) error { - ddAgentUID, ddAgentGID, err := GetAgentIDs() + ddAgentUID, ddAgentGID, err := getAgentIDs() if err != nil { return fmt.Errorf("error getting dd-agent user and group IDs: %w", err) } diff --git a/pkg/fleet/installer/packages/datadog_installer.go b/pkg/fleet/installer/packages/datadog_installer.go index ceaf08bf330d6..14d0f042cd0e6 100644 --- a/pkg/fleet/installer/packages/datadog_installer.go +++ b/pkg/fleet/installer/packages/datadog_installer.go @@ -60,7 +60,7 @@ func SetupInstaller(ctx context.Context) (err error) { if err != nil { return fmt.Errorf("error adding dd-agent user to dd-agent group: %w", err) } - ddAgentUID, ddAgentGID, err := GetAgentIDs() + ddAgentUID, ddAgentGID, err := getAgentIDs() if err != nil { return fmt.Errorf("error getting dd-agent user and group IDs: %w", err) } @@ -165,8 +165,8 @@ func SetupInstaller(ctx context.Context) (err error) { return startInstallerStable(ctx) } -// GetAgentIDs returns the UID and GID of the dd-agent user and group. -func GetAgentIDs() (uid, gid int, err error) { +// getAgentIDs returns the UID and GID of the dd-agent user and group. +func getAgentIDs() (uid, gid int, err error) { ddAgentUser, err := user.Lookup("dd-agent") if err != nil { return -1, -1, fmt.Errorf("dd-agent user not found: %w", err) diff --git a/pkg/fleet/installer/setup/common/config.go b/pkg/fleet/installer/setup/common/config.go index 865b617c6283a..fb1677aeb6964 100644 --- a/pkg/fleet/installer/setup/common/config.go +++ b/pkg/fleet/installer/setup/common/config.go @@ -3,242 +3,211 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build !windows - -// Package common contains the HostInstaller struct which is used to write the agent agentConfiguration to disk package common import ( - "context" "fmt" "os" "path/filepath" - "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" - "github.com/DataDog/datadog-agent/pkg/fleet/installer/oci" - "github.com/DataDog/datadog-agent/pkg/fleet/installer/packages" - "github.com/DataDog/datadog-agent/pkg/fleet/internal/exec" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" ) -var ( +const ( + disclaimerGenerated = `# This file was generated by the Datadog Installer. +# Other configuration options are available, see https://docs.datadoghq.com/agent/guide/agent-configuration-files/ for more information.` + configDir = "/etc/datadog-agent" - datadogConfFile = filepath.Join(configDir, "datadog.yaml") - logsConfFile = filepath.Join(configDir, "conf.d/configured_at_install_logs.yaml") - sparkConfigFile = filepath.Join(configDir, "conf.d/spark.d/spark.yaml") - injectTracerConfigFile = filepath.Join(configDir, "inject/tracer.yaml") + datadogConfFile = "datadog.yaml" + injectTracerConfigFile = "inject/tracer.yaml" ) -// HostInstaller is a struct that represents the agent agentConfiguration -// used to write the agentConfiguration to disk in datadog-installer custom setup scenarios -type HostInstaller struct { - env *env.Env - - agentConfig map[string]interface{} - logsConfig logsConfig - sparkConfig sparkConfig - injectorConfig injectorConfig - hostTags []tag - ddUID int - ddGID int - - injectorVersion string - javaVersion string - agentVersion string -} - -type tag struct { - key string `yaml:"key"` - value string `yaml:"value"` -} - -type logsConfig struct { - Logs []LogConfig `yaml:"logs"` -} - -// LogConfig is a struct that represents a single log agentConfiguration -type LogConfig struct { - Type string `yaml:"type"` - Path string `yaml:"path"` - Service string `yaml:"service,omitempty"` - Source string `yaml:"source,omitempty"` -} - -type sparkConfig struct { - InitConfig interface{} `yaml:"init_config,omitempty"` - Instances []SparkInstance `yaml:"instances"` -} - -// SparkInstance is a struct that represents a single spark instance -type SparkInstance struct { - SparkURL string `yaml:"spark_url"` - SparkClusterMode string `yaml:"spark_cluster_mode,omitempty"` - ClusterName string `yaml:"cluster_name"` - StreamingMetrics bool `yaml:"streaming_metrics,omitempty"` -} - -type injectorConfig struct { - Version int `yaml:"version"` - ConfigSources string `yaml:"config_sources"` - EnvsToInject []EnvVar `yaml:"additional_environment_variables"` -} - -// EnvVar is a struct that represents an environment variable -type EnvVar struct { - Key string `yaml:"key"` - Value string `yaml:"value"` -} - -// NewHostInstaller creates a new HostInstaller struct and loads the existing agentConfiguration from disk -func NewHostInstaller(env *env.Env) (*HostInstaller, error) { - ddUID, ddGID, err := packages.GetAgentIDs() +func writeConfigs(config Config, configDir string) error { + err := writeConfig(filepath.Join(configDir, datadogConfFile), config.DatadogYAML, 0640, true) if err != nil { - return nil, fmt.Errorf("failed to get agent user and group IDs: %v", err) + return fmt.Errorf("could not write datadog.yaml: %w", err) } - return newHostInstaller(env, ddUID, ddGID) + err = writeConfig(filepath.Join(configDir, injectTracerConfigFile), config.InjectTracerYAML, 0644, false) + if err != nil { + return fmt.Errorf("could not write tracer.yaml: %w", err) + } + for name, config := range config.IntegrationConfigs { + err = writeConfig(filepath.Join(configDir, "conf.d", name), config, 0644, false) + if err != nil { + return fmt.Errorf("could not write %s.yaml: %w", name, err) + } + } + return nil } -func newHostInstaller(env *env.Env, ddUID, ddGID int) (*HostInstaller, error) { - i := &HostInstaller{agentConfig: make(map[string]interface{})} - if env.APIKey == "" { - return nil, fmt.Errorf("DD_API key is required") +func writeConfig(path string, config any, perms os.FileMode, merge bool) error { + serializedNewConfig, err := yaml.Marshal(config) + if err != nil { + return fmt.Errorf("could not serialize config: %w", err) } - i.AddAgentConfig("api_key", env.APIKey) - - if env.Site != "" { - i.AddAgentConfig("site", env.Site) + var newConfig map[string]interface{} + err = yaml.Unmarshal(serializedNewConfig, &newConfig) + if err != nil { + return fmt.Errorf("could not unmarshal config: %w", err) + } + if len(newConfig) == 0 { + return nil + } + err = os.MkdirAll(filepath.Dir(path), 0755) + if err != nil { + return fmt.Errorf("could not create config directory: %w", err) } - i.ddUID = ddUID - i.ddGID = ddGID - i.env = env - return i, nil + var existingConfig map[string]interface{} + if merge { + serializedExistingConfig, err := os.ReadFile(path) + if err != nil && !os.IsNotExist(err) { + return fmt.Errorf("could not read existing config: %w", err) + } + if err == nil { + err = yaml.Unmarshal(serializedExistingConfig, &existingConfig) + if err != nil { + return fmt.Errorf("could not unmarshal existing config: %w", err) + } + } + } + merged, err := mergeConfig(existingConfig, newConfig) + if err != nil { + return fmt.Errorf("could not merge config: %w", err) + } + serializedMerged, err := yaml.Marshal(merged) + if err != nil { + return fmt.Errorf("could not serialize merged config: %w", err) + } + if len(existingConfig) == 0 { + serializedMerged = []byte(disclaimerGenerated + "\n\n" + string(serializedMerged)) + } + err = os.WriteFile(path, serializedMerged, perms) + if err != nil { + return fmt.Errorf("could not write config: %w", err) + } + return nil } -// SetAgentVersion sets the agent version to install -func (i *HostInstaller) SetAgentVersion(version string) { - i.agentVersion = version +// Config represents the configuration to write in /etc/datadog-agent +type Config struct { + // DatadogYAML is the content of the datadog.yaml file + DatadogYAML DatadogConfig + // InjectTracerYAML is the content of the inject/tracer.yaml file + InjectTracerYAML InjectTracerConfig + // IntegrationConfigs is the content of the integration configuration files under conf.d/ + IntegrationConfigs map[string]IntegrationConfig } -// SetInjectorVersion sets the injector version to install -func (i *HostInstaller) SetInjectorVersion(version string) { - i.injectorVersion = version +// DatadogConfig represents the configuration to write in /etc/datadog-agent/datadog.yaml +type DatadogConfig struct { + APIKey string `yaml:"api_key"` + Hostname string `yaml:"hostname,omitempty"` + Site string `yaml:"site,omitempty"` + Env string `yaml:"env,omitempty"` + Tags []string `yaml:"tags,omitempty"` + LogsEnabled bool `yaml:"logs_enabled,omitempty"` + DJM DatadogConfigDJM `yaml:"djm,omitempty"` + ProcessConfig DatadogConfigProcessConfig `yaml:"process_config,omitempty"` + ExpectedTagsDuration string `yaml:"expected_tags_duration,omitempty"` } -// SetJavaTracerVersion sets the java tracer version to install -func (i *HostInstaller) SetJavaTracerVersion(version string) { - i.javaVersion = version +// DatadogConfigDJM represents the configuration for the Data Jobs Monitoring +type DatadogConfigDJM struct { + Enabled bool `yaml:"enabled,omitempty"` } -// AddTracerEnv adds an environment variable to the list of environment variables to inject -func (i *HostInstaller) AddTracerEnv(key, value string) { - i.injectorConfig.EnvsToInject = append(i.injectorConfig.EnvsToInject, EnvVar{Key: key, Value: value}) +// DatadogConfigProcessConfig represents the configuration for the process agent +type DatadogConfigProcessConfig struct { + ExpvarPort int `yaml:"expvar_port,omitempty"` } -// AddAgentConfig adds a key value pair to the agent agentConfiguration -func (i *HostInstaller) AddAgentConfig(key string, value interface{}) { - i.agentConfig[key] = value +// IntegrationConfig represents the configuration for an integration under conf.d/ +type IntegrationConfig struct { + InitConfig []any `yaml:"init_config,omitempty"` + Instances []any `yaml:"instances,omitempty"` + Logs []IntegrationConfigLogs `yaml:"logs,omitempty"` } -// AddLogConfig adds a log agentConfiguration to the agent configuration -func (i *HostInstaller) AddLogConfig(log LogConfig) { - i.logsConfig.Logs = append(i.logsConfig.Logs, log) - if len(i.logsConfig.Logs) == 1 { - i.AddAgentConfig("logs_enabled", true) - } +// IntegrationConfigLogs represents the configuration for the logs of an integration +type IntegrationConfigLogs struct { + Type string `yaml:"type,omitempty"` + Path string `yaml:"path,omitempty"` + Service string `yaml:"service,omitempty"` + Source string `yaml:"source,omitempty"` } -// AddSparkInstance adds a spark instance to the agent agentConfiguration -func (i *HostInstaller) AddSparkInstance(spark SparkInstance) { - i.sparkConfig.Instances = append(i.sparkConfig.Instances, spark) +// IntegrationConfigInstanceSpark represents the configuration for the Spark integration +type IntegrationConfigInstanceSpark struct { + SparkURL string `yaml:"spark_url"` + SparkClusterMode string `yaml:"spark_cluster_mode"` + ClusterName string `yaml:"cluster_name"` + StreamingMetrics bool `yaml:"streaming_metrics"` } -// AddHostTag adds a host tag to the agent agentConfiguration -func (i *HostInstaller) AddHostTag(key, value string) { - i.hostTags = append(i.hostTags, tag{key, value}) +// InjectTracerConfig represents the configuration to write in /etc/datadog-agent/inject/tracer.yaml +type InjectTracerConfig struct { + Version int `yaml:"version,omitempty"` + ConfigSources string `yaml:"config_sources,omitempty"` + AdditionalEnvironmentVariables []InjectTracerConfigEnvVar `yaml:"additional_environment_variables,omitempty"` } -func (i *HostInstaller) writeYamlConfig(path string, yml interface{}, perm os.FileMode, agentOwner bool) error { - data, err := yaml.Marshal(yml) - if err != nil { - return err +// InjectTracerConfigEnvVar represents an environment variable to inject +type InjectTracerConfigEnvVar struct { + Key string `yaml:"key"` + Value string `yaml:"value"` +} + +// mergeConfig merges the current config with the setup config. +// +// The values are merged as follows: +// - Scalars: the override value is used +// - Lists: the override list is used +// - Maps: the override map is recursively merged into the base map +func mergeConfig(base interface{}, override interface{}) (interface{}, error) { + if base == nil { + return override, nil } - dir := filepath.Dir(path) - if err := os.MkdirAll(dir, 0755); err != nil { - return fmt.Errorf("failed to create directory %s: %v", dir, err) + if override == nil { + // this allows to override a value with nil + return nil, nil } - if err = os.WriteFile(path, data, perm); err != nil { - return fmt.Errorf("failed to write to %s: %v", path, err) + if isScalar(base) && isScalar(override) { + return override, nil } - // Change ownership of the file to the agent user - // ddUID=0 happens in local test environments - if agentOwner && i.ddUID != 0 { - if err := os.Chown(path, i.ddUID, i.ddGID); err != nil { - return fmt.Errorf("failed to change ownership of %s: %v", path, err) - } + if isList(base) && isList(override) { + return override, nil } - return nil -} - -func convertTagsToYaml(tags []tag) []interface{} { - result := make([]interface{}, 0, len(tags)) - for _, tag := range tags { - result = append(result, fmt.Sprintf("%s:%s", tag.key, tag.value)) + if isMap(base) && isMap(override) { + return mergeMap(base.(map[string]interface{}), override.(map[string]interface{})) } - return result + return nil, fmt.Errorf("could not merge %T with %T", base, override) } -func (i *HostInstaller) writeConfigs() error { - if len(i.hostTags) > 0 { - i.AddAgentConfig("tags", convertTagsToYaml(i.hostTags)) - } - - if err := i.writeYamlConfig(datadogConfFile, i.agentConfig, 0640, true); err != nil { - return err - } - if len(i.logsConfig.Logs) > 0 { - if err := i.writeYamlConfig(logsConfFile, i.logsConfig, 0644, true); err != nil { - return err - } +func mergeMap(base, override map[string]interface{}) (map[string]interface{}, error) { + merged := make(map[string]interface{}) + for k, v := range base { + merged[k] = v } - if len(i.sparkConfig.Instances) > 0 { - if err := i.writeYamlConfig(sparkConfigFile, i.sparkConfig, 0644, true); err != nil { - return err + for k := range override { + v, err := mergeConfig(base[k], override[k]) + if err != nil { + return nil, fmt.Errorf("could not merge key %v: %w", k, err) } + merged[k] = v } - if len(i.injectorConfig.EnvsToInject) > 0 { - if err := i.writeYamlConfig(injectTracerConfigFile, i.injectorConfig, 0644, false); err != nil { - return err - } - } - return nil + return merged, nil } -// ConfigureAndInstall writes configurations to disk and installs desired packages -func (i *HostInstaller) ConfigureAndInstall(ctx context.Context) error { - if err := i.writeConfigs(); err != nil { - return fmt.Errorf("failed to write configurations: %w", err) - } +func isList(i interface{}) bool { + _, ok := i.([]interface{}) + return ok +} - exePath, err := os.Executable() - if err != nil { - return fmt.Errorf("failed to get executable path: %w", err) - } - cmd := exec.NewInstallerExec(i.env, exePath) +func isMap(i interface{}) bool { + _, ok := i.(map[string]interface{}) + return ok +} - if i.injectorVersion != "" { - if err := cmd.Install(ctx, oci.PackageURL(i.env, "datadog-apm-inject", i.injectorVersion), nil); err != nil { - return fmt.Errorf("failed to install injector: %w", err) - } - } - if i.javaVersion != "" { - if err := cmd.Install(ctx, oci.PackageURL(i.env, "datadog-apm-library-java", i.javaVersion), nil); err != nil { - return fmt.Errorf("failed to install java library: %w", err) - } - } - if i.agentVersion != "" { - if err := cmd.Install(ctx, oci.PackageURL(i.env, "datadog-agent", i.agentVersion), nil); err != nil { - return fmt.Errorf("failed to install Databricks agent: %w", err) - } - } - return nil +func isScalar(i interface{}) bool { + return !isList(i) && !isMap(i) } diff --git a/pkg/fleet/installer/setup/common/config_test.go b/pkg/fleet/installer/setup/common/config_test.go index bfe2809f39087..7c02cd3999e02 100644 --- a/pkg/fleet/installer/setup/common/config_test.go +++ b/pkg/fleet/installer/setup/common/config_test.go @@ -5,7 +5,6 @@ //go:build !windows -// Package common contains the HostInstaller struct which is used to write the agent agentConfiguration to disk package common import ( @@ -14,48 +13,155 @@ import ( "testing" "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" + "gopkg.in/yaml.v3" ) -func assertFileContent(t *testing.T, file, content string) { - b, err := os.ReadFile(file) +func TestEmptyConfig(t *testing.T) { + tempDir := t.TempDir() + config := Config{} + config.DatadogYAML.APIKey = "1234567890" // Required field + + err := writeConfigs(config, tempDir) + assert.NoError(t, err) + + // Check datadog.yaml + datadogConfigPath := filepath.Join(tempDir, datadogConfFile) + info, err := os.Stat(datadogConfigPath) + assert.NoError(t, err) + assert.Equal(t, os.FileMode(0640), info.Mode()) + datadogYAML, err := os.ReadFile(datadogConfigPath) + assert.NoError(t, err) + var datadog map[string]interface{} + err = yaml.Unmarshal(datadogYAML, &datadog) + assert.NoError(t, err) + assert.Equal(t, map[string]interface{}{"api_key": "1234567890"}, datadog) + + // Assert no other files are created + dir, err := os.ReadDir(tempDir) + assert.NoError(t, err) + assert.Len(t, dir, 1) +} + +func TestMergeConfig(t *testing.T) { + tempDir := t.TempDir() + oldConfig := `--- +api_key: "0987654321" +hostname: "old_hostname" +env: "old_env" +` + err := os.WriteFile(filepath.Join(tempDir, datadogConfFile), []byte(oldConfig), 0644) + assert.NoError(t, err) + config := Config{} + config.DatadogYAML.APIKey = "1234567890" // Required field + config.DatadogYAML.Hostname = "new_hostname" + config.DatadogYAML.LogsEnabled = true + + err = writeConfigs(config, tempDir) + assert.NoError(t, err) + + // Check datadog.yaml + datadogConfigPath := filepath.Join(tempDir, datadogConfFile) + datadogYAML, err := os.ReadFile(datadogConfigPath) + assert.NoError(t, err) + var datadog map[string]interface{} + err = yaml.Unmarshal(datadogYAML, &datadog) + assert.NoError(t, err) + assert.Equal(t, map[string]interface{}{ + "api_key": "1234567890", + "hostname": "new_hostname", + "env": "old_env", + "logs_enabled": true, + }, datadog) +} + +func TestInjectTracerConfig(t *testing.T) { + tempDir := t.TempDir() + config := Config{} + config.InjectTracerYAML = InjectTracerConfig{ + Version: 1, + ConfigSources: "env", + AdditionalEnvironmentVariables: []InjectTracerConfigEnvVar{ + { + Key: "DD_ENV", + Value: "prod", + }, + }, + } + + err := writeConfigs(config, tempDir) + assert.NoError(t, err) + + // Check inject/tracer.yaml + injectTracerConfigPath := filepath.Join(tempDir, injectTracerConfigFile) + assert.FileExists(t, injectTracerConfigPath) + injectTracerYAML, err := os.ReadFile(injectTracerConfigPath) + assert.NoError(t, err) + var injectTracer map[string]interface{} + err = yaml.Unmarshal(injectTracerYAML, &injectTracer) assert.NoError(t, err) - assert.Equal(t, content, string(b)) + assert.Equal(t, map[string]interface{}{ + "version": 1, + "config_sources": "env", + "additional_environment_variables": []interface{}{ + map[string]interface{}{ + "key": "DD_ENV", + "value": "prod", + }, + }, + }, injectTracer) } -func TestAgentConfigs(t *testing.T) { - configDir = t.TempDir() - datadogConfFile = filepath.Join(configDir, "datadog.yaml") - logsConfFile = filepath.Join(configDir, "conf.d/configured_at_install_logs.yaml") - sparkConfigFile = filepath.Join(configDir, "conf.d/spark.d/spark.yaml") - - i, err := newHostInstaller(&env.Env{APIKey: "a"}, 0, 0) - assert.NotNil(t, i) - assert.Nil(t, err) - - i.AddAgentConfig("key", "value") - i.AddLogConfig(LogConfig{Type: "file", Path: "/var/log/app.log", Service: "app"}) - i.AddHostTag("k1", "v1") - i.AddHostTag("k2", "v2") - i.AddSparkInstance(SparkInstance{ClusterName: "cluster", SparkURL: "http://localhost:8080"}) - - assert.NoError(t, i.writeConfigs()) - assertFileContent(t, datadogConfFile, `api_key: a -key: value -logs_enabled: true -tags: -- k1:v1 -- k2:v2 -`) - - assertFileContent(t, logsConfFile, `logs: -- type: file - path: /var/log/app.log - service: app -`) - assertFileContent(t, sparkConfigFile, `instances: -- spark_url: http://localhost:8080 - cluster_name: cluster -`) +func TestIntegrationConfigInstanceSpark(t *testing.T) { + tempDir := t.TempDir() + config := Config{ + IntegrationConfigs: make(map[string]IntegrationConfig), + } + config.IntegrationConfigs["spark.d/kebabricks.yaml"] = IntegrationConfig{ + Logs: []IntegrationConfigLogs{ + { + Type: "file", + Path: "/databricks/spark/work/*/*/stderr", + Source: "worker_stderr", + Service: "databricks", + }, + }, + Instances: []any{ + IntegrationConfigInstanceSpark{ + SparkURL: "http://localhost:4040", + SparkClusterMode: "spark_driver_mode", + ClusterName: "big-kebab-data", + StreamingMetrics: true, + }, + }, + } + + err := writeConfigs(config, tempDir) + assert.NoError(t, err) + + // Check spark.d/kebabricks.yaml + sparkConfigPath := filepath.Join(tempDir, "conf.d", "spark.d", "kebabricks.yaml") + assert.FileExists(t, sparkConfigPath) + sparkYAML, err := os.ReadFile(sparkConfigPath) + assert.NoError(t, err) + var spark map[string]interface{} + err = yaml.Unmarshal(sparkYAML, &spark) + assert.NoError(t, err) + assert.Equal(t, map[string]interface{}{ + "logs": []interface{}{ + map[string]interface{}{ + "type": "file", + "path": "/databricks/spark/work/*/*/stderr", + "service": "databricks", + "source": "worker_stderr", + }, + }, + "instances": []interface{}{ + map[string]interface{}{ + "spark_url": "http://localhost:4040", + "spark_cluster_mode": "spark_driver_mode", + "cluster_name": "big-kebab-data", + "streaming_metrics": true, + }, + }, + }, spark) } diff --git a/pkg/fleet/installer/setup/common/packages.go b/pkg/fleet/installer/setup/common/packages.go new file mode 100644 index 0000000000000..c4c0c091ea048 --- /dev/null +++ b/pkg/fleet/installer/setup/common/packages.go @@ -0,0 +1,74 @@ +// 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 common + +import "fmt" + +const ( + // DatadogInstallerPackage is the datadog installer package + DatadogInstallerPackage string = "datadog-installer" + // DatadogAgentPackage is the datadog agent package + DatadogAgentPackage string = "datadog-agent" + // DatadogAPMInjectPackage is the datadog apm inject package + DatadogAPMInjectPackage string = "datadog-apm-inject" + // DatadogAPMLibraryJavaPackage is the datadog apm library java package + DatadogAPMLibraryJavaPackage string = "datadog-apm-library-java" + // DatadogAPMLibraryPythonPackage is the datadog apm library python package + DatadogAPMLibraryPythonPackage string = "datadog-apm-library-python" + // DatadogAPMLibraryRubyPackage is the datadog apm library ruby package + DatadogAPMLibraryRubyPackage string = "datadog-apm-library-ruby" + // DatadogAPMLibraryJSPackage is the datadog apm library js package + DatadogAPMLibraryJSPackage string = "datadog-apm-library-js" + // DatadogAPMLibraryDotNetPackage is the datadog apm library dotnet package + DatadogAPMLibraryDotNetPackage string = "datadog-apm-library-dotnet" + // DatadogAPMLibraryPHPPackage is the datadog apm library php package + DatadogAPMLibraryPHPPackage string = "datadog-apm-library-php" +) + +var ( + order = []string{ + DatadogInstallerPackage, + DatadogAgentPackage, + DatadogAPMInjectPackage, + DatadogAPMLibraryJavaPackage, + DatadogAPMLibraryPythonPackage, + DatadogAPMLibraryRubyPackage, + DatadogAPMLibraryJSPackage, + DatadogAPMLibraryDotNetPackage, + DatadogAPMLibraryPHPPackage, + } +) + +func resolvePackages(packages Packages) []packageWithVersion { + var resolved []packageWithVersion + for _, pkg := range order { + if p, ok := packages.install[pkg]; ok { + resolved = append(resolved, p) + } + } + if len(resolved) != len(packages.install) { + panic(fmt.Sprintf("unknown package requested: %v", packages.install)) + } + return resolved +} + +// Packages is a list of packages to install +type Packages struct { + install map[string]packageWithVersion +} + +type packageWithVersion struct { + name string + version string +} + +// Install marks a package to be installed +func (p *Packages) Install(pkg string, version string) { + p.install[pkg] = packageWithVersion{ + name: pkg, + version: version, + } +} diff --git a/pkg/fleet/installer/setup/common/setup.go b/pkg/fleet/installer/setup/common/setup.go new file mode 100644 index 0000000000000..dbd48a7f83028 --- /dev/null +++ b/pkg/fleet/installer/setup/common/setup.go @@ -0,0 +1,95 @@ +// 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 common defines the Setup structure that allows setup scripts to define packages and configurations to install. +package common + +import ( + "context" + "errors" + "fmt" + "os" + + "github.com/DataDog/datadog-agent/pkg/fleet/installer" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/oci" + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" +) + +const ( + installerOCILayoutURL = "file://." // the installer OCI layout is written by the downloader in the current directory +) + +var ( + // ErrNoAPIKey is returned when no API key is provided. + ErrNoAPIKey = errors.New("no API key provided") +) + +// Setup allows setup scripts to define packages and configurations to install. +type Setup struct { + configDir string + installer installer.Installer + + Env *env.Env + Ctx context.Context + Span ddtrace.Span + Packages Packages + Config Config +} + +// NewSetup creates a new Setup structure with some default values. +func NewSetup(ctx context.Context, env *env.Env, name string) (*Setup, error) { + if env.APIKey == "" { + return nil, ErrNoAPIKey + } + installer, err := installer.NewInstaller(env) + if err != nil { + return nil, fmt.Errorf("failed to create installer: %w", err) + } + span, ctx := tracer.StartSpanFromContext(ctx, fmt.Sprintf("setup.%s", name)) + s := &Setup{ + configDir: configDir, + installer: installer, + Env: env, + Ctx: ctx, + Span: span, + Config: Config{ + DatadogYAML: DatadogConfig{ + APIKey: env.APIKey, + Hostname: os.Getenv("DD_HOSTNAME"), + Site: env.Site, + Env: os.Getenv("DD_ENV"), + }, + IntegrationConfigs: make(map[string]IntegrationConfig), + }, + Packages: Packages{ + install: make(map[string]packageWithVersion), + }, + } + return s, nil +} + +// Run installs the packages and writes the configurations +func (s *Setup) Run() (err error) { + defer func() { s.Span.Finish(tracer.WithError(err)) }() + err = writeConfigs(s.Config, s.configDir) + if err != nil { + return fmt.Errorf("failed to write configuration: %w", err) + } + err = s.installer.Install(s.Ctx, installerOCILayoutURL, nil) + if err != nil { + return fmt.Errorf("failed to install installer: %w", err) + } + packages := resolvePackages(s.Packages) + for _, p := range packages { + url := oci.PackageURL(s.Env, p.name, p.version) + err = s.installer.Install(s.Ctx, url, nil) + if err != nil { + return fmt.Errorf("failed to install package %s: %w", url, err) + } + } + return nil +} diff --git a/pkg/fleet/installer/setup/djm/databricks.go b/pkg/fleet/installer/setup/djm/databricks.go index 21db9b4b7a934..2dc8909c58e8b 100644 --- a/pkg/fleet/installer/setup/djm/databricks.go +++ b/pkg/fleet/installer/setup/djm/databricks.go @@ -3,188 +3,149 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build !windows - // Package djm contains data-jobs-monitoring installation logic package djm import ( - "context" + "fmt" "os" - "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" "github.com/DataDog/datadog-agent/pkg/fleet/installer/setup/common" "github.com/DataDog/datadog-agent/pkg/util/log" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) const ( databricksInjectorVersion = "0.21.0-1" databricksJavaVersion = "1.41.1-1" databricksAgentVersion = "7.57.2-1" - logsService = "databricks" ) -type databricksSetup struct { - ctx context.Context - *common.HostInstaller - setupIssues []string -} +var ( + envToTags = map[string]string{ + "DATABRICKS_WORKSPACE": "workspace", + "DB_CLUSTER_NAME": "databricks_cluster_name", + "DB_CLUSTER_ID": "databricks_cluster_id", + "DB_NODE_TYPE": "databricks_node_type", + } + driverLogs = []common.IntegrationConfigLogs{ + { + Type: "file", + Path: "/databricks/driver/logs/*.log", + Source: "driver_logs", + Service: "databricks", + }, + { + Type: "file", + Path: "/databricks/driver/logs/stderr", + Source: "driver_stderr", + Service: "databricks", + }, + { + Type: "file", + Path: "/databricks/driver/logs/stdout", + Source: "driver_stdout", + Service: "databricks", + }, + } + workerLogs = []common.IntegrationConfigLogs{ + { + Type: "file", + Path: "/databricks/spark/work/*/*/*.log", + Source: "worker_logs", + Service: "databricks", + }, + { + Type: "file", + Path: "/databricks/spark/work/*/*/stderr", + Source: "worker_stderr", + Service: "databricks", + }, + { + Type: "file", + Path: "/databricks/spark/work/*/*/stdout", + Source: "worker_stdout", + Service: "databricks", + }, + } + tracerEnvConfig = []common.InjectTracerConfigEnvVar{ + { + Key: "DD_DATA_JOBS_ENABLED", + Value: "true", + }, + { + Key: "DD_INTEGRATIONS_ENABLED", + Value: "false", + }, + } +) // SetupDatabricks sets up the Databricks environment -func SetupDatabricks(ctx context.Context, env *env.Env) (err error) { - span, ctx := tracer.StartSpanFromContext(ctx, "setup.databricks") - defer func() { span.Finish(tracer.WithError(err)) }() +func SetupDatabricks(s *common.Setup) error { + s.Packages.Install(common.DatadogAgentPackage, databricksAgentVersion) - i, err := common.NewHostInstaller(env) + hostname, err := os.Hostname() if err != nil { - return err + return fmt.Errorf("failed to get hostname: %w", err) } - ds := &databricksSetup{ - ctx: ctx, - HostInstaller: i, + s.Config.DatadogYAML.Hostname = hostname + s.Config.DatadogYAML.DJM.Enabled = true + s.Config.DatadogYAML.ExpectedTagsDuration = "10m" + s.Config.DatadogYAML.ProcessConfig.ExpvarPort = 6063 // avoid port conflict on 6062 + for env, tag := range envToTags { + if val, ok := os.LookupEnv(env); ok { + s.Config.DatadogYAML.Tags = append(s.Config.DatadogYAML.Tags, tag+":"+val) + } } - return ds.setup() -} - -func (ds *databricksSetup) setup() error { - // agent binary to install - ds.SetAgentVersion(databricksAgentVersion) - - // avoid port conflict - ds.AddAgentConfig("process_config.expvar_port", -1) - ds.AddAgentConfig("expected_tags_duration", "10m") - ds.AddAgentConfig("djm_config.enabled", true) - - ds.extractHostTagsFromEnv() - span, _ := tracer.SpanFromContext(ds.ctx) switch os.Getenv("DB_IS_DRIVER") { case "TRUE": - span.SetTag("spark_node", "driver") - return ds.setupDatabricksDriver() + setupDatabricksDriver(s) default: - span.SetTag("spark_node", "worker") - return ds.setupDatabricksExecutor() + setupDatabricksWorker(s) } + return nil } -type varExtraction struct { - envVar string - tagKey string -} +func setupDatabricksDriver(s *common.Setup) { + s.Span.SetTag("spark_node", "driver") -var varExtractions = []varExtraction{ - {"DATABRICKS_WORKSPACE", "workspace"}, - {"DB_CLUSTER_NAME", "databricks_cluster_name"}, - {"DB_CLUSTER_ID", "databricks_cluster_id"}, - {"DB_NODE_TYPE", "databricks_node_type"}, -} + s.Packages.Install(common.DatadogAPMInjectPackage, databricksInjectorVersion) + s.Packages.Install(common.DatadogAPMLibraryJavaPackage, databricksJavaVersion) + + s.Config.DatadogYAML.Tags = append(s.Config.DatadogYAML.Tags, "node_type:driver") + s.Config.InjectTracerYAML.AdditionalEnvironmentVariables = tracerEnvConfig -func (ds *databricksSetup) extractHostTagsFromEnv() { - for _, ve := range varExtractions { - if val, ok := os.LookupEnv(ve.envVar); ok { - ds.AddHostTag(ve.tagKey, val) - continue + var sparkIntegration common.IntegrationConfig + if os.Getenv("DRIVER_LOGS_ENABLED") == "true" { + s.Config.DatadogYAML.LogsEnabled = true + sparkIntegration.Logs = driverLogs + } + if os.Getenv("DB_DRIVER_IP") != "" || os.Getenv("DB_DRIVER_PORT") != "" { + sparkIntegration.Instances = []any{ + common.IntegrationConfigInstanceSpark{ + SparkURL: "http://" + os.Getenv("DB_DRIVER_IP") + ":" + os.Getenv("DB_DRIVER_PORT"), + SparkClusterMode: "spark_driver_mode", + ClusterName: os.Getenv("DB_CLUSTER_NAME"), + StreamingMetrics: true, + }, } - ds.setupIssues = append(ds.setupIssues, ve.envVar+"_not_set") + } else { + log.Warn("DB_DRIVER_IP or DB_DRIVER_PORT not set") } + s.Config.IntegrationConfigs["spark.d/databricks.yaml"] = sparkIntegration } -func (ds *databricksSetup) setupDatabricksDriver() error { - ds.AddHostTag("node_type", "driver") - - ds.driverLogCollection() - - ds.setupAgentSparkCheck() - - ds.AddTracerEnv("DD_DATA_JOBS_ENABLED", "true") - ds.AddTracerEnv("DD_INTEGRATIONS_ENABLED", "false") - - // APM binaries to install - ds.SetInjectorVersion(databricksInjectorVersion) - ds.SetJavaTracerVersion(databricksJavaVersion) - - return ds.ConfigureAndInstall(ds.ctx) -} - -func (ds *databricksSetup) setupDatabricksExecutor() error { - ds.AddHostTag("node_type", "worker") - ds.workerLogCollection() - return ds.ConfigureAndInstall(ds.ctx) -} +func setupDatabricksWorker(s *common.Setup) { + s.Span.SetTag("spark_node", "worker") -func (ds *databricksSetup) setupAgentSparkCheck() { - driverIP := os.Getenv("DB_DRIVER_IP") - if driverIP == "" { - log.Warn("DB_DRIVER_IP not set") - return - } - driverPort := os.Getenv("DB_DRIVER_PORT") - if driverPort == "" { - log.Warn("DB_DRIVER_PORT not set") - return - } - clusterName := os.Getenv("DB_CLUSTER_NAME") - - ds.AddSparkInstance(common.SparkInstance{ - SparkURL: "http://" + driverIP + ":" + driverPort, - SparkClusterMode: "spark_driver_mode", - ClusterName: clusterName, - StreamingMetrics: true, - }) -} + s.Packages.Install(common.DatadogAgentPackage, databricksAgentVersion) -func (ds *databricksSetup) driverLogCollection() { - if os.Getenv("DRIVER_LOGS_ENABLED") != "true" { - return - } - span, _ := tracer.SpanFromContext(ds.ctx) - span.SetTag("driver_logs", "enabled") - log.Info("Enabling logs collection on the driver") - ds.AddLogConfig(common.LogConfig{ - Type: "file", - Path: "/databricks/driver/logs/*.log", - Source: "driver_logs", - Service: logsService, - }) - ds.AddLogConfig(common.LogConfig{ - Type: "file", - Path: "/databricks/driver/logs/stderr", - Source: "driver_stderr", - Service: logsService, - }) - ds.AddLogConfig(common.LogConfig{ - Type: "file", - Path: "/databricks/driver/logs/stdout", - Source: "driver_stdout", - Service: logsService, - }) -} + s.Config.DatadogYAML.Tags = append(s.Config.DatadogYAML.Tags, "node_type:worker") -func (ds *databricksSetup) workerLogCollection() { - if os.Getenv("WORKER_LOGS_ENABLED") != "true" { - return + var sparkIntegration common.IntegrationConfig + if os.Getenv("WORKER_LOGS_ENABLED") == "true" { + s.Config.DatadogYAML.LogsEnabled = true + sparkIntegration.Logs = workerLogs } - span, _ := tracer.SpanFromContext(ds.ctx) - span.SetTag("worker_logs", "enabled") - log.Info("Enabling logs collection on the executor") - ds.AddLogConfig(common.LogConfig{ - Type: "file", - Path: "/databricks/spark/work/*/*/*.log", - Source: "worker_logs", - Service: logsService, - }) - ds.AddLogConfig(common.LogConfig{ - Type: "file", - Path: "/databricks/spark/work/*/*/stderr", - Source: "worker_stderr", - Service: logsService, - }) - ds.AddLogConfig(common.LogConfig{ - Type: "file", - Path: "/databricks/spark/work/*/*/stdout", - Source: "worker_stdout", - Service: logsService, - }) + s.Config.IntegrationConfigs["spark.d/databricks.yaml"] = sparkIntegration } diff --git a/pkg/fleet/installer/setup/djm/databricks_windows.go b/pkg/fleet/installer/setup/djm/databricks_windows.go deleted file mode 100644 index 2bad2770e3467..0000000000000 --- a/pkg/fleet/installer/setup/djm/databricks_windows.go +++ /dev/null @@ -1,21 +0,0 @@ -// 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. - -//go:build windows - -// Package djm contains data-jobs-monitoring installation logic -package djm - -import ( - "context" - "errors" - - "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" -) - -// SetupDatabricks is a not supported on windows -func SetupDatabricks(_ context.Context, _ *env.Env) error { - return errors.New("djm is not supported on windows") -} diff --git a/pkg/fleet/installer/setup/setup.go b/pkg/fleet/installer/setup/setup.go index 0daa479d73b6e..3b01d320c9975 100644 --- a/pkg/fleet/installer/setup/setup.go +++ b/pkg/fleet/installer/setup/setup.go @@ -11,7 +11,7 @@ import ( "fmt" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" - "github.com/DataDog/datadog-agent/pkg/fleet/installer/packages" + "github.com/DataDog/datadog-agent/pkg/fleet/installer/setup/common" "github.com/DataDog/datadog-agent/pkg/fleet/installer/setup/djm" "github.com/DataDog/datadog-agent/pkg/fleet/internal/exec" "github.com/DataDog/datadog-agent/pkg/fleet/internal/paths" @@ -24,18 +24,20 @@ const ( // Setup installs Datadog. func Setup(ctx context.Context, env *env.Env, flavor string) error { + s, err := common.NewSetup(ctx, env, flavor) + if err != nil { + return err + } switch flavor { case FlavorDatabricks: - if err := packages.SetupInstaller(ctx); err != nil { - return fmt.Errorf("failed to setup installer: %w", err) - } - if err := djm.SetupDatabricks(ctx, env); err != nil { - return fmt.Errorf("failed to setup Databricks: %w", err) - } - return nil + err = djm.SetupDatabricks(s) default: return fmt.Errorf("unknown setup flavor %s", flavor) } + if err != nil { + return err + } + return s.Run() } // Agent7InstallScript is the setup used by the agent7 install script. From 3627a74336d52b84b78d68514c3b53efa1063fd4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Dec 2024 15:25:32 +0000 Subject: [PATCH 163/303] Bump github/codeql-action from 3.27.6 to 3.27.7 (#32039) Co-authored-by: chouetz --- .github/workflows/codeql-analysis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 4ce361a8a19f1..d6886960d2396 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -45,7 +45,7 @@ jobs: go-version-file: ".go-version" - name: Initialize CodeQL - uses: github/codeql-action/init@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 + uses: github/codeql-action/init@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 with: languages: ${{ matrix.language }} config: | @@ -67,4 +67,4 @@ jobs: invoke agent.build --build-exclude=systemd - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 + uses: github/codeql-action/analyze@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 From 90249a8cc795481097640d46328e784f4b9d1396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lian=20Raimbault?= <161456554+CelianR@users.noreply.github.com> Date: Thu, 12 Dec 2024 10:51:51 -0500 Subject: [PATCH 164/303] release: Don't ask questions if not tty (#32099) --- tasks/release.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/release.py b/tasks/release.py index 999230044ea44..b91e4a48742a6 100644 --- a/tasks/release.py +++ b/tasks/release.py @@ -90,7 +90,7 @@ def deduce_and_ask_version(ctx, branch, as_str=True, trust=False) -> str | Versi if trust: return release_version - if yes_no_question( + if not os.isatty(sys.stdin.fileno()) or yes_no_question( f'Version {release_version} deduced from branch {branch}. Is this the version you want to use?', color="orange", default=False, From 5b2054cb1da177beebdbbc4eacc59278c7eb92dd Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Thu, 12 Dec 2024 17:34:23 +0100 Subject: [PATCH 165/303] Update golang.org/x deps (#31958) Co-authored-by: louis-cqrl --- comp/api/authtoken/go.mod | 4 +-- comp/api/authtoken/go.sum | 8 +++--- comp/core/config/go.mod | 4 +-- comp/core/config/go.sum | 8 +++--- comp/core/log/impl-trace/go.mod | 4 +-- comp/core/log/impl-trace/go.sum | 8 +++--- comp/core/log/impl/go.mod | 4 +-- comp/core/log/impl/go.sum | 8 +++--- comp/core/log/mock/go.mod | 4 +-- comp/core/log/mock/go.sum | 8 +++--- comp/core/secrets/go.mod | 2 +- comp/core/secrets/go.sum | 4 +-- comp/core/status/go.mod | 2 +- comp/core/status/go.sum | 4 +-- comp/core/status/statusimpl/go.mod | 4 +-- comp/core/status/statusimpl/go.sum | 8 +++--- comp/forwarder/defaultforwarder/go.mod | 6 ++-- comp/forwarder/defaultforwarder/go.sum | 12 ++++---- .../orchestrator/orchestratorinterface/go.mod | 6 ++-- .../orchestrator/orchestratorinterface/go.sum | 12 ++++---- comp/logs/agent/config/go.mod | 4 +-- comp/logs/agent/config/go.sum | 8 +++--- comp/otelcol/converter/impl/go.mod | 4 +-- comp/otelcol/converter/impl/go.sum | 8 +++--- comp/otelcol/ddflareextension/def/go.mod | 4 +-- comp/otelcol/ddflareextension/def/go.sum | 8 +++--- comp/otelcol/ddflareextension/impl/go.mod | 14 +++++----- comp/otelcol/ddflareextension/impl/go.sum | 28 +++++++++---------- comp/otelcol/logsagentpipeline/go.mod | 6 ++-- comp/otelcol/logsagentpipeline/go.sum | 12 ++++---- .../logsagentpipelineimpl/go.mod | 6 ++-- .../logsagentpipelineimpl/go.sum | 12 ++++---- .../exporter/datadogexporter/go.mod | 8 +++--- .../exporter/datadogexporter/go.sum | 20 ++++++------- .../exporter/logsagentexporter/go.mod | 8 +++--- .../exporter/logsagentexporter/go.sum | 16 +++++------ .../exporter/serializerexporter/go.mod | 6 ++-- .../exporter/serializerexporter/go.sum | 12 ++++---- .../otlp/components/metricsclient/go.sum | 4 +-- .../otlp/components/statsprocessor/go.mod | 4 +-- .../otlp/components/statsprocessor/go.sum | 12 ++++---- comp/otelcol/otlp/testutil/go.mod | 6 ++-- comp/otelcol/otlp/testutil/go.sum | 12 ++++---- comp/serializer/compression/go.mod | 4 +-- comp/serializer/compression/go.sum | 8 +++--- comp/trace/agent/def/go.mod | 4 +-- comp/trace/agent/def/go.sum | 8 +++--- go.mod | 14 +++++----- go.sum | 28 +++++++++---------- internal/tools/go.mod | 14 +++++----- internal/tools/go.sum | 28 +++++++++---------- internal/tools/proto/go.mod | 8 +++--- internal/tools/proto/go.sum | 16 +++++------ pkg/api/go.mod | 4 +-- pkg/api/go.sum | 8 +++--- pkg/config/env/go.mod | 4 +-- pkg/config/env/go.sum | 8 +++--- pkg/config/mock/go.mod | 4 +-- pkg/config/mock/go.sum | 8 +++--- pkg/config/model/go.mod | 4 +-- pkg/config/model/go.sum | 8 +++--- pkg/config/nodetreemodel/go.mod | 4 +-- pkg/config/nodetreemodel/go.sum | 8 +++--- pkg/config/remote/go.mod | 6 ++-- pkg/config/remote/go.sum | 20 ++++++------- pkg/config/setup/go.mod | 4 +-- pkg/config/setup/go.sum | 8 +++--- pkg/config/structure/go.mod | 4 +-- pkg/config/structure/go.sum | 8 +++--- pkg/config/teeconfig/go.mod | 4 +-- pkg/config/teeconfig/go.sum | 8 +++--- pkg/config/utils/go.mod | 4 +-- pkg/config/utils/go.sum | 8 +++--- pkg/linters/components/pkgconfigusage/go.mod | 4 +-- pkg/linters/components/pkgconfigusage/go.sum | 8 +++--- pkg/logs/auditor/go.mod | 4 +-- pkg/logs/auditor/go.sum | 8 +++--- pkg/logs/client/go.mod | 6 ++-- pkg/logs/client/go.sum | 12 ++++---- pkg/logs/diagnostic/go.mod | 4 +-- pkg/logs/diagnostic/go.sum | 8 +++--- pkg/logs/message/go.mod | 4 +-- pkg/logs/message/go.sum | 8 +++--- pkg/logs/pipeline/go.mod | 6 ++-- pkg/logs/pipeline/go.sum | 12 ++++---- pkg/logs/processor/go.mod | 4 +-- pkg/logs/processor/go.sum | 8 +++--- pkg/logs/sds/go.mod | 4 +-- pkg/logs/sds/go.sum | 8 +++--- pkg/logs/sender/go.mod | 6 ++-- pkg/logs/sender/go.sum | 12 ++++---- pkg/logs/sources/go.mod | 4 +-- pkg/logs/sources/go.sum | 8 +++--- pkg/logs/util/testutils/go.mod | 4 +-- pkg/logs/util/testutils/go.sum | 8 +++--- pkg/metrics/go.mod | 4 +-- pkg/metrics/go.sum | 8 +++--- pkg/obfuscate/go.mod | 2 +- pkg/obfuscate/go.sum | 4 +-- pkg/proto/go.mod | 4 +-- pkg/proto/go.sum | 8 +++--- pkg/remoteconfig/state/go.mod | 3 +- pkg/remoteconfig/state/go.sum | 4 +-- pkg/security/secl/go.mod | 8 +++--- pkg/security/secl/go.sum | 20 ++++++------- pkg/security/seclwin/go.mod | 2 +- pkg/security/seclwin/go.sum | 4 +-- pkg/serializer/go.mod | 6 ++-- pkg/serializer/go.sum | 12 ++++---- pkg/trace/go.mod | 4 +-- pkg/trace/go.sum | 12 ++++---- pkg/trace/stats/oteltest/go.mod | 4 +-- pkg/trace/stats/oteltest/go.sum | 12 ++++---- pkg/util/flavor/go.mod | 4 +-- pkg/util/flavor/go.sum | 8 +++--- pkg/util/grpc/go.mod | 6 ++-- pkg/util/grpc/go.sum | 12 ++++---- pkg/util/http/go.mod | 6 ++-- pkg/util/http/go.sum | 12 ++++---- pkg/util/log/setup/go.mod | 4 +-- pkg/util/log/setup/go.sum | 8 +++--- test/fakeintake/go.mod | 4 +-- test/fakeintake/go.sum | 12 ++++---- test/new-e2e/go.mod | 14 +++++----- test/new-e2e/go.sum | 28 +++++++++---------- test/otel/go.mod | 8 +++--- test/otel/go.sum | 20 ++++++------- 127 files changed, 512 insertions(+), 513 deletions(-) diff --git a/comp/api/authtoken/go.mod b/comp/api/authtoken/go.mod index 6bf63f57e855b..ca4e617286f9e 100644 --- a/comp/api/authtoken/go.mod +++ b/comp/api/authtoken/go.mod @@ -107,9 +107,9 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/comp/api/authtoken/go.sum b/comp/api/authtoken/go.sum index e3973187c6caa..9694f5d5e2355 100644 --- a/comp/api/authtoken/go.sum +++ b/comp/api/authtoken/go.sum @@ -239,8 +239,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -280,8 +280,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/core/config/go.mod b/comp/core/config/go.mod index 42ae3495ec40c..a8fc87fffecf0 100644 --- a/comp/core/config/go.mod +++ b/comp/core/config/go.mod @@ -103,9 +103,9 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/comp/core/config/go.sum b/comp/core/config/go.sum index def69bbe0b7b4..49f42d5d3e0a6 100644 --- a/comp/core/config/go.sum +++ b/comp/core/config/go.sum @@ -242,8 +242,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -283,8 +283,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/core/log/impl-trace/go.mod b/comp/core/log/impl-trace/go.mod index 1b107db1db8ee..d78d19fde7f68 100644 --- a/comp/core/log/impl-trace/go.mod +++ b/comp/core/log/impl-trace/go.mod @@ -107,9 +107,9 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/comp/core/log/impl-trace/go.sum b/comp/core/log/impl-trace/go.sum index e3973187c6caa..9694f5d5e2355 100644 --- a/comp/core/log/impl-trace/go.sum +++ b/comp/core/log/impl-trace/go.sum @@ -239,8 +239,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -280,8 +280,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/core/log/impl/go.mod b/comp/core/log/impl/go.mod index e6db1f6b650ff..0d68073c13084 100644 --- a/comp/core/log/impl/go.mod +++ b/comp/core/log/impl/go.mod @@ -98,9 +98,9 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/comp/core/log/impl/go.sum b/comp/core/log/impl/go.sum index e3973187c6caa..9694f5d5e2355 100644 --- a/comp/core/log/impl/go.sum +++ b/comp/core/log/impl/go.sum @@ -239,8 +239,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -280,8 +280,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/core/log/mock/go.mod b/comp/core/log/mock/go.mod index 9f9b990745843..8b744f1e85ca2 100644 --- a/comp/core/log/mock/go.mod +++ b/comp/core/log/mock/go.mod @@ -54,9 +54,9 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/comp/core/log/mock/go.sum b/comp/core/log/mock/go.sum index be954babd5c73..2ad11aee593c1 100644 --- a/comp/core/log/mock/go.sum +++ b/comp/core/log/mock/go.sum @@ -207,8 +207,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -244,8 +244,8 @@ golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/core/secrets/go.mod b/comp/core/secrets/go.mod index be88b648342b6..82884c83888ab 100644 --- a/comp/core/secrets/go.mod +++ b/comp/core/secrets/go.mod @@ -27,7 +27,7 @@ require ( github.com/benbjohnson/clock v1.3.5 github.com/stretchr/testify v1.10.0 go.uber.org/fx v1.23.0 - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 golang.org/x/sys v0.28.0 gopkg.in/yaml.v2 v2.4.0 ) diff --git a/comp/core/secrets/go.sum b/comp/core/secrets/go.sum index 0bb14e9d57579..73448320077c4 100644 --- a/comp/core/secrets/go.sum +++ b/comp/core/secrets/go.sum @@ -54,8 +54,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= diff --git a/comp/core/status/go.mod b/comp/core/status/go.mod index 49c200a653ba3..0080f560df33f 100644 --- a/comp/core/status/go.mod +++ b/comp/core/status/go.mod @@ -8,7 +8,7 @@ require ( github.com/spf13/cast v1.7.0 github.com/stretchr/testify v1.10.0 go.uber.org/fx v1.23.0 - golang.org/x/text v0.20.0 + golang.org/x/text v0.21.0 ) require ( diff --git a/comp/core/status/go.sum b/comp/core/status/go.sum index 9d0791f4f7d89..5008e39745d3e 100644 --- a/comp/core/status/go.sum +++ b/comp/core/status/go.sum @@ -42,8 +42,8 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/comp/core/status/statusimpl/go.mod b/comp/core/status/statusimpl/go.mod index 78738479544c0..9487310619057 100644 --- a/comp/core/status/statusimpl/go.mod +++ b/comp/core/status/statusimpl/go.mod @@ -54,7 +54,7 @@ require ( github.com/gorilla/mux v1.8.1 github.com/stretchr/testify v1.10.0 go.uber.org/fx v1.23.0 - golang.org/x/text v0.20.0 + golang.org/x/text v0.21.0 ) require ( @@ -113,7 +113,7 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/comp/core/status/statusimpl/go.sum b/comp/core/status/statusimpl/go.sum index 650216cc0ce50..fafe0837efa7e 100644 --- a/comp/core/status/statusimpl/go.sum +++ b/comp/core/status/statusimpl/go.sum @@ -250,8 +250,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -293,8 +293,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/forwarder/defaultforwarder/go.mod b/comp/forwarder/defaultforwarder/go.mod index 05d96eab4fbcf..a0891b10fda75 100644 --- a/comp/forwarder/defaultforwarder/go.mod +++ b/comp/forwarder/defaultforwarder/go.mod @@ -78,7 +78,7 @@ require ( github.com/stretchr/testify v1.10.0 go.uber.org/atomic v1.11.0 go.uber.org/fx v1.23.0 - golang.org/x/text v0.20.0 + golang.org/x/text v0.21.0 ) require ( @@ -145,8 +145,8 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/comp/forwarder/defaultforwarder/go.sum b/comp/forwarder/defaultforwarder/go.sum index e668380b7ef00..2e4c8055f6ab0 100644 --- a/comp/forwarder/defaultforwarder/go.sum +++ b/comp/forwarder/defaultforwarder/go.sum @@ -262,8 +262,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -281,8 +281,8 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -307,8 +307,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/forwarder/orchestrator/orchestratorinterface/go.mod b/comp/forwarder/orchestrator/orchestratorinterface/go.mod index cb7b6044aeca0..3022f485e02a3 100644 --- a/comp/forwarder/orchestrator/orchestratorinterface/go.mod +++ b/comp/forwarder/orchestrator/orchestratorinterface/go.mod @@ -152,10 +152,10 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/comp/forwarder/orchestrator/orchestratorinterface/go.sum b/comp/forwarder/orchestrator/orchestratorinterface/go.sum index 49efb0a3efaf4..68e574e5c8151 100644 --- a/comp/forwarder/orchestrator/orchestratorinterface/go.sum +++ b/comp/forwarder/orchestrator/orchestratorinterface/go.sum @@ -263,8 +263,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -282,8 +282,8 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -308,8 +308,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/logs/agent/config/go.mod b/comp/logs/agent/config/go.mod index c8360536b53c1..5e99aa77604f0 100644 --- a/comp/logs/agent/config/go.mod +++ b/comp/logs/agent/config/go.mod @@ -99,9 +99,9 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/comp/logs/agent/config/go.sum b/comp/logs/agent/config/go.sum index e3973187c6caa..9694f5d5e2355 100644 --- a/comp/logs/agent/config/go.sum +++ b/comp/logs/agent/config/go.sum @@ -239,8 +239,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -280,8 +280,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/otelcol/converter/impl/go.mod b/comp/otelcol/converter/impl/go.mod index 8b903df1c03a1..b3bae2ce5b62b 100644 --- a/comp/otelcol/converter/impl/go.mod +++ b/comp/otelcol/converter/impl/go.mod @@ -114,9 +114,9 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/comp/otelcol/converter/impl/go.sum b/comp/otelcol/converter/impl/go.sum index f3a0f24d8dbe0..a98a26b75f480 100644 --- a/comp/otelcol/converter/impl/go.sum +++ b/comp/otelcol/converter/impl/go.sum @@ -263,8 +263,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -304,8 +304,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/otelcol/ddflareextension/def/go.mod b/comp/otelcol/ddflareextension/def/go.mod index afbb13fd7dc20..7ac807821aee4 100644 --- a/comp/otelcol/ddflareextension/def/go.mod +++ b/comp/otelcol/ddflareextension/def/go.mod @@ -16,9 +16,9 @@ require ( go.opentelemetry.io/otel/trace v1.32.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.67.1 // indirect google.golang.org/protobuf v1.35.2 // indirect diff --git a/comp/otelcol/ddflareextension/def/go.sum b/comp/otelcol/ddflareextension/def/go.sum index 7ce93f374bad3..cb77fcd0e24d3 100644 --- a/comp/otelcol/ddflareextension/def/go.sum +++ b/comp/otelcol/ddflareextension/def/go.sum @@ -45,8 +45,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -57,8 +57,8 @@ golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= diff --git a/comp/otelcol/ddflareextension/impl/go.mod b/comp/otelcol/ddflareextension/impl/go.mod index aff23ccf9501f..4deb81664b9ff 100644 --- a/comp/otelcol/ddflareextension/impl/go.mod +++ b/comp/otelcol/ddflareextension/impl/go.mod @@ -502,17 +502,17 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.29.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/crypto v0.31.0 // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/mod v0.22.0 // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect - golang.org/x/sync v0.9.0 // indirect + golang.org/x/sync v0.10.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/term v0.26.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/term v0.27.0 // indirect + golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.8.0 // indirect - golang.org/x/tools v0.27.0 // indirect + golang.org/x/tools v0.28.0 // indirect gonum.org/v1/gonum v0.15.1 // indirect google.golang.org/api v0.199.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 // indirect diff --git a/comp/otelcol/ddflareextension/impl/go.sum b/comp/otelcol/ddflareextension/impl/go.sum index be1b5d78f453d..b4c098bd22dcd 100644 --- a/comp/otelcol/ddflareextension/impl/go.sum +++ b/comp/otelcol/ddflareextension/impl/go.sum @@ -1055,8 +1055,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1067,8 +1067,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1139,8 +1139,8 @@ golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1162,8 +1162,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1238,8 +1238,8 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= -golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= -golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1251,8 +1251,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1310,8 +1310,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o= -golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/comp/otelcol/logsagentpipeline/go.mod b/comp/otelcol/logsagentpipeline/go.mod index 603e8abcce366..fd1925f5a1a1d 100644 --- a/comp/otelcol/logsagentpipeline/go.mod +++ b/comp/otelcol/logsagentpipeline/go.mod @@ -152,10 +152,10 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/comp/otelcol/logsagentpipeline/go.sum b/comp/otelcol/logsagentpipeline/go.sum index 0816ff6b27cb5..9061e9b89a5c6 100644 --- a/comp/otelcol/logsagentpipeline/go.sum +++ b/comp/otelcol/logsagentpipeline/go.sum @@ -260,8 +260,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -282,8 +282,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -309,8 +309,8 @@ golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod index a21412d390c1b..6bce0b3c962d4 100644 --- a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod +++ b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod @@ -164,10 +164,10 @@ require ( go.uber.org/atomic v1.11.0 // indirect go.uber.org/dig v1.18.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum index 0816ff6b27cb5..9061e9b89a5c6 100644 --- a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum +++ b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum @@ -260,8 +260,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -282,8 +282,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -309,8 +309,8 @@ golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod index 5f275b6f0bb73..d29e1451378c7 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod @@ -318,12 +318,12 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/term v0.26.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/term v0.27.0 // indirect + golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.8.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.67.1 // indirect diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum index fc769d52cb6f5..5a622c5f06bbe 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum @@ -505,11 +505,11 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -532,8 +532,8 @@ golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= @@ -569,12 +569,12 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= -golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod index 94fee13bbfe24..a040e58e4630b 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod @@ -155,12 +155,12 @@ require ( go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/term v0.26.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/term v0.27.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.67.1 // indirect google.golang.org/protobuf v1.35.2 // indirect diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum index 4798a24352a51..c65db2e5974bf 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum @@ -353,8 +353,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -375,8 +375,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= @@ -404,12 +404,12 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= -golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod index f767ab1daffe5..c47c4c07206d3 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod @@ -214,10 +214,10 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/fx v1.23.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.67.1 // indirect google.golang.org/protobuf v1.35.2 // indirect diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum index b2344c6db0ff7..e39d69c0417ad 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum @@ -436,8 +436,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -458,8 +458,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -487,8 +487,8 @@ golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/otelcol/otlp/components/metricsclient/go.sum b/comp/otelcol/otlp/components/metricsclient/go.sum index 8c8f8cb8beddc..d3cbee6f76083 100644 --- a/comp/otelcol/otlp/components/metricsclient/go.sum +++ b/comp/otelcol/otlp/components/metricsclient/go.sum @@ -64,8 +64,8 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/comp/otelcol/otlp/components/statsprocessor/go.mod b/comp/otelcol/otlp/components/statsprocessor/go.mod index 9df46434c305c..c0343f17f54b3 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.mod +++ b/comp/otelcol/otlp/components/statsprocessor/go.mod @@ -88,9 +88,9 @@ require ( go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.8.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.67.1 // indirect diff --git a/comp/otelcol/otlp/components/statsprocessor/go.sum b/comp/otelcol/otlp/components/statsprocessor/go.sum index d1dd6e5377312..6d97a13321636 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.sum +++ b/comp/otelcol/otlp/components/statsprocessor/go.sum @@ -184,8 +184,8 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -194,8 +194,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -217,8 +217,8 @@ golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/otelcol/otlp/testutil/go.mod b/comp/otelcol/otlp/testutil/go.mod index ebc99a3dd4da4..3612a4e9b1e4c 100644 --- a/comp/otelcol/otlp/testutil/go.mod +++ b/comp/otelcol/otlp/testutil/go.mod @@ -96,10 +96,10 @@ require ( github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.67.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/comp/otelcol/otlp/testutil/go.sum b/comp/otelcol/otlp/testutil/go.sum index b4642ab1ea7f1..90eafd9495c03 100644 --- a/comp/otelcol/otlp/testutil/go.sum +++ b/comp/otelcol/otlp/testutil/go.sum @@ -269,8 +269,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -291,8 +291,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -318,8 +318,8 @@ golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/serializer/compression/go.mod b/comp/serializer/compression/go.mod index 7540d0254c299..a46ee59b26ae6 100644 --- a/comp/serializer/compression/go.mod +++ b/comp/serializer/compression/go.mod @@ -96,9 +96,9 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/comp/serializer/compression/go.sum b/comp/serializer/compression/go.sum index 47b6f74242930..a3f8c86e6fc2e 100644 --- a/comp/serializer/compression/go.sum +++ b/comp/serializer/compression/go.sum @@ -241,8 +241,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -282,8 +282,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/comp/trace/agent/def/go.mod b/comp/trace/agent/def/go.mod index 051fa39644e58..c7b0d130245fe 100644 --- a/comp/trace/agent/def/go.mod +++ b/comp/trace/agent/def/go.mod @@ -30,9 +30,9 @@ require ( go.opentelemetry.io/otel/trace v1.32.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.67.1 // indirect google.golang.org/protobuf v1.35.2 // indirect diff --git a/comp/trace/agent/def/go.sum b/comp/trace/agent/def/go.sum index f6a6d197fb0a4..983db883b8b3d 100644 --- a/comp/trace/agent/def/go.sum +++ b/comp/trace/agent/def/go.sum @@ -80,8 +80,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -92,8 +92,8 @@ golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= diff --git a/go.mod b/go.mod index a0b1c786a0280..e3a858a713143 100644 --- a/go.mod +++ b/go.mod @@ -307,13 +307,13 @@ require ( go.uber.org/zap v1.27.0 go4.org/netipx v0.0.0-20220812043211-3cc044ffd68d golang.org/x/arch v0.12.0 - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f - golang.org/x/net v0.31.0 - golang.org/x/sync v0.9.0 + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 + golang.org/x/net v0.32.0 + golang.org/x/sync v0.10.0 golang.org/x/sys v0.28.0 - golang.org/x/text v0.20.0 + golang.org/x/text v0.21.0 golang.org/x/time v0.8.0 - golang.org/x/tools v0.27.0 + golang.org/x/tools v0.28.0 golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect google.golang.org/grpc v1.67.1 @@ -567,10 +567,10 @@ require ( go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect go.opentelemetry.io/otel/trace v1.32.0 go.opentelemetry.io/proto/otlp v1.3.1 // indirect - golang.org/x/crypto v0.29.0 // indirect + golang.org/x/crypto v0.31.0 // indirect golang.org/x/mod v0.22.0 golang.org/x/oauth2 v0.23.0 // indirect - golang.org/x/term v0.26.0 // indirect + golang.org/x/term v0.27.0 // indirect gonum.org/v1/gonum v0.15.1 // indirect google.golang.org/api v0.199.0 // indirect google.golang.org/appengine v1.6.8 // indirect diff --git a/go.sum b/go.sum index eff56174f57ba..d0f18b589c118 100644 --- a/go.sum +++ b/go.sum @@ -2156,8 +2156,8 @@ golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -2168,8 +2168,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f h1:phY1HzDcf18Aq9A8KkmRtY9WvOFIxN8wgfvy6Zm1DV8= golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= @@ -2266,8 +2266,8 @@ golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190130055435-99b60b757ec1/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -2292,8 +2292,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2401,8 +2401,8 @@ golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= -golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= -golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2419,8 +2419,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2489,8 +2489,8 @@ golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= -golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o= -golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/internal/tools/go.mod b/internal/tools/go.mod index 977b438c8a53b..e2a60b08d8971 100644 --- a/internal/tools/go.mod +++ b/internal/tools/go.mod @@ -223,16 +223,16 @@ require ( go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/crypto v0.29.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/crypto v0.31.0 // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f // indirect golang.org/x/mod v0.22.0 // indirect - golang.org/x/net v0.31.0 // indirect - golang.org/x/sync v0.9.0 // indirect + golang.org/x/net v0.32.0 // indirect + golang.org/x/sync v0.10.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/term v0.26.0 // indirect - golang.org/x/text v0.20.0 // indirect - golang.org/x/tools v0.27.0 // indirect + golang.org/x/term v0.27.0 // indirect + golang.org/x/text v0.21.0 // indirect + golang.org/x/tools v0.28.0 // indirect gonum.org/v1/gonum v0.15.1 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/internal/tools/go.sum b/internal/tools/go.sum index e525259ff8fe1..f5f1fb317b59a 100644 --- a/internal/tools/go.sum +++ b/internal/tools/go.sum @@ -589,14 +589,14 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f h1:phY1HzDcf18Aq9A8KkmRtY9WvOFIxN8wgfvy6Zm1DV8= @@ -643,8 +643,8 @@ golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20170207211851-4464e7848382/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/perf v0.0.0-20210220033136-40a54f11e909 h1:rWw0Gj4DMl/2otJ8CnfTcwOWkpROAc6qhXXoMrYOCgo= golang.org/x/perf v0.0.0-20210220033136-40a54f11e909/go.mod h1:KRSrLY7jerMEa0Ih7gBheQ3FYDiSx6liMnniX1o3j2g= @@ -657,8 +657,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -699,8 +699,8 @@ golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= -golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= -golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -711,8 +711,8 @@ golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -740,8 +740,8 @@ golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8= -golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o= -golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/internal/tools/proto/go.mod b/internal/tools/proto/go.mod index c184f7199cac0..12d0a2fb58004 100644 --- a/internal/tools/proto/go.mod +++ b/internal/tools/proto/go.mod @@ -19,11 +19,11 @@ require ( github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect golang.org/x/mod v0.22.0 // indirect - golang.org/x/net v0.31.0 // indirect - golang.org/x/sync v0.9.0 // indirect + golang.org/x/net v0.32.0 // indirect + golang.org/x/sync v0.10.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect - golang.org/x/tools v0.27.0 // indirect + golang.org/x/text v0.21.0 // indirect + golang.org/x/tools v0.28.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/protobuf v1.35.2 // indirect diff --git a/internal/tools/proto/go.sum b/internal/tools/proto/go.sum index eaa399967ead7..3d105f38523d1 100644 --- a/internal/tools/proto/go.sum +++ b/internal/tools/proto/go.sum @@ -71,8 +71,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -80,8 +80,8 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -94,8 +94,8 @@ golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -103,8 +103,8 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o= -golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/pkg/api/go.mod b/pkg/api/go.mod index cc581a79c93ff..c3499a2fb94c2 100644 --- a/pkg/api/go.mod +++ b/pkg/api/go.mod @@ -100,9 +100,9 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/api/go.sum b/pkg/api/go.sum index e3973187c6caa..9694f5d5e2355 100644 --- a/pkg/api/go.sum +++ b/pkg/api/go.sum @@ -239,8 +239,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -280,8 +280,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/config/env/go.mod b/pkg/config/env/go.mod index 34b158b27e106..637c78a705df1 100644 --- a/pkg/config/env/go.mod +++ b/pkg/config/env/go.mod @@ -45,9 +45,9 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/config/env/go.sum b/pkg/config/env/go.sum index 55897bd029c82..d7d4a9a3701e0 100644 --- a/pkg/config/env/go.sum +++ b/pkg/config/env/go.sum @@ -200,8 +200,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -241,8 +241,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/config/mock/go.mod b/pkg/config/mock/go.mod index a358e04841b8b..48f1f452fa096 100644 --- a/pkg/config/mock/go.mod +++ b/pkg/config/mock/go.mod @@ -79,9 +79,9 @@ require ( github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/config/mock/go.sum b/pkg/config/mock/go.sum index 6df24d44986c1..3f00397cbc301 100644 --- a/pkg/config/mock/go.sum +++ b/pkg/config/mock/go.sum @@ -235,8 +235,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -276,8 +276,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/config/model/go.mod b/pkg/config/model/go.mod index 4fb2df929ebac..c77134c93ba10 100644 --- a/pkg/config/model/go.mod +++ b/pkg/config/model/go.mod @@ -14,7 +14,7 @@ require ( github.com/DataDog/viper v1.14.0 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 github.com/stretchr/testify v1.10.0 - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 ) require ( @@ -34,7 +34,7 @@ require ( github.com/spf13/pflag v1.0.5 // indirect go.uber.org/atomic v1.11.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/config/model/go.sum b/pkg/config/model/go.sum index 7b03b89cac861..4ffd1e9d2ce0a 100644 --- a/pkg/config/model/go.sum +++ b/pkg/config/model/go.sum @@ -185,8 +185,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -222,8 +222,8 @@ golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/config/nodetreemodel/go.mod b/pkg/config/nodetreemodel/go.mod index de9da422721ad..e0f87c66cb372 100644 --- a/pkg/config/nodetreemodel/go.mod +++ b/pkg/config/nodetreemodel/go.mod @@ -19,7 +19,7 @@ require ( github.com/spf13/cast v1.7.0 github.com/stretchr/testify v1.10.0 go.uber.org/atomic v1.11.0 - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 gopkg.in/yaml.v2 v2.4.0 ) @@ -38,7 +38,7 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/config/nodetreemodel/go.sum b/pkg/config/nodetreemodel/go.sum index ebb19c16de189..c5a94912c5617 100644 --- a/pkg/config/nodetreemodel/go.sum +++ b/pkg/config/nodetreemodel/go.sum @@ -188,8 +188,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -225,8 +225,8 @@ golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/config/remote/go.mod b/pkg/config/remote/go.mod index 418e2f017f81d..ec7d298386516 100644 --- a/pkg/config/remote/go.mod +++ b/pkg/config/remote/go.mod @@ -112,7 +112,7 @@ require ( github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/mod v0.22.0 // indirect golang.org/x/time v0.8.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect @@ -141,9 +141,9 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/tinylib/msgp v1.2.4 // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect diff --git a/pkg/config/remote/go.sum b/pkg/config/remote/go.sum index fa403bade18cb..e9342de28e23c 100644 --- a/pkg/config/remote/go.sum +++ b/pkg/config/remote/go.sum @@ -347,11 +347,11 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -378,8 +378,8 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= @@ -391,8 +391,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -420,8 +420,8 @@ golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= diff --git a/pkg/config/setup/go.mod b/pkg/config/setup/go.mod index c02d710d51f13..b7c9ff41de81b 100644 --- a/pkg/config/setup/go.mod +++ b/pkg/config/setup/go.mod @@ -101,9 +101,9 @@ require ( go.uber.org/dig v1.18.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/config/setup/go.sum b/pkg/config/setup/go.sum index 18e09a82750bb..7f15a6d221890 100644 --- a/pkg/config/setup/go.sum +++ b/pkg/config/setup/go.sum @@ -244,8 +244,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -285,8 +285,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/config/structure/go.mod b/pkg/config/structure/go.mod index 83c57b35c79fd..0ad28fd9f92f5 100644 --- a/pkg/config/structure/go.mod +++ b/pkg/config/structure/go.mod @@ -58,9 +58,9 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/config/structure/go.sum b/pkg/config/structure/go.sum index ebb19c16de189..c5a94912c5617 100644 --- a/pkg/config/structure/go.sum +++ b/pkg/config/structure/go.sum @@ -188,8 +188,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -225,8 +225,8 @@ golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/config/teeconfig/go.mod b/pkg/config/teeconfig/go.mod index 7644391c8d1bf..2484fb9cd55e3 100644 --- a/pkg/config/teeconfig/go.mod +++ b/pkg/config/teeconfig/go.mod @@ -29,9 +29,9 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/pkg/config/teeconfig/go.sum b/pkg/config/teeconfig/go.sum index 7b03b89cac861..4ffd1e9d2ce0a 100644 --- a/pkg/config/teeconfig/go.sum +++ b/pkg/config/teeconfig/go.sum @@ -185,8 +185,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -222,8 +222,8 @@ golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/config/utils/go.mod b/pkg/config/utils/go.mod index d8f776a5d5ebd..5fc90b2da63fd 100644 --- a/pkg/config/utils/go.mod +++ b/pkg/config/utils/go.mod @@ -84,9 +84,9 @@ require ( github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/config/utils/go.sum b/pkg/config/utils/go.sum index 6df24d44986c1..3f00397cbc301 100644 --- a/pkg/config/utils/go.sum +++ b/pkg/config/utils/go.sum @@ -235,8 +235,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -276,8 +276,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/linters/components/pkgconfigusage/go.mod b/pkg/linters/components/pkgconfigusage/go.mod index 20461858aabd2..9b24d1e11940e 100644 --- a/pkg/linters/components/pkgconfigusage/go.mod +++ b/pkg/linters/components/pkgconfigusage/go.mod @@ -5,7 +5,7 @@ go 1.23.0 require ( github.com/golangci/plugin-module-register v0.1.1 github.com/stretchr/testify v1.10.0 - golang.org/x/tools v0.27.0 + golang.org/x/tools v0.28.0 ) require ( @@ -14,7 +14,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect golang.org/x/mod v0.22.0 // indirect - golang.org/x/sync v0.9.0 // indirect + golang.org/x/sync v0.10.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/linters/components/pkgconfigusage/go.sum b/pkg/linters/components/pkgconfigusage/go.sum index 9f7ff6dacdfaf..11aca8345b971 100644 --- a/pkg/linters/components/pkgconfigusage/go.sum +++ b/pkg/linters/components/pkgconfigusage/go.sum @@ -22,10 +22,10 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o= -golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/pkg/logs/auditor/go.mod b/pkg/logs/auditor/go.mod index d375aa6e7038d..3fc9bf65dfa46 100644 --- a/pkg/logs/auditor/go.mod +++ b/pkg/logs/auditor/go.mod @@ -98,9 +98,9 @@ require ( github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/logs/auditor/go.sum b/pkg/logs/auditor/go.sum index 6df24d44986c1..3f00397cbc301 100644 --- a/pkg/logs/auditor/go.sum +++ b/pkg/logs/auditor/go.sum @@ -235,8 +235,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -276,8 +276,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/logs/client/go.mod b/pkg/logs/client/go.mod index 8ca05dfb2f632..093922b236bf3 100644 --- a/pkg/logs/client/go.mod +++ b/pkg/logs/client/go.mod @@ -63,7 +63,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/version v0.59.1 github.com/stretchr/testify v1.10.0 - golang.org/x/net v0.31.0 + golang.org/x/net v0.32.0 ) require ( @@ -130,9 +130,9 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/logs/client/go.sum b/pkg/logs/client/go.sum index 65b369f190875..1140bccbba9c9 100644 --- a/pkg/logs/client/go.sum +++ b/pkg/logs/client/go.sum @@ -244,8 +244,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -263,8 +263,8 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -287,8 +287,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/logs/diagnostic/go.mod b/pkg/logs/diagnostic/go.mod index b8ef753620e44..65fb4af75f769 100644 --- a/pkg/logs/diagnostic/go.mod +++ b/pkg/logs/diagnostic/go.mod @@ -108,9 +108,9 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/logs/diagnostic/go.sum b/pkg/logs/diagnostic/go.sum index e3973187c6caa..9694f5d5e2355 100644 --- a/pkg/logs/diagnostic/go.sum +++ b/pkg/logs/diagnostic/go.sum @@ -239,8 +239,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -280,8 +280,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/logs/message/go.mod b/pkg/logs/message/go.mod index 463f6366031f4..716c4a57de92f 100644 --- a/pkg/logs/message/go.mod +++ b/pkg/logs/message/go.mod @@ -94,9 +94,9 @@ require ( github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/logs/message/go.sum b/pkg/logs/message/go.sum index 6df24d44986c1..3f00397cbc301 100644 --- a/pkg/logs/message/go.sum +++ b/pkg/logs/message/go.sum @@ -235,8 +235,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -276,8 +276,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/logs/pipeline/go.mod b/pkg/logs/pipeline/go.mod index 8b584b5b1aa03..b2cca0985481e 100644 --- a/pkg/logs/pipeline/go.mod +++ b/pkg/logs/pipeline/go.mod @@ -149,10 +149,10 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/logs/pipeline/go.sum b/pkg/logs/pipeline/go.sum index 0816ff6b27cb5..9061e9b89a5c6 100644 --- a/pkg/logs/pipeline/go.sum +++ b/pkg/logs/pipeline/go.sum @@ -260,8 +260,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -282,8 +282,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -309,8 +309,8 @@ golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/logs/processor/go.mod b/pkg/logs/processor/go.mod index ffa047656aa16..cc9458ea710c0 100644 --- a/pkg/logs/processor/go.mod +++ b/pkg/logs/processor/go.mod @@ -129,9 +129,9 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/logs/processor/go.sum b/pkg/logs/processor/go.sum index df30b2959c6d8..f97a65425513e 100644 --- a/pkg/logs/processor/go.sum +++ b/pkg/logs/processor/go.sum @@ -255,8 +255,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -302,8 +302,8 @@ golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/logs/sds/go.mod b/pkg/logs/sds/go.mod index 71861e9789dd6..33c40479ed13f 100644 --- a/pkg/logs/sds/go.mod +++ b/pkg/logs/sds/go.mod @@ -123,9 +123,9 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/logs/sds/go.sum b/pkg/logs/sds/go.sum index ba2765ae6cc8c..a5a699a22e560 100644 --- a/pkg/logs/sds/go.sum +++ b/pkg/logs/sds/go.sum @@ -244,8 +244,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -285,8 +285,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/logs/sender/go.mod b/pkg/logs/sender/go.mod index c6222c7c0214c..5a77fb5bb761d 100644 --- a/pkg/logs/sender/go.mod +++ b/pkg/logs/sender/go.mod @@ -130,10 +130,10 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/logs/sender/go.sum b/pkg/logs/sender/go.sum index 65b369f190875..1140bccbba9c9 100644 --- a/pkg/logs/sender/go.sum +++ b/pkg/logs/sender/go.sum @@ -244,8 +244,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -263,8 +263,8 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -287,8 +287,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/logs/sources/go.mod b/pkg/logs/sources/go.mod index 736839618c355..a5ff5d7147d72 100644 --- a/pkg/logs/sources/go.mod +++ b/pkg/logs/sources/go.mod @@ -92,9 +92,9 @@ require ( github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/logs/sources/go.sum b/pkg/logs/sources/go.sum index 6df24d44986c1..3f00397cbc301 100644 --- a/pkg/logs/sources/go.sum +++ b/pkg/logs/sources/go.sum @@ -235,8 +235,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -276,8 +276,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/logs/util/testutils/go.mod b/pkg/logs/util/testutils/go.mod index 6c8ce3a26dae3..ebf193c2c90a2 100644 --- a/pkg/logs/util/testutils/go.mod +++ b/pkg/logs/util/testutils/go.mod @@ -91,8 +91,8 @@ require ( github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/pkg/logs/util/testutils/go.sum b/pkg/logs/util/testutils/go.sum index 6df24d44986c1..3f00397cbc301 100644 --- a/pkg/logs/util/testutils/go.sum +++ b/pkg/logs/util/testutils/go.sum @@ -235,8 +235,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -276,8 +276,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/metrics/go.mod b/pkg/metrics/go.mod index e506cd41e855c..46137034d3399 100644 --- a/pkg/metrics/go.mod +++ b/pkg/metrics/go.mod @@ -115,9 +115,9 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/metrics/go.sum b/pkg/metrics/go.sum index 6316d64a4973c..0b55a947b65bf 100644 --- a/pkg/metrics/go.sum +++ b/pkg/metrics/go.sum @@ -254,8 +254,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -295,8 +295,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/obfuscate/go.mod b/pkg/obfuscate/go.mod index 6244babbebdad..7085b75f3783d 100644 --- a/pkg/obfuscate/go.mod +++ b/pkg/obfuscate/go.mod @@ -20,7 +20,7 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/obfuscate/go.sum b/pkg/obfuscate/go.sum index 110dcdcb3b979..e36a2867eaba6 100644 --- a/pkg/obfuscate/go.sum +++ b/pkg/obfuscate/go.sum @@ -62,8 +62,8 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/pkg/proto/go.mod b/pkg/proto/go.mod index 31b8133d579a2..f8bf148c648a2 100644 --- a/pkg/proto/go.mod +++ b/pkg/proto/go.mod @@ -24,9 +24,9 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/vmihailenco/tagparser v0.1.2 // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect diff --git a/pkg/proto/go.sum b/pkg/proto/go.sum index e5169ad285286..7299faff27435 100644 --- a/pkg/proto/go.sum +++ b/pkg/proto/go.sum @@ -89,8 +89,8 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -118,8 +118,8 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= diff --git a/pkg/remoteconfig/state/go.mod b/pkg/remoteconfig/state/go.mod index cba41ddd27681..d9fead6f8ede8 100644 --- a/pkg/remoteconfig/state/go.mod +++ b/pkg/remoteconfig/state/go.mod @@ -14,7 +14,6 @@ require ( github.com/kr/pretty v0.3.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect - golang.org/x/crypto v0.29.0 // indirect - golang.org/x/sys v0.28.0 // indirect + golang.org/x/crypto v0.31.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/remoteconfig/state/go.sum b/pkg/remoteconfig/state/go.sum index 5d971132d7ec4..d86844e767b4e 100644 --- a/pkg/remoteconfig/state/go.sum +++ b/pkg/remoteconfig/state/go.sum @@ -21,8 +21,8 @@ github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbm github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/pkg/security/secl/go.mod b/pkg/security/secl/go.mod index 8be4ff1e048be..7a709c2832e48 100644 --- a/pkg/security/secl/go.mod +++ b/pkg/security/secl/go.mod @@ -18,8 +18,8 @@ require ( github.com/stretchr/testify v1.10.0 github.com/xeipuuv/gojsonschema v1.2.0 golang.org/x/sys v0.28.0 - golang.org/x/text v0.20.0 - golang.org/x/tools v0.27.0 + golang.org/x/text v0.21.0 + golang.org/x/tools v0.28.0 gopkg.in/yaml.v3 v3.0.1 modernc.org/mathutil v1.6.0 sigs.k8s.io/yaml v1.4.0 @@ -39,8 +39,8 @@ require ( github.com/shopspring/decimal v1.4.0 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect - golang.org/x/crypto v0.29.0 // indirect + golang.org/x/crypto v0.31.0 // indirect golang.org/x/mod v0.22.0 // indirect - golang.org/x/sync v0.9.0 // indirect + golang.org/x/sync v0.10.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect ) diff --git a/pkg/security/secl/go.sum b/pkg/security/secl/go.sum index 354a1917077fc..267d639c9503a 100644 --- a/pkg/security/secl/go.sum +++ b/pkg/security/secl/go.sum @@ -75,29 +75,29 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o= -golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/pkg/security/seclwin/go.mod b/pkg/security/seclwin/go.mod index 174d361f3255d..496f580b96071 100644 --- a/pkg/security/seclwin/go.mod +++ b/pkg/security/seclwin/go.mod @@ -13,5 +13,5 @@ require ( github.com/alecthomas/participle v0.7.1 // indirect github.com/jellydator/ttlcache/v3 v3.3.0 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect - golang.org/x/sync v0.9.0 // indirect + golang.org/x/sync v0.10.0 // indirect ) diff --git a/pkg/security/seclwin/go.sum b/pkg/security/seclwin/go.sum index 502e756cc9c46..8207782fa1c53 100644 --- a/pkg/security/seclwin/go.sum +++ b/pkg/security/seclwin/go.sum @@ -18,8 +18,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/pkg/serializer/go.mod b/pkg/serializer/go.mod index 545b645414136..dd7f21c9fdbe9 100644 --- a/pkg/serializer/go.mod +++ b/pkg/serializer/go.mod @@ -177,10 +177,10 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/serializer/go.sum b/pkg/serializer/go.sum index 74a1c5f4717db..67815a3db8c1d 100644 --- a/pkg/serializer/go.sum +++ b/pkg/serializer/go.sum @@ -301,8 +301,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -323,8 +323,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -352,8 +352,8 @@ golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/trace/go.mod b/pkg/trace/go.mod index 9a1f316511e3a..7d0666e48194e 100644 --- a/pkg/trace/go.mod +++ b/pkg/trace/go.mod @@ -105,8 +105,8 @@ require ( go.opentelemetry.io/otel/trace v1.32.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/net v0.31.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/net v0.32.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/pkg/trace/go.sum b/pkg/trace/go.sum index f4ee6919325a7..2500f28a6512c 100644 --- a/pkg/trace/go.sum +++ b/pkg/trace/go.sum @@ -316,8 +316,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -333,8 +333,8 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -364,8 +364,8 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/trace/stats/oteltest/go.mod b/pkg/trace/stats/oteltest/go.mod index 1880e691cf094..b6992747ee41b 100644 --- a/pkg/trace/stats/oteltest/go.mod +++ b/pkg/trace/stats/oteltest/go.mod @@ -75,9 +75,9 @@ require ( go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.8.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.67.1 // indirect diff --git a/pkg/trace/stats/oteltest/go.sum b/pkg/trace/stats/oteltest/go.sum index d1dd6e5377312..6d97a13321636 100644 --- a/pkg/trace/stats/oteltest/go.sum +++ b/pkg/trace/stats/oteltest/go.sum @@ -184,8 +184,8 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -194,8 +194,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -217,8 +217,8 @@ golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/util/flavor/go.mod b/pkg/util/flavor/go.mod index b4cde61713931..4b2095a3d95dd 100644 --- a/pkg/util/flavor/go.mod +++ b/pkg/util/flavor/go.mod @@ -80,9 +80,9 @@ require ( github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/util/flavor/go.sum b/pkg/util/flavor/go.sum index 6df24d44986c1..3f00397cbc301 100644 --- a/pkg/util/flavor/go.sum +++ b/pkg/util/flavor/go.sum @@ -235,8 +235,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -276,8 +276,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/util/grpc/go.mod b/pkg/util/grpc/go.mod index 977343bfe3c4d..46b4cce771519 100644 --- a/pkg/util/grpc/go.mod +++ b/pkg/util/grpc/go.mod @@ -40,7 +40,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 github.com/stretchr/testify v1.10.0 - golang.org/x/net v0.31.0 + golang.org/x/net v0.32.0 google.golang.org/grpc v1.67.1 ) @@ -95,10 +95,10 @@ require ( github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/oauth2 v0.23.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect diff --git a/pkg/util/grpc/go.sum b/pkg/util/grpc/go.sum index 6467120987601..6b1fd57ab75ad 100644 --- a/pkg/util/grpc/go.sum +++ b/pkg/util/grpc/go.sum @@ -268,8 +268,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -292,8 +292,8 @@ golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= @@ -324,8 +324,8 @@ golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/util/http/go.mod b/pkg/util/http/go.mod index 39e32393df50d..fd083ad63e413 100644 --- a/pkg/util/http/go.mod +++ b/pkg/util/http/go.mod @@ -35,7 +35,7 @@ require ( github.com/DataDog/datadog-agent/pkg/config/model v0.59.0 github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/stretchr/testify v1.10.0 - golang.org/x/net v0.31.0 + golang.org/x/net v0.32.0 ) require ( @@ -82,9 +82,9 @@ require ( github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/util/http/go.sum b/pkg/util/http/go.sum index d2f68d6435b82..71817661e74a3 100644 --- a/pkg/util/http/go.sum +++ b/pkg/util/http/go.sum @@ -235,8 +235,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -254,8 +254,8 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -278,8 +278,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/pkg/util/log/setup/go.mod b/pkg/util/log/setup/go.mod index f865653e53d51..480a4c8b2e4cd 100644 --- a/pkg/util/log/setup/go.mod +++ b/pkg/util/log/setup/go.mod @@ -81,9 +81,9 @@ require ( github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/util/log/setup/go.sum b/pkg/util/log/setup/go.sum index 6df24d44986c1..3f00397cbc301 100644 --- a/pkg/util/log/setup/go.sum +++ b/pkg/util/log/setup/go.sum @@ -235,8 +235,8 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -276,8 +276,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/test/fakeintake/go.mod b/test/fakeintake/go.mod index b4094d4af835e..4dd9e30ab4a7d 100644 --- a/test/fakeintake/go.mod +++ b/test/fakeintake/go.mod @@ -54,8 +54,8 @@ require ( github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/spf13/pflag v1.0.5 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.20.0 // indirect - golang.org/x/tools v0.27.0 // indirect + golang.org/x/text v0.21.0 // indirect + golang.org/x/tools v0.28.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 // indirect modernc.org/libc v1.55.3 // indirect diff --git a/test/fakeintake/go.sum b/test/fakeintake/go.sum index 7267f4b399133..5eac49258c5fa 100644 --- a/test/fakeintake/go.sum +++ b/test/fakeintake/go.sum @@ -109,8 +109,8 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -119,14 +119,14 @@ golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o= -golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/test/new-e2e/go.mod b/test/new-e2e/go.mod index e8dde1fd6d8b6..b24309be06e28 100644 --- a/test/new-e2e/go.mod +++ b/test/new-e2e/go.mod @@ -79,9 +79,9 @@ require ( github.com/samber/lo v1.47.0 github.com/stretchr/testify v1.10.0 github.com/xeipuuv/gojsonschema v1.2.0 - golang.org/x/crypto v0.29.0 + golang.org/x/crypto v0.31.0 golang.org/x/sys v0.28.0 - golang.org/x/term v0.26.0 + golang.org/x/term v0.27.0 gopkg.in/yaml.v2 v2.4.0 gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 k8s.io/api v0.31.3 @@ -253,14 +253,14 @@ require ( go.opentelemetry.io/otel/trace v1.32.0 // indirect go.starlark.net v0.0.0-20231101134539-556fd59b42f6 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 golang.org/x/mod v0.22.0 // indirect - golang.org/x/net v0.31.0 + golang.org/x/net v0.32.0 golang.org/x/oauth2 v0.23.0 // indirect - golang.org/x/sync v0.9.0 // indirect - golang.org/x/text v0.20.0 + golang.org/x/sync v0.10.0 // indirect + golang.org/x/text v0.21.0 golang.org/x/time v0.8.0 // indirect - golang.org/x/tools v0.27.0 // indirect + golang.org/x/tools v0.28.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.67.1 // indirect google.golang.org/protobuf v1.35.2 // indirect diff --git a/test/new-e2e/go.sum b/test/new-e2e/go.sum index 516b220165409..762f7309695c4 100644 --- a/test/new-e2e/go.sum +++ b/test/new-e2e/go.sum @@ -559,11 +559,11 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -591,8 +591,8 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= @@ -605,8 +605,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -636,15 +636,15 @@ golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= -golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -659,8 +659,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o= -golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/test/otel/go.mod b/test/otel/go.mod index 3bb758c1620d7..61cea6579311f 100644 --- a/test/otel/go.mod +++ b/test/otel/go.mod @@ -291,12 +291,12 @@ require ( go.uber.org/fx v1.23.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect - golang.org/x/net v0.31.0 // indirect + golang.org/x/exp v0.0.0-20241210194714-1829a127f884 // indirect + golang.org/x/net v0.32.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect golang.org/x/sys v0.28.0 // indirect - golang.org/x/term v0.26.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/term v0.27.0 // indirect + golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.8.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.67.1 // indirect diff --git a/test/otel/go.sum b/test/otel/go.sum index 2fcc58afcf90e..a50f250b894a6 100644 --- a/test/otel/go.sum +++ b/test/otel/go.sum @@ -487,11 +487,11 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU= +golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -514,8 +514,8 @@ golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= @@ -551,12 +551,12 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= -golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= From 793a945bf230156b1977dbdcfff562625e50cdd4 Mon Sep 17 00:00:00 2001 From: Maxime Riaud <65339037+misteriaud@users.noreply.github.com> Date: Thu, 12 Dec 2024 17:50:24 +0100 Subject: [PATCH 166/303] Reapply "[ASCII-2582] Add certificate generation and retrieval for IPC communications" (#32095) --- comp/api/authtoken/component.go | 7 +- .../authtoken/createandfetchimpl/authtoken.go | 12 ++ .../createandfetchimpl/authtoken_test.go | 6 +- comp/api/authtoken/fetchonlyimpl/authtoken.go | 43 +++- .../authtoken/fetchonlyimpl/authtoken_test.go | 14 +- comp/api/authtoken/fetchonlyimpl/mock.go | 17 +- pkg/api/security/cert/cert_generator.go | 75 +++++++ pkg/api/security/cert/cert_generator_test.go | 71 +++++++ pkg/api/security/cert/cert_getter.go | 128 ++++++++++++ pkg/api/security/cert/cert_getter_test.go | 139 +++++++++++++ pkg/api/util/ipc_endpoint_test.go | 185 ++++++++++-------- pkg/api/util/util.go | 126 +++++++++++- pkg/config/setup/config.go | 2 + 13 files changed, 720 insertions(+), 105 deletions(-) create mode 100644 pkg/api/security/cert/cert_generator.go create mode 100644 pkg/api/security/cert/cert_generator_test.go create mode 100644 pkg/api/security/cert/cert_getter.go create mode 100644 pkg/api/security/cert/cert_getter_test.go diff --git a/comp/api/authtoken/component.go b/comp/api/authtoken/component.go index 2aae4096f392d..fbe0ef3558028 100644 --- a/comp/api/authtoken/component.go +++ b/comp/api/authtoken/component.go @@ -9,9 +9,12 @@ package authtoken import ( + "crypto/tls" + + "go.uber.org/fx" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/optional" - "go.uber.org/fx" ) // team: agent-shared-components @@ -19,6 +22,8 @@ import ( // Component is the component type. type Component interface { Get() string + GetTLSClientConfig() *tls.Config + GetTLSServerConfig() *tls.Config } // NoneModule return a None optional type for authtoken.Component. diff --git a/comp/api/authtoken/createandfetchimpl/authtoken.go b/comp/api/authtoken/createandfetchimpl/authtoken.go index 9afffdeff362d..8f5408083f49f 100644 --- a/comp/api/authtoken/createandfetchimpl/authtoken.go +++ b/comp/api/authtoken/createandfetchimpl/authtoken.go @@ -8,6 +8,8 @@ package createandfetchimpl import ( + "crypto/tls" + "go.uber.org/fx" "github.com/DataDog/datadog-agent/comp/api/authtoken" @@ -49,3 +51,13 @@ func newAuthToken(deps dependencies) (authtoken.Component, error) { func (at *authToken) Get() string { return util.GetAuthToken() } + +// GetTLSServerConfig return a TLS configuration with the IPC certificate for http.Server +func (at *authToken) GetTLSClientConfig() *tls.Config { + return util.GetTLSClientConfig() +} + +// GetTLSServerConfig return a TLS configuration with the IPC certificate for http.Client +func (at *authToken) GetTLSServerConfig() *tls.Config { + return util.GetTLSServerConfig() +} diff --git a/comp/api/authtoken/createandfetchimpl/authtoken_test.go b/comp/api/authtoken/createandfetchimpl/authtoken_test.go index 1eb9e11f6ba81..51f2db29e1142 100644 --- a/comp/api/authtoken/createandfetchimpl/authtoken_test.go +++ b/comp/api/authtoken/createandfetchimpl/authtoken_test.go @@ -10,8 +10,6 @@ import ( "path/filepath" "testing" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.uber.org/fx" @@ -19,13 +17,17 @@ import ( "github.com/DataDog/datadog-agent/comp/core/config" log "github.com/DataDog/datadog-agent/comp/core/log/def" logmock "github.com/DataDog/datadog-agent/comp/core/log/mock" + "github.com/DataDog/datadog-agent/pkg/api/util" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) func TestGet(t *testing.T) { dir := t.TempDir() authPath := filepath.Join(dir, "auth_token") + ipcPath := filepath.Join(dir, "ipc_cert") overrides := map[string]any{ "auth_token_file_path": authPath, + "ipc_cert_file_path": ipcPath, } comp, err := newAuthToken( diff --git a/comp/api/authtoken/fetchonlyimpl/authtoken.go b/comp/api/authtoken/fetchonlyimpl/authtoken.go index ac07402b8c960..f353bc3706c3d 100644 --- a/comp/api/authtoken/fetchonlyimpl/authtoken.go +++ b/comp/api/authtoken/fetchonlyimpl/authtoken.go @@ -8,6 +8,9 @@ package fetchonlyimpl import ( + "crypto/tls" + "fmt" + "go.uber.org/fx" "github.com/DataDog/datadog-agent/comp/api/authtoken" @@ -26,9 +29,8 @@ func Module() fxutil.Module { } type authToken struct { - log log.Component - conf config.Component - + log log.Component + conf config.Component tokenLoaded bool } @@ -48,17 +50,44 @@ func newAuthToken(deps dependencies) authtoken.Component { } } -// Get returns the session token -func (at *authToken) Get() string { +func (at *authToken) setToken() error { if !at.tokenLoaded { // We try to load the auth_token until we succeed since it might be created at some point by another // process. if err := util.SetAuthToken(at.conf); err != nil { - at.log.Debugf("could not load auth_token: %s", err) - return "" + return fmt.Errorf("could not load auth_token: %s", err) } at.tokenLoaded = true } + return nil +} + +// Get returns the session token +func (at *authToken) Get() string { + if err := at.setToken(); err != nil { + at.log.Debugf("%s", err.Error()) + return "" + } return util.GetAuthToken() } + +// GetTLSClientConfig return a TLS configuration with the IPC certificate for http.Client +func (at *authToken) GetTLSClientConfig() *tls.Config { + if err := at.setToken(); err != nil { + at.log.Debugf("%s", err.Error()) + return nil + } + + return util.GetTLSClientConfig() +} + +// GetTLSServerConfig return a TLS configuration with the IPC certificate for http.Server +func (at *authToken) GetTLSServerConfig() *tls.Config { + if err := at.setToken(); err != nil { + at.log.Debugf("%s", err.Error()) + return nil + } + + return util.GetTLSServerConfig() +} diff --git a/comp/api/authtoken/fetchonlyimpl/authtoken_test.go b/comp/api/authtoken/fetchonlyimpl/authtoken_test.go index 4492ab4ff4105..4073ee0db7779 100644 --- a/comp/api/authtoken/fetchonlyimpl/authtoken_test.go +++ b/comp/api/authtoken/fetchonlyimpl/authtoken_test.go @@ -10,11 +10,13 @@ import ( "path/filepath" "testing" - "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.uber.org/fx" + "github.com/DataDog/datadog-agent/pkg/api/security/cert" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/DataDog/datadog-agent/comp/core/config" log "github.com/DataDog/datadog-agent/comp/core/log/def" logmock "github.com/DataDog/datadog-agent/comp/core/log/mock" @@ -23,6 +25,7 @@ import ( func TestGet(t *testing.T) { dir := t.TempDir() authPath := filepath.Join(dir, "auth_token") + var cfg config.Component overrides := map[string]any{ "auth_token_file_path": authPath, } @@ -32,6 +35,7 @@ func TestGet(t *testing.T) { t, fx.Provide(func() log.Component { return logmock.New(t) }), config.MockModule(), + fx.Populate(&cfg), fx.Replace(config.MockParams{Overrides: overrides}), ), ).(*authToken) @@ -42,6 +46,14 @@ func TestGet(t *testing.T) { err := os.WriteFile(authPath, []byte("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), 0777) require.NoError(t, err) + // Should be empty because the cert/key weren't generated yet + assert.Empty(t, comp.Get()) + assert.False(t, comp.tokenLoaded) + + // generating IPC cert/key files + _, _, err = cert.CreateOrFetchAgentIPCCert(cfg) + require.NoError(t, err) + assert.Equal(t, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", comp.Get()) assert.True(t, comp.tokenLoaded) diff --git a/comp/api/authtoken/fetchonlyimpl/mock.go b/comp/api/authtoken/fetchonlyimpl/mock.go index 2dea209906a3c..3fa24b25731aa 100644 --- a/comp/api/authtoken/fetchonlyimpl/mock.go +++ b/comp/api/authtoken/fetchonlyimpl/mock.go @@ -8,9 +8,12 @@ package fetchonlyimpl import ( + "crypto/tls" + + "go.uber.org/fx" + authtokeninterface "github.com/DataDog/datadog-agent/comp/api/authtoken" "github.com/DataDog/datadog-agent/pkg/util/fxutil" - "go.uber.org/fx" ) // MockModule defines the fx options for the mock component. @@ -28,6 +31,18 @@ func (fc *MockFetchOnly) Get() string { return "a string" } +// GetTLSClientConfig is a mock of the fetchonly GetTLSClientConfig function +func (fc *MockFetchOnly) GetTLSClientConfig() *tls.Config { + return &tls.Config{ + InsecureSkipVerify: true, + } +} + +// GetTLSServerConfig is a mock of the fetchonly GetTLSServerConfig function +func (fc *MockFetchOnly) GetTLSServerConfig() *tls.Config { + return &tls.Config{} +} + // NewMock returns a new fetch only authtoken mock func newMock() authtokeninterface.Component { return &MockFetchOnly{} diff --git a/pkg/api/security/cert/cert_generator.go b/pkg/api/security/cert/cert_generator.go new file mode 100644 index 0000000000000..46b9c1076c611 --- /dev/null +++ b/pkg/api/security/cert/cert_generator.go @@ -0,0 +1,75 @@ +// 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 cert provide useful functions to generate certificates +package cert + +import ( + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "fmt" + "math/big" + "net" + "time" +) + +func certTemplate() (*x509.Certificate, error) { + serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) + serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) + if err != nil { + return nil, fmt.Errorf("failed to generate serial number: %s", err) + } + + notBefore := time.Now() + // 50 years duration + notAfter := notBefore.Add(50 * 365 * 24 * time.Hour) + template := x509.Certificate{ + SerialNumber: serialNumber, + Subject: pkix.Name{ + Organization: []string{"Datadog, Inc."}, + }, + NotBefore: notBefore, + NotAfter: notAfter, + BasicConstraintsValid: true, + KeyUsage: x509.KeyUsageCertSign | x509.KeyUsageDigitalSignature | x509.KeyUsageCRLSign, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}, + IsCA: true, + IPAddresses: []net.IP{net.ParseIP("127.0.0.1"), net.ParseIP("::1")}, + DNSNames: []string{"localhost"}, + } + + return &template, nil +} + +func generateCertKeyPair() ([]byte, []byte, error) { + rootCertTmpl, err := certTemplate() + if err != nil { + return nil, nil, err + } + + rootKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + return nil, nil, fmt.Errorf("Unable to generate IPC private key: %v", err) + } + + certDER, err := x509.CreateCertificate(rand.Reader, rootCertTmpl, rootCertTmpl, &rootKey.PublicKey, rootKey) + if err != nil { + return nil, nil, err + } + + certPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: certDER}) + rawKey, err := x509.MarshalECPrivateKey(rootKey) + if err != nil { + return nil, nil, fmt.Errorf("Unable to marshall private key: %v", err) + } + + keyPEM := pem.EncodeToMemory(&pem.Block{Type: "EC PRIVATE KEY", Bytes: rawKey}) + + return certPEM, keyPEM, nil +} diff --git a/pkg/api/security/cert/cert_generator_test.go b/pkg/api/security/cert/cert_generator_test.go new file mode 100644 index 0000000000000..888eb28240a84 --- /dev/null +++ b/pkg/api/security/cert/cert_generator_test.go @@ -0,0 +1,71 @@ +// 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 cert + +import ( + "crypto/tls" + "crypto/x509" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestCertCommunication(t *testing.T) { + certPEM, keyPEM, err := generateCertKeyPair() + assert.NoError(t, err) + + // Load server certificate + serverCert, err := tls.X509KeyPair(certPEM, keyPEM) + assert.NoError(t, err) + + // Create a certificate pool with the generated certificate + certPool := x509.NewCertPool() + ok := certPool.AppendCertsFromPEM(certPEM) + assert.True(t, ok) + + // Create a TLS config for the server + serverTLSConfig := &tls.Config{ + Certificates: []tls.Certificate{serverCert}, + } + + // Create a TLS config for the client + clientTLSConfig := &tls.Config{ + RootCAs: certPool, + } + + expectedResult := []byte("hello word") + + // Create a HTTPS Server + s := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Write(expectedResult) + })) + + s.TLS = serverTLSConfig + s.StartTLS() + t.Cleanup(func() { + s.Close() + }) + + // Create a HTTPS Client + client := http.Client{ + Transport: &http.Transport{ + TLSClientConfig: clientTLSConfig, + }, + } + + // Try to communicate together + resp, err := client.Get(s.URL) + require.NoError(t, err) + defer resp.Body.Close() + + body, err := io.ReadAll(resp.Body) + require.NoError(t, err) + require.Equal(t, body, expectedResult) +} diff --git a/pkg/api/security/cert/cert_getter.go b/pkg/api/security/cert/cert_getter.go new file mode 100644 index 0000000000000..09edb10e1cf5e --- /dev/null +++ b/pkg/api/security/cert/cert_getter.go @@ -0,0 +1,128 @@ +// 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 cert provide useful functions to generate certificates +package cert + +import ( + "bytes" + "encoding/pem" + "fmt" + "os" + "path/filepath" + "runtime" + + configModel "github.com/DataDog/datadog-agent/pkg/config/model" + "github.com/DataDog/datadog-agent/pkg/util/filesystem" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +// defaultCertFileName represent the default IPC certificate root name (without .cert or .key) +const defaultCertFileName = "ipc_cert.pem" + +// GetCertFilepath returns the path to the IPC cert file. +func GetCertFilepath(config configModel.Reader) string { + if configPath := config.GetString("ipc_cert_file_path"); configPath != "" { + return configPath + } + // Since customers who set the "auth_token_file_path" configuration likely prefer to avoid writing it next to the configuration file, + // we should follow this behavior for the cert/key generation as well to minimize the risk of disrupting IPC functionality. + if config.GetString("auth_token_file_path") != "" { + dest := filepath.Join(filepath.Dir(config.GetString("auth_token_file_path")), defaultCertFileName) + log.Warnf("IPC cert/key created or retrieved next to auth_token_file_path location: %v", dest) + return dest + } + return filepath.Join(filepath.Dir(config.ConfigFileUsed()), defaultCertFileName) +} + +// FetchAgentIPCCert return the IPC certificate and key from the path set in the configuration +// Requires that the config has been set up before calling +func FetchAgentIPCCert(config configModel.Reader) ([]byte, []byte, error) { + return fetchAgentIPCCert(config, false) +} + +// CreateOrFetchAgentIPCCert return the IPC certificate and key from the path set in the configuration or create if not present +// Requires that the config has been set up before calling +func CreateOrFetchAgentIPCCert(config configModel.Reader) ([]byte, []byte, error) { + return fetchAgentIPCCert(config, true) +} + +func fetchAgentIPCCert(config configModel.Reader, certCreationAllowed bool) ([]byte, []byte, error) { + certPath := GetCertFilepath(config) + + // Create cert&key if it doesn't exist and if permitted by calling func + if _, e := os.Stat(certPath); os.IsNotExist(e) && certCreationAllowed { + // print the caller to identify what is calling this function + if _, file, line, ok := runtime.Caller(2); ok { + log.Infof("[%s:%d] Creating a new IPC certificate", file, line) + } + + cert, key, err := generateCertKeyPair() + + if err != nil { + return nil, nil, err + } + + // Write the IPC cert/key in the FS (platform-specific) + e = saveIPCCertKey(cert, key, certPath) + if e != nil { + return nil, nil, fmt.Errorf("error writing IPC cert/key file on fs: %s", e) + } + log.Infof("Saved a new IPC certificate/key pair to %s", certPath) + + return cert, key, nil + } + + // Read the IPC certAndKey/key + certAndKey, e := os.ReadFile(certPath) + if e != nil { + return nil, nil, fmt.Errorf("unable to read authentication IPC cert/key files: %s", e.Error()) + } + + // Demultiplexing cert and key from file + var block *pem.Block + + block, rest := pem.Decode(certAndKey) + + if block == nil || block.Type != "CERTIFICATE" { + return nil, nil, log.Error("failed to decode PEM block containing certificate") + } + cert := pem.EncodeToMemory(block) + + block, _ = pem.Decode(rest) + + if block == nil || block.Type != "EC PRIVATE KEY" { + return nil, nil, log.Error("failed to decode PEM block containing key") + } + + key := pem.EncodeToMemory(block) + + return cert, key, nil +} + +// writes IPC cert/key files to a file with the same permissions as datadog.yaml +func saveIPCCertKey(cert, key []byte, dest string) (err error) { + log.Infof("Saving a new IPC certificate/key pair in %s", dest) + + perms, err := filesystem.NewPermission() + if err != nil { + return err + } + + // Concatenating cert and key together + certAndKey := bytes.Join([][]byte{cert, key}, []byte{}) + + if err = os.WriteFile(dest, certAndKey, 0o600); err != nil { + return err + } + + if err := perms.RestrictAccessToUser(dest); err != nil { + log.Errorf("Failed to set IPC cert permissions: %s", err) + return err + } + + log.Infof("Wrote IPC certificate/key pair in %s", dest) + return nil +} diff --git a/pkg/api/security/cert/cert_getter_test.go b/pkg/api/security/cert/cert_getter_test.go new file mode 100644 index 0000000000000..4915d2cb5d8b5 --- /dev/null +++ b/pkg/api/security/cert/cert_getter_test.go @@ -0,0 +1,139 @@ +// 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 cert + +import ( + "crypto/tls" + "crypto/x509" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + configmock "github.com/DataDog/datadog-agent/pkg/config/mock" + "github.com/DataDog/datadog-agent/pkg/config/model" +) + +func initMockConf(t *testing.T) (model.Config, string) { + testDir := t.TempDir() + + f, err := os.CreateTemp(testDir, "fake-datadog-yaml-") + require.NoError(t, err) + t.Cleanup(func() { + f.Close() + }) + + mockConfig := configmock.New(t) + mockConfig.SetConfigFile(f.Name()) + mockConfig.SetWithoutSource("auth_token", "") + + return mockConfig, filepath.Join(testDir, "auth_token") +} + +func TestCreateOrFetchAuthTokenValidGen(t *testing.T) { + config, _ := initMockConf(t) + ipccert, ipckey, err := CreateOrFetchAgentIPCCert(config) + require.NoError(t, err) + + certPool := x509.NewCertPool() + ok := certPool.AppendCertsFromPEM(ipccert) + assert.True(t, ok) + + _, err = tls.X509KeyPair(ipccert, ipckey) + assert.NoError(t, err) +} + +func TestFetchAuthToken(t *testing.T) { + config, _ := initMockConf(t) + + // Trying to fetch before create cert: must fail + _, _, err := FetchAgentIPCCert(config) + require.Error(t, err) + + // Creating a cert + ipcCert, ipcKey, err := CreateOrFetchAgentIPCCert(config) + require.NoError(t, err) + + certPool := x509.NewCertPool() + ok := certPool.AppendCertsFromPEM(ipcCert) + assert.True(t, ok) + + _, err = tls.X509KeyPair(ipcCert, ipcKey) + assert.NoError(t, err) + + // Trying to fetch after creating cert: must succeed + fetchedCert, fetchedKey, err := FetchAgentIPCCert(config) + require.NoError(t, err) + require.Equal(t, string(ipcCert), string(fetchedCert)) + require.Equal(t, string(ipcKey), string(fetchedKey)) +} + +func TestFetchAuthTokenWithAuthTokenFilePath(t *testing.T) { + config, _ := initMockConf(t) + + // Setting custom auth_token filepath + dname, err := os.MkdirTemp("", "auth_token_dir") + require.NoError(t, err) + config.SetWithoutSource("auth_token_file_path", filepath.Join(dname, "auth_token")) + + // Creating a cert + ipcCert, ipcKey, err := CreateOrFetchAgentIPCCert(config) + require.NoError(t, err) + + certPool := x509.NewCertPool() + ok := certPool.AppendCertsFromPEM(ipcCert) + assert.True(t, ok) + + _, err = tls.X509KeyPair(ipcCert, ipcKey) + assert.NoError(t, err) + + // Checking that the cert have been created next to the auth_token_file path + _, err = os.Stat(filepath.Join(dname, defaultCertFileName)) + require.NoError(t, err) + + // Trying to fetch after creating cert: must succeed + fetchedCert, fetchedKey, err := FetchAgentIPCCert(config) + require.NoError(t, err) + require.Equal(t, string(ipcCert), string(fetchedCert)) + require.Equal(t, string(ipcKey), string(fetchedKey)) +} + +func TestFetchAuthTokenWithIPCCertFilePath(t *testing.T) { + config, _ := initMockConf(t) + + // Setting custom auth_token filepath + authTokenDirName, err := os.MkdirTemp("", "auth_token_dir") + require.NoError(t, err) + config.SetWithoutSource("auth_token_file_path", filepath.Join(authTokenDirName, "custom_auth_token")) + + // Setting custom IPC cert filepath + ipcDirName, err := os.MkdirTemp("", "ipc_cert_dir") + require.NoError(t, err) + config.SetWithoutSource("ipc_cert_file_path", filepath.Join(ipcDirName, "custom_ipc_cert")) + + // Creating a cert + ipcCert, ipcKey, err := CreateOrFetchAgentIPCCert(config) + require.NoError(t, err) + + certPool := x509.NewCertPool() + ok := certPool.AppendCertsFromPEM(ipcCert) + assert.True(t, ok) + + _, err = tls.X509KeyPair(ipcCert, ipcKey) + assert.NoError(t, err) + + // Checking that the cert have been created at the custom IPC cert filepath + _, err = os.Stat(filepath.Join(ipcDirName, "custom_ipc_cert")) + require.NoError(t, err) + + // Trying to fetch after creating cert: must succeed + fetchedCert, fetchedKey, err := FetchAgentIPCCert(config) + require.NoError(t, err) + require.Equal(t, string(ipcCert), string(fetchedCert)) + require.Equal(t, string(ipcKey), string(fetchedKey)) +} diff --git a/pkg/api/util/ipc_endpoint_test.go b/pkg/api/util/ipc_endpoint_test.go index 26df3f8ce7205..2329b3033ef96 100644 --- a/pkg/api/util/ipc_endpoint_test.go +++ b/pkg/api/util/ipc_endpoint_test.go @@ -14,99 +14,112 @@ import ( "net/http/httptest" "net/url" "os" + "path/filepath" "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" configmock "github.com/DataDog/datadog-agent/pkg/config/mock" pkgconfigmodel "github.com/DataDog/datadog-agent/pkg/config/model" ) -func createConfig(t *testing.T, ts *httptest.Server) pkgconfigmodel.Config { - conf := configmock.New(t) +type IPCEndpointTestSuite struct { + suite.Suite + conf pkgconfigmodel.Config +} - // create a fake auth token - authTokenFile, err := os.CreateTemp("", "") - assert.NoError(t, err) - authTokenPath := authTokenFile.Name() - os.WriteFile(authTokenPath, []byte("0123456789abcdef0123456789abcdef"), 0640) +func TestIPCEndpointTestSuite(t *testing.T) { + // cleaning auth_token and cert globals to be able initialize again the authToken and IPC cert + token = "" + dcaToken = "" + clientTLSConfig = nil + serverTLSConfig = nil - addr, err := url.Parse(ts.URL) - assert.NoError(t, err) - localHost, localPort, _ := net.SplitHostPort(addr.Host) + // creating test suite + testSuite := new(IPCEndpointTestSuite) - // set minimal configuration that IPCEndpoint needs - conf.Set("auth_token_file_path", authTokenPath, pkgconfigmodel.SourceAgentRuntime) - conf.Set("cmd_host", localHost, pkgconfigmodel.SourceAgentRuntime) - conf.Set("cmd_port", localPort, pkgconfigmodel.SourceAgentRuntime) + // simulating a normal startup of Agent with auth_token and cert generation + testSuite.conf = configmock.New(t) - return conf + // create a fake auth token + dir := t.TempDir() + authTokenPath := filepath.Join(dir, "auth_token") + err := os.WriteFile(authTokenPath, []byte("0123456789abcdef0123456789abcdef"), 0640) + require.NoError(t, err) + testSuite.conf.Set("auth_token_file_path", authTokenPath, pkgconfigmodel.SourceAgentRuntime) + + // use the cert in the httptest server + CreateAndSetAuthToken(testSuite.conf) + + suite.Run(t, testSuite) } -func TestNewIPCEndpoint(t *testing.T) { - conf := configmock.New(t) +func (suite *IPCEndpointTestSuite) setTestServerAndConfig(t *testing.T, ts *httptest.Server, isHTTPS bool) { + if isHTTPS { + ts.TLS = GetTLSServerConfig() + ts.StartTLS() + } else { + ts.Start() + } - // create a fake auth token - authTokenFile, err := os.CreateTemp("", "") - assert.NoError(t, err) - authTokenPath := authTokenFile.Name() - os.WriteFile(authTokenPath, []byte("0123456789abcdef0123456789abcdef"), 0640) + // use the httptest server as the CMD_API + addr, err := url.Parse(ts.URL) + require.NoError(t, err) + localHost, localPort, _ := net.SplitHostPort(addr.Host) + suite.conf.Set("cmd_host", localHost, pkgconfigmodel.SourceAgentRuntime) + suite.conf.Set("cmd_port", localPort, pkgconfigmodel.SourceAgentRuntime) +} + +func (suite *IPCEndpointTestSuite) TestNewIPCEndpoint() { + t := suite.T() // set minimal configuration that IPCEndpoint needs - conf.Set("auth_token_file_path", authTokenPath, pkgconfigmodel.SourceAgentRuntime) - conf.Set("cmd_host", "localhost", pkgconfigmodel.SourceAgentRuntime) - conf.Set("cmd_port", "6789", pkgconfigmodel.SourceAgentRuntime) + suite.conf.Set("cmd_host", "localhost", pkgconfigmodel.SourceAgentRuntime) + suite.conf.Set("cmd_port", "6789", pkgconfigmodel.SourceAgentRuntime) // test the endpoint construction - end, err := NewIPCEndpoint(conf, "test/api") + end, err := NewIPCEndpoint(suite.conf, "test/api") assert.NoError(t, err) assert.Equal(t, end.target.String(), "https://localhost:6789/test/api") } -func TestNewIPCEndpointWithCloseConnection(t *testing.T) { - conf := configmock.New(t) - - // create a fake auth token - authTokenFile, err := os.CreateTemp("", "") - assert.NoError(t, err) - authTokenPath := authTokenFile.Name() - os.WriteFile(authTokenPath, []byte("0123456789abcdef0123456789abcdef"), 0640) - - // set minimal configuration that IPCEndpoint needs - conf.Set("auth_token_file_path", authTokenPath, pkgconfigmodel.SourceAgentRuntime) - conf.Set("cmd_host", "localhost", pkgconfigmodel.SourceAgentRuntime) - conf.Set("cmd_port", "6789", pkgconfigmodel.SourceAgentRuntime) +func (suite *IPCEndpointTestSuite) TestNewIPCEndpointWithCloseConnection() { + t := suite.T() // test constructing with the CloseConnection option - end, err := NewIPCEndpoint(conf, "test/api", WithCloseConnection(true)) - assert.NoError(t, err) + end, err := NewIPCEndpoint(suite.conf, "test/api", WithCloseConnection(true)) + require.NoError(t, err) assert.True(t, end.closeConn) } -func TestIPCEndpointDoGet(t *testing.T) { +func (suite *IPCEndpointTestSuite) TestIPCEndpointDoGet() { + t := suite.T() gotURL := "" - ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { gotURL = r.URL.String() _, _ = io.ReadAll(r.Body) w.Write([]byte("ok")) })) defer ts.Close() - conf := createConfig(t, ts) - end, err := NewIPCEndpoint(conf, "test/api") + suite.setTestServerAndConfig(t, ts, true) + end, err := NewIPCEndpoint(suite.conf, "test/api") assert.NoError(t, err) // test that DoGet will hit the endpoint url res, err := end.DoGet() - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, res, []byte("ok")) assert.Equal(t, gotURL, "/test/api") } -func TestIPCEndpointGetWithHTTPClientAndNonTLS(t *testing.T) { +func (suite *IPCEndpointTestSuite) TestIPCEndpointGetWithHTTPClientAndNonTLS() { + t := suite.T() // non-http server gotURL := "" - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { gotURL = r.URL.String() _, _ = io.ReadAll(r.Body) w.Write([]byte("ok")) @@ -114,106 +127,112 @@ func TestIPCEndpointGetWithHTTPClientAndNonTLS(t *testing.T) { defer ts.Close() // create non-TLS client and use the "http" protocol + suite.setTestServerAndConfig(t, ts, false) client := http.Client{} - conf := createConfig(t, ts) - end, err := NewIPCEndpoint(conf, "test/api", WithHTTPClient(&client), WithURLScheme("http")) + end, err := NewIPCEndpoint(suite.conf, "test/api", WithHTTPClient(&client), WithURLScheme("http")) assert.NoError(t, err) // test that DoGet will hit the endpoint url res, err := end.DoGet() - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, res, []byte("ok")) assert.Equal(t, gotURL, "/test/api") } -func TestIPCEndpointGetWithValues(t *testing.T) { +func (suite *IPCEndpointTestSuite) TestIPCEndpointGetWithValues() { + t := suite.T() gotURL := "" - ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { gotURL = r.URL.String() _, _ = io.ReadAll(r.Body) w.Write([]byte("ok")) })) defer ts.Close() - conf := createConfig(t, ts) + suite.setTestServerAndConfig(t, ts, true) // set url values for GET request v := url.Values{} v.Set("verbose", "true") // test construction with option for url.Values - end, err := NewIPCEndpoint(conf, "test/api") + end, err := NewIPCEndpoint(suite.conf, "test/api") assert.NoError(t, err) // test that DoGet will use query parameters from the url.Values res, err := end.DoGet(WithValues(v)) - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, res, []byte("ok")) assert.Equal(t, gotURL, "/test/api?verbose=true") } -func TestIPCEndpointGetWithHostAndPort(t *testing.T) { - ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { +func (suite *IPCEndpointTestSuite) TestIPCEndpointGetWithHostAndPort() { + t := suite.T() + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, _ = io.ReadAll(r.Body) w.Write([]byte("ok")) })) defer ts.Close() - conf := createConfig(t, ts) + suite.setTestServerAndConfig(t, ts, true) // modify the config so that it uses a different setting for the cmd_host - conf.Set("process_config.cmd_host", "127.0.0.1", pkgconfigmodel.SourceAgentRuntime) + suite.conf.Set("process_config.cmd_host", "127.0.0.1", pkgconfigmodel.SourceAgentRuntime) // test construction with alternate values for the host and port - end, err := NewIPCEndpoint(conf, "test/api", WithHostAndPort(conf.GetString("process_config.cmd_host"), conf.GetInt("cmd_port"))) + end, err := NewIPCEndpoint(suite.conf, "test/api", WithHostAndPort(suite.conf.GetString("process_config.cmd_host"), suite.conf.GetInt("cmd_port"))) assert.NoError(t, err) // test that host provided by WithHostAndPort is used for the endpoint res, err := end.DoGet() - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, res, []byte("ok")) - assert.Equal(t, end.target.Host, fmt.Sprintf("127.0.0.1:%d", conf.GetInt("cmd_port"))) + assert.Equal(t, end.target.Host, fmt.Sprintf("127.0.0.1:%d", suite.conf.GetInt("cmd_port"))) } -func TestIPCEndpointDeprecatedIPCAddress(t *testing.T) { - ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { +func (suite *IPCEndpointTestSuite) TestIPCEndpointDeprecatedIPCAddress() { + t := suite.T() + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, _ = io.ReadAll(r.Body) w.Write([]byte("ok")) })) defer ts.Close() - conf := createConfig(t, ts) + suite.setTestServerAndConfig(t, ts, true) // Use the deprecated (but still supported) option "ipc_address" - conf.UnsetForSource("cmd_host", pkgconfigmodel.SourceAgentRuntime) - conf.Set("ipc_address", "127.0.0.1", pkgconfigmodel.SourceAgentRuntime) + suite.conf.UnsetForSource("cmd_host", pkgconfigmodel.SourceAgentRuntime) + suite.conf.Set("ipc_address", "127.0.0.1", pkgconfigmodel.SourceAgentRuntime) + defer suite.conf.UnsetForSource("ipc_address", pkgconfigmodel.SourceAgentRuntime) // test construction, uses ipc_address instead of cmd_host - end, err := NewIPCEndpoint(conf, "test/api") + end, err := NewIPCEndpoint(suite.conf, "test/api") assert.NoError(t, err) // test that host provided by "ipc_address" is used for the endpoint res, err := end.DoGet() - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, res, []byte("ok")) - assert.Equal(t, end.target.Host, fmt.Sprintf("127.0.0.1:%d", conf.GetInt("cmd_port"))) + assert.Equal(t, end.target.Host, fmt.Sprintf("127.0.0.1:%d", suite.conf.GetInt("cmd_port"))) } -func TestIPCEndpointErrorText(t *testing.T) { - ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { +func (suite *IPCEndpointTestSuite) TestIPCEndpointErrorText() { + t := suite.T() + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(400) w.Write([]byte("bad request")) })) defer ts.Close() - conf := createConfig(t, ts) - end, err := NewIPCEndpoint(conf, "test/api") - assert.NoError(t, err) + suite.setTestServerAndConfig(t, ts, true) + end, err := NewIPCEndpoint(suite.conf, "test/api") + require.NoError(t, err) // test that error is returned by the endpoint _, err = end.DoGet() - assert.Error(t, err) + require.Error(t, err) } -func TestIPCEndpointErrorMap(t *testing.T) { - ts := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { +func (suite *IPCEndpointTestSuite) TestIPCEndpointErrorMap() { + t := suite.T() + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(400) data, _ := json.Marshal(map[string]string{ "error": "something went wrong", @@ -222,12 +241,12 @@ func TestIPCEndpointErrorMap(t *testing.T) { })) defer ts.Close() - conf := createConfig(t, ts) - end, err := NewIPCEndpoint(conf, "test/api") - assert.NoError(t, err) + suite.setTestServerAndConfig(t, ts, true) + end, err := NewIPCEndpoint(suite.conf, "test/api") + require.NoError(t, err) // test that error gets unwrapped from the errmap _, err = end.DoGet() - assert.Error(t, err) + require.Error(t, err) assert.Equal(t, err.Error(), "something went wrong") } diff --git a/pkg/api/util/util.go b/pkg/api/util/util.go index 6aece9c03c648..b22c2e7b04ad0 100644 --- a/pkg/api/util/util.go +++ b/pkg/api/util/util.go @@ -8,52 +8,138 @@ package util import ( "crypto/subtle" + "crypto/tls" + "crypto/x509" "fmt" "net" "net/http" "strings" "sync" - "github.com/DataDog/datadog-agent/pkg/api/security" + pkgtoken "github.com/DataDog/datadog-agent/pkg/api/security" + "github.com/DataDog/datadog-agent/pkg/api/security/cert" "github.com/DataDog/datadog-agent/pkg/config/model" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +type source int + +const ( + uninitialized source = iota + setAuthToken + createAndSetAuthToken ) var ( tokenLock sync.RWMutex token string dcaToken string + // The clientTLSConfig is set by default with `InsecureSkipVerify: true`. + // This is intentionally done to allow the Agent to local Agent APIs when the clientTLSConfig is not yet initialized. + // However, this default value should be removed in the future. + // TODO: Monitor and fix the logs printed by GetTLSClientConfig and GetTLSServerConfig. + clientTLSConfig = &tls.Config{ + InsecureSkipVerify: true, + } + serverTLSConfig *tls.Config + initSource source ) -// SetAuthToken sets the session token +// SetAuthToken sets the session token and IPC certificate // Requires that the config has been set up before calling func SetAuthToken(config model.Reader) error { tokenLock.Lock() defer tokenLock.Unlock() // Noop if token is already set - if token != "" { + if initSource != uninitialized { return nil } var err error - token, err = security.FetchAuthToken(config) - return err + token, err = pkgtoken.FetchAuthToken(config) + if err != nil { + return err + } + ipccert, ipckey, err := cert.FetchAgentIPCCert(config) + if err != nil { + return err + } + + certPool := x509.NewCertPool() + if ok := certPool.AppendCertsFromPEM(ipccert); !ok { + return fmt.Errorf("unable to use cert for creating CertPool") + } + + clientTLSConfig = &tls.Config{ + RootCAs: certPool, + } + + tlsCert, err := tls.X509KeyPair(ipccert, ipckey) + if err != nil { + return err + } + serverTLSConfig = &tls.Config{ + Certificates: []tls.Certificate{tlsCert}, + } + + initSource = setAuthToken + + return nil } -// CreateAndSetAuthToken creates and sets the authorization token +// CreateAndSetAuthToken creates and sets the authorization token and IPC certificate // Requires that the config has been set up before calling func CreateAndSetAuthToken(config model.Reader) error { tokenLock.Lock() defer tokenLock.Unlock() // Noop if token is already set - if token != "" { + switch initSource { + case setAuthToken: + log.Infof("function CreateAndSetAuthToken was called after SetAuthToken was called") + return nil + case createAndSetAuthToken: return nil } var err error - token, err = security.CreateOrFetchToken(config) - return err + token, err = pkgtoken.CreateOrFetchToken(config) + if err != nil { + return err + } + ipccert, ipckey, err := cert.CreateOrFetchAgentIPCCert(config) + if err != nil { + return err + } + + certPool := x509.NewCertPool() + if ok := certPool.AppendCertsFromPEM(ipccert); !ok { + return fmt.Errorf("Unable to generate certPool from PERM IPC cert") + } + + clientTLSConfig = &tls.Config{ + RootCAs: certPool, + } + + tlsCert, err := tls.X509KeyPair(ipccert, ipckey) + if err != nil { + return fmt.Errorf("Unable to generate x509 cert from PERM IPC cert and key") + } + serverTLSConfig = &tls.Config{ + Certificates: []tls.Certificate{tlsCert}, + } + + initSource = createAndSetAuthToken + + return nil +} + +// IsInitialized return true if the auth_token and IPC cert/key pair have been initialized with SetAuthToken or CreateAndSetAuthToken functions +func IsInitialized() bool { + tokenLock.RLock() + defer tokenLock.Unlock() + return initSource != uninitialized } // GetAuthToken gets the session token @@ -63,6 +149,26 @@ func GetAuthToken() string { return token } +// GetTLSClientConfig gets the certificate and key used for IPC +func GetTLSClientConfig() *tls.Config { + tokenLock.RLock() + defer tokenLock.RUnlock() + if initSource == uninitialized { + log.Errorf("GetTLSClientConfig was called before being initialized (through SetAuthToken or CreateAndSetAuthToken function)") + } + return clientTLSConfig.Clone() +} + +// GetTLSServerConfig gets the certificate and key used for IPC +func GetTLSServerConfig() *tls.Config { + tokenLock.RLock() + defer tokenLock.RUnlock() + if initSource == uninitialized { + log.Errorf("GetTLSServerConfig was called before being initialized (through SetAuthToken or CreateAndSetAuthToken function)") + } + return serverTLSConfig.Clone() +} + // InitDCAAuthToken initialize the session token for the Cluster Agent based on config options // Requires that the config has been set up before calling func InitDCAAuthToken(config model.Reader) error { @@ -75,7 +181,7 @@ func InitDCAAuthToken(config model.Reader) error { } var err error - dcaToken, err = security.CreateOrGetClusterAgentAuthToken(config) + dcaToken, err = pkgtoken.CreateOrGetClusterAgentAuthToken(config) return err } diff --git a/pkg/config/setup/config.go b/pkg/config/setup/config.go index da2fb45d704bb..66942a316486e 100644 --- a/pkg/config/setup/config.go +++ b/pkg/config/setup/config.go @@ -1093,6 +1093,8 @@ func agent(config pkgconfigmodel.Setup) { config.BindEnvAndSetDefault("check_runners", int64(4)) config.BindEnvAndSetDefault("check_cancel_timeout", 500*time.Millisecond) config.BindEnvAndSetDefault("auth_token_file_path", "") + // used to override the path where the IPC cert/key files are stored/retrieved + config.BindEnvAndSetDefault("ipc_cert_file_path", "") config.BindEnv("bind_host") config.BindEnvAndSetDefault("health_port", int64(0)) config.BindEnvAndSetDefault("disable_py3_validation", false) From 004f1177711eef031001a5957973a2819908a889 Mon Sep 17 00:00:00 2001 From: Alexandre Yang Date: Thu, 12 Dec 2024 17:53:32 +0100 Subject: [PATCH 167/303] [netpath] Add windows e2e tests for network path integration (#32006) --- .gitlab/e2e/e2e.yml | 4 +- .../network-path-integration/common_test.go | 56 ++++++++++++ .../fixtures/network_path.yaml | 6 ++ .../fixtures/system-probe.yaml | 2 + .../netpath_int_nix_test.go | 44 ++++++++++ .../netpath_int_win_test.go | 47 ++++++++++ .../netpath/network_path_integration_test.go | 88 ------------------- 7 files changed, 157 insertions(+), 90 deletions(-) create mode 100644 test/new-e2e/tests/netpath/network-path-integration/common_test.go create mode 100644 test/new-e2e/tests/netpath/network-path-integration/fixtures/network_path.yaml create mode 100644 test/new-e2e/tests/netpath/network-path-integration/fixtures/system-probe.yaml create mode 100644 test/new-e2e/tests/netpath/network-path-integration/netpath_int_nix_test.go create mode 100644 test/new-e2e/tests/netpath/network-path-integration/netpath_int_win_test.go delete mode 100644 test/new-e2e/tests/netpath/network_path_integration_test.go diff --git a/.gitlab/e2e/e2e.yml b/.gitlab/e2e/e2e.yml index c62f11a8165e2..b23939329f011 100644 --- a/.gitlab/e2e/e2e.yml +++ b/.gitlab/e2e/e2e.yml @@ -43,7 +43,7 @@ KUBERNETES_MEMORY_REQUEST: 12Gi KUBERNETES_MEMORY_LIMIT: 16Gi KUBERNETES_CPU_REQUEST: 6 - # AWS SSH Key configuration + # AWS SSH Key configuration E2E_AWS_PUBLIC_KEY_PATH: /tmp/agent-qa-aws-ssh-key.pub E2E_AWS_PRIVATE_KEY_PATH: /tmp/agent-qa-aws-ssh-key E2E_KEY_PAIR_NAME: datadog-agent-ci-rsa @@ -512,7 +512,7 @@ new-e2e-ha-agent: TEAM: ndm-core new-e2e-netpath: - extends: .new_e2e_template_needs_deb_x64 + extends: .new_e2e_template_needs_deb_windows_x64 rules: - !reference [.on_netpath_or_e2e_changes] - !reference [.manual] diff --git a/test/new-e2e/tests/netpath/network-path-integration/common_test.go b/test/new-e2e/tests/netpath/network-path-integration/common_test.go new file mode 100644 index 0000000000000..44a3fe90560c9 --- /dev/null +++ b/test/new-e2e/tests/netpath/network-path-integration/common_test.go @@ -0,0 +1,56 @@ +// 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 netpath contains e2e tests for Network Path Integration feature +package networkpathintegration + +import ( + _ "embed" + "fmt" + + "github.com/DataDog/datadog-agent/test/fakeintake/aggregator" + fakeintakeclient "github.com/DataDog/datadog-agent/test/fakeintake/client" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" +) + +//go:embed fixtures/system-probe.yaml +var sysProbeConfig []byte + +//go:embed fixtures/network_path.yaml +var networkPathIntegration []byte + +var testAgentRunningMetricTagsTCP = []string{"destination_hostname:api.datadoghq.eu", "protocol:TCP", "destination_port:443"} +var testAgentRunningMetricTagsUDP = []string{"destination_hostname:8.8.8.8", "protocol:UDP"} + +type baseNetworkPathIntegrationTestSuite struct { + e2e.BaseSuite[environments.Host] +} + +func assertMetrics(fakeIntake *components.FakeIntake, c *assert.CollectT, metricTags [][]string) { + fakeClient := fakeIntake.Client() + + metrics, err := fakeClient.FilterMetrics("datadog.network_path.path.monitored") + require.NoError(c, err) + assert.NotEmpty(c, metrics) + for _, tags := range metricTags { + // assert destination is monitored + metrics, err = fakeClient.FilterMetrics("datadog.network_path.path.monitored", fakeintakeclient.WithTags[*aggregator.MetricSeries](tags)) + assert.NoError(c, err) + assert.NotEmpty(c, metrics, fmt.Sprintf("metric with tags `%v` not found", tags)) + + // assert hops + metrics, err = fakeClient.FilterMetrics("datadog.network_path.path.hops", + fakeintakeclient.WithTags[*aggregator.MetricSeries](tags), + fakeintakeclient.WithMetricValueHigherThan(0), + ) + assert.NoError(c, err) + assert.NotEmpty(c, metrics, fmt.Sprintf("metric with tags `%v` not found", tags)) + } +} diff --git a/test/new-e2e/tests/netpath/network-path-integration/fixtures/network_path.yaml b/test/new-e2e/tests/netpath/network-path-integration/fixtures/network_path.yaml new file mode 100644 index 0000000000000..b81ddbb2d1f18 --- /dev/null +++ b/test/new-e2e/tests/netpath/network-path-integration/fixtures/network_path.yaml @@ -0,0 +1,6 @@ +instances: + - hostname: api.datadoghq.eu + protocol: TCP + port: 443 + - hostname: 8.8.8.8 + protocol: UDP diff --git a/test/new-e2e/tests/netpath/network-path-integration/fixtures/system-probe.yaml b/test/new-e2e/tests/netpath/network-path-integration/fixtures/system-probe.yaml new file mode 100644 index 0000000000000..4f90e64d11446 --- /dev/null +++ b/test/new-e2e/tests/netpath/network-path-integration/fixtures/system-probe.yaml @@ -0,0 +1,2 @@ +traceroute: + enabled: true diff --git a/test/new-e2e/tests/netpath/network-path-integration/netpath_int_nix_test.go b/test/new-e2e/tests/netpath/network-path-integration/netpath_int_nix_test.go new file mode 100644 index 0000000000000..de5bc31f363ef --- /dev/null +++ b/test/new-e2e/tests/netpath/network-path-integration/netpath_int_nix_test.go @@ -0,0 +1,44 @@ +// 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 netpath contains e2e tests for Network Path Integration feature +package networkpathintegration + +import ( + _ "embed" + "testing" + "time" + + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" + awshost "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/host" + "github.com/DataDog/test-infra-definitions/components/datadog/agentparams" + "github.com/stretchr/testify/assert" +) + +type linuxNetworkPathIntegrationTestSuite struct { + baseNetworkPathIntegrationTestSuite +} + +// TestNetworkPathIntegrationSuiteLinux runs the Network Path Integration e2e suite for linux +func TestLinuxNetworkPathIntegrationSuite(t *testing.T) { + t.Parallel() + e2e.Run(t, &linuxNetworkPathIntegrationTestSuite{}, e2e.WithProvisioner(awshost.Provisioner( + awshost.WithAgentOptions( + agentparams.WithSystemProbeConfig(string(sysProbeConfig)), + agentparams.WithIntegration("network_path.d", string(networkPathIntegration)), + )), + )) + +} + +func (s *linuxNetworkPathIntegrationTestSuite) TestLinuxNetworkPathIntegrationMetrics() { + fakeIntake := s.Env().FakeIntake + s.EventuallyWithT(func(c *assert.CollectT) { + assertMetrics(fakeIntake, c, [][]string{ + testAgentRunningMetricTagsTCP, + testAgentRunningMetricTagsUDP, + }) + }, 5*time.Minute, 3*time.Second) +} diff --git a/test/new-e2e/tests/netpath/network-path-integration/netpath_int_win_test.go b/test/new-e2e/tests/netpath/network-path-integration/netpath_int_win_test.go new file mode 100644 index 0000000000000..eb6efd844ab68 --- /dev/null +++ b/test/new-e2e/tests/netpath/network-path-integration/netpath_int_win_test.go @@ -0,0 +1,47 @@ +// 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 netpath contains e2e tests for Network Path Integration feature +package networkpathintegration + +import ( + _ "embed" + "testing" + "time" + + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" + awshost "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/host" + "github.com/DataDog/test-infra-definitions/components/datadog/agentparams" + "github.com/DataDog/test-infra-definitions/components/os" + "github.com/DataDog/test-infra-definitions/scenarios/aws/ec2" + "github.com/stretchr/testify/assert" +) + +type windowsNetworkPathIntegrationTestSuite struct { + baseNetworkPathIntegrationTestSuite +} + +// TestNetworkPathIntegrationSuiteLinux runs the Network Path Integration e2e suite for linux +func TestWindowsNetworkPathIntegrationSuite(t *testing.T) { + t.Parallel() + e2e.Run(t, &windowsNetworkPathIntegrationTestSuite{}, e2e.WithProvisioner(awshost.Provisioner( + awshost.WithAgentOptions( + agentparams.WithSystemProbeConfig(string(sysProbeConfig)), + agentparams.WithIntegration("network_path.d", string(networkPathIntegration)), + ), + awshost.WithEC2InstanceOptions(ec2.WithOS(os.WindowsDefault)), + ))) +} + +func (s *windowsNetworkPathIntegrationTestSuite) TestWindowsNetworkPathIntegrationMetrics() { + fakeIntake := s.Env().FakeIntake + s.EventuallyWithT(func(c *assert.CollectT) { + assertMetrics(fakeIntake, c, [][]string{ + testAgentRunningMetricTagsTCP, + // TODO: Test UDP once implemented for windows, uncomment line below + //testAgentRunningMetricTagsUDP, + }) + }, 5*time.Minute, 3*time.Second) +} diff --git a/test/new-e2e/tests/netpath/network_path_integration_test.go b/test/new-e2e/tests/netpath/network_path_integration_test.go deleted file mode 100644 index d93729d413f7a..0000000000000 --- a/test/new-e2e/tests/netpath/network_path_integration_test.go +++ /dev/null @@ -1,88 +0,0 @@ -// 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 netpath contains e2e tests for Network Path Integration feature -package netpath - -import ( - _ "embed" - "fmt" - "testing" - "time" - - "github.com/DataDog/datadog-agent/test/fakeintake/aggregator" - fakeintakeclient "github.com/DataDog/datadog-agent/test/fakeintake/client" - "github.com/DataDog/test-infra-definitions/components/datadog/agentparams" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" - "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" - awshost "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/host" -) - -type networkPathIntegrationTestSuite struct { - e2e.BaseSuite[environments.Host] -} - -// TestNetworkPathIntegrationSuite runs the Network Path Integration e2e suite -func TestNetworkPathIntegrationSuite(t *testing.T) { - // language=yaml - sysProbeConfig := ` -traceroute: - enabled: true -` - - // language=yaml - networkPathIntegration := ` -instances: -- hostname: api.datadoghq.eu - protocol: TCP - port: 443 -- hostname: 8.8.8.8 - protocol: UDP -` - - e2e.Run(t, &networkPathIntegrationTestSuite{}, e2e.WithProvisioner(awshost.Provisioner( - awshost.WithAgentOptions( - agentparams.WithSystemProbeConfig(sysProbeConfig), - agentparams.WithIntegration("network_path.d", networkPathIntegration), - )), - )) -} - -func (s *networkPathIntegrationTestSuite) TestNetworkPathIntegrationMetrics() { - fakeClient := s.Env().FakeIntake.Client() - - s.EventuallyWithT(func(c *assert.CollectT) { - s.T().Log("try assert datadog.network_path.path.monitored metric") - metrics, err := fakeClient.FilterMetrics("datadog.network_path.path.monitored") - require.NoError(c, err) - assert.NotEmpty(c, metrics) - for _, metric := range metrics { - s.T().Logf(" datadog.network_path.path.monitored metric tags: %+v", metric.Tags) - } - - destinationsTagsToAssert := [][]string{ - {"destination_hostname:api.datadoghq.eu", "protocol:TCP", "destination_port:443"}, - {"destination_hostname:8.8.8.8", "protocol:UDP"}, - } - for _, tags := range destinationsTagsToAssert { - // assert destination is monitored - metrics, err = fakeClient.FilterMetrics("datadog.network_path.path.monitored", fakeintakeclient.WithTags[*aggregator.MetricSeries](tags)) - assert.NoError(c, err) - assert.NotEmpty(c, metrics, fmt.Sprintf("metric with tags `%v` not found", tags)) - - // assert hops - metrics, err = fakeClient.FilterMetrics("datadog.network_path.path.hops", - fakeintakeclient.WithTags[*aggregator.MetricSeries](tags), - fakeintakeclient.WithMetricValueHigherThan(0), - ) - assert.NoError(c, err) - assert.NotEmpty(c, metrics, fmt.Sprintf("metric with tags `%v` not found", tags)) - - } - }, 5*time.Minute, 3*time.Second) -} From 906f61a453542d379ddfd379b9c53d401a9b696b Mon Sep 17 00:00:00 2001 From: Alex Lopez Date: Thu, 12 Dec 2024 17:54:31 +0100 Subject: [PATCH 168/303] Revert "unbundle agent and remove associated code (#31228)" (#31796) Co-authored-by: Pythyu <45374460+Pythyu@users.noreply.github.com> --- cmd/agent/launcher/launcher.c | 32 +++++++++++ cmd/agent/main.go | 51 +++++++++++++++++- cmd/agent/main_common.go | 13 +++++ cmd/agent/main_linux_cgo.go | 42 +++++++++++++++ cmd/agent/main_linux_no_cgo.go | 22 ++++++++ cmd/agent/process_agent.go | 26 +++++++++ cmd/agent/security_agent.go | 23 ++++++++ cmd/agent/system_probe.go | 23 ++++++++ cmd/agent/trace_agent.go | 23 ++++++++ docs/dev/agent_build.md | 24 +++++++++ omnibus/config/software/datadog-agent.rb | 22 +++++--- tasks/agent.py | 68 ++++++++++++++++++++---- 12 files changed, 352 insertions(+), 17 deletions(-) create mode 100644 cmd/agent/launcher/launcher.c create mode 100644 cmd/agent/main_common.go create mode 100644 cmd/agent/main_linux_cgo.go create mode 100644 cmd/agent/main_linux_no_cgo.go create mode 100644 cmd/agent/process_agent.go create mode 100644 cmd/agent/security_agent.go create mode 100644 cmd/agent/system_probe.go create mode 100644 cmd/agent/trace_agent.go diff --git a/cmd/agent/launcher/launcher.c b/cmd/agent/launcher/launcher.c new file mode 100644 index 0000000000000..0be5b6ca184e3 --- /dev/null +++ b/cmd/agent/launcher/launcher.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include + +#ifndef DD_AGENT_PATH +#error DD_AGENT_PATH must be defined +#endif + +#ifndef DD_AGENT +#define DD_AGENT "agent" +#endif + +int main(int argc, char **argv) { + if (argc > 1) { + argv[0] = DD_AGENT; + } else { + argv = malloc(sizeof(char *) * 2); + argv[0] = DD_AGENT; + argv[1] = NULL; + } + + if (strlen(DD_AGENT_PATH) == 0) { + fprintf(stderr, "Cannot determine agent location\n"); + exit(1); + } + + setenv("DD_BUNDLED_AGENT", DD_AGENT, 0); + + execvp(DD_AGENT_PATH, argv); + return 1; +} diff --git a/cmd/agent/main.go b/cmd/agent/main.go index f2b5343e787ba..5a8c90176bee5 100644 --- a/cmd/agent/main.go +++ b/cmd/agent/main.go @@ -9,13 +9,62 @@ package main import ( + "fmt" "os" + "path" + "strings" "github.com/DataDog/datadog-agent/cmd/agent/command" "github.com/DataDog/datadog-agent/cmd/agent/subcommands" "github.com/DataDog/datadog-agent/cmd/internal/runcmd" + "github.com/spf13/cobra" ) +var agents = map[string]func() *cobra.Command{} + +func registerAgent(names []string, getCommand func() *cobra.Command) { + for _, name := range names { + agents[name] = getCommand + } +} + +func coreAgentMain() *cobra.Command { + return command.MakeCommand(subcommands.AgentSubcommands()) +} + +func init() { + registerAgent([]string{"agent", "datadog-agent", "dd-agent"}, coreAgentMain) +} + func main() { - os.Exit(runcmd.Run(command.MakeCommand(subcommands.AgentSubcommands()))) + process := strings.TrimSpace(os.Getenv("DD_BUNDLED_AGENT")) + + if process == "" { + if len(os.Args) > 0 { + process = strings.TrimSpace(path.Base(os.Args[0])) + } + + if process == "" { + executable, err := os.Executable() + if err != nil { + fmt.Fprintf(os.Stderr, "Failed to determine the Agent process name: %s\n", err.Error()) + os.Exit(1) + } + process = executable + } + + process = strings.TrimSuffix(process, path.Ext(process)) + } + + agentCmdBuilder := agents[process] + if agentCmdBuilder == nil { + fmt.Fprintf(os.Stderr, "Invoked as '%s', acting as main Agent.\n", process) + agentCmdBuilder = coreAgentMain + } + + rootCmd := agentCmdBuilder() + if err := setProcessName(process); err != nil { + fmt.Fprintf(os.Stderr, "Failed to set process name as '%s': %s\n", process, err) + } + os.Exit(runcmd.Run(rootCmd)) } diff --git a/cmd/agent/main_common.go b/cmd/agent/main_common.go new file mode 100644 index 0000000000000..2159c28f80cbf --- /dev/null +++ b/cmd/agent/main_common.go @@ -0,0 +1,13 @@ +// 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. + +//go:build !linux + +package main + +// nolint: deadcode, unused +func setProcessName(_ string) error { + return nil +} diff --git a/cmd/agent/main_linux_cgo.go b/cmd/agent/main_linux_cgo.go new file mode 100644 index 0000000000000..421565bf6d0c1 --- /dev/null +++ b/cmd/agent/main_linux_cgo.go @@ -0,0 +1,42 @@ +// 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. + +//go:build linux && cgo + +package main + +/* +#include +#include +#include + +int prctl_err = 0; + +int set_process_name () __attribute__((constructor)); + +int set_process_name() +{ + const char *name = getenv("DD_BUNDLED_AGENT"); + if (name != NULL) { + int ret = prctl(PR_SET_NAME, name, 0, 0); + if (!ret) { + prctl_err = errno; + } + return ret; + } + return 0; +} +*/ +import ( + "C" +) +import "syscall" + +func setProcessName(_ string) error { + if C.prctl_err == 0 { + return nil + } + return syscall.Errno(C.prctl_err) +} diff --git a/cmd/agent/main_linux_no_cgo.go b/cmd/agent/main_linux_no_cgo.go new file mode 100644 index 0000000000000..5259fc616d3d0 --- /dev/null +++ b/cmd/agent/main_linux_no_cgo.go @@ -0,0 +1,22 @@ +// 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. + +//go:build linux && !cgo + +package main + +import ( + "syscall" + "unsafe" + + "golang.org/x/sys/unix" +) + +func setProcessName(process string) error { + processName := make([]byte, len(process)+1) + copy(processName, process) + _, _, err := syscall.AllThreadsSyscall(unix.SYS_PRCTL, unix.PR_SET_NAME, uintptr(unsafe.Pointer(&processName[0])), 0) + return err +} diff --git a/cmd/agent/process_agent.go b/cmd/agent/process_agent.go new file mode 100644 index 0000000000000..e9cf9867eeacb --- /dev/null +++ b/cmd/agent/process_agent.go @@ -0,0 +1,26 @@ +// 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. + +//go:build !windows && bundle_process_agent + +// Main package for the agent binary +package main + +import ( + "os" + + processcommand "github.com/DataDog/datadog-agent/cmd/process-agent/command" + processsubcommands "github.com/DataDog/datadog-agent/cmd/process-agent/subcommands" + "github.com/DataDog/datadog-agent/pkg/util/flavor" + "github.com/spf13/cobra" +) + +func init() { + registerAgent([]string{"process-agent"}, func() *cobra.Command { + flavor.SetFlavor(flavor.ProcessAgent) + os.Args = processcommand.FixDeprecatedFlags(os.Args, os.Stdout) + return processcommand.MakeCommand(processsubcommands.ProcessAgentSubcommands(), processcommand.UseWinParams, processcommand.RootCmdRun) + }) +} diff --git a/cmd/agent/security_agent.go b/cmd/agent/security_agent.go new file mode 100644 index 0000000000000..134f04647b3d5 --- /dev/null +++ b/cmd/agent/security_agent.go @@ -0,0 +1,23 @@ +// 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. + +//go:build !windows && bundle_security_agent + +// Main package for the agent binary +package main + +import ( + seccommand "github.com/DataDog/datadog-agent/cmd/security-agent/command" + secsubcommands "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands" + "github.com/DataDog/datadog-agent/pkg/util/flavor" + "github.com/spf13/cobra" +) + +func init() { + registerAgent([]string{"security-agent"}, func() *cobra.Command { + flavor.SetFlavor(flavor.SecurityAgent) + return seccommand.MakeCommand(secsubcommands.SecurityAgentSubcommands()) + }) +} diff --git a/cmd/agent/system_probe.go b/cmd/agent/system_probe.go new file mode 100644 index 0000000000000..4248bf5a7286c --- /dev/null +++ b/cmd/agent/system_probe.go @@ -0,0 +1,23 @@ +// 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. + +//go:build !windows && bundle_system_probe + +// Main package for the agent binary +package main + +import ( + sysprobecommand "github.com/DataDog/datadog-agent/cmd/system-probe/command" + sysprobesubcommands "github.com/DataDog/datadog-agent/cmd/system-probe/subcommands" + "github.com/spf13/cobra" +) + +func init() { + registerAgent([]string{"system-probe"}, func() *cobra.Command { + rootCmd := sysprobecommand.MakeCommand(sysprobesubcommands.SysprobeSubcommands()) + sysprobecommand.SetDefaultCommandIfNonePresent(rootCmd) + return rootCmd + }) +} diff --git a/cmd/agent/trace_agent.go b/cmd/agent/trace_agent.go new file mode 100644 index 0000000000000..2ac852e6e2b5f --- /dev/null +++ b/cmd/agent/trace_agent.go @@ -0,0 +1,23 @@ +// 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. + +//go:build !windows && bundle_trace_agent + +// Main package for the agent binary +package main + +import ( + "os" + + tracecommand "github.com/DataDog/datadog-agent/cmd/trace-agent/command" + "github.com/spf13/cobra" +) + +func init() { + registerAgent([]string{"trace-agent"}, func() *cobra.Command { + os.Args = tracecommand.FixDeprecatedFlags(os.Args, os.Stdout) + return tracecommand.MakeRootCommand() + }) +} diff --git a/docs/dev/agent_build.md b/docs/dev/agent_build.md index 26f0126ee1911..1896724f75403 100644 --- a/docs/dev/agent_build.md +++ b/docs/dev/agent_build.md @@ -52,6 +52,30 @@ Also note that the trace agent needs to be built and run separately. For more in We use `pkg-config` to make compilers and linkers aware of Python. The required .pc files are provided automatically when building python through omnibus. +As an option, the Agent can combine multiple functionalities into a single binary to reduce +the space used on disk. The `DD_BUNDLED_AGENT` environment variable is used to select +which functionality to enable. For instance, if set to `process-agent`, it will act as the process Agent. +If the environment variable is not defined, the process name is used as a fallback. +As the last resort meaning, the executable will behave as the 'main' Agent. + +Different combinations can be obtained through the usage of build tags. As an example, +building the Agent with the `bundle_process_agent` and `bundle_security_agent` will produce +a binary that has the process Agent and security Agent capabilities. + +The `--bundle` argument can be used to override the default set of functionalities bundled +into the Agent binary. For instance, to override the defaults and bundle only the process and +and the security Agents: + +``` +deva agent.build --bundle process-agent --bundle security-agent +``` + +To disable bundling entirely: + +``` +deva agent.build --bundle agent +``` + ## Testing Agent changes in containerized environments Building an Agent Docker image from scratch through an embedded build is a slow process. diff --git a/omnibus/config/software/datadog-agent.rb b/omnibus/config/software/datadog-agent.rb index a05e3b71bd877..12b916c14fd83 100644 --- a/omnibus/config/software/datadog-agent.rb +++ b/omnibus/config/software/datadog-agent.rb @@ -30,6 +30,11 @@ build do license :project_license + bundled_agents = [] + if heroku_target? + bundled_agents = ["process-agent"] + end + # set GOPATH on the omnibus source dir for this software gopath = Pathname.new(project_dir) + '../../../..' flavor_arg = ENV['AGENT_FLAVOR'] @@ -94,15 +99,16 @@ command "inv -e rtloader.clean" command "inv -e rtloader.make --install-prefix \"#{install_dir}/embedded\" --cmake-options '-DCMAKE_CXX_FLAGS:=\"-D_GLIBCXX_USE_CXX11_ABI=0\" -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_FIND_FRAMEWORK:STRING=NEVER -DPython3_EXECUTABLE=#{install_dir}/embedded/bin/python3'", :env => env command "inv -e rtloader.install" + bundle_arg = bundled_agents ? bundled_agents.map { |k| "--bundle #{k}" }.join(" ") : "--bundle agent" include_sds = "" if linux_target? include_sds = "--include-sds" # we only support SDS on Linux targets for now end - command "inv -e agent.build --exclude-rtloader #{include_sds} --major-version #{major_version_arg} --no-development --install-path=#{install_dir} --embedded-path=#{install_dir}/embedded --flavor #{flavor_arg}", env: env + command "inv -e agent.build --exclude-rtloader #{include_sds} --major-version #{major_version_arg} --no-development --install-path=#{install_dir} --embedded-path=#{install_dir}/embedded --flavor #{flavor_arg} #{bundle_arg}", env: env if heroku_target? - command "inv -e agent.build --exclude-rtloader --major-version #{major_version_arg} --no-development --install-path=#{install_dir} --embedded-path=#{install_dir}/embedded --flavor #{flavor_arg} --agent-bin=bin/agent/core-agent", env: env + command "inv -e agent.build --exclude-rtloader --major-version #{major_version_arg} --no-development --install-path=#{install_dir} --embedded-path=#{install_dir}/embedded --flavor #{flavor_arg} --agent-bin=bin/agent/core-agent --bundle agent", env: env end end @@ -132,8 +138,10 @@ mkdir Omnibus::Config.package_dir() unless Dir.exists?(Omnibus::Config.package_dir()) end - platform = windows_arch_i386? ? "x86" : "x64" - command "invoke trace-agent.build --install-path=#{install_dir} --major-version #{major_version_arg} --flavor #{flavor_arg}", :env => env + if not bundled_agents.include? "trace-agent" + platform = windows_arch_i386? ? "x86" : "x64" + command "invoke trace-agent.build --install-path=#{install_dir} --major-version #{major_version_arg} --flavor #{flavor_arg}", :env => env + end if windows_target? copy 'bin/trace-agent/trace-agent.exe', "#{install_dir}/bin/agent" @@ -142,7 +150,9 @@ end # Process agent - command "invoke -e process-agent.build --install-path=#{install_dir} --major-version #{major_version_arg} --flavor #{flavor_arg}", :env => env + if not bundled_agents.include? "process-agent" + command "invoke -e process-agent.build --install-path=#{install_dir} --major-version #{major_version_arg} --flavor #{flavor_arg}", :env => env + end if windows_target? copy 'bin/process-agent/process-agent.exe', "#{install_dir}/bin/agent" @@ -192,7 +202,7 @@ copy 'bin/cws-instrumentation/cws-instrumentation', "#{install_dir}/embedded/bin" end - # OTel agent + # OTel agent - can never be bundled if ot_target? unless windows_target? command "invoke -e otel-agent.build", :env => env diff --git a/tasks/agent.py b/tasks/agent.py index 276c0c372e1e6..d4e5d13230885 100644 --- a/tasks/agent.py +++ b/tasks/agent.py @@ -21,6 +21,8 @@ REPO_PATH, bin_name, get_build_flags, + get_embedded_path, + get_goenv, get_version, gitlab_section, ) @@ -113,7 +115,7 @@ LAST_DIRECTORY_COMMIT_PATTERN = "git -C {integrations_dir} rev-list -1 HEAD {integration}" -@task +@task(iterable=['bundle']) @run_on_devcontainer def build( ctx, @@ -134,6 +136,8 @@ def build( go_mod="readonly", windows_sysprobe=False, cmake_options='', + bundle=None, + bundle_ebpf=False, agent_bin=None, run_on=None, # noqa: U100, F841. Used by the run_on_devcontainer decorator ): @@ -167,12 +171,12 @@ def build( major_version=major_version, ) + bundled_agents = ["agent"] if sys.platform == 'win32' or os.getenv("GOOS") == "windows": # Important for x-compiling env["CGO_ENABLED"] = "1" build_messagetable(ctx) - # Do not call build_rc when cross-compiling on Linux as the intend is more # to streamline the development process that producing a working executable / installer if sys.platform == 'win32': @@ -183,20 +187,31 @@ def build( vars=vars, out="cmd/agent/rsrc.syso", ) + else: + bundled_agents += bundle or [] if flavor.is_iot(): # Iot mode overrides whatever passed through `--build-exclude` and `--build-include` build_tags = get_default_build_tags(build="agent", flavor=flavor) else: - include_tags = ( - get_default_build_tags(build="agent", flavor=flavor) - if build_include is None - else filter_incompatible_tags(build_include.split(",")) - ) + all_tags = set() + if bundle_ebpf and "system-probe" in bundled_agents: + all_tags.add("ebpf_bindata") + + for build in bundled_agents: + all_tags.add("bundle_" + build.replace("-", "_")) + include_tags = ( + get_default_build_tags(build=build, flavor=flavor) + if build_include is None + else filter_incompatible_tags(build_include.split(",")) + ) - exclude_tags = [] if build_exclude is None else build_exclude.split(",") - build_tags = get_build_tags(include_tags, exclude_tags) - build_tags = add_fips_tags(build_tags, fips_mode) + exclude_tags = [] if build_exclude is None else build_exclude.split(",") + build_tags = get_build_tags(include_tags, exclude_tags) + build_tags = add_fips_tags(build_tags, fips_mode) + + all_tags |= set(build_tags) + build_tags = list(all_tags) cmd = "go build -mod={go_mod} {race_opt} {build_type} -tags \"{go_build_tags}\" " @@ -221,6 +236,23 @@ def build( with gitlab_section("Build agent", collapsed=True): ctx.run(cmd.format(**args), env=env) + if embedded_path is None: + embedded_path = get_embedded_path(ctx) + assert embedded_path, "Failed to find embedded path" + + for build in bundled_agents: + if build == "agent": + continue + + bundled_agent_dir = os.path.join(BIN_DIR, build) + bundled_agent_bin = os.path.join(bundled_agent_dir, bin_name(build)) + agent_fullpath = os.path.normpath(os.path.join(embedded_path, "..", "bin", "agent", bin_name("agent"))) + + if not os.path.exists(os.path.dirname(bundled_agent_bin)): + os.mkdir(os.path.dirname(bundled_agent_bin)) + + create_launcher(ctx, build, agent_fullpath, bundled_agent_bin) + with gitlab_section("Generate configuration files", collapsed=True): render_config( ctx, @@ -233,6 +265,22 @@ def build( ) +def create_launcher(ctx, agent, src, dst): + cc = get_goenv(ctx, "CC") + if not cc: + print("Failed to find C compiler") + raise Exit(code=1) + + cmd = "{cc} -DDD_AGENT_PATH='\"{agent_bin}\"' -DDD_AGENT='\"{agent}\"' -o {launcher_bin} ./cmd/agent/launcher/launcher.c" + args = { + "cc": cc, + "agent": agent, + "agent_bin": src, + "launcher_bin": dst, + } + ctx.run(cmd.format(**args)) + + def render_config(ctx, env, flavor, skip_assets, build_tags, development, windows_sysprobe): # Remove cross-compiling bits to render config env.update({"GOOS": "", "GOARCH": ""}) From 2f2c6dbb70d46649c707ee5df38322c5f66fdafd Mon Sep 17 00:00:00 2001 From: Jack Phillips Date: Thu, 12 Dec 2024 12:01:42 -0500 Subject: [PATCH 169/303] Fix Windows Ctrl-c (#31857) --- cmd/agent/subcommands/run/command_windows.go | 24 +++++++ pkg/util/winutil/winctrlhandler.go | 45 ++++++++++++++ .../fix-agent-ctrlc-520d29d346ee6939.yaml | 11 ++++ rtloader/three/three.cpp | 5 +- test/new-e2e/pkg/utils/e2e/client/host.go | 24 +++++++ test/new-e2e/pkg/utils/e2e/client/host_ssh.go | 24 ++++++- .../agent-platform/common/test_client.go | 14 +++-- .../agent-subcommands/run/run_common_test.go | 19 ++++++ .../agent-subcommands/run/run_nix_test.go | 62 +++++++++++++++++++ 9 files changed, 218 insertions(+), 10 deletions(-) create mode 100644 pkg/util/winutil/winctrlhandler.go create mode 100644 releasenotes/notes/fix-agent-ctrlc-520d29d346ee6939.yaml diff --git a/cmd/agent/subcommands/run/command_windows.go b/cmd/agent/subcommands/run/command_windows.go index f3a4ce2414e1a..8504227a81433 100644 --- a/cmd/agent/subcommands/run/command_windows.go +++ b/cmd/agent/subcommands/run/command_windows.go @@ -76,6 +76,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/optional" + "github.com/DataDog/datadog-agent/pkg/util/winutil" // runtime init routines ) @@ -206,6 +207,28 @@ func StartAgentWithDefaults(ctxChan <-chan context.Context) (<-chan error, error return errChan, nil } +// Re-register the ctrl handler because Go uses SetConsoleCtrlHandler and Python uses posix signal calls. +// This is only needed when using the embedded Python module. +// When Python imports the signal module, it overrides the ctrl handler set by Go and installs the Windows posix signal handler. +// Linux uses the POSIX signal handler for both Go and Python, so this is not an issue on Linux. +// As Python checks if the signal handler is not the default handler before overwritting it. +// If CPython adds a way to avoid overriding the ctrl handler, we can remove this workaround. +// If Go adds support to use the posix signal handler on Windows, we can remove this workaround. +// All calls to signal.Notify will no longer work after the Python module is started. +func reRegisterCtrlHandler(log log.Component, _ collector.Component) { + log.Info("Re-registering Ctrl+C handler") + err := winutil.SetConsoleCtrlHandler(func(ctrlType uint32) bool { + switch ctrlType { + case winutil.CtrlCEvent, winutil.CtrlBreakEvent: + signals.Stopper <- true + } + return true + }, true) + if err != nil { + log.Error(err) + } +} + func getPlatformModules() fx.Option { return fx.Options( agentcrashdetectimpl.Module(), @@ -222,5 +245,6 @@ func getPlatformModules() fx.Option { fx.Invoke(func(_ etwtracer.Component) {}), fx.Invoke(func(_ windowseventlog.Component) {}), fx.Invoke(func(_ winregistry.Component) {}), + fx.Invoke(reRegisterCtrlHandler), ) } diff --git a/pkg/util/winutil/winctrlhandler.go b/pkg/util/winutil/winctrlhandler.go new file mode 100644 index 0000000000000..024982a86495f --- /dev/null +++ b/pkg/util/winutil/winctrlhandler.go @@ -0,0 +1,45 @@ +// 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. + +//go:build windows + +// Package winutil contains Windows OS utilities +package winutil + +import "golang.org/x/sys/windows" + +var ( + setConsoleCtrlHandler = k32.NewProc("SetConsoleCtrlHandler") +) + +// Console control signal constants +// +// https://learn.microsoft.com/en-us/windows/console/handlerroutine +const ( + CtrlCEvent = 0 + CtrlBreakEvent = 1 +) + +func boolToInt(b bool) int { + if b { + return 1 + } + return 0 +} + +// SetConsoleCtrlHandler sets the handler function for console control events. +// +// https://learn.microsoft.com/en-us/windows/console/setconsolectrlhandler +func SetConsoleCtrlHandler(handler func(uint32) bool, add bool) error { + ret, _, err := setConsoleCtrlHandler.Call( + uintptr(windows.NewCallback(func(sig uint32) uintptr { + return uintptr(boolToInt(handler(sig))) + })), + uintptr(boolToInt(add))) + if ret == 0 { + return err + } + return nil +} diff --git a/releasenotes/notes/fix-agent-ctrlc-520d29d346ee6939.yaml b/releasenotes/notes/fix-agent-ctrlc-520d29d346ee6939.yaml new file mode 100644 index 0000000000000..3654fbdf6a957 --- /dev/null +++ b/releasenotes/notes/fix-agent-ctrlc-520d29d346ee6939.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + Fixes Windows CTRL-C handler on the agent run command. diff --git a/rtloader/three/three.cpp b/rtloader/three/three.cpp index 1df4c7bca26b8..425f8e93a24b3 100644 --- a/rtloader/three/three.cpp +++ b/rtloader/three/three.cpp @@ -110,7 +110,10 @@ bool Three::init() PyImport_AppendInittab(KUBEUTIL_MODULE_NAME, PyInit_kubeutil); PyImport_AppendInittab(CONTAINERS_MODULE_NAME, PyInit_containers); - Py_Initialize(); + // force initialize siginterrupt with signal in python so it can be overwritten by the agent + // This only effects the windows builds as linux already has the sigint handler initialized + // and thus python will ignore it + Py_InitializeEx(1); if (!Py_IsInitialized()) { setError("Python not initialized"); diff --git a/test/new-e2e/pkg/utils/e2e/client/host.go b/test/new-e2e/pkg/utils/e2e/client/host.go index ad0f1e0eb8557..c4684901ee11c 100644 --- a/test/new-e2e/pkg/utils/e2e/client/host.go +++ b/test/new-e2e/pkg/utils/e2e/client/host.go @@ -143,6 +143,30 @@ func (h *Host) executeAndReconnectOnError(command string) (string, error) { return stdout, err } +// Start a command and returns session, and an error if any. +func (h *Host) Start(command string, options ...ExecuteOption) (*ssh.Session, io.WriteCloser, io.Reader, error) { + params, err := optional.MakeParams(options...) + if err != nil { + return nil, nil, nil, err + } + command = h.buildCommand(command, params.EnvVariables) + return h.startAndReconnectOnError(command) +} + +func (h *Host) startAndReconnectOnError(command string) (*ssh.Session, io.WriteCloser, io.Reader, error) { + scrubbedCommand := h.scrubber.ScrubLine(command) // scrub the command in case it contains secrets + h.context.T().Logf("%s - %s - Executing command `%s`", time.Now().Format("02-01-2006 15:04:05"), h.context.T().Name(), scrubbedCommand) + session, stdin, stdout, err := start(h.client, command) + if err != nil && strings.Contains(err.Error(), "failed to create session:") { + err = h.Reconnect() + if err != nil { + return nil, nil, nil, err + } + session, stdin, stdout, err = start(h.client, command) + } + return session, stdin, stdout, err +} + // MustExecute executes a command and requires no error. func (h *Host) MustExecute(command string, options ...ExecuteOption) string { stdout, err := h.Execute(command, options...) diff --git a/test/new-e2e/pkg/utils/e2e/client/host_ssh.go b/test/new-e2e/pkg/utils/e2e/client/host_ssh.go index 79a53dd4b87e2..9e39bfa901354 100644 --- a/test/new-e2e/pkg/utils/e2e/client/host_ssh.go +++ b/test/new-e2e/pkg/utils/e2e/client/host_ssh.go @@ -7,14 +7,15 @@ package client import ( "fmt" - "github.com/pkg/sftp" - "golang.org/x/crypto/ssh" - "golang.org/x/crypto/ssh/agent" "io" "net" "os" "path" "strings" + + "github.com/pkg/sftp" + "golang.org/x/crypto/ssh" + "golang.org/x/crypto/ssh/agent" ) func execute(sshClient *ssh.Client, command string) (string, error) { @@ -26,6 +27,23 @@ func execute(sshClient *ssh.Client, command string) (string, error) { return string(stdout), err } +func start(sshClient *ssh.Client, command string) (*ssh.Session, io.WriteCloser, io.Reader, error) { + session, err := sshClient.NewSession() + if err != nil { + return nil, nil, nil, fmt.Errorf("failed to create session: %v", err) + } + stdin, err := session.StdinPipe() + if err != nil { + return nil, nil, nil, fmt.Errorf("failed to create stdin pipe: %v", err) + } + stdout, err := session.StdoutPipe() + if err != nil { + return nil, nil, nil, fmt.Errorf("failed to create stdout pipe: %v", err) + } + err = session.Start(command) + return session, stdin, stdout, err +} + func getSSHClient(user, host string, privateKey, privateKeyPassphrase []byte) (*ssh.Client, error) { var auth ssh.AuthMethod diff --git a/test/new-e2e/tests/agent-platform/common/test_client.go b/test/new-e2e/tests/agent-platform/common/test_client.go index bf827544135ca..afbf7fe81dd25 100644 --- a/test/new-e2e/tests/agent-platform/common/test_client.go +++ b/test/new-e2e/tests/agent-platform/common/test_client.go @@ -12,6 +12,11 @@ import ( "strings" "time" + componentos "github.com/DataDog/test-infra-definitions/components/os" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "gopkg.in/yaml.v2" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/utils/e2e/client" @@ -22,10 +27,6 @@ import ( pkgmanager "github.com/DataDog/datadog-agent/test/new-e2e/tests/agent-platform/common/pkg-manager" "github.com/DataDog/datadog-agent/test/new-e2e/tests/agent-platform/common/process" svcmanager "github.com/DataDog/datadog-agent/test/new-e2e/tests/agent-platform/common/svc-manager" - componentos "github.com/DataDog/test-infra-definitions/components/os" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "gopkg.in/yaml.v2" "testing" ) @@ -34,7 +35,8 @@ type tHelper interface { Helper() } -func getServiceManager(host *components.RemoteHost) svcmanager.ServiceManager { +// GetServiceManager returns the service manager for the host +func GetServiceManager(host *components.RemoteHost) svcmanager.ServiceManager { if _, err := host.Execute("command -v systemctl"); err == nil { return svcmanager.NewSystemctl(host) } @@ -77,7 +79,7 @@ type TestClient struct { // NewTestClient create a an ExtendedClient from VMClient and AgentCommandRunner, includes svcManager and pkgManager to write agent-platform tests func NewTestClient(host *components.RemoteHost, agentClient agentclient.Agent, fileManager filemanager.FileManager, helper helpers.Helper) *TestClient { - svcManager := getServiceManager(host) + svcManager := GetServiceManager(host) pkgManager := getPackageManager(host) return &TestClient{ Host: host, diff --git a/test/new-e2e/tests/agent-subcommands/run/run_common_test.go b/test/new-e2e/tests/agent-subcommands/run/run_common_test.go index ad971aa5d4dde..403fa77448ac5 100644 --- a/test/new-e2e/tests/agent-subcommands/run/run_common_test.go +++ b/test/new-e2e/tests/agent-subcommands/run/run_common_test.go @@ -6,10 +6,14 @@ package status import ( + "bytes" "context" "errors" + "io" "time" + "github.com/stretchr/testify/assert" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" @@ -40,3 +44,18 @@ func runCommandWithTimeout(host *components.RemoteHost, cmd string, timeout time // return the timeout error return out, ctx.Err() } + +func (s *baseRunSuite) readUntil(stdout io.Reader, str string) { + s.Assert().EventuallyWithT(func(c *assert.CollectT) { + out := make([]byte, 0x4000) + _, e := stdout.Read(out) + if e != nil && !errors.Is(e, io.EOF) { + c.Errorf("error reading stdout %s", e) + c.FailNow() + } + if !assert.True(c, bytes.Contains(out, []byte(str)), "Did not fine %s", str) { + s.T().Logf("Waiting for %s", str) + } + + }, 3*time.Minute, 1*time.Second, "Did Not find %s", str) +} diff --git a/test/new-e2e/tests/agent-subcommands/run/run_nix_test.go b/test/new-e2e/tests/agent-subcommands/run/run_nix_test.go index 0213be598c452..10376b4e30096 100644 --- a/test/new-e2e/tests/agent-subcommands/run/run_nix_test.go +++ b/test/new-e2e/tests/agent-subcommands/run/run_nix_test.go @@ -7,9 +7,15 @@ package status import ( "context" + "fmt" + "time" + + "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" awshost "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/host" + "github.com/DataDog/datadog-agent/test/new-e2e/tests/agent-platform/common" + "github.com/DataDog/datadog-agent/test/new-e2e/tests/agent-platform/common/process" "testing" ) @@ -44,3 +50,59 @@ func (s *linuxRunSuite) TestRunWhenAgentAlreadyRunning() { s.Require().ErrorContains(err, " listen tcp 127.0.0.1:5001: bind: address already in use") // TODO: Once host.Execute is fixed to return the exit code, check that the exit code is ?? } + +func (s *linuxRunSuite) TestRunAgentCtrlC() { + host := s.Env().RemoteHost + + // stop the agent + svcManager := common.GetServiceManager(host) + s.Require().NotNil(svcManager) + _, err := svcManager.Stop("datadog-agent") + s.Require().NoError(err) + + // execute the `agent run` subcommand + cmd := `sudo datadog-agent run` + + // run command with timeout it + _, _, stdout, err := host.Start(cmd) + if err != nil { + s.FailNow("failed to start agent run command", err) + } + + s.T().Log("Agent run command started") + // wait for the agent and checks to start + s.readUntil(stdout, "Running") + + // get PID of the agent + pids, err := process.FindPID(host, "datadog-agent") + s.Require().NoError(err) + s.T().Log(pids) + + // should be two the sudo command and the subproces + s.Require().Len(pids, 2) + pid := pids[1] + + // send ctrl+c to the agent + _, err = host.Execute(fmt.Sprintf(`sudo kill -INT %d`, pid)) + s.Require().NoError(err) + + // verify it recives the stop command + s.readUntil(stdout, "shutting") + + // wait for the agent to stop + s.Assert().EventuallyWithT(func(c *assert.CollectT) { + pids, err := process.FindPID(host, "datadog-agent") + s.T().Log(pids) + // verify there is an error + assert.Error(c, err) + }, 1*time.Minute, 1*time.Second, "%s should be stopped", "datadog-agent") + + // restart the agent + _, err = svcManager.Start("datadog-agent") + s.Require().NoError(err) + + // wait for the agent to start + s.Assert().EventuallyWithT(func(c *assert.CollectT) { + assert.True(c, s.Env().Agent.Client.IsReady(), "agent should be running") + }, 1*time.Minute, 1*time.Second, "%s should be ready", "datadog-agent") +} From 620dbbd9e8965af6ccd4fe2a71c97975be92b18c Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Thu, 12 Dec 2024 18:03:25 +0100 Subject: [PATCH 170/303] fix(create_rc): Pass the option to the invoke task (#32054) --- .github/workflows/create_rc_pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create_rc_pr.yml b/.github/workflows/create_rc_pr.yml index 623b6e9dee395..4522ddd4100a2 100644 --- a/.github/workflows/create_rc_pr.yml +++ b/.github/workflows/create_rc_pr.yml @@ -100,4 +100,4 @@ jobs: git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git fetch - inv -e release.create-rc "$MATRIX" --slack-webhook=${{ secrets.AGENT_RELEASE_SYNC_SLACK_WEBHOOK }} + inv -e release.create-rc -r "$MATRIX" --slack-webhook=${{ secrets.AGENT_RELEASE_SYNC_SLACK_WEBHOOK }} From 8a55e936224435619303195bf505e90af149f24e Mon Sep 17 00:00:00 2001 From: Robert Li Date: Thu, 12 Dec 2024 12:15:00 -0500 Subject: [PATCH 171/303] Update processes team name to container-intake (#31442) --- .ddqa/config.toml | 8 ++--- .github/CODEOWNERS | 32 +++++++++---------- comp/README.md | 2 +- comp/process/agent/component.go | 2 +- comp/process/apiserver/component.go | 2 +- comp/process/bundle.go | 2 +- comp/process/connectionscheck/component.go | 2 +- comp/process/containercheck/component.go | 2 +- comp/process/expvars/component.go | 2 +- comp/process/forwarders/component.go | 2 +- comp/process/hostinfo/component.go | 2 +- comp/process/processcheck/component.go | 2 +- .../processdiscoverycheck/component.go | 2 +- comp/process/processeventscheck/component.go | 2 +- comp/process/profiler/component.go | 2 +- comp/process/rtcontainercheck/component.go | 2 +- comp/process/runner/component.go | 2 +- comp/process/status/component.go | 2 +- comp/process/submitter/component.go | 2 +- tasks/libs/pipeline/github_jira_map.yaml | 2 +- tasks/libs/pipeline/github_slack_map.yaml | 2 +- 21 files changed, 39 insertions(+), 39 deletions(-) diff --git a/.ddqa/config.toml b/.ddqa/config.toml index 19af82cde8450..bcb6804917e41 100644 --- a/.ddqa/config.toml +++ b/.ddqa/config.toml @@ -176,12 +176,12 @@ jira_statuses = ["To Do", "In Progress", "Done"] github_team = "agent-cspm" github_labels = ["team/agent-cspm"] -[teams."Processes"] -jira_project = "PROCS" +[teams."Container Intake"] +jira_project = "CTK" jira_issue_type = "Task" jira_statuses = ["TRIAGE", "In Progress", "Done"] -github_team = "processes" -github_labels = ["team/processes"] +github_team = "container-intake" +github_labels = ["team/container-intake"] [teams."Windows Agent"] jira_project = "WINA" diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 042dc565a8f9f..9d95d87125138 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -218,7 +218,7 @@ /cmd/cws-instrumentation/ @DataDog/agent-security /cmd/dogstatsd/ @DataDog/agent-metrics-logs /cmd/otel-agent/ @DataDog/opentelemetry -/cmd/process-agent/ @DataDog/processes +/cmd/process-agent/ @DataDog/container-intake /cmd/serverless/ @DataDog/serverless @Datadog/serverless-aws /cmd/serverless-init/ @DataDog/serverless /cmd/system-probe/ @DataDog/ebpf-platform @@ -227,12 +227,12 @@ /cmd/system-probe/config/adjust_security.go @DataDog/ebpf-platform @DataDog/agent-security /cmd/system-probe/modules/network_tracer* @DataDog/Networks /cmd/system-probe/modules/oom_kill_probe* @DataDog/container-integrations -/cmd/system-probe/modules/process* @DataDog/processes +/cmd/system-probe/modules/process* @DataDog/container-intake /cmd/system-probe/modules/eventmonitor* @DataDog/agent-security /cmd/system-probe/modules/tcp_queue_tracer* @DataDog/container-integrations /cmd/system-probe/modules/traceroute* @DataDog/network-device-monitoring @Datadog/Networks /cmd/system-probe/modules/ping* @DataDog/ndm-core -/cmd/system-probe/modules/language_detection* @DataDog/processes @DataDog/universal-service-monitoring +/cmd/system-probe/modules/language_detection* @DataDog/container-intake @DataDog/universal-service-monitoring /cmd/system-probe/modules/dynamic_instrumentation* @DataDog/debugger /cmd/system-probe/windows_resources/ @DataDog/windows-kernel-integrations /cmd/system-probe/main_windows*.go @DataDog/windows-kernel-integrations @@ -299,7 +299,7 @@ /comp/netflow @DataDog/ndm-integrations /comp/networkpath @DataDog/Networks @DataDog/network-device-monitoring /comp/otelcol @DataDog/opentelemetry -/comp/process @DataDog/processes +/comp/process @DataDog/container-intake /comp/remote-config @DataDog/remote-config /comp/snmptraps @DataDog/ndm-core /comp/systray @DataDog/windows-agent @@ -391,7 +391,7 @@ /pkg/collector/corechecks/ebpf/c/runtime/ebpf* @DataDog/ebpf-platform /pkg/collector/corechecks/embed/ @Datadog/agent-delivery /pkg/collector/corechecks/embed/apm/ @DataDog/agent-apm -/pkg/collector/corechecks/embed/process/ @DataDog/processes +/pkg/collector/corechecks/embed/process/ @DataDog/container-intake /pkg/collector/corechecks/gpu/ @DataDog/ebpf-platform /pkg/collector/corechecks/network-devices/ @DataDog/ndm-integrations /pkg/collector/corechecks/orchestrator/ @DataDog/container-app @@ -413,7 +413,7 @@ /pkg/config/autodiscovery/ @DataDog/container-integrations @DataDog/container-platform /pkg/config/env @DataDog/container-integrations @DataDog/container-platform /pkg/config/setup @DataDog/agent-shared-components -/pkg/config/setup/process*.go @DataDog/processes +/pkg/config/setup/process*.go @DataDog/container-intake /pkg/config/setup/system_probe.go @DataDog/ebpf-platform /pkg/config/setup/system_probe_cws.go @DataDog/agent-security /pkg/config/setup/system_probe_cws_notwin.go @DataDog/agent-security @@ -436,8 +436,8 @@ /pkg/pidfile/ @DataDog/agent-shared-components /pkg/persistentcache/ @DataDog/agent-metrics-logs /pkg/proto/ @DataDog/agent-shared-components -/pkg/proto/datadog/languagedetection @DataDog/processes -/pkg/proto/datadog/process @DataDog/processes +/pkg/proto/datadog/languagedetection @DataDog/container-intake +/pkg/proto/datadog/process @DataDog/container-intake /pkg/proto/datadog/trace @DataDog/agent-apm /pkg/proto/datadog/workloadmeta @DataDog/container-platform /pkg/remoteconfig/ @DataDog/remote-config @@ -472,7 +472,7 @@ /pkg/util/testutil/patternscanner.go @DataDog/universal-service-monitoring @DataDog/ebpf-platform /pkg/util/testutil/docker @DataDog/universal-service-monitoring @DataDog/ebpf-platform /pkg/util/trie @DataDog/container-integrations -/pkg/languagedetection @DataDog/processes @DataDog/universal-service-monitoring +/pkg/languagedetection @DataDog/container-intake @DataDog/universal-service-monitoring /pkg/linters/ @DataDog/agent-devx-loops /pkg/linters/components/ @DataDog/agent-shared-components /pkg/logs/ @DataDog/agent-metrics-logs @@ -486,18 +486,18 @@ /pkg/logs/processor @DataDog/agent-processing-and-routing /pkg/logs/sds @DataDog/agent-processing-and-routing /pkg/logs/sender @DataDog/agent-processing-and-routing -/pkg/process/ @DataDog/processes +/pkg/process/ @DataDog/container-intake /pkg/process/util/address*.go @DataDog/Networks /pkg/process/checks/net*.go @DataDog/Networks -/pkg/process/metadata/parser/ @DataDog/universal-service-monitoring @DataDog/processes @DataDog/Networks -/pkg/process/metadata/parser/*windows* @DataDog/universal-service-monitoring @DataDog/processes @DataDog/Networks @DataDog/windows-kernel-integrations +/pkg/process/metadata/parser/ @DataDog/universal-service-monitoring @DataDog/container-intake @DataDog/Networks +/pkg/process/metadata/parser/*windows* @DataDog/universal-service-monitoring @DataDog/container-intake @DataDog/Networks @DataDog/windows-kernel-integrations /pkg/process/monitor/ @DataDog/universal-service-monitoring /pkg/process/net/ @DataDog/universal-service-monitoring @DataDog/Networks /pkg/proto/datadog/remoteconfig/ @DataDog/remote-config /pkg/proto/pbgo/ # do not notify anyone /pkg/proto/pbgo/trace @DataDog/agent-apm /pkg/proto/pbgo/languagedetection @DataDog/agent-apm -/pkg/proto/pbgo/process @DataDog/processes +/pkg/proto/pbgo/process @DataDog/container-intake /pkg/proto/pbgo/core @DataDog/agent-shared-components /pkg/proto/pbgo/core/remoteconfig.pb.go @DataDog/remote-config /pkg/proto/pbgo/core/remoteconfig_gen.go @DataDog/remote-config @@ -558,7 +558,7 @@ /tasks/unit_tests/update_go_tests.py @DataDog/agent-shared-components /tasks/cluster_agent_cloudfoundry.py @DataDog/platform-integrations /tasks/new_e2e_tests.py @DataDog/agent-e2e-testing @DataDog/agent-devx-loops -/tasks/process_agent.py @DataDog/processes +/tasks/process_agent.py @DataDog/container-intake /tasks/system_probe.py @DataDog/ebpf-platform /tasks/ebpf.py @DataDog/ebpf-platform /tasks/kmt.py @DataDog/ebpf-platform @@ -605,7 +605,7 @@ /test/new-e2e/tests/containers @DataDog/container-integrations @DataDog/container-platform /test/new-e2e/tests/discovery @DataDog/universal-service-monitoring /test/new-e2e/tests/ha-agent @DataDog/ndm-core -/test/new-e2e/tests/language-detection @DataDog/processes +/test/new-e2e/tests/language-detection @DataDog/container-intake /test/new-e2e/tests/ndm @DataDog/ndm-core /test/new-e2e/tests/ndm/netflow @DataDog/ndm-integrations /test/new-e2e/tests/netpath @DataDog/Networks @DataDog/network-device-monitoring @@ -613,7 +613,7 @@ /test/new-e2e/tests/npm/ec2_1host_wkit_test.go @DataDog/Networks @DataDog/windows-kernel-integrations /test/new-e2e/tests/orchestrator @DataDog/container-app /test/new-e2e/tests/otel @DataDog/opentelemetry -/test/new-e2e/tests/process @DataDog/processes +/test/new-e2e/tests/process @DataDog/container-intake /test/new-e2e/tests/sysprobe-functional @DataDog/windows-kernel-integrations /test/new-e2e/tests/security-agent-functional @DataDog/windows-kernel-integrations @DataDog/agent-security /test/new-e2e/tests/cws @DataDog/agent-security diff --git a/comp/README.md b/comp/README.md index d9c2cf8ab27d4..f011bc57fe71d 100644 --- a/comp/README.md +++ b/comp/README.md @@ -392,7 +392,7 @@ Package logsagentpipeline contains logs agent pipeline component ## [comp/process](https://pkg.go.dev/github.com/DataDog/datadog-agent/comp/process) (Component Bundle) -*Datadog Team*: processes +*Datadog Team*: container-intake Package process implements the "process" bundle, providing components for the Process Agent diff --git a/comp/process/agent/component.go b/comp/process/agent/component.go index ecf92e3a5dfcc..1ac87a05c2dbc 100644 --- a/comp/process/agent/component.go +++ b/comp/process/agent/component.go @@ -6,7 +6,7 @@ // Package agent contains a process-agent component package agent -// team: processes +// team: container-intake // Component is the process agent component type type Component interface { diff --git a/comp/process/apiserver/component.go b/comp/process/apiserver/component.go index 112bf88bf9a80..81d857325094f 100644 --- a/comp/process/apiserver/component.go +++ b/comp/process/apiserver/component.go @@ -12,7 +12,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) -// team: processes +// team: container-intake //nolint:revive // TODO(PROC) Fix revive linter type Component interface { diff --git a/comp/process/bundle.go b/comp/process/bundle.go index 73a8d9b7f5e81..96802180c2cce 100644 --- a/comp/process/bundle.go +++ b/comp/process/bundle.go @@ -29,7 +29,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) -// team: processes +// team: container-intake // Bundle defines the fx options for this bundle. // Do not add modules not owned by the processes team here as it breaks fx best practices diff --git a/comp/process/connectionscheck/component.go b/comp/process/connectionscheck/component.go index 4f55a013d2a26..115312673119c 100644 --- a/comp/process/connectionscheck/component.go +++ b/comp/process/connectionscheck/component.go @@ -10,7 +10,7 @@ import ( "github.com/DataDog/datadog-agent/comp/process/types" ) -// team: processes +// team: container-intake //nolint:revive // TODO(PROC) Fix revive linter type Component interface { diff --git a/comp/process/containercheck/component.go b/comp/process/containercheck/component.go index 1fb5fa971c2df..0ff531c383215 100644 --- a/comp/process/containercheck/component.go +++ b/comp/process/containercheck/component.go @@ -10,7 +10,7 @@ import ( "github.com/DataDog/datadog-agent/comp/process/types" ) -// team: processes +// team: container-intake //nolint:revive // TODO(PROC) Fix revive linter type Component interface { diff --git a/comp/process/expvars/component.go b/comp/process/expvars/component.go index 542185936de3f..5297f4bb1dea2 100644 --- a/comp/process/expvars/component.go +++ b/comp/process/expvars/component.go @@ -6,7 +6,7 @@ // Package expvars initializes the expvar server of the process agent. package expvars -// team: processes +// team: container-intake //nolint:revive // TODO(PROC) Fix revive linter type Component interface { diff --git a/comp/process/forwarders/component.go b/comp/process/forwarders/component.go index 3d4cc9aa693ac..bcfdf5623f87e 100644 --- a/comp/process/forwarders/component.go +++ b/comp/process/forwarders/component.go @@ -10,7 +10,7 @@ import ( "github.com/DataDog/datadog-agent/comp/forwarder/defaultforwarder" ) -// team: processes +// team: container-intake //nolint:revive // TODO(PROC) Fix revive linter type Component interface { diff --git a/comp/process/hostinfo/component.go b/comp/process/hostinfo/component.go index df8e2d309ceb2..9cf8d7aa69b9a 100644 --- a/comp/process/hostinfo/component.go +++ b/comp/process/hostinfo/component.go @@ -10,7 +10,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/process/checks" ) -// team: processes +// team: container-intake //nolint:revive // TODO(PROC) Fix revive linter type Component interface { diff --git a/comp/process/processcheck/component.go b/comp/process/processcheck/component.go index fe7f2b848267f..b80668be29188 100644 --- a/comp/process/processcheck/component.go +++ b/comp/process/processcheck/component.go @@ -10,7 +10,7 @@ import ( "github.com/DataDog/datadog-agent/comp/process/types" ) -// team: processes +// team: container-intake //nolint:revive // TODO(PROC) Fix revive linter type Component interface { diff --git a/comp/process/processdiscoverycheck/component.go b/comp/process/processdiscoverycheck/component.go index 35c275ff7a58c..127c0273b0e2f 100644 --- a/comp/process/processdiscoverycheck/component.go +++ b/comp/process/processdiscoverycheck/component.go @@ -10,7 +10,7 @@ import ( "github.com/DataDog/datadog-agent/comp/process/types" ) -// team: processes +// team: container-intake //nolint:revive // TODO(PROC) Fix revive linter type Component interface { diff --git a/comp/process/processeventscheck/component.go b/comp/process/processeventscheck/component.go index 4b0d127049ca2..9e6835057b513 100644 --- a/comp/process/processeventscheck/component.go +++ b/comp/process/processeventscheck/component.go @@ -10,7 +10,7 @@ import ( "github.com/DataDog/datadog-agent/comp/process/types" ) -// team: processes +// team: container-intake //nolint:revive // TODO(PROC) Fix revive linter type Component interface { diff --git a/comp/process/profiler/component.go b/comp/process/profiler/component.go index 5f920f3f627af..5e89705a1cc80 100644 --- a/comp/process/profiler/component.go +++ b/comp/process/profiler/component.go @@ -6,7 +6,7 @@ // Package profiler implements a component to handle starting and stopping the internal profiler. package profiler -// team: processes +// team: container-intake //nolint:revive // TODO(PROC) Fix revive linter type Component interface { diff --git a/comp/process/rtcontainercheck/component.go b/comp/process/rtcontainercheck/component.go index d313aa8359888..3d3f73c9a2b80 100644 --- a/comp/process/rtcontainercheck/component.go +++ b/comp/process/rtcontainercheck/component.go @@ -10,7 +10,7 @@ import ( "github.com/DataDog/datadog-agent/comp/process/types" ) -// team: processes +// team: container-intake //nolint:revive // TODO(PROC) Fix revive linter type Component interface { diff --git a/comp/process/runner/component.go b/comp/process/runner/component.go index 598ddf3065ce1..e818cfc388267 100644 --- a/comp/process/runner/component.go +++ b/comp/process/runner/component.go @@ -11,7 +11,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/process/checks" ) -// team: processes +// team: container-intake // Component is the component type. type Component interface { diff --git a/comp/process/status/component.go b/comp/process/status/component.go index d08f20625b8ea..45fa3ff571d16 100644 --- a/comp/process/status/component.go +++ b/comp/process/status/component.go @@ -6,7 +6,7 @@ // Package status implements the core status component information provider interface package status -// team: processes +// team: container-intake // Component is the status interface. type Component interface { diff --git a/comp/process/submitter/component.go b/comp/process/submitter/component.go index 07359f6a2c306..26a88c6106017 100644 --- a/comp/process/submitter/component.go +++ b/comp/process/submitter/component.go @@ -11,7 +11,7 @@ import ( processRunner "github.com/DataDog/datadog-agent/pkg/process/runner" ) -// team: processes +// team: container-intake // Component is the component type. type Component interface { diff --git a/tasks/libs/pipeline/github_jira_map.yaml b/tasks/libs/pipeline/github_jira_map.yaml index d3262de27a247..d4bf1aefe502e 100644 --- a/tasks/libs/pipeline/github_jira_map.yaml +++ b/tasks/libs/pipeline/github_jira_map.yaml @@ -12,7 +12,7 @@ '@datadog/network-device-monitoring': NDMII '@datadog/ndm-core': NDMII '@datadog/ndm-integrations': NDINT -'@datadog/processes': PROCS +'@datadog/container-intake': CTK '@datadog/agent-metrics-logs': AMLII '@datadog/agent-shared-components': ASCII '@datadog/container-app': CAP diff --git a/tasks/libs/pipeline/github_slack_map.yaml b/tasks/libs/pipeline/github_slack_map.yaml index 1eebefe479b21..0d673eddd714e 100644 --- a/tasks/libs/pipeline/github_slack_map.yaml +++ b/tasks/libs/pipeline/github_slack_map.yaml @@ -14,7 +14,7 @@ '@datadog/network-device-monitoring': '#network-device-monitoring' '@datadog/ndm-core': '#ndm-core' '@datadog/ndm-integrations': '#ndm-integrations' -'@datadog/processes': '#process-agent-ops' +'@datadog/container-intake': '#process-agent-ops' '@datadog/agent-metrics-logs': '#agent-metrics-logs' '@datadog/agent-processing-and-routing': '#agent-processing-and-routing' '@datadog/agent-shared-components': '#agent-shared-components-ops' From 8822a1c4d6fa79d7af6481bcc013fb12df9a460f Mon Sep 17 00:00:00 2001 From: Evan Fossier Date: Thu, 12 Dec 2024 12:28:55 -0500 Subject: [PATCH 172/303] fix[datadog-installer]: Handle 'file not found' error in removeUnit function (#32066) Co-authored-by: arbll --- pkg/fleet/installer/packages/systemd.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/fleet/installer/packages/systemd.go b/pkg/fleet/installer/packages/systemd.go index 679331907f7fd..9b95672af1533 100644 --- a/pkg/fleet/installer/packages/systemd.go +++ b/pkg/fleet/installer/packages/systemd.go @@ -108,7 +108,11 @@ func removeUnit(ctx context.Context, unit string) (err error) { span, _ := tracer.StartSpanFromContext(ctx, "remove_unit") defer func() { span.Finish(tracer.WithError(err)) }() span.SetTag("unit", unit) - return os.Remove(path.Join(systemdPath, unit)) + err = os.Remove(path.Join(systemdPath, unit)) + if err != nil && !os.IsNotExist(err) { + return err + } + return nil } func systemdReload(ctx context.Context) (err error) { From a2310cfe86c7bda2031672e1268cb749d631ec40 Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Thu, 12 Dec 2024 18:30:10 +0100 Subject: [PATCH 173/303] Revert "Do not print Ansible logs (#31814)" (#32025) --- test/new-e2e/tests/installer/unix/all_packages_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/new-e2e/tests/installer/unix/all_packages_test.go b/test/new-e2e/tests/installer/unix/all_packages_test.go index 82f3d6bf44c12..f213a0fda8394 100644 --- a/test/new-e2e/tests/installer/unix/all_packages_test.go +++ b/test/new-e2e/tests/installer/unix/all_packages_test.go @@ -217,7 +217,7 @@ func (s *packageBaseSuite) RunInstallScript(params ...string) { playbookPath := s.writeAnsiblePlaybook(env, params...) // Run the playbook - s.Env().RemoteHost.MustExecute(fmt.Sprintf("%sansible-playbook %s > /dev/null 2> /dev/null", ansiblePrefix, playbookPath)) + s.Env().RemoteHost.MustExecute(fmt.Sprintf("%sansible-playbook -vvv %s", ansiblePrefix, playbookPath)) // touch install files for compatibility s.Env().RemoteHost.MustExecute("touch /tmp/datadog-installer-stdout.log") From 6437c7aafe95ec6bdaae74a8f6679f3059f7210c Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Thu, 12 Dec 2024 19:21:27 +0100 Subject: [PATCH 174/303] Remove importable module setting (#32106) --- modules.yml | 3 +-- tasks/libs/common/gomodules.py | 9 --------- tasks/modules.py | 2 +- tasks/unit_tests/modules_tests.py | 3 --- 4 files changed, 2 insertions(+), 15 deletions(-) diff --git a/modules.yml b/modules.yml index a84b452117db1..f9550b4b82943 100644 --- a/modules.yml +++ b/modules.yml @@ -144,8 +144,7 @@ modules: pkg/config/utils: used_by_otel: true pkg/errors: default - pkg/gohai: - importable: false + pkg/gohai: default pkg/linters/components/pkgconfigusage: independent: false should_tag: false diff --git a/tasks/libs/common/gomodules.py b/tasks/libs/common/gomodules.py index 8f33fa55ebb52..bd37387a010a2 100644 --- a/tasks/libs/common/gomodules.py +++ b/tasks/libs/common/gomodules.py @@ -101,7 +101,6 @@ class GoModule: test_targets: Directories to unit test. should_test_condition: When to execute tests, must be a enumerated field of `GoModule.CONDITIONS`. should_tag: Whether this module should be tagged or not. - importable: HACK: Workaround for modules that can be tested, but not imported (eg. gohai), because they define a main package A better solution would be to automatically detect if a module contains a main package, at the cost of spending some time parsing the module. independent: Specifies whether this modules is supposed to exist independently of the datadog-agent module. If True, a check will run to ensure this is true. lint_targets: Directories to lint. used_by_otel: Whether the module is an otel dependency or not. @@ -109,7 +108,6 @@ class GoModule: Usage: A module is defined within the modules.yml file containing the following fields by default (these can be omitted if the default value is used): > should_test_condition: always - > importable: true > independent: true > lint_targets: > - . @@ -140,11 +138,6 @@ class GoModule: should_test_condition: str = 'always' # Whether this module should be tagged or not should_tag: bool = True - # HACK: Workaround for modules that can be tested, but not imported (eg. gohai), because - # they define a main package - # A better solution would be to automatically detect if a module contains a main package, - # at the cost of spending some time parsing the module. - importable: bool = True # Whether this modules is supposed to exist independently of the datadog-agent module. If True, a check will run to ensure this is true. independent: bool = True # Directories to lint @@ -164,7 +157,6 @@ def from_dict(path: str, data: dict[str, object]) -> GoModule: lint_targets=data.get("lint_targets", default["lint_targets"]), should_test_condition=data.get("should_test_condition", default["should_test_condition"]), should_tag=data.get("should_tag", default["should_tag"]), - importable=data.get("importable", default["importable"]), independent=data.get("independent", default["independent"]), used_by_otel=data.get("used_by_otel", default["used_by_otel"]), legacy_go_mod_version=data.get("legacy_go_mod_version", default["legacy_go_mod_version"]), @@ -197,7 +189,6 @@ def to_dict(self, remove_defaults=True, remove_path=False) -> dict[str, object]: "lint_targets": self.lint_targets, "should_test_condition": self.should_test_condition, "should_tag": self.should_tag, - "importable": self.importable, "independent": self.independent, "used_by_otel": self.used_by_otel, "legacy_go_mod_version": self.legacy_go_mod_version, diff --git a/tasks/modules.py b/tasks/modules.py index 9d92b5324cd2a..252b40426f037 100644 --- a/tasks/modules.py +++ b/tasks/modules.py @@ -45,7 +45,7 @@ def generate_dummy_package(ctx, folder): try: import_paths = [] for mod in get_default_modules().values(): - if mod.path != "." and mod.should_test() and mod.importable: + if mod.path != "." and mod.should_test(): import_paths.append(mod.import_path) os.mkdir(folder) diff --git a/tasks/unit_tests/modules_tests.py b/tasks/unit_tests/modules_tests.py index 876f10b5c6ede..d2d41d726d175 100644 --- a/tasks/unit_tests/modules_tests.py +++ b/tasks/unit_tests/modules_tests.py @@ -133,7 +133,6 @@ def test_to_dict(self): lint_targets=['.'], should_test_condition='always', should_tag=True, - importable=True, independent=True, used_by_otel=True, ) @@ -159,7 +158,6 @@ def test_from_dict(self): 'lint_targets': ['.'], 'should_test_condition': 'always', 'should_tag': True, - 'importable': True, 'independent': True, 'used_by_otel': True, } @@ -185,7 +183,6 @@ def test_from_to(self): 'lint_targets': ['.'], 'should_test_condition': 'always', 'should_tag': True, - 'importable': True, 'independent': True, 'used_by_otel': True, 'legacy_go_mod_version': None, From d352e48579a3f659ebe7674759d9d3f48f7573d1 Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Thu, 12 Dec 2024 19:22:01 +0100 Subject: [PATCH 175/303] bump nikos to 1.12.8 (#32005) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index e3a858a713143..e4a9b163a0ed1 100644 --- a/go.mod +++ b/go.mod @@ -161,7 +161,7 @@ require ( github.com/DataDog/datadog-operator v0.7.1-0.20241024104907-734366f3c0d1 github.com/DataDog/ebpf-manager v0.7.4 github.com/DataDog/gopsutil v1.2.2 - github.com/DataDog/nikos v1.12.7 + github.com/DataDog/nikos v1.12.8 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0 github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 diff --git a/go.sum b/go.sum index d0f18b589c118..c6cb56a57dc59 100644 --- a/go.sum +++ b/go.sum @@ -158,8 +158,8 @@ github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYx github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= github.com/DataDog/netlink v1.0.1-0.20240223195320-c7a4f832a3d1 h1:HnvrdC79xJ+RPxTQdhDDwxblTNWhJUKeyTPsuyaOnxQ= github.com/DataDog/netlink v1.0.1-0.20240223195320-c7a4f832a3d1/go.mod h1:whJevzBpTrid75eZy99s3DqCmy05NfibNaF2Ol5Ox5A= -github.com/DataDog/nikos v1.12.7 h1:L04tM4ZUD9uqMgLwypQvYq9kq55WV7I09gfooH0G+gY= -github.com/DataDog/nikos v1.12.7/go.mod h1:wqQP+l+pb23yzUhWh+ejcxqlFHLh/pNAEAEU/YKHURU= +github.com/DataDog/nikos v1.12.8 h1:naQa3ve9Rv0lFIWC2H41zpqnhbBFLlYUIXu9jK7l84o= +github.com/DataDog/nikos v1.12.8/go.mod h1:BGSRgJ6w1ji26//oGecmYiOFMWFmMARIOu0Fr7CKvB8= github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0 h1:U+p1i7+upWb4qOIOOvjS/92iMUGlSzEC1tRxVo0Lg8Y= github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0/go.mod h1:dOjp1lg4jwYyIbpnqW+DoOV8qD+70C+lgpINFvUqasQ= github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0 h1:VS4NTqwczwezMVvI6A7xYR3ugPmMUJ4FcdFrsdnZI2I= From f483cc4c0dffec6f7bcd4824dc8df65c15957e27 Mon Sep 17 00:00:00 2001 From: Vickenty Fesunov Date: Thu, 12 Dec 2024 19:23:54 +0100 Subject: [PATCH 176/303] AMLII-2212 Publish FIPS JMX images for e2e tests (#32101) --- .gitlab/dev_container_deploy/e2e.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.gitlab/dev_container_deploy/e2e.yml b/.gitlab/dev_container_deploy/e2e.yml index f8c45e3fba8c2..d0d721559059c 100644 --- a/.gitlab/dev_container_deploy/e2e.yml +++ b/.gitlab/dev_container_deploy/e2e.yml @@ -34,6 +34,22 @@ qa_agent_jmx: IMG_SOURCES: ${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx-amd64,${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx-arm64,${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx-win1809-amd64,${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-jmx-winltsc2022-amd64 IMG_DESTINATIONS: agent:${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-jmx +qa_agent_fips_jmx: + extends: .docker_publish_job_definition + stage: dev_container_deploy + rules: + - !reference [.except_mergequeue] + - !reference [.except_disable_e2e_tests] + - when: on_success + needs: + - docker_build_fips_agent7_jmx + - docker_build_fips_agent7_arm64_jmx + - docker_build_fips_agent7_windows2022_core_jmx + variables: + IMG_REGISTRIES: agent-qa + IMG_SOURCES: ${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-fips-jmx-amd64,${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-fips-jmx-arm64,${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-fips-jmx-winltsc2022-servercore-amd64 + IMG_DESTINATIONS: agent:${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-fips-jmx + qa_agent_ot: extends: .docker_publish_job_definition stage: dev_container_deploy From 264f8240f2cdfea22fda7275edfbfbfceb51bfb6 Mon Sep 17 00:00:00 2001 From: Jack Phillips Date: Thu, 12 Dec 2024 20:11:55 -0500 Subject: [PATCH 177/303] User@domain.com Test (#31972) --- .../tests/windows/domain-test/domain_test.go | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/test/new-e2e/tests/windows/domain-test/domain_test.go b/test/new-e2e/tests/windows/domain-test/domain_test.go index 698d45fd0c138..134dc68d30683 100644 --- a/test/new-e2e/tests/windows/domain-test/domain_test.go +++ b/test/new-e2e/tests/windows/domain-test/domain_test.go @@ -7,21 +7,24 @@ package domain import ( "fmt" - awsHostWindows "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/host/windows" - "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows" - "github.com/DataDog/test-infra-definitions/components/activedirectory" "path/filepath" "reflect" "testing" "time" + "github.com/DataDog/test-infra-definitions/components/activedirectory" + + awsHostWindows "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/host/windows" + "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows" + + "github.com/stretchr/testify/assert" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" platformCommon "github.com/DataDog/datadog-agent/test/new-e2e/tests/agent-platform/common" windowsCommon "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows/common" windowsAgent "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows/common/agent" - "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows/install-test" - "github.com/stretchr/testify/assert" + installtest "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows/install-test" ) const ( @@ -32,8 +35,9 @@ const ( func TestInstallsOnDomainController(t *testing.T) { suites := []e2e.Suite[environments.WindowsHost]{ - &testInstallSuite{}, + &testBasicInstallSuite{}, &testUpgradeSuite{}, + &testInstallUserSyntaxSuite{}, } for _, suite := range suites { @@ -53,12 +57,12 @@ type testInstallSuite struct { windows.BaseAgentInstallerSuite[environments.WindowsHost] } -func (suite *testInstallSuite) TestGivenDomainUserCanInstallAgent() { +func (suite *testInstallSuite) testGivenDomainUserCanInstallAgent(username string) { host := suite.Env().RemoteHost _, err := suite.InstallAgent(host, windowsAgent.WithPackage(suite.AgentPackage), - windowsAgent.WithAgentUser(fmt.Sprintf("%s\\%s", TestDomain, TestUser)), + windowsAgent.WithAgentUser(username), windowsAgent.WithAgentUserPassword(fmt.Sprintf("\"%s\"", TestPassword)), windowsAgent.WithValidAPIKey(), windowsAgent.WithFakeIntake(suite.Env().FakeIntake), @@ -81,6 +85,22 @@ func (suite *testInstallSuite) TestGivenDomainUserCanInstallAgent() { }, 5*time.Minute, 10*time.Second) } +type testBasicInstallSuite struct { + testInstallSuite +} + +func (suite *testBasicInstallSuite) TestGivenDomainUserCanInstallAgent() { + suite.testGivenDomainUserCanInstallAgent(fmt.Sprintf("%s\\%s", TestDomain, TestUser)) +} + +type testInstallUserSyntaxSuite struct { + testInstallSuite +} + +func (suite *testInstallUserSyntaxSuite) TestGivenDomainUserCanInstallAgent() { + suite.testGivenDomainUserCanInstallAgent(fmt.Sprintf("%s@%s", TestUser, TestDomain)) +} + type testUpgradeSuite struct { windows.BaseAgentInstallerSuite[environments.WindowsHost] } From 9eccfa65dfc8b38ea087cf9eba853da76c59806a Mon Sep 17 00:00:00 2001 From: Cedric Lamoriniere Date: Fri, 13 Dec 2024 08:29:23 +0100 Subject: [PATCH 178/303] Fix TestPodParser_Parse flakiness (#32116) --- .../util/kubernetes_resource_parsers/pod_test.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod_test.go b/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod_test.go index 5f604e3568220..d02d5177f5a74 100644 --- a/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod_test.go +++ b/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/pod_test.go @@ -8,9 +8,10 @@ package kubernetesresourceparsers import ( - "reflect" "testing" + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" @@ -125,6 +126,11 @@ func TestPodParser_Parse(t *testing.T) { QOSClass: "Guaranteed", } - assert.True(t, reflect.DeepEqual(expected, parsed), - "Expected: %v, Actual: %v", expected, parsed) + opt := cmpopts.SortSlices(func(a, b string) bool { + return a < b + }) + assert.True(t, + cmp.Equal(expected, parsed, opt), + cmp.Diff(expected, parsed, opt), + ) } From 7bb71f7d8f83859af3bf72ce86d14fb40b9bd80b Mon Sep 17 00:00:00 2001 From: Steven Yuen Date: Fri, 13 Dec 2024 02:39:36 -0500 Subject: [PATCH 179/303] Update `gstatus` binary shipped with agent (#32031) --- omnibus/config/software/gstatus.rb | 4 ++-- .../notes/Update-gstatus-binary-bbd8cd907bd974c3.yaml | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 releasenotes/notes/Update-gstatus-binary-bbd8cd907bd974c3.yaml diff --git a/omnibus/config/software/gstatus.rb b/omnibus/config/software/gstatus.rb index 8eb469763dc8c..fc96d2ba84044 100644 --- a/omnibus/config/software/gstatus.rb +++ b/omnibus/config/software/gstatus.rb @@ -16,10 +16,10 @@ # name "gstatus" -default_version "1.0.5" +default_version "1.0.9" source :url => "https://github.com/gluster/gstatus/releases/download/v#{version}/gstatus", - :sha256 => "485b79c42d5623e2593374be3b8d8cde8a00f080ab2fe417c84a2dc3d2a49719", + :sha256 => "4731a515ce1b75c7d9f378588be5be369ca0130fb51802de853527310724b0f8", :target_filename => "gstatus" diff --git a/releasenotes/notes/Update-gstatus-binary-bbd8cd907bd974c3.yaml b/releasenotes/notes/Update-gstatus-binary-bbd8cd907bd974c3.yaml new file mode 100644 index 0000000000000..8c62e4b4b2c87 --- /dev/null +++ b/releasenotes/notes/Update-gstatus-binary-bbd8cd907bd974c3.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + Upgrade `gstatus` binary to version 1.0.9 to work with newer version of GlusterFS. From 8a25c9c36e8bca694ca2cb67a769a6edf180a7ad Mon Sep 17 00:00:00 2001 From: Alexandre Yang Date: Fri, 13 Dec 2024 11:00:26 +0100 Subject: [PATCH 180/303] [HA Agent] Add agent_group tag to host tags (#31999) --- comp/metadata/host/hostimpl/hosttags/tags.go | 4 ++++ .../host/hostimpl/hosttags/tags_test.go | 15 +++++++++++++++ pkg/aggregator/aggregator.go | 3 --- pkg/aggregator/aggregator_test.go | 18 ++++-------------- test/new-e2e/tests/ha-agent/haagent_test.go | 17 +---------------- 5 files changed, 24 insertions(+), 33 deletions(-) diff --git a/comp/metadata/host/hostimpl/hosttags/tags.go b/comp/metadata/host/hostimpl/hosttags/tags.go index 606a874bf7fd3..01cfff7c0810f 100644 --- a/comp/metadata/host/hostimpl/hosttags/tags.go +++ b/comp/metadata/host/hostimpl/hosttags/tags.go @@ -133,6 +133,10 @@ func Get(ctx context.Context, cached bool, conf model.Reader) *Tags { hostTags = appendToHostTags(hostTags, clusterNameTags) } + if conf.GetBool("ha_agent.enabled") { + hostTags = appendToHostTags(hostTags, []string{"agent_group:" + conf.GetString("ha_agent.group")}) + } + gceTags := []string{} providers := getProvidersDefinitionsFunc(conf) for { diff --git a/comp/metadata/host/hostimpl/hosttags/tags_test.go b/comp/metadata/host/hostimpl/hosttags/tags_test.go index 64460410ac143..274250a432e46 100644 --- a/comp/metadata/host/hostimpl/hosttags/tags_test.go +++ b/comp/metadata/host/hostimpl/hosttags/tags_test.go @@ -137,3 +137,18 @@ func TestHostTagsCache(t *testing.T) { assert.Equal(t, []string{"foo1:value1"}, hostTags.System) assert.Equal(t, 2, nbCall) } + +func TestHaAgentTags(t *testing.T) { + mockConfig, ctx := setupTest(t) + + hostTags := Get(ctx, false, mockConfig) + assert.NotNil(t, hostTags.System) + assert.Equal(t, []string{}, hostTags.System) + + mockConfig.SetWithoutSource("ha_agent.enabled", true) + mockConfig.SetWithoutSource("ha_agent.group", "my-group") + + hostTags = Get(ctx, false, mockConfig) + assert.NotNil(t, hostTags.System) + assert.Equal(t, []string{"agent_group:my-group"}, hostTags.System) +} diff --git a/pkg/aggregator/aggregator.go b/pkg/aggregator/aggregator.go index 653a031194819..0423f9871c65d 100644 --- a/pkg/aggregator/aggregator.go +++ b/pkg/aggregator/aggregator.go @@ -877,9 +877,6 @@ func (agg *BufferedAggregator) tags(withVersion bool) []string { tags = append(tags, "package_version:"+version.AgentPackageVersion) } } - if agg.haAgent.Enabled() { - tags = append(tags, "agent_group:"+agg.haAgent.GetGroup()) - } // nil to empty string // This is expected by other components/tests if tags == nil { diff --git a/pkg/aggregator/aggregator_test.go b/pkg/aggregator/aggregator_test.go index 5a0676cbcb507..2b447281eea77 100644 --- a/pkg/aggregator/aggregator_test.go +++ b/pkg/aggregator/aggregator_test.go @@ -294,7 +294,7 @@ func TestDefaultSeries(t *testing.T) { require.Equal(t, 1, len(m)) require.Equal(t, "datadog.agent.up", m[0].CheckName) require.Equal(t, servicecheck.ServiceCheckOK, m[0].Status) - require.Equal(t, []string{"agent_group:group01"}, m[0].Tags) + require.Equal(t, []string{}, m[0].Tags) require.Equal(t, agg.hostname, m[0].Host) return true @@ -304,14 +304,14 @@ func TestDefaultSeries(t *testing.T) { expectedSeries := metrics.Series{&metrics.Serie{ Name: fmt.Sprintf("datadog.%s.running", flavor.GetFlavor()), Points: []metrics.Point{{Value: 1, Ts: float64(start.Unix())}}, - Tags: tagset.CompositeTagsFromSlice([]string{"version:" + version.AgentVersion, "agent_group:group01"}), + Tags: tagset.CompositeTagsFromSlice([]string{"version:" + version.AgentVersion}), Host: agg.hostname, MType: metrics.APIGaugeType, SourceTypeName: "System", }, &metrics.Serie{ Name: fmt.Sprintf("datadog.%s.ha_agent.running", agg.agentName), Points: []metrics.Point{{Value: float64(1), Ts: float64(start.Unix())}}, - Tags: tagset.CompositeTagsFromSlice([]string{"agent_group:group01", "agent_state:standby"}), + Tags: tagset.CompositeTagsFromSlice([]string{"agent_state:standby"}), Host: agg.hostname, MType: metrics.APIGaugeType, SourceTypeName: "System", @@ -319,7 +319,7 @@ func TestDefaultSeries(t *testing.T) { Name: fmt.Sprintf("n_o_i_n_d_e_x.datadog.%s.payload.dropped", flavor.GetFlavor()), Points: []metrics.Point{{Value: 0, Ts: float64(start.Unix())}}, Host: agg.hostname, - Tags: tagset.CompositeTagsFromSlice([]string{"agent_group:group01"}), + Tags: tagset.CompositeTagsFromSlice([]string{}), MType: metrics.APIGaugeType, SourceTypeName: "System", NoIndex: true, @@ -643,16 +643,6 @@ func TestTags(t *testing.T) { withVersion: true, want: []string{"container_name:agent", "version:" + version.AgentVersion, "kube_cluster_name:foo"}, }, - { - name: "tags disabled, without version, ha agent enabled", - hostname: "hostname", - tlmContainerTagsEnabled: false, - agentTags: func(types.TagCardinality) ([]string, error) { return nil, errors.New("disabled") }, - globalTags: func(types.TagCardinality) ([]string, error) { return nil, errors.New("disabled") }, - withVersion: false, - haAgentEnabled: true, - want: []string{"agent_group:group01"}, - }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/test/new-e2e/tests/ha-agent/haagent_test.go b/test/new-e2e/tests/ha-agent/haagent_test.go index 2dc700bec2be8..cc173d2da7bae 100644 --- a/test/new-e2e/tests/ha-agent/haagent_test.go +++ b/test/new-e2e/tests/ha-agent/haagent_test.go @@ -44,21 +44,6 @@ log_level: debug func (s *haAgentTestSuite) TestHaAgentRunningMetrics() { fakeClient := s.Env().FakeIntake.Client() - s.EventuallyWithT(func(c *assert.CollectT) { - s.T().Log("try assert datadog.agent.running metric") - metrics, err := fakeClient.FilterMetrics("datadog.agent.running") - require.NoError(c, err) - assert.NotEmpty(c, metrics) - for _, metric := range metrics { - s.T().Logf(" datadog.agent.running metric tags: %+v", metric.Tags) - } - - tags := []string{"agent_group:test-group01"} - metrics, err = fakeClient.FilterMetrics("datadog.agent.running", fakeintakeclient.WithTags[*aggregator.MetricSeries](tags)) - require.NoError(c, err) - assert.NotEmpty(c, metrics) - }, 5*time.Minute, 3*time.Second) - s.EventuallyWithT(func(c *assert.CollectT) { s.T().Log("try assert datadog.agent.ha_agent.running metric") metrics, err := fakeClient.FilterMetrics("datadog.agent.ha_agent.running") @@ -68,7 +53,7 @@ func (s *haAgentTestSuite) TestHaAgentRunningMetrics() { s.T().Logf(" datadog.agent.ha_agent.running metric tags: %+v", metric.Tags) } - tags := []string{"agent_group:test-group01", "agent_state:unknown"} + tags := []string{"agent_state:unknown"} metrics, err = fakeClient.FilterMetrics("datadog.agent.ha_agent.running", fakeintakeclient.WithTags[*aggregator.MetricSeries](tags)) require.NoError(c, err) assert.NotEmpty(c, metrics) From 81ca6f9b6f767da2ac185e00beeca7caa28580e2 Mon Sep 17 00:00:00 2001 From: Gabriel Dos Santos <91925154+gabedos@users.noreply.github.com> Date: Fri, 13 Dec 2024 11:00:52 +0100 Subject: [PATCH 181/303] chore: Add config comp for static tags (#32085) --- comp/core/tagger/collectors/workloadmeta_main.go | 2 +- comp/dogstatsd/server/server.go | 2 +- comp/otelcol/otlp/config.go | 5 +++-- pkg/util/static_tags.go | 13 ++++++------- pkg/util/static_tags_test.go | 10 +++++----- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/comp/core/tagger/collectors/workloadmeta_main.go b/comp/core/tagger/collectors/workloadmeta_main.go index 3c4150c9f3efb..15fec7fe4ce5b 100644 --- a/comp/core/tagger/collectors/workloadmeta_main.go +++ b/comp/core/tagger/collectors/workloadmeta_main.go @@ -96,7 +96,7 @@ func (c *WorkloadMetaCollector) Run(ctx context.Context, datadogConfig config.Co } func (c *WorkloadMetaCollector) collectStaticGlobalTags(ctx context.Context, datadogConfig config.Component) { - c.staticTags = util.GetStaticTags(ctx) + c.staticTags = util.GetStaticTags(ctx, datadogConfig) if _, exists := c.staticTags[clusterTagNamePrefix]; flavor.GetFlavor() == flavor.ClusterAgent && !exists { // If we are running the cluster agent, we want to set the kube_cluster_name tag as a global tag if we are able // to read it, for the instances where we are running in an environment where hostname cannot be detected. diff --git a/comp/dogstatsd/server/server.go b/comp/dogstatsd/server/server.go index 662d5b2092a8d..a879dac31f828 100644 --- a/comp/dogstatsd/server/server.go +++ b/comp/dogstatsd/server/server.go @@ -236,7 +236,7 @@ func newServerCompat(cfg model.Reader, log log.Component, capture replay.Compone // if the server is running in a context where static tags are required, add those // to extraTags. - if staticTags := util.GetStaticTagsSlice(context.TODO()); staticTags != nil { + if staticTags := util.GetStaticTagsSlice(context.TODO(), cfg); staticTags != nil { extraTags = append(extraTags, staticTags...) } util.SortUniqInPlace(extraTags) diff --git a/comp/otelcol/otlp/config.go b/comp/otelcol/otlp/config.go index 82448dbf45a59..ce56626e2f3e8 100644 --- a/comp/otelcol/otlp/config.go +++ b/comp/otelcol/otlp/config.go @@ -14,12 +14,13 @@ import ( "go.uber.org/multierr" + "github.com/go-viper/mapstructure/v2" + "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/exporter/serializerexporter" "github.com/DataDog/datadog-agent/comp/otelcol/otlp/configcheck" coreconfig "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/util" - "github.com/go-viper/mapstructure/v2" ) func portToUint(v int) (port uint, err error) { @@ -51,7 +52,7 @@ func FromAgentConfig(cfg config.Reader) (PipelineConfig, error) { metricsConfigMap["apm_stats_receiver_addr"] = fmt.Sprintf("http://localhost:%s/v0.6/stats", coreconfig.Datadog().GetString("apm_config.receiver_port")) } - tags := strings.Join(util.GetStaticTagsSlice(context.TODO()), ",") + tags := strings.Join(util.GetStaticTagsSlice(context.TODO(), cfg), ",") if tags != "" { metricsConfigMap["tags"] = tags } diff --git a/pkg/util/static_tags.go b/pkg/util/static_tags.go index f6173daa9e450..84589ed7e747c 100644 --- a/pkg/util/static_tags.go +++ b/pkg/util/static_tags.go @@ -9,9 +9,8 @@ import ( "context" "strings" + "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/config/env" - "github.com/DataDog/datadog-agent/pkg/config/model" - pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" configUtils "github.com/DataDog/datadog-agent/pkg/config/utils" "github.com/DataDog/datadog-agent/pkg/util/fargate" "github.com/DataDog/datadog-agent/pkg/util/flavor" @@ -24,7 +23,7 @@ import ( // included in host tags. In environments with no host metadata (such as where // the hostname is empty), tags that would otherwise be included in host // metadata are generated by this function. -func GetStaticTagsSlice(ctx context.Context) []string { +func GetStaticTagsSlice(ctx context.Context, datadogConfig config.Reader) []string { // fargate (ECS or EKS) does not have host tags, so we need to // add static tags to each container manually @@ -35,7 +34,7 @@ func GetStaticTagsSlice(ctx context.Context) []string { tags := []string{} // DD_TAGS / DD_EXTRA_TAGS - tags = append(tags, configUtils.GetConfiguredTags(pkgconfigsetup.Datadog(), false)...) + tags = append(tags, configUtils.GetConfiguredTags(datadogConfig, false)...) // EKS Fargate specific tags if env.IsFeaturePresent(env.EKSFargate) { @@ -74,8 +73,8 @@ func GetStaticTagsSlice(ctx context.Context) []string { // GetStaticTags is similar to GetStaticTagsSlice, but returning a map[string][]string containing // : pairs for tags. Tags not matching this pattern are omitted. -func GetStaticTags(ctx context.Context) map[string][]string { - tags := GetStaticTagsSlice(ctx) +func GetStaticTags(ctx context.Context, datadogConfig config.Component) map[string][]string { + tags := GetStaticTagsSlice(ctx, datadogConfig) if tags == nil { return nil } @@ -85,7 +84,7 @@ func GetStaticTags(ctx context.Context) map[string][]string { // GetGlobalEnvTags is similar to GetStaticTags, but returning a map[string][]string containing // : pairs for all global environment tags on the cluster agent. This includes: // DD_TAGS, DD_EXTRA_TAGS, DD_CLUSTER_CHECKS_EXTRA_TAGS, and DD_ORCHESTRATOR_EXPLORER_EXTRA_TAGS -func GetGlobalEnvTags(config model.Reader) map[string][]string { +func GetGlobalEnvTags(config config.Reader) map[string][]string { if flavor.GetFlavor() != flavor.ClusterAgent { return nil } diff --git a/pkg/util/static_tags_test.go b/pkg/util/static_tags_test.go index 013e79689fe94..e8fa2b33b004e 100644 --- a/pkg/util/static_tags_test.go +++ b/pkg/util/static_tags_test.go @@ -26,7 +26,7 @@ func TestStaticTags(t *testing.T) { t.Run("just tags", func(t *testing.T) { mockConfig.SetWithoutSource("tags", []string{"some:tag", "another:tag", "nocolon"}) defer mockConfig.SetWithoutSource("tags", []string{}) - staticTags := GetStaticTags(context.Background()) + staticTags := GetStaticTags(context.Background(), mockConfig) assert.Equal(t, map[string][]string{ "some": {"tag"}, "another": {"tag"}, @@ -39,7 +39,7 @@ func TestStaticTags(t *testing.T) { mockConfig.SetWithoutSource("extra_tags", []string{"extra:tag", "missingcolon"}) defer mockConfig.SetWithoutSource("tags", []string{}) defer mockConfig.SetWithoutSource("extra_tags", []string{}) - staticTags := GetStaticTags(context.Background()) + staticTags := GetStaticTags(context.Background(), mockConfig) assert.Equal(t, map[string][]string{ "some": {"tag"}, "extra": {"tag"}, @@ -50,7 +50,7 @@ func TestStaticTags(t *testing.T) { t.Run("cluster name already set", func(t *testing.T) { mockConfig.SetWithoutSource("tags", []string{"kube_cluster_name:foo"}) defer mockConfig.SetWithoutSource("tags", []string{}) - staticTags := GetStaticTags(context.Background()) + staticTags := GetStaticTags(context.Background(), mockConfig) assert.Equal(t, map[string][]string{ "eks_fargate_node": {"eksnode"}, "kube_cluster_name": {"foo"}, @@ -68,7 +68,7 @@ func TestStaticTagsSlice(t *testing.T) { t.Run("just tags", func(t *testing.T) { mockConfig.SetWithoutSource("tags", []string{"some:tag", "another:tag", "nocolon"}) defer mockConfig.SetWithoutSource("tags", []string{}) - staticTags := GetStaticTagsSlice(context.Background()) + staticTags := GetStaticTagsSlice(context.Background(), mockConfig) assert.ElementsMatch(t, []string{ "nocolon", "some:tag", @@ -82,7 +82,7 @@ func TestStaticTagsSlice(t *testing.T) { mockConfig.SetWithoutSource("extra_tags", []string{"extra:tag", "missingcolon"}) defer mockConfig.SetWithoutSource("tags", []string{}) defer mockConfig.SetWithoutSource("extra_tags", []string{}) - staticTags := GetStaticTagsSlice(context.Background()) + staticTags := GetStaticTagsSlice(context.Background(), mockConfig) assert.ElementsMatch(t, []string{ "nocolon", "missingcolon", From 52145594cba74888d6f1bcf00bc2d4edbd1d9fbb Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Fri, 13 Dec 2024 11:14:35 +0100 Subject: [PATCH 182/303] [ASCII-2590] Retry network timeout errors on fakeintake (#32110) --- test/fakeintake/client/client.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/fakeintake/client/client.go b/test/fakeintake/client/client.go index 6890eb51cc6a8..83a767596e689 100644 --- a/test/fakeintake/client/client.go +++ b/test/fakeintake/client/client.go @@ -775,9 +775,6 @@ func (c *Client) get(route string) ([]byte, error) { var body []byte err := backoff.Retry(func() error { tmpResp, err := http.Get(fmt.Sprintf("%s/%s", c.fakeIntakeURL, route)) - if err, ok := err.(net.Error); ok && err.Timeout() { - panic(fmt.Sprintf("fakeintake call timed out: %v", err)) - } if err != nil { return err } @@ -812,6 +809,9 @@ func (c *Client) get(route string) ([]byte, error) { body, err = io.ReadAll(tmpResp.Body) return err }, backoff.WithMaxRetries(backoff.NewConstantBackOff(5*time.Second), 4)) + if err, ok := err.(net.Error); ok && err.Timeout() { + panic(fmt.Sprintf("fakeintake call timed out: %v", err)) + } return body, err } From 07f90c07953a0add5adbea124ad484983b8ec509 Mon Sep 17 00:00:00 2001 From: Baptiste Foy Date: Fri, 13 Dec 2024 11:44:48 +0100 Subject: [PATCH 183/303] fix(installer): Fix reporting of error code (#32034) --- cmd/installer/main.go | 4 +- pkg/fleet/daemon/daemon.go | 19 +++++--- pkg/fleet/installer/errors/errors.go | 50 +++++++-------------- pkg/fleet/installer/errors/errors_test.go | 53 ++++++++++++++--------- pkg/fleet/internal/exec/installer_exec.go | 2 +- 5 files changed, 62 insertions(+), 66 deletions(-) diff --git a/cmd/installer/main.go b/cmd/installer/main.go index e7d94bb6d70fe..bf05b5b6a0e08 100644 --- a/cmd/installer/main.go +++ b/cmd/installer/main.go @@ -29,9 +29,9 @@ func runCmd(cmd *cobra.Command) int { err := cmd.Execute() if err != nil { if rootCauseErr := dig.RootCause(err); rootCauseErr != err { - fmt.Fprintln(cmd.ErrOrStderr(), installerErrors.FromErr(rootCauseErr).ToJSON()) + fmt.Fprintln(cmd.ErrOrStderr(), installerErrors.ToJSON(rootCauseErr)) } else { - fmt.Fprintln(cmd.ErrOrStderr(), installerErrors.FromErr(err).ToJSON()) + fmt.Fprintln(cmd.ErrOrStderr(), installerErrors.ToJSON(err)) } return -1 } diff --git a/pkg/fleet/daemon/daemon.go b/pkg/fleet/daemon/daemon.go index 192587f641163..7c5d7401a1388 100644 --- a/pkg/fleet/daemon/daemon.go +++ b/pkg/fleet/daemon/daemon.go @@ -494,7 +494,10 @@ func (d *daemonImpl) handleRemoteAPIRequest(request remoteAPIRequest) (err error } experimentPackage, ok := d.catalog.getPackage(request.Package, params.Version, runtime.GOARCH, runtime.GOOS) if !ok { - return fmt.Errorf("could not get package %s, %s for %s, %s", request.Package, params.Version, runtime.GOARCH, runtime.GOOS) + return installerErrors.Wrap( + installerErrors.ErrPackageNotFound, + fmt.Errorf("could not get package %s, %s for %s, %s", request.Package, params.Version, runtime.GOARCH, runtime.GOOS), + ) } log.Infof("Installer: Received remote request %s to start experiment for package %s version %s", request.ID, request.Package, request.Params) if request.Package == "datadog-installer" { @@ -535,10 +538,11 @@ var requestStateKey requestKey // requestState represents the state of a task. type requestState struct { - Package string - ID string - State pbgo.TaskState - Err *installerErrors.InstallerError + Package string + ID string + State pbgo.TaskState + Err error + ErrorCode installerErrors.InstallerErrorCode } func newRequestContext(request remoteAPIRequest) (ddtrace.Span, context.Context) { @@ -572,7 +576,8 @@ func setRequestDone(ctx context.Context, err error) { state.State = pbgo.TaskState_DONE if err != nil { state.State = pbgo.TaskState_ERROR - state.Err = installerErrors.FromErr(err) + state.Err = err + state.ErrorCode = installerErrors.GetCode(err) } } @@ -633,7 +638,7 @@ func (d *daemonImpl) refreshState(ctx context.Context) { var taskErr *pbgo.TaskError if requestState.Err != nil { taskErr = &pbgo.TaskError{ - Code: uint64(requestState.Err.Code()), + Code: uint64(requestState.ErrorCode), Message: requestState.Err.Error(), } } diff --git a/pkg/fleet/installer/errors/errors.go b/pkg/fleet/installer/errors/errors.go index 736c609af033c..e8679359d3909 100644 --- a/pkg/fleet/installer/errors/errors.go +++ b/pkg/fleet/installer/errors/errors.go @@ -42,27 +42,17 @@ func (e InstallerError) Error() string { return e.err.Error() } -// Unwrap returns the wrapped error. -func (e InstallerError) Unwrap() error { - return e.err -} - // Is implements the Is method of the errors.Is interface. func (e InstallerError) Is(target error) bool { _, ok := target.(*InstallerError) return ok } -// Code returns the error code of the installer error. -func (e InstallerError) Code() InstallerErrorCode { - return e.code -} - // Wrap wraps the given error with an installer error. // If the given error is already an installer error, it is not wrapped and // left as it is. Only the deepest InstallerError remains. func Wrap(errCode InstallerErrorCode, err error) error { - if FromErr(err).code != errUnknown { + if errors.Is(err, &InstallerError{}) { return err } return &InstallerError{ @@ -71,50 +61,40 @@ func Wrap(errCode InstallerErrorCode, err error) error { } } -// FromErr returns a new InstallerError from the given error. -// Unwraps the error until it finds an InstallerError and return unknown error code if not found. -func FromErr(err error) *InstallerError { - if err == nil { - return nil +// GetCode returns the installer error code of the given error. +func GetCode(err error) InstallerErrorCode { + code := errUnknown + e := &InstallerError{} + if ok := errors.As(err, &e); ok { + code = e.code } - e, ok := err.(*InstallerError) - if !ok { - unwrappedErr := errors.Unwrap(err) - if unwrappedErr == nil { - return &InstallerError{ - err: err, - code: errUnknown, - } - } - return FromErr(unwrappedErr) - } - return e + return code } // ToJSON returns the error as a JSON string. -func (e InstallerError) ToJSON() string { +func ToJSON(err error) string { tmp := installerErrorJSON{ - Error: e.err.Error(), - Code: int(e.code), + Error: err.Error(), + Code: int(GetCode(err)), } jsonErr, err := json.Marshal(tmp) if err != nil { - return e.err.Error() + return err.Error() } return string(jsonErr) } // FromJSON returns an InstallerError from a JSON string. -func FromJSON(errStr string) InstallerError { +func FromJSON(errStr string) *InstallerError { var jsonError installerErrorJSON err := json.Unmarshal([]byte(errStr), &jsonError) if err != nil { - return InstallerError{ + return &InstallerError{ err: errors.New(errStr), code: errUnknown, } } - return InstallerError{ + return &InstallerError{ err: errors.New(jsonError.Error), code: InstallerErrorCode(jsonError.Code), } diff --git a/pkg/fleet/installer/errors/errors_test.go b/pkg/fleet/installer/errors/errors_test.go index 5115faaaf8a26..4cb8be7eb4a0e 100644 --- a/pkg/fleet/installer/errors/errors_test.go +++ b/pkg/fleet/installer/errors/errors_test.go @@ -6,40 +6,34 @@ package errors import ( + "errors" "fmt" "testing" "github.com/stretchr/testify/assert" ) -func TestFromErr(t *testing.T) { +func TestGetCode(t *testing.T) { + // Nil case + assert.Equal(t, GetCode(nil), errUnknown) + + // Simple case var err error = &InstallerError{ err: fmt.Errorf("test: test"), code: ErrDownloadFailed, } - taskErr := FromErr(err) - assert.Equal(t, taskErr, &InstallerError{ - err: fmt.Errorf("test: test"), - code: ErrDownloadFailed, - }) + assert.Equal(t, GetCode(err), ErrDownloadFailed) - assert.Nil(t, FromErr(nil)) -} - -func TestFromErrWithWrap(t *testing.T) { - err := fmt.Errorf("test: %w", &InstallerError{ - err: fmt.Errorf("test: test"), - code: ErrDownloadFailed, - }) - taskErr := FromErr(err) - assert.Equal(t, taskErr, &InstallerError{ - err: fmt.Errorf("test: test"), + // Wrap + err = fmt.Errorf("test1: %w", &InstallerError{ + err: fmt.Errorf("test2: test3"), code: ErrDownloadFailed, }) + assert.Equal(t, GetCode(err), ErrDownloadFailed) - taskErr2 := fmt.Errorf("Wrap 2: %w", fmt.Errorf("Wrap 1: %w", taskErr)) - assert.Equal(t, FromErr(taskErr2).Code(), ErrDownloadFailed) - assert.Nil(t, FromErr(nil)) + // Multiple wraps + err = fmt.Errorf("Wrap 2: %w", fmt.Errorf("Wrap 1: %w", err)) + assert.Equal(t, GetCode(err), ErrDownloadFailed) } func TestWrap(t *testing.T) { @@ -59,5 +53,22 @@ func TestWrap(t *testing.T) { }) taskErr3 := Wrap(ErrFilesystemIssue, fmt.Errorf("Wrap 2: %w", fmt.Errorf("Wrap 1: %w", taskErr2))) - assert.Equal(t, FromErr(taskErr3).Code(), ErrDownloadFailed) + unwrapped := &InstallerError{} + assert.True(t, errors.As(taskErr3, &unwrapped)) + assert.Equal(t, unwrapped.code, ErrDownloadFailed) +} + +func TestToJSON(t *testing.T) { + err := fmt.Errorf("test: %w", &InstallerError{ + err: fmt.Errorf("test2: test3"), + code: ErrDownloadFailed, + }) + assert.Equal(t, ToJSON(err), `{"error":"test: test2: test3","code":1}`) +} + +func TestFromJSON(t *testing.T) { + json := `{"error":"test: test2: test3","code":1}` + err := FromJSON(json) + assert.Equal(t, err.Error(), "test: test2: test3") + assert.Equal(t, GetCode(err), ErrDownloadFailed) } diff --git a/pkg/fleet/internal/exec/installer_exec.go b/pkg/fleet/internal/exec/installer_exec.go index 74b7a49beb897..10da440869079 100644 --- a/pkg/fleet/internal/exec/installer_exec.go +++ b/pkg/fleet/internal/exec/installer_exec.go @@ -252,5 +252,5 @@ func (iCmd *installerCmd) Run() error { } installerError := installerErrors.FromJSON(strings.TrimSpace(errBuf.String())) - return fmt.Errorf("run failed: %v \n%s", installerError, err.Error()) + return fmt.Errorf("run failed: %w \n%s", installerError, err.Error()) } From 435b57ce24b425340a0c185e161ee4bd6ea5f1e9 Mon Sep 17 00:00:00 2001 From: maxime mouial Date: Fri, 13 Dec 2024 12:37:17 +0100 Subject: [PATCH 184/303] Remove usage of SetKnown with '.*' notation (#32003) --- pkg/config/setup/apm.go | 2 +- pkg/config/setup/config.go | 23 ++++++++---------- pkg/config/setup/config_test.go | 42 ++++++++++++++++++++++++++------- 3 files changed, 44 insertions(+), 23 deletions(-) diff --git a/pkg/config/setup/apm.go b/pkg/config/setup/apm.go index f792f9c57dd81..a8558fb1d894e 100644 --- a/pkg/config/setup/apm.go +++ b/pkg/config/setup/apm.go @@ -56,7 +56,7 @@ func setupAPM(config pkgconfigmodel.Setup) { config.SetKnown("apm_config.service_writer.queue_size") config.SetKnown("apm_config.stats_writer.connection_limit") config.SetKnown("apm_config.stats_writer.queue_size") - config.SetKnown("apm_config.analyzed_rate_by_service.*") + config.SetKnown("apm_config.analyzed_rate_by_service") config.SetKnown("apm_config.bucket_size_seconds") config.SetKnown("apm_config.watchdog_check_delay") config.SetKnown("apm_config.sync_flushing") diff --git a/pkg/config/setup/config.go b/pkg/config/setup/config.go index 66942a316486e..24f8d81503459 100644 --- a/pkg/config/setup/config.go +++ b/pkg/config/setup/config.go @@ -868,8 +868,7 @@ func InitConfig(config pkgconfigmodel.Setup) { // DEPRECATED in favor of `orchestrator_explorer.orchestrator_dd_url` setting. If both are set `orchestrator_explorer.orchestrator_dd_url` will take precedence. config.BindEnv("process_config.orchestrator_dd_url", "DD_PROCESS_CONFIG_ORCHESTRATOR_DD_URL", "DD_PROCESS_AGENT_ORCHESTRATOR_DD_URL") // DEPRECATED in favor of `orchestrator_explorer.orchestrator_additional_endpoints` setting. If both are set `orchestrator_explorer.orchestrator_additional_endpoints` will take precedence. - config.SetKnown("process_config.orchestrator_additional_endpoints.*") - config.SetKnown("orchestrator_explorer.orchestrator_additional_endpoints.*") + config.SetKnown("process_config.orchestrator_additional_endpoints") config.BindEnvAndSetDefault("orchestrator_explorer.extra_tags", []string{}) // Network @@ -1283,7 +1282,6 @@ func telemetry(config pkgconfigmodel.Setup) { // Agent Telemetry config.BindEnvAndSetDefault("agent_telemetry.enabled", true) - config.SetKnown("agent_telemetry.additional_endpoints.*") bindEnvAndSetLogsConfigKeys(config, "agent_telemetry.") } @@ -1819,19 +1817,18 @@ func findUnknownKeys(config pkgconfigmodel.Config) []string { var unknownKeys []string knownKeys := config.GetKnownKeysLowercased() loadedKeys := config.AllKeysLowercased() - for _, key := range loadedKeys { - if _, found := knownKeys[key]; !found { - // Check if any subkey terminated with a '.*' wildcard is marked as known - // e.g.: apm_config.* would match all sub-keys of apm_config - splitPath := strings.Split(key, ".") - for j := range splitPath { - subKey := strings.Join(splitPath[:j+1], ".") + ".*" - if _, found = knownKeys[subKey]; found { + for _, loadedKey := range loadedKeys { + if _, found := knownKeys[loadedKey]; !found { + nestedValue := false + // If a value is within a known key it is considered known. + for knownKey := range knownKeys { + if strings.HasPrefix(loadedKey, knownKey+".") { + nestedValue = true break } } - if !found { - unknownKeys = append(unknownKeys, key) + if !nestedValue { + unknownKeys = append(unknownKeys, loadedKey) } } } diff --git a/pkg/config/setup/config_test.go b/pkg/config/setup/config_test.go index c9713b2fccd9c..a02ffa8b6af72 100644 --- a/pkg/config/setup/config_test.go +++ b/pkg/config/setup/config_test.go @@ -6,11 +6,11 @@ package setup import ( - "bytes" "fmt" "os" "path" "path/filepath" + "slices" "strings" "testing" "time" @@ -45,7 +45,7 @@ func unsetEnvForTest(t *testing.T, env string) { func confFromYAML(t *testing.T, yamlConfig string) pkgconfigmodel.Config { conf := newTestConf() conf.SetConfigType("yaml") - err := conf.ReadConfig(bytes.NewBuffer([]byte(yamlConfig))) + err := conf.ReadConfig(strings.NewReader(yamlConfig)) require.NoError(t, err) return conf } @@ -133,15 +133,39 @@ func TestUnexpectedWhitespace(t *testing.T) { } func TestUnknownKeysWarning(t *testing.T) { - conf := newTestConf() - conf.SetWithoutSource("site", "datadoghq.eu") - assert.Len(t, findUnknownKeys(conf), 0) + yaml := ` +a: 21 +aa: 21 +b: + c: + d: "test" +` + conf := confFromYAML(t, yaml) - conf.SetWithoutSource("unknown_key.unknown_subkey", "true") - assert.Len(t, findUnknownKeys(conf), 1) + res := findUnknownKeys(conf) + slices.Sort(res) + assert.Equal(t, []string{"a", "aa", "b.c.d"}, res) + + conf.SetDefault("a", 0) + res = findUnknownKeys(conf) + slices.Sort(res) + assert.Equal(t, []string{"aa", "b.c.d"}, res) - conf.SetKnown("unknown_key.*") - assert.Len(t, findUnknownKeys(conf), 0) + conf.SetWithoutSource("a", 12) + res = findUnknownKeys(conf) + slices.Sort(res) + assert.Equal(t, []string{"aa", "b.c.d"}, res) + + // testing that nested value are correctly detected + conf.SetDefault("b.c", map[string]string{}) + res = findUnknownKeys(conf) + slices.Sort(res) + assert.Equal(t, []string{"aa"}, res) + + conf.SetWithoutSource("unknown_key.unknown_subkey", "true") + res = findUnknownKeys(conf) + slices.Sort(res) + assert.Equal(t, []string{"aa", "unknown_key.unknown_subkey"}, res) } func TestUnknownVarsWarning(t *testing.T) { From f28df9e9ca1df012914f2979f675e8808966bd01 Mon Sep 17 00:00:00 2001 From: Raphael Gavache Date: Fri, 13 Dec 2024 12:39:18 +0100 Subject: [PATCH 185/303] [fleet] Fix databricks installation (#32113) --- pkg/fleet/installer/packages/datadog_agent.go | 9 ++ pkg/fleet/installer/setup/common/config.go | 2 +- .../installer/setup/common/config_test.go | 1 + pkg/fleet/installer/setup/common/setup.go | 13 ++- pkg/fleet/installer/setup/djm/databricks.go | 93 +++++++++++++++---- .../installer/setup/djm/databricks_test.go | 81 ++++++++++++++++ .../tests/installer/script/databricks_test.go | 33 +++++-- 7 files changed, 204 insertions(+), 28 deletions(-) create mode 100644 pkg/fleet/installer/setup/djm/databricks_test.go diff --git a/pkg/fleet/installer/packages/datadog_agent.go b/pkg/fleet/installer/packages/datadog_agent.go index 2b7d4192d4592..b364045328f57 100644 --- a/pkg/fleet/installer/packages/datadog_agent.go +++ b/pkg/fleet/installer/packages/datadog_agent.go @@ -55,6 +55,12 @@ var ( ) var ( + rootOwnedConfigPaths = []string{ + "security-agent.yaml", + "system-probe.yaml", + "inject/tracer.yaml", + "inject", + } // matches omnibus/package-scripts/agent-deb/postinst rootOwnedAgentPaths = []string{ "embedded/bin/system-probe", @@ -112,6 +118,9 @@ func SetupAgent(ctx context.Context, _ []string) (err error) { if err = os.Chown("/etc/datadog-agent", ddAgentUID, ddAgentGID); err != nil { return fmt.Errorf("failed to chown /etc/datadog-agent: %v", err) } + if err = chownRecursive("/etc/datadog-agent", ddAgentUID, ddAgentGID, rootOwnedConfigPaths); err != nil { + return fmt.Errorf("failed to chown /etc/datadog-agent: %v", err) + } if err = chownRecursive("/opt/datadog-packages/datadog-agent/stable/", ddAgentUID, ddAgentGID, rootOwnedAgentPaths); err != nil { return fmt.Errorf("failed to chown /opt/datadog-packages/datadog-agent/stable/: %v", err) } diff --git a/pkg/fleet/installer/setup/common/config.go b/pkg/fleet/installer/setup/common/config.go index fb1677aeb6964..650b6b0acebe7 100644 --- a/pkg/fleet/installer/setup/common/config.go +++ b/pkg/fleet/installer/setup/common/config.go @@ -123,7 +123,7 @@ type DatadogConfigProcessConfig struct { // IntegrationConfig represents the configuration for an integration under conf.d/ type IntegrationConfig struct { - InitConfig []any `yaml:"init_config,omitempty"` + InitConfig []any `yaml:"init_config"` Instances []any `yaml:"instances,omitempty"` Logs []IntegrationConfigLogs `yaml:"logs,omitempty"` } diff --git a/pkg/fleet/installer/setup/common/config_test.go b/pkg/fleet/installer/setup/common/config_test.go index 7c02cd3999e02..7a98560656730 100644 --- a/pkg/fleet/installer/setup/common/config_test.go +++ b/pkg/fleet/installer/setup/common/config_test.go @@ -147,6 +147,7 @@ func TestIntegrationConfigInstanceSpark(t *testing.T) { err = yaml.Unmarshal(sparkYAML, &spark) assert.NoError(t, err) assert.Equal(t, map[string]interface{}{ + "init_config": []interface{}{}, "logs": []interface{}{ map[string]interface{}{ "type": "file", diff --git a/pkg/fleet/installer/setup/common/setup.go b/pkg/fleet/installer/setup/common/setup.go index dbd48a7f83028..159b1b69b0d36 100644 --- a/pkg/fleet/installer/setup/common/setup.go +++ b/pkg/fleet/installer/setup/common/setup.go @@ -79,17 +79,26 @@ func (s *Setup) Run() (err error) { if err != nil { return fmt.Errorf("failed to write configuration: %w", err) } - err = s.installer.Install(s.Ctx, installerOCILayoutURL, nil) + err = s.installPackage(installerOCILayoutURL) if err != nil { return fmt.Errorf("failed to install installer: %w", err) } packages := resolvePackages(s.Packages) for _, p := range packages { url := oci.PackageURL(s.Env, p.name, p.version) - err = s.installer.Install(s.Ctx, url, nil) + err = s.installPackage(url) if err != nil { return fmt.Errorf("failed to install package %s: %w", url, err) } } return nil } + +// installPackage mimicks the telemetry of calling the install package command +func (s *Setup) installPackage(url string) (err error) { + span, ctx := tracer.StartSpanFromContext(s.Ctx, "install") + defer func() { span.Finish(tracer.WithError(err)) }() + span.SetTag("url", url) + span.SetTag("_top_level", 1) + return s.installer.Install(ctx, url, nil) +} diff --git a/pkg/fleet/installer/setup/djm/databricks.go b/pkg/fleet/installer/setup/djm/databricks.go index 2dc8909c58e8b..af54e1bb99553 100644 --- a/pkg/fleet/installer/setup/djm/databricks.go +++ b/pkg/fleet/installer/setup/djm/databricks.go @@ -9,25 +9,23 @@ package djm import ( "fmt" "os" + "regexp" + "strings" "github.com/DataDog/datadog-agent/pkg/fleet/installer/setup/common" "github.com/DataDog/datadog-agent/pkg/util/log" ) const ( - databricksInjectorVersion = "0.21.0-1" - databricksJavaVersion = "1.41.1-1" - databricksAgentVersion = "7.57.2-1" + databricksInjectorVersion = "0.26.0-1" + databricksJavaVersion = "1.42.2-1" + databricksAgentVersion = "7.58.2-1" ) var ( - envToTags = map[string]string{ - "DATABRICKS_WORKSPACE": "workspace", - "DB_CLUSTER_NAME": "databricks_cluster_name", - "DB_CLUSTER_ID": "databricks_cluster_id", - "DB_NODE_TYPE": "databricks_node_type", - } - driverLogs = []common.IntegrationConfigLogs{ + jobNameRegex = regexp.MustCompile(`[,\']`) + clusterNameRegex = regexp.MustCompile(`[^a-zA-Z0-9_:.-]`) + driverLogs = []common.IntegrationConfigLogs{ { Type: "file", Path: "/databricks/driver/logs/*.log", @@ -91,11 +89,13 @@ func SetupDatabricks(s *common.Setup) error { s.Config.DatadogYAML.DJM.Enabled = true s.Config.DatadogYAML.ExpectedTagsDuration = "10m" s.Config.DatadogYAML.ProcessConfig.ExpvarPort = 6063 // avoid port conflict on 6062 - for env, tag := range envToTags { - if val, ok := os.LookupEnv(env); ok { - s.Config.DatadogYAML.Tags = append(s.Config.DatadogYAML.Tags, tag+":"+val) - } + + setupCommonHostTags(s) + installMethod := "manual" + if os.Getenv("DD_DJM_INIT_IS_MANAGED_INSTALL") != "true" { + installMethod = "managed" } + s.Span.SetTag("install_method", installMethod) switch os.Getenv("DB_IS_DRIVER") { case "TRUE": @@ -106,6 +106,65 @@ func SetupDatabricks(s *common.Setup) error { return nil } +func setupCommonHostTags(s *common.Setup) { + setIfExists(s, "DB_DRIVER_IP", "spark_host_ip", nil) + setIfExists(s, "DB_INSTANCE_TYPE", "databricks_instance_type", nil) + setIfExists(s, "DB_IS_JOB_CLUSTER", "databricks_is_job_cluster", nil) + setIfExists(s, "DD_JOB_NAME", "job_name", func(v string) string { + return jobNameRegex.ReplaceAllString(v, "_") + }) + setIfExists(s, "DB_CLUSTER_NAME", "databricks_cluster_name", func(v string) string { + return clusterNameRegex.ReplaceAllString(v, "_") + }) + setIfExists(s, "DB_CLUSTER_ID", "databricks_cluster_id", nil) + + // dupes for backward compatibility + setIfExists(s, "DB_CLUSTER_ID", "cluster_id", nil) + setIfExists(s, "DB_CLUSTER_NAME", "cluster_name", func(v string) string { + return clusterNameRegex.ReplaceAllString(v, "_") + }) + + jobID, runID, ok := getJobAndRunIDs() + if ok { + setHostTag(s, "jobid", jobID) + setHostTag(s, "runid", runID) + } +} + +func getJobAndRunIDs() (jobID, runID string, ok bool) { + clusterName := os.Getenv("DB_CLUSTER_NAME") + if !strings.HasPrefix(clusterName, "job-") { + return "", "", false + } + if !strings.Contains(clusterName, "-run-") { + return "", "", false + } + parts := strings.Split(clusterName, "-") + if len(parts) != 4 { + return "", "", false + } + if parts[0] != "job" || parts[2] != "run" { + return "", "", false + } + return parts[1], parts[3], true +} + +func setIfExists(s *common.Setup, envKey, tagKey string, normalize func(string) string) { + value, ok := os.LookupEnv(envKey) + if !ok { + return + } + if normalize != nil { + value = normalize(value) + } + setHostTag(s, tagKey, value) +} + +func setHostTag(s *common.Setup, tagKey, value string) { + s.Config.DatadogYAML.Tags = append(s.Config.DatadogYAML.Tags, tagKey+":"+value) + s.Span.SetTag("host_tag_set."+tagKey, "true") +} + func setupDatabricksDriver(s *common.Setup) { s.Span.SetTag("spark_node", "driver") @@ -120,17 +179,17 @@ func setupDatabricksDriver(s *common.Setup) { s.Config.DatadogYAML.LogsEnabled = true sparkIntegration.Logs = driverLogs } - if os.Getenv("DB_DRIVER_IP") != "" || os.Getenv("DB_DRIVER_PORT") != "" { + if os.Getenv("DB_DRIVER_IP") != "" { sparkIntegration.Instances = []any{ common.IntegrationConfigInstanceSpark{ - SparkURL: "http://" + os.Getenv("DB_DRIVER_IP") + ":" + os.Getenv("DB_DRIVER_PORT"), + SparkURL: "http://" + os.Getenv("DB_DRIVER_IP") + ":40001", SparkClusterMode: "spark_driver_mode", ClusterName: os.Getenv("DB_CLUSTER_NAME"), StreamingMetrics: true, }, } } else { - log.Warn("DB_DRIVER_IP or DB_DRIVER_PORT not set") + log.Warn("DB_DRIVER_IP not set") } s.Config.IntegrationConfigs["spark.d/databricks.yaml"] = sparkIntegration } diff --git a/pkg/fleet/installer/setup/djm/databricks_test.go b/pkg/fleet/installer/setup/djm/databricks_test.go new file mode 100644 index 0000000000000..6f2457b7d0e29 --- /dev/null +++ b/pkg/fleet/installer/setup/djm/databricks_test.go @@ -0,0 +1,81 @@ +// 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 djm contains data-jobs-monitoring installation logic +package djm + +import ( + "context" + "os" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" + + "github.com/DataDog/datadog-agent/pkg/fleet/installer/setup/common" +) + +func TestSetupCommonHostTags(t *testing.T) { + tests := []struct { + name string + env map[string]string + wantTags []string + }{ + { + name: "basic fields with formatting", + env: map[string]string{ + "DB_DRIVER_IP": "192.168.1.100", + "DB_INSTANCE_TYPE": "m4.xlarge", + "DB_IS_JOB_CLUSTER": "true", + "DD_JOB_NAME": "example,'job,name", + "DB_CLUSTER_NAME": "example[,'job]name", + "DB_CLUSTER_ID": "cluster123", + }, + wantTags: []string{ + "spark_host_ip:192.168.1.100", + "databricks_instance_type:m4.xlarge", + "databricks_is_job_cluster:true", + "job_name:example__job_name", + "databricks_cluster_name:example___job_name", + "databricks_cluster_id:cluster123", + "cluster_id:cluster123", + "cluster_name:example___job_name", + }, + }, + { + name: "with job, run ids", + env: map[string]string{ + "DB_CLUSTER_NAME": "job-123-run-456", + }, + wantTags: []string{ + "databricks_cluster_name:job-123-run-456", + "cluster_name:job-123-run-456", + "jobid:123", + "runid:456", + }, + }, + { + name: "Missing env vars results in no tags", + env: map[string]string{}, + wantTags: []string{}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + os.Clearenv() + for k, v := range tt.env { + require.NoError(t, os.Setenv(k, v)) + } + span, _ := tracer.StartSpanFromContext(context.Background(), "test") + s := &common.Setup{Span: span} + + setupCommonHostTags(s) + + assert.ElementsMatch(t, tt.wantTags, s.Config.DatadogYAML.Tags) + }) + } +} diff --git a/test/new-e2e/tests/installer/script/databricks_test.go b/test/new-e2e/tests/installer/script/databricks_test.go index 7195da6805295..b6f038ab96803 100644 --- a/test/new-e2e/tests/installer/script/databricks_test.go +++ b/test/new-e2e/tests/installer/script/databricks_test.go @@ -12,6 +12,12 @@ import ( e2eos "github.com/DataDog/test-infra-definitions/components/os" ) +const ( + databricksAgentVersion = "7.58.2-1" + databricksApmInjectVersion = "0.26.0" + databricksApmLibraryJavaVersion = "1.42.2" +) + type installScriptDatabricksSuite struct { installerScriptBaseSuite url string @@ -29,17 +35,28 @@ func testDatabricksScript(os e2eos.Descriptor, arch e2eos.Architecture) installe func (s *installScriptDatabricksSuite) TestDatabricksWorkerInstallScript() { s.RunInstallScript(s.url) state := s.host.State() - state.AssertDirExists("/opt/datadog-packages/datadog-agent/7.57.2-1", 0755, "dd-agent", "dd-agent") - state.AssertSymlinkExists("/opt/datadog-packages/datadog-agent/stable", "/opt/datadog-packages/datadog-agent/7.57.2-1", "root", "root") + agentPath := fmt.Sprintf("/opt/datadog-packages/datadog-agent/%s", databricksAgentVersion) + state.AssertDirExists(agentPath, 0755, "dd-agent", "dd-agent") + state.AssertSymlinkExists("/opt/datadog-packages/datadog-agent/stable", agentPath, "root", "root") + + state.AssertFileExists("/etc/datadog-agent/datadog.yaml", 0640, "dd-agent", "dd-agent") } func (s *installScriptDatabricksSuite) TestDatabricksDriverInstallScript() { s.RunInstallScript(s.url, "DB_IS_DRIVER=TRUE") state := s.host.State() - state.AssertDirExists("/opt/datadog-packages/datadog-agent/7.57.2-1", 0755, "dd-agent", "dd-agent") - state.AssertSymlinkExists("/opt/datadog-packages/datadog-agent/stable", "/opt/datadog-packages/datadog-agent/7.57.2-1", "root", "root") - state.AssertDirExists("/opt/datadog-packages/datadog-apm-inject/0.21.0", 0755, "root", "root") - state.AssertSymlinkExists("/opt/datadog-packages/datadog-apm-inject/stable", "/opt/datadog-packages/datadog-apm-inject/0.21.0", "root", "root") - state.AssertDirExists("/opt/datadog-packages/datadog-apm-library-java/1.41.1", 0755, "root", "root") - state.AssertSymlinkExists("/opt/datadog-packages/datadog-apm-library-java/stable", "/opt/datadog-packages/datadog-apm-library-java/1.41.1", "root", "root") + agentPath := fmt.Sprintf("/opt/datadog-packages/datadog-agent/%s", databricksAgentVersion) + javaPath := fmt.Sprintf("/opt/datadog-packages/datadog-apm-library-java/%s", databricksApmLibraryJavaVersion) + injectPath := fmt.Sprintf("/opt/datadog-packages/datadog-apm-inject/%s", databricksApmInjectVersion) + + state.AssertDirExists(agentPath, 0755, "dd-agent", "dd-agent") + state.AssertSymlinkExists("/opt/datadog-packages/datadog-agent/stable", agentPath, "root", "root") + state.AssertDirExists(injectPath, 0755, "root", "root") + state.AssertSymlinkExists("/opt/datadog-packages/datadog-apm-inject/stable", injectPath, "root", "root") + state.AssertDirExists(javaPath, 0755, "root", "root") + state.AssertSymlinkExists("/opt/datadog-packages/datadog-apm-library-java/stable", javaPath, "root", "root") + + state.AssertFileExists("/etc/datadog-agent/datadog.yaml", 0640, "dd-agent", "dd-agent") + state.AssertFileExists("/etc/datadog-agent/conf.d/spark.d/databricks.yaml", 0644, "dd-agent", "dd-agent") + state.AssertFileExists("/etc/datadog-agent/inject/tracer.yaml", 0644, "root", "root") } From 98d1e0ecd1e7440a19a3277949acb3e6a02089ee Mon Sep 17 00:00:00 2001 From: Jonathan Ribas Date: Fri, 13 Dec 2024 13:06:23 +0100 Subject: [PATCH 186/303] [CWS] send signal event when targeting multiple processes (#32108) --- pkg/security/ebpf/c/include/hooks/signal.h | 21 ++++++++++++------- .../ebpf/c/include/structs/syscalls.h | 1 + 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/pkg/security/ebpf/c/include/hooks/signal.h b/pkg/security/ebpf/c/include/hooks/signal.h index 92dbd145d7992..325cf249c249c 100644 --- a/pkg/security/ebpf/c/include/hooks/signal.h +++ b/pkg/security/ebpf/c/include/hooks/signal.h @@ -10,18 +10,25 @@ HOOK_SYSCALL_ENTRY2(kill, int, pid, int, type) { return 0; } - /* TODO: implement the event for pid equal to 0 or -1. */ - if (pid < 1) { - return 0; - } - struct syscall_cache_t syscall = { .type = EVENT_SIGNAL, .signal = { - .pid = 0, // 0 in case the root ns pid resolution failed .type = type, }, }; + + if (pid < 1) { + /* + in case kill is called with pid 0 or -1 and targets multiple processes, it + may not go through the kill_permission callpath; but still is valuable to track + */ + syscall.signal.need_target_resolution = 0; + syscall.signal.pid = pid; + } else { + syscall.signal.need_target_resolution = 1; + syscall.signal.pid = 0; // it will be resolved later on by check_kill_permission + } + cache_syscall(&syscall); return 0; } @@ -29,7 +36,7 @@ HOOK_SYSCALL_ENTRY2(kill, int, pid, int, type) { HOOK_ENTRY("check_kill_permission") int hook_check_kill_permission(ctx_t *ctx) { struct syscall_cache_t *syscall = peek_syscall(EVENT_SIGNAL); - if (!syscall) { + if (!syscall || syscall->signal.need_target_resolution == 0) { return 0; } diff --git a/pkg/security/ebpf/c/include/structs/syscalls.h b/pkg/security/ebpf/c/include/structs/syscalls.h index 9515fa07df56b..47aad2b07bb9d 100644 --- a/pkg/security/ebpf/c/include/structs/syscalls.h +++ b/pkg/security/ebpf/c/include/structs/syscalls.h @@ -191,6 +191,7 @@ struct syscall_cache_t { struct { u32 pid; u32 type; + u32 need_target_resolution; } signal; struct { From 3d9e989e667139c16a7a46bc54bc602733f594fc Mon Sep 17 00:00:00 2001 From: Guillaume Pagnoux Date: Fri, 13 Dec 2024 13:24:20 +0100 Subject: [PATCH 187/303] =?UTF-8?q?tests:=20gitignores:=20add=20additional?= =?UTF-8?q?=20ignores=20for=20symlinks/binaries=20gener=E2=80=A6=20(#32125?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/testutil/fake_server/.gitignore | 8 ++------ .../usm/sharedlibraries/testutil/fmapper/.gitignore | 2 ++ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/pkg/collector/corechecks/servicediscovery/module/testutil/fake_server/.gitignore b/pkg/collector/corechecks/servicediscovery/module/testutil/fake_server/.gitignore index eaaf842eef4d4..6882d79c431d0 100644 --- a/pkg/collector/corechecks/servicediscovery/module/testutil/fake_server/.gitignore +++ b/pkg/collector/corechecks/servicediscovery/module/testutil/fake_server/.gitignore @@ -1,6 +1,2 @@ -fake_server -dotnet -python -java -node -sshd +* +! *.go diff --git a/pkg/network/usm/sharedlibraries/testutil/fmapper/.gitignore b/pkg/network/usm/sharedlibraries/testutil/fmapper/.gitignore index c7a40853e7ac3..03c02565fb7ff 100644 --- a/pkg/network/usm/sharedlibraries/testutil/fmapper/.gitignore +++ b/pkg/network/usm/sharedlibraries/testutil/fmapper/.gitignore @@ -1 +1,3 @@ fmapper +dotnet +python From 777de397e7d5c10596b60bcbcbbec36be1c94d52 Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Fri, 13 Dec 2024 13:24:25 +0100 Subject: [PATCH 188/303] [ASCII-2608] Disable dependabot for golang.org/x (#31959) --- .github/dependabot.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml index 7eb0cdbc4e0dc..1af1fdc9fdcc5 100644 --- a/.github/dependabot.yaml +++ b/.github/dependabot.yaml @@ -27,6 +27,8 @@ updates: - dependency-name: github.com/ugorji/go # Ignore internal modules - dependency-name: github.com/DataDog/datadog-agent/* + # Ignore golang.org/x/... deps to avoid noise, they are updated together, pretty regularly + - dependency-name: golang.org/x/* # OpenTelemetry collector packages need to be updated with inv rather than dependabot - dependency-name: go.opentelemetry.io/collector/* - dependency-name: github.com/open-telemetry/opentelemetry-collector-contrib/* @@ -55,6 +57,8 @@ updates: - dependency-name: github.com/DataDog/datadog-agent/* # See https://github.com/DataDog/datadog-agent/pull/10112 - dependency-name: github.com/mailru/easyjson + # Ignore golang.org/x/... deps to avoid noise, they are updated together, pretty regularly + - dependency-name: golang.org/x/* # OpenTelemetry collector packages need to be updated with inv rather than dependabot - dependency-name: go.opentelemetry.io/collector/* - dependency-name: github.com/open-telemetry/opentelemetry-collector-contrib/* @@ -73,6 +77,8 @@ updates: - dependency-name: github.com/DataDog/datadog-agent/* # See https://github.com/DataDog/datadog-agent/pull/10112 - dependency-name: github.com/mailru/easyjson + # Ignore golang.org/x/... deps to avoid noise, they are updated together, pretty regularly + - dependency-name: golang.org/x/* schedule: interval: weekly open-pull-requests-limit: 100 @@ -88,6 +94,8 @@ updates: - dependency-name: github.com/DataDog/datadog-agent/* # See https://github.com/DataDog/datadog-agent/pull/10112 - dependency-name: github.com/mailru/easyjson + # Ignore golang.org/x/... deps to avoid noise, they are updated together, pretty regularly + - dependency-name: golang.org/x/* schedule: interval: weekly open-pull-requests-limit: 100 @@ -101,6 +109,8 @@ updates: ignore: # Ignore internal modules - dependency-name: github.com/DataDog/datadog-agent/* + # Ignore golang.org/x/... deps to avoid noise, they are updated together, pretty regularly + - dependency-name: golang.org/x/* schedule: interval: weekly open-pull-requests-limit: 100 @@ -119,6 +129,9 @@ updates: - qa/no-code-change schedule: interval: monthly + ignore: + # Ignore golang.org/x/... deps to avoid noise, they are updated together, pretty regularly + - dependency-name: golang.org/x/* open-pull-requests-limit: 100 - package-ecosystem: gomod directory: /pkg/networkdevice/profile @@ -130,6 +143,8 @@ updates: ignore: # Ignore internal modules - dependency-name: github.com/DataDog/datadog-agent/* + # Ignore golang.org/x/... deps to avoid noise, they are updated together, pretty regularly + - dependency-name: golang.org/x/* schedule: interval: weekly open-pull-requests-limit: 100 @@ -150,6 +165,8 @@ updates: # Do not bump dependencies that come from test-infra-definitions, they will be bumped when we'll bump the version # https://datadoghq.atlassian.net/browse/ADXT-375 - dependency-name: github.com/pulumi* + # Ignore golang.org/x/... deps to avoid noise, they are updated together, pretty regularly + - dependency-name: golang.org/x/* schedule: interval: weekly @@ -166,6 +183,9 @@ updates: schedule: interval: weekly open-pull-requests-limit: 100 + ignore: + # Ignore golang.org/x/... deps to avoid noise, they are updated together, pretty regularly + - dependency-name: golang.org/x/* - package-ecosystem: docker directory: /test/fakeintake labels: From db48294f9e7143262d4307e56ad84892fcb51406 Mon Sep 17 00:00:00 2001 From: Wassim Dhif Date: Fri, 13 Dec 2024 14:57:19 +0100 Subject: [PATCH 189/303] chore(proto): regenerate protobuf files (#32056) Signed-off-by: Wassim DHIF --- .../exporter/datadogexporter/go.mod | 1 + .../exporter/datadogexporter/go.sum | 2 + .../exporter/logsagentexporter/go.mod | 1 + .../exporter/logsagentexporter/go.sum | 2 + .../exporter/serializerexporter/go.mod | 1 + .../exporter/serializerexporter/go.sum | 2 + .../otlp/components/statsprocessor/go.mod | 1 + .../otlp/components/statsprocessor/go.sum | 2 + comp/otelcol/otlp/testutil/go.mod | 1 + comp/otelcol/otlp/testutil/go.sum | 2 + comp/trace/agent/def/go.mod | 1 + comp/trace/agent/def/go.sum | 2 + pkg/proto/go.mod | 1 + pkg/proto/go.sum | 2 + pkg/proto/pbgo/core/api.pb.go | 4 +- pkg/proto/pbgo/core/api.pb.gw.go | 31 + pkg/proto/pbgo/core/autodiscovery.pb.go | 94 +-- pkg/proto/pbgo/core/model.pb.go | 336 ++------ pkg/proto/pbgo/core/remoteagent.pb.go | 160 +--- pkg/proto/pbgo/core/remoteconfig.pb.go | 600 +++---------- pkg/proto/pbgo/core/workloadmeta.pb.go | 314 ++----- pkg/proto/pbgo/languagedetection/api.pb.go | 94 +-- pkg/proto/pbgo/process/process.pb.go | 28 +- .../pbgo/process/workloadmeta_process.pb.go | 204 +---- pkg/proto/pbgo/trace/agent_payload.pb.go | 28 +- .../pbgo/trace/agent_payload_vtproto.pb.go | 85 +- pkg/proto/pbgo/trace/span.pb.go | 50 +- pkg/proto/pbgo/trace/span_gen.go | 208 ++--- pkg/proto/pbgo/trace/span_vtproto.pb.go | 368 +++----- pkg/proto/pbgo/trace/stats.pb.go | 94 +-- pkg/proto/pbgo/trace/stats_gen.go | 788 +++++++++--------- pkg/proto/pbgo/trace/stats_vtproto.pb.go | 363 ++++---- pkg/proto/pbgo/trace/tracer_payload.pb.go | 50 +- .../pbgo/trace/tracer_payload_vtproto.pb.go | 201 ++--- pkg/trace/go.mod | 1 + pkg/trace/go.sum | 2 + pkg/trace/stats/oteltest/go.mod | 1 + pkg/trace/stats/oteltest/go.sum | 2 + test/fakeintake/go.mod | 1 + test/fakeintake/go.sum | 2 + test/new-e2e/go.mod | 1 + test/new-e2e/go.sum | 2 + test/otel/go.mod | 1 + test/otel/go.sum | 2 + 44 files changed, 1418 insertions(+), 2718 deletions(-) diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod index d29e1451378c7..f5d80646079db 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod @@ -268,6 +268,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/prometheus/client_golang v1.20.5 // indirect diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum index 5a622c5f06bbe..a517f4a4df2e7 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum @@ -280,6 +280,8 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod index a040e58e4630b..e60ad4792ef96 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod @@ -123,6 +123,7 @@ require ( github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/shirou/gopsutil/v4 v4.24.11 // indirect diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum index c65db2e5974bf..0e6e077927ae0 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum @@ -182,6 +182,8 @@ github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1Gsh github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod index c47c4c07206d3..52e5401b38680 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod @@ -243,6 +243,7 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/shirou/gopsutil/v4 v4.24.11 // indirect go.opentelemetry.io/collector/client v1.21.0 // indirect go.opentelemetry.io/collector/config/configauth v0.115.0 // indirect diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum index e39d69c0417ad..1d23563778fa6 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum @@ -231,6 +231,8 @@ github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFu github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/comp/otelcol/otlp/components/statsprocessor/go.mod b/comp/otelcol/otlp/components/statsprocessor/go.mod index c0343f17f54b3..df37ca815b508 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.mod +++ b/comp/otelcol/otlp/components/statsprocessor/go.mod @@ -71,6 +71,7 @@ require ( github.com/outcaste-io/ristretto v0.2.3 // indirect github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect diff --git a/comp/otelcol/otlp/components/statsprocessor/go.sum b/comp/otelcol/otlp/components/statsprocessor/go.sum index 6d97a13321636..0a9aeb5b8e7a1 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.sum +++ b/comp/otelcol/otlp/components/statsprocessor/go.sum @@ -92,6 +92,8 @@ github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1Gsh github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/comp/otelcol/otlp/testutil/go.mod b/comp/otelcol/otlp/testutil/go.mod index 3612a4e9b1e4c..2e2221439dab2 100644 --- a/comp/otelcol/otlp/testutil/go.mod +++ b/comp/otelcol/otlp/testutil/go.mod @@ -83,6 +83,7 @@ require ( github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/shirou/gopsutil/v4 v4.24.11 // indirect diff --git a/comp/otelcol/otlp/testutil/go.sum b/comp/otelcol/otlp/testutil/go.sum index 90eafd9495c03..edaa99bbf35cf 100644 --- a/comp/otelcol/otlp/testutil/go.sum +++ b/comp/otelcol/otlp/testutil/go.sum @@ -154,6 +154,8 @@ github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1Gsh github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/comp/trace/agent/def/go.mod b/comp/trace/agent/def/go.mod index c7b0d130245fe..6fa2850adce42 100644 --- a/comp/trace/agent/def/go.mod +++ b/comp/trace/agent/def/go.mod @@ -21,6 +21,7 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/tinylib/msgp v1.2.4 // indirect go.opentelemetry.io/collector/component v0.115.0 // indirect go.opentelemetry.io/collector/config/configtelemetry v0.115.0 // indirect diff --git a/comp/trace/agent/def/go.sum b/comp/trace/agent/def/go.sum index 983db883b8b3d..51fa28af83aac 100644 --- a/comp/trace/agent/def/go.sum +++ b/comp/trace/agent/def/go.sum @@ -30,6 +30,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1GshSTtih8C2gDs04w8dReiOGXrGLNoY= github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/pkg/proto/go.mod b/pkg/proto/go.mod index f8bf148c648a2..283fed1972634 100644 --- a/pkg/proto/go.mod +++ b/pkg/proto/go.mod @@ -9,6 +9,7 @@ require ( github.com/golang/protobuf v1.5.4 github.com/google/gofuzz v1.2.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 github.com/stretchr/testify v1.10.0 github.com/tinylib/msgp v1.2.4 github.com/vmihailenco/msgpack/v4 v4.3.13 diff --git a/pkg/proto/go.sum b/pkg/proto/go.sum index 7299faff27435..899e2f639d24b 100644 --- a/pkg/proto/go.sum +++ b/pkg/proto/go.sum @@ -48,6 +48,8 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1GshSTtih8C2gDs04w8dReiOGXrGLNoY= github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= diff --git a/pkg/proto/pbgo/core/api.pb.go b/pkg/proto/pbgo/core/api.pb.go index 6e23a0ef0f9c2..57de2030c617e 100644 --- a/pkg/proto/pbgo/core/api.pb.go +++ b/pkg/proto/pbgo/core/api.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.35.2 // protoc v5.26.1 // source: datadog/api/v1/api.proto @@ -177,7 +177,7 @@ var file_datadog_api_v1_api_proto_rawDesc = []byte{ 0x72, 0x6f, 0x74, 0x6f, 0x33, } -var file_datadog_api_v1_api_proto_goTypes = []interface{}{ +var file_datadog_api_v1_api_proto_goTypes = []any{ (*HostnameRequest)(nil), // 0: datadog.model.v1.HostnameRequest (*StreamTagsRequest)(nil), // 1: datadog.model.v1.StreamTagsRequest (*FetchEntityRequest)(nil), // 2: datadog.model.v1.FetchEntityRequest diff --git a/pkg/proto/pbgo/core/api.pb.gw.go b/pkg/proto/pbgo/core/api.pb.gw.go index 4ff263f83d888..0fac62a1daa72 100644 --- a/pkg/proto/pbgo/core/api.pb.gw.go +++ b/pkg/proto/pbgo/core/api.pb.gw.go @@ -21,6 +21,7 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" ) @@ -31,6 +32,7 @@ var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage +var _ = metadata.Join func request_Agent_GetHostname_0(ctx context.Context, marshaler runtime.Marshaler, client AgentClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq HostnameRequest @@ -400,11 +402,14 @@ func request_AgentSecure_AutodiscoveryStreamConfig_0(ctx context.Context, marsha // RegisterAgentHandlerServer registers the http handlers for service Agent to "mux". // UnaryRPC :call AgentServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAgentHandlerFromEndpoint instead. func RegisterAgentHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AgentServer) error { mux.Handle("GET", pattern_Agent_GetHostname_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -412,6 +417,7 @@ func RegisterAgentHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv return } resp, md, err := local_request_Agent_GetHostname_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -428,6 +434,7 @@ func RegisterAgentHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv // RegisterAgentSecureHandlerServer registers the http handlers for service AgentSecure to "mux". // UnaryRPC :call AgentSecureServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAgentSecureHandlerFromEndpoint instead. func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AgentSecureServer) error { mux.Handle("POST", pattern_AgentSecure_TaggerStreamEntities_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { @@ -440,6 +447,8 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux mux.Handle("POST", pattern_AgentSecure_TaggerFetchEntity_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -447,6 +456,7 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux return } resp, md, err := local_request_AgentSecure_TaggerFetchEntity_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -460,6 +470,8 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux mux.Handle("POST", pattern_AgentSecure_DogstatsdCaptureTrigger_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -467,6 +479,7 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux return } resp, md, err := local_request_AgentSecure_DogstatsdCaptureTrigger_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -480,6 +493,8 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux mux.Handle("POST", pattern_AgentSecure_DogstatsdSetTaggerState_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -487,6 +502,7 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux return } resp, md, err := local_request_AgentSecure_DogstatsdSetTaggerState_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -500,6 +516,8 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux mux.Handle("POST", pattern_AgentSecure_ClientGetConfigs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -507,6 +525,7 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux return } resp, md, err := local_request_AgentSecure_ClientGetConfigs_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -520,6 +539,8 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux mux.Handle("POST", pattern_AgentSecure_GetConfigState_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -527,6 +548,7 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux return } resp, md, err := local_request_AgentSecure_GetConfigState_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -540,6 +562,8 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux mux.Handle("POST", pattern_AgentSecure_ClientGetConfigsHA_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -547,6 +571,7 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux return } resp, md, err := local_request_AgentSecure_ClientGetConfigsHA_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -560,6 +585,8 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux mux.Handle("POST", pattern_AgentSecure_GetConfigStateHA_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -567,6 +594,7 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux return } resp, md, err := local_request_AgentSecure_GetConfigStateHA_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -587,6 +615,8 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux mux.Handle("POST", pattern_AgentSecure_RegisterRemoteAgent_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -594,6 +624,7 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux return } resp, md, err := local_request_AgentSecure_RegisterRemoteAgent_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/pkg/proto/pbgo/core/autodiscovery.pb.go b/pkg/proto/pbgo/core/autodiscovery.pb.go index 20f2c5c010231..898df3ccfe4af 100644 --- a/pkg/proto/pbgo/core/autodiscovery.pb.go +++ b/pkg/proto/pbgo/core/autodiscovery.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.35.2 // protoc v5.26.1 // source: datadog/autodiscovery/autodiscovery.proto @@ -77,11 +77,9 @@ type KubeNamespacedName struct { func (x *KubeNamespacedName) Reset() { *x = KubeNamespacedName{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *KubeNamespacedName) String() string { @@ -92,7 +90,7 @@ func (*KubeNamespacedName) ProtoMessage() {} func (x *KubeNamespacedName) ProtoReflect() protoreflect.Message { mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -132,11 +130,9 @@ type AdvancedADIdentifier struct { func (x *AdvancedADIdentifier) Reset() { *x = AdvancedADIdentifier{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AdvancedADIdentifier) String() string { @@ -147,7 +143,7 @@ func (*AdvancedADIdentifier) ProtoMessage() {} func (x *AdvancedADIdentifier) ProtoReflect() protoreflect.Message { mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -202,11 +198,9 @@ type Config struct { func (x *Config) Reset() { *x = Config{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Config) String() string { @@ -217,7 +211,7 @@ func (*Config) ProtoMessage() {} func (x *Config) ProtoReflect() protoreflect.Message { mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -361,11 +355,9 @@ type AutodiscoveryStreamResponse struct { func (x *AutodiscoveryStreamResponse) Reset() { *x = AutodiscoveryStreamResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AutodiscoveryStreamResponse) String() string { @@ -376,7 +368,7 @@ func (*AutodiscoveryStreamResponse) ProtoMessage() {} func (x *AutodiscoveryStreamResponse) ProtoReflect() protoreflect.Message { mi := &file_datadog_autodiscovery_autodiscovery_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -491,7 +483,7 @@ func file_datadog_autodiscovery_autodiscovery_proto_rawDescGZIP() []byte { var file_datadog_autodiscovery_autodiscovery_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_datadog_autodiscovery_autodiscovery_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_datadog_autodiscovery_autodiscovery_proto_goTypes = []interface{}{ +var file_datadog_autodiscovery_autodiscovery_proto_goTypes = []any{ (ConfigEventType)(0), // 0: datadog.autodiscovery.ConfigEventType (*KubeNamespacedName)(nil), // 1: datadog.autodiscovery.KubeNamespacedName (*AdvancedADIdentifier)(nil), // 2: datadog.autodiscovery.AdvancedADIdentifier @@ -516,56 +508,6 @@ func file_datadog_autodiscovery_autodiscovery_proto_init() { if File_datadog_autodiscovery_autodiscovery_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_datadog_autodiscovery_autodiscovery_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KubeNamespacedName); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_autodiscovery_autodiscovery_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AdvancedADIdentifier); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_autodiscovery_autodiscovery_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Config); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_autodiscovery_autodiscovery_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AutodiscoveryStreamResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/pkg/proto/pbgo/core/model.pb.go b/pkg/proto/pbgo/core/model.pb.go index cd3ae8350b00d..3f85da4236b7f 100644 --- a/pkg/proto/pbgo/core/model.pb.go +++ b/pkg/proto/pbgo/core/model.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.35.2 // protoc v5.26.1 // source: datadog/model/v1/model.proto @@ -126,11 +126,9 @@ type HostnameRequest struct { func (x *HostnameRequest) Reset() { *x = HostnameRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_model_v1_model_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_model_v1_model_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HostnameRequest) String() string { @@ -141,7 +139,7 @@ func (*HostnameRequest) ProtoMessage() {} func (x *HostnameRequest) ProtoReflect() protoreflect.Message { mi := &file_datadog_model_v1_model_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -167,11 +165,9 @@ type HostnameReply struct { func (x *HostnameReply) Reset() { *x = HostnameReply{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_model_v1_model_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_model_v1_model_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HostnameReply) String() string { @@ -182,7 +178,7 @@ func (*HostnameReply) ProtoMessage() {} func (x *HostnameReply) ProtoReflect() protoreflect.Message { mi := &file_datadog_model_v1_model_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -217,11 +213,9 @@ type CaptureTriggerRequest struct { func (x *CaptureTriggerRequest) Reset() { *x = CaptureTriggerRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_model_v1_model_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_model_v1_model_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CaptureTriggerRequest) String() string { @@ -232,7 +226,7 @@ func (*CaptureTriggerRequest) ProtoMessage() {} func (x *CaptureTriggerRequest) ProtoReflect() protoreflect.Message { mi := &file_datadog_model_v1_model_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -278,11 +272,9 @@ type CaptureTriggerResponse struct { func (x *CaptureTriggerResponse) Reset() { *x = CaptureTriggerResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_model_v1_model_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_model_v1_model_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CaptureTriggerResponse) String() string { @@ -293,7 +285,7 @@ func (*CaptureTriggerResponse) ProtoMessage() {} func (x *CaptureTriggerResponse) ProtoReflect() protoreflect.Message { mi := &file_datadog_model_v1_model_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -329,11 +321,9 @@ type StreamTagsRequest struct { func (x *StreamTagsRequest) Reset() { *x = StreamTagsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_model_v1_model_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_model_v1_model_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StreamTagsRequest) String() string { @@ -344,7 +334,7 @@ func (*StreamTagsRequest) ProtoMessage() {} func (x *StreamTagsRequest) ProtoReflect() protoreflect.Message { mi := &file_datadog_model_v1_model_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -404,11 +394,9 @@ type StreamTagsResponse struct { func (x *StreamTagsResponse) Reset() { *x = StreamTagsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_model_v1_model_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_model_v1_model_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StreamTagsResponse) String() string { @@ -419,7 +407,7 @@ func (*StreamTagsResponse) ProtoMessage() {} func (x *StreamTagsResponse) ProtoReflect() protoreflect.Message { mi := &file_datadog_model_v1_model_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -452,11 +440,9 @@ type StreamTagsEvent struct { func (x *StreamTagsEvent) Reset() { *x = StreamTagsEvent{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_model_v1_model_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_model_v1_model_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StreamTagsEvent) String() string { @@ -467,7 +453,7 @@ func (*StreamTagsEvent) ProtoMessage() {} func (x *StreamTagsEvent) ProtoReflect() protoreflect.Message { mi := &file_datadog_model_v1_model_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -508,11 +494,9 @@ type DeprecatedFilter struct { func (x *DeprecatedFilter) Reset() { *x = DeprecatedFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_model_v1_model_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_model_v1_model_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeprecatedFilter) String() string { @@ -523,7 +507,7 @@ func (*DeprecatedFilter) ProtoMessage() {} func (x *DeprecatedFilter) ProtoReflect() protoreflect.Message { mi := &file_datadog_model_v1_model_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -574,11 +558,9 @@ type Entity struct { func (x *Entity) Reset() { *x = Entity{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_model_v1_model_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_model_v1_model_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Entity) String() string { @@ -589,7 +571,7 @@ func (*Entity) ProtoMessage() {} func (x *Entity) ProtoReflect() protoreflect.Message { mi := &file_datadog_model_v1_model_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -657,11 +639,9 @@ type FetchEntityRequest struct { func (x *FetchEntityRequest) Reset() { *x = FetchEntityRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_model_v1_model_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_model_v1_model_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FetchEntityRequest) String() string { @@ -672,7 +652,7 @@ func (*FetchEntityRequest) ProtoMessage() {} func (x *FetchEntityRequest) ProtoReflect() protoreflect.Message { mi := &file_datadog_model_v1_model_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -713,11 +693,9 @@ type FetchEntityResponse struct { func (x *FetchEntityResponse) Reset() { *x = FetchEntityResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_model_v1_model_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_model_v1_model_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FetchEntityResponse) String() string { @@ -728,7 +706,7 @@ func (*FetchEntityResponse) ProtoMessage() {} func (x *FetchEntityResponse) ProtoReflect() protoreflect.Message { mi := &file_datadog_model_v1_model_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -775,11 +753,9 @@ type EntityId struct { func (x *EntityId) Reset() { *x = EntityId{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_model_v1_model_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_model_v1_model_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EntityId) String() string { @@ -790,7 +766,7 @@ func (*EntityId) ProtoMessage() {} func (x *EntityId) ProtoReflect() protoreflect.Message { mi := &file_datadog_model_v1_model_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -836,11 +812,9 @@ type UnixDogstatsdMsg struct { func (x *UnixDogstatsdMsg) Reset() { *x = UnixDogstatsdMsg{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_model_v1_model_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_model_v1_model_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UnixDogstatsdMsg) String() string { @@ -851,7 +825,7 @@ func (*UnixDogstatsdMsg) ProtoMessage() {} func (x *UnixDogstatsdMsg) ProtoReflect() protoreflect.Message { mi := &file_datadog_model_v1_model_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -919,11 +893,9 @@ type TaggerState struct { func (x *TaggerState) Reset() { *x = TaggerState{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_model_v1_model_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_model_v1_model_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TaggerState) String() string { @@ -934,7 +906,7 @@ func (*TaggerState) ProtoMessage() {} func (x *TaggerState) ProtoReflect() protoreflect.Message { mi := &file_datadog_model_v1_model_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -973,11 +945,9 @@ type TaggerStateResponse struct { func (x *TaggerStateResponse) Reset() { *x = TaggerStateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_model_v1_model_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_model_v1_model_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TaggerStateResponse) String() string { @@ -988,7 +958,7 @@ func (*TaggerStateResponse) ProtoMessage() {} func (x *TaggerStateResponse) ProtoReflect() protoreflect.Message { mi := &file_datadog_model_v1_model_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1165,7 +1135,7 @@ func file_datadog_model_v1_model_proto_rawDescGZIP() []byte { var file_datadog_model_v1_model_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_datadog_model_v1_model_proto_msgTypes = make([]protoimpl.MessageInfo, 17) -var file_datadog_model_v1_model_proto_goTypes = []interface{}{ +var file_datadog_model_v1_model_proto_goTypes = []any{ (EventType)(0), // 0: datadog.model.v1.EventType (TagCardinality)(0), // 1: datadog.model.v1.TagCardinality (*HostnameRequest)(nil), // 2: datadog.model.v1.HostnameRequest @@ -1213,188 +1183,6 @@ func file_datadog_model_v1_model_proto_init() { if File_datadog_model_v1_model_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_datadog_model_v1_model_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HostnameRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_model_v1_model_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HostnameReply); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_model_v1_model_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CaptureTriggerRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_model_v1_model_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CaptureTriggerResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_model_v1_model_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamTagsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_model_v1_model_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamTagsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_model_v1_model_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamTagsEvent); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_model_v1_model_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeprecatedFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_model_v1_model_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Entity); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_model_v1_model_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FetchEntityRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_model_v1_model_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FetchEntityResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_model_v1_model_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EntityId); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_model_v1_model_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnixDogstatsdMsg); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_model_v1_model_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TaggerState); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_model_v1_model_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TaggerStateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/pkg/proto/pbgo/core/remoteagent.pb.go b/pkg/proto/pbgo/core/remoteagent.pb.go index 0893ee22f3ec9..4e048d389b713 100644 --- a/pkg/proto/pbgo/core/remoteagent.pb.go +++ b/pkg/proto/pbgo/core/remoteagent.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.35.2 // protoc v5.26.1 // source: datadog/remoteagent/remoteagent.proto @@ -30,11 +30,9 @@ type StatusSection struct { func (x *StatusSection) Reset() { *x = StatusSection{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StatusSection) String() string { @@ -45,7 +43,7 @@ func (*StatusSection) ProtoMessage() {} func (x *StatusSection) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -98,11 +96,9 @@ type RegisterRemoteAgentRequest struct { func (x *RegisterRemoteAgentRequest) Reset() { *x = RegisterRemoteAgentRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *RegisterRemoteAgentRequest) String() string { @@ -113,7 +109,7 @@ func (*RegisterRemoteAgentRequest) ProtoMessage() {} func (x *RegisterRemoteAgentRequest) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -172,11 +168,9 @@ type RegisterRemoteAgentResponse struct { func (x *RegisterRemoteAgentResponse) Reset() { *x = RegisterRemoteAgentResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *RegisterRemoteAgentResponse) String() string { @@ -187,7 +181,7 @@ func (*RegisterRemoteAgentResponse) ProtoMessage() {} func (x *RegisterRemoteAgentResponse) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -217,11 +211,9 @@ type GetStatusDetailsRequest struct { func (x *GetStatusDetailsRequest) Reset() { *x = GetStatusDetailsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetStatusDetailsRequest) String() string { @@ -232,7 +224,7 @@ func (*GetStatusDetailsRequest) ProtoMessage() {} func (x *GetStatusDetailsRequest) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -264,11 +256,9 @@ type GetStatusDetailsResponse struct { func (x *GetStatusDetailsResponse) Reset() { *x = GetStatusDetailsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetStatusDetailsResponse) String() string { @@ -279,7 +269,7 @@ func (*GetStatusDetailsResponse) ProtoMessage() {} func (x *GetStatusDetailsResponse) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -316,11 +306,9 @@ type GetFlareFilesRequest struct { func (x *GetFlareFilesRequest) Reset() { *x = GetFlareFilesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetFlareFilesRequest) String() string { @@ -331,7 +319,7 @@ func (*GetFlareFilesRequest) ProtoMessage() {} func (x *GetFlareFilesRequest) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -363,11 +351,9 @@ type GetFlareFilesResponse struct { func (x *GetFlareFilesResponse) Reset() { *x = GetFlareFilesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetFlareFilesResponse) String() string { @@ -378,7 +364,7 @@ func (*GetFlareFilesResponse) ProtoMessage() {} func (x *GetFlareFilesResponse) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteagent_remoteagent_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -482,7 +468,7 @@ func file_datadog_remoteagent_remoteagent_proto_rawDescGZIP() []byte { } var file_datadog_remoteagent_remoteagent_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_datadog_remoteagent_remoteagent_proto_goTypes = []interface{}{ +var file_datadog_remoteagent_remoteagent_proto_goTypes = []any{ (*StatusSection)(nil), // 0: datadog.remoteagent.StatusSection (*RegisterRemoteAgentRequest)(nil), // 1: datadog.remoteagent.RegisterRemoteAgentRequest (*RegisterRemoteAgentResponse)(nil), // 2: datadog.remoteagent.RegisterRemoteAgentResponse @@ -512,92 +498,6 @@ func file_datadog_remoteagent_remoteagent_proto_init() { if File_datadog_remoteagent_remoteagent_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_datadog_remoteagent_remoteagent_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatusSection); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteagent_remoteagent_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterRemoteAgentRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteagent_remoteagent_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterRemoteAgentResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteagent_remoteagent_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetStatusDetailsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteagent_remoteagent_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetStatusDetailsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteagent_remoteagent_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlareFilesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteagent_remoteagent_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlareFilesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/pkg/proto/pbgo/core/remoteconfig.pb.go b/pkg/proto/pbgo/core/remoteconfig.pb.go index 37f3f8aea7592..cfd551d59b690 100644 --- a/pkg/proto/pbgo/core/remoteconfig.pb.go +++ b/pkg/proto/pbgo/core/remoteconfig.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 -// protoc v5.28.3 +// protoc-gen-go v1.35.2 +// protoc v5.26.1 // source: datadog/remoteconfig/remoteconfig.proto package core @@ -89,11 +89,9 @@ type ConfigMetas struct { func (x *ConfigMetas) Reset() { *x = ConfigMetas{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConfigMetas) String() string { @@ -104,7 +102,7 @@ func (*ConfigMetas) ProtoMessage() {} func (x *ConfigMetas) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -167,11 +165,9 @@ type DirectorMetas struct { func (x *DirectorMetas) Reset() { *x = DirectorMetas{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DirectorMetas) String() string { @@ -182,7 +178,7 @@ func (*DirectorMetas) ProtoMessage() {} func (x *DirectorMetas) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -237,11 +233,9 @@ type DelegatedMeta struct { func (x *DelegatedMeta) Reset() { *x = DelegatedMeta{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DelegatedMeta) String() string { @@ -252,7 +246,7 @@ func (*DelegatedMeta) ProtoMessage() {} func (x *DelegatedMeta) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -299,11 +293,9 @@ type TopMeta struct { func (x *TopMeta) Reset() { *x = TopMeta{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TopMeta) String() string { @@ -314,7 +306,7 @@ func (*TopMeta) ProtoMessage() {} func (x *TopMeta) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -354,11 +346,9 @@ type File struct { func (x *File) Reset() { *x = File{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *File) String() string { @@ -369,7 +359,7 @@ func (*File) ProtoMessage() {} func (x *File) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -423,11 +413,9 @@ type LatestConfigsRequest struct { func (x *LatestConfigsRequest) Reset() { *x = LatestConfigsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LatestConfigsRequest) String() string { @@ -438,7 +426,7 @@ func (*LatestConfigsRequest) ProtoMessage() {} func (x *LatestConfigsRequest) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -570,11 +558,9 @@ type LatestConfigsResponse struct { func (x *LatestConfigsResponse) Reset() { *x = LatestConfigsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LatestConfigsResponse) String() string { @@ -585,7 +571,7 @@ func (*LatestConfigsResponse) ProtoMessage() {} func (x *LatestConfigsResponse) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -631,11 +617,9 @@ type OrgDataResponse struct { func (x *OrgDataResponse) Reset() { *x = OrgDataResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OrgDataResponse) String() string { @@ -646,7 +630,7 @@ func (*OrgDataResponse) ProtoMessage() {} func (x *OrgDataResponse) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -679,11 +663,9 @@ type OrgStatusResponse struct { func (x *OrgStatusResponse) Reset() { *x = OrgStatusResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OrgStatusResponse) String() string { @@ -694,7 +676,7 @@ func (*OrgStatusResponse) ProtoMessage() {} func (x *OrgStatusResponse) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -743,11 +725,9 @@ type Client struct { func (x *Client) Reset() { *x = Client{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Client) String() string { @@ -758,7 +738,7 @@ func (*Client) ProtoMessage() {} func (x *Client) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -867,11 +847,9 @@ type ClientTracer struct { func (x *ClientTracer) Reset() { *x = ClientTracer{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientTracer) String() string { @@ -882,7 +860,7 @@ func (*ClientTracer) ProtoMessage() {} func (x *ClientTracer) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -967,11 +945,9 @@ type ClientAgent struct { func (x *ClientAgent) Reset() { *x = ClientAgent{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientAgent) String() string { @@ -982,7 +958,7 @@ func (*ClientAgent) ProtoMessage() {} func (x *ClientAgent) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1044,11 +1020,9 @@ type ClientUpdater struct { func (x *ClientUpdater) Reset() { *x = ClientUpdater{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientUpdater) String() string { @@ -1059,7 +1033,7 @@ func (*ClientUpdater) ProtoMessage() {} func (x *ClientUpdater) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1111,11 +1085,9 @@ type PackageState struct { func (x *PackageState) Reset() { *x = PackageState{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PackageState) String() string { @@ -1126,7 +1098,7 @@ func (*PackageState) ProtoMessage() {} func (x *PackageState) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1201,11 +1173,9 @@ type PoliciesState struct { func (x *PoliciesState) Reset() { *x = PoliciesState{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PoliciesState) String() string { @@ -1216,7 +1186,7 @@ func (*PoliciesState) ProtoMessage() {} func (x *PoliciesState) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1257,11 +1227,9 @@ type PackageStateTask struct { func (x *PackageStateTask) Reset() { *x = PackageStateTask{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PackageStateTask) String() string { @@ -1272,7 +1240,7 @@ func (*PackageStateTask) ProtoMessage() {} func (x *PackageStateTask) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1319,11 +1287,9 @@ type TaskError struct { func (x *TaskError) Reset() { *x = TaskError{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TaskError) String() string { @@ -1334,7 +1300,7 @@ func (*TaskError) ProtoMessage() {} func (x *TaskError) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1377,11 +1343,9 @@ type ConfigState struct { func (x *ConfigState) Reset() { *x = ConfigState{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConfigState) String() string { @@ -1392,7 +1356,7 @@ func (*ConfigState) ProtoMessage() {} func (x *ConfigState) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1457,11 +1421,9 @@ type ClientState struct { func (x *ClientState) Reset() { *x = ClientState{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientState) String() string { @@ -1472,7 +1434,7 @@ func (*ClientState) ProtoMessage() {} func (x *ClientState) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1540,11 +1502,9 @@ type TargetFileHash struct { func (x *TargetFileHash) Reset() { *x = TargetFileHash{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TargetFileHash) String() string { @@ -1555,7 +1515,7 @@ func (*TargetFileHash) ProtoMessage() {} func (x *TargetFileHash) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1596,11 +1556,9 @@ type TargetFileMeta struct { func (x *TargetFileMeta) Reset() { *x = TargetFileMeta{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TargetFileMeta) String() string { @@ -1611,7 +1569,7 @@ func (*TargetFileMeta) ProtoMessage() {} func (x *TargetFileMeta) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1658,11 +1616,9 @@ type ClientGetConfigsRequest struct { func (x *ClientGetConfigsRequest) Reset() { *x = ClientGetConfigsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientGetConfigsRequest) String() string { @@ -1673,7 +1629,7 @@ func (*ClientGetConfigsRequest) ProtoMessage() {} func (x *ClientGetConfigsRequest) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1715,11 +1671,9 @@ type ClientGetConfigsResponse struct { func (x *ClientGetConfigsResponse) Reset() { *x = ClientGetConfigsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientGetConfigsResponse) String() string { @@ -1730,7 +1684,7 @@ func (*ClientGetConfigsResponse) ProtoMessage() {} func (x *ClientGetConfigsResponse) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1784,11 +1738,9 @@ type FileMetaState struct { func (x *FileMetaState) Reset() { *x = FileMetaState{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FileMetaState) String() string { @@ -1799,7 +1751,7 @@ func (*FileMetaState) ProtoMessage() {} func (x *FileMetaState) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1841,11 +1793,9 @@ type GetStateConfigResponse struct { func (x *GetStateConfigResponse) Reset() { *x = GetStateConfigResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetStateConfigResponse) String() string { @@ -1856,7 +1806,7 @@ func (*GetStateConfigResponse) ProtoMessage() {} func (x *GetStateConfigResponse) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1915,11 +1865,9 @@ type TracerPredicateV1 struct { func (x *TracerPredicateV1) Reset() { *x = TracerPredicateV1{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TracerPredicateV1) String() string { @@ -1930,7 +1878,7 @@ func (*TracerPredicateV1) ProtoMessage() {} func (x *TracerPredicateV1) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2004,11 +1952,9 @@ type TracerPredicates struct { func (x *TracerPredicates) Reset() { *x = TracerPredicates{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TracerPredicates) String() string { @@ -2019,7 +1965,7 @@ func (*TracerPredicates) ProtoMessage() {} func (x *TracerPredicates) ProtoReflect() protoreflect.Message { mi := &file_datadog_remoteconfig_remoteconfig_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2492,332 +2438,6 @@ func file_datadog_remoteconfig_remoteconfig_proto_init() { if File_datadog_remoteconfig_remoteconfig_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*ConfigMetas); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*DirectorMetas); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*DelegatedMeta); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*TopMeta); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*File); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*LatestConfigsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*LatestConfigsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*OrgDataResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*OrgStatusResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*Client); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*ClientTracer); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*ClientAgent); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*ClientUpdater); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*PackageState); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*PoliciesState); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*PackageStateTask); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*TaskError); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*ConfigState); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*ClientState); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*TargetFileHash); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*TargetFileMeta); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*ClientGetConfigsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*ClientGetConfigsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*FileMetaState); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[24].Exporter = func(v any, i int) any { - switch v := v.(*GetStateConfigResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[25].Exporter = func(v any, i int) any { - switch v := v.(*TracerPredicateV1); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_remoteconfig_remoteconfig_proto_msgTypes[26].Exporter = func(v any, i int) any { - switch v := v.(*TracerPredicates); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/pkg/proto/pbgo/core/workloadmeta.pb.go b/pkg/proto/pbgo/core/workloadmeta.pb.go index 1cd608ebe19d1..a6299b85850fb 100644 --- a/pkg/proto/pbgo/core/workloadmeta.pb.go +++ b/pkg/proto/pbgo/core/workloadmeta.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.35.2 // protoc v5.26.1 // source: datadog/workloadmeta/workloadmeta.proto @@ -393,11 +393,9 @@ type WorkloadmetaFilter struct { func (x *WorkloadmetaFilter) Reset() { *x = WorkloadmetaFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WorkloadmetaFilter) String() string { @@ -408,7 +406,7 @@ func (*WorkloadmetaFilter) ProtoMessage() {} func (x *WorkloadmetaFilter) ProtoReflect() protoreflect.Message { mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -454,11 +452,9 @@ type WorkloadmetaStreamRequest struct { func (x *WorkloadmetaStreamRequest) Reset() { *x = WorkloadmetaStreamRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WorkloadmetaStreamRequest) String() string { @@ -469,7 +465,7 @@ func (*WorkloadmetaStreamRequest) ProtoMessage() {} func (x *WorkloadmetaStreamRequest) ProtoReflect() protoreflect.Message { mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -502,11 +498,9 @@ type WorkloadmetaEntityId struct { func (x *WorkloadmetaEntityId) Reset() { *x = WorkloadmetaEntityId{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WorkloadmetaEntityId) String() string { @@ -517,7 +511,7 @@ func (*WorkloadmetaEntityId) ProtoMessage() {} func (x *WorkloadmetaEntityId) ProtoReflect() protoreflect.Message { mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -559,11 +553,9 @@ type EntityMeta struct { func (x *EntityMeta) Reset() { *x = EntityMeta{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EntityMeta) String() string { @@ -574,7 +566,7 @@ func (*EntityMeta) ProtoMessage() {} func (x *EntityMeta) ProtoReflect() protoreflect.Message { mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -632,11 +624,9 @@ type ContainerImage struct { func (x *ContainerImage) Reset() { *x = ContainerImage{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ContainerImage) String() string { @@ -647,7 +637,7 @@ func (*ContainerImage) ProtoMessage() {} func (x *ContainerImage) ProtoReflect() protoreflect.Message { mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -716,11 +706,9 @@ type ContainerPort struct { func (x *ContainerPort) Reset() { *x = ContainerPort{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ContainerPort) String() string { @@ -731,7 +719,7 @@ func (*ContainerPort) ProtoMessage() {} func (x *ContainerPort) ProtoReflect() protoreflect.Message { mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -783,11 +771,9 @@ type ContainerState struct { func (x *ContainerState) Reset() { *x = ContainerState{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ContainerState) String() string { @@ -798,7 +784,7 @@ func (*ContainerState) ProtoMessage() {} func (x *ContainerState) ProtoReflect() protoreflect.Message { mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -883,11 +869,9 @@ type Container struct { func (x *Container) Reset() { *x = Container{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Container) String() string { @@ -898,7 +882,7 @@ func (*Container) ProtoMessage() {} func (x *Container) ProtoReflect() protoreflect.Message { mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1009,11 +993,9 @@ type KubernetesPodOwner struct { func (x *KubernetesPodOwner) Reset() { *x = KubernetesPodOwner{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *KubernetesPodOwner) String() string { @@ -1024,7 +1006,7 @@ func (*KubernetesPodOwner) ProtoMessage() {} func (x *KubernetesPodOwner) ProtoReflect() protoreflect.Message { mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1072,11 +1054,9 @@ type OrchestratorContainer struct { func (x *OrchestratorContainer) Reset() { *x = OrchestratorContainer{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OrchestratorContainer) String() string { @@ -1087,7 +1067,7 @@ func (*OrchestratorContainer) ProtoMessage() {} func (x *OrchestratorContainer) ProtoReflect() protoreflect.Message { mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1146,11 +1126,9 @@ type KubernetesPod struct { func (x *KubernetesPod) Reset() { *x = KubernetesPod{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *KubernetesPod) String() string { @@ -1161,7 +1139,7 @@ func (*KubernetesPod) ProtoMessage() {} func (x *KubernetesPod) ProtoReflect() protoreflect.Message { mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1295,11 +1273,9 @@ type ECSTask struct { func (x *ECSTask) Reset() { *x = ECSTask{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ECSTask) String() string { @@ -1310,7 +1286,7 @@ func (*ECSTask) ProtoMessage() {} func (x *ECSTask) ProtoReflect() protoreflect.Message { mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1422,11 +1398,9 @@ type WorkloadmetaEvent struct { func (x *WorkloadmetaEvent) Reset() { *x = WorkloadmetaEvent{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WorkloadmetaEvent) String() string { @@ -1437,7 +1411,7 @@ func (*WorkloadmetaEvent) ProtoMessage() {} func (x *WorkloadmetaEvent) ProtoReflect() protoreflect.Message { mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1490,11 +1464,9 @@ type WorkloadmetaStreamResponse struct { func (x *WorkloadmetaStreamResponse) Reset() { *x = WorkloadmetaStreamResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WorkloadmetaStreamResponse) String() string { @@ -1505,7 +1477,7 @@ func (*WorkloadmetaStreamResponse) ProtoMessage() {} func (x *WorkloadmetaStreamResponse) ProtoReflect() protoreflect.Message { mi := &file_datadog_workloadmeta_workloadmeta_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1862,7 +1834,7 @@ func file_datadog_workloadmeta_workloadmeta_proto_rawDescGZIP() []byte { var file_datadog_workloadmeta_workloadmeta_proto_enumTypes = make([]protoimpl.EnumInfo, 7) var file_datadog_workloadmeta_workloadmeta_proto_msgTypes = make([]protoimpl.MessageInfo, 21) -var file_datadog_workloadmeta_workloadmeta_proto_goTypes = []interface{}{ +var file_datadog_workloadmeta_workloadmeta_proto_goTypes = []any{ (WorkloadmetaKind)(0), // 0: datadog.workloadmeta.WorkloadmetaKind (WorkloadmetaSource)(0), // 1: datadog.workloadmeta.WorkloadmetaSource (WorkloadmetaEventType)(0), // 2: datadog.workloadmeta.WorkloadmetaEventType @@ -1940,176 +1912,6 @@ func file_datadog_workloadmeta_workloadmeta_proto_init() { if File_datadog_workloadmeta_workloadmeta_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_datadog_workloadmeta_workloadmeta_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadmetaFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_workloadmeta_workloadmeta_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadmetaStreamRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_workloadmeta_workloadmeta_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadmetaEntityId); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_workloadmeta_workloadmeta_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EntityMeta); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_workloadmeta_workloadmeta_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContainerImage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_workloadmeta_workloadmeta_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContainerPort); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_workloadmeta_workloadmeta_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContainerState); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_workloadmeta_workloadmeta_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Container); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_workloadmeta_workloadmeta_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KubernetesPodOwner); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_workloadmeta_workloadmeta_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OrchestratorContainer); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_workloadmeta_workloadmeta_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KubernetesPod); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_workloadmeta_workloadmeta_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ECSTask); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_workloadmeta_workloadmeta_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadmetaEvent); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_workloadmeta_workloadmeta_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadmetaStreamResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/pkg/proto/pbgo/languagedetection/api.pb.go b/pkg/proto/pbgo/languagedetection/api.pb.go index f2c09323e3822..8b0005ef541f8 100644 --- a/pkg/proto/pbgo/languagedetection/api.pb.go +++ b/pkg/proto/pbgo/languagedetection/api.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.35.2 // protoc v5.26.1 // source: datadog/languagedetection/api.proto @@ -32,11 +32,9 @@ type Process struct { func (x *Process) Reset() { *x = Process{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_languagedetection_api_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_languagedetection_api_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Process) String() string { @@ -47,7 +45,7 @@ func (*Process) ProtoMessage() {} func (x *Process) ProtoReflect() protoreflect.Message { mi := &file_datadog_languagedetection_api_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -95,11 +93,9 @@ type Language struct { func (x *Language) Reset() { *x = Language{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_languagedetection_api_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_languagedetection_api_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Language) String() string { @@ -110,7 +106,7 @@ func (*Language) ProtoMessage() {} func (x *Language) ProtoReflect() protoreflect.Message { mi := &file_datadog_languagedetection_api_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -149,11 +145,9 @@ type DetectLanguageRequest struct { func (x *DetectLanguageRequest) Reset() { *x = DetectLanguageRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_languagedetection_api_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_languagedetection_api_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DetectLanguageRequest) String() string { @@ -164,7 +158,7 @@ func (*DetectLanguageRequest) ProtoMessage() {} func (x *DetectLanguageRequest) ProtoReflect() protoreflect.Message { mi := &file_datadog_languagedetection_api_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -196,11 +190,9 @@ type DetectLanguageResponse struct { func (x *DetectLanguageResponse) Reset() { *x = DetectLanguageResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_languagedetection_api_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_languagedetection_api_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DetectLanguageResponse) String() string { @@ -211,7 +203,7 @@ func (*DetectLanguageResponse) ProtoMessage() {} func (x *DetectLanguageResponse) ProtoReflect() protoreflect.Message { mi := &file_datadog_languagedetection_api_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -278,7 +270,7 @@ func file_datadog_languagedetection_api_proto_rawDescGZIP() []byte { } var file_datadog_languagedetection_api_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_datadog_languagedetection_api_proto_goTypes = []interface{}{ +var file_datadog_languagedetection_api_proto_goTypes = []any{ (*Process)(nil), // 0: datadog.languagedetection.Process (*Language)(nil), // 1: datadog.languagedetection.Language (*DetectLanguageRequest)(nil), // 2: datadog.languagedetection.DetectLanguageRequest @@ -299,56 +291,6 @@ func file_datadog_languagedetection_api_proto_init() { if File_datadog_languagedetection_api_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_datadog_languagedetection_api_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Process); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_languagedetection_api_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Language); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_languagedetection_api_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DetectLanguageRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_languagedetection_api_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DetectLanguageResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/pkg/proto/pbgo/process/process.pb.go b/pkg/proto/pbgo/process/process.pb.go index f1c158d390062..cd13a446613b4 100644 --- a/pkg/proto/pbgo/process/process.pb.go +++ b/pkg/proto/pbgo/process/process.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.35.2 // protoc v5.26.1 // source: datadog/process/process.proto @@ -31,11 +31,9 @@ type ProcessStatRequest struct { func (x *ProcessStatRequest) Reset() { *x = ProcessStatRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_process_process_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_process_process_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ProcessStatRequest) String() string { @@ -46,7 +44,7 @@ func (*ProcessStatRequest) ProtoMessage() {} func (x *ProcessStatRequest) ProtoReflect() protoreflect.Message { mi := &file_datadog_process_process_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -94,7 +92,7 @@ func file_datadog_process_process_proto_rawDescGZIP() []byte { } var file_datadog_process_process_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_datadog_process_process_proto_goTypes = []interface{}{ +var file_datadog_process_process_proto_goTypes = []any{ (*ProcessStatRequest)(nil), // 0: datadog.process.ProcessStatRequest } var file_datadog_process_process_proto_depIdxs = []int32{ @@ -110,20 +108,6 @@ func file_datadog_process_process_proto_init() { if File_datadog_process_process_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_datadog_process_process_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProcessStatRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/pkg/proto/pbgo/process/workloadmeta_process.pb.go b/pkg/proto/pbgo/process/workloadmeta_process.pb.go index 7fc2e0b03f3a6..3c5d2ddd71152 100644 --- a/pkg/proto/pbgo/process/workloadmeta_process.pb.go +++ b/pkg/proto/pbgo/process/workloadmeta_process.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.35.2 // protoc v5.26.1 // source: datadog/process/workloadmeta_process.proto @@ -36,11 +36,9 @@ type ProcessStreamResponse struct { func (x *ProcessStreamResponse) Reset() { *x = ProcessStreamResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ProcessStreamResponse) String() string { @@ -51,7 +49,7 @@ func (*ProcessStreamResponse) ProtoMessage() {} func (x *ProcessStreamResponse) ProtoReflect() protoreflect.Message { mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -101,11 +99,9 @@ type ProcessEventSet struct { func (x *ProcessEventSet) Reset() { *x = ProcessEventSet{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ProcessEventSet) String() string { @@ -116,7 +112,7 @@ func (*ProcessEventSet) ProtoMessage() {} func (x *ProcessEventSet) ProtoReflect() protoreflect.Message { mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -176,11 +172,9 @@ type ProcessEventUnset struct { func (x *ProcessEventUnset) Reset() { *x = ProcessEventUnset{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ProcessEventUnset) String() string { @@ -191,7 +185,7 @@ func (*ProcessEventUnset) ProtoMessage() {} func (x *ProcessEventUnset) ProtoReflect() protoreflect.Message { mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -223,11 +217,9 @@ type Language struct { func (x *Language) Reset() { *x = Language{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Language) String() string { @@ -238,7 +230,7 @@ func (*Language) ProtoMessage() {} func (x *Language) ProtoReflect() protoreflect.Message { mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -268,11 +260,9 @@ type ProcessStreamEntitiesRequest struct { func (x *ProcessStreamEntitiesRequest) Reset() { *x = ProcessStreamEntitiesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ProcessStreamEntitiesRequest) String() string { @@ -283,7 +273,7 @@ func (*ProcessStreamEntitiesRequest) ProtoMessage() {} func (x *ProcessStreamEntitiesRequest) ProtoReflect() protoreflect.Message { mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -310,11 +300,9 @@ type ParentLanguageAnnotationRequest struct { func (x *ParentLanguageAnnotationRequest) Reset() { *x = ParentLanguageAnnotationRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ParentLanguageAnnotationRequest) String() string { @@ -325,7 +313,7 @@ func (*ParentLanguageAnnotationRequest) ProtoMessage() {} func (x *ParentLanguageAnnotationRequest) ProtoReflect() protoreflect.Message { mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -362,11 +350,9 @@ type PodLanguageDetails struct { func (x *PodLanguageDetails) Reset() { *x = PodLanguageDetails{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PodLanguageDetails) String() string { @@ -377,7 +363,7 @@ func (*PodLanguageDetails) ProtoMessage() {} func (x *PodLanguageDetails) ProtoReflect() protoreflect.Message { mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -439,11 +425,9 @@ type ContainerLanguageDetails struct { func (x *ContainerLanguageDetails) Reset() { *x = ContainerLanguageDetails{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ContainerLanguageDetails) String() string { @@ -454,7 +438,7 @@ func (*ContainerLanguageDetails) ProtoMessage() {} func (x *ContainerLanguageDetails) ProtoReflect() protoreflect.Message { mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -496,11 +480,9 @@ type KubeOwnerInfo struct { func (x *KubeOwnerInfo) Reset() { *x = KubeOwnerInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *KubeOwnerInfo) String() string { @@ -511,7 +493,7 @@ func (*KubeOwnerInfo) ProtoMessage() {} func (x *KubeOwnerInfo) ProtoReflect() protoreflect.Message { mi := &file_datadog_process_workloadmeta_process_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -648,7 +630,7 @@ func file_datadog_process_workloadmeta_process_proto_rawDescGZIP() []byte { } var file_datadog_process_workloadmeta_process_proto_msgTypes = make([]protoimpl.MessageInfo, 9) -var file_datadog_process_workloadmeta_process_proto_goTypes = []interface{}{ +var file_datadog_process_workloadmeta_process_proto_goTypes = []any{ (*ProcessStreamResponse)(nil), // 0: datadog.process.ProcessStreamResponse (*ProcessEventSet)(nil), // 1: datadog.process.ProcessEventSet (*ProcessEventUnset)(nil), // 2: datadog.process.ProcessEventUnset @@ -682,116 +664,6 @@ func file_datadog_process_workloadmeta_process_proto_init() { if File_datadog_process_workloadmeta_process_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_datadog_process_workloadmeta_process_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProcessStreamResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_process_workloadmeta_process_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProcessEventSet); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_process_workloadmeta_process_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProcessEventUnset); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_process_workloadmeta_process_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Language); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_process_workloadmeta_process_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProcessStreamEntitiesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_process_workloadmeta_process_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ParentLanguageAnnotationRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_process_workloadmeta_process_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PodLanguageDetails); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_process_workloadmeta_process_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ContainerLanguageDetails); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_process_workloadmeta_process_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KubeOwnerInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/pkg/proto/pbgo/trace/agent_payload.pb.go b/pkg/proto/pbgo/trace/agent_payload.pb.go index 5d803ea9b4019..30a8415307f40 100644 --- a/pkg/proto/pbgo/trace/agent_payload.pb.go +++ b/pkg/proto/pbgo/trace/agent_payload.pb.go @@ -2,7 +2,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.35.2 // protoc v5.26.1 // source: datadog/trace/agent_payload.proto @@ -48,11 +48,9 @@ type AgentPayload struct { func (x *AgentPayload) Reset() { *x = AgentPayload{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_trace_agent_payload_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_trace_agent_payload_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AgentPayload) String() string { @@ -63,7 +61,7 @@ func (*AgentPayload) ProtoMessage() {} func (x *AgentPayload) ProtoReflect() protoreflect.Message { mi := &file_datadog_trace_agent_payload_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -184,7 +182,7 @@ func file_datadog_trace_agent_payload_proto_rawDescGZIP() []byte { } var file_datadog_trace_agent_payload_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_datadog_trace_agent_payload_proto_goTypes = []interface{}{ +var file_datadog_trace_agent_payload_proto_goTypes = []any{ (*AgentPayload)(nil), // 0: datadog.trace.AgentPayload nil, // 1: datadog.trace.AgentPayload.TagsEntry (*TracerPayload)(nil), // 2: datadog.trace.TracerPayload @@ -205,20 +203,6 @@ func file_datadog_trace_agent_payload_proto_init() { return } file_datadog_trace_tracer_payload_proto_init() - if !protoimpl.UnsafeEnabled { - file_datadog_trace_agent_payload_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AgentPayload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/pkg/proto/pbgo/trace/agent_payload_vtproto.pb.go b/pkg/proto/pbgo/trace/agent_payload_vtproto.pb.go index e4d4f171bf7a2..9433b709b7da8 100644 --- a/pkg/proto/pbgo/trace/agent_payload_vtproto.pb.go +++ b/pkg/proto/pbgo/trace/agent_payload_vtproto.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go-vtproto. DO NOT EDIT. -// protoc-gen-go-vtproto version: v0.4.0 +// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10 // source: datadog/trace/agent_payload.proto package trace @@ -7,6 +7,7 @@ package trace import ( binary "encoding/binary" fmt "fmt" + protohelpers "github.com/planetscale/vtprotobuf/protohelpers" protoimpl "google.golang.org/protobuf/runtime/protoimpl" io "io" math "math" @@ -74,7 +75,7 @@ func (m *AgentPayload) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if len(m.AgentVersion) > 0 { i -= len(m.AgentVersion) copy(dAtA[i:], m.AgentVersion) - i = encodeVarint(dAtA, i, uint64(len(m.AgentVersion))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.AgentVersion))) i-- dAtA[i] = 0x3a } @@ -84,15 +85,15 @@ func (m *AgentPayload) MarshalToSizedBufferVT(dAtA []byte) (int, error) { baseI := i i -= len(v) copy(dAtA[i:], v) - i = encodeVarint(dAtA, i, uint64(len(v))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(v))) i-- dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) - i = encodeVarint(dAtA, i, uint64(len(k))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(k))) i-- dAtA[i] = 0xa - i = encodeVarint(dAtA, i, uint64(baseI-i)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(baseI-i)) i-- dAtA[i] = 0x32 } @@ -104,7 +105,7 @@ func (m *AgentPayload) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return 0, err } i -= size - i = encodeVarint(dAtA, i, uint64(size)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) i-- dAtA[i] = 0x2a } @@ -112,14 +113,14 @@ func (m *AgentPayload) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if len(m.Env) > 0 { i -= len(m.Env) copy(dAtA[i:], m.Env) - i = encodeVarint(dAtA, i, uint64(len(m.Env))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Env))) i-- dAtA[i] = 0x12 } if len(m.HostName) > 0 { i -= len(m.HostName) copy(dAtA[i:], m.HostName) - i = encodeVarint(dAtA, i, uint64(len(m.HostName))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.HostName))) i-- dAtA[i] = 0xa } @@ -134,29 +135,29 @@ func (m *AgentPayload) SizeVT() (n int) { _ = l l = len(m.HostName) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.Env) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } if len(m.TracerPayloads) > 0 { for _, e := range m.TracerPayloads { l = e.SizeVT() - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } } if len(m.Tags) > 0 { for k, v := range m.Tags { _ = k _ = v - mapEntrySize := 1 + len(k) + sov(uint64(len(k))) + 1 + len(v) + sov(uint64(len(v))) - n += mapEntrySize + 1 + sov(uint64(mapEntrySize)) + mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + 1 + len(v) + protohelpers.SizeOfVarint(uint64(len(v))) + n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize)) } } l = len(m.AgentVersion) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } if m.TargetTPS != 0 { n += 9 @@ -179,7 +180,7 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -207,7 +208,7 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -221,11 +222,11 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -239,7 +240,7 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -253,11 +254,11 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -271,7 +272,7 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -284,11 +285,11 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { } } if msglen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + msglen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -305,7 +306,7 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -318,11 +319,11 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { } } if msglen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + msglen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -337,7 +338,7 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -354,7 +355,7 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { var stringLenmapkey uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -368,11 +369,11 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { } intStringLenmapkey := int(stringLenmapkey) if intStringLenmapkey < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postStringIndexmapkey := iNdEx + intStringLenmapkey if postStringIndexmapkey < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postStringIndexmapkey > l { return io.ErrUnexpectedEOF @@ -383,7 +384,7 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { var stringLenmapvalue uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -397,11 +398,11 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { } intStringLenmapvalue := int(stringLenmapvalue) if intStringLenmapvalue < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postStringIndexmapvalue := iNdEx + intStringLenmapvalue if postStringIndexmapvalue < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postStringIndexmapvalue > l { return io.ErrUnexpectedEOF @@ -410,12 +411,12 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { iNdEx = postStringIndexmapvalue } else { iNdEx = entryPreIndex - skippy, err := skip(dAtA[iNdEx:]) + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if (iNdEx + skippy) > postIndex { return io.ErrUnexpectedEOF @@ -432,7 +433,7 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -446,11 +447,11 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -486,7 +487,7 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -501,12 +502,12 @@ func (m *AgentPayload) UnmarshalVT(dAtA []byte) error { m.RareSamplerEnabled = bool(v != 0) default: iNdEx = preIndex - skippy, err := skip(dAtA[iNdEx:]) + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF diff --git a/pkg/proto/pbgo/trace/span.pb.go b/pkg/proto/pbgo/trace/span.pb.go index be7ee2bdadb77..1d0ad90af6351 100644 --- a/pkg/proto/pbgo/trace/span.pb.go +++ b/pkg/proto/pbgo/trace/span.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.35.2 // protoc v5.26.1 // source: datadog/trace/span.proto @@ -41,11 +41,9 @@ type SpanLink struct { func (x *SpanLink) Reset() { *x = SpanLink{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_trace_span_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_trace_span_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SpanLink) String() string { @@ -56,7 +54,7 @@ func (*SpanLink) ProtoMessage() {} func (x *SpanLink) ProtoReflect() protoreflect.Message { mi := &file_datadog_trace_span_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -164,11 +162,9 @@ type Span struct { func (x *Span) Reset() { *x = Span{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_trace_span_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_trace_span_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Span) String() string { @@ -179,7 +175,7 @@ func (*Span) ProtoMessage() {} func (x *Span) ProtoReflect() protoreflect.Message { mi := &file_datadog_trace_span_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -375,7 +371,7 @@ func file_datadog_trace_span_proto_rawDescGZIP() []byte { } var file_datadog_trace_span_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_datadog_trace_span_proto_goTypes = []interface{}{ +var file_datadog_trace_span_proto_goTypes = []any{ (*SpanLink)(nil), // 0: datadog.trace.SpanLink (*Span)(nil), // 1: datadog.trace.Span nil, // 2: datadog.trace.SpanLink.AttributesEntry @@ -401,32 +397,6 @@ func file_datadog_trace_span_proto_init() { if File_datadog_trace_span_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_datadog_trace_span_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SpanLink); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_trace_span_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Span); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/pkg/proto/pbgo/trace/span_gen.go b/pkg/proto/pbgo/trace/span_gen.go index f08192b31b01b..0ebaf789abc63 100644 --- a/pkg/proto/pbgo/trace/span_gen.go +++ b/pkg/proto/pbgo/trace/span_gen.go @@ -9,9 +9,10 @@ import ( // MarshalMsg implements msgp.Marshaler func (z *Span) MarshalMsg(b []byte) (o []byte, err error) { o = msgp.Require(b, z.Msgsize()) - // omitempty: check for empty values + // check for omitted fields zb0001Len := uint32(14) var zb0001Mask uint16 /* 14 bits */ + _ = zb0001Mask if z.Meta == nil { zb0001Len-- zb0001Mask |= 0x200 @@ -30,78 +31,79 @@ func (z *Span) MarshalMsg(b []byte) (o []byte, err error) { } // variable map header, size zb0001Len o = append(o, 0x80|uint8(zb0001Len)) - if zb0001Len == 0 { - return - } - // string "service" - o = append(o, 0xa7, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65) - o = msgp.AppendString(o, z.Service) - // string "name" - o = append(o, 0xa4, 0x6e, 0x61, 0x6d, 0x65) - o = msgp.AppendString(o, z.Name) - // string "resource" - o = append(o, 0xa8, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65) - o = msgp.AppendString(o, z.Resource) - // string "trace_id" - o = append(o, 0xa8, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64) - o = msgp.AppendUint64(o, z.TraceID) - // string "span_id" - o = append(o, 0xa7, 0x73, 0x70, 0x61, 0x6e, 0x5f, 0x69, 0x64) - o = msgp.AppendUint64(o, z.SpanID) - // string "parent_id" - o = append(o, 0xa9, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64) - o = msgp.AppendUint64(o, z.ParentID) - // string "start" - o = append(o, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) - o = msgp.AppendInt64(o, z.Start) - // string "duration" - o = append(o, 0xa8, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e) - o = msgp.AppendInt64(o, z.Duration) - // string "error" - o = append(o, 0xa5, 0x65, 0x72, 0x72, 0x6f, 0x72) - o = msgp.AppendInt32(o, z.Error) - if (zb0001Mask & 0x200) == 0 { // if not empty - // string "meta" - o = append(o, 0xa4, 0x6d, 0x65, 0x74, 0x61) - o = msgp.AppendMapHeader(o, uint32(len(z.Meta))) - for za0001, za0002 := range z.Meta { - o = msgp.AppendString(o, za0001) - o = msgp.AppendString(o, za0002) + + // skip if no fields are to be emitted + if zb0001Len != 0 { + // string "service" + o = append(o, 0xa7, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65) + o = msgp.AppendString(o, z.Service) + // string "name" + o = append(o, 0xa4, 0x6e, 0x61, 0x6d, 0x65) + o = msgp.AppendString(o, z.Name) + // string "resource" + o = append(o, 0xa8, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65) + o = msgp.AppendString(o, z.Resource) + // string "trace_id" + o = append(o, 0xa8, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64) + o = msgp.AppendUint64(o, z.TraceID) + // string "span_id" + o = append(o, 0xa7, 0x73, 0x70, 0x61, 0x6e, 0x5f, 0x69, 0x64) + o = msgp.AppendUint64(o, z.SpanID) + // string "parent_id" + o = append(o, 0xa9, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64) + o = msgp.AppendUint64(o, z.ParentID) + // string "start" + o = append(o, 0xa5, 0x73, 0x74, 0x61, 0x72, 0x74) + o = msgp.AppendInt64(o, z.Start) + // string "duration" + o = append(o, 0xa8, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e) + o = msgp.AppendInt64(o, z.Duration) + // string "error" + o = append(o, 0xa5, 0x65, 0x72, 0x72, 0x6f, 0x72) + o = msgp.AppendInt32(o, z.Error) + if (zb0001Mask & 0x200) == 0 { // if not omitted + // string "meta" + o = append(o, 0xa4, 0x6d, 0x65, 0x74, 0x61) + o = msgp.AppendMapHeader(o, uint32(len(z.Meta))) + for za0001, za0002 := range z.Meta { + o = msgp.AppendString(o, za0001) + o = msgp.AppendString(o, za0002) + } } - } - if (zb0001Mask & 0x400) == 0 { // if not empty - // string "metrics" - o = append(o, 0xa7, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73) - o = msgp.AppendMapHeader(o, uint32(len(z.Metrics))) - for za0003, za0004 := range z.Metrics { - o = msgp.AppendString(o, za0003) - o = msgp.AppendFloat64(o, za0004) + if (zb0001Mask & 0x400) == 0 { // if not omitted + // string "metrics" + o = append(o, 0xa7, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73) + o = msgp.AppendMapHeader(o, uint32(len(z.Metrics))) + for za0003, za0004 := range z.Metrics { + o = msgp.AppendString(o, za0003) + o = msgp.AppendFloat64(o, za0004) + } } - } - // string "type" - o = append(o, 0xa4, 0x74, 0x79, 0x70, 0x65) - o = msgp.AppendString(o, z.Type) - if (zb0001Mask & 0x1000) == 0 { // if not empty - // string "meta_struct" - o = append(o, 0xab, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74) - o = msgp.AppendMapHeader(o, uint32(len(z.MetaStruct))) - for za0005, za0006 := range z.MetaStruct { - o = msgp.AppendString(o, za0005) - o = msgp.AppendBytes(o, za0006) + // string "type" + o = append(o, 0xa4, 0x74, 0x79, 0x70, 0x65) + o = msgp.AppendString(o, z.Type) + if (zb0001Mask & 0x1000) == 0 { // if not omitted + // string "meta_struct" + o = append(o, 0xab, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74) + o = msgp.AppendMapHeader(o, uint32(len(z.MetaStruct))) + for za0005, za0006 := range z.MetaStruct { + o = msgp.AppendString(o, za0005) + o = msgp.AppendBytes(o, za0006) + } } - } - if (zb0001Mask & 0x2000) == 0 { // if not empty - // string "span_links" - o = append(o, 0xaa, 0x73, 0x70, 0x61, 0x6e, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x73) - o = msgp.AppendArrayHeader(o, uint32(len(z.SpanLinks))) - for za0007 := range z.SpanLinks { - if z.SpanLinks[za0007] == nil { - o = msgp.AppendNil(o) - } else { - o, err = z.SpanLinks[za0007].MarshalMsg(o) - if err != nil { - err = msgp.WrapError(err, "SpanLinks", za0007) - return + if (zb0001Mask & 0x2000) == 0 { // if not omitted + // string "span_links" + o = append(o, 0xaa, 0x73, 0x70, 0x61, 0x6e, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x73) + o = msgp.AppendArrayHeader(o, uint32(len(z.SpanLinks))) + for za0007 := range z.SpanLinks { + if z.SpanLinks[za0007] == nil { + o = msgp.AppendNil(o) + } else { + o, err = z.SpanLinks[za0007].MarshalMsg(o) + if err != nil { + err = msgp.WrapError(err, "SpanLinks", za0007) + return + } } } } @@ -416,9 +418,10 @@ func (z *Span) Msgsize() (s int) { // MarshalMsg implements msgp.Marshaler func (z *SpanLink) MarshalMsg(b []byte) (o []byte, err error) { o = msgp.Require(b, z.Msgsize()) - // omitempty: check for empty values + // check for omitted fields zb0001Len := uint32(6) var zb0001Mask uint8 /* 6 bits */ + _ = zb0001Mask if z.TraceIDHigh == 0 { zb0001Len-- zb0001Mask |= 0x2 @@ -437,38 +440,39 @@ func (z *SpanLink) MarshalMsg(b []byte) (o []byte, err error) { } // variable map header, size zb0001Len o = append(o, 0x80|uint8(zb0001Len)) - if zb0001Len == 0 { - return - } - // string "trace_id" - o = append(o, 0xa8, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64) - o = msgp.AppendUint64(o, z.TraceID) - if (zb0001Mask & 0x2) == 0 { // if not empty - // string "trace_id_high" - o = append(o, 0xad, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x68, 0x69, 0x67, 0x68) - o = msgp.AppendUint64(o, z.TraceIDHigh) - } - // string "span_id" - o = append(o, 0xa7, 0x73, 0x70, 0x61, 0x6e, 0x5f, 0x69, 0x64) - o = msgp.AppendUint64(o, z.SpanID) - if (zb0001Mask & 0x8) == 0 { // if not empty - // string "attributes" - o = append(o, 0xaa, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73) - o = msgp.AppendMapHeader(o, uint32(len(z.Attributes))) - for za0001, za0002 := range z.Attributes { - o = msgp.AppendString(o, za0001) - o = msgp.AppendString(o, za0002) + + // skip if no fields are to be emitted + if zb0001Len != 0 { + // string "trace_id" + o = append(o, 0xa8, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64) + o = msgp.AppendUint64(o, z.TraceID) + if (zb0001Mask & 0x2) == 0 { // if not omitted + // string "trace_id_high" + o = append(o, 0xad, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x68, 0x69, 0x67, 0x68) + o = msgp.AppendUint64(o, z.TraceIDHigh) + } + // string "span_id" + o = append(o, 0xa7, 0x73, 0x70, 0x61, 0x6e, 0x5f, 0x69, 0x64) + o = msgp.AppendUint64(o, z.SpanID) + if (zb0001Mask & 0x8) == 0 { // if not omitted + // string "attributes" + o = append(o, 0xaa, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73) + o = msgp.AppendMapHeader(o, uint32(len(z.Attributes))) + for za0001, za0002 := range z.Attributes { + o = msgp.AppendString(o, za0001) + o = msgp.AppendString(o, za0002) + } + } + if (zb0001Mask & 0x10) == 0 { // if not omitted + // string "tracestate" + o = append(o, 0xaa, 0x74, 0x72, 0x61, 0x63, 0x65, 0x73, 0x74, 0x61, 0x74, 0x65) + o = msgp.AppendString(o, z.Tracestate) + } + if (zb0001Mask & 0x20) == 0 { // if not omitted + // string "flags" + o = append(o, 0xa5, 0x66, 0x6c, 0x61, 0x67, 0x73) + o = msgp.AppendUint32(o, z.Flags) } - } - if (zb0001Mask & 0x10) == 0 { // if not empty - // string "tracestate" - o = append(o, 0xaa, 0x74, 0x72, 0x61, 0x63, 0x65, 0x73, 0x74, 0x61, 0x74, 0x65) - o = msgp.AppendString(o, z.Tracestate) - } - if (zb0001Mask & 0x20) == 0 { // if not empty - // string "flags" - o = append(o, 0xa5, 0x66, 0x6c, 0x61, 0x67, 0x73) - o = msgp.AppendUint32(o, z.Flags) } return } diff --git a/pkg/proto/pbgo/trace/span_vtproto.pb.go b/pkg/proto/pbgo/trace/span_vtproto.pb.go index 7b6a7a0308785..d975f7ffae1f2 100644 --- a/pkg/proto/pbgo/trace/span_vtproto.pb.go +++ b/pkg/proto/pbgo/trace/span_vtproto.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go-vtproto. DO NOT EDIT. -// protoc-gen-go-vtproto version: v0.4.0 +// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10 // source: datadog/trace/span.proto package trace @@ -7,10 +7,10 @@ package trace import ( binary "encoding/binary" fmt "fmt" + protohelpers "github.com/planetscale/vtprotobuf/protohelpers" protoimpl "google.golang.org/protobuf/runtime/protoimpl" io "io" math "math" - bits "math/bits" ) const ( @@ -51,14 +51,14 @@ func (m *SpanLink) MarshalToSizedBufferVT(dAtA []byte) (int, error) { copy(dAtA[i:], m.unknownFields) } if m.Flags != 0 { - i = encodeVarint(dAtA, i, uint64(m.Flags)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Flags)) i-- dAtA[i] = 0x30 } if len(m.Tracestate) > 0 { i -= len(m.Tracestate) copy(dAtA[i:], m.Tracestate) - i = encodeVarint(dAtA, i, uint64(len(m.Tracestate))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Tracestate))) i-- dAtA[i] = 0x2a } @@ -68,31 +68,31 @@ func (m *SpanLink) MarshalToSizedBufferVT(dAtA []byte) (int, error) { baseI := i i -= len(v) copy(dAtA[i:], v) - i = encodeVarint(dAtA, i, uint64(len(v))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(v))) i-- dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) - i = encodeVarint(dAtA, i, uint64(len(k))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(k))) i-- dAtA[i] = 0xa - i = encodeVarint(dAtA, i, uint64(baseI-i)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(baseI-i)) i-- dAtA[i] = 0x22 } } if m.SpanID != 0 { - i = encodeVarint(dAtA, i, uint64(m.SpanID)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.SpanID)) i-- dAtA[i] = 0x18 } if m.TraceIDHigh != 0 { - i = encodeVarint(dAtA, i, uint64(m.TraceIDHigh)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.TraceIDHigh)) i-- dAtA[i] = 0x10 } if m.TraceID != 0 { - i = encodeVarint(dAtA, i, uint64(m.TraceID)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.TraceID)) i-- dAtA[i] = 0x8 } @@ -136,7 +136,7 @@ func (m *Span) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return 0, err } i -= size - i = encodeVarint(dAtA, i, uint64(size)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) i-- dAtA[i] = 0x72 } @@ -147,15 +147,15 @@ func (m *Span) MarshalToSizedBufferVT(dAtA []byte) (int, error) { baseI := i i -= len(v) copy(dAtA[i:], v) - i = encodeVarint(dAtA, i, uint64(len(v))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(v))) i-- dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) - i = encodeVarint(dAtA, i, uint64(len(k))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(k))) i-- dAtA[i] = 0xa - i = encodeVarint(dAtA, i, uint64(baseI-i)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(baseI-i)) i-- dAtA[i] = 0x6a } @@ -163,7 +163,7 @@ func (m *Span) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if len(m.Type) > 0 { i -= len(m.Type) copy(dAtA[i:], m.Type) - i = encodeVarint(dAtA, i, uint64(len(m.Type))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Type))) i-- dAtA[i] = 0x62 } @@ -177,10 +177,10 @@ func (m *Span) MarshalToSizedBufferVT(dAtA []byte) (int, error) { dAtA[i] = 0x11 i -= len(k) copy(dAtA[i:], k) - i = encodeVarint(dAtA, i, uint64(len(k))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(k))) i-- dAtA[i] = 0xa - i = encodeVarint(dAtA, i, uint64(baseI-i)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(baseI-i)) i-- dAtA[i] = 0x5a } @@ -191,84 +191,73 @@ func (m *Span) MarshalToSizedBufferVT(dAtA []byte) (int, error) { baseI := i i -= len(v) copy(dAtA[i:], v) - i = encodeVarint(dAtA, i, uint64(len(v))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(v))) i-- dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) - i = encodeVarint(dAtA, i, uint64(len(k))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(k))) i-- dAtA[i] = 0xa - i = encodeVarint(dAtA, i, uint64(baseI-i)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(baseI-i)) i-- dAtA[i] = 0x52 } } if m.Error != 0 { - i = encodeVarint(dAtA, i, uint64(m.Error)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Error)) i-- dAtA[i] = 0x48 } if m.Duration != 0 { - i = encodeVarint(dAtA, i, uint64(m.Duration)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Duration)) i-- dAtA[i] = 0x40 } if m.Start != 0 { - i = encodeVarint(dAtA, i, uint64(m.Start)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Start)) i-- dAtA[i] = 0x38 } if m.ParentID != 0 { - i = encodeVarint(dAtA, i, uint64(m.ParentID)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.ParentID)) i-- dAtA[i] = 0x30 } if m.SpanID != 0 { - i = encodeVarint(dAtA, i, uint64(m.SpanID)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.SpanID)) i-- dAtA[i] = 0x28 } if m.TraceID != 0 { - i = encodeVarint(dAtA, i, uint64(m.TraceID)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.TraceID)) i-- dAtA[i] = 0x20 } if len(m.Resource) > 0 { i -= len(m.Resource) copy(dAtA[i:], m.Resource) - i = encodeVarint(dAtA, i, uint64(len(m.Resource))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Resource))) i-- dAtA[i] = 0x1a } if len(m.Name) > 0 { i -= len(m.Name) copy(dAtA[i:], m.Name) - i = encodeVarint(dAtA, i, uint64(len(m.Name))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Name))) i-- dAtA[i] = 0x12 } if len(m.Service) > 0 { i -= len(m.Service) copy(dAtA[i:], m.Service) - i = encodeVarint(dAtA, i, uint64(len(m.Service))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Service))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func encodeVarint(dAtA []byte, offset int, v uint64) int { - offset -= sov(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} func (m *SpanLink) SizeVT() (n int) { if m == nil { return 0 @@ -276,28 +265,28 @@ func (m *SpanLink) SizeVT() (n int) { var l int _ = l if m.TraceID != 0 { - n += 1 + sov(uint64(m.TraceID)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.TraceID)) } if m.TraceIDHigh != 0 { - n += 1 + sov(uint64(m.TraceIDHigh)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.TraceIDHigh)) } if m.SpanID != 0 { - n += 1 + sov(uint64(m.SpanID)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.SpanID)) } if len(m.Attributes) > 0 { for k, v := range m.Attributes { _ = k _ = v - mapEntrySize := 1 + len(k) + sov(uint64(len(k))) + 1 + len(v) + sov(uint64(len(v))) - n += mapEntrySize + 1 + sov(uint64(mapEntrySize)) + mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + 1 + len(v) + protohelpers.SizeOfVarint(uint64(len(v))) + n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize)) } } l = len(m.Tracestate) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } if m.Flags != 0 { - n += 1 + sov(uint64(m.Flags)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.Flags)) } n += len(m.unknownFields) return n @@ -311,79 +300,73 @@ func (m *Span) SizeVT() (n int) { _ = l l = len(m.Service) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.Name) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.Resource) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } if m.TraceID != 0 { - n += 1 + sov(uint64(m.TraceID)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.TraceID)) } if m.SpanID != 0 { - n += 1 + sov(uint64(m.SpanID)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.SpanID)) } if m.ParentID != 0 { - n += 1 + sov(uint64(m.ParentID)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.ParentID)) } if m.Start != 0 { - n += 1 + sov(uint64(m.Start)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.Start)) } if m.Duration != 0 { - n += 1 + sov(uint64(m.Duration)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.Duration)) } if m.Error != 0 { - n += 1 + sov(uint64(m.Error)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.Error)) } if len(m.Meta) > 0 { for k, v := range m.Meta { _ = k _ = v - mapEntrySize := 1 + len(k) + sov(uint64(len(k))) + 1 + len(v) + sov(uint64(len(v))) - n += mapEntrySize + 1 + sov(uint64(mapEntrySize)) + mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + 1 + len(v) + protohelpers.SizeOfVarint(uint64(len(v))) + n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize)) } } if len(m.Metrics) > 0 { for k, v := range m.Metrics { _ = k _ = v - mapEntrySize := 1 + len(k) + sov(uint64(len(k))) + 1 + 8 - n += mapEntrySize + 1 + sov(uint64(mapEntrySize)) + mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + 1 + 8 + n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize)) } } l = len(m.Type) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } if len(m.MetaStruct) > 0 { for k, v := range m.MetaStruct { _ = k _ = v - l = 1 + len(v) + sov(uint64(len(v))) - mapEntrySize := 1 + len(k) + sov(uint64(len(k))) + l - n += mapEntrySize + 1 + sov(uint64(mapEntrySize)) + l = 1 + len(v) + protohelpers.SizeOfVarint(uint64(len(v))) + mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + l + n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize)) } } if len(m.SpanLinks) > 0 { for _, e := range m.SpanLinks { l = e.SizeVT() - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } } n += len(m.unknownFields) return n } -func sov(x uint64) (n int) { - return (bits.Len64(x|1) + 6) / 7 -} -func soz(x uint64) (n int) { - return sov(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} func (m *SpanLink) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -392,7 +375,7 @@ func (m *SpanLink) UnmarshalVT(dAtA []byte) error { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -420,7 +403,7 @@ func (m *SpanLink) UnmarshalVT(dAtA []byte) error { m.TraceID = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -439,7 +422,7 @@ func (m *SpanLink) UnmarshalVT(dAtA []byte) error { m.TraceIDHigh = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -458,7 +441,7 @@ func (m *SpanLink) UnmarshalVT(dAtA []byte) error { m.SpanID = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -477,7 +460,7 @@ func (m *SpanLink) UnmarshalVT(dAtA []byte) error { var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -490,11 +473,11 @@ func (m *SpanLink) UnmarshalVT(dAtA []byte) error { } } if msglen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + msglen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -509,7 +492,7 @@ func (m *SpanLink) UnmarshalVT(dAtA []byte) error { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -526,7 +509,7 @@ func (m *SpanLink) UnmarshalVT(dAtA []byte) error { var stringLenmapkey uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -540,11 +523,11 @@ func (m *SpanLink) UnmarshalVT(dAtA []byte) error { } intStringLenmapkey := int(stringLenmapkey) if intStringLenmapkey < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postStringIndexmapkey := iNdEx + intStringLenmapkey if postStringIndexmapkey < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postStringIndexmapkey > l { return io.ErrUnexpectedEOF @@ -555,7 +538,7 @@ func (m *SpanLink) UnmarshalVT(dAtA []byte) error { var stringLenmapvalue uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -569,11 +552,11 @@ func (m *SpanLink) UnmarshalVT(dAtA []byte) error { } intStringLenmapvalue := int(stringLenmapvalue) if intStringLenmapvalue < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postStringIndexmapvalue := iNdEx + intStringLenmapvalue if postStringIndexmapvalue < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postStringIndexmapvalue > l { return io.ErrUnexpectedEOF @@ -582,12 +565,12 @@ func (m *SpanLink) UnmarshalVT(dAtA []byte) error { iNdEx = postStringIndexmapvalue } else { iNdEx = entryPreIndex - skippy, err := skip(dAtA[iNdEx:]) + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if (iNdEx + skippy) > postIndex { return io.ErrUnexpectedEOF @@ -604,7 +587,7 @@ func (m *SpanLink) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -618,11 +601,11 @@ func (m *SpanLink) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -636,7 +619,7 @@ func (m *SpanLink) UnmarshalVT(dAtA []byte) error { m.Flags = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -650,12 +633,12 @@ func (m *SpanLink) UnmarshalVT(dAtA []byte) error { } default: iNdEx = preIndex - skippy, err := skip(dAtA[iNdEx:]) + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF @@ -678,7 +661,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -706,7 +689,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -720,11 +703,11 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -738,7 +721,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -752,11 +735,11 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -770,7 +753,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -784,11 +767,11 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -802,7 +785,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { m.TraceID = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -821,7 +804,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { m.SpanID = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -840,7 +823,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { m.ParentID = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -859,7 +842,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { m.Start = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -878,7 +861,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { m.Duration = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -897,7 +880,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { m.Error = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -916,7 +899,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -929,11 +912,11 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { } } if msglen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + msglen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -948,7 +931,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -965,7 +948,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var stringLenmapkey uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -979,11 +962,11 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { } intStringLenmapkey := int(stringLenmapkey) if intStringLenmapkey < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postStringIndexmapkey := iNdEx + intStringLenmapkey if postStringIndexmapkey < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postStringIndexmapkey > l { return io.ErrUnexpectedEOF @@ -994,7 +977,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var stringLenmapvalue uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1008,11 +991,11 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { } intStringLenmapvalue := int(stringLenmapvalue) if intStringLenmapvalue < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postStringIndexmapvalue := iNdEx + intStringLenmapvalue if postStringIndexmapvalue < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postStringIndexmapvalue > l { return io.ErrUnexpectedEOF @@ -1021,12 +1004,12 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { iNdEx = postStringIndexmapvalue } else { iNdEx = entryPreIndex - skippy, err := skip(dAtA[iNdEx:]) + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if (iNdEx + skippy) > postIndex { return io.ErrUnexpectedEOF @@ -1043,7 +1026,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1056,11 +1039,11 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { } } if msglen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + msglen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1075,7 +1058,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1092,7 +1075,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var stringLenmapkey uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1106,11 +1089,11 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { } intStringLenmapkey := int(stringLenmapkey) if intStringLenmapkey < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postStringIndexmapkey := iNdEx + intStringLenmapkey if postStringIndexmapkey < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postStringIndexmapkey > l { return io.ErrUnexpectedEOF @@ -1127,12 +1110,12 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { mapvalue = math.Float64frombits(mapvaluetemp) } else { iNdEx = entryPreIndex - skippy, err := skip(dAtA[iNdEx:]) + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if (iNdEx + skippy) > postIndex { return io.ErrUnexpectedEOF @@ -1149,7 +1132,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1163,11 +1146,11 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1181,7 +1164,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1194,11 +1177,11 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { } } if msglen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + msglen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1213,7 +1196,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1230,7 +1213,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var stringLenmapkey uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1244,11 +1227,11 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { } intStringLenmapkey := int(stringLenmapkey) if intStringLenmapkey < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postStringIndexmapkey := iNdEx + intStringLenmapkey if postStringIndexmapkey < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postStringIndexmapkey > l { return io.ErrUnexpectedEOF @@ -1259,7 +1242,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var mapbyteLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1273,11 +1256,11 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { } intMapbyteLen := int(mapbyteLen) if intMapbyteLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postbytesIndex := iNdEx + intMapbyteLen if postbytesIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postbytesIndex > l { return io.ErrUnexpectedEOF @@ -1287,12 +1270,12 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { iNdEx = postbytesIndex } else { iNdEx = entryPreIndex - skippy, err := skip(dAtA[iNdEx:]) + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if (iNdEx + skippy) > postIndex { return io.ErrUnexpectedEOF @@ -1309,7 +1292,7 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1322,11 +1305,11 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { } } if msglen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + msglen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1338,12 +1321,12 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { iNdEx = postIndex default: iNdEx = preIndex - skippy, err := skip(dAtA[iNdEx:]) + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF @@ -1358,88 +1341,3 @@ func (m *Span) UnmarshalVT(dAtA []byte) error { } return nil } - -func skip(dAtA []byte) (n int, err error) { - l := len(dAtA) - iNdEx := 0 - depth := 0 - for iNdEx < l { - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflow - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - wireType := int(wire & 0x7) - switch wireType { - case 0: - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflow - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - iNdEx++ - if dAtA[iNdEx-1] < 0x80 { - break - } - } - case 1: - iNdEx += 8 - case 2: - var length int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflow - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - length |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if length < 0 { - return 0, ErrInvalidLength - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroup - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLength - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLength = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflow = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroup = fmt.Errorf("proto: unexpected end of group") -) diff --git a/pkg/proto/pbgo/trace/stats.pb.go b/pkg/proto/pbgo/trace/stats.pb.go index 52d51fff5f75b..c2dc1cfbbe86c 100644 --- a/pkg/proto/pbgo/trace/stats.pb.go +++ b/pkg/proto/pbgo/trace/stats.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.35.2 // protoc v5.26.1 // source: datadog/trace/stats.proto @@ -138,11 +138,9 @@ type StatsPayload struct { func (x *StatsPayload) Reset() { *x = StatsPayload{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_trace_stats_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_trace_stats_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StatsPayload) String() string { @@ -153,7 +151,7 @@ func (*StatsPayload) ProtoMessage() {} func (x *StatsPayload) ProtoReflect() protoreflect.Message { mi := &file_datadog_trace_stats_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -248,11 +246,9 @@ type ClientStatsPayload struct { func (x *ClientStatsPayload) Reset() { *x = ClientStatsPayload{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_trace_stats_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_trace_stats_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientStatsPayload) String() string { @@ -263,7 +259,7 @@ func (*ClientStatsPayload) ProtoMessage() {} func (x *ClientStatsPayload) ProtoReflect() protoreflect.Message { mi := &file_datadog_trace_stats_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -393,11 +389,9 @@ type ClientStatsBucket struct { func (x *ClientStatsBucket) Reset() { *x = ClientStatsBucket{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_trace_stats_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_trace_stats_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientStatsBucket) String() string { @@ -408,7 +402,7 @@ func (*ClientStatsBucket) ProtoMessage() {} func (x *ClientStatsBucket) ProtoReflect() protoreflect.Message { mi := &file_datadog_trace_stats_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -479,11 +473,9 @@ type ClientGroupedStats struct { func (x *ClientGroupedStats) Reset() { *x = ClientGroupedStats{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_trace_stats_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_trace_stats_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientGroupedStats) String() string { @@ -494,7 +486,7 @@ func (*ClientGroupedStats) ProtoMessage() {} func (x *ClientGroupedStats) ProtoReflect() protoreflect.Message { mi := &file_datadog_trace_stats_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -740,7 +732,7 @@ func file_datadog_trace_stats_proto_rawDescGZIP() []byte { var file_datadog_trace_stats_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_datadog_trace_stats_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_datadog_trace_stats_proto_goTypes = []interface{}{ +var file_datadog_trace_stats_proto_goTypes = []any{ (Trilean)(0), // 0: datadog.trace.Trilean (TraceRootFlag)(0), // 1: datadog.trace.TraceRootFlag (*StatsPayload)(nil), // 2: datadog.trace.StatsPayload @@ -765,56 +757,6 @@ func file_datadog_trace_stats_proto_init() { if File_datadog_trace_stats_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_datadog_trace_stats_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatsPayload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_trace_stats_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientStatsPayload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_trace_stats_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientStatsBucket); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_trace_stats_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientGroupedStats); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/pkg/proto/pbgo/trace/stats_gen.go b/pkg/proto/pbgo/trace/stats_gen.go index 0747621c2d0c6..3607062d3f2c2 100644 --- a/pkg/proto/pbgo/trace/stats_gen.go +++ b/pkg/proto/pbgo/trace/stats_gen.go @@ -612,9 +612,10 @@ func (z *ClientStatsBucket) DecodeMsg(dc *msgp.Reader) (err error) { // EncodeMsg implements msgp.Encodable func (z *ClientStatsBucket) EncodeMsg(en *msgp.Writer) (err error) { - // omitempty: check for empty values + // check for omitted fields zb0001Len := uint32(4) var zb0001Mask uint8 /* 4 bits */ + _ = zb0001Mask if z.Stats == nil { zb0001Len-- zb0001Mask |= 0x4 @@ -624,64 +625,65 @@ func (z *ClientStatsBucket) EncodeMsg(en *msgp.Writer) (err error) { if err != nil { return } - if zb0001Len == 0 { - return - } - // write "Start" - err = en.Append(0xa5, 0x53, 0x74, 0x61, 0x72, 0x74) - if err != nil { - return - } - err = en.WriteUint64(z.Start) - if err != nil { - err = msgp.WrapError(err, "Start") - return - } - // write "Duration" - err = en.Append(0xa8, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e) - if err != nil { - return - } - err = en.WriteUint64(z.Duration) - if err != nil { - err = msgp.WrapError(err, "Duration") - return - } - if (zb0001Mask & 0x4) == 0 { // if not empty - // write "Stats" - err = en.Append(0xa5, 0x53, 0x74, 0x61, 0x74, 0x73) + + // skip if no fields are to be emitted + if zb0001Len != 0 { + // write "Start" + err = en.Append(0xa5, 0x53, 0x74, 0x61, 0x72, 0x74) if err != nil { return } - err = en.WriteArrayHeader(uint32(len(z.Stats))) + err = en.WriteUint64(z.Start) if err != nil { - err = msgp.WrapError(err, "Stats") + err = msgp.WrapError(err, "Start") return } - for za0001 := range z.Stats { - if z.Stats[za0001] == nil { - err = en.WriteNil() - if err != nil { - return - } - } else { - err = z.Stats[za0001].EncodeMsg(en) - if err != nil { - err = msgp.WrapError(err, "Stats", za0001) - return + // write "Duration" + err = en.Append(0xa8, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e) + if err != nil { + return + } + err = en.WriteUint64(z.Duration) + if err != nil { + err = msgp.WrapError(err, "Duration") + return + } + if (zb0001Mask & 0x4) == 0 { // if not omitted + // write "Stats" + err = en.Append(0xa5, 0x53, 0x74, 0x61, 0x74, 0x73) + if err != nil { + return + } + err = en.WriteArrayHeader(uint32(len(z.Stats))) + if err != nil { + err = msgp.WrapError(err, "Stats") + return + } + for za0001 := range z.Stats { + if z.Stats[za0001] == nil { + err = en.WriteNil() + if err != nil { + return + } + } else { + err = z.Stats[za0001].EncodeMsg(en) + if err != nil { + err = msgp.WrapError(err, "Stats", za0001) + return + } } } } - } - // write "AgentTimeShift" - err = en.Append(0xae, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x68, 0x69, 0x66, 0x74) - if err != nil { - return - } - err = en.WriteInt64(z.AgentTimeShift) - if err != nil { - err = msgp.WrapError(err, "AgentTimeShift") - return + // write "AgentTimeShift" + err = en.Append(0xae, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x68, 0x69, 0x66, 0x74) + if err != nil { + return + } + err = en.WriteInt64(z.AgentTimeShift) + if err != nil { + err = msgp.WrapError(err, "AgentTimeShift") + return + } } return } @@ -689,43 +691,45 @@ func (z *ClientStatsBucket) EncodeMsg(en *msgp.Writer) (err error) { // MarshalMsg implements msgp.Marshaler func (z *ClientStatsBucket) MarshalMsg(b []byte) (o []byte, err error) { o = msgp.Require(b, z.Msgsize()) - // omitempty: check for empty values + // check for omitted fields zb0001Len := uint32(4) var zb0001Mask uint8 /* 4 bits */ + _ = zb0001Mask if z.Stats == nil { zb0001Len-- zb0001Mask |= 0x4 } // variable map header, size zb0001Len o = append(o, 0x80|uint8(zb0001Len)) - if zb0001Len == 0 { - return - } - // string "Start" - o = append(o, 0xa5, 0x53, 0x74, 0x61, 0x72, 0x74) - o = msgp.AppendUint64(o, z.Start) - // string "Duration" - o = append(o, 0xa8, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e) - o = msgp.AppendUint64(o, z.Duration) - if (zb0001Mask & 0x4) == 0 { // if not empty - // string "Stats" - o = append(o, 0xa5, 0x53, 0x74, 0x61, 0x74, 0x73) - o = msgp.AppendArrayHeader(o, uint32(len(z.Stats))) - for za0001 := range z.Stats { - if z.Stats[za0001] == nil { - o = msgp.AppendNil(o) - } else { - o, err = z.Stats[za0001].MarshalMsg(o) - if err != nil { - err = msgp.WrapError(err, "Stats", za0001) - return + + // skip if no fields are to be emitted + if zb0001Len != 0 { + // string "Start" + o = append(o, 0xa5, 0x53, 0x74, 0x61, 0x72, 0x74) + o = msgp.AppendUint64(o, z.Start) + // string "Duration" + o = append(o, 0xa8, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e) + o = msgp.AppendUint64(o, z.Duration) + if (zb0001Mask & 0x4) == 0 { // if not omitted + // string "Stats" + o = append(o, 0xa5, 0x53, 0x74, 0x61, 0x74, 0x73) + o = msgp.AppendArrayHeader(o, uint32(len(z.Stats))) + for za0001 := range z.Stats { + if z.Stats[za0001] == nil { + o = msgp.AppendNil(o) + } else { + o, err = z.Stats[za0001].MarshalMsg(o) + if err != nil { + err = msgp.WrapError(err, "Stats", za0001) + return + } } } } + // string "AgentTimeShift" + o = append(o, 0xae, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x68, 0x69, 0x66, 0x74) + o = msgp.AppendInt64(o, z.AgentTimeShift) } - // string "AgentTimeShift" - o = append(o, 0xae, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x68, 0x69, 0x66, 0x74) - o = msgp.AppendInt64(o, z.AgentTimeShift) return } @@ -974,9 +978,10 @@ func (z *ClientStatsPayload) DecodeMsg(dc *msgp.Reader) (err error) { // EncodeMsg implements msgp.Encodable func (z *ClientStatsPayload) EncodeMsg(en *msgp.Writer) (err error) { - // omitempty: check for empty values + // check for omitted fields zb0001Len := uint32(14) var zb0001Mask uint16 /* 14 bits */ + _ = zb0001Mask if z.Stats == nil { zb0001Len-- zb0001Mask |= 0x8 @@ -986,171 +991,172 @@ func (z *ClientStatsPayload) EncodeMsg(en *msgp.Writer) (err error) { if err != nil { return } - if zb0001Len == 0 { - return - } - // write "Hostname" - err = en.Append(0xa8, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65) - if err != nil { - return - } - err = en.WriteString(z.Hostname) - if err != nil { - err = msgp.WrapError(err, "Hostname") - return - } - // write "Env" - err = en.Append(0xa3, 0x45, 0x6e, 0x76) - if err != nil { - return - } - err = en.WriteString(z.Env) - if err != nil { - err = msgp.WrapError(err, "Env") - return - } - // write "Version" - err = en.Append(0xa7, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e) - if err != nil { - return - } - err = en.WriteString(z.Version) - if err != nil { - err = msgp.WrapError(err, "Version") - return - } - if (zb0001Mask & 0x8) == 0 { // if not empty - // write "Stats" - err = en.Append(0xa5, 0x53, 0x74, 0x61, 0x74, 0x73) + + // skip if no fields are to be emitted + if zb0001Len != 0 { + // write "Hostname" + err = en.Append(0xa8, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65) if err != nil { return } - err = en.WriteArrayHeader(uint32(len(z.Stats))) + err = en.WriteString(z.Hostname) if err != nil { - err = msgp.WrapError(err, "Stats") + err = msgp.WrapError(err, "Hostname") return } - for za0001 := range z.Stats { - if z.Stats[za0001] == nil { - err = en.WriteNil() - if err != nil { - return - } - } else { - err = z.Stats[za0001].EncodeMsg(en) - if err != nil { - err = msgp.WrapError(err, "Stats", za0001) - return + // write "Env" + err = en.Append(0xa3, 0x45, 0x6e, 0x76) + if err != nil { + return + } + err = en.WriteString(z.Env) + if err != nil { + err = msgp.WrapError(err, "Env") + return + } + // write "Version" + err = en.Append(0xa7, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e) + if err != nil { + return + } + err = en.WriteString(z.Version) + if err != nil { + err = msgp.WrapError(err, "Version") + return + } + if (zb0001Mask & 0x8) == 0 { // if not omitted + // write "Stats" + err = en.Append(0xa5, 0x53, 0x74, 0x61, 0x74, 0x73) + if err != nil { + return + } + err = en.WriteArrayHeader(uint32(len(z.Stats))) + if err != nil { + err = msgp.WrapError(err, "Stats") + return + } + for za0001 := range z.Stats { + if z.Stats[za0001] == nil { + err = en.WriteNil() + if err != nil { + return + } + } else { + err = z.Stats[za0001].EncodeMsg(en) + if err != nil { + err = msgp.WrapError(err, "Stats", za0001) + return + } } } } - } - // write "Lang" - err = en.Append(0xa4, 0x4c, 0x61, 0x6e, 0x67) - if err != nil { - return - } - err = en.WriteString(z.Lang) - if err != nil { - err = msgp.WrapError(err, "Lang") - return - } - // write "TracerVersion" - err = en.Append(0xad, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e) - if err != nil { - return - } - err = en.WriteString(z.TracerVersion) - if err != nil { - err = msgp.WrapError(err, "TracerVersion") - return - } - // write "RuntimeID" - err = en.Append(0xa9, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x44) - if err != nil { - return - } - err = en.WriteString(z.RuntimeID) - if err != nil { - err = msgp.WrapError(err, "RuntimeID") - return - } - // write "Sequence" - err = en.Append(0xa8, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65) - if err != nil { - return - } - err = en.WriteUint64(z.Sequence) - if err != nil { - err = msgp.WrapError(err, "Sequence") - return - } - // write "AgentAggregation" - err = en.Append(0xb0, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e) - if err != nil { - return - } - err = en.WriteString(z.AgentAggregation) - if err != nil { - err = msgp.WrapError(err, "AgentAggregation") - return - } - // write "Service" - err = en.Append(0xa7, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65) - if err != nil { - return - } - err = en.WriteString(z.Service) - if err != nil { - err = msgp.WrapError(err, "Service") - return - } - // write "ContainerID" - err = en.Append(0xab, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44) - if err != nil { - return - } - err = en.WriteString(z.ContainerID) - if err != nil { - err = msgp.WrapError(err, "ContainerID") - return - } - // write "Tags" - err = en.Append(0xa4, 0x54, 0x61, 0x67, 0x73) - if err != nil { - return - } - err = en.WriteArrayHeader(uint32(len(z.Tags))) - if err != nil { - err = msgp.WrapError(err, "Tags") - return - } - for za0002 := range z.Tags { - err = en.WriteString(z.Tags[za0002]) + // write "Lang" + err = en.Append(0xa4, 0x4c, 0x61, 0x6e, 0x67) if err != nil { - err = msgp.WrapError(err, "Tags", za0002) return } - } - // write "GitCommitSha" - err = en.Append(0xac, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x68, 0x61) - if err != nil { - return - } - err = en.WriteString(z.GitCommitSha) - if err != nil { - err = msgp.WrapError(err, "GitCommitSha") - return - } - // write "ImageTag" - err = en.Append(0xa8, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x61, 0x67) - if err != nil { - return - } - err = en.WriteString(z.ImageTag) - if err != nil { - err = msgp.WrapError(err, "ImageTag") - return + err = en.WriteString(z.Lang) + if err != nil { + err = msgp.WrapError(err, "Lang") + return + } + // write "TracerVersion" + err = en.Append(0xad, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e) + if err != nil { + return + } + err = en.WriteString(z.TracerVersion) + if err != nil { + err = msgp.WrapError(err, "TracerVersion") + return + } + // write "RuntimeID" + err = en.Append(0xa9, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x44) + if err != nil { + return + } + err = en.WriteString(z.RuntimeID) + if err != nil { + err = msgp.WrapError(err, "RuntimeID") + return + } + // write "Sequence" + err = en.Append(0xa8, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65) + if err != nil { + return + } + err = en.WriteUint64(z.Sequence) + if err != nil { + err = msgp.WrapError(err, "Sequence") + return + } + // write "AgentAggregation" + err = en.Append(0xb0, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e) + if err != nil { + return + } + err = en.WriteString(z.AgentAggregation) + if err != nil { + err = msgp.WrapError(err, "AgentAggregation") + return + } + // write "Service" + err = en.Append(0xa7, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65) + if err != nil { + return + } + err = en.WriteString(z.Service) + if err != nil { + err = msgp.WrapError(err, "Service") + return + } + // write "ContainerID" + err = en.Append(0xab, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44) + if err != nil { + return + } + err = en.WriteString(z.ContainerID) + if err != nil { + err = msgp.WrapError(err, "ContainerID") + return + } + // write "Tags" + err = en.Append(0xa4, 0x54, 0x61, 0x67, 0x73) + if err != nil { + return + } + err = en.WriteArrayHeader(uint32(len(z.Tags))) + if err != nil { + err = msgp.WrapError(err, "Tags") + return + } + for za0002 := range z.Tags { + err = en.WriteString(z.Tags[za0002]) + if err != nil { + err = msgp.WrapError(err, "Tags", za0002) + return + } + } + // write "GitCommitSha" + err = en.Append(0xac, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x68, 0x61) + if err != nil { + return + } + err = en.WriteString(z.GitCommitSha) + if err != nil { + err = msgp.WrapError(err, "GitCommitSha") + return + } + // write "ImageTag" + err = en.Append(0xa8, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x61, 0x67) + if err != nil { + return + } + err = en.WriteString(z.ImageTag) + if err != nil { + err = msgp.WrapError(err, "ImageTag") + return + } } return } @@ -1158,76 +1164,78 @@ func (z *ClientStatsPayload) EncodeMsg(en *msgp.Writer) (err error) { // MarshalMsg implements msgp.Marshaler func (z *ClientStatsPayload) MarshalMsg(b []byte) (o []byte, err error) { o = msgp.Require(b, z.Msgsize()) - // omitempty: check for empty values + // check for omitted fields zb0001Len := uint32(14) var zb0001Mask uint16 /* 14 bits */ + _ = zb0001Mask if z.Stats == nil { zb0001Len-- zb0001Mask |= 0x8 } // variable map header, size zb0001Len o = append(o, 0x80|uint8(zb0001Len)) - if zb0001Len == 0 { - return - } - // string "Hostname" - o = append(o, 0xa8, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65) - o = msgp.AppendString(o, z.Hostname) - // string "Env" - o = append(o, 0xa3, 0x45, 0x6e, 0x76) - o = msgp.AppendString(o, z.Env) - // string "Version" - o = append(o, 0xa7, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e) - o = msgp.AppendString(o, z.Version) - if (zb0001Mask & 0x8) == 0 { // if not empty - // string "Stats" - o = append(o, 0xa5, 0x53, 0x74, 0x61, 0x74, 0x73) - o = msgp.AppendArrayHeader(o, uint32(len(z.Stats))) - for za0001 := range z.Stats { - if z.Stats[za0001] == nil { - o = msgp.AppendNil(o) - } else { - o, err = z.Stats[za0001].MarshalMsg(o) - if err != nil { - err = msgp.WrapError(err, "Stats", za0001) - return + + // skip if no fields are to be emitted + if zb0001Len != 0 { + // string "Hostname" + o = append(o, 0xa8, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65) + o = msgp.AppendString(o, z.Hostname) + // string "Env" + o = append(o, 0xa3, 0x45, 0x6e, 0x76) + o = msgp.AppendString(o, z.Env) + // string "Version" + o = append(o, 0xa7, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e) + o = msgp.AppendString(o, z.Version) + if (zb0001Mask & 0x8) == 0 { // if not omitted + // string "Stats" + o = append(o, 0xa5, 0x53, 0x74, 0x61, 0x74, 0x73) + o = msgp.AppendArrayHeader(o, uint32(len(z.Stats))) + for za0001 := range z.Stats { + if z.Stats[za0001] == nil { + o = msgp.AppendNil(o) + } else { + o, err = z.Stats[za0001].MarshalMsg(o) + if err != nil { + err = msgp.WrapError(err, "Stats", za0001) + return + } } } } + // string "Lang" + o = append(o, 0xa4, 0x4c, 0x61, 0x6e, 0x67) + o = msgp.AppendString(o, z.Lang) + // string "TracerVersion" + o = append(o, 0xad, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e) + o = msgp.AppendString(o, z.TracerVersion) + // string "RuntimeID" + o = append(o, 0xa9, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x44) + o = msgp.AppendString(o, z.RuntimeID) + // string "Sequence" + o = append(o, 0xa8, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65) + o = msgp.AppendUint64(o, z.Sequence) + // string "AgentAggregation" + o = append(o, 0xb0, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e) + o = msgp.AppendString(o, z.AgentAggregation) + // string "Service" + o = append(o, 0xa7, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65) + o = msgp.AppendString(o, z.Service) + // string "ContainerID" + o = append(o, 0xab, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44) + o = msgp.AppendString(o, z.ContainerID) + // string "Tags" + o = append(o, 0xa4, 0x54, 0x61, 0x67, 0x73) + o = msgp.AppendArrayHeader(o, uint32(len(z.Tags))) + for za0002 := range z.Tags { + o = msgp.AppendString(o, z.Tags[za0002]) + } + // string "GitCommitSha" + o = append(o, 0xac, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x68, 0x61) + o = msgp.AppendString(o, z.GitCommitSha) + // string "ImageTag" + o = append(o, 0xa8, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x61, 0x67) + o = msgp.AppendString(o, z.ImageTag) } - // string "Lang" - o = append(o, 0xa4, 0x4c, 0x61, 0x6e, 0x67) - o = msgp.AppendString(o, z.Lang) - // string "TracerVersion" - o = append(o, 0xad, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e) - o = msgp.AppendString(o, z.TracerVersion) - // string "RuntimeID" - o = append(o, 0xa9, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x44) - o = msgp.AppendString(o, z.RuntimeID) - // string "Sequence" - o = append(o, 0xa8, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65) - o = msgp.AppendUint64(o, z.Sequence) - // string "AgentAggregation" - o = append(o, 0xb0, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e) - o = msgp.AppendString(o, z.AgentAggregation) - // string "Service" - o = append(o, 0xa7, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65) - o = msgp.AppendString(o, z.Service) - // string "ContainerID" - o = append(o, 0xab, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44) - o = msgp.AppendString(o, z.ContainerID) - // string "Tags" - o = append(o, 0xa4, 0x54, 0x61, 0x67, 0x73) - o = msgp.AppendArrayHeader(o, uint32(len(z.Tags))) - for za0002 := range z.Tags { - o = msgp.AppendString(o, z.Tags[za0002]) - } - // string "GitCommitSha" - o = append(o, 0xac, 0x47, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x53, 0x68, 0x61) - o = msgp.AppendString(o, z.GitCommitSha) - // string "ImageTag" - o = append(o, 0xa8, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x54, 0x61, 0x67) - o = msgp.AppendString(o, z.ImageTag) return } @@ -1492,9 +1500,10 @@ func (z *StatsPayload) DecodeMsg(dc *msgp.Reader) (err error) { // EncodeMsg implements msgp.Encodable func (z *StatsPayload) EncodeMsg(en *msgp.Writer) (err error) { - // omitempty: check for empty values + // check for omitted fields zb0001Len := uint32(6) var zb0001Mask uint8 /* 6 bits */ + _ = zb0001Mask if z.Stats == nil { zb0001Len-- zb0001Mask |= 0x4 @@ -1504,84 +1513,85 @@ func (z *StatsPayload) EncodeMsg(en *msgp.Writer) (err error) { if err != nil { return } - if zb0001Len == 0 { - return - } - // write "AgentHostname" - err = en.Append(0xad, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65) - if err != nil { - return - } - err = en.WriteString(z.AgentHostname) - if err != nil { - err = msgp.WrapError(err, "AgentHostname") - return - } - // write "AgentEnv" - err = en.Append(0xa8, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x76) - if err != nil { - return - } - err = en.WriteString(z.AgentEnv) - if err != nil { - err = msgp.WrapError(err, "AgentEnv") - return - } - if (zb0001Mask & 0x4) == 0 { // if not empty - // write "Stats" - err = en.Append(0xa5, 0x53, 0x74, 0x61, 0x74, 0x73) + + // skip if no fields are to be emitted + if zb0001Len != 0 { + // write "AgentHostname" + err = en.Append(0xad, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65) if err != nil { return } - err = en.WriteArrayHeader(uint32(len(z.Stats))) + err = en.WriteString(z.AgentHostname) if err != nil { - err = msgp.WrapError(err, "Stats") + err = msgp.WrapError(err, "AgentHostname") return } - for za0001 := range z.Stats { - if z.Stats[za0001] == nil { - err = en.WriteNil() - if err != nil { - return - } - } else { - err = z.Stats[za0001].EncodeMsg(en) - if err != nil { - err = msgp.WrapError(err, "Stats", za0001) - return + // write "AgentEnv" + err = en.Append(0xa8, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x76) + if err != nil { + return + } + err = en.WriteString(z.AgentEnv) + if err != nil { + err = msgp.WrapError(err, "AgentEnv") + return + } + if (zb0001Mask & 0x4) == 0 { // if not omitted + // write "Stats" + err = en.Append(0xa5, 0x53, 0x74, 0x61, 0x74, 0x73) + if err != nil { + return + } + err = en.WriteArrayHeader(uint32(len(z.Stats))) + if err != nil { + err = msgp.WrapError(err, "Stats") + return + } + for za0001 := range z.Stats { + if z.Stats[za0001] == nil { + err = en.WriteNil() + if err != nil { + return + } + } else { + err = z.Stats[za0001].EncodeMsg(en) + if err != nil { + err = msgp.WrapError(err, "Stats", za0001) + return + } } } } - } - // write "AgentVersion" - err = en.Append(0xac, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e) - if err != nil { - return - } - err = en.WriteString(z.AgentVersion) - if err != nil { - err = msgp.WrapError(err, "AgentVersion") - return - } - // write "ClientComputed" - err = en.Append(0xae, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64) - if err != nil { - return - } - err = en.WriteBool(z.ClientComputed) - if err != nil { - err = msgp.WrapError(err, "ClientComputed") - return - } - // write "SplitPayload" - err = en.Append(0xac, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64) - if err != nil { - return - } - err = en.WriteBool(z.SplitPayload) - if err != nil { - err = msgp.WrapError(err, "SplitPayload") - return + // write "AgentVersion" + err = en.Append(0xac, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e) + if err != nil { + return + } + err = en.WriteString(z.AgentVersion) + if err != nil { + err = msgp.WrapError(err, "AgentVersion") + return + } + // write "ClientComputed" + err = en.Append(0xae, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64) + if err != nil { + return + } + err = en.WriteBool(z.ClientComputed) + if err != nil { + err = msgp.WrapError(err, "ClientComputed") + return + } + // write "SplitPayload" + err = en.Append(0xac, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64) + if err != nil { + return + } + err = en.WriteBool(z.SplitPayload) + if err != nil { + err = msgp.WrapError(err, "SplitPayload") + return + } } return } @@ -1589,49 +1599,51 @@ func (z *StatsPayload) EncodeMsg(en *msgp.Writer) (err error) { // MarshalMsg implements msgp.Marshaler func (z *StatsPayload) MarshalMsg(b []byte) (o []byte, err error) { o = msgp.Require(b, z.Msgsize()) - // omitempty: check for empty values + // check for omitted fields zb0001Len := uint32(6) var zb0001Mask uint8 /* 6 bits */ + _ = zb0001Mask if z.Stats == nil { zb0001Len-- zb0001Mask |= 0x4 } // variable map header, size zb0001Len o = append(o, 0x80|uint8(zb0001Len)) - if zb0001Len == 0 { - return - } - // string "AgentHostname" - o = append(o, 0xad, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65) - o = msgp.AppendString(o, z.AgentHostname) - // string "AgentEnv" - o = append(o, 0xa8, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x76) - o = msgp.AppendString(o, z.AgentEnv) - if (zb0001Mask & 0x4) == 0 { // if not empty - // string "Stats" - o = append(o, 0xa5, 0x53, 0x74, 0x61, 0x74, 0x73) - o = msgp.AppendArrayHeader(o, uint32(len(z.Stats))) - for za0001 := range z.Stats { - if z.Stats[za0001] == nil { - o = msgp.AppendNil(o) - } else { - o, err = z.Stats[za0001].MarshalMsg(o) - if err != nil { - err = msgp.WrapError(err, "Stats", za0001) - return + + // skip if no fields are to be emitted + if zb0001Len != 0 { + // string "AgentHostname" + o = append(o, 0xad, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65) + o = msgp.AppendString(o, z.AgentHostname) + // string "AgentEnv" + o = append(o, 0xa8, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x76) + o = msgp.AppendString(o, z.AgentEnv) + if (zb0001Mask & 0x4) == 0 { // if not omitted + // string "Stats" + o = append(o, 0xa5, 0x53, 0x74, 0x61, 0x74, 0x73) + o = msgp.AppendArrayHeader(o, uint32(len(z.Stats))) + for za0001 := range z.Stats { + if z.Stats[za0001] == nil { + o = msgp.AppendNil(o) + } else { + o, err = z.Stats[za0001].MarshalMsg(o) + if err != nil { + err = msgp.WrapError(err, "Stats", za0001) + return + } } } } + // string "AgentVersion" + o = append(o, 0xac, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e) + o = msgp.AppendString(o, z.AgentVersion) + // string "ClientComputed" + o = append(o, 0xae, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64) + o = msgp.AppendBool(o, z.ClientComputed) + // string "SplitPayload" + o = append(o, 0xac, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64) + o = msgp.AppendBool(o, z.SplitPayload) } - // string "AgentVersion" - o = append(o, 0xac, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e) - o = msgp.AppendString(o, z.AgentVersion) - // string "ClientComputed" - o = append(o, 0xae, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64) - o = msgp.AppendBool(o, z.ClientComputed) - // string "SplitPayload" - o = append(o, 0xac, 0x53, 0x70, 0x6c, 0x69, 0x74, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64) - o = msgp.AppendBool(o, z.SplitPayload) return } diff --git a/pkg/proto/pbgo/trace/stats_vtproto.pb.go b/pkg/proto/pbgo/trace/stats_vtproto.pb.go index 002bfad30e09e..96141ab5f2164 100644 --- a/pkg/proto/pbgo/trace/stats_vtproto.pb.go +++ b/pkg/proto/pbgo/trace/stats_vtproto.pb.go @@ -1,11 +1,12 @@ // Code generated by protoc-gen-go-vtproto. DO NOT EDIT. -// protoc-gen-go-vtproto version: v0.4.0 +// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10 // source: datadog/trace/stats.proto package trace import ( fmt "fmt" + protohelpers "github.com/planetscale/vtprotobuf/protohelpers" protoimpl "google.golang.org/protobuf/runtime/protoimpl" io "io" ) @@ -70,7 +71,7 @@ func (m *StatsPayload) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if len(m.AgentVersion) > 0 { i -= len(m.AgentVersion) copy(dAtA[i:], m.AgentVersion) - i = encodeVarint(dAtA, i, uint64(len(m.AgentVersion))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.AgentVersion))) i-- dAtA[i] = 0x22 } @@ -81,7 +82,7 @@ func (m *StatsPayload) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return 0, err } i -= size - i = encodeVarint(dAtA, i, uint64(size)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) i-- dAtA[i] = 0x1a } @@ -89,14 +90,14 @@ func (m *StatsPayload) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if len(m.AgentEnv) > 0 { i -= len(m.AgentEnv) copy(dAtA[i:], m.AgentEnv) - i = encodeVarint(dAtA, i, uint64(len(m.AgentEnv))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.AgentEnv))) i-- dAtA[i] = 0x12 } if len(m.AgentHostname) > 0 { i -= len(m.AgentHostname) copy(dAtA[i:], m.AgentHostname) - i = encodeVarint(dAtA, i, uint64(len(m.AgentHostname))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.AgentHostname))) i-- dAtA[i] = 0xa } @@ -136,14 +137,14 @@ func (m *ClientStatsPayload) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if len(m.ImageTag) > 0 { i -= len(m.ImageTag) copy(dAtA[i:], m.ImageTag) - i = encodeVarint(dAtA, i, uint64(len(m.ImageTag))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ImageTag))) i-- dAtA[i] = 0x72 } if len(m.GitCommitSha) > 0 { i -= len(m.GitCommitSha) copy(dAtA[i:], m.GitCommitSha) - i = encodeVarint(dAtA, i, uint64(len(m.GitCommitSha))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.GitCommitSha))) i-- dAtA[i] = 0x6a } @@ -151,7 +152,7 @@ func (m *ClientStatsPayload) MarshalToSizedBufferVT(dAtA []byte) (int, error) { for iNdEx := len(m.Tags) - 1; iNdEx >= 0; iNdEx-- { i -= len(m.Tags[iNdEx]) copy(dAtA[i:], m.Tags[iNdEx]) - i = encodeVarint(dAtA, i, uint64(len(m.Tags[iNdEx]))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Tags[iNdEx]))) i-- dAtA[i] = 0x62 } @@ -159,47 +160,47 @@ func (m *ClientStatsPayload) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if len(m.ContainerID) > 0 { i -= len(m.ContainerID) copy(dAtA[i:], m.ContainerID) - i = encodeVarint(dAtA, i, uint64(len(m.ContainerID))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ContainerID))) i-- dAtA[i] = 0x5a } if len(m.Service) > 0 { i -= len(m.Service) copy(dAtA[i:], m.Service) - i = encodeVarint(dAtA, i, uint64(len(m.Service))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Service))) i-- dAtA[i] = 0x52 } if len(m.AgentAggregation) > 0 { i -= len(m.AgentAggregation) copy(dAtA[i:], m.AgentAggregation) - i = encodeVarint(dAtA, i, uint64(len(m.AgentAggregation))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.AgentAggregation))) i-- dAtA[i] = 0x4a } if m.Sequence != 0 { - i = encodeVarint(dAtA, i, uint64(m.Sequence)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Sequence)) i-- dAtA[i] = 0x40 } if len(m.RuntimeID) > 0 { i -= len(m.RuntimeID) copy(dAtA[i:], m.RuntimeID) - i = encodeVarint(dAtA, i, uint64(len(m.RuntimeID))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.RuntimeID))) i-- dAtA[i] = 0x3a } if len(m.TracerVersion) > 0 { i -= len(m.TracerVersion) copy(dAtA[i:], m.TracerVersion) - i = encodeVarint(dAtA, i, uint64(len(m.TracerVersion))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TracerVersion))) i-- dAtA[i] = 0x32 } if len(m.Lang) > 0 { i -= len(m.Lang) copy(dAtA[i:], m.Lang) - i = encodeVarint(dAtA, i, uint64(len(m.Lang))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Lang))) i-- dAtA[i] = 0x2a } @@ -210,7 +211,7 @@ func (m *ClientStatsPayload) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return 0, err } i -= size - i = encodeVarint(dAtA, i, uint64(size)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) i-- dAtA[i] = 0x22 } @@ -218,21 +219,21 @@ func (m *ClientStatsPayload) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if len(m.Version) > 0 { i -= len(m.Version) copy(dAtA[i:], m.Version) - i = encodeVarint(dAtA, i, uint64(len(m.Version))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Version))) i-- dAtA[i] = 0x1a } if len(m.Env) > 0 { i -= len(m.Env) copy(dAtA[i:], m.Env) - i = encodeVarint(dAtA, i, uint64(len(m.Env))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Env))) i-- dAtA[i] = 0x12 } if len(m.Hostname) > 0 { i -= len(m.Hostname) copy(dAtA[i:], m.Hostname) - i = encodeVarint(dAtA, i, uint64(len(m.Hostname))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Hostname))) i-- dAtA[i] = 0xa } @@ -270,7 +271,7 @@ func (m *ClientStatsBucket) MarshalToSizedBufferVT(dAtA []byte) (int, error) { copy(dAtA[i:], m.unknownFields) } if m.AgentTimeShift != 0 { - i = encodeVarint(dAtA, i, uint64(m.AgentTimeShift)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.AgentTimeShift)) i-- dAtA[i] = 0x20 } @@ -281,18 +282,18 @@ func (m *ClientStatsBucket) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return 0, err } i -= size - i = encodeVarint(dAtA, i, uint64(size)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) i-- dAtA[i] = 0x1a } } if m.Duration != 0 { - i = encodeVarint(dAtA, i, uint64(m.Duration)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Duration)) i-- dAtA[i] = 0x10 } if m.Start != 0 { - i = encodeVarint(dAtA, i, uint64(m.Start)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Start)) i-- dAtA[i] = 0x8 } @@ -330,7 +331,7 @@ func (m *ClientGroupedStats) MarshalToSizedBufferVT(dAtA []byte) (int, error) { copy(dAtA[i:], m.unknownFields) } if m.IsTraceRoot != 0 { - i = encodeVarint(dAtA, i, uint64(m.IsTraceRoot)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.IsTraceRoot)) i-- dAtA[i] = 0x1 i-- @@ -340,7 +341,7 @@ func (m *ClientGroupedStats) MarshalToSizedBufferVT(dAtA []byte) (int, error) { for iNdEx := len(m.PeerTags) - 1; iNdEx >= 0; iNdEx-- { i -= len(m.PeerTags[iNdEx]) copy(dAtA[i:], m.PeerTags[iNdEx]) - i = encodeVarint(dAtA, i, uint64(len(m.PeerTags[iNdEx]))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.PeerTags[iNdEx]))) i-- dAtA[i] = 0x1 i-- @@ -350,12 +351,12 @@ func (m *ClientGroupedStats) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if len(m.SpanKind) > 0 { i -= len(m.SpanKind) copy(dAtA[i:], m.SpanKind) - i = encodeVarint(dAtA, i, uint64(len(m.SpanKind))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.SpanKind))) i-- dAtA[i] = 0x7a } if m.TopLevelHits != 0 { - i = encodeVarint(dAtA, i, uint64(m.TopLevelHits)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.TopLevelHits)) i-- dAtA[i] = 0x68 } @@ -372,69 +373,69 @@ func (m *ClientGroupedStats) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if len(m.ErrorSummary) > 0 { i -= len(m.ErrorSummary) copy(dAtA[i:], m.ErrorSummary) - i = encodeVarint(dAtA, i, uint64(len(m.ErrorSummary))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ErrorSummary))) i-- dAtA[i] = 0x5a } if len(m.OkSummary) > 0 { i -= len(m.OkSummary) copy(dAtA[i:], m.OkSummary) - i = encodeVarint(dAtA, i, uint64(len(m.OkSummary))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.OkSummary))) i-- dAtA[i] = 0x52 } if m.Duration != 0 { - i = encodeVarint(dAtA, i, uint64(m.Duration)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Duration)) i-- dAtA[i] = 0x48 } if m.Errors != 0 { - i = encodeVarint(dAtA, i, uint64(m.Errors)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Errors)) i-- dAtA[i] = 0x40 } if m.Hits != 0 { - i = encodeVarint(dAtA, i, uint64(m.Hits)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Hits)) i-- dAtA[i] = 0x38 } if len(m.DBType) > 0 { i -= len(m.DBType) copy(dAtA[i:], m.DBType) - i = encodeVarint(dAtA, i, uint64(len(m.DBType))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.DBType))) i-- dAtA[i] = 0x32 } if len(m.Type) > 0 { i -= len(m.Type) copy(dAtA[i:], m.Type) - i = encodeVarint(dAtA, i, uint64(len(m.Type))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Type))) i-- dAtA[i] = 0x2a } if m.HTTPStatusCode != 0 { - i = encodeVarint(dAtA, i, uint64(m.HTTPStatusCode)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.HTTPStatusCode)) i-- dAtA[i] = 0x20 } if len(m.Resource) > 0 { i -= len(m.Resource) copy(dAtA[i:], m.Resource) - i = encodeVarint(dAtA, i, uint64(len(m.Resource))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Resource))) i-- dAtA[i] = 0x1a } if len(m.Name) > 0 { i -= len(m.Name) copy(dAtA[i:], m.Name) - i = encodeVarint(dAtA, i, uint64(len(m.Name))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Name))) i-- dAtA[i] = 0x12 } if len(m.Service) > 0 { i -= len(m.Service) copy(dAtA[i:], m.Service) - i = encodeVarint(dAtA, i, uint64(len(m.Service))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Service))) i-- dAtA[i] = 0xa } @@ -449,21 +450,21 @@ func (m *StatsPayload) SizeVT() (n int) { _ = l l = len(m.AgentHostname) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.AgentEnv) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } if len(m.Stats) > 0 { for _, e := range m.Stats { l = e.SizeVT() - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } } l = len(m.AgentVersion) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } if m.ClientComputed { n += 2 @@ -483,62 +484,62 @@ func (m *ClientStatsPayload) SizeVT() (n int) { _ = l l = len(m.Hostname) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.Env) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.Version) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } if len(m.Stats) > 0 { for _, e := range m.Stats { l = e.SizeVT() - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } } l = len(m.Lang) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.TracerVersion) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.RuntimeID) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } if m.Sequence != 0 { - n += 1 + sov(uint64(m.Sequence)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.Sequence)) } l = len(m.AgentAggregation) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.Service) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.ContainerID) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } if len(m.Tags) > 0 { for _, s := range m.Tags { l = len(s) - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } } l = len(m.GitCommitSha) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.ImageTag) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } n += len(m.unknownFields) return n @@ -551,19 +552,19 @@ func (m *ClientStatsBucket) SizeVT() (n int) { var l int _ = l if m.Start != 0 { - n += 1 + sov(uint64(m.Start)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.Start)) } if m.Duration != 0 { - n += 1 + sov(uint64(m.Duration)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.Duration)) } if len(m.Stats) > 0 { for _, e := range m.Stats { l = e.SizeVT() - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } } if m.AgentTimeShift != 0 { - n += 1 + sov(uint64(m.AgentTimeShift)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.AgentTimeShift)) } n += len(m.unknownFields) return n @@ -577,62 +578,62 @@ func (m *ClientGroupedStats) SizeVT() (n int) { _ = l l = len(m.Service) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.Name) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.Resource) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } if m.HTTPStatusCode != 0 { - n += 1 + sov(uint64(m.HTTPStatusCode)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.HTTPStatusCode)) } l = len(m.Type) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.DBType) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } if m.Hits != 0 { - n += 1 + sov(uint64(m.Hits)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.Hits)) } if m.Errors != 0 { - n += 1 + sov(uint64(m.Errors)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.Errors)) } if m.Duration != 0 { - n += 1 + sov(uint64(m.Duration)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.Duration)) } l = len(m.OkSummary) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.ErrorSummary) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } if m.Synthetics { n += 2 } if m.TopLevelHits != 0 { - n += 1 + sov(uint64(m.TopLevelHits)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.TopLevelHits)) } l = len(m.SpanKind) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } if len(m.PeerTags) > 0 { for _, s := range m.PeerTags { l = len(s) - n += 2 + l + sov(uint64(l)) + n += 2 + l + protohelpers.SizeOfVarint(uint64(l)) } } if m.IsTraceRoot != 0 { - n += 2 + sov(uint64(m.IsTraceRoot)) + n += 2 + protohelpers.SizeOfVarint(uint64(m.IsTraceRoot)) } n += len(m.unknownFields) return n @@ -646,7 +647,7 @@ func (m *StatsPayload) UnmarshalVT(dAtA []byte) error { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -674,7 +675,7 @@ func (m *StatsPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -688,11 +689,11 @@ func (m *StatsPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -706,7 +707,7 @@ func (m *StatsPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -720,11 +721,11 @@ func (m *StatsPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -738,7 +739,7 @@ func (m *StatsPayload) UnmarshalVT(dAtA []byte) error { var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -751,11 +752,11 @@ func (m *StatsPayload) UnmarshalVT(dAtA []byte) error { } } if msglen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + msglen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -772,7 +773,7 @@ func (m *StatsPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -786,11 +787,11 @@ func (m *StatsPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -804,7 +805,7 @@ func (m *StatsPayload) UnmarshalVT(dAtA []byte) error { var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -824,7 +825,7 @@ func (m *StatsPayload) UnmarshalVT(dAtA []byte) error { var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -839,12 +840,12 @@ func (m *StatsPayload) UnmarshalVT(dAtA []byte) error { m.SplitPayload = bool(v != 0) default: iNdEx = preIndex - skippy, err := skip(dAtA[iNdEx:]) + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF @@ -867,7 +868,7 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -895,7 +896,7 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -909,11 +910,11 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -927,7 +928,7 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -941,11 +942,11 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -959,7 +960,7 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -973,11 +974,11 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -991,7 +992,7 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1004,11 +1005,11 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { } } if msglen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + msglen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1025,7 +1026,7 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1039,11 +1040,11 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1057,7 +1058,7 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1071,11 +1072,11 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1089,7 +1090,7 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1103,11 +1104,11 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1121,7 +1122,7 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { m.Sequence = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1140,7 +1141,7 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1154,11 +1155,11 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1172,7 +1173,7 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1186,11 +1187,11 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1204,7 +1205,7 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1218,11 +1219,11 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1236,7 +1237,7 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1250,11 +1251,11 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1268,7 +1269,7 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1282,11 +1283,11 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1300,7 +1301,7 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1314,11 +1315,11 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1327,12 +1328,12 @@ func (m *ClientStatsPayload) UnmarshalVT(dAtA []byte) error { iNdEx = postIndex default: iNdEx = preIndex - skippy, err := skip(dAtA[iNdEx:]) + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF @@ -1355,7 +1356,7 @@ func (m *ClientStatsBucket) UnmarshalVT(dAtA []byte) error { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1383,7 +1384,7 @@ func (m *ClientStatsBucket) UnmarshalVT(dAtA []byte) error { m.Start = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1402,7 +1403,7 @@ func (m *ClientStatsBucket) UnmarshalVT(dAtA []byte) error { m.Duration = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1421,7 +1422,7 @@ func (m *ClientStatsBucket) UnmarshalVT(dAtA []byte) error { var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1434,11 +1435,11 @@ func (m *ClientStatsBucket) UnmarshalVT(dAtA []byte) error { } } if msglen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + msglen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1455,7 +1456,7 @@ func (m *ClientStatsBucket) UnmarshalVT(dAtA []byte) error { m.AgentTimeShift = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1469,12 +1470,12 @@ func (m *ClientStatsBucket) UnmarshalVT(dAtA []byte) error { } default: iNdEx = preIndex - skippy, err := skip(dAtA[iNdEx:]) + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF @@ -1497,7 +1498,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1525,7 +1526,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1539,11 +1540,11 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1557,7 +1558,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1571,11 +1572,11 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1589,7 +1590,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1603,11 +1604,11 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1621,7 +1622,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { m.HTTPStatusCode = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1640,7 +1641,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1654,11 +1655,11 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1672,7 +1673,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1686,11 +1687,11 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1704,7 +1705,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { m.Hits = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1723,7 +1724,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { m.Errors = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1742,7 +1743,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { m.Duration = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1761,7 +1762,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1774,11 +1775,11 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { } } if byteLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + byteLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1795,7 +1796,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1808,11 +1809,11 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { } } if byteLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + byteLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1829,7 +1830,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1849,7 +1850,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { m.TopLevelHits = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1868,7 +1869,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1882,11 +1883,11 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1900,7 +1901,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1914,11 +1915,11 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1932,7 +1933,7 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { m.IsTraceRoot = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1946,12 +1947,12 @@ func (m *ClientGroupedStats) UnmarshalVT(dAtA []byte) error { } default: iNdEx = preIndex - skippy, err := skip(dAtA[iNdEx:]) + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF diff --git a/pkg/proto/pbgo/trace/tracer_payload.pb.go b/pkg/proto/pbgo/trace/tracer_payload.pb.go index 7e7e2b0cc278e..0420fc5b12ca2 100644 --- a/pkg/proto/pbgo/trace/tracer_payload.pb.go +++ b/pkg/proto/pbgo/trace/tracer_payload.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.35.2 // protoc v5.26.1 // source: datadog/trace/tracer_payload.proto @@ -45,11 +45,9 @@ type TraceChunk struct { func (x *TraceChunk) Reset() { *x = TraceChunk{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_trace_tracer_payload_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_trace_tracer_payload_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TraceChunk) String() string { @@ -60,7 +58,7 @@ func (*TraceChunk) ProtoMessage() {} func (x *TraceChunk) ProtoReflect() protoreflect.Message { mi := &file_datadog_trace_tracer_payload_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -150,11 +148,9 @@ type TracerPayload struct { func (x *TracerPayload) Reset() { *x = TracerPayload{} - if protoimpl.UnsafeEnabled { - mi := &file_datadog_trace_tracer_payload_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_datadog_trace_tracer_payload_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TracerPayload) String() string { @@ -165,7 +161,7 @@ func (*TracerPayload) ProtoMessage() {} func (x *TracerPayload) ProtoReflect() protoreflect.Message { mi := &file_datadog_trace_tracer_payload_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -319,7 +315,7 @@ func file_datadog_trace_tracer_payload_proto_rawDescGZIP() []byte { } var file_datadog_trace_tracer_payload_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_datadog_trace_tracer_payload_proto_goTypes = []interface{}{ +var file_datadog_trace_tracer_payload_proto_goTypes = []any{ (*TraceChunk)(nil), // 0: datadog.trace.TraceChunk (*TracerPayload)(nil), // 1: datadog.trace.TracerPayload nil, // 2: datadog.trace.TraceChunk.TagsEntry @@ -344,32 +340,6 @@ func file_datadog_trace_tracer_payload_proto_init() { return } file_datadog_trace_span_proto_init() - if !protoimpl.UnsafeEnabled { - file_datadog_trace_tracer_payload_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TraceChunk); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_datadog_trace_tracer_payload_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TracerPayload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/pkg/proto/pbgo/trace/tracer_payload_vtproto.pb.go b/pkg/proto/pbgo/trace/tracer_payload_vtproto.pb.go index b1544fa221ae2..b63a2fd37b2c2 100644 --- a/pkg/proto/pbgo/trace/tracer_payload_vtproto.pb.go +++ b/pkg/proto/pbgo/trace/tracer_payload_vtproto.pb.go @@ -1,11 +1,12 @@ // Code generated by protoc-gen-go-vtproto. DO NOT EDIT. -// protoc-gen-go-vtproto version: v0.4.0 +// protoc-gen-go-vtproto version: v0.6.1-0.20240319094008-0393e58bdf10 // source: datadog/trace/tracer_payload.proto package trace import ( fmt "fmt" + protohelpers "github.com/planetscale/vtprotobuf/protohelpers" protoimpl "google.golang.org/protobuf/runtime/protoimpl" io "io" ) @@ -63,15 +64,15 @@ func (m *TraceChunk) MarshalToSizedBufferVT(dAtA []byte) (int, error) { baseI := i i -= len(v) copy(dAtA[i:], v) - i = encodeVarint(dAtA, i, uint64(len(v))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(v))) i-- dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) - i = encodeVarint(dAtA, i, uint64(len(k))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(k))) i-- dAtA[i] = 0xa - i = encodeVarint(dAtA, i, uint64(baseI-i)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(baseI-i)) i-- dAtA[i] = 0x22 } @@ -83,7 +84,7 @@ func (m *TraceChunk) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return 0, err } i -= size - i = encodeVarint(dAtA, i, uint64(size)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) i-- dAtA[i] = 0x1a } @@ -91,12 +92,12 @@ func (m *TraceChunk) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if len(m.Origin) > 0 { i -= len(m.Origin) copy(dAtA[i:], m.Origin) - i = encodeVarint(dAtA, i, uint64(len(m.Origin))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Origin))) i-- dAtA[i] = 0x12 } if m.Priority != 0 { - i = encodeVarint(dAtA, i, uint64(m.Priority)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(m.Priority)) i-- dAtA[i] = 0x8 } @@ -136,21 +137,21 @@ func (m *TracerPayload) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if len(m.AppVersion) > 0 { i -= len(m.AppVersion) copy(dAtA[i:], m.AppVersion) - i = encodeVarint(dAtA, i, uint64(len(m.AppVersion))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.AppVersion))) i-- dAtA[i] = 0x52 } if len(m.Hostname) > 0 { i -= len(m.Hostname) copy(dAtA[i:], m.Hostname) - i = encodeVarint(dAtA, i, uint64(len(m.Hostname))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Hostname))) i-- dAtA[i] = 0x4a } if len(m.Env) > 0 { i -= len(m.Env) copy(dAtA[i:], m.Env) - i = encodeVarint(dAtA, i, uint64(len(m.Env))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Env))) i-- dAtA[i] = 0x42 } @@ -160,15 +161,15 @@ func (m *TracerPayload) MarshalToSizedBufferVT(dAtA []byte) (int, error) { baseI := i i -= len(v) copy(dAtA[i:], v) - i = encodeVarint(dAtA, i, uint64(len(v))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(v))) i-- dAtA[i] = 0x12 i -= len(k) copy(dAtA[i:], k) - i = encodeVarint(dAtA, i, uint64(len(k))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(k))) i-- dAtA[i] = 0xa - i = encodeVarint(dAtA, i, uint64(baseI-i)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(baseI-i)) i-- dAtA[i] = 0x3a } @@ -180,7 +181,7 @@ func (m *TracerPayload) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return 0, err } i -= size - i = encodeVarint(dAtA, i, uint64(size)) + i = protohelpers.EncodeVarint(dAtA, i, uint64(size)) i-- dAtA[i] = 0x32 } @@ -188,35 +189,35 @@ func (m *TracerPayload) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if len(m.RuntimeID) > 0 { i -= len(m.RuntimeID) copy(dAtA[i:], m.RuntimeID) - i = encodeVarint(dAtA, i, uint64(len(m.RuntimeID))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.RuntimeID))) i-- dAtA[i] = 0x2a } if len(m.TracerVersion) > 0 { i -= len(m.TracerVersion) copy(dAtA[i:], m.TracerVersion) - i = encodeVarint(dAtA, i, uint64(len(m.TracerVersion))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.TracerVersion))) i-- dAtA[i] = 0x22 } if len(m.LanguageVersion) > 0 { i -= len(m.LanguageVersion) copy(dAtA[i:], m.LanguageVersion) - i = encodeVarint(dAtA, i, uint64(len(m.LanguageVersion))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.LanguageVersion))) i-- dAtA[i] = 0x1a } if len(m.LanguageName) > 0 { i -= len(m.LanguageName) copy(dAtA[i:], m.LanguageName) - i = encodeVarint(dAtA, i, uint64(len(m.LanguageName))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.LanguageName))) i-- dAtA[i] = 0x12 } if len(m.ContainerID) > 0 { i -= len(m.ContainerID) copy(dAtA[i:], m.ContainerID) - i = encodeVarint(dAtA, i, uint64(len(m.ContainerID))) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.ContainerID))) i-- dAtA[i] = 0xa } @@ -230,24 +231,24 @@ func (m *TraceChunk) SizeVT() (n int) { var l int _ = l if m.Priority != 0 { - n += 1 + sov(uint64(m.Priority)) + n += 1 + protohelpers.SizeOfVarint(uint64(m.Priority)) } l = len(m.Origin) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } if len(m.Spans) > 0 { for _, e := range m.Spans { l = e.SizeVT() - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } } if len(m.Tags) > 0 { for k, v := range m.Tags { _ = k _ = v - mapEntrySize := 1 + len(k) + sov(uint64(len(k))) + 1 + len(v) + sov(uint64(len(v))) - n += mapEntrySize + 1 + sov(uint64(mapEntrySize)) + mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + 1 + len(v) + protohelpers.SizeOfVarint(uint64(len(v))) + n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize)) } } if m.DroppedTrace { @@ -265,49 +266,49 @@ func (m *TracerPayload) SizeVT() (n int) { _ = l l = len(m.ContainerID) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.LanguageName) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.LanguageVersion) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.TracerVersion) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.RuntimeID) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } if len(m.Chunks) > 0 { for _, e := range m.Chunks { l = e.SizeVT() - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } } if len(m.Tags) > 0 { for k, v := range m.Tags { _ = k _ = v - mapEntrySize := 1 + len(k) + sov(uint64(len(k))) + 1 + len(v) + sov(uint64(len(v))) - n += mapEntrySize + 1 + sov(uint64(mapEntrySize)) + mapEntrySize := 1 + len(k) + protohelpers.SizeOfVarint(uint64(len(k))) + 1 + len(v) + protohelpers.SizeOfVarint(uint64(len(v))) + n += mapEntrySize + 1 + protohelpers.SizeOfVarint(uint64(mapEntrySize)) } } l = len(m.Env) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.Hostname) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } l = len(m.AppVersion) if l > 0 { - n += 1 + l + sov(uint64(l)) + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } n += len(m.unknownFields) return n @@ -321,7 +322,7 @@ func (m *TraceChunk) UnmarshalVT(dAtA []byte) error { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -349,7 +350,7 @@ func (m *TraceChunk) UnmarshalVT(dAtA []byte) error { m.Priority = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -368,7 +369,7 @@ func (m *TraceChunk) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -382,11 +383,11 @@ func (m *TraceChunk) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -400,7 +401,7 @@ func (m *TraceChunk) UnmarshalVT(dAtA []byte) error { var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -413,11 +414,11 @@ func (m *TraceChunk) UnmarshalVT(dAtA []byte) error { } } if msglen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + msglen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -434,7 +435,7 @@ func (m *TraceChunk) UnmarshalVT(dAtA []byte) error { var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -447,11 +448,11 @@ func (m *TraceChunk) UnmarshalVT(dAtA []byte) error { } } if msglen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + msglen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -466,7 +467,7 @@ func (m *TraceChunk) UnmarshalVT(dAtA []byte) error { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -483,7 +484,7 @@ func (m *TraceChunk) UnmarshalVT(dAtA []byte) error { var stringLenmapkey uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -497,11 +498,11 @@ func (m *TraceChunk) UnmarshalVT(dAtA []byte) error { } intStringLenmapkey := int(stringLenmapkey) if intStringLenmapkey < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postStringIndexmapkey := iNdEx + intStringLenmapkey if postStringIndexmapkey < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postStringIndexmapkey > l { return io.ErrUnexpectedEOF @@ -512,7 +513,7 @@ func (m *TraceChunk) UnmarshalVT(dAtA []byte) error { var stringLenmapvalue uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -526,11 +527,11 @@ func (m *TraceChunk) UnmarshalVT(dAtA []byte) error { } intStringLenmapvalue := int(stringLenmapvalue) if intStringLenmapvalue < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postStringIndexmapvalue := iNdEx + intStringLenmapvalue if postStringIndexmapvalue < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postStringIndexmapvalue > l { return io.ErrUnexpectedEOF @@ -539,12 +540,12 @@ func (m *TraceChunk) UnmarshalVT(dAtA []byte) error { iNdEx = postStringIndexmapvalue } else { iNdEx = entryPreIndex - skippy, err := skip(dAtA[iNdEx:]) + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if (iNdEx + skippy) > postIndex { return io.ErrUnexpectedEOF @@ -561,7 +562,7 @@ func (m *TraceChunk) UnmarshalVT(dAtA []byte) error { var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -576,12 +577,12 @@ func (m *TraceChunk) UnmarshalVT(dAtA []byte) error { m.DroppedTrace = bool(v != 0) default: iNdEx = preIndex - skippy, err := skip(dAtA[iNdEx:]) + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF @@ -604,7 +605,7 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -632,7 +633,7 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -646,11 +647,11 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -664,7 +665,7 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -678,11 +679,11 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -696,7 +697,7 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -710,11 +711,11 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -728,7 +729,7 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -742,11 +743,11 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -760,7 +761,7 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -774,11 +775,11 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -792,7 +793,7 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -805,11 +806,11 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { } } if msglen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + msglen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -826,7 +827,7 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -839,11 +840,11 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { } } if msglen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + msglen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -858,7 +859,7 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -875,7 +876,7 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { var stringLenmapkey uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -889,11 +890,11 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { } intStringLenmapkey := int(stringLenmapkey) if intStringLenmapkey < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postStringIndexmapkey := iNdEx + intStringLenmapkey if postStringIndexmapkey < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postStringIndexmapkey > l { return io.ErrUnexpectedEOF @@ -904,7 +905,7 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { var stringLenmapvalue uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -918,11 +919,11 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { } intStringLenmapvalue := int(stringLenmapvalue) if intStringLenmapvalue < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postStringIndexmapvalue := iNdEx + intStringLenmapvalue if postStringIndexmapvalue < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postStringIndexmapvalue > l { return io.ErrUnexpectedEOF @@ -931,12 +932,12 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { iNdEx = postStringIndexmapvalue } else { iNdEx = entryPreIndex - skippy, err := skip(dAtA[iNdEx:]) + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if (iNdEx + skippy) > postIndex { return io.ErrUnexpectedEOF @@ -953,7 +954,7 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -967,11 +968,11 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -985,7 +986,7 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -999,11 +1000,11 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1017,7 +1018,7 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { - return ErrIntOverflow + return protohelpers.ErrIntOverflow } if iNdEx >= l { return io.ErrUnexpectedEOF @@ -1031,11 +1032,11 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { } intStringLen := int(stringLen) if intStringLen < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } postIndex := iNdEx + intStringLen if postIndex < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if postIndex > l { return io.ErrUnexpectedEOF @@ -1044,12 +1045,12 @@ func (m *TracerPayload) UnmarshalVT(dAtA []byte) error { iNdEx = postIndex default: iNdEx = preIndex - skippy, err := skip(dAtA[iNdEx:]) + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLength + return protohelpers.ErrInvalidLength } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF diff --git a/pkg/trace/go.mod b/pkg/trace/go.mod index 7d0666e48194e..841d7e3e53b86 100644 --- a/pkg/trace/go.mod +++ b/pkg/trace/go.mod @@ -85,6 +85,7 @@ require ( github.com/outcaste-io/ristretto v0.2.3 // indirect github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect diff --git a/pkg/trace/go.sum b/pkg/trace/go.sum index 2500f28a6512c..70bcf40a80bc6 100644 --- a/pkg/trace/go.sum +++ b/pkg/trace/go.sum @@ -129,6 +129,8 @@ github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1Gsh github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/pkg/trace/stats/oteltest/go.mod b/pkg/trace/stats/oteltest/go.mod index b6992747ee41b..c34d20c5a672f 100644 --- a/pkg/trace/stats/oteltest/go.mod +++ b/pkg/trace/stats/oteltest/go.mod @@ -59,6 +59,7 @@ require ( github.com/outcaste-io/ristretto v0.2.3 // indirect github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect diff --git a/pkg/trace/stats/oteltest/go.sum b/pkg/trace/stats/oteltest/go.sum index 6d97a13321636..0a9aeb5b8e7a1 100644 --- a/pkg/trace/stats/oteltest/go.sum +++ b/pkg/trace/stats/oteltest/go.sum @@ -92,6 +92,8 @@ github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1Gsh github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/test/fakeintake/go.mod b/test/fakeintake/go.mod index 4dd9e30ab4a7d..eeb575694baa4 100644 --- a/test/fakeintake/go.mod +++ b/test/fakeintake/go.mod @@ -45,6 +45,7 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.60.1 // indirect diff --git a/test/fakeintake/go.sum b/test/fakeintake/go.sum index 5eac49258c5fa..c9e0f74e8772b 100644 --- a/test/fakeintake/go.sum +++ b/test/fakeintake/go.sum @@ -60,6 +60,8 @@ github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6 github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1GshSTtih8C2gDs04w8dReiOGXrGLNoY= github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= diff --git a/test/new-e2e/go.mod b/test/new-e2e/go.mod index b24309be06e28..0259ec0295ff5 100644 --- a/test/new-e2e/go.mod +++ b/test/new-e2e/go.mod @@ -302,6 +302,7 @@ require ( github.com/moby/docker-image-spec v1.3.1 // indirect github.com/onsi/ginkgo/v2 v2.20.2 // indirect github.com/onsi/gomega v1.34.1 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pulumi/pulumi-azure-native-sdk/authorization/v2 v2.73.1 // indirect github.com/pulumi/pulumi-azure-native-sdk/compute/v2 v2.73.1 // indirect github.com/pulumi/pulumi-azure-native-sdk/containerservice/v2 v2.73.1 // indirect diff --git a/test/new-e2e/go.sum b/test/new-e2e/go.sum index 762f7309695c4..ce7a63be95459 100644 --- a/test/new-e2e/go.sum +++ b/test/new-e2e/go.sum @@ -385,6 +385,8 @@ github.com/pkg/sftp v1.13.6 h1:JFZT4XbOU7l77xGSpOdW+pwIMqP044IyjXX6FGyEKFo= github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk= github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk= github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/test/otel/go.mod b/test/otel/go.mod index 61cea6579311f..05ff3908f3ad9 100644 --- a/test/otel/go.mod +++ b/test/otel/go.mod @@ -241,6 +241,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/prometheus/client_golang v1.20.5 // indirect diff --git a/test/otel/go.sum b/test/otel/go.sum index a50f250b894a6..d11d5572caf01 100644 --- a/test/otel/go.sum +++ b/test/otel/go.sum @@ -269,6 +269,8 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= From 31ab3497b38a4f4d3bf86e5a7f7d9413bb23482b Mon Sep 17 00:00:00 2001 From: Raphael Gavache Date: Fri, 13 Dec 2024 14:57:27 +0100 Subject: [PATCH 190/303] add djm ownership (#32134) --- .github/CODEOWNERS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9d95d87125138..c810ce499b611 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -433,6 +433,7 @@ /pkg/flare/*_windows.go @Datadog/windows-agent /pkg/flare/*_windows_test.go @Datadog/windows-agent /pkg/fleet/ @DataDog/fleet @DataDog/windows-agent +/pkg/fleet/installer/setup/djm/ @DataDog/fleet @DataDog/data-jobs-monitoring /pkg/pidfile/ @DataDog/agent-shared-components /pkg/persistentcache/ @DataDog/agent-metrics-logs /pkg/proto/ @DataDog/agent-shared-components @@ -622,6 +623,7 @@ /test/new-e2e/tests/apm @DataDog/agent-apm /test/new-e2e/tests/remote-config @DataDog/remote-config /test/new-e2e/tests/installer @DataDog/fleet @DataDog/windows-agent +/test/new-e2e/tests/installer/script @DataDog/fleet @DataDog/data-jobs-monitoring /test/new-e2e/tests/gpu @Datadog/ebpf-platform /test/otel/ @DataDog/opentelemetry /test/system/ @DataDog/agent-shared-components From 3b788c90addd9be12e9f755a4a600edda2f44fe8 Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Fri, 13 Dec 2024 14:57:34 +0100 Subject: [PATCH 191/303] Remove EnableLoggingToFile function on Windows (#31882) --- cmd/agent/common/common_windows.go | 15 --------------- cmd/agent/main_windows.go | 2 -- cmd/iot-agent/main_windows.go | 2 -- 3 files changed, 19 deletions(-) diff --git a/cmd/agent/common/common_windows.go b/cmd/agent/common/common_windows.go index 33d215dccc84a..b3c84d6c66035 100644 --- a/cmd/agent/common/common_windows.go +++ b/cmd/agent/common/common_windows.go @@ -9,9 +9,6 @@ import ( "os" "path/filepath" - //nolint:depguard // creating a logger from a seelog config - "github.com/cihub/seelog" - pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -29,18 +26,6 @@ func init() { } } -// EnableLoggingToFile -- set up logging to file -func EnableLoggingToFile() { - seeConfig := ` - - - - -` - logger, _ := seelog.LoggerFromConfigAsBytes([]byte(seeConfig)) - log.ReplaceLogger(logger) -} - // CheckAndUpgradeConfig checks to see if there's an old datadog.conf, and if // datadog.yaml is either missing or incomplete (no API key). If so, upgrade it func CheckAndUpgradeConfig() error { diff --git a/cmd/agent/main_windows.go b/cmd/agent/main_windows.go index bf4fc6e032a3f..389d880cf50da 100644 --- a/cmd/agent/main_windows.go +++ b/cmd/agent/main_windows.go @@ -11,7 +11,6 @@ import ( "os" "github.com/DataDog/datadog-agent/cmd/agent/command" - "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/cmd/agent/subcommands" "github.com/DataDog/datadog-agent/cmd/agent/windows/service" "github.com/DataDog/datadog-agent/cmd/internal/runcmd" @@ -20,7 +19,6 @@ import ( ) func main() { - common.EnableLoggingToFile() // if command line arguments are supplied, even in a non interactive session, // then just execute that. Used when the service is executing the executable, // for instance to trigger a restart. diff --git a/cmd/iot-agent/main_windows.go b/cmd/iot-agent/main_windows.go index b7a9183b4bcb7..a53048ea9a100 100644 --- a/cmd/iot-agent/main_windows.go +++ b/cmd/iot-agent/main_windows.go @@ -12,7 +12,6 @@ import ( "os" "github.com/DataDog/datadog-agent/cmd/agent/command" - "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/cmd/agent/subcommands" "github.com/DataDog/datadog-agent/cmd/agent/windows/service" "github.com/DataDog/datadog-agent/pkg/util/flavor" @@ -24,7 +23,6 @@ func main() { // set the Agent flavor flavor.SetFlavor(flavor.IotAgent) - common.EnableLoggingToFile() // if command line arguments are supplied, even in a non interactive session, // then just execute that. Used when the service is executing the executable, // for instance to trigger a restart. From 7c5ac02a974b6aad3ca7e73580ffa7f67aac3832 Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Fri, 13 Dec 2024 15:08:42 +0100 Subject: [PATCH 192/303] feat(notify): Add conductor scheduled pipelines to the notification rules (#32094) --- .gitlab/notify/notify.yml | 19 +--- tasks/libs/notify/utils.py | 28 ++++++ tasks/notify.py | 12 ++- tasks/unit_tests/libs/notify/alerts_tests.py | 31 ++++++- tasks/unit_tests/notify_tests.py | 96 ++++++++++++++++++-- 5 files changed, 156 insertions(+), 30 deletions(-) diff --git a/.gitlab/notify/notify.yml b/.gitlab/notify/notify.yml index f40187465a50f..82f996576e57c 100644 --- a/.gitlab/notify/notify.yml +++ b/.gitlab/notify/notify.yml @@ -28,23 +28,8 @@ notify: - GITLAB_TOKEN=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $GITLAB_TOKEN read_api) || exit $?; export GITLAB_TOKEN - DD_API_KEY=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_API_KEY_ORG2 token) || exit $?; export DD_API_KEY - python3 -m pip install -r requirements.txt -r tasks/libs/requirements-notifications.txt - - | - # Do not send notifications if this is a child pipeline of another repo - # The triggering repo should already have its own notification system - if [ "$CI_PIPELINE_SOURCE" != "pipeline" ]; then - if [ "$DEPLOY_AGENT" = "true" ]; then - invoke -e notify.send-message --notification-type "deploy" - elif [ "$CI_PIPELINE_SOURCE" != "push" ]; then - invoke -e notify.send-message --notification-type "trigger" - else - invoke -e notify.send-message --notification-type "merge" - fi - if [ "$CI_COMMIT_BRANCH" = "$CI_DEFAULT_BRANCH" ]; then - invoke notify.check-consistent-failures - fi - else - echo "This pipeline was triggered by another repository, skipping notification." - fi + - invoke -e notify.send-message + - invoke -e notify.check-consistent-failures send_pipeline_stats: stage: notify diff --git a/tasks/libs/notify/utils.py b/tasks/libs/notify/utils.py index c0305184ee81d..d1d803f1b2d64 100644 --- a/tasks/libs/notify/utils.py +++ b/tasks/libs/notify/utils.py @@ -1,5 +1,6 @@ from __future__ import annotations +import os import re from typing import Any from urllib.parse import quote @@ -43,3 +44,30 @@ def get_ci_visibility_job_url( extra_args = ''.join([f'&{key}={value}' for key, value in extra_args.items()]) return CI_VISIBILITY_JOB_URL.format(name=name, extra_flags=extra_flags, extra_args=extra_args) + + +def should_notify(): + """ + Check if the pipeline should notify the channel: only for non-downstream pipelines, unless conductor triggered it + """ + from tasks.libs.ciproviders.gitlab_api import get_pipeline + + CONDUCTOR_ID = 8278 + pipeline = get_pipeline(PROJECT_NAME, os.environ['CI_PIPELINE_ID']) + return ( + os.environ['CI_PIPELINE_SOURCE'] != 'pipeline' + or os.environ['CI_PIPELINE_SOURCE'] == 'pipeline' + and pipeline.user['id'] == CONDUCTOR_ID + ) + + +def notification_type(): + """ + Return the type of notification to send (related to the type of pipeline, amongst 'deploy', 'trigger' and 'merge') + """ + if os.environ['DEPLOY_AGENT'] == 'true': + return 'deploy' + elif os.environ['CI_PIPELINE_SOURCE'] != 'push': + return 'trigger' + else: + return 'merge' diff --git a/tasks/notify.py b/tasks/notify.py index 7cdd97f12b170..f4f9da27c1ce4 100644 --- a/tasks/notify.py +++ b/tasks/notify.py @@ -20,7 +20,7 @@ from tasks.libs.common.utils import gitlab_section from tasks.libs.notify import alerts, failure_summary, pipeline_status from tasks.libs.notify.jira_failing_tests import close_issue, get_failing_tests_names, get_jira -from tasks.libs.notify.utils import PROJECT_NAME +from tasks.libs.notify.utils import PROJECT_NAME, notification_type, should_notify from tasks.libs.pipeline.notifications import ( check_for_missing_owners_slack_and_jira, ) @@ -41,13 +41,16 @@ def check_teams(_): @task -def send_message(ctx: Context, notification_type: str = "merge", dry_run: bool = False): +def send_message(ctx: Context, dry_run: bool = False): """ Send notifications for the current pipeline. CI-only task. Use the --dry-run option to test this locally, without sending real slack messages. """ - pipeline_status.send_message(ctx, notification_type, dry_run) + if should_notify(): + pipeline_status.send_message(ctx, notification_type(), dry_run) + else: + print("This pipeline is a non-conductor downstream pipeline, skipping notifications") @task @@ -87,6 +90,9 @@ def check_consistent_failures(ctx, job_failures_file="job_executions.v2.json"): # The jobs dictionary contains the consecutive and cumulative failures for each job # The consecutive failures are reset to 0 when the job is not failing, and are raising an alert when reaching the CONSECUTIVE_THRESHOLD (3) # The cumulative failures list contains 1 for failures, 0 for succes. They contain only then CUMULATIVE_LENGTH(10) last executions and raise alert when 50% failure rate is reached + if not should_notify() or os.environ['CI_COMMIT_BRANCH'] != os.environ['CI_DEFAULT_BRANCH']: + print("Consistent failures check is only run on the not-downstream default branch") + return job_executions = alerts.retrieve_job_executions(ctx, job_failures_file) diff --git a/tasks/unit_tests/libs/notify/alerts_tests.py b/tasks/unit_tests/libs/notify/alerts_tests.py index ebade3240213c..d1a532c40c417 100644 --- a/tasks/unit_tests/libs/notify/alerts_tests.py +++ b/tasks/unit_tests/libs/notify/alerts_tests.py @@ -30,10 +30,17 @@ def test_job_executions(path="tasks/unit_tests/testdata/job_executions.json"): class TestCheckConsistentFailures(unittest.TestCase): + @patch.dict( + 'os.environ', + { + 'CI_PIPELINE_ID': '456', + 'CI_PIPELINE_SOURCE': 'push', + 'CI_COMMIT_BRANCH': 'taylor-swift', + 'CI_DEFAULT_BRANCH': 'taylor-swift', + }, + ) @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') def test_nominal(self, api_mock): - os.environ["CI_PIPELINE_ID"] = "456" - repo_mock = api_mock.return_value.projects.get.return_value trace_mock = repo_mock.jobs.get.return_value.trace list_mock = repo_mock.pipelines.get.return_value.jobs.list @@ -47,9 +54,29 @@ def test_nominal(self, api_mock): path, ) + repo_mock.jobs.get.assert_called() trace_mock.assert_called() list_mock.assert_called() + @patch.dict( + 'os.environ', + { + 'CI_PIPELINE_ID': '456', + 'CI_PIPELINE_SOURCE': 'push', + 'CI_COMMIT_BRANCH': 'taylor', + 'CI_DEFAULT_BRANCH': 'swift', + }, + ) + @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') + def test_dismiss(self, api_mock): + repo_mock = api_mock.return_value.projects.get.return_value + with test_job_executions() as path: + notify.check_consistent_failures( + MockContext(run=Result("test")), + path, + ) + repo_mock.jobs.get.assert_not_called() + class TestAlertsRetrieveJobExecutionsCreated(unittest.TestCase): job_executions = None diff --git a/tasks/unit_tests/notify_tests.py b/tasks/unit_tests/notify_tests.py index 6e7ddc70abf0a..87c93d579c77d 100644 --- a/tasks/unit_tests/notify_tests.py +++ b/tasks/unit_tests/notify_tests.py @@ -31,22 +31,29 @@ def get_github_slack_map(): class TestSendMessage(unittest.TestCase): - @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') + @patch.dict('os.environ', {'DEPLOY_AGENT': 'false', 'CI_PIPELINE_SOURCE': 'push', 'CI_PIPELINE_ID': '42'}) @patch('tasks.libs.pipeline.notifications.get_pr_from_commit', new=MagicMock(return_value="")) - def test_merge(self, api_mock): + @patch('builtins.print') + @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') + def test_merge(self, api_mock, print_mock): repo_mock = api_mock.return_value.projects.get.return_value repo_mock.jobs.get.return_value.artifact.return_value = b"{}" repo_mock.jobs.get.return_value.trace.return_value = b"Log trace" repo_mock.pipelines.get.return_value.ref = "test" list_mock = repo_mock.pipelines.get.return_value.jobs.list list_mock.side_effect = [get_fake_jobs(), []] - notify.send_message(MockContext(), notification_type="merge", dry_run=True) + notify.send_message(MockContext(), dry_run=True) list_mock.assert_called() + repo_mock.pipelines.get.assert_called_with('42') + self.assertTrue("merge" in print_mock.mock_calls[0].args[0]) + repo_mock.jobs.get.assert_called() + @patch.dict('os.environ', {'DEPLOY_AGENT': 'false', 'CI_PIPELINE_SOURCE': 'push', 'CI_PIPELINE_ID': '42'}) @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') @patch('tasks.libs.notify.pipeline_status.get_failed_jobs') + @patch('builtins.print') @patch('tasks.libs.pipeline.notifications.get_pr_from_commit', new=MagicMock(return_value="")) - def test_merge_without_get_failed_call(self, get_failed_jobs_mock, api_mock): + def test_merge_without_get_failed_call(self, print_mock, get_failed_jobs_mock, api_mock): repo_mock = api_mock.return_value.projects.get.return_value repo_mock.jobs.get.return_value.artifact.return_value = b"{}" repo_mock.jobs.get.return_value.trace.return_value = b"Log trace" @@ -114,9 +121,10 @@ def test_merge_without_get_failed_call(self, get_failed_jobs_mock, api_mock): ) ) get_failed_jobs_mock.return_value = failed - notify.send_message(MockContext(), notification_type="merge", dry_run=True) - + notify.send_message(MockContext(), dry_run=True) + self.assertTrue("merge" in print_mock.mock_calls[0].args[0]) get_failed_jobs_mock.assert_called() + repo_mock.jobs.get.assert_called() @patch("tasks.libs.owners.parsing.read_owners") def test_route_e2e_internal_error(self, read_owners_mock): @@ -191,9 +199,51 @@ def test_route_e2e_internal_error(self, read_owners_mock): self.assertNotIn("@DataDog/agent-devx-loops", owners) self.assertNotIn("@DataDog/agent-delivery", owners) + @patch.dict('os.environ', {'DEPLOY_AGENT': 'false', 'CI_PIPELINE_SOURCE': 'push', 'CI_PIPELINE_ID': '42'}) + @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') + @patch('builtins.print') + @patch('tasks.libs.pipeline.notifications.get_pr_from_commit', new=MagicMock(return_value="")) + def test_merge_with_get_failed_call(self, print_mock, api_mock): + repo_mock = api_mock.return_value.projects.get.return_value + trace_mock = repo_mock.jobs.get.return_value.trace + list_mock = repo_mock.pipelines.get.return_value.jobs.list + + trace_mock.return_value = b"no basic auth credentials" + list_mock.return_value = get_fake_jobs() + repo_mock.jobs.get.return_value.artifact.return_value = b"{}" + repo_mock.pipelines.get.return_value.ref = "test" + + notify.send_message(MockContext(), dry_run=True) + self.assertTrue("merge" in print_mock.mock_calls[0].args[0]) + trace_mock.assert_called() + list_mock.assert_called() + repo_mock.jobs.get.assert_called() + + @patch.dict('os.environ', {'DEPLOY_AGENT': 'true', 'CI_PIPELINE_SOURCE': 'push', 'CI_PIPELINE_ID': '42'}) + @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') + @patch('builtins.print') + @patch('tasks.libs.pipeline.notifications.get_pr_from_commit', new=MagicMock(return_value="")) + def test_deploy_with_get_failed_call(self, print_mock, api_mock): + repo_mock = api_mock.return_value.projects.get.return_value + trace_mock = repo_mock.jobs.get.return_value.trace + list_mock = repo_mock.pipelines.get.return_value.jobs.list + + trace_mock.return_value = b"no basic auth credentials" + list_mock.return_value = get_fake_jobs() + repo_mock.jobs.get.return_value.artifact.return_value = b"{}" + repo_mock.pipelines.get.return_value.ref = "test" + + notify.send_message(MockContext(), dry_run=True) + self.assertTrue("rocket" in print_mock.mock_calls[0].args[0]) + trace_mock.assert_called() + list_mock.assert_called() + repo_mock.jobs.get.assert_called() + + @patch.dict('os.environ', {'DEPLOY_AGENT': 'false', 'CI_PIPELINE_SOURCE': 'api', 'CI_PIPELINE_ID': '42'}) @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') + @patch('builtins.print') @patch('tasks.libs.pipeline.notifications.get_pr_from_commit', new=MagicMock(return_value="")) - def test_merge_with_get_failed_call(self, api_mock): + def test_trigger_with_get_failed_call(self, print_mock, api_mock): repo_mock = api_mock.return_value.projects.get.return_value trace_mock = repo_mock.jobs.get.return_value.trace list_mock = repo_mock.pipelines.get.return_value.jobs.list @@ -203,10 +253,40 @@ def test_merge_with_get_failed_call(self, api_mock): repo_mock.jobs.get.return_value.artifact.return_value = b"{}" repo_mock.pipelines.get.return_value.ref = "test" - notify.send_message(MockContext(), notification_type="merge", dry_run=True) + notify.send_message(MockContext(), dry_run=True) + self.assertTrue("arrow_forward" in print_mock.mock_calls[0].args[0]) + trace_mock.assert_called() + list_mock.assert_called() + repo_mock.jobs.get.assert_called() + + @patch.dict('os.environ', {'DEPLOY_AGENT': 'false', 'CI_PIPELINE_SOURCE': 'pipeline', 'CI_PIPELINE_ID': '42'}) + @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') + @patch('builtins.print') + @patch('tasks.libs.pipeline.notifications.get_pr_from_commit', new=MagicMock(return_value="")) + def test_trigger_with_get_failed_call_conductor(self, print_mock, api_mock): + repo_mock = api_mock.return_value.projects.get.return_value + trace_mock = repo_mock.jobs.get.return_value.trace + list_mock = repo_mock.pipelines.get.return_value.jobs.list + + trace_mock.return_value = b"no basic auth credentials" + list_mock.return_value = get_fake_jobs() + repo_mock.jobs.get.return_value.artifact.return_value = b"{}" + repo_mock.pipelines.get.return_value.ref = "test" + repo_mock.pipelines.get.return_value.user.__getitem__.return_value = 8278 + notify.send_message(MockContext(), dry_run=True) + self.assertTrue("arrow_forward" in print_mock.mock_calls[0].args[0]) trace_mock.assert_called() list_mock.assert_called() + repo_mock.jobs.get.assert_called() + + @patch.dict('os.environ', {'CI_PIPELINE_SOURCE': 'pipeline', 'CI_PIPELINE_ID': '42'}) + @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') + def test_dismiss_notification(self, api_mock): + repo_mock = api_mock.return_value.projects.get.return_value + + notify.send_message(MockContext(), dry_run=True) + repo_mock.jobs.get.assert_not_called() def test_post_to_channel1(self): self.assertFalse(pipeline_status.should_send_message_to_author("main", default_branch="main")) From bbbad328323faa7ff69ee252e4a07e4723f052dc Mon Sep 17 00:00:00 2001 From: Alexandre Yang Date: Fri, 13 Dec 2024 15:15:47 +0100 Subject: [PATCH 193/303] [snmp] Add agent_group tag for snmp integration (#32004) --- comp/haagent/helpers/helpers.go | 26 ++++++++++ comp/haagent/helpers/helpers_test.go | 33 ++++++++++++ comp/haagent/impl/config.go | 5 +- comp/metadata/host/hostimpl/hosttags/tags.go | 5 +- .../snmp/internal/devicecheck/devicecheck.go | 17 +++++-- .../internal/devicecheck/devicecheck_test.go | 51 ++++++++++++++++--- .../snmp/internal/discovery/discovery.go | 7 ++- .../snmp/internal/discovery/discovery_test.go | 13 ++--- pkg/collector/corechecks/snmp/snmp.go | 15 ++++-- pkg/collector/corechecks/snmp/snmp_test.go | 13 ++--- pkg/commonchecks/corechecks.go | 2 +- 11 files changed, 152 insertions(+), 35 deletions(-) create mode 100644 comp/haagent/helpers/helpers.go create mode 100644 comp/haagent/helpers/helpers_test.go diff --git a/comp/haagent/helpers/helpers.go b/comp/haagent/helpers/helpers.go new file mode 100644 index 0000000000000..4b5e755e04936 --- /dev/null +++ b/comp/haagent/helpers/helpers.go @@ -0,0 +1,26 @@ +// 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 2024-present Datadog, Inc. + +// Package haagenthelpers provides helpers for haagent component +package haagenthelpers + +import ( + "github.com/DataDog/datadog-agent/pkg/config/model" +) + +// IsEnabled returns true if HA Agent is enabled +func IsEnabled(agentConfig model.Reader) bool { + return agentConfig.GetBool("ha_agent.enabled") +} + +// GetGroup returns HA Agent group +func GetGroup(agentConfig model.Reader) string { + return agentConfig.GetString("ha_agent.group") +} + +// GetHaAgentTags returns HA Agent related tags +func GetHaAgentTags(agentConfig model.Reader) []string { + return []string{"agent_group:" + GetGroup(agentConfig)} +} diff --git a/comp/haagent/helpers/helpers_test.go b/comp/haagent/helpers/helpers_test.go new file mode 100644 index 0000000000000..987ab6a5cccf4 --- /dev/null +++ b/comp/haagent/helpers/helpers_test.go @@ -0,0 +1,33 @@ +// 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 2024-present Datadog, Inc. + +package haagenthelpers + +import ( + "testing" + + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/stretchr/testify/assert" +) + +func TestIsEnabled(t *testing.T) { + cfg := config.NewMock(t) + assert.False(t, IsEnabled(cfg)) + + cfg.SetWithoutSource("ha_agent.enabled", true) + assert.True(t, IsEnabled(cfg)) +} + +func TestGetGroup(t *testing.T) { + cfg := config.NewMock(t) + cfg.SetWithoutSource("ha_agent.group", "my-group") + assert.Equal(t, "my-group", GetGroup(cfg)) +} + +func TestGetHaAgentTags(t *testing.T) { + cfg := config.NewMock(t) + cfg.SetWithoutSource("ha_agent.group", "my-group") + assert.Equal(t, []string{"agent_group:my-group"}, GetHaAgentTags(cfg)) +} diff --git a/comp/haagent/impl/config.go b/comp/haagent/impl/config.go index 2a6c4e20a8d12..ea9f54d9f16ea 100644 --- a/comp/haagent/impl/config.go +++ b/comp/haagent/impl/config.go @@ -7,6 +7,7 @@ package haagentimpl import ( "github.com/DataDog/datadog-agent/comp/core/config" + helpers "github.com/DataDog/datadog-agent/comp/haagent/helpers" ) // validHaIntegrations represent the list of integrations that will be considered as @@ -30,7 +31,7 @@ type haAgentConfigs struct { func newHaAgentConfigs(agentConfig config.Component) *haAgentConfigs { return &haAgentConfigs{ - enabled: agentConfig.GetBool("ha_agent.enabled"), - group: agentConfig.GetString("ha_agent.group"), + enabled: helpers.IsEnabled(agentConfig), + group: helpers.GetGroup(agentConfig), } } diff --git a/comp/metadata/host/hostimpl/hosttags/tags.go b/comp/metadata/host/hostimpl/hosttags/tags.go index 01cfff7c0810f..92d610d49e079 100644 --- a/comp/metadata/host/hostimpl/hosttags/tags.go +++ b/comp/metadata/host/hostimpl/hosttags/tags.go @@ -12,6 +12,7 @@ import ( "strings" "time" + haagenthelpers "github.com/DataDog/datadog-agent/comp/haagent/helpers" "github.com/DataDog/datadog-agent/pkg/config/env" "github.com/DataDog/datadog-agent/pkg/config/model" configUtils "github.com/DataDog/datadog-agent/pkg/config/utils" @@ -133,8 +134,8 @@ func Get(ctx context.Context, cached bool, conf model.Reader) *Tags { hostTags = appendToHostTags(hostTags, clusterNameTags) } - if conf.GetBool("ha_agent.enabled") { - hostTags = appendToHostTags(hostTags, []string{"agent_group:" + conf.GetString("ha_agent.group")}) + if haagenthelpers.IsEnabled(conf) { + hostTags = appendToHostTags(hostTags, haagenthelpers.GetHaAgentTags(conf)) } gceTags := []string{} diff --git a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go index 969fd45d2da52..d23d5642a2470 100644 --- a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go +++ b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go @@ -17,8 +17,9 @@ import ( "go.uber.org/atomic" + "github.com/DataDog/datadog-agent/comp/core/config" + haagenthelpers "github.com/DataDog/datadog-agent/comp/haagent/helpers" "github.com/DataDog/datadog-agent/pkg/collector/externalhost" - pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" configUtils "github.com/DataDog/datadog-agent/pkg/config/utils" "github.com/DataDog/datadog-agent/pkg/metrics/servicecheck" "github.com/DataDog/datadog-agent/pkg/util/hostname/validate" @@ -66,12 +67,13 @@ type DeviceCheck struct { diagnoses *diagnoses.Diagnoses interfaceBandwidthState report.InterfaceBandwidthState cacheKey string + agentConfig config.Component } const cacheKeyPrefix = "snmp-tags" // NewDeviceCheck returns a new DeviceCheck -func NewDeviceCheck(config *checkconfig.CheckConfig, ipAddress string, sessionFactory session.Factory) (*DeviceCheck, error) { +func NewDeviceCheck(config *checkconfig.CheckConfig, ipAddress string, sessionFactory session.Factory, agentConfig config.Component) (*DeviceCheck, error) { newConfig := config.CopyWithNewIP(ipAddress) var devicePinger pinger.Pinger @@ -94,6 +96,7 @@ func NewDeviceCheck(config *checkconfig.CheckConfig, ipAddress string, sessionFa diagnoses: diagnoses.NewDeviceDiagnoses(newConfig.DeviceID), interfaceBandwidthState: report.MakeInterfaceBandwidthState(), cacheKey: cacheKey, + agentConfig: agentConfig, } d.readTagsFromCache() @@ -244,11 +247,19 @@ func (d *DeviceCheck) setDeviceHostExternalTags() { if deviceHostname == "" || err != nil { return } - agentTags := configUtils.GetConfiguredTags(pkgconfigsetup.Datadog(), false) + agentTags := d.buildExternalTags() log.Debugf("Set external tags for device host, host=`%s`, agentTags=`%v`", deviceHostname, agentTags) externalhost.SetExternalTags(deviceHostname, common.SnmpExternalTagsSourceType, agentTags) } +func (d *DeviceCheck) buildExternalTags() []string { + agentTags := configUtils.GetConfiguredTags(d.agentConfig, false) + if haagenthelpers.IsEnabled(d.agentConfig) { + agentTags = append(agentTags, haagenthelpers.GetHaAgentTags(d.agentConfig)...) + } + return agentTags +} + func (d *DeviceCheck) getValuesAndTags() (bool, []string, *valuestore.ResultValueStore, error) { var deviceReachable bool var checkErrors []string diff --git a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go index c56235171d3a2..1e7ad7fc7a001 100644 --- a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go +++ b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go @@ -17,6 +17,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" + agentconfig "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" "github.com/DataDog/datadog-agent/pkg/metrics/servicecheck" "github.com/DataDog/datadog-agent/pkg/version" @@ -57,7 +58,7 @@ profiles: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) assert.Nil(t, err) sender := mocksender.NewMockSender("123") // required to initiate aggregator @@ -197,7 +198,7 @@ global_metrics: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) assert.Nil(t, err) sender := mocksender.NewMockSender("123") // required to initiate aggregator @@ -246,7 +247,7 @@ community_string: public config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", session.NewMockSession) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", session.NewMockSession, agentconfig.NewMock(t)) assert.Nil(t, err) sender := mocksender.NewMockSender("123") // required to initiate aggregator @@ -277,7 +278,7 @@ community_string: public config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", session.NewMockSession) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", session.NewMockSession, agentconfig.NewMock(t)) assert.Nil(t, err) hostname, err := deviceCk.GetDeviceHostname() @@ -343,7 +344,7 @@ profiles: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) assert.Nil(t, err) snmpTags := []string{"snmp_device:1.2.3.4", "device_ip:1.2.3.4", "device_id:default:1.2.3.4", "snmp_profile:f5-big-ip", "device_vendor:f5", "snmp_host:foo_sys_name", @@ -648,7 +649,7 @@ profiles: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) assert.Nil(t, err) sender := mocksender.NewMockSender("123") // required to initiate aggregator @@ -695,7 +696,7 @@ profiles: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) assert.Nil(t, err) // override pinger with mock pinger @@ -846,7 +847,7 @@ profiles: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) assert.Nil(t, err) // override pinger with mock pinger @@ -967,3 +968,37 @@ profiles: sender.AssertNotCalled(t, "Gauge", pingAvgRttMetric, mock.Anything, mock.Anything, mock.Anything) sender.AssertNotCalled(t, "Gauge", pingPacketLoss, mock.Anything, mock.Anything, mock.Anything) } + +func TestDeviceCheck_buildExternalTags(t *testing.T) { + // GIVEN + profile.SetConfdPathAndCleanProfiles() + sess := session.CreateFakeSession() + sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { + return sess, nil + } + + // language=yaml + rawInstanceConfig := []byte(` +ip_address: 1.2.3.4 +community_string: public +collect_topology: false +`) + // language=yaml + rawInitConfig := []byte(``) + + config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) + assert.Nil(t, err) + + cfg := agentconfig.NewMock(t) + cfg.SetWithoutSource("ha_agent.enabled", true) + cfg.SetWithoutSource("ha_agent.group", "my-group") + + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, cfg) + assert.Nil(t, err) + + // WHEN + externalTags := deviceCk.buildExternalTags() + + // THEN + assert.Equal(t, []string{"agent_group:my-group"}, externalTags) +} diff --git a/pkg/collector/corechecks/snmp/internal/discovery/discovery.go b/pkg/collector/corechecks/snmp/internal/discovery/discovery.go index b7fb91915209a..860f3cb781991 100644 --- a/pkg/collector/corechecks/snmp/internal/discovery/discovery.go +++ b/pkg/collector/corechecks/snmp/internal/discovery/discovery.go @@ -14,6 +14,7 @@ import ( "sync" "time" + "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/persistentcache" "github.com/DataDog/datadog-agent/pkg/util/log" "go.uber.org/atomic" @@ -43,6 +44,7 @@ type Discovery struct { discoveredDevices map[checkconfig.DeviceDigest]Device sessionFactory session.Factory + agentConfig config.Component } // Device implements and store results from the Service interface for the SNMP listener @@ -237,7 +239,7 @@ func (d *Discovery) getDevicesFound() []string { } func (d *Discovery) createDevice(deviceDigest checkconfig.DeviceDigest, subnet *snmpSubnet, deviceIP string, writeCache bool) { - deviceCk, err := devicecheck.NewDeviceCheck(subnet.config, deviceIP, d.sessionFactory) + deviceCk, err := devicecheck.NewDeviceCheck(subnet.config, deviceIP, d.sessionFactory, d.agentConfig) if err != nil { // should not happen since the deviceCheck is expected to be valid at this point // and are only changing the device ip @@ -335,11 +337,12 @@ func (d *Discovery) writeCache(subnet *snmpSubnet) { } // NewDiscovery return a new Discovery instance -func NewDiscovery(config *checkconfig.CheckConfig, sessionFactory session.Factory) *Discovery { +func NewDiscovery(config *checkconfig.CheckConfig, sessionFactory session.Factory, agentConfig config.Component) *Discovery { return &Discovery{ discoveredDevices: make(map[checkconfig.DeviceDigest]Device), stop: make(chan struct{}), config: config, sessionFactory: sessionFactory, + agentConfig: agentConfig, } } diff --git a/pkg/collector/corechecks/snmp/internal/discovery/discovery_test.go b/pkg/collector/corechecks/snmp/internal/discovery/discovery_test.go index 9d59def5890d0..d2ee7611c0597 100644 --- a/pkg/collector/corechecks/snmp/internal/discovery/discovery_test.go +++ b/pkg/collector/corechecks/snmp/internal/discovery/discovery_test.go @@ -15,6 +15,7 @@ import ( "github.com/gosnmp/gosnmp" "github.com/stretchr/testify/assert" + agentconfig "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/checkconfig" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/session" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" @@ -59,7 +60,7 @@ func TestDiscovery(t *testing.T) { DiscoveryWorkers: 1, IgnoredIPAddresses: map[string]bool{"192.168.0.5": true}, } - discovery := NewDiscovery(checkConfig, sessionFactory) + discovery := NewDiscovery(checkConfig, sessionFactory, agentconfig.NewMock(t)) discovery.Start() assert.NoError(t, waitForDiscoveredDevices(discovery, 7, 2*time.Second)) discovery.Stop() @@ -109,7 +110,7 @@ func TestDiscoveryCache(t *testing.T) { DiscoveryInterval: 3600, DiscoveryWorkers: 1, } - discovery := NewDiscovery(checkConfig, sessionFactory) + discovery := NewDiscovery(checkConfig, sessionFactory, agentconfig.NewMock(t)) discovery.Start() assert.NoError(t, waitForDiscoveredDevices(discovery, 4, 2*time.Second)) discovery.Stop() @@ -141,7 +142,7 @@ func TestDiscoveryCache(t *testing.T) { DiscoveryInterval: 3600, DiscoveryWorkers: 0, // no workers, the devices will be loaded from cache } - discovery2 := NewDiscovery(checkConfig, sessionFactory) + discovery2 := NewDiscovery(checkConfig, sessionFactory, agentconfig.NewMock(t)) discovery2.Start() assert.NoError(t, waitForDiscoveredDevices(discovery2, 4, 2*time.Second)) discovery2.Stop() @@ -180,7 +181,7 @@ func TestDiscoveryTicker(t *testing.T) { DiscoveryInterval: 1, DiscoveryWorkers: 1, } - discovery := NewDiscovery(checkConfig, sessionFactory) + discovery := NewDiscovery(checkConfig, sessionFactory, agentconfig.NewMock(t)) discovery.Start() time.Sleep(1500 * time.Millisecond) discovery.Stop() @@ -227,7 +228,7 @@ func TestDiscovery_checkDevice(t *testing.T) { } var sess *session.MockSession - discovery := NewDiscovery(checkConfig, session.NewMockSession) + discovery := NewDiscovery(checkConfig, session.NewMockSession, agentconfig.NewMock(t)) checkDeviceOnce := func() { sess = session.CreateMockSession() @@ -315,7 +316,7 @@ func TestDiscovery_createDevice(t *testing.T) { DiscoveryAllowedFailures: 3, Namespace: "default", } - discovery := NewDiscovery(checkConfig, session.NewMockSession) + discovery := NewDiscovery(checkConfig, session.NewMockSession, agentconfig.NewMock(t)) ipAddr, ipNet, err := net.ParseCIDR(checkConfig.Network) assert.Nil(t, err) startingIP := ipAddr.Mask(ipNet.Mask) diff --git a/pkg/collector/corechecks/snmp/snmp.go b/pkg/collector/corechecks/snmp/snmp.go index 6b59932b057c6..29e2ae2327c5b 100644 --- a/pkg/collector/corechecks/snmp/snmp.go +++ b/pkg/collector/corechecks/snmp/snmp.go @@ -11,6 +11,7 @@ import ( "sync" "time" + "github.com/DataDog/datadog-agent/comp/core/config" "go.uber.org/atomic" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" @@ -44,6 +45,7 @@ type Check struct { discovery *discovery.Discovery sessionFactory session.Factory workerRunDeviceCheckErrors *atomic.Uint64 + agentConfig config.Component } // Run executes the check @@ -155,10 +157,10 @@ func (c *Check) Configure(senderManager sender.SenderManager, integrationConfigD } if c.config.IsDiscovery() { - c.discovery = discovery.NewDiscovery(c.config, c.sessionFactory) + c.discovery = discovery.NewDiscovery(c.config, c.sessionFactory, c.agentConfig) c.discovery.Start() } else { - c.singleDeviceCk, err = devicecheck.NewDeviceCheck(c.config, c.config.IPAddress, c.sessionFactory) + c.singleDeviceCk, err = devicecheck.NewDeviceCheck(c.config, c.config.IPAddress, c.sessionFactory, c.agentConfig) if err != nil { return fmt.Errorf("failed to create device check: %s", err) } @@ -196,14 +198,17 @@ func (c *Check) GetDiagnoses() ([]diagnosis.Diagnosis, error) { } // Factory creates a new check factory -func Factory() optional.Option[func() check.Check] { - return optional.NewOption(newCheck) +func Factory(agentConfig config.Component) optional.Option[func() check.Check] { + return optional.NewOption(func() check.Check { + return newCheck(agentConfig) + }) } -func newCheck() check.Check { +func newCheck(agentConfig config.Component) check.Check { return &Check{ CheckBase: core.NewCheckBase(common.SnmpIntegrationName), sessionFactory: session.NewGosnmpSession, workerRunDeviceCheckErrors: atomic.NewUint64(0), + agentConfig: agentConfig, } } diff --git a/pkg/collector/corechecks/snmp/snmp_test.go b/pkg/collector/corechecks/snmp/snmp_test.go index 88513ca8ce0d3..2f1095dc52027 100644 --- a/pkg/collector/corechecks/snmp/snmp_test.go +++ b/pkg/collector/corechecks/snmp/snmp_test.go @@ -25,6 +25,7 @@ import ( "github.com/DataDog/datadog-agent/comp/aggregator/demultiplexer/demultiplexerimpl" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" + agentconfig "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/forwarder/defaultforwarder" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" "github.com/DataDog/datadog-agent/pkg/collector/externalhost" @@ -996,10 +997,10 @@ community_string: public func TestCheckID(t *testing.T) { profile.SetConfdPathAndCleanProfiles() - check1 := newCheck() - check2 := newCheck() - check3 := newCheck() - checkSubnet := newCheck() + check1 := newCheck(agentconfig.NewMock(t)) + check2 := newCheck(agentconfig.NewMock(t)) + check3 := newCheck(agentconfig.NewMock(t)) + checkSubnet := newCheck(agentconfig.NewMock(t)) // language=yaml rawInstanceConfig1 := []byte(` ip_address: 1.1.1.1 @@ -2165,7 +2166,7 @@ func TestDeviceIDAsHostname(t *testing.T) { sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { return sess, nil } - chk := Check{sessionFactory: sessionFactory} + chk := Check{sessionFactory: sessionFactory, agentConfig: agentconfig.NewMock(t)} pkgconfigsetup.Datadog().SetWithoutSource("hostname", "test-hostname") pkgconfigsetup.Datadog().SetWithoutSource("tags", []string{"agent_tag1:val1", "agent_tag2:val2"}) senderManager := deps.Demultiplexer @@ -2358,7 +2359,7 @@ func TestDiscoveryDeviceIDAsHostname(t *testing.T) { sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { return sess, nil } - chk := Check{sessionFactory: sessionFactory} + chk := Check{sessionFactory: sessionFactory, agentConfig: agentconfig.NewMock(t)} pkgconfigsetup.Datadog().SetWithoutSource("hostname", "my-hostname") senderManager := deps.Demultiplexer diff --git a/pkg/commonchecks/corechecks.go b/pkg/commonchecks/corechecks.go index 9af1e7f9833c8..cb20f9412ab2a 100644 --- a/pkg/commonchecks/corechecks.go +++ b/pkg/commonchecks/corechecks.go @@ -62,7 +62,7 @@ func RegisterChecks(store workloadmeta.Component, tagger tagger.Component, cfg c corecheckLoader.RegisterCheck(uptime.CheckName, uptime.Factory()) corecheckLoader.RegisterCheck(telemetryCheck.CheckName, telemetryCheck.Factory(telemetry)) corecheckLoader.RegisterCheck(ntp.CheckName, ntp.Factory()) - corecheckLoader.RegisterCheck(snmp.CheckName, snmp.Factory()) + corecheckLoader.RegisterCheck(snmp.CheckName, snmp.Factory(cfg)) corecheckLoader.RegisterCheck(networkpath.CheckName, networkpath.Factory(telemetry)) corecheckLoader.RegisterCheck(io.CheckName, io.Factory()) corecheckLoader.RegisterCheck(filehandles.CheckName, filehandles.Factory()) From e68c92c2c6149b293923b7db70d6e37ca62ede88 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 14:23:58 +0000 Subject: [PATCH 194/303] Bump github/codeql-action from 3.27.7 to 3.27.9 (#32135) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index d6886960d2396..bb6d39efa5e6d 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -45,7 +45,7 @@ jobs: go-version-file: ".go-version" - name: Initialize CodeQL - uses: github/codeql-action/init@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 + uses: github/codeql-action/init@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 with: languages: ${{ matrix.language }} config: | @@ -67,4 +67,4 @@ jobs: invoke agent.build --build-exclude=systemd - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 + uses: github/codeql-action/analyze@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 From c8198112b365071ad0b9c4040caca451808215a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Fri, 13 Dec 2024 15:25:51 +0100 Subject: [PATCH 195/303] omnibus: use a new dedicated git cache bucket (#27627) --- .gitlab-ci.yml | 1 + .gitlab/package_build/windows.yml | 1 + tasks/omnibus.py | 2 +- tasks/unit_tests/omnibus_tests.py | 10 +++++----- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 38a0cde349fc8..05351cee64faf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -151,6 +151,7 @@ variables: ## comment out both lines below (S3_OMNIBUS_CACHE_BUCKET and USE_S3_CACHING) to allow ## build to succeed with S3 caching disabled. S3_OMNIBUS_CACHE_BUCKET: dd-ci-datadog-agent-omnibus-cache-build-stable + S3_OMNIBUS_GIT_CACHE_BUCKET: dd-ci-datadog-agent-omnibus-git-cache-build-stable USE_S3_CACHING: --omnibus-s3-cache # This value is not used on windows, a specific value is provided to # our build containers in the windows build jobs diff --git a/.gitlab/package_build/windows.yml b/.gitlab/package_build/windows.yml index cb57ebafa617f..ea458c9db77a7 100644 --- a/.gitlab/package_build/windows.yml +++ b/.gitlab/package_build/windows.yml @@ -30,6 +30,7 @@ -e DEBUG_CUSTOMACTION="$DEBUG_CUSTOMACTION" -e BUCKET_BRANCH="$BUCKET_BRANCH" -e S3_OMNIBUS_CACHE_BUCKET="$S3_OMNIBUS_CACHE_BUCKET" + -e S3_OMNIBUS_GIT_CACHE_BUCKET="$S3_OMNIBUS_GIT_CACHE_BUCKET" -e USE_S3_CACHING="$USE_S3_CACHING" -e INTEGRATION_WHEELS_CACHE_BUCKET="$INTEGRATION_WHEELS_CACHE_BUCKET" -e BUNDLE_MIRROR__RUBYGEMS__ORG=${BUNDLE_MIRROR__RUBYGEMS__ORG} diff --git a/tasks/omnibus.py b/tasks/omnibus.py index b93fea751c17d..aa467171f9e18 100644 --- a/tasks/omnibus.py +++ b/tasks/omnibus.py @@ -285,7 +285,7 @@ def build( if use_remote_cache: cache_state = None cache_key = omnibus_compute_cache_key(ctx) - git_cache_url = f"s3://{os.environ['S3_OMNIBUS_CACHE_BUCKET']}/builds/{cache_key}/{remote_cache_name}" + git_cache_url = f"s3://{os.environ['S3_OMNIBUS_GIT_CACHE_BUCKET']}/{cache_key}/{remote_cache_name}" bundle_dir = tempfile.TemporaryDirectory() bundle_path = os.path.join(bundle_dir.name, 'omnibus-git-cache-bundle') with timed(quiet=True) as durations['Restoring omnibus cache']: diff --git a/tasks/unit_tests/omnibus_tests.py b/tasks/unit_tests/omnibus_tests.py index cf22abaf2623d..4886304f2ea7a 100644 --- a/tasks/unit_tests/omnibus_tests.py +++ b/tasks/unit_tests/omnibus_tests.py @@ -40,7 +40,7 @@ def _run_calls_to_string(mock_calls): 'CI_PROJECT_DIR': '', 'CI_PIPELINE_ID': '', 'RELEASE_VERSION_7': 'nightly', - 'S3_OMNIBUS_CACHE_BUCKET': 'omnibus-cache', + 'S3_OMNIBUS_GIT_CACHE_BUCKET': 'omnibus-cache', 'API_KEY_ORG2': 'api-key', 'AGENT_API_KEY_ORG2': 'agent-api-key', }, @@ -89,7 +89,7 @@ def test_successful_cache_hit(self): self.assertRunLines( [ # We copied the cache from remote cache - r'aws s3 cp (\S* )?s3://omnibus-cache/builds/\w+/slug \S+/omnibus-git-cache-bundle', + r'aws s3 cp (\S* )?s3://omnibus-cache/\w+/slug \S+/omnibus-git-cache-bundle', # We cloned the repo r'git clone --mirror /\S+/omnibus-git-cache-bundle omnibus-git-cache/opt/datadog-agent', # We listed the tags to get current cache state @@ -104,7 +104,7 @@ def test_successful_cache_hit(self): commands = _run_calls_to_string(self.mock_ctx.run.mock_calls) lines = [ r'git -C omnibus-git-cache/opt/datadog-agent bundle create /\S+/omnibus-git-cache-bundle --tags', - r'aws s3 cp (\S* )?/\S+/omnibus-git-cache-bundle s3://omnibus-cache/builds/\w+/slug', + r'aws s3 cp (\S* )?/\S+/omnibus-git-cache-bundle s3://omnibus-cache/\w+/slug', ] for line in lines: self.assertIsNone(re.search(line, commands)) @@ -112,7 +112,7 @@ def test_successful_cache_hit(self): def test_cache_miss(self): self.mock_ctx.set_result_for( 'run', - re.compile(r'aws s3 cp (\S* )?s3://omnibus-cache/builds/\S* /\S+/omnibus-git-cache-bundle'), + re.compile(r'aws s3 cp (\S* )?s3://omnibus-cache/\S* /\S+/omnibus-git-cache-bundle'), Result(exited=1), ) self.mock_ctx.set_result_for( @@ -147,7 +147,7 @@ def test_cache_miss(self): r'git -C omnibus-git-cache/opt/datadog-agent tag -l', # And we created and uploaded the new cache r'git -C omnibus-git-cache/opt/datadog-agent bundle create /\S+/omnibus-git-cache-bundle --tags', - r'aws s3 cp (\S* )?/\S+/omnibus-git-cache-bundle s3://omnibus-cache/builds/\w+/slug', + r'aws s3 cp (\S* )?/\S+/omnibus-git-cache-bundle s3://omnibus-cache/\w+/slug', ], ) From aa067130b7b798a07b4a2bc92c865edec466996e Mon Sep 17 00:00:00 2001 From: Yang Song Date: Fri, 13 Dec 2024 10:21:42 -0500 Subject: [PATCH 196/303] [OTEL-2297] upgrade opentelemetry-mapping-go versions (#32032) --- comp/otelcol/ddflareextension/impl/go.mod | 10 +++--- comp/otelcol/ddflareextension/impl/go.sum | 28 ++++++++-------- .../exporter/datadogexporter/go.mod | 11 +++---- .../exporter/datadogexporter/go.sum | 28 ++++++++-------- .../exporter/logsagentexporter/go.mod | 8 ++--- .../exporter/logsagentexporter/go.sum | 16 +++++----- .../logsagentexporter/logs_exporter.go | 18 +++++++---- .../logsagentexporter/logs_exporter_test.go | 32 +++++++++++++++++++ .../exporter/serializerexporter/go.mod | 7 ++-- .../exporter/serializerexporter/go.sum | 16 +++++----- .../otlp/components/statsprocessor/go.mod | 2 +- .../otlp/components/statsprocessor/go.sum | 4 +-- comp/otelcol/otlp/testutil/go.mod | 4 +-- comp/otelcol/otlp/testutil/go.sum | 8 ++--- comp/trace/agent/def/go.mod | 7 +--- comp/trace/agent/def/go.sum | 4 +-- go.mod | 12 +++---- go.sum | 28 ++++++++-------- pkg/metrics/go.mod | 2 +- pkg/metrics/go.sum | 8 ++--- pkg/serializer/go.mod | 2 +- pkg/serializer/go.sum | 8 ++--- pkg/trace/go.mod | 2 +- pkg/trace/go.sum | 4 +-- pkg/trace/stats/oteltest/go.mod | 2 +- pkg/trace/stats/oteltest/go.sum | 4 +-- test/new-e2e/go.mod | 2 +- test/new-e2e/go.sum | 4 +-- test/otel/go.mod | 11 +++---- test/otel/go.sum | 28 ++++++++-------- 30 files changed, 174 insertions(+), 146 deletions(-) diff --git a/comp/otelcol/ddflareextension/impl/go.mod b/comp/otelcol/ddflareextension/impl/go.mod index 4deb81664b9ff..633e70723c7b1 100644 --- a/comp/otelcol/ddflareextension/impl/go.mod +++ b/comp/otelcol/ddflareextension/impl/go.mod @@ -262,16 +262,16 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect - github.com/DataDog/datadog-api-client-go/v2 v2.31.0 // indirect + github.com/DataDog/datadog-api-client-go/v2 v2.33.0 // indirect github.com/DataDog/datadog-go/v5 v5.5.0 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/go-sqllexer v0.0.17 // indirect github.com/DataDog/go-tuf v1.1.0-0.5.2 // indirect github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.22.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.22.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect github.com/DataDog/viper v1.14.0 // indirect github.com/DataDog/zstd v1.5.6 // indirect diff --git a/comp/otelcol/ddflareextension/impl/go.sum b/comp/otelcol/ddflareextension/impl/go.sum index b4c098bd22dcd..86b5c591f955c 100644 --- a/comp/otelcol/ddflareextension/impl/go.sum +++ b/comp/otelcol/ddflareextension/impl/go.sum @@ -63,8 +63,8 @@ github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytlju github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/datadog-agent/comp/core/log v0.56.2 h1:qvBT+FfjKGqimyEvmsNHCZKbTfBJAdUZSVy2IZQ8HS4= github.com/DataDog/datadog-agent/comp/core/log v0.56.2/go.mod h1:ivJ/RMZjTNkoPPNDX+v/nnBwABLCiMv1vQA5tk/HCR4= -github.com/DataDog/datadog-api-client-go/v2 v2.31.0 h1:JfJhYlHfLzvauI8u6h23smTooWYe6quNhhg9gpTszWY= -github.com/DataDog/datadog-api-client-go/v2 v2.31.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= +github.com/DataDog/datadog-api-client-go/v2 v2.33.0 h1:OI6kDnJeQmkjfGzxmP0XUQUxMD4tp6oAPXnnJ4VpgUM= +github.com/DataDog/datadog-api-client-go/v2 v2.33.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= @@ -78,18 +78,18 @@ github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee h1:tXibLZk3G6HncIFJK github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee/go.mod h1:nTot/Iy0kW16bXgXr6blEc8gFeAS7vTqYlhAxh+dbc0= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0 h1:U+p1i7+upWb4qOIOOvjS/92iMUGlSzEC1tRxVo0Lg8Y= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0/go.mod h1:dOjp1lg4jwYyIbpnqW+DoOV8qD+70C+lgpINFvUqasQ= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0 h1:VS4NTqwczwezMVvI6A7xYR3ugPmMUJ4FcdFrsdnZI2I= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 h1:hgbTFS6SkqbzOiWSfP58dZ/Jpjlmv6dpD4+V4LDHm2Q= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0 h1:XD9Kd+baO66+tfbdanOFSMGEfwWfnrn/IxG/Dc5bv5I= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0/go.mod h1:9ByLz9jISc176DzjIdaRfRKwaitqF8ie6RTvfP8Aufo= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0 h1:8nW8jfcCIWzxWrpI31C0QYoOjTaUGp6USCwiRbP5Fp4= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0/go.mod h1:wuatEozcLYinJ0WYf0MlVTFtTzEmf+qyJet0H9foVAs= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 h1:/Dp1WBvekdusS9Tw9pLE7RG04eluNktQ29arLS4SpGM= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0/go.mod h1:asNuwNy1O2HbadkcZVuqmFGonfEzXS/SBvOo8V1MJvQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.22.0 h1:r1Dx2cRHCBWkVluSZA41i4eoI/nOGbcrrZdkqWjoFCc= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.22.0/go.mod h1:+/dkO8ZiMa8rfm4SmtTF6qPUdBbBcvsWWKaO4xPKAIk= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.22.0 h1:cXcKVEU1D0HlguR7GunnvuI70TghkarCa9DApqzMY94= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.22.0/go.mod h1:ES00EXfyEKgUkjd93tAXCxJA6i0seeOhZoS5Cj2qzzg= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 h1:yfk2cF8Bx98fSFpGrehEHh1FRqewfxcCTAbUDt5r3F8= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0/go.mod h1:9qzpnBSxSOnKzbF/uHket3SSlQihQHix/ZRC2nZUUYQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.22.0 h1:Zqj8YUZ/ualUhM8GDCQX6xKnUJKEiG0eYdFGWmIDG30= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.22.0/go.mod h1:lpr4q6g2TB0BHeLHaz/XleKm8YXQjuxiQEb9Q9HXXE0= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.22.0 h1:w9+ngZDYUMLW+GSRA8x1DvVbuMR+cwlGb8VLwZfgBGs= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.22.0/go.mod h1:UsfqLgiD6Sjhpjkg+YzAd+TdKUZ2m6ZZ8t+tEkLNTMA= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0 h1:63SzQz9Ab8XJj8fQKQz6UZNBhOm8rucwzbDfwTVF6dQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0/go.mod h1:E/PY/aQ6S/N5hBPHXZRGmovs5b1BSi4RHGNcB4yP/Z0= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod index f5d80646079db..7ce89b2ee2d53 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod @@ -103,8 +103,8 @@ require ( github.com/DataDog/datadog-agent/pkg/serializer v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 github.com/DataDog/datadog-go/v5 v5.5.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.22.0 github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0 github.com/stretchr/testify v1.10.0 go.opentelemetry.io/collector/component v0.115.0 @@ -197,13 +197,13 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/datadog-api-client-go/v2 v2.31.0 // indirect + github.com/DataDog/datadog-api-client-go/v2 v2.33.0 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/go-sqllexer v0.0.17 // indirect github.com/DataDog/go-tuf v1.1.0-0.5.2 // indirect github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.22.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect github.com/DataDog/viper v1.14.0 // indirect github.com/DataDog/zstd v1.5.6 // indirect @@ -260,7 +260,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.115.0 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.115.0 // indirect github.com/opencontainers/runtime-spec v1.2.0 // indirect github.com/outcaste-io/ristretto v0.2.3 // indirect diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum index a517f4a4df2e7..1f0bcec425283 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytljudgSY9O59zjc= github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= -github.com/DataDog/datadog-api-client-go/v2 v2.31.0 h1:JfJhYlHfLzvauI8u6h23smTooWYe6quNhhg9gpTszWY= -github.com/DataDog/datadog-api-client-go/v2 v2.31.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= +github.com/DataDog/datadog-api-client-go/v2 v2.33.0 h1:OI6kDnJeQmkjfGzxmP0XUQUxMD4tp6oAPXnnJ4VpgUM= +github.com/DataDog/datadog-api-client-go/v2 v2.33.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 h1:RoH7VLzTnxHEugRPIgnGlxwDFszFGI7b3WZZUtWuPRM= @@ -14,18 +14,18 @@ github.com/DataDog/go-tuf v1.1.0-0.5.2 h1:4CagiIekonLSfL8GMHRHcHudo1fQnxELS9g4ti github.com/DataDog/go-tuf v1.1.0-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0 h1:U+p1i7+upWb4qOIOOvjS/92iMUGlSzEC1tRxVo0Lg8Y= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0/go.mod h1:dOjp1lg4jwYyIbpnqW+DoOV8qD+70C+lgpINFvUqasQ= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0 h1:VS4NTqwczwezMVvI6A7xYR3ugPmMUJ4FcdFrsdnZI2I= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 h1:hgbTFS6SkqbzOiWSfP58dZ/Jpjlmv6dpD4+V4LDHm2Q= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0 h1:XD9Kd+baO66+tfbdanOFSMGEfwWfnrn/IxG/Dc5bv5I= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0/go.mod h1:9ByLz9jISc176DzjIdaRfRKwaitqF8ie6RTvfP8Aufo= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0 h1:8nW8jfcCIWzxWrpI31C0QYoOjTaUGp6USCwiRbP5Fp4= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0/go.mod h1:wuatEozcLYinJ0WYf0MlVTFtTzEmf+qyJet0H9foVAs= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 h1:/Dp1WBvekdusS9Tw9pLE7RG04eluNktQ29arLS4SpGM= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0/go.mod h1:asNuwNy1O2HbadkcZVuqmFGonfEzXS/SBvOo8V1MJvQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.22.0 h1:r1Dx2cRHCBWkVluSZA41i4eoI/nOGbcrrZdkqWjoFCc= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.22.0/go.mod h1:+/dkO8ZiMa8rfm4SmtTF6qPUdBbBcvsWWKaO4xPKAIk= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.22.0 h1:cXcKVEU1D0HlguR7GunnvuI70TghkarCa9DApqzMY94= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.22.0/go.mod h1:ES00EXfyEKgUkjd93tAXCxJA6i0seeOhZoS5Cj2qzzg= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 h1:yfk2cF8Bx98fSFpGrehEHh1FRqewfxcCTAbUDt5r3F8= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0/go.mod h1:9qzpnBSxSOnKzbF/uHket3SSlQihQHix/ZRC2nZUUYQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.22.0 h1:Zqj8YUZ/ualUhM8GDCQX6xKnUJKEiG0eYdFGWmIDG30= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.22.0/go.mod h1:lpr4q6g2TB0BHeLHaz/XleKm8YXQjuxiQEb9Q9HXXE0= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.22.0 h1:w9+ngZDYUMLW+GSRA8x1DvVbuMR+cwlGb8VLwZfgBGs= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.22.0/go.mod h1:UsfqLgiD6Sjhpjkg+YzAd+TdKUZ2m6ZZ8t+tEkLNTMA= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0 h1:63SzQz9Ab8XJj8fQKQz6UZNBhOm8rucwzbDfwTVF6dQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0/go.mod h1:E/PY/aQ6S/N5hBPHXZRGmovs5b1BSi4RHGNcB4yP/Z0= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod index e60ad4792ef96..23ddd3225d779 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod @@ -48,8 +48,8 @@ require ( github.com/DataDog/datadog-agent/pkg/logs/message v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/logs/sources v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.22.0 github.com/stormcat24/protodep v0.1.8 github.com/stretchr/testify v1.10.0 go.opentelemetry.io/collector/component v0.115.0 @@ -90,8 +90,8 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/datadog-api-client-go/v2 v2.31.0 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0 // indirect + github.com/DataDog/datadog-api-client-go/v2 v2.33.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.22.0 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect github.com/DataDog/viper v1.14.0 // indirect github.com/DataDog/zstd v1.5.6 // indirect diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum index 0e6e077927ae0..85a19bf8e57b5 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum @@ -1,13 +1,13 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/datadog-api-client-go/v2 v2.31.0 h1:JfJhYlHfLzvauI8u6h23smTooWYe6quNhhg9gpTszWY= -github.com/DataDog/datadog-api-client-go/v2 v2.31.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0 h1:U+p1i7+upWb4qOIOOvjS/92iMUGlSzEC1tRxVo0Lg8Y= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0/go.mod h1:dOjp1lg4jwYyIbpnqW+DoOV8qD+70C+lgpINFvUqasQ= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 h1:hgbTFS6SkqbzOiWSfP58dZ/Jpjlmv6dpD4+V4LDHm2Q= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0 h1:XD9Kd+baO66+tfbdanOFSMGEfwWfnrn/IxG/Dc5bv5I= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0/go.mod h1:9ByLz9jISc176DzjIdaRfRKwaitqF8ie6RTvfP8Aufo= +github.com/DataDog/datadog-api-client-go/v2 v2.33.0 h1:OI6kDnJeQmkjfGzxmP0XUQUxMD4tp6oAPXnnJ4VpgUM= +github.com/DataDog/datadog-api-client-go/v2 v2.33.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.22.0 h1:r1Dx2cRHCBWkVluSZA41i4eoI/nOGbcrrZdkqWjoFCc= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.22.0/go.mod h1:+/dkO8ZiMa8rfm4SmtTF6qPUdBbBcvsWWKaO4xPKAIk= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 h1:yfk2cF8Bx98fSFpGrehEHh1FRqewfxcCTAbUDt5r3F8= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0/go.mod h1:9qzpnBSxSOnKzbF/uHket3SSlQihQHix/ZRC2nZUUYQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.22.0 h1:Zqj8YUZ/ualUhM8GDCQX6xKnUJKEiG0eYdFGWmIDG30= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.22.0/go.mod h1:lpr4q6g2TB0BHeLHaz/XleKm8YXQjuxiQEb9Q9HXXE0= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/logs_exporter.go b/comp/otelcol/otlp/components/exporter/logsagentexporter/logs_exporter.go index 04f8eaeae152b..c6677de7a068a 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/logs_exporter.go +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/logs_exporter.go @@ -73,18 +73,22 @@ func (e *Exporter) ConsumeLogs(ctx context.Context, ld plog.Logs) (err error) { if ddLog.Service != nil { service = *ddLog.Service } - status := ddLog.AdditionalProperties["status"] - if status == "" { - status = message.StatusInfo + status := message.StatusInfo + if val, ok := ddLog.AdditionalProperties["status"]; ok { + if strVal, ok := val.(string); ok && strVal != "" { + status = strVal + } } origin := message.NewOrigin(e.logSource) origin.SetTags(tags) origin.SetService(service) - if src, ok := ddLog.AdditionalProperties["datadog.log.source"]; ok { - origin.SetSource(src) - } else { - origin.SetSource(e.logSource.Name) + src := e.logSource.Name + if val, ok := ddLog.AdditionalProperties["datadog.log.source"]; ok { + if strVal, ok := val.(string); ok && strVal != "" { + src = strVal + } } + origin.SetSource(src) content, err := ddLog.MarshalJSON() if err != nil { diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/logs_exporter_test.go b/comp/otelcol/otlp/components/exporter/logsagentexporter/logs_exporter_test.go index f7ed2dc597281..cfe69f7a60704 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/logs_exporter_test.go +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/logs_exporter_test.go @@ -136,6 +136,38 @@ func TestLogsExporter(t *testing.T) { }, expectedTags: [][]string{{"otel_source:datadog_agent"}}, }, + { + name: "status", + args: args{ + ld: func() plog.Logs { + l := testutil.GenerateLogsOneLogRecord() + rl := l.ResourceLogs().At(0) + rl.ScopeLogs().At(0).LogRecords().At(0).SetSeverityText("Fatal") + return l + }(), + otelSource: otelSource, + logSourceName: LogSourceName, + }, + + want: testutil.JSONLogs{ + { + "message": "This is a log message", + "app": "server", + "instance_num": "1", + "@timestamp": testutil.TestLogTime.Format("2006-01-02T15:04:05.000Z07:00"), + "status": "Fatal", + "dd.span_id": fmt.Sprintf("%d", spanIDToUint64(ld.SpanID())), + "dd.trace_id": fmt.Sprintf("%d", traceIDToUint64(ld.TraceID())), + "otel.severity_text": "Fatal", + "otel.severity_number": "9", + "otel.span_id": spanIDToHexOrEmptyString(ld.SpanID()), + "otel.trace_id": traceIDToHexOrEmptyString(ld.TraceID()), + "otel.timestamp": fmt.Sprintf("%d", testutil.TestLogTime.UnixNano()), + "resource-attr": "resource-attr-val-1", + }, + }, + expectedTags: [][]string{{"otel_source:datadog_agent"}}, + }, { name: "ddtags", args: args{ diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod index 52e5401b38680..3ed3c5a02c175 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod @@ -69,9 +69,9 @@ require ( github.com/DataDog/datadog-agent/pkg/serializer v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/tagset v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.22.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0 github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.115.0 github.com/stretchr/testify v1.10.0 @@ -241,7 +241,6 @@ require ( github.com/knadh/koanf/maps v0.1.1 // indirect github.com/knadh/koanf/providers/confmap v0.1.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/shirou/gopsutil/v4 v4.24.11 // indirect diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum index 1d23563778fa6..b0e60957170e6 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum @@ -4,14 +4,14 @@ github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytlju github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0 h1:VS4NTqwczwezMVvI6A7xYR3ugPmMUJ4FcdFrsdnZI2I= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 h1:hgbTFS6SkqbzOiWSfP58dZ/Jpjlmv6dpD4+V4LDHm2Q= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0 h1:8nW8jfcCIWzxWrpI31C0QYoOjTaUGp6USCwiRbP5Fp4= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0/go.mod h1:wuatEozcLYinJ0WYf0MlVTFtTzEmf+qyJet0H9foVAs= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 h1:/Dp1WBvekdusS9Tw9pLE7RG04eluNktQ29arLS4SpGM= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0/go.mod h1:asNuwNy1O2HbadkcZVuqmFGonfEzXS/SBvOo8V1MJvQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.22.0 h1:cXcKVEU1D0HlguR7GunnvuI70TghkarCa9DApqzMY94= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.22.0/go.mod h1:ES00EXfyEKgUkjd93tAXCxJA6i0seeOhZoS5Cj2qzzg= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 h1:yfk2cF8Bx98fSFpGrehEHh1FRqewfxcCTAbUDt5r3F8= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0/go.mod h1:9qzpnBSxSOnKzbF/uHket3SSlQihQHix/ZRC2nZUUYQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.22.0 h1:w9+ngZDYUMLW+GSRA8x1DvVbuMR+cwlGb8VLwZfgBGs= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.22.0/go.mod h1:UsfqLgiD6Sjhpjkg+YzAd+TdKUZ2m6ZZ8t+tEkLNTMA= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0 h1:63SzQz9Ab8XJj8fQKQz6UZNBhOm8rucwzbDfwTVF6dQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0/go.mod h1:E/PY/aQ6S/N5hBPHXZRGmovs5b1BSi4RHGNcB4yP/Z0= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= diff --git a/comp/otelcol/otlp/components/statsprocessor/go.mod b/comp/otelcol/otlp/components/statsprocessor/go.mod index df37ca815b508..8a0a6409f886f 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.mod +++ b/comp/otelcol/otlp/components/statsprocessor/go.mod @@ -23,7 +23,7 @@ require ( github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 github.com/DataDog/datadog-go/v5 v5.5.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 github.com/stretchr/testify v1.10.0 go.opentelemetry.io/collector/component/componenttest v0.115.0 go.opentelemetry.io/collector/pdata v1.21.0 diff --git a/comp/otelcol/otlp/components/statsprocessor/go.sum b/comp/otelcol/otlp/components/statsprocessor/go.sum index 0a9aeb5b8e7a1..13b6ed7206fcd 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.sum +++ b/comp/otelcol/otlp/components/statsprocessor/go.sum @@ -4,8 +4,8 @@ github.com/DataDog/go-sqllexer v0.0.17 h1:u47fJAVg/+5DA74ZW3w0Qu+3qXHd3GtnA8ZBYi github.com/DataDog/go-sqllexer v0.0.17/go.mod h1:KwkYhpFEVIq+BfobkTC1vfqm4gTi65skV/DpDBXtexc= github.com/DataDog/go-tuf v1.1.0-0.5.2 h1:4CagiIekonLSfL8GMHRHcHudo1fQnxELS9g4tiAupQ4= github.com/DataDog/go-tuf v1.1.0-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 h1:hgbTFS6SkqbzOiWSfP58dZ/Jpjlmv6dpD4+V4LDHm2Q= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 h1:yfk2cF8Bx98fSFpGrehEHh1FRqewfxcCTAbUDt5r3F8= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0/go.mod h1:9qzpnBSxSOnKzbF/uHket3SSlQihQHix/ZRC2nZUUYQ= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= diff --git a/comp/otelcol/otlp/testutil/go.mod b/comp/otelcol/otlp/testutil/go.mod index 2e2221439dab2..58832aca7482e 100644 --- a/comp/otelcol/otlp/testutil/go.mod +++ b/comp/otelcol/otlp/testutil/go.mod @@ -37,8 +37,8 @@ require ( github.com/DataDog/datadog-agent/pkg/config/model v0.59.0 github.com/DataDog/datadog-agent/pkg/config/setup v0.59.0 github.com/DataDog/datadog-agent/pkg/proto v0.55.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.22.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 github.com/DataDog/sketches-go v1.4.6 github.com/stretchr/testify v1.10.0 go.opentelemetry.io/collector/pdata v1.21.0 diff --git a/comp/otelcol/otlp/testutil/go.sum b/comp/otelcol/otlp/testutil/go.sum index edaa99bbf35cf..22f79264c82e8 100644 --- a/comp/otelcol/otlp/testutil/go.sum +++ b/comp/otelcol/otlp/testutil/go.sum @@ -1,9 +1,9 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0 h1:U+p1i7+upWb4qOIOOvjS/92iMUGlSzEC1tRxVo0Lg8Y= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0/go.mod h1:dOjp1lg4jwYyIbpnqW+DoOV8qD+70C+lgpINFvUqasQ= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 h1:hgbTFS6SkqbzOiWSfP58dZ/Jpjlmv6dpD4+V4LDHm2Q= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.22.0 h1:r1Dx2cRHCBWkVluSZA41i4eoI/nOGbcrrZdkqWjoFCc= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.22.0/go.mod h1:+/dkO8ZiMa8rfm4SmtTF6qPUdBbBcvsWWKaO4xPKAIk= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 h1:yfk2cF8Bx98fSFpGrehEHh1FRqewfxcCTAbUDt5r3F8= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0/go.mod h1:9qzpnBSxSOnKzbF/uHket3SSlQihQHix/ZRC2nZUUYQ= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= diff --git a/comp/trace/agent/def/go.mod b/comp/trace/agent/def/go.mod index 6fa2850adce42..56d13f69c88cf 100644 --- a/comp/trace/agent/def/go.mod +++ b/comp/trace/agent/def/go.mod @@ -6,15 +6,10 @@ replace github.com/DataDog/datadog-agent/pkg/proto => ../../../../pkg/proto require ( github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 go.opentelemetry.io/collector/pdata v1.21.0 ) -require ( - go.opentelemetry.io/collector/component/componenttest v0.115.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect -) - require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/json-iterator/go v1.1.12 // indirect diff --git a/comp/trace/agent/def/go.sum b/comp/trace/agent/def/go.sum index 51fa28af83aac..7b3dbbc7fe0b3 100644 --- a/comp/trace/agent/def/go.sum +++ b/comp/trace/agent/def/go.sum @@ -1,5 +1,5 @@ -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 h1:hgbTFS6SkqbzOiWSfP58dZ/Jpjlmv6dpD4+V4LDHm2Q= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 h1:yfk2cF8Bx98fSFpGrehEHh1FRqewfxcCTAbUDt5r3F8= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0/go.mod h1:9qzpnBSxSOnKzbF/uHket3SSlQihQHix/ZRC2nZUUYQ= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= diff --git a/go.mod b/go.mod index e4a9b163a0ed1..a01741a7d419f 100644 --- a/go.mod +++ b/go.mod @@ -162,9 +162,9 @@ require ( github.com/DataDog/ebpf-manager v0.7.4 github.com/DataDog/gopsutil v1.2.2 github.com/DataDog/nikos v1.12.8 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.22.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0 github.com/DataDog/sketches-go v1.4.6 github.com/DataDog/viper v1.14.0 github.com/DataDog/watermarkpodautoscaler v0.5.3-0.20241023200123-ab786c1724cf @@ -803,10 +803,10 @@ require ( github.com/DataDog/datadog-agent/pkg/util/buf v0.56.0-rc.3 // indirect github.com/DataDog/datadog-agent/pkg/util/statstracker v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect - github.com/DataDog/datadog-api-client-go/v2 v2.31.0 // indirect + github.com/DataDog/datadog-api-client-go/v2 v2.33.0 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.22.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.22.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 // indirect github.com/Intevation/gval v1.3.0 // indirect github.com/Intevation/jsonpath v0.2.1 // indirect diff --git a/go.sum b/go.sum index c6cb56a57dc59..99aabf21db82e 100644 --- a/go.sum +++ b/go.sum @@ -125,8 +125,8 @@ github.com/DataDog/cast v1.8.0 h1:uooY8bMzq+cjgiNP1VTquCWve5emgk8fRspZojJwQa8= github.com/DataDog/cast v1.8.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/DataDog/datadog-agent/comp/core/log v0.56.2 h1:qvBT+FfjKGqimyEvmsNHCZKbTfBJAdUZSVy2IZQ8HS4= github.com/DataDog/datadog-agent/comp/core/log v0.56.2/go.mod h1:ivJ/RMZjTNkoPPNDX+v/nnBwABLCiMv1vQA5tk/HCR4= -github.com/DataDog/datadog-api-client-go/v2 v2.31.0 h1:JfJhYlHfLzvauI8u6h23smTooWYe6quNhhg9gpTszWY= -github.com/DataDog/datadog-api-client-go/v2 v2.31.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= +github.com/DataDog/datadog-api-client-go/v2 v2.33.0 h1:OI6kDnJeQmkjfGzxmP0XUQUxMD4tp6oAPXnnJ4VpgUM= +github.com/DataDog/datadog-api-client-go/v2 v2.33.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= @@ -160,18 +160,18 @@ github.com/DataDog/netlink v1.0.1-0.20240223195320-c7a4f832a3d1 h1:HnvrdC79xJ+RP github.com/DataDog/netlink v1.0.1-0.20240223195320-c7a4f832a3d1/go.mod h1:whJevzBpTrid75eZy99s3DqCmy05NfibNaF2Ol5Ox5A= github.com/DataDog/nikos v1.12.8 h1:naQa3ve9Rv0lFIWC2H41zpqnhbBFLlYUIXu9jK7l84o= github.com/DataDog/nikos v1.12.8/go.mod h1:BGSRgJ6w1ji26//oGecmYiOFMWFmMARIOu0Fr7CKvB8= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0 h1:U+p1i7+upWb4qOIOOvjS/92iMUGlSzEC1tRxVo0Lg8Y= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0/go.mod h1:dOjp1lg4jwYyIbpnqW+DoOV8qD+70C+lgpINFvUqasQ= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0 h1:VS4NTqwczwezMVvI6A7xYR3ugPmMUJ4FcdFrsdnZI2I= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 h1:hgbTFS6SkqbzOiWSfP58dZ/Jpjlmv6dpD4+V4LDHm2Q= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0 h1:XD9Kd+baO66+tfbdanOFSMGEfwWfnrn/IxG/Dc5bv5I= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0/go.mod h1:9ByLz9jISc176DzjIdaRfRKwaitqF8ie6RTvfP8Aufo= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0 h1:8nW8jfcCIWzxWrpI31C0QYoOjTaUGp6USCwiRbP5Fp4= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0/go.mod h1:wuatEozcLYinJ0WYf0MlVTFtTzEmf+qyJet0H9foVAs= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 h1:/Dp1WBvekdusS9Tw9pLE7RG04eluNktQ29arLS4SpGM= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0/go.mod h1:asNuwNy1O2HbadkcZVuqmFGonfEzXS/SBvOo8V1MJvQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.22.0 h1:r1Dx2cRHCBWkVluSZA41i4eoI/nOGbcrrZdkqWjoFCc= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.22.0/go.mod h1:+/dkO8ZiMa8rfm4SmtTF6qPUdBbBcvsWWKaO4xPKAIk= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.22.0 h1:cXcKVEU1D0HlguR7GunnvuI70TghkarCa9DApqzMY94= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.22.0/go.mod h1:ES00EXfyEKgUkjd93tAXCxJA6i0seeOhZoS5Cj2qzzg= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 h1:yfk2cF8Bx98fSFpGrehEHh1FRqewfxcCTAbUDt5r3F8= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0/go.mod h1:9qzpnBSxSOnKzbF/uHket3SSlQihQHix/ZRC2nZUUYQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.22.0 h1:Zqj8YUZ/ualUhM8GDCQX6xKnUJKEiG0eYdFGWmIDG30= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.22.0/go.mod h1:lpr4q6g2TB0BHeLHaz/XleKm8YXQjuxiQEb9Q9HXXE0= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.22.0 h1:w9+ngZDYUMLW+GSRA8x1DvVbuMR+cwlGb8VLwZfgBGs= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.22.0/go.mod h1:UsfqLgiD6Sjhpjkg+YzAd+TdKUZ2m6ZZ8t+tEkLNTMA= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0 h1:63SzQz9Ab8XJj8fQKQz6UZNBhOm8rucwzbDfwTVF6dQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0/go.mod h1:E/PY/aQ6S/N5hBPHXZRGmovs5b1BSi4RHGNcB4yP/Z0= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/trivy v0.0.0-20241126101205-8517f9b946f4 h1:UVL5oU/8o0JhEv8Js6qxJgiqeV+PzPw/aldojyexS/U= diff --git a/pkg/metrics/go.mod b/pkg/metrics/go.mod index 46137034d3399..a7369cfd728f6 100644 --- a/pkg/metrics/go.mod +++ b/pkg/metrics/go.mod @@ -47,7 +47,7 @@ require ( github.com/DataDog/datadog-agent/pkg/telemetry v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/buf v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 - github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0 github.com/stretchr/testify v1.10.0 go.uber.org/atomic v1.11.0 ) diff --git a/pkg/metrics/go.sum b/pkg/metrics/go.sum index 0b55a947b65bf..cc70504832885 100644 --- a/pkg/metrics/go.sum +++ b/pkg/metrics/go.sum @@ -1,9 +1,9 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0 h1:VS4NTqwczwezMVvI6A7xYR3ugPmMUJ4FcdFrsdnZI2I= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 h1:/Dp1WBvekdusS9Tw9pLE7RG04eluNktQ29arLS4SpGM= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0/go.mod h1:asNuwNy1O2HbadkcZVuqmFGonfEzXS/SBvOo8V1MJvQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.22.0 h1:cXcKVEU1D0HlguR7GunnvuI70TghkarCa9DApqzMY94= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.22.0/go.mod h1:ES00EXfyEKgUkjd93tAXCxJA6i0seeOhZoS5Cj2qzzg= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0 h1:63SzQz9Ab8XJj8fQKQz6UZNBhOm8rucwzbDfwTVF6dQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0/go.mod h1:E/PY/aQ6S/N5hBPHXZRGmovs5b1BSi4RHGNcB4yP/Z0= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= diff --git a/pkg/serializer/go.mod b/pkg/serializer/go.mod index dd7f21c9fdbe9..62d3ab7c2450c 100644 --- a/pkg/serializer/go.mod +++ b/pkg/serializer/go.mod @@ -79,7 +79,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/json v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/version v0.59.1 - github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0 github.com/gogo/protobuf v1.3.2 github.com/json-iterator/go v1.1.12 github.com/protocolbuffers/protoscope v0.0.0-20221109213918-8e7a6aafa2c9 diff --git a/pkg/serializer/go.sum b/pkg/serializer/go.sum index 67815a3db8c1d..240d357b106d4 100644 --- a/pkg/serializer/go.sum +++ b/pkg/serializer/go.sum @@ -4,10 +4,10 @@ github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytlju github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0 h1:VS4NTqwczwezMVvI6A7xYR3ugPmMUJ4FcdFrsdnZI2I= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 h1:/Dp1WBvekdusS9Tw9pLE7RG04eluNktQ29arLS4SpGM= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0/go.mod h1:asNuwNy1O2HbadkcZVuqmFGonfEzXS/SBvOo8V1MJvQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.22.0 h1:cXcKVEU1D0HlguR7GunnvuI70TghkarCa9DApqzMY94= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.22.0/go.mod h1:ES00EXfyEKgUkjd93tAXCxJA6i0seeOhZoS5Cj2qzzg= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0 h1:63SzQz9Ab8XJj8fQKQz6UZNBhOm8rucwzbDfwTVF6dQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0/go.mod h1:E/PY/aQ6S/N5hBPHXZRGmovs5b1BSi4RHGNcB4yP/Z0= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= diff --git a/pkg/trace/go.mod b/pkg/trace/go.mod index 841d7e3e53b86..6fbe7317b66c5 100644 --- a/pkg/trace/go.mod +++ b/pkg/trace/go.mod @@ -21,7 +21,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 github.com/DataDog/datadog-go/v5 v5.5.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 github.com/DataDog/sketches-go v1.4.6 github.com/Microsoft/go-winio v0.6.2 github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect diff --git a/pkg/trace/go.sum b/pkg/trace/go.sum index 70bcf40a80bc6..75f5a8bd8498a 100644 --- a/pkg/trace/go.sum +++ b/pkg/trace/go.sum @@ -4,8 +4,8 @@ github.com/DataDog/go-sqllexer v0.0.17 h1:u47fJAVg/+5DA74ZW3w0Qu+3qXHd3GtnA8ZBYi github.com/DataDog/go-sqllexer v0.0.17/go.mod h1:KwkYhpFEVIq+BfobkTC1vfqm4gTi65skV/DpDBXtexc= github.com/DataDog/go-tuf v1.1.0-0.5.2 h1:4CagiIekonLSfL8GMHRHcHudo1fQnxELS9g4tiAupQ4= github.com/DataDog/go-tuf v1.1.0-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 h1:hgbTFS6SkqbzOiWSfP58dZ/Jpjlmv6dpD4+V4LDHm2Q= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 h1:yfk2cF8Bx98fSFpGrehEHh1FRqewfxcCTAbUDt5r3F8= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0/go.mod h1:9qzpnBSxSOnKzbF/uHket3SSlQihQHix/ZRC2nZUUYQ= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= diff --git a/pkg/trace/stats/oteltest/go.mod b/pkg/trace/stats/oteltest/go.mod index c34d20c5a672f..dafb9c2cd7a8b 100644 --- a/pkg/trace/stats/oteltest/go.mod +++ b/pkg/trace/stats/oteltest/go.mod @@ -7,7 +7,7 @@ require ( github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 github.com/DataDog/datadog-go/v5 v5.5.0 - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 github.com/google/go-cmp v0.6.0 github.com/stretchr/testify v1.10.0 go.opentelemetry.io/collector/component/componenttest v0.115.0 diff --git a/pkg/trace/stats/oteltest/go.sum b/pkg/trace/stats/oteltest/go.sum index 0a9aeb5b8e7a1..13b6ed7206fcd 100644 --- a/pkg/trace/stats/oteltest/go.sum +++ b/pkg/trace/stats/oteltest/go.sum @@ -4,8 +4,8 @@ github.com/DataDog/go-sqllexer v0.0.17 h1:u47fJAVg/+5DA74ZW3w0Qu+3qXHd3GtnA8ZBYi github.com/DataDog/go-sqllexer v0.0.17/go.mod h1:KwkYhpFEVIq+BfobkTC1vfqm4gTi65skV/DpDBXtexc= github.com/DataDog/go-tuf v1.1.0-0.5.2 h1:4CagiIekonLSfL8GMHRHcHudo1fQnxELS9g4tiAupQ4= github.com/DataDog/go-tuf v1.1.0-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 h1:hgbTFS6SkqbzOiWSfP58dZ/Jpjlmv6dpD4+V4LDHm2Q= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 h1:yfk2cF8Bx98fSFpGrehEHh1FRqewfxcCTAbUDt5r3F8= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0/go.mod h1:9qzpnBSxSOnKzbF/uHket3SSlQihQHix/ZRC2nZUUYQ= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= diff --git a/test/new-e2e/go.mod b/test/new-e2e/go.mod index 0259ec0295ff5..8b0a384191503 100644 --- a/test/new-e2e/go.mod +++ b/test/new-e2e/go.mod @@ -52,7 +52,7 @@ require ( github.com/DataDog/datadog-agent/pkg/version v0.59.1 github.com/DataDog/datadog-agent/test/fakeintake v0.56.0-rc.3 github.com/DataDog/datadog-api-client-go v1.16.0 - github.com/DataDog/datadog-api-client-go/v2 v2.31.0 + github.com/DataDog/datadog-api-client-go/v2 v2.33.0 // Are you bumping github.com/DataDog/test-infra-definitions ? // You should bump `TEST_INFRA_DEFINITIONS_BUILDIMAGES` in `.gitlab/common/test_infra_version.yml` // `TEST_INFRA_DEFINITIONS_BUILDIMAGES` matches the commit sha in the module version diff --git a/test/new-e2e/go.sum b/test/new-e2e/go.sum index ce7a63be95459..d8ba72c668e62 100644 --- a/test/new-e2e/go.sum +++ b/test/new-e2e/go.sum @@ -11,8 +11,8 @@ github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytlju github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/datadog-api-client-go v1.16.0 h1:5jOZv1m98criCvYTa3qpW8Hzv301nbZX3K9yJtwGyWY= github.com/DataDog/datadog-api-client-go v1.16.0/go.mod h1:PgrP2ABuJWL3Auw2iEkemAJ/r72ghG4DQQmb5sgnKW4= -github.com/DataDog/datadog-api-client-go/v2 v2.31.0 h1:JfJhYlHfLzvauI8u6h23smTooWYe6quNhhg9gpTszWY= -github.com/DataDog/datadog-api-client-go/v2 v2.31.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= +github.com/DataDog/datadog-api-client-go/v2 v2.33.0 h1:OI6kDnJeQmkjfGzxmP0XUQUxMD4tp6oAPXnnJ4VpgUM= +github.com/DataDog/datadog-api-client-go/v2 v2.33.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= diff --git a/test/otel/go.mod b/test/otel/go.mod index 05ff3908f3ad9..c1d17501161ea 100644 --- a/test/otel/go.mod +++ b/test/otel/go.mod @@ -111,8 +111,8 @@ require ( ) require ( - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.22.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/patrickmn/go-cache v2.1.0+incompatible // indirect go.opentelemetry.io/collector/featuregate v1.21.0 // indirect @@ -174,13 +174,13 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/datadog-api-client-go/v2 v2.31.0 // indirect + github.com/DataDog/datadog-api-client-go/v2 v2.33.0 // indirect github.com/DataDog/datadog-go/v5 v5.5.0 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/go-sqllexer v0.0.17 // indirect github.com/DataDog/go-tuf v1.1.0-0.5.2 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 // indirect - github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 // indirect + github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.22.0 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect github.com/DataDog/viper v1.14.0 // indirect github.com/DataDog/zstd v1.5.6 // indirect @@ -235,7 +235,6 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.115.0 // indirect github.com/opencontainers/runtime-spec v1.2.0 // indirect github.com/outcaste-io/ristretto v0.2.3 // indirect github.com/pelletier/go-toml v1.9.5 // indirect diff --git a/test/otel/go.sum b/test/otel/go.sum index d11d5572caf01..e8d514c34bee5 100644 --- a/test/otel/go.sum +++ b/test/otel/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytljudgSY9O59zjc= github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= -github.com/DataDog/datadog-api-client-go/v2 v2.31.0 h1:JfJhYlHfLzvauI8u6h23smTooWYe6quNhhg9gpTszWY= -github.com/DataDog/datadog-api-client-go/v2 v2.31.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= +github.com/DataDog/datadog-api-client-go/v2 v2.33.0 h1:OI6kDnJeQmkjfGzxmP0XUQUxMD4tp6oAPXnnJ4VpgUM= +github.com/DataDog/datadog-api-client-go/v2 v2.33.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 h1:RoH7VLzTnxHEugRPIgnGlxwDFszFGI7b3WZZUtWuPRM= @@ -12,18 +12,18 @@ github.com/DataDog/go-sqllexer v0.0.17 h1:u47fJAVg/+5DA74ZW3w0Qu+3qXHd3GtnA8ZBYi github.com/DataDog/go-sqllexer v0.0.17/go.mod h1:KwkYhpFEVIq+BfobkTC1vfqm4gTi65skV/DpDBXtexc= github.com/DataDog/go-tuf v1.1.0-0.5.2 h1:4CagiIekonLSfL8GMHRHcHudo1fQnxELS9g4tiAupQ4= github.com/DataDog/go-tuf v1.1.0-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0 h1:U+p1i7+upWb4qOIOOvjS/92iMUGlSzEC1tRxVo0Lg8Y= -github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.21.0/go.mod h1:dOjp1lg4jwYyIbpnqW+DoOV8qD+70C+lgpINFvUqasQ= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0 h1:VS4NTqwczwezMVvI6A7xYR3ugPmMUJ4FcdFrsdnZI2I= -github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.21.0/go.mod h1:66XlN7QpQKqIvw8e2UbCXV5X8wGnEw851nT9BjJ75dY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0 h1:hgbTFS6SkqbzOiWSfP58dZ/Jpjlmv6dpD4+V4LDHm2Q= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.21.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0 h1:XD9Kd+baO66+tfbdanOFSMGEfwWfnrn/IxG/Dc5bv5I= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.21.0/go.mod h1:9ByLz9jISc176DzjIdaRfRKwaitqF8ie6RTvfP8Aufo= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0 h1:8nW8jfcCIWzxWrpI31C0QYoOjTaUGp6USCwiRbP5Fp4= -github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.21.0/go.mod h1:wuatEozcLYinJ0WYf0MlVTFtTzEmf+qyJet0H9foVAs= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0 h1:/Dp1WBvekdusS9Tw9pLE7RG04eluNktQ29arLS4SpGM= -github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.21.0/go.mod h1:asNuwNy1O2HbadkcZVuqmFGonfEzXS/SBvOo8V1MJvQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.22.0 h1:r1Dx2cRHCBWkVluSZA41i4eoI/nOGbcrrZdkqWjoFCc= +github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.22.0/go.mod h1:+/dkO8ZiMa8rfm4SmtTF6qPUdBbBcvsWWKaO4xPKAIk= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.22.0 h1:cXcKVEU1D0HlguR7GunnvuI70TghkarCa9DApqzMY94= +github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.22.0/go.mod h1:ES00EXfyEKgUkjd93tAXCxJA6i0seeOhZoS5Cj2qzzg= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 h1:yfk2cF8Bx98fSFpGrehEHh1FRqewfxcCTAbUDt5r3F8= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0/go.mod h1:9qzpnBSxSOnKzbF/uHket3SSlQihQHix/ZRC2nZUUYQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.22.0 h1:Zqj8YUZ/ualUhM8GDCQX6xKnUJKEiG0eYdFGWmIDG30= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.22.0/go.mod h1:lpr4q6g2TB0BHeLHaz/XleKm8YXQjuxiQEb9Q9HXXE0= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.22.0 h1:w9+ngZDYUMLW+GSRA8x1DvVbuMR+cwlGb8VLwZfgBGs= +github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.22.0/go.mod h1:UsfqLgiD6Sjhpjkg+YzAd+TdKUZ2m6ZZ8t+tEkLNTMA= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0 h1:63SzQz9Ab8XJj8fQKQz6UZNBhOm8rucwzbDfwTVF6dQ= +github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0/go.mod h1:E/PY/aQ6S/N5hBPHXZRGmovs5b1BSi4RHGNcB4yP/Z0= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= From 28e9e7b8d224e9ca44a0bcec9d520146d772cb15 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 15:25:09 +0000 Subject: [PATCH 197/303] Bump actions/download-artifact from 4.1.7 to 4.1.8 (#27430) Co-authored-by: chouetz --- .github/workflows/cws-btfhub-sync.yml | 2 +- .github/workflows/docs-dev.yml | 2 +- .github/workflows/serverless-benchmarks.yml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cws-btfhub-sync.yml b/.github/workflows/cws-btfhub-sync.yml index 0a61cd6d38c0c..b5f1ba4df7b0c 100644 --- a/.github/workflows/cws-btfhub-sync.yml +++ b/.github/workflows/cws-btfhub-sync.yml @@ -127,7 +127,7 @@ jobs: go-version-file: '.go-version' - name: Download All Artifacts - uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: path: ./dev/dist/constants pattern: constants-* diff --git a/.github/workflows/docs-dev.yml b/.github/workflows/docs-dev.yml index 2f0cc36c01ce8..8602adc372c1f 100644 --- a/.github/workflows/docs-dev.yml +++ b/.github/workflows/docs-dev.yml @@ -65,7 +65,7 @@ jobs: - build steps: - - uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 + - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: name: documentation path: site diff --git a/.github/workflows/serverless-benchmarks.yml b/.github/workflows/serverless-benchmarks.yml index a393d8e08917e..195f3441c4591 100644 --- a/.github/workflows/serverless-benchmarks.yml +++ b/.github/workflows/serverless-benchmarks.yml @@ -112,12 +112,12 @@ jobs: go install golang.org/x/perf/cmd/benchstat@latest - name: Download baseline artifact - uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: name: baseline.log path: baseline - name: Download current artifact - uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: name: current.log path: current From 39add53ada9fe444a957bddf3b25ac5367360a63 Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Fri, 13 Dec 2024 16:46:13 +0100 Subject: [PATCH 198/303] [ASCII-2608] Add workflow to update golang.org/x deps (#32086) --- .github/CODEOWNERS | 1 + .github/workflows/update_dependencies.yml | 82 +++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 .github/workflows/update_dependencies.yml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c810ce499b611..8c82bee16308e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -59,6 +59,7 @@ /.github/workflows/cws-btfhub-sync.yml @DataDog/agent-security /.github/workflows/gohai.yml @DataDog/agent-shared-components /.github/workflows/go-update-commenter.yml @DataDog/agent-shared-components +/.github/workflows/update_dependencies.yml @DataDog/agent-shared-components /.github/workflows/buildimages-update.yml @DataDog/agent-delivery @DataDog/agent-shared-components /.github/workflows/collector-generate-and-update.yml @DataDog/opentelemetry diff --git a/.github/workflows/update_dependencies.yml b/.github/workflows/update_dependencies.yml new file mode 100644 index 0000000000000..dbcbc436dabdd --- /dev/null +++ b/.github/workflows/update_dependencies.yml @@ -0,0 +1,82 @@ +name: Update golang.org/x/... dependencies +on: + schedule: + # Run every 10th of the month, as it seems golang.org/x/... packages are usually + # released at the beginning of the month. + # Run at 6AM UTC so that it's ready at the beginning of the day CET. + - cron: "0 6 10 * *" + + # allow triggering the workflow manually + workflow_dispatch: + +permissions: {} + +jobs: + backport: + name: Update golang.org/x/... dependencies + runs-on: ubuntu-latest + permissions: {} # the workflow uses the GitHub App token to create the PR so no specific permissions needed here + steps: + - uses: actions/create-github-app-token@5d869da34e18e7287c1daad50e0b8ea0f506ce69 # v1.11.0 + id: app-token + with: + app-id: ${{ vars.DD_GITHUB_TOKEN_GENERATOR_APP_ID }} + private-key: ${{ secrets.DD_GITHUB_TOKEN_GENERATOR_PRIVATE_KEY }} + - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + with: + # credentials are needed to create the PR at the end of the workflow + persist-credentials: true + token: ${{ steps.app-token.outputs.token }} + - uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2 + with: + go-version-file: ".go-version" + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0 + with: + cache: "pip" + - name: Install dependencies + run: pip install -r requirements.txt -r tasks/requirements.txt + - name: Update every golang.org/x/... package + run: | + go get -u golang.org/x/arch golang.org/x/crypto \ + golang.org/x/lint golang.org/x/mod \ + golang.org/x/net golang.org/x/sync \ + golang.org/x/sys golang.org/x/term \ + golang.org/x/text golang.org/x/time \ + golang.org/x/xerrors golang.org/x/tools \ + golang.org/x/exp + # run tidy twice because the first one doesn't always clean everything + # depending on module order + inv -e tidy tidy + - uses: stefanzweifel/git-auto-commit-action@8621497c8c39c72f3e2a999a26b4ca1b5058a842 # v5.0.1 + id: autocommit + with: + commit_message: "chore(deps): update all golang.org/x/... dependencies" + branch: update-golang-org-x-${{ github.run_id }}-${{ github.run_attempt }} + create_branch: true + skip_fetch: true + - name: Create PR + env: + TMP_PR_BODY_PATH: /tmp/pr_body + GH_TOKEN: ${{ steps.app-token.outputs.token }} + PR_TITLE: "[automated] Update golang.org/x/... dependencies" + PR_LABELS: "team/agent-shared-components,qa/done,changelog/no-changelog" + GITHUB_REF: ${{ github.ref }} + run: | + # Generate the PR description + cat > $TMP_PR_BODY_PATH <<- EOM + ### What does this PR do? + Update all \`golang.org/x/...\` dependencies. + + ### Motivation + Keep dependencies up-to-date, benefit from bug fixes and new features. + + ### Describe how you validated your changes + CI is considered enough to validate changes. + EOM + + # Create the PR + gh pr create \ + --base "$GITHUB_REF" \ + --title "$PR_TITLE" \ + --body-file "$TMP_PR_BODY_PATH" \ + --label "$PR_LABELS" From 8dc9c9de03ecbc56f47a301181f7e25aa0ebb009 Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Fri, 13 Dec 2024 17:40:37 +0100 Subject: [PATCH 199/303] fix(package_size): Sort the size in display message (#32014) --- tasks/libs/package/size.py | 34 +++++--------- tasks/libs/package/utils.py | 65 ++++++++++++++++++++++++++- tasks/package.py | 26 ++++++----- tasks/unit_tests/package_lib_tests.py | 51 +++++++++++++++------ tasks/unit_tests/package_tests.py | 18 +++++--- 5 files changed, 140 insertions(+), 54 deletions(-) diff --git a/tasks/libs/package/size.py b/tasks/libs/package/size.py index dad67823d3223..4743dfcd906de 100644 --- a/tasks/libs/package/size.py +++ b/tasks/libs/package/size.py @@ -7,7 +7,7 @@ from tasks.libs.common.constants import ORIGIN_CATEGORY, ORIGIN_PRODUCT, ORIGIN_SERVICE from tasks.libs.common.git import get_default_branch from tasks.libs.common.utils import get_metric_origin -from tasks.libs.package.utils import get_package_path +from tasks.libs.package.utils import find_package DEBIAN_OS = "debian" CENTOS_OS = "centos" @@ -158,33 +158,23 @@ def compute_package_size_metrics( return series -def compare(ctx, package_sizes, ancestor, arch, flavor, os_name, threshold): +def compare(ctx, package_sizes, ancestor, pkg_size): """ - Compare (or update) a package size with the ancestor package size. + Compare (or update, when on main branch) a package size with the ancestor package size. """ - if os_name == 'suse': - dir = os.environ['OMNIBUS_PACKAGE_DIR_SUSE'] - path = f'{dir}/{flavor}-7*{arch}.rpm' - else: - dir = os.environ['OMNIBUS_PACKAGE_DIR'] - separator = '_' if os_name == 'deb' else '-' - path = f'{dir}/{flavor}{separator}7*{arch}.{os_name}' - package_size = _get_uncompressed_size(ctx, get_package_path(path), os_name) + current_size = _get_uncompressed_size(ctx, find_package(pkg_size.path()), pkg_size.os) if os.environ['CI_COMMIT_REF_NAME'] == get_default_branch(): - package_sizes[ancestor][arch][flavor][os_name] = package_size + # On main, ancestor is the current commit, so we set the current value + package_sizes[ancestor][pkg_size.arch][pkg_size.flavor][pkg_size.os] = current_size return - previous_size = package_sizes[ancestor][arch][flavor][os_name] - diff = package_size - previous_size - - message = f"{flavor}-{arch}-{os_name} size {mb(package_size)} is OK: {mb(diff)} diff with previous {mb(previous_size)} (max: {mb(threshold)})" + previous_size = package_sizes[ancestor][pkg_size.arch][pkg_size.flavor][pkg_size.os] + pkg_size.compare(current_size, previous_size) - if diff > threshold: - emoji = "❌" - print(color_message(message.replace('OK', 'too large'), Color.RED), file=sys.stderr) + if pkg_size.ko(): + print(color_message(pkg_size.log(), Color.RED), file=sys.stderr) else: - emoji = "✅" if diff <= 0 else "⚠️" - print(message) - return f"|{flavor}-{arch}-{os_name}|{mb(diff)}|{emoji}|{mb(package_size)}|{mb(previous_size)}|{mb(threshold)}|" + print(pkg_size.log()) + return pkg_size def mb(value): diff --git a/tasks/libs/package/utils.py b/tasks/libs/package/utils.py index 298901732c33e..ec8363fcfa134 100644 --- a/tasks/libs/package/utils.py +++ b/tasks/libs/package/utils.py @@ -1,5 +1,6 @@ import glob import json +import os from invoke import Exit, UnexpectedExit @@ -11,7 +12,67 @@ PACKAGE_SIZE_S3_CI_BUCKET_URL = "s3://dd-ci-artefacts-build-stable/datadog-agent/package_size" -def get_package_path(glob_pattern): +class PackageSize: + def __init__(self, arch, flavor, os_name, threshold): + self.arch = arch + self.flavor = flavor + self.os = os_name + self.size = 0 + self.ancestor_size = 0 + self.diff = 0 + self.threshold = threshold + self.emoji = "✅" + + @property + def name(self): + return f"{self.flavor}-{self.arch}-{self.os}" + + def arch_name(self): + if self.arch in ["x86_64", "amd64"]: + return "amd" + return "arm" + + def ko(self): + return self.diff > self.threshold + + def path(self): + if self.os == 'suse': + dir = os.environ['OMNIBUS_PACKAGE_DIR_SUSE'] + return f'{dir}/{self.flavor}-7*{self.arch}.rpm' + else: + dir = os.environ['OMNIBUS_PACKAGE_DIR'] + separator = '_' if self.os == 'deb' else '-' + return f'{dir}/{self.flavor}{separator}7*{self.arch}.{self.os}' + + def compare(self, size, ancestor_size): + self.size = size + self.ancestor_size = ancestor_size + self.diff = self.size - self.ancestor_size + if self.ko(): + self.emoji = "❌" + elif self.diff > 0: + self.emoji = "⚠️" + + @staticmethod + def mb(value): + return f"{value / 1000000:.2f}MB" + + def log(self): + return f"{self.emoji} - {self.name} size {self.mb(self.size)}: {self.mb(self.diff)} diff[{self.diff}] with previous {self.mb(self.ancestor_size)} (max: {self.mb(self.threshold)})" + + def markdown(self): + elements = ( + self.name, + self.mb(self.diff), + self.emoji, + self.mb(self.size), + self.mb(self.ancestor_size), + self.mb(self.threshold), + ) + return f'|{"|".join(map(str, elements))}|' + + +def find_package(glob_pattern): package_paths = glob.glob(glob_pattern) if len(package_paths) > 1: raise Exit(code=1, message=color_message(f"Too many files matching {glob_pattern}: {package_paths}", "red")) @@ -103,4 +164,4 @@ def display_message(ctx, ancestor, rows, decision): ## Decision {decision} """ - pr_commenter(ctx, title="Package size comparison", body=message) + pr_commenter(ctx, title="Uncompressed package size comparison", body=message) diff --git a/tasks/package.py b/tasks/package.py index 307624be2f2f2..f2d49130152dc 100644 --- a/tasks/package.py +++ b/tasks/package.py @@ -14,9 +14,10 @@ compute_package_size_metrics, ) from tasks.libs.package.utils import ( + PackageSize, display_message, + find_package, get_ancestor, - get_package_path, list_packages, retrieve_package_sizes, upload_package_sizes, @@ -33,26 +34,29 @@ def check_size(ctx, filename: str = 'package_sizes.json', dry_run: bool = False) if ancestor in package_sizes: # The test already ran on this commit return - package_sizes[ancestor] = PACKAGE_SIZE_TEMPLATE + package_sizes[ancestor] = PACKAGE_SIZE_TEMPLATE.copy() package_sizes[ancestor]['timestamp'] = int(datetime.now().timestamp()) # Check size of packages print( color_message(f"Checking package sizes from {os.environ['CI_COMMIT_REF_NAME']} against {ancestor}", Color.BLUE) ) - size_table = "" + size_table = [] for package_info in list_packages(PACKAGE_SIZE_TEMPLATE): - size_table += f"{compare(ctx, package_sizes, ancestor, *package_info)}\n" + pkg_size = PackageSize(*package_info) + size_table.append(compare(ctx, package_sizes, ancestor, pkg_size)) if on_main: upload_package_sizes(ctx, package_sizes, filename, distant=not dry_run) else: - if "❌" in size_table: + size_table.sort(key=lambda x: (-x.diff, x.flavor, x.arch_name())) + size_message = "".join(f"{pkg_size.markdown()}\n" for pkg_size in size_table) + if "❌" in size_message: decision = "❌ Failed" - elif "⚠️" in size_table: + elif "⚠️" in size_message: decision = "⚠️ Warning" else: decision = "✅ Passed" - display_message(ctx, ancestor, size_table, decision) + display_message(ctx, ancestor, size_message, decision) if "Failed" in decision: raise Exit(code=1) @@ -62,11 +66,11 @@ def compare_size(ctx, new_package, stable_package, package_type, last_stable, th mb = 1000000 if package_type.endswith('deb'): - new_package_size = _get_deb_uncompressed_size(ctx, get_package_path(new_package)) - stable_package_size = _get_deb_uncompressed_size(ctx, get_package_path(stable_package)) + new_package_size = _get_deb_uncompressed_size(ctx, find_package(new_package)) + stable_package_size = _get_deb_uncompressed_size(ctx, find_package(stable_package)) else: - new_package_size = _get_rpm_uncompressed_size(ctx, get_package_path(new_package)) - stable_package_size = _get_rpm_uncompressed_size(ctx, get_package_path(stable_package)) + new_package_size = _get_rpm_uncompressed_size(ctx, find_package(new_package)) + stable_package_size = _get_rpm_uncompressed_size(ctx, find_package(stable_package)) threshold = int(threshold) diff --git a/tasks/unit_tests/package_lib_tests.py b/tasks/unit_tests/package_lib_tests.py index 57816701fd07c..984e4cc4f871c 100644 --- a/tasks/unit_tests/package_lib_tests.py +++ b/tasks/unit_tests/package_lib_tests.py @@ -6,13 +6,12 @@ from invoke import MockContext, Result from tasks.libs.package.size import ( - PACKAGE_SIZE_TEMPLATE, SCANNED_BINARIES, _get_uncompressed_size, compare, compute_package_size_metrics, ) -from tasks.libs.package.utils import get_ancestor, list_packages +from tasks.libs.package.utils import PackageSize, get_ancestor, list_packages class TestProduceSizeStats(unittest.TestCase): @@ -167,6 +166,28 @@ def test_get_suse_uncompressed_size(self): self.assertEqual(_get_uncompressed_size(c, flavor, 'suse'), 69) +class TestPackageSizeMethods(unittest.TestCase): + def test_markdown_row(self): + size = PackageSize("amd64", "datadog-agent", "deb", 70000000) + size.compare(67000000, 68000000) + self.assertEqual("|datadog-agent-amd64-deb|-1.00MB|✅|67.00MB|68.00MB|70.00MB|", size.markdown()) + + @patch.dict('os.environ', {'OMNIBUS_PACKAGE_DIR': 'root'}) + def test_path_deb(self): + size = PackageSize("amd64", "datadog-agent", "deb", 70000000) + self.assertEqual("root/datadog-agent_7*amd64.deb", size.path()) + + @patch.dict('os.environ', {'OMNIBUS_PACKAGE_DIR': 'root'}) + def test_path_rpm(self): + size = PackageSize("x86_64", "datadog-agent", "rpm", 70000000) + self.assertEqual("root/datadog-agent-7*x86_64.rpm", size.path()) + + @patch.dict('os.environ', {'OMNIBUS_PACKAGE_DIR_SUSE': 'rout'}) + def test_path_suse(self): + size = PackageSize("x86_64", "datadog-agent", "suse", 70000000) + self.assertEqual("rout/datadog-agent-7*x86_64.rpm", size.path()) + + class TestCompare(unittest.TestCase): package_sizes = {} pkg_root = 'tasks/unit_tests/testdata/packages' @@ -181,6 +202,7 @@ def setUp(self) -> None: @patch('builtins.print') def test_on_main(self, mock_print): flavor, arch, os_name = 'datadog-heroku-agent', 'amd64', 'deb' + s = PackageSize(arch, flavor, os_name, 2001) c = MockContext( run={ 'git merge-base HEAD origin/main': Result('12345'), @@ -189,9 +211,9 @@ def test_on_main(self, mock_print): ), } ) - self.package_sizes['12345'] = PACKAGE_SIZE_TEMPLATE + self.package_sizes['12345'] = {arch: {flavor: {os_name: 70000000}}} self.assertEqual(self.package_sizes['12345'][arch][flavor][os_name], 70000000) - res = compare(c, self.package_sizes, '12345', arch, flavor, os_name, 2001) + res = compare(c, self.package_sizes, '12345', s) self.assertIsNone(res) self.assertEqual(self.package_sizes['12345'][arch][flavor][os_name], 43008) mock_print.assert_not_called() @@ -203,16 +225,17 @@ def test_on_main(self, mock_print): @patch('builtins.print') def test_on_branch_warning(self, mock_print): flavor, arch, os_name = 'datadog-agent', 'aarch64', 'suse' + s = PackageSize(arch, flavor, os_name, 70000000) c = MockContext( run={ 'git merge-base HEAD origin/main': Result('25'), f"rpm -qip {self.pkg_root}/{flavor}-7.{arch}.rpm | grep Size | cut -d : -f 2 | xargs": Result(69000000), } ) - res = compare(c, self.package_sizes, '25', arch, flavor, os_name, 70000000) - self.assertEqual(res, "|datadog-agent-aarch64-suse|1.00MB|⚠️|69.00MB|68.00MB|70.00MB|") + res = compare(c, self.package_sizes, '25', s) + self.assertEqual(res.markdown(), "|datadog-agent-aarch64-suse|1.00MB|⚠️|69.00MB|68.00MB|70.00MB|") mock_print.assert_called_with( - f"{flavor}-{arch}-{os_name} size 69.00MB is OK: 1.00MB diff with previous 68.00MB (max: 70.00MB)" + f"⚠️ - {flavor}-{arch}-{os_name} size 69.00MB: 1.00MB diff[1000000] with previous 68.00MB (max: 70.00MB)" ) @patch.dict( @@ -221,6 +244,7 @@ def test_on_branch_warning(self, mock_print): @patch('builtins.print') def test_on_branch_ok_rpm(self, mock_print): flavor, arch, os_name = 'datadog-iot-agent', 'x86_64', 'rpm' + s = PackageSize(arch, flavor, os_name, 70000000) c = MockContext( run={ 'git merge-base HEAD origin/main': Result('25'), @@ -229,10 +253,10 @@ def test_on_branch_ok_rpm(self, mock_print): ), } ) - res = compare(c, self.package_sizes, '25', arch, flavor, os_name, 70000000) - self.assertEqual(res, "|datadog-iot-agent-x86_64-rpm|-9.00MB|✅|69.00MB|78.00MB|70.00MB|") + res = compare(c, self.package_sizes, '25', s) + self.assertEqual(res.markdown(), "|datadog-iot-agent-x86_64-rpm|-9.00MB|✅|69.00MB|78.00MB|70.00MB|") mock_print.assert_called_with( - f"{flavor}-{arch}-{os_name} size 69.00MB is OK: -9.00MB diff with previous 78.00MB (max: 70.00MB)" + f"✅ - {flavor}-{arch}-{os_name} size 69.00MB: -9.00MB diff[-9000000] with previous 78.00MB (max: 70.00MB)" ) @patch.dict( @@ -242,6 +266,7 @@ def test_on_branch_ok_rpm(self, mock_print): @patch('builtins.print') def test_on_branch_ko(self, mock_print): flavor, arch, os_name = 'datadog-agent', 'aarch64', 'suse' + s = PackageSize(arch, flavor, os_name, 70000000) c = MockContext( run={ 'git merge-base HEAD origin/main': Result('25'), @@ -250,9 +275,9 @@ def test_on_branch_ko(self, mock_print): ), } ) - res = compare(c, self.package_sizes, '25', arch, flavor, os_name, 70000000) - self.assertEqual(res, "|datadog-agent-aarch64-suse|71.00MB|❌|139.00MB|68.00MB|70.00MB|") + res = compare(c, self.package_sizes, '25', s) + self.assertEqual(res.markdown(), "|datadog-agent-aarch64-suse|71.00MB|❌|139.00MB|68.00MB|70.00MB|") mock_print.assert_called_with( - "\x1b[91mdatadog-agent-aarch64-suse size 139.00MB is too large: 71.00MB diff with previous 68.00MB (max: 70.00MB)\x1b[0m", + "\x1b[91m❌ - datadog-agent-aarch64-suse size 139.00MB: 71.00MB diff[71000000] with previous 68.00MB (max: 70.00MB)\x1b[0m", file=sys.stderr, ) diff --git a/tasks/unit_tests/package_tests.py b/tasks/unit_tests/package_tests.py index b1698695b8e5e..1c7e0c47dc249 100644 --- a/tasks/unit_tests/package_tests.py +++ b/tasks/unit_tests/package_tests.py @@ -16,19 +16,25 @@ class TestCheckSize(unittest.TestCase): 'CI_COMMIT_REF_NAME': 'pikachu', }, ) - @patch('tasks.libs.package.size.get_package_path', new=MagicMock(return_value='datadog-agent')) - @patch('tasks.package.display_message', new=MagicMock()) - def test_dev_branch_ko(self): + @patch('tasks.libs.package.size.find_package', new=MagicMock(return_value='datadog-agent')) + @patch('tasks.package.display_message') + def test_dev_branch_ko(self, display_mock): flavor = 'datadog-agent' c = MockContext( run={ 'git merge-base HEAD origin/main': Result('25'), f"dpkg-deb --info {flavor} | grep Installed-Size | cut -d : -f 2 | xargs": Result(42), - f"rpm -qip {flavor} | grep Size | cut -d : -f 2 | xargs": Result(69000000), + f"rpm -qip {flavor} | grep Size | cut -d : -f 2 | xargs": Result(141000000), } ) with self.assertRaises(Exit): check_size(c, filename='tasks/unit_tests/testdata/package_sizes_real.json', dry_run=True) + display_mock.assert_called_with( + c, + '12345', + '|datadog-dogstatsd-x86_64-rpm|131.00MB|❌|141.00MB|10.00MB|10.00MB|\n|datadog-dogstatsd-x86_64-suse|131.00MB|❌|141.00MB|10.00MB|10.00MB|\n|datadog-iot-agent-x86_64-rpm|131.00MB|❌|141.00MB|10.00MB|10.00MB|\n|datadog-iot-agent-x86_64-suse|131.00MB|❌|141.00MB|10.00MB|10.00MB|\n|datadog-iot-agent-aarch64-rpm|131.00MB|❌|141.00MB|10.00MB|10.00MB|\n|datadog-agent-x86_64-rpm|1.00MB|⚠️|141.00MB|140.00MB|140.00MB|\n|datadog-agent-x86_64-suse|1.00MB|⚠️|141.00MB|140.00MB|140.00MB|\n|datadog-agent-aarch64-rpm|1.00MB|⚠️|141.00MB|140.00MB|140.00MB|\n|datadog-dogstatsd-amd64-deb|-9.96MB|✅|0.04MB|10.00MB|10.00MB|\n|datadog-dogstatsd-arm64-deb|-9.96MB|✅|0.04MB|10.00MB|10.00MB|\n|datadog-iot-agent-amd64-deb|-9.96MB|✅|0.04MB|10.00MB|10.00MB|\n|datadog-iot-agent-arm64-deb|-9.96MB|✅|0.04MB|10.00MB|10.00MB|\n|datadog-heroku-agent-amd64-deb|-69.96MB|✅|0.04MB|70.00MB|70.00MB|\n|datadog-agent-amd64-deb|-139.96MB|✅|0.04MB|140.00MB|140.00MB|\n|datadog-agent-arm64-deb|-139.96MB|✅|0.04MB|140.00MB|140.00MB|\n', + '❌ Failed', + ) @patch('builtins.print') @patch.dict( @@ -39,7 +45,7 @@ def test_dev_branch_ko(self): 'CI_COMMIT_REF_NAME': 'pikachu', }, ) - @patch('tasks.libs.package.size.get_package_path', new=MagicMock(return_value='datadog-agent')) + @patch('tasks.libs.package.size.find_package', new=MagicMock(return_value='datadog-agent')) @patch('tasks.package.display_message', new=MagicMock()) @patch('tasks.package.upload_package_sizes') def test_dev_branch_ok(self, upload_mock, print_mock): @@ -64,7 +70,7 @@ def test_dev_branch_ok(self, upload_mock, print_mock): 'CI_COMMIT_REF_NAME': 'main', }, ) - @patch('tasks.libs.package.size.get_package_path', new=MagicMock(return_value='datadog-agent')) + @patch('tasks.libs.package.size.find_package', new=MagicMock(return_value='datadog-agent')) @patch('tasks.package.display_message', new=MagicMock()) def test_main_branch_ok(self): flavor = 'datadog-agent' From f95df913d2b76227a296ed9df61d52a54c86e867 Mon Sep 17 00:00:00 2001 From: Spencer Gilbert Date: Fri, 13 Dec 2024 11:54:07 -0500 Subject: [PATCH 200/303] Revert "feat(notify): Add conductor scheduled pipelines to the notification rules" (#32163) --- .gitlab/notify/notify.yml | 19 +++- tasks/libs/notify/utils.py | 28 ------ tasks/notify.py | 12 +-- tasks/unit_tests/libs/notify/alerts_tests.py | 31 +------ tasks/unit_tests/notify_tests.py | 96 ++------------------ 5 files changed, 30 insertions(+), 156 deletions(-) diff --git a/.gitlab/notify/notify.yml b/.gitlab/notify/notify.yml index 82f996576e57c..f40187465a50f 100644 --- a/.gitlab/notify/notify.yml +++ b/.gitlab/notify/notify.yml @@ -28,8 +28,23 @@ notify: - GITLAB_TOKEN=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $GITLAB_TOKEN read_api) || exit $?; export GITLAB_TOKEN - DD_API_KEY=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $AGENT_API_KEY_ORG2 token) || exit $?; export DD_API_KEY - python3 -m pip install -r requirements.txt -r tasks/libs/requirements-notifications.txt - - invoke -e notify.send-message - - invoke -e notify.check-consistent-failures + - | + # Do not send notifications if this is a child pipeline of another repo + # The triggering repo should already have its own notification system + if [ "$CI_PIPELINE_SOURCE" != "pipeline" ]; then + if [ "$DEPLOY_AGENT" = "true" ]; then + invoke -e notify.send-message --notification-type "deploy" + elif [ "$CI_PIPELINE_SOURCE" != "push" ]; then + invoke -e notify.send-message --notification-type "trigger" + else + invoke -e notify.send-message --notification-type "merge" + fi + if [ "$CI_COMMIT_BRANCH" = "$CI_DEFAULT_BRANCH" ]; then + invoke notify.check-consistent-failures + fi + else + echo "This pipeline was triggered by another repository, skipping notification." + fi send_pipeline_stats: stage: notify diff --git a/tasks/libs/notify/utils.py b/tasks/libs/notify/utils.py index d1d803f1b2d64..c0305184ee81d 100644 --- a/tasks/libs/notify/utils.py +++ b/tasks/libs/notify/utils.py @@ -1,6 +1,5 @@ from __future__ import annotations -import os import re from typing import Any from urllib.parse import quote @@ -44,30 +43,3 @@ def get_ci_visibility_job_url( extra_args = ''.join([f'&{key}={value}' for key, value in extra_args.items()]) return CI_VISIBILITY_JOB_URL.format(name=name, extra_flags=extra_flags, extra_args=extra_args) - - -def should_notify(): - """ - Check if the pipeline should notify the channel: only for non-downstream pipelines, unless conductor triggered it - """ - from tasks.libs.ciproviders.gitlab_api import get_pipeline - - CONDUCTOR_ID = 8278 - pipeline = get_pipeline(PROJECT_NAME, os.environ['CI_PIPELINE_ID']) - return ( - os.environ['CI_PIPELINE_SOURCE'] != 'pipeline' - or os.environ['CI_PIPELINE_SOURCE'] == 'pipeline' - and pipeline.user['id'] == CONDUCTOR_ID - ) - - -def notification_type(): - """ - Return the type of notification to send (related to the type of pipeline, amongst 'deploy', 'trigger' and 'merge') - """ - if os.environ['DEPLOY_AGENT'] == 'true': - return 'deploy' - elif os.environ['CI_PIPELINE_SOURCE'] != 'push': - return 'trigger' - else: - return 'merge' diff --git a/tasks/notify.py b/tasks/notify.py index f4f9da27c1ce4..7cdd97f12b170 100644 --- a/tasks/notify.py +++ b/tasks/notify.py @@ -20,7 +20,7 @@ from tasks.libs.common.utils import gitlab_section from tasks.libs.notify import alerts, failure_summary, pipeline_status from tasks.libs.notify.jira_failing_tests import close_issue, get_failing_tests_names, get_jira -from tasks.libs.notify.utils import PROJECT_NAME, notification_type, should_notify +from tasks.libs.notify.utils import PROJECT_NAME from tasks.libs.pipeline.notifications import ( check_for_missing_owners_slack_and_jira, ) @@ -41,16 +41,13 @@ def check_teams(_): @task -def send_message(ctx: Context, dry_run: bool = False): +def send_message(ctx: Context, notification_type: str = "merge", dry_run: bool = False): """ Send notifications for the current pipeline. CI-only task. Use the --dry-run option to test this locally, without sending real slack messages. """ - if should_notify(): - pipeline_status.send_message(ctx, notification_type(), dry_run) - else: - print("This pipeline is a non-conductor downstream pipeline, skipping notifications") + pipeline_status.send_message(ctx, notification_type, dry_run) @task @@ -90,9 +87,6 @@ def check_consistent_failures(ctx, job_failures_file="job_executions.v2.json"): # The jobs dictionary contains the consecutive and cumulative failures for each job # The consecutive failures are reset to 0 when the job is not failing, and are raising an alert when reaching the CONSECUTIVE_THRESHOLD (3) # The cumulative failures list contains 1 for failures, 0 for succes. They contain only then CUMULATIVE_LENGTH(10) last executions and raise alert when 50% failure rate is reached - if not should_notify() or os.environ['CI_COMMIT_BRANCH'] != os.environ['CI_DEFAULT_BRANCH']: - print("Consistent failures check is only run on the not-downstream default branch") - return job_executions = alerts.retrieve_job_executions(ctx, job_failures_file) diff --git a/tasks/unit_tests/libs/notify/alerts_tests.py b/tasks/unit_tests/libs/notify/alerts_tests.py index d1a532c40c417..ebade3240213c 100644 --- a/tasks/unit_tests/libs/notify/alerts_tests.py +++ b/tasks/unit_tests/libs/notify/alerts_tests.py @@ -30,17 +30,10 @@ def test_job_executions(path="tasks/unit_tests/testdata/job_executions.json"): class TestCheckConsistentFailures(unittest.TestCase): - @patch.dict( - 'os.environ', - { - 'CI_PIPELINE_ID': '456', - 'CI_PIPELINE_SOURCE': 'push', - 'CI_COMMIT_BRANCH': 'taylor-swift', - 'CI_DEFAULT_BRANCH': 'taylor-swift', - }, - ) @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') def test_nominal(self, api_mock): + os.environ["CI_PIPELINE_ID"] = "456" + repo_mock = api_mock.return_value.projects.get.return_value trace_mock = repo_mock.jobs.get.return_value.trace list_mock = repo_mock.pipelines.get.return_value.jobs.list @@ -54,29 +47,9 @@ def test_nominal(self, api_mock): path, ) - repo_mock.jobs.get.assert_called() trace_mock.assert_called() list_mock.assert_called() - @patch.dict( - 'os.environ', - { - 'CI_PIPELINE_ID': '456', - 'CI_PIPELINE_SOURCE': 'push', - 'CI_COMMIT_BRANCH': 'taylor', - 'CI_DEFAULT_BRANCH': 'swift', - }, - ) - @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') - def test_dismiss(self, api_mock): - repo_mock = api_mock.return_value.projects.get.return_value - with test_job_executions() as path: - notify.check_consistent_failures( - MockContext(run=Result("test")), - path, - ) - repo_mock.jobs.get.assert_not_called() - class TestAlertsRetrieveJobExecutionsCreated(unittest.TestCase): job_executions = None diff --git a/tasks/unit_tests/notify_tests.py b/tasks/unit_tests/notify_tests.py index 87c93d579c77d..6e7ddc70abf0a 100644 --- a/tasks/unit_tests/notify_tests.py +++ b/tasks/unit_tests/notify_tests.py @@ -31,29 +31,22 @@ def get_github_slack_map(): class TestSendMessage(unittest.TestCase): - @patch.dict('os.environ', {'DEPLOY_AGENT': 'false', 'CI_PIPELINE_SOURCE': 'push', 'CI_PIPELINE_ID': '42'}) - @patch('tasks.libs.pipeline.notifications.get_pr_from_commit', new=MagicMock(return_value="")) - @patch('builtins.print') @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') - def test_merge(self, api_mock, print_mock): + @patch('tasks.libs.pipeline.notifications.get_pr_from_commit', new=MagicMock(return_value="")) + def test_merge(self, api_mock): repo_mock = api_mock.return_value.projects.get.return_value repo_mock.jobs.get.return_value.artifact.return_value = b"{}" repo_mock.jobs.get.return_value.trace.return_value = b"Log trace" repo_mock.pipelines.get.return_value.ref = "test" list_mock = repo_mock.pipelines.get.return_value.jobs.list list_mock.side_effect = [get_fake_jobs(), []] - notify.send_message(MockContext(), dry_run=True) + notify.send_message(MockContext(), notification_type="merge", dry_run=True) list_mock.assert_called() - repo_mock.pipelines.get.assert_called_with('42') - self.assertTrue("merge" in print_mock.mock_calls[0].args[0]) - repo_mock.jobs.get.assert_called() - @patch.dict('os.environ', {'DEPLOY_AGENT': 'false', 'CI_PIPELINE_SOURCE': 'push', 'CI_PIPELINE_ID': '42'}) @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') @patch('tasks.libs.notify.pipeline_status.get_failed_jobs') - @patch('builtins.print') @patch('tasks.libs.pipeline.notifications.get_pr_from_commit', new=MagicMock(return_value="")) - def test_merge_without_get_failed_call(self, print_mock, get_failed_jobs_mock, api_mock): + def test_merge_without_get_failed_call(self, get_failed_jobs_mock, api_mock): repo_mock = api_mock.return_value.projects.get.return_value repo_mock.jobs.get.return_value.artifact.return_value = b"{}" repo_mock.jobs.get.return_value.trace.return_value = b"Log trace" @@ -121,10 +114,9 @@ def test_merge_without_get_failed_call(self, print_mock, get_failed_jobs_mock, a ) ) get_failed_jobs_mock.return_value = failed - notify.send_message(MockContext(), dry_run=True) - self.assertTrue("merge" in print_mock.mock_calls[0].args[0]) + notify.send_message(MockContext(), notification_type="merge", dry_run=True) + get_failed_jobs_mock.assert_called() - repo_mock.jobs.get.assert_called() @patch("tasks.libs.owners.parsing.read_owners") def test_route_e2e_internal_error(self, read_owners_mock): @@ -199,51 +191,9 @@ def test_route_e2e_internal_error(self, read_owners_mock): self.assertNotIn("@DataDog/agent-devx-loops", owners) self.assertNotIn("@DataDog/agent-delivery", owners) - @patch.dict('os.environ', {'DEPLOY_AGENT': 'false', 'CI_PIPELINE_SOURCE': 'push', 'CI_PIPELINE_ID': '42'}) - @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') - @patch('builtins.print') - @patch('tasks.libs.pipeline.notifications.get_pr_from_commit', new=MagicMock(return_value="")) - def test_merge_with_get_failed_call(self, print_mock, api_mock): - repo_mock = api_mock.return_value.projects.get.return_value - trace_mock = repo_mock.jobs.get.return_value.trace - list_mock = repo_mock.pipelines.get.return_value.jobs.list - - trace_mock.return_value = b"no basic auth credentials" - list_mock.return_value = get_fake_jobs() - repo_mock.jobs.get.return_value.artifact.return_value = b"{}" - repo_mock.pipelines.get.return_value.ref = "test" - - notify.send_message(MockContext(), dry_run=True) - self.assertTrue("merge" in print_mock.mock_calls[0].args[0]) - trace_mock.assert_called() - list_mock.assert_called() - repo_mock.jobs.get.assert_called() - - @patch.dict('os.environ', {'DEPLOY_AGENT': 'true', 'CI_PIPELINE_SOURCE': 'push', 'CI_PIPELINE_ID': '42'}) - @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') - @patch('builtins.print') - @patch('tasks.libs.pipeline.notifications.get_pr_from_commit', new=MagicMock(return_value="")) - def test_deploy_with_get_failed_call(self, print_mock, api_mock): - repo_mock = api_mock.return_value.projects.get.return_value - trace_mock = repo_mock.jobs.get.return_value.trace - list_mock = repo_mock.pipelines.get.return_value.jobs.list - - trace_mock.return_value = b"no basic auth credentials" - list_mock.return_value = get_fake_jobs() - repo_mock.jobs.get.return_value.artifact.return_value = b"{}" - repo_mock.pipelines.get.return_value.ref = "test" - - notify.send_message(MockContext(), dry_run=True) - self.assertTrue("rocket" in print_mock.mock_calls[0].args[0]) - trace_mock.assert_called() - list_mock.assert_called() - repo_mock.jobs.get.assert_called() - - @patch.dict('os.environ', {'DEPLOY_AGENT': 'false', 'CI_PIPELINE_SOURCE': 'api', 'CI_PIPELINE_ID': '42'}) @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') - @patch('builtins.print') @patch('tasks.libs.pipeline.notifications.get_pr_from_commit', new=MagicMock(return_value="")) - def test_trigger_with_get_failed_call(self, print_mock, api_mock): + def test_merge_with_get_failed_call(self, api_mock): repo_mock = api_mock.return_value.projects.get.return_value trace_mock = repo_mock.jobs.get.return_value.trace list_mock = repo_mock.pipelines.get.return_value.jobs.list @@ -253,40 +203,10 @@ def test_trigger_with_get_failed_call(self, print_mock, api_mock): repo_mock.jobs.get.return_value.artifact.return_value = b"{}" repo_mock.pipelines.get.return_value.ref = "test" - notify.send_message(MockContext(), dry_run=True) - self.assertTrue("arrow_forward" in print_mock.mock_calls[0].args[0]) - trace_mock.assert_called() - list_mock.assert_called() - repo_mock.jobs.get.assert_called() - - @patch.dict('os.environ', {'DEPLOY_AGENT': 'false', 'CI_PIPELINE_SOURCE': 'pipeline', 'CI_PIPELINE_ID': '42'}) - @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') - @patch('builtins.print') - @patch('tasks.libs.pipeline.notifications.get_pr_from_commit', new=MagicMock(return_value="")) - def test_trigger_with_get_failed_call_conductor(self, print_mock, api_mock): - repo_mock = api_mock.return_value.projects.get.return_value - trace_mock = repo_mock.jobs.get.return_value.trace - list_mock = repo_mock.pipelines.get.return_value.jobs.list - - trace_mock.return_value = b"no basic auth credentials" - list_mock.return_value = get_fake_jobs() - repo_mock.jobs.get.return_value.artifact.return_value = b"{}" - repo_mock.pipelines.get.return_value.ref = "test" - repo_mock.pipelines.get.return_value.user.__getitem__.return_value = 8278 + notify.send_message(MockContext(), notification_type="merge", dry_run=True) - notify.send_message(MockContext(), dry_run=True) - self.assertTrue("arrow_forward" in print_mock.mock_calls[0].args[0]) trace_mock.assert_called() list_mock.assert_called() - repo_mock.jobs.get.assert_called() - - @patch.dict('os.environ', {'CI_PIPELINE_SOURCE': 'pipeline', 'CI_PIPELINE_ID': '42'}) - @patch('tasks.libs.ciproviders.gitlab_api.get_gitlab_api') - def test_dismiss_notification(self, api_mock): - repo_mock = api_mock.return_value.projects.get.return_value - - notify.send_message(MockContext(), dry_run=True) - repo_mock.jobs.get.assert_not_called() def test_post_to_channel1(self): self.assertFalse(pipeline_status.should_send_message_to_author("main", default_branch="main")) From 8bb0066b115e128f75fcb699c0b8778712e10abc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 17:39:33 +0000 Subject: [PATCH 201/303] Bump docker/setup-buildx-action from 3.6.1 to 3.7.1 (#29913) Co-authored-by: chouetz --- .github/workflows/serverless-binary-size.yml | 2 +- .github/workflows/serverless-integration.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/serverless-binary-size.yml b/.github/workflows/serverless-binary-size.yml index 5bc272591f0e6..5bf7a69b36177 100644 --- a/.github/workflows/serverless-binary-size.yml +++ b/.github/workflows/serverless-binary-size.yml @@ -43,7 +43,7 @@ jobs: persist-credentials: false - name: Set up Docker Buildx - uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v3.6.1 + uses: docker/setup-buildx-action@c47758b77c9736f4b2ef4073d4d51994fabfe349 # v3.7.1 - name: Previous binary size and dependencies id: previous diff --git a/.github/workflows/serverless-integration.yml b/.github/workflows/serverless-integration.yml index de78371e895e1..f94ed5ca56b52 100644 --- a/.github/workflows/serverless-integration.yml +++ b/.github/workflows/serverless-integration.yml @@ -54,7 +54,7 @@ jobs: platforms: amd64,arm64 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v3.6.1 + uses: docker/setup-buildx-action@c47758b77c9736f4b2ef4073d4d51994fabfe349 # v3.7.1 - name: Create raw logs directory id: rawlogs From c50e6cfb5894f25cc6c18f0fdd1b982fbc93d77d Mon Sep 17 00:00:00 2001 From: sabrina lu Date: Fri, 13 Dec 2024 13:24:16 -0500 Subject: [PATCH 202/303] Revert "[snmp] Add agent_group tag for snmp integration" (#32164) --- comp/haagent/helpers/helpers.go | 26 ---------- comp/haagent/helpers/helpers_test.go | 33 ------------ comp/haagent/impl/config.go | 5 +- comp/metadata/host/hostimpl/hosttags/tags.go | 5 +- .../snmp/internal/devicecheck/devicecheck.go | 17 ++----- .../internal/devicecheck/devicecheck_test.go | 51 +++---------------- .../snmp/internal/discovery/discovery.go | 7 +-- .../snmp/internal/discovery/discovery_test.go | 13 +++-- pkg/collector/corechecks/snmp/snmp.go | 15 ++---- pkg/collector/corechecks/snmp/snmp_test.go | 13 +++-- pkg/commonchecks/corechecks.go | 2 +- 11 files changed, 35 insertions(+), 152 deletions(-) delete mode 100644 comp/haagent/helpers/helpers.go delete mode 100644 comp/haagent/helpers/helpers_test.go diff --git a/comp/haagent/helpers/helpers.go b/comp/haagent/helpers/helpers.go deleted file mode 100644 index 4b5e755e04936..0000000000000 --- a/comp/haagent/helpers/helpers.go +++ /dev/null @@ -1,26 +0,0 @@ -// 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 2024-present Datadog, Inc. - -// Package haagenthelpers provides helpers for haagent component -package haagenthelpers - -import ( - "github.com/DataDog/datadog-agent/pkg/config/model" -) - -// IsEnabled returns true if HA Agent is enabled -func IsEnabled(agentConfig model.Reader) bool { - return agentConfig.GetBool("ha_agent.enabled") -} - -// GetGroup returns HA Agent group -func GetGroup(agentConfig model.Reader) string { - return agentConfig.GetString("ha_agent.group") -} - -// GetHaAgentTags returns HA Agent related tags -func GetHaAgentTags(agentConfig model.Reader) []string { - return []string{"agent_group:" + GetGroup(agentConfig)} -} diff --git a/comp/haagent/helpers/helpers_test.go b/comp/haagent/helpers/helpers_test.go deleted file mode 100644 index 987ab6a5cccf4..0000000000000 --- a/comp/haagent/helpers/helpers_test.go +++ /dev/null @@ -1,33 +0,0 @@ -// 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 2024-present Datadog, Inc. - -package haagenthelpers - -import ( - "testing" - - "github.com/DataDog/datadog-agent/comp/core/config" - "github.com/stretchr/testify/assert" -) - -func TestIsEnabled(t *testing.T) { - cfg := config.NewMock(t) - assert.False(t, IsEnabled(cfg)) - - cfg.SetWithoutSource("ha_agent.enabled", true) - assert.True(t, IsEnabled(cfg)) -} - -func TestGetGroup(t *testing.T) { - cfg := config.NewMock(t) - cfg.SetWithoutSource("ha_agent.group", "my-group") - assert.Equal(t, "my-group", GetGroup(cfg)) -} - -func TestGetHaAgentTags(t *testing.T) { - cfg := config.NewMock(t) - cfg.SetWithoutSource("ha_agent.group", "my-group") - assert.Equal(t, []string{"agent_group:my-group"}, GetHaAgentTags(cfg)) -} diff --git a/comp/haagent/impl/config.go b/comp/haagent/impl/config.go index ea9f54d9f16ea..2a6c4e20a8d12 100644 --- a/comp/haagent/impl/config.go +++ b/comp/haagent/impl/config.go @@ -7,7 +7,6 @@ package haagentimpl import ( "github.com/DataDog/datadog-agent/comp/core/config" - helpers "github.com/DataDog/datadog-agent/comp/haagent/helpers" ) // validHaIntegrations represent the list of integrations that will be considered as @@ -31,7 +30,7 @@ type haAgentConfigs struct { func newHaAgentConfigs(agentConfig config.Component) *haAgentConfigs { return &haAgentConfigs{ - enabled: helpers.IsEnabled(agentConfig), - group: helpers.GetGroup(agentConfig), + enabled: agentConfig.GetBool("ha_agent.enabled"), + group: agentConfig.GetString("ha_agent.group"), } } diff --git a/comp/metadata/host/hostimpl/hosttags/tags.go b/comp/metadata/host/hostimpl/hosttags/tags.go index 92d610d49e079..01cfff7c0810f 100644 --- a/comp/metadata/host/hostimpl/hosttags/tags.go +++ b/comp/metadata/host/hostimpl/hosttags/tags.go @@ -12,7 +12,6 @@ import ( "strings" "time" - haagenthelpers "github.com/DataDog/datadog-agent/comp/haagent/helpers" "github.com/DataDog/datadog-agent/pkg/config/env" "github.com/DataDog/datadog-agent/pkg/config/model" configUtils "github.com/DataDog/datadog-agent/pkg/config/utils" @@ -134,8 +133,8 @@ func Get(ctx context.Context, cached bool, conf model.Reader) *Tags { hostTags = appendToHostTags(hostTags, clusterNameTags) } - if haagenthelpers.IsEnabled(conf) { - hostTags = appendToHostTags(hostTags, haagenthelpers.GetHaAgentTags(conf)) + if conf.GetBool("ha_agent.enabled") { + hostTags = appendToHostTags(hostTags, []string{"agent_group:" + conf.GetString("ha_agent.group")}) } gceTags := []string{} diff --git a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go index d23d5642a2470..969fd45d2da52 100644 --- a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go +++ b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go @@ -17,9 +17,8 @@ import ( "go.uber.org/atomic" - "github.com/DataDog/datadog-agent/comp/core/config" - haagenthelpers "github.com/DataDog/datadog-agent/comp/haagent/helpers" "github.com/DataDog/datadog-agent/pkg/collector/externalhost" + pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" configUtils "github.com/DataDog/datadog-agent/pkg/config/utils" "github.com/DataDog/datadog-agent/pkg/metrics/servicecheck" "github.com/DataDog/datadog-agent/pkg/util/hostname/validate" @@ -67,13 +66,12 @@ type DeviceCheck struct { diagnoses *diagnoses.Diagnoses interfaceBandwidthState report.InterfaceBandwidthState cacheKey string - agentConfig config.Component } const cacheKeyPrefix = "snmp-tags" // NewDeviceCheck returns a new DeviceCheck -func NewDeviceCheck(config *checkconfig.CheckConfig, ipAddress string, sessionFactory session.Factory, agentConfig config.Component) (*DeviceCheck, error) { +func NewDeviceCheck(config *checkconfig.CheckConfig, ipAddress string, sessionFactory session.Factory) (*DeviceCheck, error) { newConfig := config.CopyWithNewIP(ipAddress) var devicePinger pinger.Pinger @@ -96,7 +94,6 @@ func NewDeviceCheck(config *checkconfig.CheckConfig, ipAddress string, sessionFa diagnoses: diagnoses.NewDeviceDiagnoses(newConfig.DeviceID), interfaceBandwidthState: report.MakeInterfaceBandwidthState(), cacheKey: cacheKey, - agentConfig: agentConfig, } d.readTagsFromCache() @@ -247,19 +244,11 @@ func (d *DeviceCheck) setDeviceHostExternalTags() { if deviceHostname == "" || err != nil { return } - agentTags := d.buildExternalTags() + agentTags := configUtils.GetConfiguredTags(pkgconfigsetup.Datadog(), false) log.Debugf("Set external tags for device host, host=`%s`, agentTags=`%v`", deviceHostname, agentTags) externalhost.SetExternalTags(deviceHostname, common.SnmpExternalTagsSourceType, agentTags) } -func (d *DeviceCheck) buildExternalTags() []string { - agentTags := configUtils.GetConfiguredTags(d.agentConfig, false) - if haagenthelpers.IsEnabled(d.agentConfig) { - agentTags = append(agentTags, haagenthelpers.GetHaAgentTags(d.agentConfig)...) - } - return agentTags -} - func (d *DeviceCheck) getValuesAndTags() (bool, []string, *valuestore.ResultValueStore, error) { var deviceReachable bool var checkErrors []string diff --git a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go index 1e7ad7fc7a001..c56235171d3a2 100644 --- a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go +++ b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go @@ -17,7 +17,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" - agentconfig "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" "github.com/DataDog/datadog-agent/pkg/metrics/servicecheck" "github.com/DataDog/datadog-agent/pkg/version" @@ -58,7 +57,7 @@ profiles: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) assert.Nil(t, err) sender := mocksender.NewMockSender("123") // required to initiate aggregator @@ -198,7 +197,7 @@ global_metrics: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) assert.Nil(t, err) sender := mocksender.NewMockSender("123") // required to initiate aggregator @@ -247,7 +246,7 @@ community_string: public config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", session.NewMockSession, agentconfig.NewMock(t)) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", session.NewMockSession) assert.Nil(t, err) sender := mocksender.NewMockSender("123") // required to initiate aggregator @@ -278,7 +277,7 @@ community_string: public config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", session.NewMockSession, agentconfig.NewMock(t)) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", session.NewMockSession) assert.Nil(t, err) hostname, err := deviceCk.GetDeviceHostname() @@ -344,7 +343,7 @@ profiles: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) assert.Nil(t, err) snmpTags := []string{"snmp_device:1.2.3.4", "device_ip:1.2.3.4", "device_id:default:1.2.3.4", "snmp_profile:f5-big-ip", "device_vendor:f5", "snmp_host:foo_sys_name", @@ -649,7 +648,7 @@ profiles: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) assert.Nil(t, err) sender := mocksender.NewMockSender("123") // required to initiate aggregator @@ -696,7 +695,7 @@ profiles: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) assert.Nil(t, err) // override pinger with mock pinger @@ -847,7 +846,7 @@ profiles: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) assert.Nil(t, err) // override pinger with mock pinger @@ -968,37 +967,3 @@ profiles: sender.AssertNotCalled(t, "Gauge", pingAvgRttMetric, mock.Anything, mock.Anything, mock.Anything) sender.AssertNotCalled(t, "Gauge", pingPacketLoss, mock.Anything, mock.Anything, mock.Anything) } - -func TestDeviceCheck_buildExternalTags(t *testing.T) { - // GIVEN - profile.SetConfdPathAndCleanProfiles() - sess := session.CreateFakeSession() - sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { - return sess, nil - } - - // language=yaml - rawInstanceConfig := []byte(` -ip_address: 1.2.3.4 -community_string: public -collect_topology: false -`) - // language=yaml - rawInitConfig := []byte(``) - - config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) - assert.Nil(t, err) - - cfg := agentconfig.NewMock(t) - cfg.SetWithoutSource("ha_agent.enabled", true) - cfg.SetWithoutSource("ha_agent.group", "my-group") - - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, cfg) - assert.Nil(t, err) - - // WHEN - externalTags := deviceCk.buildExternalTags() - - // THEN - assert.Equal(t, []string{"agent_group:my-group"}, externalTags) -} diff --git a/pkg/collector/corechecks/snmp/internal/discovery/discovery.go b/pkg/collector/corechecks/snmp/internal/discovery/discovery.go index 860f3cb781991..b7fb91915209a 100644 --- a/pkg/collector/corechecks/snmp/internal/discovery/discovery.go +++ b/pkg/collector/corechecks/snmp/internal/discovery/discovery.go @@ -14,7 +14,6 @@ import ( "sync" "time" - "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/persistentcache" "github.com/DataDog/datadog-agent/pkg/util/log" "go.uber.org/atomic" @@ -44,7 +43,6 @@ type Discovery struct { discoveredDevices map[checkconfig.DeviceDigest]Device sessionFactory session.Factory - agentConfig config.Component } // Device implements and store results from the Service interface for the SNMP listener @@ -239,7 +237,7 @@ func (d *Discovery) getDevicesFound() []string { } func (d *Discovery) createDevice(deviceDigest checkconfig.DeviceDigest, subnet *snmpSubnet, deviceIP string, writeCache bool) { - deviceCk, err := devicecheck.NewDeviceCheck(subnet.config, deviceIP, d.sessionFactory, d.agentConfig) + deviceCk, err := devicecheck.NewDeviceCheck(subnet.config, deviceIP, d.sessionFactory) if err != nil { // should not happen since the deviceCheck is expected to be valid at this point // and are only changing the device ip @@ -337,12 +335,11 @@ func (d *Discovery) writeCache(subnet *snmpSubnet) { } // NewDiscovery return a new Discovery instance -func NewDiscovery(config *checkconfig.CheckConfig, sessionFactory session.Factory, agentConfig config.Component) *Discovery { +func NewDiscovery(config *checkconfig.CheckConfig, sessionFactory session.Factory) *Discovery { return &Discovery{ discoveredDevices: make(map[checkconfig.DeviceDigest]Device), stop: make(chan struct{}), config: config, sessionFactory: sessionFactory, - agentConfig: agentConfig, } } diff --git a/pkg/collector/corechecks/snmp/internal/discovery/discovery_test.go b/pkg/collector/corechecks/snmp/internal/discovery/discovery_test.go index d2ee7611c0597..9d59def5890d0 100644 --- a/pkg/collector/corechecks/snmp/internal/discovery/discovery_test.go +++ b/pkg/collector/corechecks/snmp/internal/discovery/discovery_test.go @@ -15,7 +15,6 @@ import ( "github.com/gosnmp/gosnmp" "github.com/stretchr/testify/assert" - agentconfig "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/checkconfig" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/session" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" @@ -60,7 +59,7 @@ func TestDiscovery(t *testing.T) { DiscoveryWorkers: 1, IgnoredIPAddresses: map[string]bool{"192.168.0.5": true}, } - discovery := NewDiscovery(checkConfig, sessionFactory, agentconfig.NewMock(t)) + discovery := NewDiscovery(checkConfig, sessionFactory) discovery.Start() assert.NoError(t, waitForDiscoveredDevices(discovery, 7, 2*time.Second)) discovery.Stop() @@ -110,7 +109,7 @@ func TestDiscoveryCache(t *testing.T) { DiscoveryInterval: 3600, DiscoveryWorkers: 1, } - discovery := NewDiscovery(checkConfig, sessionFactory, agentconfig.NewMock(t)) + discovery := NewDiscovery(checkConfig, sessionFactory) discovery.Start() assert.NoError(t, waitForDiscoveredDevices(discovery, 4, 2*time.Second)) discovery.Stop() @@ -142,7 +141,7 @@ func TestDiscoveryCache(t *testing.T) { DiscoveryInterval: 3600, DiscoveryWorkers: 0, // no workers, the devices will be loaded from cache } - discovery2 := NewDiscovery(checkConfig, sessionFactory, agentconfig.NewMock(t)) + discovery2 := NewDiscovery(checkConfig, sessionFactory) discovery2.Start() assert.NoError(t, waitForDiscoveredDevices(discovery2, 4, 2*time.Second)) discovery2.Stop() @@ -181,7 +180,7 @@ func TestDiscoveryTicker(t *testing.T) { DiscoveryInterval: 1, DiscoveryWorkers: 1, } - discovery := NewDiscovery(checkConfig, sessionFactory, agentconfig.NewMock(t)) + discovery := NewDiscovery(checkConfig, sessionFactory) discovery.Start() time.Sleep(1500 * time.Millisecond) discovery.Stop() @@ -228,7 +227,7 @@ func TestDiscovery_checkDevice(t *testing.T) { } var sess *session.MockSession - discovery := NewDiscovery(checkConfig, session.NewMockSession, agentconfig.NewMock(t)) + discovery := NewDiscovery(checkConfig, session.NewMockSession) checkDeviceOnce := func() { sess = session.CreateMockSession() @@ -316,7 +315,7 @@ func TestDiscovery_createDevice(t *testing.T) { DiscoveryAllowedFailures: 3, Namespace: "default", } - discovery := NewDiscovery(checkConfig, session.NewMockSession, agentconfig.NewMock(t)) + discovery := NewDiscovery(checkConfig, session.NewMockSession) ipAddr, ipNet, err := net.ParseCIDR(checkConfig.Network) assert.Nil(t, err) startingIP := ipAddr.Mask(ipNet.Mask) diff --git a/pkg/collector/corechecks/snmp/snmp.go b/pkg/collector/corechecks/snmp/snmp.go index 29e2ae2327c5b..6b59932b057c6 100644 --- a/pkg/collector/corechecks/snmp/snmp.go +++ b/pkg/collector/corechecks/snmp/snmp.go @@ -11,7 +11,6 @@ import ( "sync" "time" - "github.com/DataDog/datadog-agent/comp/core/config" "go.uber.org/atomic" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" @@ -45,7 +44,6 @@ type Check struct { discovery *discovery.Discovery sessionFactory session.Factory workerRunDeviceCheckErrors *atomic.Uint64 - agentConfig config.Component } // Run executes the check @@ -157,10 +155,10 @@ func (c *Check) Configure(senderManager sender.SenderManager, integrationConfigD } if c.config.IsDiscovery() { - c.discovery = discovery.NewDiscovery(c.config, c.sessionFactory, c.agentConfig) + c.discovery = discovery.NewDiscovery(c.config, c.sessionFactory) c.discovery.Start() } else { - c.singleDeviceCk, err = devicecheck.NewDeviceCheck(c.config, c.config.IPAddress, c.sessionFactory, c.agentConfig) + c.singleDeviceCk, err = devicecheck.NewDeviceCheck(c.config, c.config.IPAddress, c.sessionFactory) if err != nil { return fmt.Errorf("failed to create device check: %s", err) } @@ -198,17 +196,14 @@ func (c *Check) GetDiagnoses() ([]diagnosis.Diagnosis, error) { } // Factory creates a new check factory -func Factory(agentConfig config.Component) optional.Option[func() check.Check] { - return optional.NewOption(func() check.Check { - return newCheck(agentConfig) - }) +func Factory() optional.Option[func() check.Check] { + return optional.NewOption(newCheck) } -func newCheck(agentConfig config.Component) check.Check { +func newCheck() check.Check { return &Check{ CheckBase: core.NewCheckBase(common.SnmpIntegrationName), sessionFactory: session.NewGosnmpSession, workerRunDeviceCheckErrors: atomic.NewUint64(0), - agentConfig: agentConfig, } } diff --git a/pkg/collector/corechecks/snmp/snmp_test.go b/pkg/collector/corechecks/snmp/snmp_test.go index 2f1095dc52027..88513ca8ce0d3 100644 --- a/pkg/collector/corechecks/snmp/snmp_test.go +++ b/pkg/collector/corechecks/snmp/snmp_test.go @@ -25,7 +25,6 @@ import ( "github.com/DataDog/datadog-agent/comp/aggregator/demultiplexer/demultiplexerimpl" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" - agentconfig "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/forwarder/defaultforwarder" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" "github.com/DataDog/datadog-agent/pkg/collector/externalhost" @@ -997,10 +996,10 @@ community_string: public func TestCheckID(t *testing.T) { profile.SetConfdPathAndCleanProfiles() - check1 := newCheck(agentconfig.NewMock(t)) - check2 := newCheck(agentconfig.NewMock(t)) - check3 := newCheck(agentconfig.NewMock(t)) - checkSubnet := newCheck(agentconfig.NewMock(t)) + check1 := newCheck() + check2 := newCheck() + check3 := newCheck() + checkSubnet := newCheck() // language=yaml rawInstanceConfig1 := []byte(` ip_address: 1.1.1.1 @@ -2166,7 +2165,7 @@ func TestDeviceIDAsHostname(t *testing.T) { sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { return sess, nil } - chk := Check{sessionFactory: sessionFactory, agentConfig: agentconfig.NewMock(t)} + chk := Check{sessionFactory: sessionFactory} pkgconfigsetup.Datadog().SetWithoutSource("hostname", "test-hostname") pkgconfigsetup.Datadog().SetWithoutSource("tags", []string{"agent_tag1:val1", "agent_tag2:val2"}) senderManager := deps.Demultiplexer @@ -2359,7 +2358,7 @@ func TestDiscoveryDeviceIDAsHostname(t *testing.T) { sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { return sess, nil } - chk := Check{sessionFactory: sessionFactory, agentConfig: agentconfig.NewMock(t)} + chk := Check{sessionFactory: sessionFactory} pkgconfigsetup.Datadog().SetWithoutSource("hostname", "my-hostname") senderManager := deps.Demultiplexer diff --git a/pkg/commonchecks/corechecks.go b/pkg/commonchecks/corechecks.go index cb20f9412ab2a..9af1e7f9833c8 100644 --- a/pkg/commonchecks/corechecks.go +++ b/pkg/commonchecks/corechecks.go @@ -62,7 +62,7 @@ func RegisterChecks(store workloadmeta.Component, tagger tagger.Component, cfg c corecheckLoader.RegisterCheck(uptime.CheckName, uptime.Factory()) corecheckLoader.RegisterCheck(telemetryCheck.CheckName, telemetryCheck.Factory(telemetry)) corecheckLoader.RegisterCheck(ntp.CheckName, ntp.Factory()) - corecheckLoader.RegisterCheck(snmp.CheckName, snmp.Factory(cfg)) + corecheckLoader.RegisterCheck(snmp.CheckName, snmp.Factory()) corecheckLoader.RegisterCheck(networkpath.CheckName, networkpath.Factory(telemetry)) corecheckLoader.RegisterCheck(io.CheckName, io.Factory()) corecheckLoader.RegisterCheck(filehandles.CheckName, filehandles.Factory()) From 0f53c9a45030daca82ab159c340c36ec51890a88 Mon Sep 17 00:00:00 2001 From: Arthur Bellal Date: Fri, 13 Dec 2024 20:38:34 +0100 Subject: [PATCH 203/303] (fleet) basic logging in setup scripts (#32133) --- pkg/fleet/installer/setup/common/output.go | 18 +++++++++ pkg/fleet/installer/setup/common/setup.go | 43 ++++++++++++++++++---- pkg/fleet/installer/setup/setup.go | 26 +++++++------ 3 files changed, 69 insertions(+), 18 deletions(-) create mode 100644 pkg/fleet/installer/setup/common/output.go diff --git a/pkg/fleet/installer/setup/common/output.go b/pkg/fleet/installer/setup/common/output.go new file mode 100644 index 0000000000000..cc42f5e4c8d02 --- /dev/null +++ b/pkg/fleet/installer/setup/common/output.go @@ -0,0 +1,18 @@ +// 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 common + +import "io" + +// Output is a writer for the output. It will support some ANSI escape sequences to format the output. +type Output struct { + tty io.Writer +} + +// WriteString writes a string to the output. +func (o *Output) WriteString(s string) { + _, _ = o.tty.Write([]byte(s)) +} diff --git a/pkg/fleet/installer/setup/common/setup.go b/pkg/fleet/installer/setup/common/setup.go index 159b1b69b0d36..7abab785021f6 100644 --- a/pkg/fleet/installer/setup/common/setup.go +++ b/pkg/fleet/installer/setup/common/setup.go @@ -10,11 +10,14 @@ import ( "context" "errors" "fmt" + "io" "os" + "time" "github.com/DataDog/datadog-agent/pkg/fleet/installer" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" "github.com/DataDog/datadog-agent/pkg/fleet/installer/oci" + "github.com/DataDog/datadog-agent/pkg/version" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) @@ -32,7 +35,10 @@ var ( type Setup struct { configDir string installer installer.Installer + start time.Time + flavor string + Out *Output Env *env.Env Ctx context.Context Span ddtrace.Span @@ -41,7 +47,13 @@ type Setup struct { } // NewSetup creates a new Setup structure with some default values. -func NewSetup(ctx context.Context, env *env.Env, name string) (*Setup, error) { +func NewSetup(ctx context.Context, env *env.Env, flavor string, flavorPath string, logOutput io.Writer) (*Setup, error) { + header := `Datadog Installer %s - https://www.datadoghq.com +Running the %s installation script (https://github.com/DataDog/datadog-agent/tree/%s/pkg/fleet/installer/setup/%s) - %s +` + start := time.Now() + output := &Output{tty: logOutput} + output.WriteString(fmt.Sprintf(header, version.AgentVersion, flavor, version.Commit, flavorPath, start.Format(time.RFC3339))) if env.APIKey == "" { return nil, ErrNoAPIKey } @@ -49,10 +61,13 @@ func NewSetup(ctx context.Context, env *env.Env, name string) (*Setup, error) { if err != nil { return nil, fmt.Errorf("failed to create installer: %w", err) } - span, ctx := tracer.StartSpanFromContext(ctx, fmt.Sprintf("setup.%s", name)) + span, ctx := tracer.StartSpanFromContext(ctx, fmt.Sprintf("setup.%s", flavor)) s := &Setup{ configDir: configDir, installer: installer, + start: start, + flavor: flavor, + Out: output, Env: env, Ctx: ctx, Span: span, @@ -75,30 +90,44 @@ func NewSetup(ctx context.Context, env *env.Env, name string) (*Setup, error) { // Run installs the packages and writes the configurations func (s *Setup) Run() (err error) { defer func() { s.Span.Finish(tracer.WithError(err)) }() + s.Out.WriteString("Applying configurations...\n") err = writeConfigs(s.Config, s.configDir) if err != nil { return fmt.Errorf("failed to write configuration: %w", err) } - err = s.installPackage(installerOCILayoutURL) + packages := resolvePackages(s.Packages) + s.Out.WriteString("The following packages will be installed:\n") + s.Out.WriteString(fmt.Sprintf(" - %s / %s\n", "datadog-installer", version.AgentVersion)) + for _, p := range packages { + s.Out.WriteString(fmt.Sprintf(" - %s / %s\n", p.name, p.version)) + } + err = s.installPackage("datadog-installer", installerOCILayoutURL) if err != nil { return fmt.Errorf("failed to install installer: %w", err) } - packages := resolvePackages(s.Packages) for _, p := range packages { url := oci.PackageURL(s.Env, p.name, p.version) - err = s.installPackage(url) + err = s.installPackage(p.name, url) if err != nil { return fmt.Errorf("failed to install package %s: %w", url, err) } } + s.Out.WriteString(fmt.Sprintf("Successfully ran the %s install script in %s!\n", s.flavor, time.Since(s.start).Round(time.Second))) return nil } // installPackage mimicks the telemetry of calling the install package command -func (s *Setup) installPackage(url string) (err error) { +func (s *Setup) installPackage(name string, url string) (err error) { span, ctx := tracer.StartSpanFromContext(s.Ctx, "install") defer func() { span.Finish(tracer.WithError(err)) }() span.SetTag("url", url) span.SetTag("_top_level", 1) - return s.installer.Install(ctx, url, nil) + + s.Out.WriteString(fmt.Sprintf("Installing %s...\n", name)) + err = s.installer.Install(ctx, url, nil) + if err != nil { + return err + } + s.Out.WriteString(fmt.Sprintf("Successfully installed %s\n", name)) + return nil } diff --git a/pkg/fleet/installer/setup/setup.go b/pkg/fleet/installer/setup/setup.go index 3b01d320c9975..93a57fc575a5b 100644 --- a/pkg/fleet/installer/setup/setup.go +++ b/pkg/fleet/installer/setup/setup.go @@ -9,6 +9,7 @@ package setup import ( "context" "fmt" + "os" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" "github.com/DataDog/datadog-agent/pkg/fleet/installer/setup/common" @@ -17,23 +18,26 @@ import ( "github.com/DataDog/datadog-agent/pkg/fleet/internal/paths" ) -const ( - // FlavorDatabricks is the flavor for the Data Jobs Monitoring databricks setup. - FlavorDatabricks = "databricks" -) +type flavor struct { + path string // path is used to print the path to the setup script for users. + run func(*common.Setup) error +} + +var flavors = map[string]flavor{ + "databricks": {path: "djm/databricks.go", run: djm.SetupDatabricks}, +} // Setup installs Datadog. func Setup(ctx context.Context, env *env.Env, flavor string) error { - s, err := common.NewSetup(ctx, env, flavor) + f, ok := flavors[flavor] + if !ok { + return fmt.Errorf("unknown flavor %s", flavor) + } + s, err := common.NewSetup(ctx, env, flavor, f.path, os.Stdout) if err != nil { return err } - switch flavor { - case FlavorDatabricks: - err = djm.SetupDatabricks(s) - default: - return fmt.Errorf("unknown setup flavor %s", flavor) - } + err = f.run(s) if err != nil { return err } From e87eaecb8358a40207a043f80e85cc173500a992 Mon Sep 17 00:00:00 2001 From: Marco Costa Date: Fri, 13 Dec 2024 12:39:23 -0800 Subject: [PATCH 204/303] [AIDM-459] Remap OTel GraphQL resource to use query data (#31731) --- pkg/trace/api/otlp.go | 7 +++++++ pkg/trace/api/otlp_test.go | 12 +++++++++++ pkg/trace/traceutil/otel_util.go | 17 +++++++++++++++ pkg/trace/traceutil/otel_util_test.go | 21 +++++++++++++++++++ ...tel-graphql-resource-e31ae2262b52a873.yaml | 11 ++++++++++ 5 files changed, 68 insertions(+) create mode 100644 releasenotes/notes/otel-graphql-resource-e31ae2262b52a873.yaml diff --git a/pkg/trace/api/otlp.go b/pkg/trace/api/otlp.go index de53f14d369ec..88491ea9052ec 100644 --- a/pkg/trace/api/otlp.go +++ b/pkg/trace/api/otlp.go @@ -684,6 +684,13 @@ func resourceFromTags(meta map[string]string) string { return m + " " + svc } return m + } else if typ := meta[semconv117.AttributeGraphqlOperationType]; typ != "" { + // Enrich GraphQL query resource names. + // See https://github.com/open-telemetry/semantic-conventions/blob/v1.29.0/docs/graphql/graphql-spans.md + if name := meta[semconv117.AttributeGraphqlOperationName]; name != "" { + return typ + " " + name + } + return typ } return "" } diff --git a/pkg/trace/api/otlp_test.go b/pkg/trace/api/otlp_test.go index bd6377ff4612d..0966ee75ff1e9 100644 --- a/pkg/trace/api/otlp_test.go +++ b/pkg/trace/api/otlp_test.go @@ -1573,6 +1573,18 @@ func TestOTLPHelpers(t *testing.T) { meta: map[string]string{semconv.AttributeRPCMethod: "M"}, out: "M", }, + { + meta: map[string]string{"graphql.operation.name": "myQuery"}, + out: "", + }, + { + meta: map[string]string{"graphql.operation.type": "query"}, + out: "query", + }, + { + meta: map[string]string{"graphql.operation.type": "query", "graphql.operation.name": "myQuery"}, + out: "query myQuery", + }, } { assert.Equal(t, tt.out, resourceFromTags(tt.meta)) } diff --git a/pkg/trace/traceutil/otel_util.go b/pkg/trace/traceutil/otel_util.go index bb3e03783c4dc..5e645f7b6673b 100644 --- a/pkg/trace/traceutil/otel_util.go +++ b/pkg/trace/traceutil/otel_util.go @@ -195,6 +195,13 @@ func GetOTelResourceV1(span ptrace.Span, res pcommon.Resource) (resName string) // ...and service if available resName = resName + " " + svc } + } else if m := GetOTelAttrValInResAndSpanAttrs(span, res, false, semconv117.AttributeGraphqlOperationType); m != "" { + // Enrich GraphQL query resource names. + // See https://github.com/open-telemetry/semantic-conventions/blob/v1.29.0/docs/graphql/graphql-spans.md + resName = m + if name := GetOTelAttrValInResAndSpanAttrs(span, res, false, semconv117.AttributeGraphqlOperationName); name != "" { + resName = resName + " " + name + } } else { resName = span.Name() } @@ -249,6 +256,16 @@ func GetOTelResourceV2(span ptrace.Span, res pcommon.Resource) (resName string) } return } + + if m := GetOTelAttrValInResAndSpanAttrs(span, res, false, semconv117.AttributeGraphqlOperationType); m != "" { + // Enrich GraphQL query resource names. + // See https://github.com/open-telemetry/semantic-conventions/blob/v1.29.0/docs/graphql/graphql-spans.md + resName = m + if name := GetOTelAttrValInResAndSpanAttrs(span, res, false, semconv117.AttributeGraphqlOperationName); name != "" { + resName = resName + " " + name + } + return + } resName = span.Name() return diff --git a/pkg/trace/traceutil/otel_util_test.go b/pkg/trace/traceutil/otel_util_test.go index 9b6934caf3a7a..201c64a0745b8 100644 --- a/pkg/trace/traceutil/otel_util_test.go +++ b/pkg/trace/traceutil/otel_util_test.go @@ -293,6 +293,27 @@ func TestGetOTelResource(t *testing.T) { expectedV1: strings.Repeat("a", MaxResourceLen), expectedV2: strings.Repeat("a", MaxResourceLen), }, + { + name: "GraphQL with no type", + sattrs: map[string]string{"graphql.operation.name": "myQuery"}, + normalize: false, + expectedV1: "span_name", + expectedV2: "span_name", + }, + { + name: "GraphQL with only type", + sattrs: map[string]string{"graphql.operation.type": "query"}, + normalize: false, + expectedV1: "query", + expectedV2: "query", + }, + { + name: "GraphQL with only type", + sattrs: map[string]string{"graphql.operation.type": "query", "graphql.operation.name": "myQuery"}, + normalize: false, + expectedV1: "query myQuery", + expectedV2: "query myQuery", + }, } { t.Run(tt.name, func(t *testing.T) { span := ptrace.NewSpan() diff --git a/releasenotes/notes/otel-graphql-resource-e31ae2262b52a873.yaml b/releasenotes/notes/otel-graphql-resource-e31ae2262b52a873.yaml new file mode 100644 index 0000000000000..8962c355b585a --- /dev/null +++ b/releasenotes/notes/otel-graphql-resource-e31ae2262b52a873.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + For OpenTelemetry GraphQL request spans, the span resource name is now the GraphQL operation type and name. From 37fbbc826dfb608e5b4f6fb7d9058bae8d27ce22 Mon Sep 17 00:00:00 2001 From: Stuart Geipel Date: Fri, 13 Dec 2024 16:59:46 -0500 Subject: [PATCH 205/303] [NPM-3662] Add sestatus to agent flare (#32068) --- cmd/system-probe/api/debug/handlers_linux.go | 41 +++++++++++++++++++ .../api/debug/handlers_nolinux.go | 20 +++++++++ cmd/system-probe/api/server.go | 2 + pkg/ebpf/debug_handlers.go | 5 +-- pkg/flare/archive_linux.go | 7 ++++ ...agent-flare-sestatus-5820cfc79ec91d1f.yaml | 11 +++++ 6 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 cmd/system-probe/api/debug/handlers_linux.go create mode 100644 cmd/system-probe/api/debug/handlers_nolinux.go create mode 100644 releasenotes/notes/agent-flare-sestatus-5820cfc79ec91d1f.yaml diff --git a/cmd/system-probe/api/debug/handlers_linux.go b/cmd/system-probe/api/debug/handlers_linux.go new file mode 100644 index 0000000000000..d2bd7dfbd5f48 --- /dev/null +++ b/cmd/system-probe/api/debug/handlers_linux.go @@ -0,0 +1,41 @@ +// 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 2024-present Datadog, Inc. + +//go:build linux + +// Package debug contains handlers for debug information global to all of system-probe +package debug + +import ( + "context" + "errors" + "fmt" + "net/http" + "os/exec" + "time" +) + +// HandleSelinuxSestatus reports the output of sestatus as an http result +func HandleSelinuxSestatus(w http.ResponseWriter, r *http.Request) { + ctx, cancel := context.WithTimeout(r.Context(), 5*time.Second) + defer cancel() + + cmd := exec.CommandContext(ctx, "sestatus") + output, err := cmd.CombinedOutput() + + var execError *exec.Error + var exitErr *exec.ExitError + + if err != nil { + // don't 500 for ExitErrors etc, to report "normal" failures to the selinux_sestatus.log file + if !errors.As(err, &execError) && !errors.As(err, &exitErr) { + w.WriteHeader(500) + } + fmt.Fprintf(w, "command failed: %s\n%s", err, output) + return + } + + w.Write(output) +} diff --git a/cmd/system-probe/api/debug/handlers_nolinux.go b/cmd/system-probe/api/debug/handlers_nolinux.go new file mode 100644 index 0000000000000..1475d821c1e6e --- /dev/null +++ b/cmd/system-probe/api/debug/handlers_nolinux.go @@ -0,0 +1,20 @@ +// 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 2024-present Datadog, Inc. + +//go:build !linux + +// Package debug contains handlers for debug information global to all of system-probe +package debug + +import ( + "io" + "net/http" +) + +// HandleSelinuxSestatus is not supported +func HandleSelinuxSestatus(w http.ResponseWriter, _ *http.Request) { + w.WriteHeader(500) + io.WriteString(w, "HandleSelinuxSestatus is not supported on this platform") +} diff --git a/cmd/system-probe/api/server.go b/cmd/system-probe/api/server.go index 3e4a71056f143..d81007a0c8f0d 100644 --- a/cmd/system-probe/api/server.go +++ b/cmd/system-probe/api/server.go @@ -15,6 +15,7 @@ import ( gorilla "github.com/gorilla/mux" + "github.com/DataDog/datadog-agent/cmd/system-probe/api/debug" "github.com/DataDog/datadog-agent/cmd/system-probe/api/module" "github.com/DataDog/datadog-agent/cmd/system-probe/api/server" sysconfigtypes "github.com/DataDog/datadog-agent/cmd/system-probe/config/types" @@ -58,6 +59,7 @@ func StartServer(cfg *sysconfigtypes.Config, telemetry telemetry.Component, wmet if runtime.GOOS == "linux" { mux.HandleFunc("/debug/ebpf_btf_loader_info", ebpf.HandleBTFLoaderInfo) + mux.HandleFunc("/debug/selinux_sestatus", debug.HandleSelinuxSestatus) } go func() { diff --git a/pkg/ebpf/debug_handlers.go b/pkg/ebpf/debug_handlers.go index ea10d22a844c2..04cba9faed556 100644 --- a/pkg/ebpf/debug_handlers.go +++ b/pkg/ebpf/debug_handlers.go @@ -6,10 +6,9 @@ package ebpf import ( + "fmt" "io" "net/http" - - "github.com/DataDog/datadog-agent/pkg/util/log" ) // HandleBTFLoaderInfo responds with where the system-probe found BTF data (and @@ -17,7 +16,7 @@ import ( func HandleBTFLoaderInfo(w http.ResponseWriter, _ *http.Request) { info, err := GetBTFLoaderInfo() if err != nil { - log.Errorf("unable to get ebpf_btf_loader info: %s", err) + fmt.Fprintf(w, "unable to get ebpf_btf_loader info: %s", err) w.WriteHeader(500) return } diff --git a/pkg/flare/archive_linux.go b/pkg/flare/archive_linux.go index 1c9b5d7a4ad48..dafe8bd41d1bc 100644 --- a/pkg/flare/archive_linux.go +++ b/pkg/flare/archive_linux.go @@ -38,6 +38,7 @@ func addSystemProbePlatformSpecificEntries(fb flaretypes.FlareBuilder) { _ = fb.AddFileFromFunc(filepath.Join("system-probe", "conntrack_cached.log"), getSystemProbeConntrackCached) _ = fb.AddFileFromFunc(filepath.Join("system-probe", "conntrack_host.log"), getSystemProbeConntrackHost) _ = fb.AddFileFromFunc(filepath.Join("system-probe", "ebpf_btf_loader.log"), getSystemProbeBTFLoaderInfo) + _ = fb.AddFileFromFunc(filepath.Join("system-probe", "selinux_sestatus.log"), getSystemProbeSelinuxSestatus) } } @@ -148,3 +149,9 @@ func getSystemProbeBTFLoaderInfo() ([]byte, error) { url := sysprobeclient.DebugURL("/ebpf_btf_loader_info") return getHTTPData(sysProbeClient, url) } + +func getSystemProbeSelinuxSestatus() ([]byte, error) { + sysProbeClient := sysprobeclient.Get(getSystemProbeSocketPath()) + url := sysprobeclient.DebugURL("/selinux_sestatus") + return getHTTPData(sysProbeClient, url) +} diff --git a/releasenotes/notes/agent-flare-sestatus-5820cfc79ec91d1f.yaml b/releasenotes/notes/agent-flare-sestatus-5820cfc79ec91d1f.yaml new file mode 100644 index 0000000000000..e7bac3330c728 --- /dev/null +++ b/releasenotes/notes/agent-flare-sestatus-5820cfc79ec91d1f.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + Added the output of ``sestatus`` into the Agent flare. This information will appear in ``system-probe/selinux_sestatus.log``. From 786bce8532868cc9f21e4f45233c4c517d36bdd9 Mon Sep 17 00:00:00 2001 From: Branden Clark Date: Fri, 13 Dec 2024 17:37:35 -0500 Subject: [PATCH 206/303] Enter repo root (#32169) --- tasks/winbuildscripts/common.ps1 | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/tasks/winbuildscripts/common.ps1 b/tasks/winbuildscripts/common.ps1 index 35ef863d57535..d1e51fc5b2b1d 100644 --- a/tasks/winbuildscripts/common.ps1 +++ b/tasks/winbuildscripts/common.ps1 @@ -42,6 +42,23 @@ function Exit-BuildRoot() { Pop-Location -StackName AgentBuildRoot } +<# +.SYNOPSIS +Sets the current directory to the root of the repository. +#> +function Enter-RepoRoot() { + # Expected PSScriptRoot: datadog-agent\tasks\winbuildscripts\ + Push-Location "$PSScriptRoot\..\.." -ErrorAction Stop -StackName AgentRepoRoot | Out-Null +} + +<# +.SYNOPSIS +Leaves the repository root directory and returns to the original working directory. +#> +function Exit-RepoRoot() { + Pop-Location -StackName AgentRepoRoot +} + <# .SYNOPSIS Expands the Go module cache from an archive file. @@ -209,6 +226,8 @@ function Invoke-BuildScript { if ($BuildOutOfSource) { Enter-BuildRoot + } else { + Enter-RepoRoot } Expand-ModCache -modcache modcache @@ -234,9 +253,11 @@ function Invoke-BuildScript { # This finally block is executed regardless of whether the try block completes successfully, throws an exception, # or uses `exit` to terminate the script. + # Restore the original working directory if ($BuildOutOfSource) { - # Restore the original working directory Exit-BuildRoot + } else { + Exit-RepoRoot } } } From 179220f0b172ccdfcff02346de3102ee84476939 Mon Sep 17 00:00:00 2001 From: Raphael Gavache Date: Sat, 14 Dec 2024 23:05:31 +0100 Subject: [PATCH 207/303] [Fleet] Migrate ddtrace references to telem package (#32175) --- cmd/installer-downloader/main.go | 3 +- .../subcommands/installer/command.go | 6 +- .../subcommands/installer/umask_nix.go | 4 +- .../subcommands/installer/umask_windows.go | 6 +- pkg/fleet/daemon/daemon.go | 54 +++++++---------- pkg/fleet/installer/installer.go | 15 +++-- pkg/fleet/installer/oci/download.go | 4 +- pkg/fleet/installer/packages/apm_inject.go | 34 +++++------ pkg/fleet/installer/packages/apm_sockets.go | 12 ++-- pkg/fleet/installer/packages/app_armor.go | 10 ++-- pkg/fleet/installer/packages/datadog_agent.go | 27 +++++---- .../packages/datadog_agent_windows.go | 19 +++--- .../packages/datadog_installer_windows.go | 18 +++--- pkg/fleet/installer/packages/docker.go | 22 +++---- pkg/fleet/installer/packages/file.go | 6 +- pkg/fleet/installer/packages/pkg_manager.go | 6 +- pkg/fleet/installer/packages/systemd.go | 30 +++++----- pkg/fleet/installer/setup/common/setup.go | 13 ++--- .../installer/setup/djm/databricks_test.go | 4 +- pkg/fleet/internal/cdn/cdn.go | 6 +- pkg/fleet/internal/exec/installer_exec.go | 33 +++++------ pkg/fleet/telemetry/span.go | 26 +++++++++ pkg/fleet/telemetry/telemetry.go | 58 +++++++++++++------ 23 files changed, 223 insertions(+), 193 deletions(-) create mode 100644 pkg/fleet/telemetry/span.go diff --git a/cmd/installer-downloader/main.go b/cmd/installer-downloader/main.go index 5ddadc54c0d60..f7b67910ae94e 100644 --- a/cmd/installer-downloader/main.go +++ b/cmd/installer-downloader/main.go @@ -17,7 +17,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" "github.com/DataDog/datadog-agent/pkg/fleet/installer/oci" "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) const ( @@ -49,7 +48,7 @@ func main() { defer func() { _ = t.Stop(ctx) }() var err error span, ctx := telemetry.StartSpanFromEnv(ctx, fmt.Sprintf("downloader-%s", Flavor)) - defer func() { span.Finish(tracer.WithError(err)) }() + defer func() { span.Finish(err) }() err = runDownloader(ctx, env, Version, Flavor) if err != nil { fmt.Fprintf(os.Stderr, "Installation failed: %v\n", err) diff --git a/cmd/installer/subcommands/installer/command.go b/cmd/installer/subcommands/installer/command.go index 186367fc20b42..66ec6b1c74c57 100644 --- a/cmd/installer/subcommands/installer/command.go +++ b/cmd/installer/subcommands/installer/command.go @@ -22,8 +22,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" "github.com/DataDog/datadog-agent/pkg/version" "github.com/spf13/cobra" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" "gopkg.in/yaml.v2" ) @@ -89,7 +87,7 @@ func UnprivilegedCommands(_ *command.GlobalParams) []*cobra.Command { type cmd struct { t *telemetry.Telemetry ctx context.Context - span ddtrace.Span + span telemetry.Span env *env.Env } @@ -107,7 +105,7 @@ func newCmd(operation string) *cmd { } func (c *cmd) Stop(err error) { - c.span.Finish(tracer.WithError(err)) + c.span.Finish(err) if c.t != nil { err := c.t.Stop(context.Background()) if err != nil { diff --git a/cmd/installer/subcommands/installer/umask_nix.go b/cmd/installer/subcommands/installer/umask_nix.go index b4062c09a4f77..1fd44c01ac405 100644 --- a/cmd/installer/subcommands/installer/umask_nix.go +++ b/cmd/installer/subcommands/installer/umask_nix.go @@ -10,11 +10,11 @@ package installer import ( "syscall" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" ) // setInstallerUmask sets umask 0 to override any inherited umask -func setInstallerUmask(span ddtrace.Span) { +func setInstallerUmask(span telemetry.Span) { oldmask := syscall.Umask(0) span.SetTag("inherited_umask", oldmask) } diff --git a/cmd/installer/subcommands/installer/umask_windows.go b/cmd/installer/subcommands/installer/umask_windows.go index 3d308c67cc318..1b076f92bc389 100644 --- a/cmd/installer/subcommands/installer/umask_windows.go +++ b/cmd/installer/subcommands/installer/umask_windows.go @@ -7,9 +7,7 @@ package installer -import ( - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" -) +import "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" // setInstallerUmask no-op on Windows -func setInstallerUmask(_ ddtrace.Span) {} +func setInstallerUmask(_ telemetry.Span) {} diff --git a/pkg/fleet/daemon/daemon.go b/pkg/fleet/daemon/daemon.go index 7c5d7401a1388..63ed3e2a3a626 100644 --- a/pkg/fleet/daemon/daemon.go +++ b/pkg/fleet/daemon/daemon.go @@ -20,9 +20,6 @@ import ( "sync" "time" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/config/remote/client" "github.com/DataDog/datadog-agent/pkg/config/utils" @@ -34,6 +31,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/fleet/internal/cdn" "github.com/DataDog/datadog-agent/pkg/fleet/internal/exec" "github.com/DataDog/datadog-agent/pkg/fleet/internal/paths" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" pbgo "github.com/DataDog/datadog-agent/pkg/proto/pbgo/core" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" @@ -271,8 +269,8 @@ func (d *daemonImpl) Install(ctx context.Context, url string, args []string) err } func (d *daemonImpl) install(ctx context.Context, url string, args []string) (err error) { - span, ctx := tracer.StartSpanFromContext(ctx, "install") - defer func() { span.Finish(tracer.WithError(err)) }() + span, ctx := telemetry.StartSpanFromContext(ctx, "install") + defer func() { span.Finish(err) }() d.refreshState(ctx) defer d.refreshState(ctx) @@ -293,8 +291,8 @@ func (d *daemonImpl) StartExperiment(ctx context.Context, url string) error { } func (d *daemonImpl) startExperiment(ctx context.Context, url string) (err error) { - span, ctx := tracer.StartSpanFromContext(ctx, "start_experiment") - defer func() { span.Finish(tracer.WithError(err)) }() + span, ctx := telemetry.StartSpanFromContext(ctx, "start_experiment") + defer func() { span.Finish(err) }() d.refreshState(ctx) defer d.refreshState(ctx) @@ -308,8 +306,8 @@ func (d *daemonImpl) startExperiment(ctx context.Context, url string) (err error } func (d *daemonImpl) startInstallerExperiment(ctx context.Context, url string) (err error) { - span, ctx := tracer.StartSpanFromContext(ctx, "start_installer_experiment") - defer func() { span.Finish(tracer.WithError(err)) }() + span, ctx := telemetry.StartSpanFromContext(ctx, "start_installer_experiment") + defer func() { span.Finish(err) }() d.refreshState(ctx) defer d.refreshState(ctx) @@ -334,8 +332,8 @@ func (d *daemonImpl) PromoteExperiment(ctx context.Context, pkg string) error { } func (d *daemonImpl) promoteExperiment(ctx context.Context, pkg string) (err error) { - span, ctx := tracer.StartSpanFromContext(ctx, "promote_experiment") - defer func() { span.Finish(tracer.WithError(err)) }() + span, ctx := telemetry.StartSpanFromContext(ctx, "promote_experiment") + defer func() { span.Finish(err) }() d.refreshState(ctx) defer d.refreshState(ctx) @@ -356,8 +354,8 @@ func (d *daemonImpl) StopExperiment(ctx context.Context, pkg string) error { } func (d *daemonImpl) stopExperiment(ctx context.Context, pkg string) (err error) { - span, ctx := tracer.StartSpanFromContext(ctx, "stop_experiment") - defer func() { span.Finish(tracer.WithError(err)) }() + span, ctx := telemetry.StartSpanFromContext(ctx, "stop_experiment") + defer func() { span.Finish(err) }() d.refreshState(ctx) defer d.refreshState(ctx) @@ -378,8 +376,8 @@ func (d *daemonImpl) StartConfigExperiment(ctx context.Context, url string, vers } func (d *daemonImpl) startConfigExperiment(ctx context.Context, url string, version string) (err error) { - span, ctx := tracer.StartSpanFromContext(ctx, "start_config_experiment") - defer func() { span.Finish(tracer.WithError(err)) }() + span, ctx := telemetry.StartSpanFromContext(ctx, "start_config_experiment") + defer func() { span.Finish(err) }() d.refreshState(ctx) defer d.refreshState(ctx) @@ -400,8 +398,8 @@ func (d *daemonImpl) PromoteConfigExperiment(ctx context.Context, pkg string) er } func (d *daemonImpl) promoteConfigExperiment(ctx context.Context, pkg string) (err error) { - span, ctx := tracer.StartSpanFromContext(ctx, "promote_config_experiment") - defer func() { span.Finish(tracer.WithError(err)) }() + span, ctx := telemetry.StartSpanFromContext(ctx, "promote_config_experiment") + defer func() { span.Finish(err) }() d.refreshState(ctx) defer d.refreshState(ctx) @@ -422,8 +420,8 @@ func (d *daemonImpl) StopConfigExperiment(ctx context.Context, pkg string) error } func (d *daemonImpl) stopConfigExperiment(ctx context.Context, pkg string) (err error) { - span, ctx := tracer.StartSpanFromContext(ctx, "stop_config_experiment") - defer func() { span.Finish(tracer.WithError(err)) }() + span, ctx := telemetry.StartSpanFromContext(ctx, "stop_config_experiment") + defer func() { span.Finish(err) }() d.refreshState(ctx) defer d.refreshState(ctx) @@ -455,7 +453,7 @@ func (d *daemonImpl) handleRemoteAPIRequest(request remoteAPIRequest) (err error defer d.m.Unlock() defer d.requestsWG.Done() parentSpan, ctx := newRequestContext(request) - defer parentSpan.Finish(tracer.WithError(err)) + defer parentSpan.Finish(err) d.refreshState(ctx) defer d.refreshState(ctx) @@ -545,25 +543,13 @@ type requestState struct { ErrorCode installerErrors.InstallerErrorCode } -func newRequestContext(request remoteAPIRequest) (ddtrace.Span, context.Context) { +func newRequestContext(request remoteAPIRequest) (telemetry.Span, context.Context) { ctx := context.WithValue(context.Background(), requestStateKey, &requestState{ Package: request.Package, ID: request.ID, State: pbgo.TaskState_RUNNING, }) - - ctxCarrier := tracer.TextMapCarrier{ - tracer.DefaultTraceIDHeader: request.TraceID, - tracer.DefaultParentIDHeader: request.ParentSpanID, - tracer.DefaultPriorityHeader: "2", - } - spanCtx, err := tracer.Extract(ctxCarrier) - if err != nil { - log.Debugf("failed to extract span context from install script params: %v", err) - return tracer.StartSpan("remote_request"), ctx - } - - return tracer.StartSpanFromContext(ctx, "remote_request", tracer.ChildOf(spanCtx)) + return telemetry.StartSpanFromIDs(ctx, "remote_request", request.TraceID, request.ParentSpanID) } func setRequestInvalid(ctx context.Context) { diff --git a/pkg/fleet/installer/installer.go b/pkg/fleet/installer/installer.go index e43e0cfaae4d2..3dd39b8fddb81 100644 --- a/pkg/fleet/installer/installer.go +++ b/pkg/fleet/installer/installer.go @@ -19,6 +19,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/fleet/internal/cdn" "github.com/DataDog/datadog-agent/pkg/fleet/internal/paths" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" installerErrors "github.com/DataDog/datadog-agent/pkg/fleet/installer/errors" @@ -28,8 +29,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/fleet/internal/db" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) const ( @@ -164,9 +163,9 @@ func (i *installerImpl) Install(ctx context.Context, url string, args []string) if err != nil { return fmt.Errorf("could not download package: %w", err) } - span, ok := tracer.SpanFromContext(ctx) + span, ok := telemetry.SpanFromContext(ctx) if ok { - span.SetTag(ext.ResourceName, pkg.Name) + span.SetResourceName(pkg.Name) span.SetTag("package_version", pkg.Version) } err = i.preparePackage(ctx, pkg.Name, args) // Preinst @@ -471,9 +470,9 @@ func (i *installerImpl) Purge(ctx context.Context) { } // remove all from disk - span, _ := tracer.StartSpanFromContext(ctx, "remove_all") + span, _ := telemetry.StartSpanFromContext(ctx, "remove_all") err = os.RemoveAll(i.packagesDir) - defer span.Finish(tracer.WithError(err)) + defer span.Finish(err) if err != nil { log.Warnf("could not delete packages dir: %v", err) } @@ -659,8 +658,8 @@ func (i *installerImpl) configurePackage(ctx context.Context, pkg string) (err e return nil } - span, _ := tracer.StartSpanFromContext(ctx, "configure_package") - defer func() { span.Finish(tracer.WithError(err)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "configure_package") + defer func() { span.Finish(err) }() switch pkg { case packageDatadogAgent, packageAPMInjector: diff --git a/pkg/fleet/installer/oci/download.go b/pkg/fleet/installer/oci/download.go index 1ddff40e37238..9260d19bc0e97 100644 --- a/pkg/fleet/installer/oci/download.go +++ b/pkg/fleet/installer/oci/download.go @@ -31,11 +31,11 @@ import ( "github.com/google/go-containerregistry/pkg/v1/types" "go.uber.org/multierr" "golang.org/x/net/http2" - httptrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" installerErrors "github.com/DataDog/datadog-agent/pkg/fleet/installer/errors" "github.com/DataDog/datadog-agent/pkg/fleet/installer/tar" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -241,7 +241,7 @@ func getRefAndKeychain(env *env.Env, url string) urlWithKeychain { // If they are specified, the registry and authentication overrides are applied first. // Then we try each registry in the list of default registries in order and return the first successful download. func (d *Downloader) downloadRegistry(ctx context.Context, url string) (oci.Image, error) { - transport := httptrace.WrapRoundTripper(d.client.Transport) + transport := telemetry.WrapRoundTripper(d.client.Transport) var err error if d.env.Mirror != "" { transport, err = newMirrorTransport(transport, d.env.Mirror) diff --git a/pkg/fleet/installer/packages/apm_inject.go b/pkg/fleet/installer/packages/apm_inject.go index 3f51793cf3486..0066671494204 100644 --- a/pkg/fleet/installer/packages/apm_inject.go +++ b/pkg/fleet/installer/packages/apm_inject.go @@ -19,9 +19,9 @@ import ( "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" "github.com/DataDog/datadog-agent/pkg/fleet/installer/packages/embedded" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" "go.uber.org/multierr" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) const ( @@ -32,8 +32,8 @@ const ( // SetupAPMInjector sets up the injector at bootstrap func SetupAPMInjector(ctx context.Context) (err error) { - span, ctx := tracer.StartSpanFromContext(ctx, "setup_injector") - defer func() { span.Finish(tracer.WithError(err)) }() + span, ctx := telemetry.StartSpanFromContext(ctx, "setup_injector") + defer func() { span.Finish(err) }() installer := newAPMInjectorInstaller(injectorPath) defer func() { installer.Finish(err) }() return installer.Setup(ctx) @@ -41,8 +41,8 @@ func SetupAPMInjector(ctx context.Context) (err error) { // RemoveAPMInjector removes the APM injector func RemoveAPMInjector(ctx context.Context) (err error) { - span, ctx := tracer.StartSpanFromContext(ctx, "remove_injector") - defer func() { span.Finish(tracer.WithError(err)) }() + span, ctx := telemetry.StartSpanFromContext(ctx, "remove_injector") + defer func() { span.Finish(err) }() installer := newAPMInjectorInstaller(injectorPath) defer func() { installer.Finish(err) }() return installer.Remove(ctx) @@ -50,8 +50,8 @@ func RemoveAPMInjector(ctx context.Context) (err error) { // InstrumentAPMInjector instruments the APM injector func InstrumentAPMInjector(ctx context.Context, method string) (err error) { - span, ctx := tracer.StartSpanFromContext(ctx, "instrument_injector") - defer func() { span.Finish(tracer.WithError(err)) }() + span, ctx := telemetry.StartSpanFromContext(ctx, "instrument_injector") + defer func() { span.Finish(err) }() installer := newAPMInjectorInstaller(injectorPath) installer.envs.InstallScript.APMInstrumentationEnabled = method defer func() { installer.Finish(err) }() @@ -60,8 +60,8 @@ func InstrumentAPMInjector(ctx context.Context, method string) (err error) { // UninstrumentAPMInjector uninstruments the APM injector func UninstrumentAPMInjector(ctx context.Context, method string) (err error) { - span, ctx := tracer.StartSpanFromContext(ctx, "uninstrument_injector") - defer func() { span.Finish(tracer.WithError(err)) }() + span, ctx := telemetry.StartSpanFromContext(ctx, "uninstrument_injector") + defer func() { span.Finish(err) }() installer := newAPMInjectorInstaller(injectorPath) installer.envs.InstallScript.APMInstrumentationEnabled = method defer func() { installer.Finish(err) }() @@ -148,8 +148,8 @@ func (a *apmInjectorInstaller) Setup(ctx context.Context) error { } func (a *apmInjectorInstaller) Remove(ctx context.Context) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "remove_injector") - defer func() { span.Finish(tracer.WithError(err)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "remove_injector") + defer func() { span.Finish(err) }() err = a.removeInstrumentScripts(ctx) if err != nil { @@ -277,8 +277,8 @@ func (a *apmInjectorInstaller) deleteLDPreloadConfigContent(_ context.Context, l } func (a *apmInjectorInstaller) verifySharedLib(ctx context.Context, libPath string) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "verify_shared_lib") - defer func() { span.Finish(tracer.WithError(err)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "verify_shared_lib") + defer func() { span.Finish(err) }() echoPath, err := exec.LookPath("echo") if err != nil { // If echo is not found, to not block install, @@ -302,8 +302,8 @@ func (a *apmInjectorInstaller) verifySharedLib(ctx context.Context, libPath stri // - Referenced in our public documentation, so we override them to use installer commands for consistency // - Used on deb/rpm removal and may break the OCI in the process func (a *apmInjectorInstaller) addInstrumentScripts(ctx context.Context) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "add_instrument_scripts") - defer func() { span.Finish(tracer.WithError(err)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "add_instrument_scripts") + defer func() { span.Finish(err) }() hostMutator := newFileMutator( "/usr/bin/dd-host-install", @@ -370,8 +370,8 @@ func (a *apmInjectorInstaller) addInstrumentScripts(ctx context.Context) (err er // removeInstrumentScripts removes the install scripts that come with the APM injector // if and only if they've been installed by the installer and not modified func (a *apmInjectorInstaller) removeInstrumentScripts(ctx context.Context) (retErr error) { - span, _ := tracer.StartSpanFromContext(ctx, "remove_instrument_scripts") - defer func() { span.Finish(tracer.WithError(retErr)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "remove_instrument_scripts") + defer func() { span.Finish(retErr) }() for _, script := range []string{"dd-host-install", "dd-container-install", "dd-cleanup"} { path := filepath.Join("/usr/bin", script) diff --git a/pkg/fleet/installer/packages/apm_sockets.go b/pkg/fleet/installer/packages/apm_sockets.go index db2def19fe43f..4c2e866116557 100644 --- a/pkg/fleet/installer/packages/apm_sockets.go +++ b/pkg/fleet/installer/packages/apm_sockets.go @@ -15,8 +15,8 @@ import ( "path/filepath" "strings" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" "gopkg.in/yaml.v2" ) @@ -119,9 +119,9 @@ func (a *apmInjectorInstaller) configureSocketsEnv(ctx context.Context) (retErr } // setSocketEnvs sets the socket environment variables -func setSocketEnvs(ctx context.Context, envFile []byte) ([]byte, error) { - span, _ := tracer.StartSpanFromContext(ctx, "set_socket_envs") - defer span.Finish() +func setSocketEnvs(ctx context.Context, envFile []byte) (res []byte, err error) { + span, _ := telemetry.StartSpanFromContext(ctx, "set_socket_envs") + defer span.Finish(err) apmSocket, statsdSocket, err := getSocketsPath() if err != nil { @@ -169,8 +169,8 @@ func addEnvsIfNotSet(envs map[string]string, envFile []byte) ([]byte, error) { // // Reloading systemd & restarting the unit has to be done separately by the caller func addSystemDEnvOverrides(ctx context.Context, unit string) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "add_systemd_env_overrides") - defer func() { span.Finish(tracer.WithError(err)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "add_systemd_env_overrides") + defer func() { span.Finish(err) }() span.SetTag("unit", unit) // The - is important as it lets the unit start even if the file is missing. diff --git a/pkg/fleet/installer/packages/app_armor.go b/pkg/fleet/installer/packages/app_armor.go index bd0ea2889802e..054a319fe4139 100644 --- a/pkg/fleet/installer/packages/app_armor.go +++ b/pkg/fleet/installer/packages/app_armor.go @@ -15,8 +15,8 @@ import ( "path/filepath" "strings" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) const ( @@ -33,8 +33,8 @@ func setupAppArmor(ctx context.Context) (err error) { // no-op if apparmor is not installed return nil } - span, _ := tracer.StartSpanFromContext(ctx, "setup_app_armor") - defer func() { span.Finish(tracer.WithError(err)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "setup_app_armor") + defer func() { span.Finish(err) }() if err = os.MkdirAll(appArmorConfigPath, 0755); err != nil { return fmt.Errorf("failed to create %s: %w", appArmorConfigPath, err) } @@ -61,8 +61,8 @@ func removeAppArmor(ctx context.Context) (err error) { } return err } - span, _ := tracer.StartSpanFromContext(ctx, "remove_app_armor") - defer span.Finish(tracer.WithError(err)) + span, _ := telemetry.StartSpanFromContext(ctx, "remove_app_armor") + defer span.Finish(err) if err = os.Remove(datadogProfilePath); err != nil { return err } diff --git a/pkg/fleet/installer/packages/datadog_agent.go b/pkg/fleet/installer/packages/datadog_agent.go index b364045328f57..34dbac394050f 100644 --- a/pkg/fleet/installer/packages/datadog_agent.go +++ b/pkg/fleet/installer/packages/datadog_agent.go @@ -16,9 +16,9 @@ import ( "path/filepath" "strings" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" "github.com/DataDog/datadog-agent/pkg/util/installinfo" "github.com/DataDog/datadog-agent/pkg/util/log" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) const ( @@ -72,8 +72,8 @@ var ( // PrepareAgent prepares the machine to install the agent func PrepareAgent(ctx context.Context) (err error) { - span, ctx := tracer.StartSpanFromContext(ctx, "prepare_agent") - defer func() { span.Finish(tracer.WithError(err)) }() + span, ctx := telemetry.StartSpanFromContext(ctx, "prepare_agent") + defer func() { span.Finish(err) }() // Check if the agent has been installed by a package manager, if yes remove it if !oldAgentInstalled() { @@ -88,13 +88,13 @@ func PrepareAgent(ctx context.Context) (err error) { // SetupAgent installs and starts the agent func SetupAgent(ctx context.Context, _ []string) (err error) { - span, ctx := tracer.StartSpanFromContext(ctx, "setup_agent") + span, ctx := telemetry.StartSpanFromContext(ctx, "setup_agent") defer func() { if err != nil { log.Errorf("Failed to setup agent, reverting: %s", err) err = errors.Join(err, RemoveAgent(ctx)) } - span.Finish(tracer.WithError(err)) + span.Finish(err) }() for _, unit := range stableUnits { @@ -159,38 +159,45 @@ func SetupAgent(ctx context.Context, _ []string) (err error) { // RemoveAgent stops and removes the agent func RemoveAgent(ctx context.Context) error { - span, ctx := tracer.StartSpanFromContext(ctx, "remove_agent_units") - defer span.Finish() + span, ctx := telemetry.StartSpanFromContext(ctx, "remove_agent_units") + var spanErr error + defer func() { span.Finish(spanErr) }() // stop experiments, they can restart stable agent for _, unit := range experimentalUnits { if err := stopUnit(ctx, unit); err != nil { log.Warnf("Failed to stop %s: %s", unit, err) + spanErr = err } } // stop stable agents for _, unit := range stableUnits { if err := stopUnit(ctx, unit); err != nil { log.Warnf("Failed to stop %s: %s", unit, err) + spanErr = err } } if err := disableUnit(ctx, agentUnit); err != nil { log.Warnf("Failed to disable %s: %s", agentUnit, err) + spanErr = err } // remove units from disk for _, unit := range experimentalUnits { if err := removeUnit(ctx, unit); err != nil { log.Warnf("Failed to remove %s: %s", unit, err) + spanErr = err } } for _, unit := range stableUnits { if err := removeUnit(ctx, unit); err != nil { log.Warnf("Failed to remove %s: %s", unit, err) + spanErr = err } } if err := os.Remove(agentSymlink); err != nil { log.Warnf("Failed to remove agent symlink: %s", err) + spanErr = err } installinfo.RmInstallInfo() // TODO: Return error to caller? @@ -202,12 +209,12 @@ func oldAgentInstalled() bool { return err == nil } -func stopOldAgentUnits(ctx context.Context) error { +func stopOldAgentUnits(ctx context.Context) (err error) { if !oldAgentInstalled() { return nil } - span, ctx := tracer.StartSpanFromContext(ctx, "remove_old_agent_units") - defer span.Finish() + span, ctx := telemetry.StartSpanFromContext(ctx, "remove_old_agent_units") + defer span.Finish(err) for _, unit := range stableUnits { if err := stopUnit(ctx, unit); err != nil { return fmt.Errorf("failed to stop %s: %v", unit, err) diff --git a/pkg/fleet/installer/packages/datadog_agent_windows.go b/pkg/fleet/installer/packages/datadog_agent_windows.go index d330ab434d0e0..69935fdee41d8 100644 --- a/pkg/fleet/installer/packages/datadog_agent_windows.go +++ b/pkg/fleet/installer/packages/datadog_agent_windows.go @@ -12,9 +12,8 @@ import ( "fmt" "github.com/DataDog/datadog-agent/pkg/fleet/internal/winregistry" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" - - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) const ( @@ -28,12 +27,12 @@ func PrepareAgent(_ context.Context) error { // SetupAgent installs and starts the agent func SetupAgent(ctx context.Context, args []string) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "setup_agent") + span, _ := telemetry.StartSpanFromContext(ctx, "setup_agent") defer func() { if err != nil { log.Errorf("Failed to setup agent: %s", err) } - span.Finish(tracer.WithError(err)) + span.Finish(err) }() // Make sure there are no Agent already installed _ = removeAgentIfInstalled(ctx) @@ -43,12 +42,12 @@ func SetupAgent(ctx context.Context, args []string) (err error) { // StartAgentExperiment starts the agent experiment func StartAgentExperiment(ctx context.Context) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "start_experiment") + span, _ := telemetry.StartSpanFromContext(ctx, "start_experiment") defer func() { if err != nil { log.Errorf("Failed to start agent experiment: %s", err) } - span.Finish(tracer.WithError(err)) + span.Finish(err) }() err = removeAgentIfInstalled(ctx) @@ -66,12 +65,12 @@ func StartAgentExperiment(ctx context.Context) (err error) { // StopAgentExperiment stops the agent experiment, i.e. removes/uninstalls it. func StopAgentExperiment(ctx context.Context) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "stop_experiment") + span, _ := telemetry.StartSpanFromContext(ctx, "stop_experiment") defer func() { if err != nil { log.Errorf("Failed to stop agent experiment: %s", err) } - span.Finish(tracer.WithError(err)) + span.Finish(err) }() err = removeAgentIfInstalled(ctx) @@ -123,14 +122,14 @@ func installAgentPackage(target string, args []string) error { func removeAgentIfInstalled(ctx context.Context) (err error) { if isProductInstalled("Datadog Agent") { - span, _ := tracer.StartSpanFromContext(ctx, "remove_agent") + span, _ := telemetry.StartSpanFromContext(ctx, "remove_agent") defer func() { if err != nil { // removal failed, this should rarely happen. // Rollback might have restored the Agent, but we can't be sure. log.Errorf("Failed to remove agent: %s", err) } - span.Finish(tracer.WithError(err)) + span.Finish(err) }() err := removeProduct("Datadog Agent") if err != nil { diff --git a/pkg/fleet/installer/packages/datadog_installer_windows.go b/pkg/fleet/installer/packages/datadog_installer_windows.go index 2d8dc8241c541..d7714ddb257cc 100644 --- a/pkg/fleet/installer/packages/datadog_installer_windows.go +++ b/pkg/fleet/installer/packages/datadog_installer_windows.go @@ -11,8 +11,8 @@ package packages import ( "context" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) const ( @@ -21,12 +21,12 @@ const ( // SetupInstaller installs and starts the installer func SetupInstaller(ctx context.Context) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "setup_installer") + span, _ := telemetry.StartSpanFromContext(ctx, "setup_installer") defer func() { if err != nil { log.Errorf("Failed to setup installer: %s", err) } - span.Finish(tracer.WithError(err)) + span.Finish(err) }() cmd, err := msiexec("stable", datadogInstaller, "/i", nil) if err == nil { @@ -39,12 +39,12 @@ func SetupInstaller(ctx context.Context) (err error) { // RemoveInstaller removes the installer func RemoveInstaller(ctx context.Context) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "remove_installer") + span, _ := telemetry.StartSpanFromContext(ctx, "remove_installer") defer func() { if err != nil { log.Errorf("Failed to remove installer: %s", err) } - span.Finish(tracer.WithError(err)) + span.Finish(err) }() err = removeProduct("Datadog Installer") return err @@ -52,12 +52,12 @@ func RemoveInstaller(ctx context.Context) (err error) { // StartInstallerExperiment starts the installer experiment func StartInstallerExperiment(ctx context.Context) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "start_installer_experiment") + span, _ := telemetry.StartSpanFromContext(ctx, "start_installer_experiment") defer func() { if err != nil { log.Errorf("Failed to start installer experiment: %s", err) } - span.Finish(tracer.WithError(err)) + span.Finish(err) }() cmd, err := msiexec("experiment", datadogInstaller, "/i", nil) if err == nil { @@ -69,12 +69,12 @@ func StartInstallerExperiment(ctx context.Context) (err error) { // StopInstallerExperiment stops the installer experiment func StopInstallerExperiment(ctx context.Context) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "stop_installer_experiment") + span, _ := telemetry.StartSpanFromContext(ctx, "stop_installer_experiment") defer func() { if err != nil { log.Errorf("Failed to stop installer experiment: %s", err) } - span.Finish(tracer.WithError(err)) + span.Finish(err) }() cmd, err := msiexec("stable", datadogInstaller, "/i", nil) if err == nil { diff --git a/pkg/fleet/installer/packages/docker.go b/pkg/fleet/installer/packages/docker.go index 45984ca96a652..2b264fb7f9e02 100644 --- a/pkg/fleet/installer/packages/docker.go +++ b/pkg/fleet/installer/packages/docker.go @@ -20,9 +20,9 @@ import ( "syscall" "time" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/shirou/gopsutil/v4/process" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) type dockerDaemonConfig map[string]interface{} @@ -73,14 +73,14 @@ func (a *apmInjectorInstaller) uninstrumentDocker(ctx context.Context) error { } // setDockerConfigContent sets the content of the docker daemon configuration -func (a *apmInjectorInstaller) setDockerConfigContent(ctx context.Context, previousContent []byte) ([]byte, error) { - span, _ := tracer.StartSpanFromContext(ctx, "set_docker_config_content") - defer span.Finish() +func (a *apmInjectorInstaller) setDockerConfigContent(ctx context.Context, previousContent []byte) (res []byte, err error) { + span, _ := telemetry.StartSpanFromContext(ctx, "set_docker_config_content") + defer span.Finish(err) dockerConfig := dockerDaemonConfig{} if len(previousContent) > 0 { - err := json.Unmarshal(previousContent, &dockerConfig) + err = json.Unmarshal(previousContent, &dockerConfig) if err != nil { return nil, err } @@ -140,8 +140,8 @@ func (a *apmInjectorInstaller) deleteDockerConfigContent(_ context.Context, prev // // This method is valid since at least Docker 17.03 (last update 2018-08-30) func (a *apmInjectorInstaller) verifyDockerRuntime(ctx context.Context) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "verify_docker_runtime") - defer func() { span.Finish(tracer.WithError(err)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "verify_docker_runtime") + defer func() { span.Finish(err) }() if !isDockerActive(ctx) { log.Warn("docker is inactive, skipping docker runtime verification") @@ -172,8 +172,8 @@ func (a *apmInjectorInstaller) verifyDockerRuntime(ctx context.Context) (err err } func reloadDockerConfig(ctx context.Context) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "reload_docker") - defer func() { span.Finish(tracer.WithError(err)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "reload_docker") + defer func() { span.Finish(err) }() if !isDockerActive(ctx) { log.Warn("docker is inactive, skipping docker reload") return nil @@ -205,8 +205,8 @@ func reloadDockerConfig(ctx context.Context) (err error) { // isDockerInstalled checks if docker is installed on the system func isDockerInstalled(ctx context.Context) bool { - span, _ := tracer.StartSpanFromContext(ctx, "is_docker_installed") - defer span.Finish() + span, _ := telemetry.StartSpanFromContext(ctx, "is_docker_installed") + defer span.Finish(nil) // Docker is installed if the docker binary is in the PATH _, err := exec.LookPath("docker") diff --git a/pkg/fleet/installer/packages/file.go b/pkg/fleet/installer/packages/file.go index b8670b26ee34d..f6e6b7eeadb70 100644 --- a/pkg/fleet/installer/packages/file.go +++ b/pkg/fleet/installer/packages/file.go @@ -15,8 +15,8 @@ import ( "os" "syscall" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) var rollbackNoop = func() error { return nil } @@ -46,8 +46,8 @@ func newFileMutator(path string, transform func(ctx context.Context, existing [] } func (ft *fileMutator) mutate(ctx context.Context) (rollback func() error, err error) { - span, ctx := tracer.StartSpanFromContext(ctx, "mutate_file") - defer func() { span.Finish(tracer.WithError(err)) }() + span, ctx := telemetry.StartSpanFromContext(ctx, "mutate_file") + defer func() { span.Finish(err) }() span.SetTag("file", ft.path) defer os.Remove(ft.pathTmp) diff --git a/pkg/fleet/installer/packages/pkg_manager.go b/pkg/fleet/installer/packages/pkg_manager.go index e74dba210a015..98b9d76b29d59 100644 --- a/pkg/fleet/installer/packages/pkg_manager.go +++ b/pkg/fleet/installer/packages/pkg_manager.go @@ -13,7 +13,7 @@ import ( "fmt" "os/exec" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" ) // removeDebRPMPackage removes a package installed via deb/rpm package manager @@ -21,8 +21,8 @@ import ( // and reinstall the package using the installer. // Note: we don't run the pre/post remove scripts as we want to avoid surprises for older agent versions (like removing config) func removeDebRPMPackage(ctx context.Context, pkg string) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "remove_deb_rpm_package") - defer func() { span.Finish(tracer.WithError(err)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "remove_deb_rpm_package") + defer func() { span.Finish(err) }() // Compute the right command depending on the package manager var cmd *exec.Cmd if _, pathErr := exec.LookPath("dpkg"); pathErr == nil { diff --git a/pkg/fleet/installer/packages/systemd.go b/pkg/fleet/installer/packages/systemd.go index 9b95672af1533..0daf5623b8332 100644 --- a/pkg/fleet/installer/packages/systemd.go +++ b/pkg/fleet/installer/packages/systemd.go @@ -17,15 +17,15 @@ import ( "path/filepath" "github.com/DataDog/datadog-agent/pkg/fleet/installer/packages/embedded" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) const systemdPath = "/etc/systemd/system" func stopUnit(ctx context.Context, unit string, args ...string) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "stop_unit") - defer func() { span.Finish(tracer.WithError(err)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "stop_unit") + defer func() { span.Finish(err) }() span.SetTag("unit", unit) args = append([]string{"stop", unit}, args...) err = exec.CommandContext(ctx, "systemctl", args...).Run() @@ -42,8 +42,8 @@ func stopUnit(ctx context.Context, unit string, args ...string) (err error) { } func startUnit(ctx context.Context, unit string, args ...string) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "start_unit") - defer func() { span.Finish(tracer.WithError(err)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "start_unit") + defer func() { span.Finish(err) }() span.SetTag("unit", unit) args = append([]string{"start", unit}, args...) err = exec.CommandContext(ctx, "systemctl", args...).Run() @@ -56,8 +56,8 @@ func startUnit(ctx context.Context, unit string, args ...string) (err error) { } func enableUnit(ctx context.Context, unit string) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "enable_unit") - defer func() { span.Finish(tracer.WithError(err)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "enable_unit") + defer func() { span.Finish(err) }() span.SetTag("unit", unit) err = exec.CommandContext(ctx, "systemctl", "enable", unit).Run() exitErr := &exec.ExitError{} @@ -69,8 +69,8 @@ func enableUnit(ctx context.Context, unit string) (err error) { } func disableUnit(ctx context.Context, unit string) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "disable_unit") - defer func() { span.Finish(tracer.WithError(err)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "disable_unit") + defer func() { span.Finish(err) }() span.SetTag("unit", unit) enabledErr := exec.CommandContext(ctx, "systemctl", "is-enabled", "--quiet", unit).Run() @@ -93,8 +93,8 @@ func disableUnit(ctx context.Context, unit string) (err error) { } func loadUnit(ctx context.Context, unit string) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "load_unit") - defer func() { span.Finish(tracer.WithError(err)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "load_unit") + defer func() { span.Finish(err) }() span.SetTag("unit", unit) content, err := embedded.FS.ReadFile(unit) if err != nil { @@ -105,8 +105,8 @@ func loadUnit(ctx context.Context, unit string) (err error) { } func removeUnit(ctx context.Context, unit string) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "remove_unit") - defer func() { span.Finish(tracer.WithError(err)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "remove_unit") + defer func() { span.Finish(err) }() span.SetTag("unit", unit) err = os.Remove(path.Join(systemdPath, unit)) if err != nil && !os.IsNotExist(err) { @@ -116,8 +116,8 @@ func removeUnit(ctx context.Context, unit string) (err error) { } func systemdReload(ctx context.Context) (err error) { - span, _ := tracer.StartSpanFromContext(ctx, "systemd_reload") - defer func() { span.Finish(tracer.WithError(err)) }() + span, _ := telemetry.StartSpanFromContext(ctx, "systemd_reload") + defer func() { span.Finish(err) }() err = exec.CommandContext(ctx, "systemctl", "daemon-reload").Run() exitErr := &exec.ExitError{} if !errors.As(err, &exitErr) { diff --git a/pkg/fleet/installer/setup/common/setup.go b/pkg/fleet/installer/setup/common/setup.go index 7abab785021f6..60931ef01da69 100644 --- a/pkg/fleet/installer/setup/common/setup.go +++ b/pkg/fleet/installer/setup/common/setup.go @@ -17,9 +17,8 @@ import ( "github.com/DataDog/datadog-agent/pkg/fleet/installer" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" "github.com/DataDog/datadog-agent/pkg/fleet/installer/oci" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" "github.com/DataDog/datadog-agent/pkg/version" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) const ( @@ -41,7 +40,7 @@ type Setup struct { Out *Output Env *env.Env Ctx context.Context - Span ddtrace.Span + Span telemetry.Span Packages Packages Config Config } @@ -61,7 +60,7 @@ Running the %s installation script (https://github.com/DataDog/datadog-agent/tre if err != nil { return nil, fmt.Errorf("failed to create installer: %w", err) } - span, ctx := tracer.StartSpanFromContext(ctx, fmt.Sprintf("setup.%s", flavor)) + span, ctx := telemetry.StartSpanFromContext(ctx, fmt.Sprintf("setup.%s", flavor)) s := &Setup{ configDir: configDir, installer: installer, @@ -89,7 +88,7 @@ Running the %s installation script (https://github.com/DataDog/datadog-agent/tre // Run installs the packages and writes the configurations func (s *Setup) Run() (err error) { - defer func() { s.Span.Finish(tracer.WithError(err)) }() + defer func() { s.Span.Finish(err) }() s.Out.WriteString("Applying configurations...\n") err = writeConfigs(s.Config, s.configDir) if err != nil { @@ -118,8 +117,8 @@ func (s *Setup) Run() (err error) { // installPackage mimicks the telemetry of calling the install package command func (s *Setup) installPackage(name string, url string) (err error) { - span, ctx := tracer.StartSpanFromContext(s.Ctx, "install") - defer func() { span.Finish(tracer.WithError(err)) }() + span, ctx := telemetry.StartSpanFromContext(s.Ctx, "install") + defer func() { span.Finish(err) }() span.SetTag("url", url) span.SetTag("_top_level", 1) diff --git a/pkg/fleet/installer/setup/djm/databricks_test.go b/pkg/fleet/installer/setup/djm/databricks_test.go index 6f2457b7d0e29..0bd7d183122cf 100644 --- a/pkg/fleet/installer/setup/djm/databricks_test.go +++ b/pkg/fleet/installer/setup/djm/databricks_test.go @@ -13,9 +13,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" "github.com/DataDog/datadog-agent/pkg/fleet/installer/setup/common" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" ) func TestSetupCommonHostTags(t *testing.T) { @@ -70,7 +70,7 @@ func TestSetupCommonHostTags(t *testing.T) { for k, v := range tt.env { require.NoError(t, os.Setenv(k, v)) } - span, _ := tracer.StartSpanFromContext(context.Background(), "test") + span, _ := telemetry.StartSpanFromContext(context.Background(), "test") s := &common.Setup{Span: span} setupCommonHostTags(s) diff --git a/pkg/fleet/internal/cdn/cdn.go b/pkg/fleet/internal/cdn/cdn.go index ab74ce9bfe0a7..4f65108dfa90f 100644 --- a/pkg/fleet/internal/cdn/cdn.go +++ b/pkg/fleet/internal/cdn/cdn.go @@ -16,8 +16,8 @@ import ( "runtime" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" + "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" pbgo "github.com/DataDog/datadog-agent/pkg/proto/pbgo/core" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) const policyMetadataFilename = "policy.metadata" @@ -110,13 +110,13 @@ func New(env *env.Env, configDBPath string) (*CDN, error) { // Get fetches the configuration for the given package. func (c *CDN) Get(ctx context.Context, pkg string) (cfg Config, err error) { - span, _ := tracer.StartSpanFromContext(ctx, "cdn.Get") + span, _ := telemetry.StartSpanFromContext(ctx, "cdn.Get") defer func() { spanErr := err if spanErr == ErrProductNotSupported { spanErr = nil } - span.Finish(tracer.WithError(spanErr)) + span.Finish(spanErr) }() switch pkg { diff --git a/pkg/fleet/internal/exec/installer_exec.go b/pkg/fleet/internal/exec/installer_exec.go index 10da440869079..834f54b3d8a53 100644 --- a/pkg/fleet/internal/exec/installer_exec.go +++ b/pkg/fleet/internal/exec/installer_exec.go @@ -22,7 +22,6 @@ import ( installerErrors "github.com/DataDog/datadog-agent/pkg/fleet/installer/errors" "github.com/DataDog/datadog-agent/pkg/fleet/installer/repository" "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" ) // InstallerExec is an implementation of the Installer interface that uses the installer binary. @@ -41,13 +40,13 @@ func NewInstallerExec(env *env.Env, installerBinPath string) *InstallerExec { type installerCmd struct { *exec.Cmd - span tracer.Span + span telemetry.Span ctx context.Context } func (i *InstallerExec) newInstallerCmd(ctx context.Context, command string, args ...string) *installerCmd { env := i.env.ToEnv() - span, ctx := tracer.StartSpanFromContext(ctx, fmt.Sprintf("installer.%s", command)) + span, ctx := telemetry.StartSpanFromContext(ctx, fmt.Sprintf("installer.%s", command)) span.SetTag("args", args) cmd := exec.CommandContext(ctx, i.installerBinPath, append([]string{command}, args...)...) env = append(os.Environ(), env...) @@ -72,14 +71,14 @@ func (i *InstallerExec) newInstallerCmd(ctx context.Context, command string, arg // Install installs a package. func (i *InstallerExec) Install(ctx context.Context, url string, _ []string) (err error) { cmd := i.newInstallerCmd(ctx, "install", url) - defer func() { cmd.span.Finish(tracer.WithError(err)) }() + defer func() { cmd.span.Finish(err) }() return cmd.Run() } // Remove removes a package. func (i *InstallerExec) Remove(ctx context.Context, pkg string) (err error) { cmd := i.newInstallerCmd(ctx, "remove", pkg) - defer func() { cmd.span.Finish(tracer.WithError(err)) }() + defer func() { cmd.span.Finish(err) }() return cmd.Run() } @@ -91,70 +90,70 @@ func (i *InstallerExec) Purge(_ context.Context) { // InstallExperiment installs an experiment. func (i *InstallerExec) InstallExperiment(ctx context.Context, url string) (err error) { cmd := i.newInstallerCmd(ctx, "install-experiment", url) - defer func() { cmd.span.Finish(tracer.WithError(err)) }() + defer func() { cmd.span.Finish(err) }() return cmd.Run() } // RemoveExperiment removes an experiment. func (i *InstallerExec) RemoveExperiment(ctx context.Context, pkg string) (err error) { cmd := i.newInstallerCmd(ctx, "remove-experiment", pkg) - defer func() { cmd.span.Finish(tracer.WithError(err)) }() + defer func() { cmd.span.Finish(err) }() return cmd.Run() } // PromoteExperiment promotes an experiment to stable. func (i *InstallerExec) PromoteExperiment(ctx context.Context, pkg string) (err error) { cmd := i.newInstallerCmd(ctx, "promote-experiment", pkg) - defer func() { cmd.span.Finish(tracer.WithError(err)) }() + defer func() { cmd.span.Finish(err) }() return cmd.Run() } // InstallConfigExperiment installs an experiment. func (i *InstallerExec) InstallConfigExperiment(ctx context.Context, url string, version string) (err error) { cmd := i.newInstallerCmd(ctx, "install-config-experiment", url, version) - defer func() { cmd.span.Finish(tracer.WithError(err)) }() + defer func() { cmd.span.Finish(err) }() return cmd.Run() } // RemoveConfigExperiment removes an experiment. func (i *InstallerExec) RemoveConfigExperiment(ctx context.Context, pkg string) (err error) { cmd := i.newInstallerCmd(ctx, "remove-config-experiment", pkg) - defer func() { cmd.span.Finish(tracer.WithError(err)) }() + defer func() { cmd.span.Finish(err) }() return cmd.Run() } // PromoteConfigExperiment promotes an experiment to stable. func (i *InstallerExec) PromoteConfigExperiment(ctx context.Context, pkg string) (err error) { cmd := i.newInstallerCmd(ctx, "promote-config-experiment", pkg) - defer func() { cmd.span.Finish(tracer.WithError(err)) }() + defer func() { cmd.span.Finish(err) }() return cmd.Run() } // GarbageCollect runs the garbage collector. func (i *InstallerExec) GarbageCollect(ctx context.Context) (err error) { cmd := i.newInstallerCmd(ctx, "garbage-collect") - defer func() { cmd.span.Finish(tracer.WithError(err)) }() + defer func() { cmd.span.Finish(err) }() return cmd.Run() } // InstrumentAPMInjector instruments the APM auto-injector. func (i *InstallerExec) InstrumentAPMInjector(ctx context.Context, method string) (err error) { cmd := i.newInstallerCmd(ctx, "apm instrument", method) - defer func() { cmd.span.Finish(tracer.WithError(err)) }() + defer func() { cmd.span.Finish(err) }() return cmd.Run() } // UninstrumentAPMInjector uninstruments the APM auto-injector. func (i *InstallerExec) UninstrumentAPMInjector(ctx context.Context, method string) (err error) { cmd := i.newInstallerCmd(ctx, "apm uninstrument", method) - defer func() { cmd.span.Finish(tracer.WithError(err)) }() + defer func() { cmd.span.Finish(err) }() return cmd.Run() } // IsInstalled checks if a package is installed. func (i *InstallerExec) IsInstalled(ctx context.Context, pkg string) (_ bool, err error) { cmd := i.newInstallerCmd(ctx, "is-installed", pkg) - defer func() { cmd.span.Finish(tracer.WithError(err)) }() + defer func() { cmd.span.Finish(err) }() err = cmd.Run() if err != nil && cmd.ProcessState.ExitCode() == 10 { return false, nil @@ -168,7 +167,7 @@ func (i *InstallerExec) IsInstalled(ctx context.Context, pkg string) (_ bool, er // DefaultPackages returns the default packages to install. func (i *InstallerExec) DefaultPackages(ctx context.Context) (_ []string, err error) { cmd := i.newInstallerCmd(ctx, "default-packages") - defer func() { cmd.span.Finish(tracer.WithError(err)) }() + defer func() { cmd.span.Finish(err) }() var stdout bytes.Buffer var stderr bytes.Buffer cmd.Stdout = &stdout @@ -190,7 +189,7 @@ func (i *InstallerExec) DefaultPackages(ctx context.Context) (_ []string, err er // Setup runs the setup command. func (i *InstallerExec) Setup(ctx context.Context) (err error) { cmd := i.newInstallerCmd(ctx, "setup") - defer func() { cmd.span.Finish(tracer.WithError(err)) }() + defer func() { cmd.span.Finish(err) }() var stderr bytes.Buffer cmd.Stderr = &stderr err = cmd.Run() diff --git a/pkg/fleet/telemetry/span.go b/pkg/fleet/telemetry/span.go new file mode 100644 index 0000000000000..ac8f79516c736 --- /dev/null +++ b/pkg/fleet/telemetry/span.go @@ -0,0 +1,26 @@ +// 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 telemetry provides the telemetry for fleet components. +package telemetry + +import ( + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext" + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" +) + +// Span is an alias for ddtrace.Span until we phase ddtrace out. +type Span struct{ ddtrace.Span } + +// Finish finishes the span with an error. +func (s *Span) Finish(err error) { + s.Span.Finish(tracer.WithError(err)) +} + +// SetResourceName sets the resource name of the span. +func (s *Span) SetResourceName(name string) { + s.Span.SetTag(ext.ResourceName, name) +} diff --git a/pkg/fleet/telemetry/telemetry.go b/pkg/fleet/telemetry/telemetry.go index f484e06822cd4..df641722cb18a 100644 --- a/pkg/fleet/telemetry/telemetry.go +++ b/pkg/fleet/telemetry/telemetry.go @@ -19,6 +19,7 @@ import ( "strings" "sync" + httptrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" @@ -207,17 +208,41 @@ func (addr) String() string { return "local" } -// StartSpanFromEnv starts a span using the environment variables to find the parent span. -func StartSpanFromEnv(ctx context.Context, operationName string, spanOptions ...ddtrace.StartSpanOption) (ddtrace.Span, context.Context) { - spanContext, ok := spanContextFromEnv() - if ok { - spanOptions = append([]ddtrace.StartSpanOption{tracer.ChildOf(spanContext)}, spanOptions...) +// StartSpanFromIDs starts a span using the trace and parent +// IDs provided. +func StartSpanFromIDs(ctx context.Context, operationName, traceID, parentID string, spanOptions ...ddtrace.StartSpanOption) (Span, context.Context) { + ctxCarrier := tracer.TextMapCarrier{ + tracer.DefaultTraceIDHeader: traceID, + tracer.DefaultParentIDHeader: parentID, + tracer.DefaultPriorityHeader: "2", + } + spanCtx, err := tracer.Extract(ctxCarrier) + if err != nil { + log.Debugf("failed to extract span context from install script params: %v", err) + return Span{tracer.StartSpan("remote_request")}, ctx + } + spanOptions = append([]ddtrace.StartSpanOption{tracer.ChildOf(spanCtx)}, spanOptions...) + + return StartSpanFromContext(ctx, operationName, spanOptions...) +} + +// SpanFromContext returns the span from the context if available. +func SpanFromContext(ctx context.Context) (Span, bool) { + span, ok := tracer.SpanFromContext(ctx) + if !ok { + return Span{}, false } - return tracer.StartSpanFromContext(ctx, operationName, spanOptions...) + return Span{span}, true } -// spanContextFromEnv injects the traceID and parentID from the environment into the context if available. -func spanContextFromEnv() (ddtrace.SpanContext, bool) { +// StartSpanFromContext starts a span using the context to find the parent span. +func StartSpanFromContext(ctx context.Context, operationName string, spanOptions ...ddtrace.StartSpanOption) (Span, context.Context) { + span, ctx := tracer.StartSpanFromContext(ctx, operationName, spanOptions...) + return Span{span}, ctx +} + +// StartSpanFromEnv starts a span using the environment variables to find the parent span. +func StartSpanFromEnv(ctx context.Context, operationName string, spanOptions ...ddtrace.StartSpanOption) (Span, context.Context) { traceID, ok := os.LookupEnv(EnvTraceID) if !ok { traceID = strconv.FormatUint(rand.Uint64(), 10) @@ -226,17 +251,7 @@ func spanContextFromEnv() (ddtrace.SpanContext, bool) { if !ok { parentID = "0" } - ctxCarrier := tracer.TextMapCarrier{ - tracer.DefaultTraceIDHeader: traceID, - tracer.DefaultParentIDHeader: parentID, - tracer.DefaultPriorityHeader: "2", - } - spanCtx, err := tracer.Extract(ctxCarrier) - if err != nil { - log.Debugf("failed to extract span context from install script params: %v", err) - return nil, false - } - return spanCtx, true + return StartSpanFromIDs(ctx, operationName, traceID, parentID, spanOptions...) } // EnvFromContext returns the environment variables for the context. @@ -266,3 +281,8 @@ func WithSamplingRules(rules ...tracer.SamplingRule) Option { t.samplingRules = rules } } + +// WrapRoundTripper wraps the round tripper with the telemetry round tripper. +func WrapRoundTripper(rt http.RoundTripper) http.RoundTripper { + return httptrace.WrapRoundTripper(rt) +} From b9ab51afbc1ec3d1c2269328fe7eed437947f2cb Mon Sep 17 00:00:00 2001 From: Guy Arbitman Date: Sun, 15 Dec 2024 11:06:23 +0200 Subject: [PATCH 208/303] usm: go-tls: Change BPF_LRU_MAP to BPF_HASH_MAP (#32178) --- pkg/network/ebpf/c/protocols/tls/go-tls-maps.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/network/ebpf/c/protocols/tls/go-tls-maps.h b/pkg/network/ebpf/c/protocols/tls/go-tls-maps.h index 1c66dee1d0abc..896b77cc8190f 100644 --- a/pkg/network/ebpf/c/protocols/tls/go-tls-maps.h +++ b/pkg/network/ebpf/c/protocols/tls/go-tls-maps.h @@ -11,11 +11,11 @@ BPF_HASH_MAP(offsets_data, go_tls_offsets_data_key_t, tls_offsets_data_t, 1024) /* go_tls_read_args is used to get the read function info when running in the read-return uprobe. The key contains the go routine id and the pid. */ -BPF_LRU_MAP(go_tls_read_args, go_tls_function_args_key_t, go_tls_read_args_data_t, 2048) +BPF_HASH_MAP(go_tls_read_args, go_tls_function_args_key_t, go_tls_read_args_data_t, 2048) /* go_tls_write_args is used to get the read function info when running in the write-return uprobe. The key contains the go routine id and the pid. */ -BPF_LRU_MAP(go_tls_write_args, go_tls_function_args_key_t, go_tls_write_args_data_t, 2048) +BPF_HASH_MAP(go_tls_write_args, go_tls_function_args_key_t, go_tls_write_args_data_t, 2048) /* This map associates crypto/tls.(*Conn) values to the corresponding conn_tuple_t* value. It is used to implement a simplified version of tup_from_ssl_ctx from usm.c From cfea906319be73b0af7877153829d6360b810766 Mon Sep 17 00:00:00 2001 From: Guy Arbitman Date: Sun, 15 Dec 2024 11:06:29 +0200 Subject: [PATCH 209/303] usm: sharedlibraries: Change BPF_LRU_MAP to BPF_HASH_MAP (#32179) --- .../ebpf/c/protocols/tls/native-tls-maps.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pkg/network/ebpf/c/protocols/tls/native-tls-maps.h b/pkg/network/ebpf/c/protocols/tls/native-tls-maps.h index 4ee9366cd58cc..282c593308b16 100644 --- a/pkg/network/ebpf/c/protocols/tls/native-tls-maps.h +++ b/pkg/network/ebpf/c/protocols/tls/native-tls-maps.h @@ -3,20 +3,20 @@ #include "map-defs.h" -BPF_LRU_MAP(ssl_sock_by_ctx, void *, ssl_sock_t, 1) +BPF_HASH_MAP(ssl_sock_by_ctx, void *, ssl_sock_t, 1) -BPF_LRU_MAP(ssl_read_args, u64, ssl_read_args_t, 1024) +BPF_HASH_MAP(ssl_read_args, u64, ssl_read_args_t, 1024) -BPF_LRU_MAP(ssl_read_ex_args, u64, ssl_read_ex_args_t, 1024) +BPF_HASH_MAP(ssl_read_ex_args, u64, ssl_read_ex_args_t, 1024) -BPF_LRU_MAP(ssl_write_args, u64, ssl_write_args_t, 1024) +BPF_HASH_MAP(ssl_write_args, u64, ssl_write_args_t, 1024) -BPF_LRU_MAP(ssl_write_ex_args, u64, ssl_write_ex_args_t, 1024) +BPF_HASH_MAP(ssl_write_ex_args, u64, ssl_write_ex_args_t, 1024) -BPF_LRU_MAP(bio_new_socket_args, __u64, __u32, 1024) +BPF_HASH_MAP(bio_new_socket_args, __u64, __u32, 1024) -BPF_LRU_MAP(fd_by_ssl_bio, __u32, void *, 1024) +BPF_HASH_MAP(fd_by_ssl_bio, __u32, void *, 1024) -BPF_LRU_MAP(ssl_ctx_by_pid_tgid, __u64, void *, 1024) +BPF_HASH_MAP(ssl_ctx_by_pid_tgid, __u64, void *, 1024) #endif From 6f5f2b0e65208a732d6ccb60d2558ebd00e9eda8 Mon Sep 17 00:00:00 2001 From: Guy Arbitman Date: Sun, 15 Dec 2024 14:26:21 +0200 Subject: [PATCH 210/303] usm: sharedlibraries: Change BPF_LRU_MAP to BPF_HASH_MAP (#32180) --- pkg/network/ebpf/c/shared-libraries/maps.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/network/ebpf/c/shared-libraries/maps.h b/pkg/network/ebpf/c/shared-libraries/maps.h index ec0112536462a..f1d8f34d854f4 100644 --- a/pkg/network/ebpf/c/shared-libraries/maps.h +++ b/pkg/network/ebpf/c/shared-libraries/maps.h @@ -4,7 +4,9 @@ #include "shared-libraries/types.h" #include "map-defs.h" -BPF_LRU_MAP(open_at_args, __u64, lib_path_t, 1024) +// This map is used with 3 different probes, each can be called up to 1024 times each. +// Thus we need to have a map that can store 1024*3 entries. I'm using a larger map to be safe. +BPF_HASH_MAP(open_at_args, __u64, lib_path_t, 10240) /* * These maps are used for notifying userspace of a shared library being loaded From a0a4d167cf3e2b7452cf160b7c2fc4687fc3299c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lian=20Raimbault?= <161456554+CelianR@users.noreply.github.com> Date: Mon, 16 Dec 2024 03:53:35 -0500 Subject: [PATCH 211/303] Worktree: Retry checkout with fetch when branch not found (#32124) --- tasks/libs/common/worktree.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/tasks/libs/common/worktree.py b/tasks/libs/common/worktree.py index e8c9d740f07bc..17e5db4abfc97 100644 --- a/tasks/libs/common/worktree.py +++ b/tasks/libs/common/worktree.py @@ -9,7 +9,7 @@ from contextlib import contextmanager from pathlib import Path -from invoke.exceptions import Exit +from invoke.exceptions import Exit, UnexpectedExit from tasks.libs.common.color import Color, color_message from tasks.libs.common.git import get_current_branch @@ -49,7 +49,18 @@ def init_env(ctx, branch: str | None = None): f"git -C '{WORKTREE_DIRECTORY}' rev-parse --abbrev-ref HEAD", hide=True ).stdout.strip() if worktree_branch != branch: - ctx.run(f"git -C '{WORKTREE_DIRECTORY}' checkout '{branch}'", hide=True) + for retry in range(2): + try: + ctx.run(f"git -C '{WORKTREE_DIRECTORY}' checkout '{branch}'", hide=True) + except UnexpectedExit as e: + if retry == 1: + raise e + else: + print( + f'{color_message("Warning", Color.ORANGE)}: Git branch not found in the local worktree folder, fetching repository', + file=sys.stderr, + ) + ctx.run(f"git -C '{WORKTREE_DIRECTORY}' fetch", hide=True) if not os.environ.get("AGENT_WORKTREE_NO_PULL"): ctx.run(f"git -C '{WORKTREE_DIRECTORY}' pull", hide=True) From fde3c5b85c546793f1899f942f9afa7e8583269b Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Mon, 16 Dec 2024 10:22:43 +0100 Subject: [PATCH 212/303] pkg/util/trivy: move containerd trivy code to separate file (#32193) --- pkg/util/trivy/trivy.go | 96 ------------------------ pkg/util/trivy/trivy_containerd.go | 116 +++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+), 96 deletions(-) create mode 100644 pkg/util/trivy/trivy_containerd.go diff --git a/pkg/util/trivy/trivy.go b/pkg/util/trivy/trivy.go index 07a15d58d93ac..5709f4d384657 100644 --- a/pkg/util/trivy/trivy.go +++ b/pkg/util/trivy/trivy.go @@ -22,13 +22,11 @@ import ( "time" "github.com/containerd/containerd/mount" - "github.com/containerd/containerd/namespaces" "github.com/DataDog/datadog-agent/comp/core/config" workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" "github.com/DataDog/datadog-agent/pkg/config/env" "github.com/DataDog/datadog-agent/pkg/sbom" - cutil "github.com/DataDog/datadog-agent/pkg/util/containerd" containersimage "github.com/DataDog/datadog-agent/pkg/util/containers/image" "github.com/DataDog/datadog-agent/pkg/util/crio" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -48,9 +46,6 @@ import ( "github.com/aquasecurity/trivy/pkg/scanner/ospkg" "github.com/aquasecurity/trivy/pkg/types" "github.com/aquasecurity/trivy/pkg/vulnerability" - "github.com/containerd/containerd" - "github.com/containerd/containerd/leases" - "github.com/containerd/errdefs" "github.com/docker/docker/client" // This is required to load sqlite based RPM databases @@ -70,9 +65,6 @@ const ( TypeImageConfigSecret = "image-config-secret" // TypeImageConfigSecret defines a history-dockerfile analyzer ) -// ContainerdAccessor is a function that should return a containerd client -type ContainerdAccessor func() (cutil.ContainerdItf, error) - // collectorConfig allows to pass configuration type collectorConfig struct { clearCacheOnClose bool @@ -317,94 +309,6 @@ func (c *Collector) scanOverlayFS(ctx context.Context, layers []string, imgMeta return report, nil } -// ScanContainerdImageFromSnapshotter scans containerd image directly from the snapshotter -func (c *Collector) ScanContainerdImageFromSnapshotter(ctx context.Context, imgMeta *workloadmeta.ContainerImageMetadata, img containerd.Image, client cutil.ContainerdItf, scanOptions sbom.ScanOptions) (sbom.Report, error) { - // Computing duration of containerd lease - deadline, _ := ctx.Deadline() - expiration := deadline.Sub(time.Now().Add(cleanupTimeout)) - clClient := client.RawClient() - imageID := imgMeta.ID - - mounts, err := client.Mounts(ctx, expiration, imgMeta.Namespace, img) - if err != nil { - return nil, fmt.Errorf("unable to get mounts for image %s, err: %w", imgMeta.ID, err) - } - - layers := extractLayersFromOverlayFSMounts(mounts) - if len(layers) == 0 { - return nil, fmt.Errorf("unable to extract layers from overlayfs mounts %+v for image %s", mounts, imgMeta.ID) - } - - ctx = namespaces.WithNamespace(ctx, imgMeta.Namespace) - // Adding a lease to cleanup dandling snaphots at expiration - ctx, done, err := clClient.WithLease(ctx, - leases.WithID(imageID), - leases.WithExpiration(expiration), - leases.WithLabels(map[string]string{ - "containerd.io/gc.ref.snapshot." + containerd.DefaultSnapshotter: imageID, - }), - ) - if err != nil && !errdefs.IsAlreadyExists(err) { - return nil, fmt.Errorf("unable to get a lease, err: %w", err) - } - - report, err := c.scanOverlayFS(ctx, layers, imgMeta, scanOptions) - - if err := done(ctx); err != nil { - log.Warnf("Unable to cancel containerd lease with id: %s, err: %v", imageID, err) - } - - return report, err -} - -// ScanContainerdImage scans containerd image by exporting it and scanning the tarball -func (c *Collector) ScanContainerdImage(ctx context.Context, imgMeta *workloadmeta.ContainerImageMetadata, img containerd.Image, client cutil.ContainerdItf, scanOptions sbom.ScanOptions) (sbom.Report, error) { - fanalImage, cleanup, err := convertContainerdImage(ctx, client.RawClient(), imgMeta, img) - if cleanup != nil { - defer cleanup() - } - if err != nil { - return nil, fmt.Errorf("unable to convert containerd image, err: %w", err) - } - - return c.scanImage(ctx, fanalImage, imgMeta, scanOptions) -} - -// ScanContainerdImageFromFilesystem scans containerd image from file-system -func (c *Collector) ScanContainerdImageFromFilesystem(ctx context.Context, imgMeta *workloadmeta.ContainerImageMetadata, img containerd.Image, client cutil.ContainerdItf, scanOptions sbom.ScanOptions) (sbom.Report, error) { - //nolint:gosimple // TODO(CINT) Fix go simple linte - imagePath, err := os.MkdirTemp(os.TempDir(), fmt.Sprintf("containerd-image-*")) - if err != nil { - return nil, fmt.Errorf("unable to create temp dir, err: %w", err) - } - defer func() { - err := os.RemoveAll(imagePath) - if err != nil { - log.Errorf("Unable to remove temp dir: %s, err: %v", imagePath, err) - } - }() - - // Computing duration of containerd lease - deadline, _ := ctx.Deadline() - expiration := deadline.Sub(time.Now().Add(cleanupTimeout)) - - cleanUp, err := client.MountImage(ctx, expiration, imgMeta.Namespace, img, imagePath) - if err != nil { - return nil, fmt.Errorf("unable to mount containerd image, err: %w", err) - } - - defer func() { - cleanUpContext, cleanUpContextCancel := context.WithTimeout(context.Background(), cleanupTimeout) - err := cleanUp(cleanUpContext) - cleanUpContextCancel() - if err != nil { - log.Errorf("Unable to clean up mounted image, err: %v", err) - } - }() - - return c.scanFilesystem(ctx, os.DirFS("/"), imagePath, imgMeta, scanOptions) -} - // ScanCRIOImageFromOverlayFS scans the CRI-O image layers using OverlayFS. func (c *Collector) ScanCRIOImageFromOverlayFS(ctx context.Context, imgMeta *workloadmeta.ContainerImageMetadata, client crio.Client, scanOptions sbom.ScanOptions) (sbom.Report, error) { lowerDirs, err := client.GetCRIOImageLayers(imgMeta) diff --git a/pkg/util/trivy/trivy_containerd.go b/pkg/util/trivy/trivy_containerd.go new file mode 100644 index 0000000000000..6611a56c217dc --- /dev/null +++ b/pkg/util/trivy/trivy_containerd.go @@ -0,0 +1,116 @@ +// 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. + +//go:build trivy && containerd + +// Package trivy holds the scan components +package trivy + +import ( + "context" + "fmt" + "os" + "time" + + workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" + "github.com/DataDog/datadog-agent/pkg/sbom" + cutil "github.com/DataDog/datadog-agent/pkg/util/containerd" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/containerd/containerd" + "github.com/containerd/containerd/leases" + "github.com/containerd/containerd/namespaces" + "github.com/containerd/errdefs" +) + +// ContainerdAccessor is a function that should return a containerd client +type ContainerdAccessor func() (cutil.ContainerdItf, error) + +// ScanContainerdImageFromSnapshotter scans containerd image directly from the snapshotter +func (c *Collector) ScanContainerdImageFromSnapshotter(ctx context.Context, imgMeta *workloadmeta.ContainerImageMetadata, img containerd.Image, client cutil.ContainerdItf, scanOptions sbom.ScanOptions) (sbom.Report, error) { + // Computing duration of containerd lease + deadline, _ := ctx.Deadline() + expiration := deadline.Sub(time.Now().Add(cleanupTimeout)) + clClient := client.RawClient() + imageID := imgMeta.ID + + mounts, err := client.Mounts(ctx, expiration, imgMeta.Namespace, img) + if err != nil { + return nil, fmt.Errorf("unable to get mounts for image %s, err: %w", imgMeta.ID, err) + } + + layers := extractLayersFromOverlayFSMounts(mounts) + if len(layers) == 0 { + return nil, fmt.Errorf("unable to extract layers from overlayfs mounts %+v for image %s", mounts, imgMeta.ID) + } + + ctx = namespaces.WithNamespace(ctx, imgMeta.Namespace) + // Adding a lease to cleanup dandling snaphots at expiration + ctx, done, err := clClient.WithLease(ctx, + leases.WithID(imageID), + leases.WithExpiration(expiration), + leases.WithLabels(map[string]string{ + "containerd.io/gc.ref.snapshot." + containerd.DefaultSnapshotter: imageID, + }), + ) + if err != nil && !errdefs.IsAlreadyExists(err) { + return nil, fmt.Errorf("unable to get a lease, err: %w", err) + } + + report, err := c.scanOverlayFS(ctx, layers, imgMeta, scanOptions) + + if err := done(ctx); err != nil { + log.Warnf("Unable to cancel containerd lease with id: %s, err: %v", imageID, err) + } + + return report, err +} + +// ScanContainerdImage scans containerd image by exporting it and scanning the tarball +func (c *Collector) ScanContainerdImage(ctx context.Context, imgMeta *workloadmeta.ContainerImageMetadata, img containerd.Image, client cutil.ContainerdItf, scanOptions sbom.ScanOptions) (sbom.Report, error) { + fanalImage, cleanup, err := convertContainerdImage(ctx, client.RawClient(), imgMeta, img) + if cleanup != nil { + defer cleanup() + } + if err != nil { + return nil, fmt.Errorf("unable to convert containerd image, err: %w", err) + } + + return c.scanImage(ctx, fanalImage, imgMeta, scanOptions) +} + +// ScanContainerdImageFromFilesystem scans containerd image from file-system +func (c *Collector) ScanContainerdImageFromFilesystem(ctx context.Context, imgMeta *workloadmeta.ContainerImageMetadata, img containerd.Image, client cutil.ContainerdItf, scanOptions sbom.ScanOptions) (sbom.Report, error) { + //nolint:gosimple // TODO(CINT) Fix go simple linte + imagePath, err := os.MkdirTemp(os.TempDir(), fmt.Sprintf("containerd-image-*")) + if err != nil { + return nil, fmt.Errorf("unable to create temp dir, err: %w", err) + } + defer func() { + err := os.RemoveAll(imagePath) + if err != nil { + log.Errorf("Unable to remove temp dir: %s, err: %v", imagePath, err) + } + }() + + // Computing duration of containerd lease + deadline, _ := ctx.Deadline() + expiration := deadline.Sub(time.Now().Add(cleanupTimeout)) + + cleanUp, err := client.MountImage(ctx, expiration, imgMeta.Namespace, img, imagePath) + if err != nil { + return nil, fmt.Errorf("unable to mount containerd image, err: %w", err) + } + + defer func() { + cleanUpContext, cleanUpContextCancel := context.WithTimeout(context.Background(), cleanupTimeout) + err := cleanUp(cleanUpContext) + cleanUpContextCancel() + if err != nil { + log.Errorf("Unable to clean up mounted image, err: %v", err) + } + }() + + return c.scanFilesystem(ctx, os.DirFS("/"), imagePath, imgMeta, scanOptions) +} From 62c501b3647c2828426d8b620c2b4f15045dabc9 Mon Sep 17 00:00:00 2001 From: Sylvain Baubeau Date: Mon, 16 Dec 2024 12:00:36 +0100 Subject: [PATCH 213/303] [CWS] Allow triggering an activity dump from CLI (#31968) --- .../subcommands/runtime/activity_dump.go | 18 +- .../subcommands/runtime/command_linux.go | 3 + .../subcommands/runtime/activity_dump.go | 17 +- .../subcommands/runtime/command_linux.go | 3 + pkg/security/agent/client.go | 7 +- .../mocks/security_module_client_wrapper.go | 18 +- .../ebpf/c/include/helpers/activity_dump.h | 41 +- pkg/security/ebpf/c/include/maps.h | 4 +- pkg/security/probe/field_handlers_ebpf.go | 7 +- pkg/security/probe/probe_ebpf.go | 26 +- pkg/security/process_list/process_list.go | 3 +- .../process_resolver/process_resolver_test.go | 3 +- pkg/security/proto/api/api.pb.go | 639 +++++++++--------- pkg/security/proto/api/api.proto | 3 + pkg/security/proto/api/api_vtproto.pb.go | 129 ++++ pkg/security/resolvers/resolvers_ebpf.go | 38 +- .../secl/model/unmarshallers_linux.go | 2 +- .../activity_tree/metadata/metadata.go | 25 +- .../metadata/metadata_proto_dec_v1.go | 3 +- .../metadata/metadata_proto_enc_v1.go | 2 +- .../security_profile/dump/activity_dump.go | 93 ++- .../security_profile/dump/load_controller.go | 1 + pkg/security/security_profile/dump/manager.go | 91 ++- .../security_profile/dump/manager_test.go | 5 +- .../tests/activity_tree_test.go | 2 +- pkg/security/tests/activity_dumps_test.go | 14 +- pkg/security/tests/cmdwrapper.go | 22 +- pkg/security/tests/main_linux.go | 14 + pkg/security/tests/main_windows.go | 7 + pkg/security/tests/module_tester_linux.go | 19 +- pkg/security/tests/security_profile_test.go | 61 +- pkg/security/tests/threat_score_test.go | 8 +- pkg/security/utils/cgroup.go | 5 +- 33 files changed, 828 insertions(+), 505 deletions(-) diff --git a/cmd/security-agent/subcommands/runtime/activity_dump.go b/cmd/security-agent/subcommands/runtime/activity_dump.go index 514cdda1bc612..35907553045fb 100644 --- a/cmd/security-agent/subcommands/runtime/activity_dump.go +++ b/cmd/security-agent/subcommands/runtime/activity_dump.go @@ -37,6 +37,7 @@ type activityDumpCliParams struct { name string containerID string + cgroupID string file string file2 string timeout string @@ -113,7 +114,13 @@ func stopCommands(globalParams *command.GlobalParams) []*cobra.Command { &cliParams.containerID, "container-id", "", - "an containerID can be used to filter the activity dump.", + "a containerID can be used to filter the activity dump.", + ) + activityDumpStopCmd.Flags().StringVar( + &cliParams.cgroupID, + "cgroup-id", + "", + "a cgroup ID can be used to filter the activity dump.", ) return []*cobra.Command{activityDumpStopCmd} @@ -157,6 +164,12 @@ func generateDumpCommands(globalParams *command.GlobalParams) []*cobra.Command { "", "a container identifier can be used to filter the activity dump from a specific container.", ) + activityDumpGenerateDumpCmd.Flags().StringVar( + &cliParams.cgroupID, + "cgroup-id", + "", + "a cgroup identifier can be used to filter the activity dump from a specific cgroup.", + ) activityDumpGenerateDumpCmd.Flags().StringVar( &cliParams.timeout, "timeout", @@ -461,6 +474,7 @@ func generateActivityDump(_ log.Component, _ config.Component, _ secrets.Compone output, err := client.GenerateActivityDump(&api.ActivityDumpParams{ ContainerID: activityDumpArgs.containerID, + CGroupID: activityDumpArgs.cgroupID, Timeout: activityDumpArgs.timeout, DifferentiateArgs: activityDumpArgs.differentiateArgs, Storage: storage, @@ -609,7 +623,7 @@ func stopActivityDump(_ log.Component, _ config.Component, _ secrets.Component, } defer client.Close() - output, err := client.StopActivityDump(activityDumpArgs.name, activityDumpArgs.containerID) + output, err := client.StopActivityDump(activityDumpArgs.name, activityDumpArgs.containerID, activityDumpArgs.cgroupID) if err != nil { return fmt.Errorf("unable to send request to system-probe: %w", err) } diff --git a/cmd/security-agent/subcommands/runtime/command_linux.go b/cmd/security-agent/subcommands/runtime/command_linux.go index 4c5a90d3167cd..a813dc82b0385 100644 --- a/cmd/security-agent/subcommands/runtime/command_linux.go +++ b/cmd/security-agent/subcommands/runtime/command_linux.go @@ -46,6 +46,9 @@ func printSecurityActivityDumpMessage(prefix string, msg *api.ActivityDumpMessag if len(msg.GetMetadata().GetContainerID()) > 0 { fmt.Printf("%s container ID: %s\n", prefix, msg.GetMetadata().GetContainerID()) } + if len(msg.GetMetadata().GetCGroupID()) > 0 { + fmt.Printf("%s cgroup ID: %s\n", prefix, msg.GetMetadata().GetCGroupID()) + } if len(msg.GetTags()) > 0 { fmt.Printf("%s tags: %s\n", prefix, strings.Join(msg.GetTags(), ", ")) } diff --git a/cmd/system-probe/subcommands/runtime/activity_dump.go b/cmd/system-probe/subcommands/runtime/activity_dump.go index 72096d1160bbd..e00d027c94d7b 100644 --- a/cmd/system-probe/subcommands/runtime/activity_dump.go +++ b/cmd/system-probe/subcommands/runtime/activity_dump.go @@ -34,6 +34,7 @@ type activityDumpCliParams struct { name string containerID string + cgroupID string file string file2 string timeout string @@ -109,7 +110,12 @@ func stopCommands(globalParams *command.GlobalParams) []*cobra.Command { "", "an containerID can be used to filter the activity dump.", ) - + activityDumpStopCmd.Flags().StringVar( + &cliParams.cgroupID, + "cgroup-id", + "", + "a cgroup ID can be used to filter the activity dump.", + ) return []*cobra.Command{activityDumpStopCmd} } @@ -151,6 +157,12 @@ func generateDumpCommands(globalParams *command.GlobalParams) []*cobra.Command { "", "a container identifier can be used to filter the activity dump from a specific container.", ) + activityDumpGenerateDumpCmd.Flags().StringVar( + &cliParams.cgroupID, + "cgroup-id", + "", + "a cgroup identifier can be used to filter the activity dump from a specific cgroup.", + ) activityDumpGenerateDumpCmd.Flags().StringVar( &cliParams.timeout, "timeout", @@ -449,6 +461,7 @@ func generateActivityDump(_ log.Component, _ config.Component, _ secrets.Compone output, err := client.GenerateActivityDump(&api.ActivityDumpParams{ ContainerID: activityDumpArgs.containerID, + CGroupID: activityDumpArgs.cgroupID, Timeout: activityDumpArgs.timeout, DifferentiateArgs: activityDumpArgs.differentiateArgs, Storage: storage, @@ -573,7 +586,7 @@ func stopActivityDump(_ log.Component, _ config.Component, _ secrets.Component, } defer client.Close() - output, err := client.StopActivityDump(activityDumpArgs.name, activityDumpArgs.containerID) + output, err := client.StopActivityDump(activityDumpArgs.name, activityDumpArgs.containerID, activityDumpArgs.cgroupID) if err != nil { return fmt.Errorf("unable to send request to system-probe: %w", err) } diff --git a/cmd/system-probe/subcommands/runtime/command_linux.go b/cmd/system-probe/subcommands/runtime/command_linux.go index 51d2a8c92dec7..1980ac0fbfb23 100644 --- a/cmd/system-probe/subcommands/runtime/command_linux.go +++ b/cmd/system-probe/subcommands/runtime/command_linux.go @@ -42,6 +42,9 @@ func printSecurityActivityDumpMessage(prefix string, msg *api.ActivityDumpMessag if len(msg.GetMetadata().GetContainerID()) > 0 { fmt.Printf("%s container ID: %s\n", prefix, msg.GetMetadata().GetContainerID()) } + if len(msg.GetMetadata().GetCGroupID()) > 0 { + fmt.Printf("%s cgroup ID: %s\n", prefix, msg.GetMetadata().GetCGroupID()) + } if len(msg.GetTags()) > 0 { fmt.Printf("%s tags: %s\n", prefix, strings.Join(msg.GetTags(), ", ")) } diff --git a/pkg/security/agent/client.go b/pkg/security/agent/client.go index 81e2cf630b549..bb0c1714bd039 100644 --- a/pkg/security/agent/client.go +++ b/pkg/security/agent/client.go @@ -35,7 +35,7 @@ type SecurityModuleClientWrapper interface { DumpProcessCache(withArgs bool, format string) (string, error) GenerateActivityDump(request *api.ActivityDumpParams) (*api.ActivityDumpMessage, error) ListActivityDumps() (*api.ActivityDumpListMessage, error) - StopActivityDump(name, containerid string) (*api.ActivityDumpStopMessage, error) + StopActivityDump(name, container, cgroup string) (*api.ActivityDumpStopMessage, error) GenerateEncoding(request *api.TranscodingRequestParams) (*api.TranscodingRequestMessage, error) DumpNetworkNamespace(snapshotInterfaces bool) (*api.DumpNetworkNamespaceMessage, error) GetConfig() (*api.SecurityConfigMessage, error) @@ -81,10 +81,11 @@ func (c *RuntimeSecurityClient) GenerateActivityDump(request *api.ActivityDumpPa } // StopActivityDump stops an active dump if it exists -func (c *RuntimeSecurityClient) StopActivityDump(name, containerid string) (*api.ActivityDumpStopMessage, error) { +func (c *RuntimeSecurityClient) StopActivityDump(name, container, cgroup string) (*api.ActivityDumpStopMessage, error) { return c.apiClient.StopActivityDump(context.Background(), &api.ActivityDumpStopParams{ Name: name, - ContainerID: containerid, + ContainerID: container, + CGroupID: cgroup, }) } diff --git a/pkg/security/agent/mocks/security_module_client_wrapper.go b/pkg/security/agent/mocks/security_module_client_wrapper.go index 227b6c2072121..c31eae478f235 100644 --- a/pkg/security/agent/mocks/security_module_client_wrapper.go +++ b/pkg/security/agent/mocks/security_module_client_wrapper.go @@ -463,9 +463,9 @@ func (_m *SecurityModuleClientWrapper) SaveSecurityProfile(name string, tag stri return r0, r1 } -// StopActivityDump provides a mock function with given fields: name, containerid -func (_m *SecurityModuleClientWrapper) StopActivityDump(name string, containerid string) (*api.ActivityDumpStopMessage, error) { - ret := _m.Called(name, containerid) +// StopActivityDump provides a mock function with given fields: name, container, cgroup +func (_m *SecurityModuleClientWrapper) StopActivityDump(name string, container string, cgroup string) (*api.ActivityDumpStopMessage, error) { + ret := _m.Called(name, container, cgroup) if len(ret) == 0 { panic("no return value specified for StopActivityDump") @@ -473,19 +473,19 @@ func (_m *SecurityModuleClientWrapper) StopActivityDump(name string, containerid var r0 *api.ActivityDumpStopMessage var r1 error - if rf, ok := ret.Get(0).(func(string, string) (*api.ActivityDumpStopMessage, error)); ok { - return rf(name, containerid) + if rf, ok := ret.Get(0).(func(string, string, string) (*api.ActivityDumpStopMessage, error)); ok { + return rf(name, container, cgroup) } - if rf, ok := ret.Get(0).(func(string, string) *api.ActivityDumpStopMessage); ok { - r0 = rf(name, containerid) + if rf, ok := ret.Get(0).(func(string, string, string) *api.ActivityDumpStopMessage); ok { + r0 = rf(name, container, cgroup) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*api.ActivityDumpStopMessage) } } - if rf, ok := ret.Get(1).(func(string, string) error); ok { - r1 = rf(name, containerid) + if rf, ok := ret.Get(1).(func(string, string, string) error); ok { + r1 = rf(name, container, cgroup) } else { r1 = ret.Error(1) } diff --git a/pkg/security/ebpf/c/include/helpers/activity_dump.h b/pkg/security/ebpf/c/include/helpers/activity_dump.h index 82ed6834e10fb..c0f8d246006bf 100644 --- a/pkg/security/ebpf/c/include/helpers/activity_dump.h +++ b/pkg/security/ebpf/c/include/helpers/activity_dump.h @@ -53,7 +53,7 @@ __attribute__((always_inline)) struct cgroup_tracing_event_t *get_cgroup_tracing return evt; } -__attribute__((always_inline)) bool reserve_traced_cgroup_spot(container_id_t cgroup, u64 now, u64 cookie, struct activity_dump_config *config) { +__attribute__((always_inline)) bool reserve_traced_cgroup_spot(struct cgroup_context_t *cgroup, u64 now, u64 cookie, struct activity_dump_config *config) { // insert dump config defaults u32 defaults_key = 0; struct activity_dump_config *defaults = bpf_map_lookup_elem(&activity_dump_config_defaults, &defaults_key); @@ -72,7 +72,9 @@ __attribute__((always_inline)) bool reserve_traced_cgroup_spot(container_id_t cg return false; } - ret = bpf_map_update_elem(&traced_cgroups, &cgroup[0], &cookie, BPF_NOEXIST); + struct path_key_t path_key; + path_key = cgroup->cgroup_file; + ret = bpf_map_update_elem(&traced_cgroups, &path_key, &cookie, BPF_NOEXIST); if (ret < 0) { // we didn't get a lock, skip this cgroup for now and go back to it later bpf_map_delete_elem(&activity_dumps_config, &cookie); @@ -80,15 +82,15 @@ __attribute__((always_inline)) bool reserve_traced_cgroup_spot(container_id_t cg } // we're tracing a new cgroup, update its wait list timeout - bpf_map_update_elem(&cgroup_wait_list, &cgroup[0], &config->wait_list_timestamp, BPF_ANY); + bpf_map_update_elem(&cgroup_wait_list, &path_key, &config->wait_list_timestamp, BPF_ANY); return true; } -__attribute__((always_inline)) u64 trace_new_cgroup(void *ctx, u64 now, container_id_t container_id, struct cgroup_context_t *cgroup) { +__attribute__((always_inline)) u64 trace_new_cgroup(void *ctx, u64 now, struct container_context_t *container) { u64 cookie = rand64(); struct activity_dump_config config = {}; - if (!reserve_traced_cgroup_spot(container_id, now, cookie, &config)) { + if (!reserve_traced_cgroup_spot(&container->cgroup_context, now, cookie, &config)) { // we're already tracing too many cgroups concurrently, ignore this one for now return 0; } @@ -100,35 +102,38 @@ __attribute__((always_inline)) u64 trace_new_cgroup(void *ctx, u64 now, containe return 0; } - if ((cgroup->cgroup_flags & 0b111) == CGROUP_MANAGER_SYSTEMD) { + if ((container->cgroup_context.cgroup_flags & 0b111) == CGROUP_MANAGER_SYSTEMD) { return 0; } - copy_container_id(container_id, evt->container.container_id); - evt->container.cgroup_context = *cgroup; + copy_container_id(container->container_id, evt->container.container_id); + evt->container.cgroup_context = container->cgroup_context; evt->cookie = cookie; evt->config = config; send_event_ptr(ctx, EVENT_CGROUP_TRACING, evt); - // return cookie return cookie; } +__attribute__((always_inline)) u64 is_cgroup_activity_dumps_supported(struct cgroup_context_t *cgroup) { + return (cgroup->cgroup_flags != 0) && ((cgroup->cgroup_flags&0b111) != CGROUP_MANAGER_SYSTEMD); +} + __attribute__((always_inline)) u64 should_trace_new_process_cgroup(void *ctx, u64 now, u32 pid, struct container_context_t *container) { // should we start tracing this cgroup ? - container_id_t container_id; - bpf_probe_read(&container_id, sizeof(container_id), &container->container_id[0]); + struct cgroup_context_t cgroup_context; + bpf_probe_read(&cgroup_context, sizeof(cgroup_context), &container->cgroup_context); - if (is_cgroup_activity_dumps_enabled() && container_id[0] != 0) { + if (is_cgroup_activity_dumps_enabled() && is_cgroup_activity_dumps_supported(&cgroup_context)) { // is this cgroup traced ? - u64 *cookie = bpf_map_lookup_elem(&traced_cgroups, &container_id[0]); + u64 *cookie = bpf_map_lookup_elem(&traced_cgroups, &cgroup_context.cgroup_file); if (cookie) { u64 cookie_val = *cookie; struct activity_dump_config *config = bpf_map_lookup_elem(&activity_dumps_config, &cookie_val); if (config == NULL) { // delete expired cgroup entry - bpf_map_delete_elem(&traced_cgroups, &container_id[0]); + bpf_map_delete_elem(&traced_cgroups, &cgroup_context.cgroup_file); return 0; } @@ -144,7 +149,7 @@ __attribute__((always_inline)) u64 should_trace_new_process_cgroup(void *ctx, u6 if (now > config->end_timestamp) { // delete expired cgroup entry - bpf_map_delete_elem(&traced_cgroups, &container_id[0]); + bpf_map_delete_elem(&traced_cgroups, &cgroup_context.cgroup_file); // delete config bpf_map_delete_elem(&activity_dumps_config, &cookie_val); return 0; @@ -156,11 +161,11 @@ __attribute__((always_inline)) u64 should_trace_new_process_cgroup(void *ctx, u6 } else { // have we seen this cgroup before ? - u64 *wait_timeout = bpf_map_lookup_elem(&cgroup_wait_list, &container_id[0]); + u64 *wait_timeout = bpf_map_lookup_elem(&cgroup_wait_list, &cgroup_context.cgroup_file); if (wait_timeout) { if (now > *wait_timeout) { // delete expired wait_list entry - bpf_map_delete_elem(&cgroup_wait_list, &container_id[0]); + bpf_map_delete_elem(&cgroup_wait_list, &cgroup_context.cgroup_file); } // this cgroup is on the wait list, do not start tracing it @@ -168,7 +173,7 @@ __attribute__((always_inline)) u64 should_trace_new_process_cgroup(void *ctx, u6 } // can we start tracing this cgroup ? - u64 cookie_val = trace_new_cgroup(ctx, now, container_id, &container->cgroup_context); + u64 cookie_val = trace_new_cgroup(ctx, now, container); if (cookie_val == 0) { return 0; } diff --git a/pkg/security/ebpf/c/include/maps.h b/pkg/security/ebpf/c/include/maps.h index 2019c630c6f4c..d6ab3ceb74dfb 100644 --- a/pkg/security/ebpf/c/include/maps.h +++ b/pkg/security/ebpf/c/include/maps.h @@ -29,8 +29,8 @@ BPF_ARRAY_MAP(syscall_ctx, char[MAX_SYSCALL_CTX_SIZE], MAX_SYSCALL_CTX_ENTRIES) BPF_HASH_MAP(activity_dumps_config, u64, struct activity_dump_config, 1) // max entries will be overridden at runtime BPF_HASH_MAP(activity_dump_config_defaults, u32, struct activity_dump_config, 1) -BPF_HASH_MAP(traced_cgroups, container_id_t, u64, 1) // max entries will be overridden at runtime -BPF_HASH_MAP(cgroup_wait_list, container_id_t, u64, 1) // max entries will be overridden at runtime +BPF_HASH_MAP(traced_cgroups, struct path_key_t, u64, 1) // max entries will be overridden at runtime +BPF_HASH_MAP(cgroup_wait_list, struct path_key_t, u64, 1) // max entries will be overridden at runtime BPF_HASH_MAP(traced_pids, u32, u64, 8192) // max entries will be overridden at runtime BPF_HASH_MAP(basename_approvers, struct basename_t, struct event_mask_filter_t, 255) BPF_HASH_MAP(register_netdevice_cache, u64, struct register_netdevice_cache_t, 1024) diff --git a/pkg/security/probe/field_handlers_ebpf.go b/pkg/security/probe/field_handlers_ebpf.go index 36acd3a33d5a2..b76b70a76b833 100644 --- a/pkg/security/probe/field_handlers_ebpf.go +++ b/pkg/security/probe/field_handlers_ebpf.go @@ -20,7 +20,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/resolvers" sprocess "github.com/DataDog/datadog-agent/pkg/security/resolvers/process" "github.com/DataDog/datadog-agent/pkg/security/secl/containerutils" - "github.com/DataDog/datadog-agent/pkg/security/seclog" "github.com/DataDog/datadog-agent/pkg/security/secl/args" "github.com/DataDog/datadog-agent/pkg/security/secl/model" @@ -516,11 +515,9 @@ func (fh *EBPFFieldHandlers) ResolveCGroupID(ev *model.Event, e *model.CGroupCon return string(entry.CGroup.CGroupID) } - if err := fh.resolvers.ResolveCGroup(entry, e.CGroupFile, e.CGroupFlags); err != nil { - seclog.Debugf("Failed to resolve cgroup: %s", err) + if cgroupContext, err := fh.resolvers.ResolveCGroupContext(e.CGroupFile, e.CGroupFlags); err == nil { + *e = *cgroupContext } - - e.CGroupID = entry.CGroup.CGroupID } } diff --git a/pkg/security/probe/probe_ebpf.go b/pkg/security/probe/probe_ebpf.go index ca55fb768bd5f..f06cbe8fa45ae 100644 --- a/pkg/security/probe/probe_ebpf.go +++ b/pkg/security/probe/probe_ebpf.go @@ -818,7 +818,18 @@ func (p *EBPFProbe) handleEvent(CPU int, data []byte) { return } - p.profileManagers.activityDumpManager.HandleCGroupTracingEvent(&event.CgroupTracing) + if cgroupContext, err := p.Resolvers.ResolveCGroupContext(event.CgroupTracing.CGroupContext.CGroupFile, containerutils.CGroupFlags(event.CgroupTracing.CGroupContext.CGroupFlags)); err != nil { + seclog.Debugf("Failed to resolve cgroup: %s", err) + } else { + event.CgroupTracing.CGroupContext = *cgroupContext + if cgroupContext.CGroupFlags.IsContainer() { + containerID, _ := containerutils.FindContainerID(cgroupContext.CGroupID) + event.CgroupTracing.ContainerContext.ContainerID = containerID + } + + p.profileManagers.activityDumpManager.HandleCGroupTracingEvent(&event.CgroupTracing) + } + return case model.CgroupWriteEventType: if _, err = event.CgroupWrite.UnmarshalBinary(data[offset:]); err != nil { @@ -828,10 +839,21 @@ func (p *EBPFProbe) handleEvent(CPU int, data []byte) { pce := p.Resolvers.ProcessResolver.Resolve(event.CgroupWrite.Pid, event.CgroupWrite.Pid, 0, false, newEntryCb) if pce != nil { - if err := p.Resolvers.ResolveCGroup(pce, event.CgroupWrite.File.PathKey, containerutils.CGroupFlags(event.CgroupWrite.CGroupFlags)); err != nil { + cgroupContext, err := p.Resolvers.ResolveCGroupContext(event.CgroupWrite.File.PathKey, containerutils.CGroupFlags(event.CgroupWrite.CGroupFlags)) + if err != nil { seclog.Debugf("Failed to resolve cgroup: %s", err) + } else { + pce.Process.CGroup = *cgroupContext + pce.CGroup = *cgroupContext + + if cgroupContext.CGroupFlags.IsContainer() { + containerID, _ := containerutils.FindContainerID(cgroupContext.CGroupID) + pce.ContainerID = containerID + pce.Process.ContainerID = containerID + } } } + return case model.UnshareMountNsEventType: if _, err = event.UnshareMountNS.UnmarshalBinary(data[offset:]); err != nil { diff --git a/pkg/security/process_list/process_list.go b/pkg/security/process_list/process_list.go index 1fdb4a80bd70b..64c76705a553f 100644 --- a/pkg/security/process_list/process_list.go +++ b/pkg/security/process_list/process_list.go @@ -14,9 +14,8 @@ import ( "io" "sync" - cgroupModel "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup/model" - "github.com/DataDog/datadog-agent/pkg/process/procutil" + cgroupModel "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup/model" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-go/v5/statsd" "golang.org/x/exp/slices" diff --git a/pkg/security/process_list/process_resolver/process_resolver_test.go b/pkg/security/process_list/process_resolver/process_resolver_test.go index 600e0c03bc8a9..1c062c45c0f99 100644 --- a/pkg/security/process_list/process_resolver/process_resolver_test.go +++ b/pkg/security/process_list/process_resolver/process_resolver_test.go @@ -141,7 +141,8 @@ func isProcessOrExecPresent(pl *processlist.ProcessList, pc *ProcessResolver, ev func TestFork1st(t *testing.T) { pc := NewProcessResolver() - processList := processlist.NewProcessList(cgroupModel.WorkloadSelector{Image: "*", Tag: "*"}, + selector, _ := cgroupModel.NewWorkloadSelector("*", "*") + processList := processlist.NewProcessList(selector, []model.EventType{model.ExecEventType, model.ForkEventType, model.ExitEventType}, pc /* ,nil */, nil, nil) stats := testStats{} diff --git a/pkg/security/proto/api/api.pb.go b/pkg/security/proto/api/api.pb.go index 60cc167d246f9..e8fd80f24c5c8 100644 --- a/pkg/security/proto/api/api.pb.go +++ b/pkg/security/proto/api/api.pb.go @@ -1594,6 +1594,7 @@ type ActivityDumpParams struct { DifferentiateArgs bool `protobuf:"varint,2,opt,name=DifferentiateArgs,proto3" json:"DifferentiateArgs,omitempty"` Storage *StorageRequestParams `protobuf:"bytes,3,opt,name=Storage,proto3" json:"Storage,omitempty"` ContainerID string `protobuf:"bytes,4,opt,name=ContainerID,proto3" json:"ContainerID,omitempty"` + CGroupID string `protobuf:"bytes,5,opt,name=CGroupID,proto3" json:"CGroupID,omitempty"` } func (x *ActivityDumpParams) Reset() { @@ -1656,6 +1657,13 @@ func (x *ActivityDumpParams) GetContainerID() string { return "" } +func (x *ActivityDumpParams) GetCGroupID() string { + if x != nil { + return x.CGroupID + } + return "" +} + type MetadataMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1676,6 +1684,7 @@ type MetadataMessage struct { Timeout string `protobuf:"bytes,12,opt,name=Timeout,proto3" json:"Timeout,omitempty"` Size uint64 `protobuf:"varint,13,opt,name=Size,proto3" json:"Size,omitempty"` Serialization string `protobuf:"bytes,14,opt,name=Serialization,proto3" json:"Serialization,omitempty"` + CGroupID string `protobuf:"bytes,15,opt,name=CGroupID,proto3" json:"CGroupID,omitempty"` } func (x *MetadataMessage) Reset() { @@ -1809,6 +1818,13 @@ func (x *MetadataMessage) GetSerialization() string { return "" } +func (x *MetadataMessage) GetCGroupID() string { + if x != nil { + return x.CGroupID + } + return "" +} + type StorageRequestMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2091,6 +2107,7 @@ type ActivityDumpStopParams struct { Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"` ContainerID string `protobuf:"bytes,2,opt,name=ContainerID,proto3" json:"ContainerID,omitempty"` + CGroupID string `protobuf:"bytes,3,opt,name=CGroupID,proto3" json:"CGroupID,omitempty"` } func (x *ActivityDumpStopParams) Reset() { @@ -2139,6 +2156,13 @@ func (x *ActivityDumpStopParams) GetContainerID() string { return "" } +func (x *ActivityDumpStopParams) GetCGroupID() string { + if x != nil { + return x.CGroupID + } + return "" +} + type ActivityDumpStopMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3298,7 +3322,7 @@ var file_pkg_security_proto_api_api_proto_rawDesc = []byte{ 0x0a, 0x18, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, - 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xb3, 0x01, 0x0a, 0x12, 0x41, + 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xcf, 0x01, 0x0a, 0x12, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x44, @@ -3310,312 +3334,317 @@ var file_pkg_security_proto_api_api_proto_rawDesc = []byte{ 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, - 0x22, 0xcf, 0x03, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x4b, 0x65, - 0x72, 0x6e, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x2c, 0x0a, 0x11, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x4c, 0x69, 0x6e, - 0x75, 0x78, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x41, 0x72, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x41, 0x72, - 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x2c, 0x0a, 0x11, 0x44, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x74, - 0x65, 0x41, 0x72, 0x67, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x44, 0x69, 0x66, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x41, 0x72, 0x67, 0x73, 0x12, 0x16, - 0x0a, 0x04, 0x43, 0x6f, 0x6d, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, - 0x52, 0x04, 0x43, 0x6f, 0x6d, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x49, 0x44, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, - 0x0a, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0d, - 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x79, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x70, 0x72, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x43, 0x6f, - 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x69, 0x6c, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x22, 0xbe, 0x02, - 0x0a, 0x13, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x48, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, - 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x54, 0x61, 0x67, 0x73, 0x12, - 0x34, 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, 0x0a, - 0x08, 0x44, 0x4e, 0x53, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x08, 0x44, 0x4e, 0x53, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x05, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x54, 0x72, 0x65, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x22, 0x18, - 0x0a, 0x16, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x4c, 0x69, - 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x5f, 0x0a, 0x17, 0x41, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x44, 0x75, 0x6d, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x44, 0x75, 0x6d, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x44, 0x75, - 0x6d, 0x70, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x16, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x6f, 0x70, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x43, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x22, 0x2f, 0x0a, 0x17, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x6f, 0x70, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x7b, 0x0a, 0x18, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x10, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x46, 0x69, - 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x07, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x22, 0x67, 0x0a, 0x19, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x34, 0x0a, 0x07, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x22, 0x1a, 0x0a, 0x18, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x5d, 0x0a, 0x19, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x44, 0x75, 0x6d, - 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, - 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x04, 0x44, 0x75, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x3f, 0x0a, 0x17, 0x57, - 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x61, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x54, 0x61, 0x67, 0x22, 0x87, 0x01, 0x0a, - 0x1b, 0x4c, 0x61, 0x73, 0x74, 0x41, 0x6e, 0x6f, 0x6d, 0x61, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2c, 0x0a, 0x11, 0x49, 0x73, 0x53, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x11, 0x49, 0x73, 0x53, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x47, 0x0a, 0x0f, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x54, - 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x54, 0x61, 0x67, 0x73, 0x22, - 0xec, 0x01, 0x0a, 0x18, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x54, 0x72, 0x65, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x11, - 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x46, 0x69, - 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0e, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x4e, 0x53, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x44, 0x4e, 0x53, 0x4e, 0x6f, - 0x64, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x53, 0x6f, 0x63, 0x6b, - 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x10, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, - 0x61, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x41, - 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x6e, - 0x0a, 0x10, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x61, 0x6e, 0x6f, 0x6d, 0x61, - 0x6c, 0x79, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6c, - 0x61, 0x73, 0x74, 0x41, 0x6e, 0x6f, 0x6d, 0x61, 0x6c, 0x79, 0x4e, 0x61, 0x6e, 0x6f, 0x12, 0x2e, - 0x0a, 0x13, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x9b, - 0x02, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x66, 0x69, - 0x72, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, - 0x73, 0x65, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, - 0x53, 0x65, 0x65, 0x6e, 0x12, 0x58, 0x0a, 0x10, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, - 0x67, 0x73, 0x1a, 0x58, 0x0a, 0x13, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa0, 0x06, 0x0a, - 0x16, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4c, 0x6f, 0x61, 0x64, 0x65, - 0x64, 0x49, 0x6e, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x49, 0x6e, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x12, - 0x38, 0x0a, 0x17, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x49, 0x6e, 0x4b, 0x65, 0x72, 0x6e, 0x65, - 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x17, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x49, 0x6e, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x38, 0x0a, 0x08, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, - 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x0d, 0x4c, 0x61, 0x73, - 0x74, 0x41, 0x6e, 0x6f, 0x6d, 0x61, 0x6c, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x41, 0x6e, 0x6f, 0x6d, 0x61, - 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x4c, 0x61, 0x73, 0x74, 0x41, 0x6e, 0x6f, 0x6d, - 0x61, 0x6c, 0x69, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x09, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x09, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x06, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x04, 0x54, 0x61, 0x67, 0x73, 0x18, 0x0b, 0x20, - 0x03, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x04, 0x54, 0x61, 0x67, 0x73, 0x12, 0x33, 0x0a, - 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x54, 0x72, 0x65, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x47, 0x6c, 0x6f, - 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x5b, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x1a, - 0x5e, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x3f, 0x0a, 0x19, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x22, 0x0a, 0x0c, - 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0c, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, - 0x22, 0x6b, 0x0a, 0x1a, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, - 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x55, 0x0a, - 0x19, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x53, 0x61, 0x76, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x38, 0x0a, 0x08, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x22, 0x46, 0x0a, 0x1a, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x32, 0x8a, 0x0a, 0x0a, - 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, - 0x3f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x13, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, - 0x12, 0x57, 0x0a, 0x10, 0x44, 0x75, 0x6d, 0x70, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x75, 0x6d, 0x70, 0x50, - 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x44, 0x75, 0x6d, 0x70, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x09, 0x47, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1a, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x30, 0x0a, 0x09, 0x47, 0x65, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x0b, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x4b, 0x0a, 0x0b, - 0x52, 0x75, 0x6e, 0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x52, 0x75, 0x6e, 0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x1a, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x10, 0x47, 0x65, 0x74, - 0x52, 0x75, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1b, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x22, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, - 0x12, 0x4f, 0x0a, 0x0e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, - 0x65, 0x73, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x20, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x00, 0x12, 0x5b, 0x0a, 0x14, 0x44, 0x75, 0x6d, 0x70, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x44, 0x75, 0x6d, 0x70, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x44, 0x75, 0x6d, 0x70, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x49, - 0x0a, 0x0e, 0x44, 0x75, 0x6d, 0x70, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x65, 0x72, 0x73, - 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x75, 0x6d, 0x70, 0x44, 0x69, 0x73, 0x63, 0x61, - 0x72, 0x64, 0x65, 0x72, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1a, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x44, 0x75, 0x6d, 0x70, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x65, 0x72, 0x73, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0c, 0x44, 0x75, 0x6d, - 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x44, 0x75, 0x6d, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x50, - 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, - 0x6d, 0x70, 0x73, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, + 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x43, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x22, 0xeb, 0x03, 0x0a, + 0x0f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x22, 0x0a, 0x0c, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x4b, + 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x11, + 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x44, 0x69, + 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x41, 0x72, + 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x41, 0x72, 0x63, 0x68, 0x12, 0x12, + 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x11, + 0x44, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x41, 0x72, 0x67, + 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x44, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x41, 0x72, 0x67, 0x73, 0x12, 0x16, 0x0a, 0x04, 0x43, 0x6f, + 0x6d, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x04, 0x43, 0x6f, + 0x6d, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, + 0x44, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x54, 0x69, + 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x54, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x04, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x43, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x43, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x22, 0x79, 0x0a, 0x15, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, + 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x46, 0x69, 0x6c, 0x65, 0x22, 0xbe, 0x02, 0x0a, 0x13, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, + 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x48, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x48, 0x6f, 0x73, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x04, 0x54, 0x61, 0x67, 0x73, 0x12, 0x34, 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, + 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x14, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x44, 0x4e, 0x53, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x44, 0x4e, 0x53, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x12, 0x33, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x54, + 0x72, 0x65, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, - 0x75, 0x6d, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, - 0x12, 0x4f, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x44, 0x75, 0x6d, 0x70, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x6f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x44, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x6f, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, - 0x00, 0x12, 0x55, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, + 0x22, 0x5f, 0x0a, 0x17, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, + 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x44, + 0x75, 0x6d, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x44, 0x75, 0x6d, 0x70, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x6a, 0x0a, 0x16, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, + 0x70, 0x53, 0x74, 0x6f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, + 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x43, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x44, 0x22, 0x2f, 0x0a, + 0x17, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x6f, + 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x7b, + 0x0a, 0x18, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x41, 0x63, + 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, + 0x6d, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x52, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x22, 0x67, 0x0a, 0x19, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x34, + 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, - 0x75, 0x6d, 0x70, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x22, 0x00, 0x30, 0x01, 0x12, 0x59, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1f, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, - 0x58, 0x0a, 0x13, 0x53, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x42, 0x18, 0x5a, 0x16, 0x70, 0x6b, 0x67, - 0x2f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x22, 0x5d, 0x0a, 0x19, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, + 0x04, 0x44, 0x75, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x04, 0x44, 0x75, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x44, + 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, + 0x3f, 0x0a, 0x17, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x54, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x54, 0x61, 0x67, + 0x22, 0x87, 0x01, 0x0a, 0x1b, 0x4c, 0x61, 0x73, 0x74, 0x41, 0x6e, 0x6f, 0x6d, 0x61, 0x6c, 0x79, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2c, 0x0a, 0x11, + 0x49, 0x73, 0x53, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x49, 0x73, 0x53, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x47, 0x0a, 0x0f, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x12, + 0x12, 0x0a, 0x04, 0x54, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x54, + 0x61, 0x67, 0x73, 0x22, 0xec, 0x01, 0x0a, 0x18, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, + 0x54, 0x72, 0x65, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x2c, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x73, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x50, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, + 0x0a, 0x0e, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x46, 0x69, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, + 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x44, 0x4e, 0x53, 0x4e, 0x6f, 0x64, + 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x44, + 0x4e, 0x53, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x10, + 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4e, 0x6f, + 0x64, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x41, 0x70, 0x70, 0x72, + 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0f, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x22, 0x6e, 0x0a, 0x10, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x61, + 0x6e, 0x6f, 0x6d, 0x61, 0x6c, 0x79, 0x5f, 0x6e, 0x61, 0x6e, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x41, 0x6e, 0x6f, 0x6d, 0x61, 0x6c, 0x79, 0x4e, 0x61, + 0x6e, 0x6f, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x11, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x22, 0x9b, 0x02, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6c, + 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x58, 0x0a, 0x10, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x1a, 0x58, 0x0a, 0x13, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xa0, 0x06, 0x0a, 0x16, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x4c, + 0x6f, 0x61, 0x64, 0x65, 0x64, 0x49, 0x6e, 0x4b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0e, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x49, 0x6e, 0x4b, 0x65, 0x72, + 0x6e, 0x65, 0x6c, 0x12, 0x38, 0x0a, 0x17, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x49, 0x6e, 0x4b, + 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x49, 0x6e, 0x4b, 0x65, + 0x72, 0x6e, 0x65, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x38, 0x0a, + 0x08, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0a, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x4a, 0x0a, + 0x0d, 0x4c, 0x61, 0x73, 0x74, 0x41, 0x6e, 0x6f, 0x6d, 0x61, 0x6c, 0x69, 0x65, 0x73, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x41, + 0x6e, 0x6f, 0x6d, 0x61, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x4c, 0x61, 0x73, 0x74, + 0x41, 0x6e, 0x6f, 0x6d, 0x61, 0x6c, 0x69, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x09, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x09, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1a, 0x0a, + 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, + 0x01, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x07, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x04, 0x54, 0x61, 0x67, + 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x04, 0x54, 0x61, 0x67, + 0x73, 0x12, 0x33, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x54, + 0x72, 0x65, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x12, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x47, 0x6c, 0x6f, 0x62, 0x61, + 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x5b, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x30, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x73, 0x1a, 0x5e, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x3f, 0x0a, 0x19, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x22, 0x6b, 0x0a, 0x1a, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x08, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x55, 0x0a, 0x19, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x38, + 0x0a, 0x08, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x46, 0x0a, 0x1a, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, + 0x46, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x46, 0x69, 0x6c, 0x65, + 0x32, 0x8a, 0x0a, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x00, 0x30, 0x01, 0x12, 0x57, 0x0a, 0x10, 0x44, 0x75, 0x6d, 0x70, 0x50, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, + 0x75, 0x6d, 0x70, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, 0x75, + 0x72, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, + 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x30, + 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x1a, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, + 0x12, 0x4b, 0x0a, 0x0b, 0x52, 0x75, 0x6e, 0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, 0x74, 0x12, + 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x75, 0x6e, 0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, + 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x53, 0x65, 0x6c, 0x66, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, + 0x10, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x53, + 0x65, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x22, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x75, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x6c, + 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x73, 0x1a, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x14, 0x44, 0x75, 0x6d, 0x70, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x44, 0x75, 0x6d, 0x70, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x20, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x75, 0x6d, 0x70, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0e, 0x44, 0x75, 0x6d, 0x70, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, + 0x64, 0x65, 0x72, 0x73, 0x12, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x75, 0x6d, 0x70, 0x44, + 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x65, 0x72, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, + 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x75, 0x6d, 0x70, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, + 0x64, 0x65, 0x72, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, + 0x0c, 0x44, 0x75, 0x6d, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x17, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x00, 0x12, 0x50, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, + 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x73, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, + 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x6f, 0x70, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x6f, 0x70, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x6f, + 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x15, + 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x69, 0x74, 0x79, 0x44, 0x75, 0x6d, 0x70, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x59, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, + 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, + 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x13, 0x53, 0x61, 0x76, 0x65, 0x53, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x53, 0x61, 0x76, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x53, 0x61, 0x76, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x42, 0x18, 0x5a, + 0x16, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/security/proto/api/api.proto b/pkg/security/proto/api/api.proto index dc3e16fecb4b2..7032834f238c3 100644 --- a/pkg/security/proto/api/api.proto +++ b/pkg/security/proto/api/api.proto @@ -147,6 +147,7 @@ message ActivityDumpParams { bool DifferentiateArgs = 2; StorageRequestParams Storage = 3; string ContainerID = 4; + string CGroupID = 5; } message MetadataMessage { @@ -165,6 +166,7 @@ message MetadataMessage { string Timeout = 12; uint64 Size = 13; string Serialization = 14; + string CGroupID = 15; } message StorageRequestMessage { @@ -196,6 +198,7 @@ message ActivityDumpListMessage { message ActivityDumpStopParams { string Name = 1; string ContainerID = 2; + string CGroupID = 3; } message ActivityDumpStopMessage { diff --git a/pkg/security/proto/api/api_vtproto.pb.go b/pkg/security/proto/api/api_vtproto.pb.go index 462ad4782938c..8ebccda5994a0 100644 --- a/pkg/security/proto/api/api_vtproto.pb.go +++ b/pkg/security/proto/api/api_vtproto.pb.go @@ -1468,6 +1468,13 @@ func (m *ActivityDumpParams) MarshalToSizedBufferVT(dAtA []byte) (int, error) { i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if len(m.CGroupID) > 0 { + i -= len(m.CGroupID) + copy(dAtA[i:], m.CGroupID) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.CGroupID))) + i-- + dAtA[i] = 0x2a + } if len(m.ContainerID) > 0 { i -= len(m.ContainerID) copy(dAtA[i:], m.ContainerID) @@ -1535,6 +1542,13 @@ func (m *MetadataMessage) MarshalToSizedBufferVT(dAtA []byte) (int, error) { i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if len(m.CGroupID) > 0 { + i -= len(m.CGroupID) + copy(dAtA[i:], m.CGroupID) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.CGroupID))) + i-- + dAtA[i] = 0x7a + } if len(m.Serialization) > 0 { i -= len(m.Serialization) copy(dAtA[i:], m.Serialization) @@ -1927,6 +1941,13 @@ func (m *ActivityDumpStopParams) MarshalToSizedBufferVT(dAtA []byte) (int, error i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if len(m.CGroupID) > 0 { + i -= len(m.CGroupID) + copy(dAtA[i:], m.CGroupID) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.CGroupID))) + i-- + dAtA[i] = 0x1a + } if len(m.ContainerID) > 0 { i -= len(m.ContainerID) copy(dAtA[i:], m.ContainerID) @@ -3396,6 +3417,10 @@ func (m *ActivityDumpParams) SizeVT() (n int) { if l > 0 { n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } + l = len(m.CGroupID) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } n += len(m.unknownFields) return n } @@ -3460,6 +3485,10 @@ func (m *MetadataMessage) SizeVT() (n int) { if l > 0 { n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } + l = len(m.CGroupID) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } n += len(m.unknownFields) return n } @@ -3585,6 +3614,10 @@ func (m *ActivityDumpStopParams) SizeVT() (n int) { if l > 0 { n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } + l = len(m.CGroupID) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } n += len(m.unknownFields) return n } @@ -7212,6 +7245,38 @@ func (m *ActivityDumpParams) UnmarshalVT(dAtA []byte) error { } m.ContainerID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CGroupID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CGroupID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := protohelpers.Skip(dAtA[iNdEx:]) @@ -7686,6 +7751,38 @@ func (m *MetadataMessage) UnmarshalVT(dAtA []byte) error { } m.Serialization = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CGroupID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CGroupID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := protohelpers.Skip(dAtA[iNdEx:]) @@ -8485,6 +8582,38 @@ func (m *ActivityDumpStopParams) UnmarshalVT(dAtA []byte) error { } m.ContainerID = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CGroupID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CGroupID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := protohelpers.Skip(dAtA[iNdEx:]) diff --git a/pkg/security/resolvers/resolvers_ebpf.go b/pkg/security/resolvers/resolvers_ebpf.go index 91e1392502840..b8899bbd99adf 100644 --- a/pkg/security/resolvers/resolvers_ebpf.go +++ b/pkg/security/resolvers/resolvers_ebpf.go @@ -217,35 +217,25 @@ func (r *EBPFResolvers) Start(ctx context.Context) error { return r.NamespaceResolver.Start(ctx) } -// ResolveCGroup resolves the path of cgroup for a process cache entry -func (r *EBPFResolvers) ResolveCGroup(pce *model.ProcessCacheEntry, pathKey model.PathKey, cgroupFlags containerutils.CGroupFlags) error { +// ResolveCGroupContext resolves the cgroup context from a cgroup path key +func (r *EBPFResolvers) ResolveCGroupContext(pathKey model.PathKey, cgroupFlags containerutils.CGroupFlags) (*model.CGroupContext, error) { path, err := r.DentryResolver.Resolve(pathKey, true) - if err == nil && path != "" { - cgroup := filepath.Dir(string(path)) - if cgroup == "/" { - cgroup = path - } - - cgroupFlags := containerutils.CGroupFlags(cgroupFlags) - cgroupContext := model.CGroupContext{ - CGroupID: containerutils.CGroupID(cgroup), - CGroupFlags: containerutils.CGroupFlags(cgroupFlags), - CGroupFile: pathKey, - } + if err != nil { + return nil, fmt.Errorf("failed to resolve cgroup file %v: %w", pathKey, err) + } - pce.Process.CGroup = cgroupContext - pce.CGroup = cgroupContext + cgroup := filepath.Dir(string(path)) + if cgroup == "/" { + cgroup = path + } - if cgroupFlags.IsContainer() { - containerID, _ := containerutils.FindContainerID(cgroupContext.CGroupID) - pce.ContainerID = containerID - pce.Process.ContainerID = containerID - } - } else { - return fmt.Errorf("failed to resolve cgroup file %v: %w", pathKey, err) + cgroupContext := &model.CGroupContext{ + CGroupID: containerutils.CGroupID(cgroup), + CGroupFlags: containerutils.CGroupFlags(cgroupFlags), + CGroupFile: pathKey, } - return nil + return cgroupContext, nil } // Snapshot collects data on the current state of the system to populate user space and kernel space caches. diff --git a/pkg/security/secl/model/unmarshallers_linux.go b/pkg/security/secl/model/unmarshallers_linux.go index d6bdfb32fa825..7c38d3127e1ba 100644 --- a/pkg/security/secl/model/unmarshallers_linux.go +++ b/pkg/security/secl/model/unmarshallers_linux.go @@ -972,7 +972,7 @@ func (e *CgroupTracingEvent) UnmarshalBinary(data []byte) (int, error) { } cursor := read - read, err = UnmarshalBinary(data, &e.CGroupContext) + read, err = UnmarshalBinary(data[cursor:], &e.CGroupContext) if err != nil { return 0, err } diff --git a/pkg/security/security_profile/activity_tree/metadata/metadata.go b/pkg/security/security_profile/activity_tree/metadata/metadata.go index 2e9ea31a3da09..882e7fb69f5c0 100644 --- a/pkg/security/security_profile/activity_tree/metadata/metadata.go +++ b/pkg/security/security_profile/activity_tree/metadata/metadata.go @@ -8,7 +8,12 @@ // Package metadata holds metadata related files package metadata -import "time" +import ( + "time" + + "github.com/DataDog/datadog-agent/pkg/security/secl/containerutils" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" +) // Metadata is used to provide context about the activity dump or the profile type Metadata struct { @@ -18,13 +23,13 @@ type Metadata struct { LinuxDistribution string `json:"linux_distribution"` Arch string `json:"arch"` - Name string `json:"name"` - ProtobufVersion string `json:"protobuf_version"` - DifferentiateArgs bool `json:"differentiate_args"` - ContainerID string `json:"-"` - ContainerFlags uint64 `json:"-"` - Start time.Time `json:"start"` - End time.Time `json:"end"` - Size uint64 `json:"activity_dump_size,omitempty"` - Serialization string `json:"serialization,omitempty"` + Name string `json:"name"` + ProtobufVersion string `json:"protobuf_version"` + DifferentiateArgs bool `json:"differentiate_args"` + ContainerID containerutils.ContainerID `json:"-"` + CGroupContext model.CGroupContext `json:"-"` + Start time.Time `json:"start"` + End time.Time `json:"end"` + Size uint64 `json:"activity_dump_size,omitempty"` + Serialization string `json:"serialization,omitempty"` } diff --git a/pkg/security/security_profile/activity_tree/metadata/metadata_proto_dec_v1.go b/pkg/security/security_profile/activity_tree/metadata/metadata_proto_dec_v1.go index 6f1f8ad0588f1..e08f483efac61 100644 --- a/pkg/security/security_profile/activity_tree/metadata/metadata_proto_dec_v1.go +++ b/pkg/security/security_profile/activity_tree/metadata/metadata_proto_dec_v1.go @@ -11,6 +11,7 @@ package metadata import ( adproto "github.com/DataDog/agent-payload/v5/cws/dumpsv1" + "github.com/DataDog/datadog-agent/pkg/security/secl/containerutils" activity_tree "github.com/DataDog/datadog-agent/pkg/security/security_profile/activity_tree" ) @@ -30,7 +31,7 @@ func ProtoMetadataToMetadata(meta *adproto.Metadata) Metadata { Name: meta.Name, ProtobufVersion: meta.ProtobufVersion, DifferentiateArgs: meta.DifferentiateArgs, - ContainerID: meta.ContainerId, + ContainerID: containerutils.ContainerID(meta.ContainerId), Start: activity_tree.ProtoDecodeTimestamp(meta.Start), End: activity_tree.ProtoDecodeTimestamp(meta.End), Size: meta.Size, diff --git a/pkg/security/security_profile/activity_tree/metadata/metadata_proto_enc_v1.go b/pkg/security/security_profile/activity_tree/metadata/metadata_proto_enc_v1.go index 2b02ef4004720..e28b2ce901c63 100644 --- a/pkg/security/security_profile/activity_tree/metadata/metadata_proto_enc_v1.go +++ b/pkg/security/security_profile/activity_tree/metadata/metadata_proto_enc_v1.go @@ -29,7 +29,7 @@ func ToProto(meta *Metadata) *adproto.Metadata { Name: meta.Name, ProtobufVersion: meta.ProtobufVersion, DifferentiateArgs: meta.DifferentiateArgs, - ContainerId: meta.ContainerID, + ContainerId: string(meta.ContainerID), Start: activity_tree.TimestampToProto(&meta.Start), End: activity_tree.TimestampToProto(&meta.End), Size: meta.Size, diff --git a/pkg/security/security_profile/dump/activity_dump.go b/pkg/security/security_profile/dump/activity_dump.go index 80d1bb2ebe011..4df6a218cebe3 100644 --- a/pkg/security/security_profile/dump/activity_dump.go +++ b/pkg/security/security_profile/dump/activity_dump.go @@ -222,11 +222,14 @@ func NewActivityDumpFromMessage(msg *api.ActivityDumpMessage) (*ActivityDump, er Name: metadata.GetName(), ProtobufVersion: metadata.GetProtobufVersion(), DifferentiateArgs: metadata.GetDifferentiateArgs(), - ContainerID: metadata.GetContainerID(), - Start: startTime, - End: startTime.Add(timeout), - Size: metadata.GetSize(), - Arch: metadata.GetArch(), + ContainerID: containerutils.ContainerID(metadata.GetContainerID()), + CGroupContext: model.CGroupContext{ + CGroupID: containerutils.CGroupID(metadata.GetCGroupID()), + }, + Start: startTime, + End: startTime.Add(timeout), + Size: metadata.GetSize(), + Arch: metadata.GetArch(), } ad.LoadConfig = NewActivityDumpLoadConfig( []model.EventType{}, @@ -265,14 +268,26 @@ func (ad *ActivityDump) GetWorkloadSelector() *cgroupModel.WorkloadSelector { if ad.selector != nil && ad.selector.IsReady() { return ad.selector } - imageTag := utils.GetTagValue("image_tag", ad.Tags) - selector, err := cgroupModel.NewWorkloadSelector(utils.GetTagValue("image_name", ad.Tags), imageTag) - if err != nil { - return nil + + var selector cgroupModel.WorkloadSelector + var err error + if ad.ContainerID != "" { + imageTag := utils.GetTagValue("image_tag", ad.Tags) + selector, err = cgroupModel.NewWorkloadSelector(utils.GetTagValue("image_name", ad.Tags), imageTag) + if err != nil { + return nil + } + } else if ad.CGroupContext.CGroupID != "" { + selector, err = cgroupModel.NewWorkloadSelector(utils.GetTagValue("service", ad.Tags), utils.GetTagValue("version", ad.Tags)) + if err != nil { + return nil + } + } + ad.selector = &selector - // Once per workload, when tags are resolved and the firs time we successfully get the selector, tag all the existing nodes - ad.ActivityTree.TagAllNodes(imageTag) + // Once per workload, when tags are resolved and the first time we successfully get the selector, tag all the existing nodes + ad.ActivityTree.TagAllNodes(selector.Image) return ad.selector } @@ -354,7 +369,7 @@ func (ad *ActivityDump) nameMatches(name string) bool { } // containerIDMatches returns true if the ActivityDump container ID matches the provided container ID -func (ad *ActivityDump) containerIDMatches(containerID string) bool { +func (ad *ActivityDump) containerIDMatches(containerID containerutils.ContainerID) bool { return ad.Metadata.ContainerID == containerID } @@ -365,7 +380,13 @@ func (ad *ActivityDump) MatchesSelector(entry *model.ProcessCacheEntry) bool { } if len(ad.Metadata.ContainerID) > 0 { - if !ad.containerIDMatches(string(entry.ContainerID)) { + if !ad.containerIDMatches(entry.ContainerID) { + return false + } + } + + if len(ad.Metadata.CGroupContext.CGroupID) > 0 { + if entry.CGroup.CGroupID != ad.Metadata.CGroupContext.CGroupID { return false } } @@ -395,13 +416,13 @@ func (ad *ActivityDump) enable() error { } } - if len(ad.Metadata.ContainerID) > 0 { + if !ad.Metadata.CGroupContext.CGroupFile.IsNull() { // insert container ID in traced_cgroups map (it might already exist, do not update in that case) - if err := ad.adm.tracedCgroupsMap.Update(ad.Metadata.ContainerID, ad.LoadConfigCookie, ebpf.UpdateNoExist); err != nil { + if err := ad.adm.tracedCgroupsMap.Update(ad.Metadata.CGroupContext.CGroupFile, ad.LoadConfigCookie, ebpf.UpdateNoExist); err != nil { if !errors.Is(err, ebpf.ErrKeyExist) { // delete activity dump load config _ = ad.adm.activityDumpsConfigMap.Delete(ad.LoadConfigCookie) - return fmt.Errorf("couldn't push activity dump container ID %s: %w", ad.Metadata.ContainerID, err) + return fmt.Errorf("couldn't push activity dump cgroup ID %s: %w", ad.Metadata.CGroupContext.CGroupID, err) } } } @@ -448,12 +469,10 @@ func (ad *ActivityDump) disable() error { } // remove container ID from kernel space - if len(ad.Metadata.ContainerID) > 0 { - containerIDB := make([]byte, model.ContainerIDLen) - copy(containerIDB, ad.Metadata.ContainerID) - err := ad.adm.tracedCgroupsMap.Delete(containerIDB) + if !ad.Metadata.CGroupContext.CGroupFile.IsNull() { + err := ad.adm.tracedCgroupsMap.Delete(ad.Metadata.CGroupContext.CGroupFile) if err != nil && !errors.Is(err, ebpf.ErrKeyNotExist) { - return fmt.Errorf("couldn't delete activity dump filter containerID(%s): %v", ad.Metadata.ContainerID, err) + return fmt.Errorf("couldn't delete activity dump filter cgroup %s: %v", ad.Metadata.CGroupContext.CGroupID, err) } } return nil @@ -575,6 +594,9 @@ func (ad *ActivityDump) getSelectorStr() string { if len(ad.Metadata.ContainerID) > 0 { tags = append(tags, fmt.Sprintf("container_id:%s", ad.Metadata.ContainerID)) } + if len(ad.Metadata.CGroupContext.CGroupID) > 0 { + tags = append(tags, fmt.Sprintf("cgroup_id:%s", ad.Metadata.CGroupContext.CGroupID)) + } if len(ad.Tags) > 0 { for _, tag := range ad.Tags { if !strings.HasPrefix(tag, "container_id") { @@ -614,6 +636,8 @@ func (ad *ActivityDump) ResolveTags() error { return ad.resolveTags() } +const systemdSystemDir = "/usr/lib/systemd/system" + // resolveTags thread unsafe version ot ResolveTags func (ad *ActivityDump) resolveTags() error { selector := ad.GetWorkloadSelector() @@ -621,10 +645,26 @@ func (ad *ActivityDump) resolveTags() error { return nil } - var err error - ad.Tags, err = ad.adm.resolvers.TagsResolver.ResolveWithErr(containerutils.ContainerID(ad.Metadata.ContainerID)) - if err != nil { - return fmt.Errorf("failed to resolve %s: %w", ad.Metadata.ContainerID, err) + if len(ad.Metadata.ContainerID) > 0 { + var err error + if ad.Tags, err = ad.adm.resolvers.TagsResolver.ResolveWithErr(containerutils.ContainerID(ad.Metadata.ContainerID)); err != nil { + return fmt.Errorf("failed to resolve %s: %w", ad.Metadata.ContainerID, err) + } + } else if len(ad.Metadata.CGroupContext.CGroupID) > 0 { + systemdService := filepath.Base(string(ad.Metadata.CGroupContext.CGroupID)) + serviceVersion := "" + servicePath := filepath.Join(systemdSystemDir, systemdService) + + if ad.adm.resolvers.SBOMResolver != nil { + if pkg := ad.adm.resolvers.SBOMResolver.ResolvePackage("", &model.FileEvent{PathnameStr: servicePath}); pkg != nil { + serviceVersion = pkg.Version + } + } + + ad.Tags = []string{ + "service:" + systemdService, + "version:" + serviceVersion, + } } return nil @@ -655,7 +695,8 @@ func (ad *ActivityDump) ToSecurityActivityDumpMessage() *api.ActivityDumpMessage Name: ad.Metadata.Name, ProtobufVersion: ad.Metadata.ProtobufVersion, DifferentiateArgs: ad.Metadata.DifferentiateArgs, - ContainerID: ad.Metadata.ContainerID, + ContainerID: string(ad.Metadata.ContainerID), + CGroupID: string(ad.Metadata.CGroupContext.CGroupID), Start: ad.Metadata.Start.Format(time.RFC822), Timeout: ad.LoadConfig.Timeout.String(), Size: ad.Metadata.Size, diff --git a/pkg/security/security_profile/dump/load_controller.go b/pkg/security/security_profile/dump/load_controller.go index 3d0148f168232..ae8767bcfd153 100644 --- a/pkg/security/security_profile/dump/load_controller.go +++ b/pkg/security/security_profile/dump/load_controller.go @@ -85,6 +85,7 @@ func (lc *ActivityDumpLoadController) PushCurrentConfig() error { func (lc *ActivityDumpLoadController) NextPartialDump(ad *ActivityDump) *ActivityDump { newDump := NewActivityDump(ad.adm) newDump.Metadata.ContainerID = ad.Metadata.ContainerID + newDump.Metadata.CGroupContext = ad.Metadata.CGroupContext newDump.Metadata.DifferentiateArgs = ad.Metadata.DifferentiateArgs newDump.Tags = ad.Tags newDump.selector = ad.selector diff --git a/pkg/security/security_profile/dump/manager.go b/pkg/security/security_profile/dump/manager.go index b37a2c7264f1a..d06600ed81bca 100644 --- a/pkg/security/security_profile/dump/manager.go +++ b/pkg/security/security_profile/dump/manager.go @@ -35,6 +35,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/resolvers" cgroupModel "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup/model" "github.com/DataDog/datadog-agent/pkg/security/resolvers/tags" + "github.com/DataDog/datadog-agent/pkg/security/secl/containerutils" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/seclog" activity_tree "github.com/DataDog/datadog-agent/pkg/security/security_profile/activity_tree" @@ -70,7 +71,7 @@ type ActivityDumpManager struct { tracedCgroupsMap *ebpf.Map cgroupWaitList *ebpf.Map activityDumpsConfigMap *ebpf.Map - ignoreFromSnapshot map[string]bool + ignoreFromSnapshot map[model.PathKey]bool dumpLimiter *lru.Cache[cgroupModel.WorkloadSelector, *atomic.Uint64] workloadDenyList []cgroupModel.WorkloadSelector @@ -148,13 +149,13 @@ func (adm *ActivityDumpManager) cleanup() { // cleanup cgroup_wait_list map iterator := adm.cgroupWaitList.Iterate() - containerIDB := make([]byte, model.ContainerIDLen) + cgroupFile := make([]byte, model.PathKeySize) var timestamp uint64 - for iterator.Next(&containerIDB, ×tamp) { + for iterator.Next(&cgroupFile, ×tamp) { if time.Now().After(adm.resolvers.TimeResolver.ResolveMonotonicTimestamp(timestamp)) { - if err := adm.cgroupWaitList.Delete(&containerIDB); err != nil { - seclog.Errorf("couldn't delete cgroup_wait_list entry for (%s): %v", string(containerIDB), err) + if err := adm.cgroupWaitList.Delete(&cgroupFile); err != nil { + seclog.Errorf("couldn't delete cgroup_wait_list entry for (%v): %v", cgroupFile, err) } } } @@ -170,7 +171,7 @@ func (adm *ActivityDumpManager) getExpiredDumps() []*ActivityDump { for _, ad := range adm.activeDumps { if time.Now().After(ad.Metadata.End) || ad.state == Stopped { expiredDumps = append(expiredDumps, ad) - delete(adm.ignoreFromSnapshot, ad.Metadata.ContainerID) + delete(adm.ignoreFromSnapshot, ad.Metadata.CGroupContext.CGroupFile) } else { newDumps = append(newDumps, ad) } @@ -304,7 +305,7 @@ func NewActivityDumpManager(config *config.Config, statsdClient statsd.ClientInt cgroupWaitList: cgroupWaitList, activityDumpsConfigMap: activityDumpsConfigMap, snapshotQueue: make(chan *ActivityDump, 100), - ignoreFromSnapshot: make(map[string]bool), + ignoreFromSnapshot: make(map[model.PathKey]bool), dumpLimiter: limiter, workloadDenyList: denyList, workloadDenyListHits: atomic.NewUint64(0), @@ -360,19 +361,35 @@ func (adm *ActivityDumpManager) insertActivityDump(newDump *ActivityDump) error for _, ad := range adm.activeDumps { if ad.Metadata.ContainerID == newDump.Metadata.ContainerID { // an activity dump is already active for this container ID, ignore - return nil + return fmt.Errorf("dump for container %s already running", ad.Metadata.ContainerID) } } } - // enable the new dump to start collecting events from kernel space - if err := newDump.enable(); err != nil { - return fmt.Errorf("couldn't insert new dump: %w", err) + if len(newDump.Metadata.CGroupContext.CGroupID) > 0 { + // check if the provided container ID is new + for _, ad := range adm.activeDumps { + if ad.Metadata.CGroupContext.CGroupID == newDump.Metadata.CGroupContext.CGroupID { + // an activity dump is already active for this container ID, ignore + return fmt.Errorf("dump for cgroup %s already running", ad.Metadata.CGroupContext.CGroupID) + } + } } // loop through the process cache entry tree and push traced pids if necessary pces := adm.newProcessCacheEntrySearcher(newDump) - adm.resolvers.ProcessResolver.Walk(pces.SearchTracedProcessCacheEntry) + adm.resolvers.ProcessResolver.Walk(func(entry *model.ProcessCacheEntry) { + if !pces.ad.MatchesSelector(entry) { + return + } + pces.ad.Metadata.CGroupContext = entry.CGroup + pces.SearchTracedProcessCacheEntry(entry) + }) + + // enable the new dump to start collecting events from kernel space + if err := newDump.enable(); err != nil { + return fmt.Errorf("couldn't insert new dump: %w", err) + } // Delay the activity dump snapshot to reduce the overhead on the main goroutine select { @@ -391,10 +408,10 @@ func (adm *ActivityDumpManager) insertActivityDump(newDump *ActivityDump) error } // handleDefaultDumpRequest starts dumping a new workload with the provided load configuration and the default dump configuration -func (adm *ActivityDumpManager) startDumpWithConfig(containerID string, containerFlags, cookie uint64, loadConfig model.ActivityDumpLoadConfig) error { +func (adm *ActivityDumpManager) startDumpWithConfig(containerID containerutils.ContainerID, cgroupContext model.CGroupContext, cookie uint64, loadConfig model.ActivityDumpLoadConfig) error { newDump := NewActivityDump(adm, func(ad *ActivityDump) { ad.Metadata.ContainerID = containerID - ad.Metadata.ContainerFlags = containerFlags + ad.Metadata.CGroupContext = cgroupContext ad.SetLoadConfig(cookie, loadConfig) if adm.config.RuntimeSecurity.ActivityDumpCgroupDifferentiateArgs { @@ -437,7 +454,7 @@ func (adm *ActivityDumpManager) HandleCGroupTracingEvent(event *model.CgroupTrac return } - if err := adm.startDumpWithConfig(string(event.ContainerContext.ContainerID), uint64(event.CGroupContext.CGroupFlags), event.ConfigCookie, event.Config); err != nil { + if err := adm.startDumpWithConfig(event.ContainerContext.ContainerID, event.CGroupContext, event.ConfigCookie, event.Config); err != nil { seclog.Warnf("%v", err) } } @@ -497,7 +514,7 @@ workloadLoop: } // if we're still here, we can start tracing this workload - if err := adm.startDumpWithConfig(string(workloads[0].ContainerID), uint64(workloads[0].CGroupFlags), utils.NewCookie(), *adm.loadController.getDefaultLoadConfig()); err != nil { + if err := adm.startDumpWithConfig(workloads[0].ContainerID, workloads[0].CGroupContext, utils.NewCookie(), *adm.loadController.getDefaultLoadConfig()); err != nil { if !errors.Is(err, unix.E2BIG) { seclog.Debugf("%v", err) break @@ -523,11 +540,18 @@ func (adm *ActivityDumpManager) ListActivityDumps(_ *api.ActivityDumpListParams) // DumpActivity handles an activity dump request func (adm *ActivityDumpManager) DumpActivity(params *api.ActivityDumpParams) (*api.ActivityDumpMessage, error) { + if params.GetContainerID() == "" && params.GetCGroupID() == "" { + errMsg := fmt.Errorf("you must specify one selector between containerID and cgroupID") + return &api.ActivityDumpMessage{Error: errMsg.Error()}, errMsg + } + adm.Lock() defer adm.Unlock() newDump := NewActivityDump(adm, func(ad *ActivityDump) { - ad.Metadata.ContainerID = params.GetContainerID() + ad.Metadata.ContainerID = containerutils.ContainerID(params.GetContainerID()) + ad.Metadata.CGroupContext.CGroupID = containerutils.CGroupID(params.GetCGroupID()) + dumpDuration, _ := time.ParseDuration(params.Timeout) ad.SetTimeout(dumpDuration) @@ -560,15 +584,16 @@ func (adm *ActivityDumpManager) StopActivityDump(params *api.ActivityDumpStopPar adm.Lock() defer adm.Unlock() - if params.GetName() == "" && params.GetContainerID() == "" { - errMsg := fmt.Errorf("you must specify one selector between name and containerID") + if params.GetName() == "" && params.GetContainerID() == "" && params.GetCGroupID() == "" { + errMsg := fmt.Errorf("you must specify one selector between name, containerID and cgroupID") return &api.ActivityDumpStopMessage{Error: errMsg.Error()}, errMsg } toDelete := -1 for i, d := range adm.activeDumps { if (params.GetName() != "" && d.nameMatches(params.GetName())) || - (params.GetContainerID() != "" && d.containerIDMatches(params.GetContainerID())) { + (params.GetContainerID() != "" && d.containerIDMatches(containerutils.ContainerID(params.GetContainerID())) || + (params.GetCGroupID() != "" && string(d.Metadata.CGroupContext.CGroupID) == params.GetCGroupID())) { d.Finalize(true) seclog.Infof("tracing stopped for [%s]", d.GetSelectorStr()) toDelete = i @@ -593,8 +618,10 @@ func (adm *ActivityDumpManager) StopActivityDump(params *api.ActivityDumpStopPar var errMsg error if params.GetName() != "" { errMsg = fmt.Errorf("the activity dump manager does not contain any ActivityDump with the following name: %s", params.GetName()) - } else /* if params.GetContainerID() != "" */ { + } else if params.GetContainerID() != "" { errMsg = fmt.Errorf("the activity dump manager does not contain any ActivityDump with the following containerID: %s", params.GetContainerID()) + } else /* if params.GetCGroupID() != "" */ { + errMsg = fmt.Errorf("the activity dump manager does not contain any ActivityDump with the following cgroup ID: %s", params.GetCGroupID()) } return &api.ActivityDumpStopMessage{Error: errMsg.Error()}, errMsg } @@ -786,13 +813,14 @@ func (adm *ActivityDumpManager) SendStats() error { func (adm *ActivityDumpManager) SnapshotTracedCgroups() { var err error var event model.CgroupTracingEvent - containerIDB := make([]byte, model.ContainerIDLen) + var cgroupFile model.PathKey + iterator := adm.tracedCgroupsMap.Iterate() seclog.Infof("snapshotting traced_cgroups map") - for iterator.Next(&containerIDB, &event.ConfigCookie) { + for iterator.Next(&cgroupFile, &event.ConfigCookie) { adm.Lock() - if adm.ignoreFromSnapshot[string(containerIDB)] { + if adm.ignoreFromSnapshot[cgroupFile] { adm.Unlock() continue } @@ -800,15 +828,8 @@ func (adm *ActivityDumpManager) SnapshotTracedCgroups() { if err = adm.activityDumpsConfigMap.Lookup(&event.ConfigCookie, &event.Config); err != nil { // this config doesn't exist anymore, remove expired entries - seclog.Errorf("config not found for (%s): %v", string(containerIDB), err) - _ = adm.tracedCgroupsMap.Delete(containerIDB) - continue - } - - if _, err = event.ContainerContext.UnmarshalBinary(containerIDB[:]); err != nil { - seclog.Errorf("couldn't unmarshal container ID from traced_cgroups key: %v", err) - // remove invalid entry - _ = adm.tracedCgroupsMap.Delete(containerIDB) + seclog.Errorf("config not found for (%v): %v", cgroupFile, err) + _ = adm.tracedCgroupsMap.Delete(cgroupFile) continue } @@ -879,7 +900,7 @@ func (adm *ActivityDumpManager) triggerLoadController() { } // remove container ID from the map of ignored container IDs for the snapshot - delete(adm.ignoreFromSnapshot, ad.Metadata.ContainerID) + delete(adm.ignoreFromSnapshot, ad.Metadata.CGroupContext.CGroupFile) adm.Unlock() } } @@ -902,7 +923,7 @@ func (adm *ActivityDumpManager) getOverweightDumps() []*ActivityDump { if dumpSize >= int64(adm.config.RuntimeSecurity.ActivityDumpMaxDumpSize()) { toDelete = append([]int{i}, toDelete...) dumps = append(dumps, ad) - adm.ignoreFromSnapshot[ad.Metadata.ContainerID] = true + adm.ignoreFromSnapshot[ad.Metadata.CGroupContext.CGroupFile] = true } } for _, i := range toDelete { diff --git a/pkg/security/security_profile/dump/manager_test.go b/pkg/security/security_profile/dump/manager_test.go index f16d599230fd6..d7075b4d62f42 100644 --- a/pkg/security/security_profile/dump/manager_test.go +++ b/pkg/security/security_profile/dump/manager_test.go @@ -17,6 +17,7 @@ import ( "github.com/DataDog/datadog-go/v5/statsd" "github.com/DataDog/datadog-agent/pkg/security/config" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" activity_tree "github.com/DataDog/datadog-agent/pkg/security/security_profile/activity_tree" mtdt "github.com/DataDog/datadog-agent/pkg/security/security_profile/activity_tree/metadata" ) @@ -197,7 +198,7 @@ func TestActivityDumpManager_getExpiredDumps(t *testing.T) { adm := &ActivityDumpManager{ activeDumps: tt.fields.activeDumps, - ignoreFromSnapshot: make(map[string]bool), + ignoreFromSnapshot: make(map[model.PathKey]bool), } expiredDumps := adm.getExpiredDumps() @@ -474,7 +475,7 @@ func TestActivityDumpManager_getOverweightDumps(t *testing.T) { }, }, statsdClient: &statsd.NoOpClient{}, - ignoreFromSnapshot: make(map[string]bool), + ignoreFromSnapshot: make(map[model.PathKey]bool), } compareListOfDumps(t, adm.getOverweightDumps(), tt.overweightDumps) diff --git a/pkg/security/security_profile/tests/activity_tree_test.go b/pkg/security/security_profile/tests/activity_tree_test.go index a814932f385fd..7f100d75c18d1 100644 --- a/pkg/security/security_profile/tests/activity_tree_test.go +++ b/pkg/security/security_profile/tests/activity_tree_test.go @@ -687,7 +687,7 @@ func TestActivityTree_CreateProcessNode(t *testing.T) { if tt == dumpTree { dump := dump.NewEmptyActivityDump(nil) - dump.Metadata.ContainerID = contID + dump.Metadata.ContainerID = containerutils.ContainerID(contID) at = dump.ActivityTree } else /* profileTree */ { profile := profile.NewSecurityProfile(cgroupModel.WorkloadSelector{Image: "image", Tag: "tag"}, []model.EventType{model.ExecEventType, model.DNSEventType}, nil) diff --git a/pkg/security/tests/activity_dumps_test.go b/pkg/security/tests/activity_dumps_test.go index 0046251a969bd..07189c9a8d2ba 100644 --- a/pkg/security/tests/activity_dumps_test.go +++ b/pkg/security/tests/activity_dumps_test.go @@ -93,7 +93,7 @@ func TestActivityDumps(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -134,7 +134,7 @@ func TestActivityDumps(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -211,7 +211,7 @@ func TestActivityDumps(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -256,7 +256,7 @@ func TestActivityDumps(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -295,7 +295,7 @@ func TestActivityDumps(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -338,7 +338,7 @@ func TestActivityDumps(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -394,7 +394,7 @@ func TestActivityDumps(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } diff --git a/pkg/security/tests/cmdwrapper.go b/pkg/security/tests/cmdwrapper.go index 1d25a6b4a7664..ca91fb42dd9ec 100644 --- a/pkg/security/tests/cmdwrapper.go +++ b/pkg/security/tests/cmdwrapper.go @@ -11,6 +11,7 @@ package tests import ( "fmt" "os/exec" + "strconv" "strings" "testing" @@ -78,8 +79,10 @@ type dockerCmdWrapper struct { executable string mountSrc string mountDest string + pid int64 containerName string containerID string + cgroupID string image string } @@ -101,9 +104,24 @@ func (d *dockerCmdWrapper) start() ([]byte, error) { d.containerName = fmt.Sprintf("docker-wrapper-%s", utils.RandString(6)) cmd := exec.Command(d.executable, "run", "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined", "--rm", "--cap-add", "NET_ADMIN", "-d", "--name", d.containerName, "-v", d.mountSrc+":"+d.mountDest, d.image, "sleep", "1200") out, err := cmd.CombinedOutput() - if err == nil { - d.containerID = strings.TrimSpace(string(out)) + if err != nil { + return nil, err + } + + d.containerID = strings.TrimSpace(string(out)) + + cmd = exec.Command(d.executable, "inspect", "--format", "{{ .State.Pid }}", d.containerID) + out, err = cmd.CombinedOutput() + if err != nil { + return nil, err + } + + d.pid, _ = strconv.ParseInt(strings.TrimSpace(string(out)), 10, 64) + + if d.cgroupID, err = getPIDCGroup(uint32(d.pid)); err != nil { + return nil, err } + return out, err } diff --git a/pkg/security/tests/main_linux.go b/pkg/security/tests/main_linux.go index c64b83fbc917d..bea7537bf4f91 100644 --- a/pkg/security/tests/main_linux.go +++ b/pkg/security/tests/main_linux.go @@ -129,6 +129,20 @@ func SkipIfNotAvailable(t *testing.T) { } } +// getPIDCGroup returns the path of the first cgroup found for a PID +func getPIDCGroup(pid uint32) (string, error) { + cgroups, err := utils.GetProcControlGroups(pid, pid) + if err != nil { + return "", err + } + + if len(cgroups) == 0 { + return "", fmt.Errorf("failed to find cgroup for pid %d", pid) + } + + return cgroups[0].Path, nil +} + func preTestsHook() { if trace { args := slices.DeleteFunc(os.Args, func(arg string) bool { diff --git a/pkg/security/tests/main_windows.go b/pkg/security/tests/main_windows.go index 945126ae6c59c..4cc1f88754218 100644 --- a/pkg/security/tests/main_windows.go +++ b/pkg/security/tests/main_windows.go @@ -8,6 +8,13 @@ // Package tests holds tests related files package tests +import "errors" + +// getPIDCGroup returns the path of the first cgroup found for a PID +func getPIDCGroup(pid uint32) (string, error) { + return "", errors.New("cgroups are not supported on Windows") +} + func preTestsHook() {} func postTestsHook() {} diff --git a/pkg/security/tests/module_tester_linux.go b/pkg/security/tests/module_tester_linux.go index 54d262fdf599d..37a54cf6fee5b 100644 --- a/pkg/security/tests/module_tester_linux.go +++ b/pkg/security/tests/module_tester_linux.go @@ -43,6 +43,7 @@ import ( cgroupModel "github.com/DataDog/datadog-agent/pkg/security/resolvers/cgroup/model" rulesmodule "github.com/DataDog/datadog-agent/pkg/security/rules" "github.com/DataDog/datadog-agent/pkg/security/rules/bundled" + "github.com/DataDog/datadog-agent/pkg/security/secl/containerutils" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" activity_tree "github.com/DataDog/datadog-agent/pkg/security/security_profile/activity_tree" @@ -1124,7 +1125,7 @@ func checkNetworkCompatibility(tb testing.TB) { }) } -func (tm *testModule) StopActivityDump(name, containerID string) error { +func (tm *testModule) StopActivityDump(name string) error { p, ok := tm.probe.PlatformProbe.(*sprobe.EBPFProbe) if !ok { return errors.New("not supported") @@ -1135,8 +1136,7 @@ func (tm *testModule) StopActivityDump(name, containerID string) error { return errors.New("no manager") } params := &api.ActivityDumpStopParams{ - Name: name, - ContainerID: containerID, + Name: name, } _, err := managers.StopActivityDump(params) if err != nil { @@ -1147,7 +1147,8 @@ func (tm *testModule) StopActivityDump(name, containerID string) error { type activityDumpIdentifier struct { Name string - ContainerID string + ContainerID containerutils.ContainerID + CGroupID containerutils.CGroupID Timeout string OutputFiles []string } @@ -1182,7 +1183,8 @@ func (tm *testModule) ListActivityDumps() ([]*activityDumpIdentifier, error) { dumps = append(dumps, &activityDumpIdentifier{ Name: dump.Metadata.Name, - ContainerID: dump.Metadata.ContainerID, + ContainerID: containerutils.ContainerID(dump.Metadata.ContainerID), + CGroupID: containerutils.CGroupID(dump.Metadata.CGroupID), Timeout: dump.Metadata.Timeout, OutputFiles: files, }) @@ -1252,6 +1254,7 @@ func (tm *testModule) StartADocker() (*dockerCmdWrapper, error) { } time.Sleep(1 * time.Second) // a quick sleep to ensure the dump has started + return docker, nil } @@ -1260,7 +1263,7 @@ func (tm *testModule) GetDumpFromDocker(dockerInstance *dockerCmdWrapper) (*acti if err != nil { return nil, err } - dump := findLearningContainerID(dumps, dockerInstance.containerID) + dump := findLearningContainerID(dumps, containerutils.ContainerID(dockerInstance.containerID)) if dump == nil { return nil, errors.New("ContainerID not found on activity dump list") } @@ -1281,7 +1284,7 @@ func (tm *testModule) StartADockerGetDump() (*dockerCmdWrapper, *activityDumpIde } //nolint:deadcode,unused -func findLearningContainerID(dumps []*activityDumpIdentifier, containerID string) *activityDumpIdentifier { +func findLearningContainerID(dumps []*activityDumpIdentifier, containerID containerutils.ContainerID) *activityDumpIdentifier { for _, dump := range dumps { if dump.ContainerID == containerID { return dump @@ -1538,7 +1541,7 @@ func (tm *testModule) StopAllActivityDumps() error { return nil } for _, dump := range dumps { - _ = tm.StopActivityDump(dump.Name, "") + _ = tm.StopActivityDump(dump.Name) } dumps, err = tm.ListActivityDumps() if err != nil { diff --git a/pkg/security/tests/security_profile_test.go b/pkg/security/tests/security_profile_test.go index 1c814ea196f5c..01faf63d61ed5 100644 --- a/pkg/security/tests/security_profile_test.go +++ b/pkg/security/tests/security_profile_test.go @@ -87,7 +87,7 @@ func TestSecurityProfile(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -97,7 +97,8 @@ func TestSecurityProfile(t *testing.T) { if sp.Metadata.Name != dump.Name { t.Errorf("Profile name %s != %s\n", sp.Metadata.Name, dump.Name) } - if sp.Metadata.ContainerID != dump.ContainerID { + if (sp.Metadata.ContainerID != dump.ContainerID) && + (sp.Metadata.CGroupContext.CGroupID != dump.CGroupID) { t.Errorf("Profile containerID %s != %s\n", sp.Metadata.ContainerID, dump.ContainerID) } @@ -105,7 +106,7 @@ func TestSecurityProfile(t *testing.T) { if ctx == nil { t.Errorf("No profile context found!") } else { - if !slices.Contains(ctx.Tags, "container_id:"+dump.ContainerID) { + if !slices.Contains(ctx.Tags, "container_id:"+string(dump.ContainerID)) { t.Errorf("Profile did not contains container_id tag: %v\n", ctx.Tags) } if !slices.Contains(ctx.Tags, "image_tag:latest") { @@ -140,7 +141,7 @@ func TestSecurityProfile(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -179,7 +180,7 @@ func TestSecurityProfile(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -267,7 +268,7 @@ func TestAnomalyDetection(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -299,7 +300,7 @@ func TestAnomalyDetection(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -332,7 +333,7 @@ func TestAnomalyDetection(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -368,7 +369,7 @@ func TestAnomalyDetection(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -443,7 +444,7 @@ func TestAnomalyDetectionWarmup(t *testing.T) { cmd.CombinedOutput() time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -605,7 +606,7 @@ func TestSecurityProfileReinsertionPeriod(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -639,7 +640,7 @@ func TestSecurityProfileReinsertionPeriod(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -669,7 +670,7 @@ func TestSecurityProfileReinsertionPeriod(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -706,7 +707,7 @@ func TestSecurityProfileReinsertionPeriod(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -840,7 +841,7 @@ func TestSecurityProfileAutoSuppression(t *testing.T) { } }) - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -981,7 +982,7 @@ func TestSecurityProfileDifferentiateArgs(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -1078,7 +1079,7 @@ func TestSecurityProfileLifeCycleExecs(t *testing.T) { t.Fatal(err) } - dockerInstanceV1, err := test.StartADocker() + dockerInstanceV1, dump, err := test.StartADockerGetDump() if err != nil { t.Fatal(err) } @@ -1091,7 +1092,7 @@ func TestSecurityProfileLifeCycleExecs(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump("", dockerInstanceV1.containerID) + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -1252,7 +1253,7 @@ func TestSecurityProfileLifeCycleDNS(t *testing.T) { t.Fatal(err) } - dockerInstanceV1, err := test.StartADocker() + dockerInstanceV1, dump, err := test.StartADockerGetDump() if err != nil { t.Fatal(err) } @@ -1265,7 +1266,7 @@ func TestSecurityProfileLifeCycleDNS(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump("", dockerInstanceV1.containerID) + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -1425,7 +1426,7 @@ func TestSecurityProfileLifeCycleSyscall(t *testing.T) { t.Fatal(err) } - dockerInstanceV1, err := test.StartADocker() + dockerInstanceV1, dump, err := test.StartADockerGetDump() if err != nil { t.Fatal(err) } @@ -1438,7 +1439,7 @@ func TestSecurityProfileLifeCycleSyscall(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events be added to the dump - err = test.StopActivityDump("", dockerInstanceV1.containerID) + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -1614,7 +1615,7 @@ func TestSecurityProfileLifeCycleEvictionProcess(t *testing.T) { t.Fatal(err) } - dockerInstanceV1, err := test.StartADocker() + dockerInstanceV1, dump, err := test.StartADockerGetDump() if err != nil { t.Fatal(err) } @@ -1627,7 +1628,7 @@ func TestSecurityProfileLifeCycleEvictionProcess(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump("", dockerInstanceV1.containerID) + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -1792,7 +1793,7 @@ func TestSecurityProfileLifeCycleEvictionDNS(t *testing.T) { t.Fatal(err) } - dockerInstanceV1, err := test.StartADocker() + dockerInstanceV1, dump, err := test.StartADockerGetDump() if err != nil { t.Fatal(err) } @@ -1805,7 +1806,7 @@ func TestSecurityProfileLifeCycleEvictionDNS(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump("", dockerInstanceV1.containerID) + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -1970,7 +1971,7 @@ func TestSecurityProfileLifeCycleEvictionProcessUnstable(t *testing.T) { t.Fatal(err) } - dockerInstanceV1, err := test.StartADocker() + dockerInstanceV1, dump, err := test.StartADockerGetDump() if err != nil { t.Fatal(err) } @@ -1983,7 +1984,7 @@ func TestSecurityProfileLifeCycleEvictionProcessUnstable(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump("", dockerInstanceV1.containerID) + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -2148,13 +2149,13 @@ func TestSecurityProfilePersistence(t *testing.T) { } defer test.Close() - dockerInstance1, err := test.StartADocker() + dockerInstance1, dump, err := test.StartADockerGetDump() if err != nil { t.Fatal(err) } defer dockerInstance1.stop() - err = test.StopActivityDump("", dockerInstance1.containerID) + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } diff --git a/pkg/security/tests/threat_score_test.go b/pkg/security/tests/threat_score_test.go index 2256847bc5f86..13d11ddc52451 100644 --- a/pkg/security/tests/threat_score_test.go +++ b/pkg/security/tests/threat_score_test.go @@ -100,7 +100,7 @@ func TestActivityDumpsThreatScore(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -150,7 +150,7 @@ func TestActivityDumpsThreatScore(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -191,7 +191,7 @@ func TestActivityDumpsThreatScore(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } @@ -236,7 +236,7 @@ func TestActivityDumpsThreatScore(t *testing.T) { } time.Sleep(1 * time.Second) // a quick sleep to let events to be added to the dump - err = test.StopActivityDump(dump.Name, "") + err = test.StopActivityDump(dump.Name) if err != nil { t.Fatal(err) } diff --git a/pkg/security/utils/cgroup.go b/pkg/security/utils/cgroup.go index b4a3de192d7de..5dbbb97c58af1 100644 --- a/pkg/security/utils/cgroup.go +++ b/pkg/security/utils/cgroup.go @@ -90,9 +90,10 @@ func GetProcContainerContext(tgid, pid uint32) (containerutils.ContainerID, mode return "", model.CGroupContext{}, err } - containerID, runtime := cgroups[0].GetContainerContext() + lastCgroup := len(cgroups) - 1 + containerID, runtime := cgroups[lastCgroup].GetContainerContext() cgroupContext := model.CGroupContext{ - CGroupID: containerutils.CGroupID(cgroups[0].Path), + CGroupID: containerutils.CGroupID(cgroups[lastCgroup].Path), CGroupFlags: runtime, } From 38f5a7745492575b4121c96d4880673c7dd01ad3 Mon Sep 17 00:00:00 2001 From: pducolin <45568537+pducolin@users.noreply.github.com> Date: Mon, 16 Dec 2024 12:00:42 +0100 Subject: [PATCH 214/303] [new-e2e] Bump dependencies (#32171) Co-authored-by: dependabot[bot] --- comp/otelcol/ddflareextension/impl/go.mod | 2 +- comp/otelcol/ddflareextension/impl/go.sum | 4 +- .../exporter/datadogexporter/go.mod | 2 +- .../exporter/datadogexporter/go.sum | 4 +- .../otlp/components/metricsclient/go.mod | 2 +- .../otlp/components/metricsclient/go.sum | 4 +- .../otlp/components/statsprocessor/go.mod | 2 +- .../otlp/components/statsprocessor/go.sum | 4 +- go.mod | 14 ++-- go.sum | 32 ++++---- internal/tools/go.mod | 2 +- internal/tools/go.sum | 8 +- pkg/config/remote/go.mod | 2 +- pkg/config/remote/go.sum | 4 +- pkg/obfuscate/go.mod | 2 +- pkg/obfuscate/go.sum | 4 +- pkg/trace/go.mod | 2 +- pkg/trace/go.sum | 4 +- pkg/trace/stats/oteltest/go.mod | 2 +- pkg/trace/stats/oteltest/go.sum | 4 +- test/new-e2e/go.mod | 30 ++++---- test/new-e2e/go.sum | 75 +++++++++++-------- test/otel/go.mod | 2 +- test/otel/go.sum | 4 +- 24 files changed, 114 insertions(+), 101 deletions(-) diff --git a/comp/otelcol/ddflareextension/impl/go.mod b/comp/otelcol/ddflareextension/impl/go.mod index 633e70723c7b1..0719700f9222a 100644 --- a/comp/otelcol/ddflareextension/impl/go.mod +++ b/comp/otelcol/ddflareextension/impl/go.mod @@ -263,7 +263,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-api-client-go/v2 v2.33.0 // indirect - github.com/DataDog/datadog-go/v5 v5.5.0 // indirect + github.com/DataDog/datadog-go/v5 v5.6.0 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/go-sqllexer v0.0.17 // indirect github.com/DataDog/go-tuf v1.1.0-0.5.2 // indirect diff --git a/comp/otelcol/ddflareextension/impl/go.sum b/comp/otelcol/ddflareextension/impl/go.sum index 86b5c591f955c..7a6bcb0649c64 100644 --- a/comp/otelcol/ddflareextension/impl/go.sum +++ b/comp/otelcol/ddflareextension/impl/go.sum @@ -66,8 +66,8 @@ github.com/DataDog/datadog-agent/comp/core/log v0.56.2/go.mod h1:ivJ/RMZjTNkoPPN github.com/DataDog/datadog-api-client-go/v2 v2.33.0 h1:OI6kDnJeQmkjfGzxmP0XUQUxMD4tp6oAPXnnJ4VpgUM= github.com/DataDog/datadog-api-client-go/v2 v2.33.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= -github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= +github.com/DataDog/datadog-go/v5 v5.6.0 h1:2oCLxjF/4htd55piM75baflj/KoE6VYS7alEUqFvRDw= +github.com/DataDog/datadog-go/v5 v5.6.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 h1:RoH7VLzTnxHEugRPIgnGlxwDFszFGI7b3WZZUtWuPRM= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42/go.mod h1:TX7CTOQ3LbQjfAi4SwqUoR5gY1zfUk7VRBDTuArjaDc= github.com/DataDog/go-sqllexer v0.0.17 h1:u47fJAVg/+5DA74ZW3w0Qu+3qXHd3GtnA8ZBYixdPrM= diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod index 7ce89b2ee2d53..5023166f00df5 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod @@ -102,7 +102,7 @@ require ( github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/serializer v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 - github.com/DataDog/datadog-go/v5 v5.5.0 + github.com/DataDog/datadog-go/v5 v5.6.0 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.22.0 github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog v0.115.0 diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum index 1f0bcec425283..5107430987dd3 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum @@ -4,8 +4,8 @@ github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytlju github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/datadog-api-client-go/v2 v2.33.0 h1:OI6kDnJeQmkjfGzxmP0XUQUxMD4tp6oAPXnnJ4VpgUM= github.com/DataDog/datadog-api-client-go/v2 v2.33.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= -github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= -github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= +github.com/DataDog/datadog-go/v5 v5.6.0 h1:2oCLxjF/4htd55piM75baflj/KoE6VYS7alEUqFvRDw= +github.com/DataDog/datadog-go/v5 v5.6.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 h1:RoH7VLzTnxHEugRPIgnGlxwDFszFGI7b3WZZUtWuPRM= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42/go.mod h1:TX7CTOQ3LbQjfAi4SwqUoR5gY1zfUk7VRBDTuArjaDc= github.com/DataDog/go-sqllexer v0.0.17 h1:u47fJAVg/+5DA74ZW3w0Qu+3qXHd3GtnA8ZBYixdPrM= diff --git a/comp/otelcol/otlp/components/metricsclient/go.mod b/comp/otelcol/otlp/components/metricsclient/go.mod index 953a7c7a017cd..9f3e33feb8bf7 100644 --- a/comp/otelcol/otlp/components/metricsclient/go.mod +++ b/comp/otelcol/otlp/components/metricsclient/go.mod @@ -6,7 +6,7 @@ replace github.com/DataDog/datadog-agent/pkg/trace => ../../../../../pkg/trace require ( github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 - github.com/DataDog/datadog-go/v5 v5.5.0 + github.com/DataDog/datadog-go/v5 v5.6.0 github.com/stretchr/testify v1.10.0 go.opentelemetry.io/otel v1.32.0 go.opentelemetry.io/otel/metric v1.32.0 diff --git a/comp/otelcol/otlp/components/metricsclient/go.sum b/comp/otelcol/otlp/components/metricsclient/go.sum index d3cbee6f76083..08cca2d402cd6 100644 --- a/comp/otelcol/otlp/components/metricsclient/go.sum +++ b/comp/otelcol/otlp/components/metricsclient/go.sum @@ -1,5 +1,5 @@ -github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= -github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= +github.com/DataDog/datadog-go/v5 v5.6.0 h1:2oCLxjF/4htd55piM75baflj/KoE6VYS7alEUqFvRDw= +github.com/DataDog/datadog-go/v5 v5.6.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= diff --git a/comp/otelcol/otlp/components/statsprocessor/go.mod b/comp/otelcol/otlp/components/statsprocessor/go.mod index 8a0a6409f886f..05eb43fdf4629 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.mod +++ b/comp/otelcol/otlp/components/statsprocessor/go.mod @@ -22,7 +22,7 @@ require ( github.com/DataDog/datadog-agent/comp/trace/compression/impl-gzip v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 - github.com/DataDog/datadog-go/v5 v5.5.0 + github.com/DataDog/datadog-go/v5 v5.6.0 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 github.com/stretchr/testify v1.10.0 go.opentelemetry.io/collector/component/componenttest v0.115.0 diff --git a/comp/otelcol/otlp/components/statsprocessor/go.sum b/comp/otelcol/otlp/components/statsprocessor/go.sum index 13b6ed7206fcd..25a9e6fccac3c 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.sum +++ b/comp/otelcol/otlp/components/statsprocessor/go.sum @@ -1,5 +1,5 @@ -github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= -github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= +github.com/DataDog/datadog-go/v5 v5.6.0 h1:2oCLxjF/4htd55piM75baflj/KoE6VYS7alEUqFvRDw= +github.com/DataDog/datadog-go/v5 v5.6.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/go-sqllexer v0.0.17 h1:u47fJAVg/+5DA74ZW3w0Qu+3qXHd3GtnA8ZBYixdPrM= github.com/DataDog/go-sqllexer v0.0.17/go.mod h1:KwkYhpFEVIq+BfobkTC1vfqm4gTi65skV/DpDBXtexc= github.com/DataDog/go-tuf v1.1.0-0.5.2 h1:4CagiIekonLSfL8GMHRHcHudo1fQnxELS9g4tiAupQ4= diff --git a/go.mod b/go.mod index a01741a7d419f..40f6882509169 100644 --- a/go.mod +++ b/go.mod @@ -157,8 +157,8 @@ require ( github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.1 - github.com/DataDog/datadog-go/v5 v5.5.0 - github.com/DataDog/datadog-operator v0.7.1-0.20241024104907-734366f3c0d1 + github.com/DataDog/datadog-go/v5 v5.6.0 + github.com/DataDog/datadog-operator v1.11.0-rc.2 github.com/DataDog/ebpf-manager v0.7.4 github.com/DataDog/gopsutil v1.2.2 github.com/DataDog/nikos v1.12.8 @@ -197,7 +197,7 @@ require ( github.com/cri-o/ocicni v0.4.3 github.com/cyphar/filepath-securejoin v0.3.4 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc - github.com/docker/docker v27.3.1+incompatible + github.com/docker/docker v27.4.0+incompatible github.com/docker/go-connections v0.5.0 github.com/dustin/go-humanize v1.0.1 github.com/elastic/go-libaudit/v2 v2.5.0 @@ -323,9 +323,9 @@ require ( gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 - k8s.io/api v0.31.3 + k8s.io/api v0.31.4 k8s.io/apiextensions-apiserver v0.31.2 - k8s.io/apimachinery v0.31.3 + k8s.io/apimachinery v0.31.4 k8s.io/apiserver v0.31.2 // indirect k8s.io/autoscaler/vertical-pod-autoscaler v0.13.0 k8s.io/client-go v0.31.3 @@ -403,7 +403,7 @@ require ( github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f // indirect github.com/dgryski/go-jump v0.0.0-20211018200510-ba001c3ffce0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/docker/cli v27.1.1+incompatible // indirect + github.com/docker/cli v27.4.0+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect github.com/docker/docker-credential-helpers v0.8.1 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect @@ -813,7 +813,9 @@ require ( github.com/Showmax/go-fqdn v1.0.0 // indirect github.com/VividCortex/ewma v1.2.0 // indirect github.com/agext/levenshtein v1.2.3 // indirect + github.com/alecthomas/assert/v2 v2.6.0 // indirect github.com/alecthomas/participle/v2 v2.1.1 // indirect + github.com/alecthomas/repr v0.4.0 // indirect github.com/anchore/go-struct-converter v0.0.0-20221118182256-c68fdcfa2092 // indirect github.com/antchfx/xmlquery v1.4.2 // indirect github.com/antchfx/xpath v1.3.2 // indirect diff --git a/go.sum b/go.sum index 99aabf21db82e..b241ffba51c8e 100644 --- a/go.sum +++ b/go.sum @@ -128,10 +128,10 @@ github.com/DataDog/datadog-agent/comp/core/log v0.56.2/go.mod h1:ivJ/RMZjTNkoPPN github.com/DataDog/datadog-api-client-go/v2 v2.33.0 h1:OI6kDnJeQmkjfGzxmP0XUQUxMD4tp6oAPXnnJ4VpgUM= github.com/DataDog/datadog-api-client-go/v2 v2.33.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= -github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= -github.com/DataDog/datadog-operator v0.7.1-0.20241024104907-734366f3c0d1 h1:17MXCuo1IacLeVzdmwV+92ANVrXkquObm0yxjen1eJ0= -github.com/DataDog/datadog-operator v0.7.1-0.20241024104907-734366f3c0d1/go.mod h1:5Xp66c0HGadP85lOQtb6oVuSvuL5ZSSowQM58hNtTi8= +github.com/DataDog/datadog-go/v5 v5.6.0 h1:2oCLxjF/4htd55piM75baflj/KoE6VYS7alEUqFvRDw= +github.com/DataDog/datadog-go/v5 v5.6.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= +github.com/DataDog/datadog-operator v1.11.0-rc.2 h1:4tMZlxbYE0WEpRYAhoqEe8nLP67C/PDq7utJJcD8RM8= +github.com/DataDog/datadog-operator v1.11.0-rc.2/go.mod h1:mD+3PWR0wOSVJGaXjkpzsYEK/7PhqjOipx2usgfsxM0= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 h1:RoH7VLzTnxHEugRPIgnGlxwDFszFGI7b3WZZUtWuPRM= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42/go.mod h1:TX7CTOQ3LbQjfAi4SwqUoR5gY1zfUk7VRBDTuArjaDc= github.com/DataDog/dd-trace-go/v2 v2.0.0-beta.11 h1:6vwU//TjBIghQKMgIP9UyIRhN/LWS1y8tYzvRnu8JZw= @@ -241,16 +241,16 @@ github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7l github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/agnivade/levenshtein v1.2.0 h1:U9L4IOT0Y3i0TIlUIDJ7rVUziKi/zPbrJGaFrtYH3SY= github.com/agnivade/levenshtein v1.2.0/go.mod h1:QVVI16kDrtSuwcpd0p1+xMC6Z/VfhtCyDIjcwga4/DU= -github.com/alecthomas/assert/v2 v2.3.0 h1:mAsH2wmvjsuvyBvAmCtm7zFsBlb8mIHx5ySLVdDZXL0= -github.com/alecthomas/assert/v2 v2.3.0/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= +github.com/alecthomas/assert/v2 v2.6.0 h1:o3WJwILtexrEUk3cUVal3oiQY2tfgr/FHWiz/v2n4FU= +github.com/alecthomas/assert/v2 v2.6.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/jsonschema v0.0.0-20210918223802-a1d3f4b43d7b/go.mod h1:/n6+1/DWPltRLWL/VKyUxg6tzsl5kHUCcraimt4vr60= github.com/alecthomas/participle v0.7.1 h1:2bN7reTw//5f0cugJcTOnY/NYZcWQOaajW+BwZB5xWs= github.com/alecthomas/participle v0.7.1/go.mod h1:HfdmEuwvr12HXQN44HPWXR0lHmVolVYe4dyL6lQ3duY= github.com/alecthomas/participle/v2 v2.1.1 h1:hrjKESvSqGHzRb4yW1ciisFJ4p3MGYih6icjJvbsmV8= github.com/alecthomas/participle/v2 v2.1.1/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c= github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= -github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk= -github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -552,12 +552,12 @@ github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5Qvfr github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/cli v27.1.1+incompatible h1:goaZxOqs4QKxznZjjBWKONQci/MywhtRv2oNn0GkeZE= -github.com/docker/cli v27.1.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v27.4.0+incompatible h1:/nJzWkcI1MDMN+U+px/YXnQWJqnu4J+QKGTfD6ptiTc= +github.com/docker/cli v27.4.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v27.3.1+incompatible h1:KttF0XoteNTicmUtBO0L2tP+J7FGRFTjaEF4k6WdhfI= -github.com/docker/docker v27.3.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v27.4.0+incompatible h1:I9z7sQ5qyzO0BfAb9IMOawRkAGxhYsidKiTMcm0DU+A= +github.com/docker/docker v27.4.0+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.1 h1:j/eKUktUltBtMzKqmfLB0PAgqYyMHOp5vfsD1807oKo= github.com/docker/docker-credential-helpers v0.8.1/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= @@ -2666,13 +2666,13 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.5.1 h1:4bH5o3b5ZULQ4UrBmP+63W9r7qIkqJClEA9ko5YKx+I= honnef.co/go/tools v0.5.1/go.mod h1:e9irvo83WDG9/irijV44wr3tbhcFeRnfpVlRqVwpzMs= k8s.io/api v0.21.1/go.mod h1:FstGROTmsSHBarKc8bylzXih8BLNYTiS3TZcsoEDg2s= -k8s.io/api v0.31.3 h1:umzm5o8lFbdN/hIXbrK9oRpOproJO62CV1zqxXrLgk8= -k8s.io/api v0.31.3/go.mod h1:UJrkIp9pnMOI9K2nlL6vwpxRzzEX5sWgn8kGQe92kCE= +k8s.io/api v0.31.4 h1:I2QNzitPVsPeLQvexMEsj945QumYraqv9m74isPDKhM= +k8s.io/api v0.31.4/go.mod h1:d+7vgXLvmcdT1BCo79VEgJxHHryww3V5np2OYTr6jdw= k8s.io/apiextensions-apiserver v0.31.2 h1:W8EwUb8+WXBLu56ser5IudT2cOho0gAKeTOnywBLxd0= k8s.io/apiextensions-apiserver v0.31.2/go.mod h1:i+Geh+nGCJEGiCGR3MlBDkS7koHIIKWVfWeRFiOsUcM= k8s.io/apimachinery v0.21.1/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY= -k8s.io/apimachinery v0.31.3 h1:6l0WhcYgasZ/wk9ktLq5vLaoXJJr5ts6lkaQzgeYPq4= -k8s.io/apimachinery v0.31.3/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/apimachinery v0.31.4 h1:8xjE2C4CzhYVm9DGf60yohpNUh5AEBnPxCryPBECmlM= +k8s.io/apimachinery v0.31.4/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= k8s.io/apiserver v0.31.2 h1:VUzOEUGRCDi6kX1OyQ801m4A7AUPglpsmGvdsekmcI4= k8s.io/apiserver v0.31.2/go.mod h1:o3nKZR7lPlJqkU5I3Ove+Zx3JuoFjQobGX1Gctw6XuE= k8s.io/autoscaler/vertical-pod-autoscaler v0.13.0 h1:pH6AsxeBZcyX6KBqcnl7SPIJqbN1d59RrEBuIE6Rq6c= diff --git a/internal/tools/go.mod b/internal/tools/go.mod index e2a60b08d8971..79be9ca61a043 100644 --- a/internal/tools/go.mod +++ b/internal/tools/go.mod @@ -32,7 +32,7 @@ require ( github.com/Microsoft/go-winio v0.6.2 // indirect github.com/OpenPeeDeeP/depguard/v2 v2.2.0 // indirect github.com/ProtonMail/go-crypto v1.1.0-alpha.0 // indirect - github.com/alecthomas/assert/v2 v2.3.0 // indirect + github.com/alecthomas/assert/v2 v2.6.0 // indirect github.com/alecthomas/go-check-sumtype v0.1.4 // indirect github.com/alexkohler/nakedret/v2 v2.0.4 // indirect github.com/alexkohler/prealloc v1.0.0 // indirect diff --git a/internal/tools/go.sum b/internal/tools/go.sum index f5f1fb317b59a..2bf7f8b759bd6 100644 --- a/internal/tools/go.sum +++ b/internal/tools/go.sum @@ -38,12 +38,12 @@ github.com/aclements/go-gg v0.0.0-20170118225347-6dbb4e4fefb0/go.mod h1:55qNq4vc github.com/aclements/go-moremath v0.0.0-20161014184102-0ff62e0875ff/go.mod h1:idZL3yvz4kzx1dsBOAC+oYv6L92P1oFEhUXUB1A/lwQ= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/alecthomas/assert/v2 v2.3.0 h1:mAsH2wmvjsuvyBvAmCtm7zFsBlb8mIHx5ySLVdDZXL0= -github.com/alecthomas/assert/v2 v2.3.0/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= +github.com/alecthomas/assert/v2 v2.6.0 h1:o3WJwILtexrEUk3cUVal3oiQY2tfgr/FHWiz/v2n4FU= +github.com/alecthomas/assert/v2 v2.6.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/go-check-sumtype v0.1.4 h1:WCvlB3l5Vq5dZQTFmodqL2g68uHiSwwlWcT5a2FGK0c= github.com/alecthomas/go-check-sumtype v0.1.4/go.mod h1:WyYPfhfkdhyrdaligV6svFopZV8Lqdzn5pyVBaV6jhQ= -github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk= -github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/alexkohler/nakedret/v2 v2.0.4 h1:yZuKmjqGi0pSmjGpOC016LtPJysIL0WEUiaXW5SUnNg= github.com/alexkohler/nakedret/v2 v2.0.4/go.mod h1:bF5i0zF2Wo2o4X4USt9ntUWve6JbFv02Ff4vlkmS/VU= github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= diff --git a/pkg/config/remote/go.mod b/pkg/config/remote/go.mod index ec7d298386516..282d7f34ff86f 100644 --- a/pkg/config/remote/go.mod +++ b/pkg/config/remote/go.mod @@ -85,7 +85,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/system/socket v0.59.0 // indirect github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect - github.com/DataDog/datadog-go/v5 v5.5.0 // indirect + github.com/DataDog/datadog-go/v5 v5.6.0 // indirect github.com/DataDog/go-libddwaf/v3 v3.5.1 // indirect github.com/DataDog/go-sqllexer v0.0.17 // indirect github.com/DataDog/sketches-go v1.4.6 // indirect diff --git a/pkg/config/remote/go.sum b/pkg/config/remote/go.sum index e9342de28e23c..84cc570d9ad84 100644 --- a/pkg/config/remote/go.sum +++ b/pkg/config/remote/go.sum @@ -7,8 +7,8 @@ cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/yb github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/appsec-internal-go v1.9.0 h1:cGOneFsg0JTRzWl5U2+og5dbtyW3N8XaYwc5nXe39Vw= github.com/DataDog/appsec-internal-go v1.9.0/go.mod h1:wW0cRfWBo4C044jHGwYiyh5moQV2x0AhnwqMuiX7O/g= -github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= -github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= +github.com/DataDog/datadog-go/v5 v5.6.0 h1:2oCLxjF/4htd55piM75baflj/KoE6VYS7alEUqFvRDw= +github.com/DataDog/datadog-go/v5 v5.6.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/go-libddwaf/v3 v3.5.1 h1:GWA4ln4DlLxiXm+X7HA/oj0ZLcdCwOS81KQitegRTyY= github.com/DataDog/go-libddwaf/v3 v3.5.1/go.mod h1:n98d9nZ1gzenRSk53wz8l6d34ikxS+hs62A31Fqmyi4= github.com/DataDog/go-sqllexer v0.0.17 h1:u47fJAVg/+5DA74ZW3w0Qu+3qXHd3GtnA8ZBYixdPrM= diff --git a/pkg/obfuscate/go.mod b/pkg/obfuscate/go.mod index 7085b75f3783d..b34df591521b5 100644 --- a/pkg/obfuscate/go.mod +++ b/pkg/obfuscate/go.mod @@ -3,7 +3,7 @@ module github.com/DataDog/datadog-agent/pkg/obfuscate go 1.22.0 require ( - github.com/DataDog/datadog-go/v5 v5.5.0 + github.com/DataDog/datadog-go/v5 v5.6.0 github.com/DataDog/go-sqllexer v0.0.17 github.com/outcaste-io/ristretto v0.2.3 github.com/stretchr/testify v1.10.0 diff --git a/pkg/obfuscate/go.sum b/pkg/obfuscate/go.sum index e36a2867eaba6..063bd88a07005 100644 --- a/pkg/obfuscate/go.sum +++ b/pkg/obfuscate/go.sum @@ -1,5 +1,5 @@ -github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= -github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= +github.com/DataDog/datadog-go/v5 v5.6.0 h1:2oCLxjF/4htd55piM75baflj/KoE6VYS7alEUqFvRDw= +github.com/DataDog/datadog-go/v5 v5.6.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/go-sqllexer v0.0.17 h1:u47fJAVg/+5DA74ZW3w0Qu+3qXHd3GtnA8ZBYixdPrM= github.com/DataDog/go-sqllexer v0.0.17/go.mod h1:KwkYhpFEVIq+BfobkTC1vfqm4gTi65skV/DpDBXtexc= github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= diff --git a/pkg/trace/go.mod b/pkg/trace/go.mod index 6fbe7317b66c5..fa1ca487a3dc8 100644 --- a/pkg/trace/go.mod +++ b/pkg/trace/go.mod @@ -20,7 +20,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/log v0.59.0 github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 - github.com/DataDog/datadog-go/v5 v5.5.0 + github.com/DataDog/datadog-go/v5 v5.6.0 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 github.com/DataDog/sketches-go v1.4.6 github.com/Microsoft/go-winio v0.6.2 diff --git a/pkg/trace/go.sum b/pkg/trace/go.sum index 75f5a8bd8498a..4613790f7cc34 100644 --- a/pkg/trace/go.sum +++ b/pkg/trace/go.sum @@ -1,5 +1,5 @@ -github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= -github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= +github.com/DataDog/datadog-go/v5 v5.6.0 h1:2oCLxjF/4htd55piM75baflj/KoE6VYS7alEUqFvRDw= +github.com/DataDog/datadog-go/v5 v5.6.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/go-sqllexer v0.0.17 h1:u47fJAVg/+5DA74ZW3w0Qu+3qXHd3GtnA8ZBYixdPrM= github.com/DataDog/go-sqllexer v0.0.17/go.mod h1:KwkYhpFEVIq+BfobkTC1vfqm4gTi65skV/DpDBXtexc= github.com/DataDog/go-tuf v1.1.0-0.5.2 h1:4CagiIekonLSfL8GMHRHcHudo1fQnxELS9g4tiAupQ4= diff --git a/pkg/trace/stats/oteltest/go.mod b/pkg/trace/stats/oteltest/go.mod index dafb9c2cd7a8b..306e0217b22ad 100644 --- a/pkg/trace/stats/oteltest/go.mod +++ b/pkg/trace/stats/oteltest/go.mod @@ -6,7 +6,7 @@ require ( github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/statsprocessor v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/proto v0.56.0-rc.3 github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 - github.com/DataDog/datadog-go/v5 v5.5.0 + github.com/DataDog/datadog-go/v5 v5.6.0 github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.22.0 github.com/google/go-cmp v0.6.0 github.com/stretchr/testify v1.10.0 diff --git a/pkg/trace/stats/oteltest/go.sum b/pkg/trace/stats/oteltest/go.sum index 13b6ed7206fcd..25a9e6fccac3c 100644 --- a/pkg/trace/stats/oteltest/go.sum +++ b/pkg/trace/stats/oteltest/go.sum @@ -1,5 +1,5 @@ -github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= -github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= +github.com/DataDog/datadog-go/v5 v5.6.0 h1:2oCLxjF/4htd55piM75baflj/KoE6VYS7alEUqFvRDw= +github.com/DataDog/datadog-go/v5 v5.6.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/go-sqllexer v0.0.17 h1:u47fJAVg/+5DA74ZW3w0Qu+3qXHd3GtnA8ZBYixdPrM= github.com/DataDog/go-sqllexer v0.0.17/go.mod h1:KwkYhpFEVIq+BfobkTC1vfqm4gTi65skV/DpDBXtexc= github.com/DataDog/go-tuf v1.1.0-0.5.2 h1:4CagiIekonLSfL8GMHRHcHudo1fQnxELS9g4tiAupQ4= diff --git a/test/new-e2e/go.mod b/test/new-e2e/go.mod index 8b0a384191503..008a6b32a4753 100644 --- a/test/new-e2e/go.mod +++ b/test/new-e2e/go.mod @@ -62,16 +62,16 @@ require ( github.com/aws/aws-sdk-go-v2 v1.32.5 github.com/aws/aws-sdk-go-v2/config v1.28.5 github.com/aws/aws-sdk-go-v2/service/ec2 v1.190.0 - github.com/aws/aws-sdk-go-v2/service/eks v1.44.1 - github.com/aws/aws-sdk-go-v2/service/ssm v1.50.7 + github.com/aws/aws-sdk-go-v2/service/eks v1.51.0 + github.com/aws/aws-sdk-go-v2/service/ssm v1.55.2 github.com/cenkalti/backoff v2.2.1+incompatible - github.com/docker/cli v27.1.1+incompatible - github.com/docker/docker v27.3.1+incompatible + github.com/docker/cli v27.4.0+incompatible + github.com/docker/docker v27.4.0+incompatible github.com/fatih/color v1.18.0 github.com/google/uuid v1.6.0 github.com/kr/pretty v0.3.1 github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c - github.com/pkg/sftp v1.13.6 + github.com/pkg/sftp v1.13.7 github.com/pulumi/pulumi-aws/sdk/v6 v6.56.1 github.com/pulumi/pulumi-awsx/sdk/v2 v2.16.1 github.com/pulumi/pulumi-kubernetes/sdk/v4 v4.18.3 @@ -84,8 +84,8 @@ require ( golang.org/x/term v0.27.0 gopkg.in/yaml.v2 v2.4.0 gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 - k8s.io/api v0.31.3 - k8s.io/apimachinery v0.31.3 + k8s.io/api v0.31.4 + k8s.io/apimachinery v0.31.4 k8s.io/cli-runtime v0.31.2 k8s.io/client-go v0.31.3 k8s.io/kubectl v0.31.2 @@ -115,14 +115,13 @@ require ( github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.24 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.19 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.21 // indirect github.com/aws/aws-sdk-go-v2/service/ecr v1.36.2 // indirect github.com/aws/aws-sdk-go-v2/service/ecs v1.47.4 github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.0 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.2 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.0 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.65.0 + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.2 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.24.6 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5 // indirect github.com/aws/aws-sdk-go-v2/service/sts v1.33.1 // indirect @@ -134,7 +133,6 @@ require ( github.com/charmbracelet/bubbles v0.18.0 // indirect github.com/charmbracelet/bubbletea v0.25.0 // indirect github.com/charmbracelet/lipgloss v0.10.0 // indirect - github.com/cheggaaa/pb v1.0.29 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/containerd/console v1.0.4 // indirect github.com/containerd/log v0.1.0 // indirect @@ -284,16 +282,18 @@ require ( require ( github.com/DataDog/datadog-agent/comp/core/tagger/types v0.0.0-00010101000000-000000000000 github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 - github.com/DataDog/datadog-go/v5 v5.5.0 + github.com/DataDog/datadog-go/v5 v5.6.0 github.com/aws/aws-sdk-go v1.55.5 - github.com/aws/session-manager-plugin v0.0.0-20241010233726-61cf1288c7c6 + github.com/aws/aws-sdk-go-v2/service/s3 v1.66.0 + github.com/aws/session-manager-plugin v0.0.0-20241119210807-82dc72922492 github.com/digitalocean/go-libvirt v0.0.0-20240812180835-9c6c0a310c6c - github.com/hairyhenderson/go-codeowners v0.5.0 + github.com/hairyhenderson/go-codeowners v0.7.0 ) require ( github.com/DataDog/datadog-agent/comp/core/tagger/utils v0.59.0 // indirect github.com/blang/semver/v4 v4.0.0 // indirect + github.com/cheggaaa/pb v1.0.29 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/creack/pty v1.1.20 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect diff --git a/test/new-e2e/go.sum b/test/new-e2e/go.sum index d8ba72c668e62..cbbd971dd8ac3 100644 --- a/test/new-e2e/go.sum +++ b/test/new-e2e/go.sum @@ -13,8 +13,8 @@ github.com/DataDog/datadog-api-client-go v1.16.0 h1:5jOZv1m98criCvYTa3qpW8Hzv301 github.com/DataDog/datadog-api-client-go v1.16.0/go.mod h1:PgrP2ABuJWL3Auw2iEkemAJ/r72ghG4DQQmb5sgnKW4= github.com/DataDog/datadog-api-client-go/v2 v2.33.0 h1:OI6kDnJeQmkjfGzxmP0XUQUxMD4tp6oAPXnnJ4VpgUM= github.com/DataDog/datadog-api-client-go/v2 v2.33.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= -github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= -github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= +github.com/DataDog/datadog-go/v5 v5.6.0 h1:2oCLxjF/4htd55piM75baflj/KoE6VYS7alEUqFvRDw= +github.com/DataDog/datadog-go/v5 v5.6.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= github.com/DataDog/test-infra-definitions v0.0.0-20241211124138-9c7c5005ca28 h1:LaZgAke+RN4wBKNl+R10ewdtKe/C2MJCbp9ozXKlLP8= @@ -68,36 +68,36 @@ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24 h1:N1zsICrQglfzaBnrfM github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24/go.mod h1:dCn9HbJ8+K31i8IQ8EWmWj0EiIk0+vKiHNMxTTYveAg= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.19 h1:FKdiFzTxlTRO71p0C7VrLbkkdW8qfMKF5+ej6bTmkT0= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.19/go.mod h1:abO3pCj7WLQPTllnSeYImqFfkGrmJV0JovWo/gqT5N0= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.21 h1:7edmS3VOBDhK00b/MwGtGglCm7hhwNYnjJs/PgFdMQE= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.21/go.mod h1:Q9o5h4HoIWG8XfzxqiuK/CGUbepCJ8uTlaE3bAbxytQ= github.com/aws/aws-sdk-go-v2/service/ec2 v1.190.0 h1:k97fGog9Tl0woxTiSIHN14Qs5ehqK6GXejUwkhJYyL0= github.com/aws/aws-sdk-go-v2/service/ec2 v1.190.0/go.mod h1:mzj8EEjIHSN2oZRXiw1Dd+uB4HZTl7hC8nBzX9IZMWw= github.com/aws/aws-sdk-go-v2/service/ecr v1.36.2 h1:VDQaVwGOokbd3VUbHF+wupiffdrbAZPdQnr5XZMJqrs= github.com/aws/aws-sdk-go-v2/service/ecr v1.36.2/go.mod h1:lvUlMghKYmSxSfv0vU7pdU/8jSY+s0zpG8xXhaGKCw0= github.com/aws/aws-sdk-go-v2/service/ecs v1.47.4 h1:CTkPGE8fiElvLtYWl/U+Eu5+1fVXiZbJUjyVCRSRgxk= github.com/aws/aws-sdk-go-v2/service/ecs v1.47.4/go.mod h1:sMFLFhL27cKYa/eQYZp4asvIwHsnJWrAzTUpy9AQdnU= -github.com/aws/aws-sdk-go-v2/service/eks v1.44.1 h1:onUAzZXDsyXzyrmOGw/9p8Csl1NZkTDEs4URZ8covUY= -github.com/aws/aws-sdk-go-v2/service/eks v1.44.1/go.mod h1:dg9l/W4hXygeRNydRB4LWKY/MwHJhfUomGJUBwI29Dw= +github.com/aws/aws-sdk-go-v2/service/eks v1.51.0 h1:BYyB+byjQ7oyupe3v+YjTp1yfmfNEwChYA2naCc85xI= +github.com/aws/aws-sdk-go-v2/service/eks v1.51.0/go.mod h1:oaPCqTzAe8C5RQZJGRD4RENcV7A4n99uGxbD4rULbNg= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.0 h1:FQNWhRuSq8QwW74GtU0MrveNhZbqvHsA4dkA9w8fTDQ= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.0/go.mod h1:j/zZ3zmWfGCK91K73YsfHP53BSTLSjL/y6YN39XbBLM= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.2 h1:4FMHqLfk0efmTqhXVRL5xYRqlEBNBiRI7N6w4jsEdd4= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.2/go.mod h1:LWoqeWlK9OZeJxsROW2RqrSPvQHKTpp69r/iDjwsSaw= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5 h1:wtpJ4zcwrSbwhECWQoI/g6WM9zqCcSpHDJIWSbMLOu4= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5/go.mod h1:qu/W9HXQbbQ4+1+JcZp0ZNPV31ym537ZJN+fiS7Ti8E= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.0 h1:1NKXS8XfhMM0bg5wVYa/eOH8AM2f6JijugbKEyQFTIg= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.0/go.mod h1:ph931DUfVfgrhZR7py9olSvHCiRpvaGxNvlWBcXxFds= -github.com/aws/aws-sdk-go-v2/service/s3 v1.65.0 h1:2dSm7frMrw2tdJ0QvyccQNJyPGaP24dyDgZ6h1QJMGU= -github.com/aws/aws-sdk-go-v2/service/s3 v1.65.0/go.mod h1:4XSVpw66upN8wND3JZA29eXl2NOZvfFVq7DIP6xvfuQ= -github.com/aws/aws-sdk-go-v2/service/ssm v1.50.7 h1:GkRsyFS9MmX/ybCvOncmp1A4XYn75v0x/ReWnIUao6E= -github.com/aws/aws-sdk-go-v2/service/ssm v1.50.7/go.mod h1:oBlt+H2x16bM5mSUNhmzIR2BWWnMsLUa1Qqs5auS1Bs= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.2 h1:t7iUP9+4wdc5lt3E41huP+GvQZJD38WLsgVp4iOtAjg= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.2/go.mod h1:/niFCtmuQNxqx9v8WAPq5qh7EH25U4BF6tjoyq9bObM= +github.com/aws/aws-sdk-go-v2/service/s3 v1.66.0 h1:xA6XhTF7PE89BCNHJbQi8VvPzcgMtmGC5dr8S8N7lHk= +github.com/aws/aws-sdk-go-v2/service/s3 v1.66.0/go.mod h1:cB6oAuus7YXRZhWCc1wIwPywwZ1XwweNp2TVAEGYeB8= +github.com/aws/aws-sdk-go-v2/service/ssm v1.55.2 h1:z6Pq4+jtKlhK4wWJGHRGwMLGjC1HZwAO3KJr/Na0tSU= +github.com/aws/aws-sdk-go-v2/service/ssm v1.55.2/go.mod h1:DSmu/VZzpQlAubWBbAvNpt+S4k/XweglJi4XaDGyvQk= github.com/aws/aws-sdk-go-v2/service/sso v1.24.6 h1:3zu537oLmsPfDMyjnUS2g+F2vITgy5pB74tHI+JBNoM= github.com/aws/aws-sdk-go-v2/service/sso v1.24.6/go.mod h1:WJSZH2ZvepM6t6jwu4w/Z45Eoi75lPN7DcydSRtJg6Y= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5 h1:K0OQAsDywb0ltlFrZm0JHPY3yZp/S9OaoLU33S7vPS8= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5/go.mod h1:ORITg+fyuMoeiQFiVGoqB3OydVTLkClw/ljbblMq6Cc= github.com/aws/aws-sdk-go-v2/service/sts v1.33.1 h1:6SZUVRQNvExYlMLbHdlKB48x0fLbc2iVROyaNEwBHbU= github.com/aws/aws-sdk-go-v2/service/sts v1.33.1/go.mod h1:GqWyYCwLXnlUB1lOAXQyNSPqPLQJvmo8J0DWBzp9mtg= -github.com/aws/session-manager-plugin v0.0.0-20241010233726-61cf1288c7c6 h1:iQc6pdTje/w3D3vrocVIvcosNVQGjoGxqBgPpwG28BY= -github.com/aws/session-manager-plugin v0.0.0-20241010233726-61cf1288c7c6/go.mod h1:7n17tunRPUsniNBu5Ja9C7WwJWTdOzaLqr/H0Ns3uuI= +github.com/aws/session-manager-plugin v0.0.0-20241119210807-82dc72922492 h1:Ihams/fjKo4iWwM313ng2gCJWoetsL7ZQkXhOTmVUq4= +github.com/aws/session-manager-plugin v0.0.0-20241119210807-82dc72922492/go.mod h1:7n17tunRPUsniNBu5Ja9C7WwJWTdOzaLqr/H0Ns3uuI= github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro= github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= @@ -153,10 +153,10 @@ github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5Qvfr github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/djherbis/times v1.6.0 h1:w2ctJ92J8fBvWPxugmXIv7Nz7Q3iDMKNx9v5ocVH20c= github.com/djherbis/times v1.6.0/go.mod h1:gOHeRAz2h+VJNZ5Gmc/o7iD9k4wW7NMVqieYCY99oc0= -github.com/docker/cli v27.1.1+incompatible h1:goaZxOqs4QKxznZjjBWKONQci/MywhtRv2oNn0GkeZE= -github.com/docker/cli v27.1.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/docker v27.3.1+incompatible h1:KttF0XoteNTicmUtBO0L2tP+J7FGRFTjaEF4k6WdhfI= -github.com/docker/docker v27.3.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/cli v27.4.0+incompatible h1:/nJzWkcI1MDMN+U+px/YXnQWJqnu4J+QKGTfD6ptiTc= +github.com/docker/cli v27.4.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/docker v27.4.0+incompatible h1:I9z7sQ5qyzO0BfAb9IMOawRkAGxhYsidKiTMcm0DU+A= +github.com/docker/docker v27.4.0+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -259,8 +259,8 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0 h1:ad0vkEBuk23VJzZR9nkLVG0YAoN github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0/go.mod h1:igFoXX2ELCW06bol23DWPB5BEWfZISOzSP5K2sbLea0= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= -github.com/hairyhenderson/go-codeowners v0.5.0 h1:dpQB+hVHiRc2VVvc2BHxkuM+tmu9Qej/as3apqUbsWc= -github.com/hairyhenderson/go-codeowners v0.5.0/go.mod h1:R3uW1OQXEj2Gu6/OvZ7bt6hr0qdkLvUWPiqNaWnexpo= +github.com/hairyhenderson/go-codeowners v0.7.0 h1:s0W4wF8bdsBEjTWzwzSlsatSthWtTAF2xLgo4a4RwAo= +github.com/hairyhenderson/go-codeowners v0.7.0/go.mod h1:wUlNgQ3QjqC4z8DnM5nnCYVq/icpqXJyJOukKx5U8/Q= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -381,8 +381,8 @@ github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFz github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.13.6 h1:JFZT4XbOU7l77xGSpOdW+pwIMqP044IyjXX6FGyEKFo= -github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk= +github.com/pkg/sftp v1.13.7 h1:uv+I3nNJvlKZIQGSr8JVQLNHFU9YhhNpvC14Y6KgmSM= +github.com/pkg/sftp v1.13.7/go.mod h1:KMKI0t3T6hfA+lTR/ssZdunHo+uwq7ghoN09/FSu3DY= github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk= github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= @@ -560,7 +560,7 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -575,6 +575,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -592,7 +593,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -607,6 +609,7 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -632,19 +635,26 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= @@ -661,6 +671,7 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -715,10 +726,10 @@ gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.31.3 h1:umzm5o8lFbdN/hIXbrK9oRpOproJO62CV1zqxXrLgk8= -k8s.io/api v0.31.3/go.mod h1:UJrkIp9pnMOI9K2nlL6vwpxRzzEX5sWgn8kGQe92kCE= -k8s.io/apimachinery v0.31.3 h1:6l0WhcYgasZ/wk9ktLq5vLaoXJJr5ts6lkaQzgeYPq4= -k8s.io/apimachinery v0.31.3/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/api v0.31.4 h1:I2QNzitPVsPeLQvexMEsj945QumYraqv9m74isPDKhM= +k8s.io/api v0.31.4/go.mod h1:d+7vgXLvmcdT1BCo79VEgJxHHryww3V5np2OYTr6jdw= +k8s.io/apimachinery v0.31.4 h1:8xjE2C4CzhYVm9DGf60yohpNUh5AEBnPxCryPBECmlM= +k8s.io/apimachinery v0.31.4/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= k8s.io/cli-runtime v0.31.2 h1:7FQt4C4Xnqx8V1GJqymInK0FFsoC+fAZtbLqgXYVOLQ= k8s.io/cli-runtime v0.31.2/go.mod h1:XROyicf+G7rQ6FQJMbeDV9jqxzkWXTYD6Uxd15noe0Q= k8s.io/client-go v0.31.3 h1:CAlZuM+PH2cm+86LOBemaJI/lQ5linJ6UFxKX/SoG+4= diff --git a/test/otel/go.mod b/test/otel/go.mod index c1d17501161ea..fd0d05c30abe4 100644 --- a/test/otel/go.mod +++ b/test/otel/go.mod @@ -175,7 +175,7 @@ require ( github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 // indirect github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/DataDog/datadog-api-client-go/v2 v2.33.0 // indirect - github.com/DataDog/datadog-go/v5 v5.5.0 // indirect + github.com/DataDog/datadog-go/v5 v5.6.0 // indirect github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 // indirect github.com/DataDog/go-sqllexer v0.0.17 // indirect github.com/DataDog/go-tuf v1.1.0-0.5.2 // indirect diff --git a/test/otel/go.sum b/test/otel/go.sum index e8d514c34bee5..270aa7b812248 100644 --- a/test/otel/go.sum +++ b/test/otel/go.sum @@ -4,8 +4,8 @@ github.com/DataDog/agent-payload/v5 v5.0.138 h1:Wg7hmWuoLC/o0X3zZ+uGcfRHPyaytlju github.com/DataDog/agent-payload/v5 v5.0.138/go.mod h1:lxh9lb5xYrBXjblpIWYUi4deJqVbkIfkjwesi5nskDc= github.com/DataDog/datadog-api-client-go/v2 v2.33.0 h1:OI6kDnJeQmkjfGzxmP0XUQUxMD4tp6oAPXnnJ4VpgUM= github.com/DataDog/datadog-api-client-go/v2 v2.33.0/go.mod h1:d3tOEgUd2kfsr9uuHQdY+nXrWp4uikgTgVCPdKNK30U= -github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU= -github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= +github.com/DataDog/datadog-go/v5 v5.6.0 h1:2oCLxjF/4htd55piM75baflj/KoE6VYS7alEUqFvRDw= +github.com/DataDog/datadog-go/v5 v5.6.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42 h1:RoH7VLzTnxHEugRPIgnGlxwDFszFGI7b3WZZUtWuPRM= github.com/DataDog/dd-sensitive-data-scanner/sds-go/go v0.0.0-20240816154533-f7f9beb53a42/go.mod h1:TX7CTOQ3LbQjfAi4SwqUoR5gY1zfUk7VRBDTuArjaDc= github.com/DataDog/go-sqllexer v0.0.17 h1:u47fJAVg/+5DA74ZW3w0Qu+3qXHd3GtnA8ZBYixdPrM= From 84333661b9f85f891b8016df2a38eaf0e15d9dc5 Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Mon, 16 Dec 2024 12:00:50 +0100 Subject: [PATCH 215/303] fix(issue.assign-owner): Change default team (#32194) --- tasks/issue.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tasks/issue.py b/tasks/issue.py index 4cd05c97abcdc..4615d39716dae 100644 --- a/tasks/issue.py +++ b/tasks/issue.py @@ -25,9 +25,7 @@ def assign_owner(_, issue_id, dry_run=False): from slack_sdk import WebClient client = WebClient(os.environ['SLACK_API_TOKEN']) - channel = next( - (chan for team, chan in GITHUB_SLACK_MAP.items() if owner.lower() in team), '#agent-ask-anything' - ) + channel = next((chan for team, chan in GITHUB_SLACK_MAP.items() if owner.lower() in team), '#agent-devx-help') message = f':githubstatus_partial_outage: *New Community Issue*\n{issue.title} <{issue.html_url}|{gh.repo.name}#{issue_id}>\n' if channel == '#agent-ask-anything': message += "The CI bot failed to assign this issue to a team.\nPlease assign it manually." From 93555c374bbd1beb399d9f1306047344296219ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20Juli=C3=A1n?= Date: Mon, 16 Dec 2024 12:17:46 +0100 Subject: [PATCH 216/303] [EBPF] gpu: validate e2e environment before running tests (#32097) Co-authored-by: val06 --- test/new-e2e/tests/gpu/gpu_test.go | 58 ++----- test/new-e2e/tests/gpu/provisioner.go | 237 ++++++++++++++++++++++++++ 2 files changed, 250 insertions(+), 45 deletions(-) create mode 100644 test/new-e2e/tests/gpu/provisioner.go diff --git a/test/new-e2e/tests/gpu/gpu_test.go b/test/new-e2e/tests/gpu/gpu_test.go index 74b1229437a46..0c71a1fe7f74c 100644 --- a/test/new-e2e/tests/gpu/gpu_test.go +++ b/test/new-e2e/tests/gpu/gpu_test.go @@ -3,6 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2024-present Datadog, Inc. +// Package gpu contains e2e tests for the GPU monitoring module package gpu import ( @@ -14,18 +15,13 @@ import ( "testing" "time" - "github.com/DataDog/test-infra-definitions/scenarios/aws/ec2" "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/util/testutil/flake" "github.com/DataDog/datadog-agent/test/fakeintake/client" - "github.com/DataDog/test-infra-definitions/components/datadog/agentparams" - "github.com/DataDog/test-infra-definitions/components/os" - "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" - awshost "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/host" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/utils/e2e/client/agentclient" ) @@ -34,63 +30,35 @@ var imageTag = flag.String("image-tag", "main", "Docker image tag to use") type gpuSuite struct { e2e.BaseSuite[environments.Host] - imageTag string containerNameCounter int } -const defaultGpuCheckConfig = ` -init_config: - min_collection_interval: 5 - -instances: - - {} -` - -const defaultSysprobeConfig = ` -gpu_monitoring: - enabled: true -` - const vectorAddDockerImg = "ghcr.io/datadog/apps-cuda-basic" -const gpuEnabledAMI = "ami-0f71e237bb2ba34be" // Ubuntu 22.04 with GPU drivers + +func dockerImageName() string { + return fmt.Sprintf("%s:%s", vectorAddDockerImg, *imageTag) +} // TestGPUSuite runs tests for the VM interface to ensure its implementation is correct. // Not to be run in parallel, as some tests wait until the checks are available. func TestGPUSuite(t *testing.T) { - provisioner := awshost.Provisioner( - awshost.WithEC2InstanceOptions( - ec2.WithInstanceType("g4dn.xlarge"), - ec2.WithAMI(gpuEnabledAMI, os.Ubuntu2204, os.AMD64Arch), - ), - awshost.WithAgentOptions( - agentparams.WithIntegration("gpu.d", defaultGpuCheckConfig), - agentparams.WithSystemProbeConfig(defaultSysprobeConfig), - ), - awshost.WithDocker(), - ) + provParams := getDefaultProvisionerParams() + + // Append our vectorAdd image for testing + provParams.dockerImages = append(provParams.dockerImages, dockerImageName()) + + provisioner := gpuInstanceProvisioner(provParams) suiteParams := []e2e.SuiteOption{e2e.WithProvisioner(provisioner)} if *devMode { suiteParams = append(suiteParams, e2e.WithDevMode()) } - suite := &gpuSuite{ - imageTag: *imageTag, - } + suite := &gpuSuite{} e2e.Run(t, suite, suiteParams...) } -func (v *gpuSuite) SetupSuite() { - v.BaseSuite.SetupSuite() - - v.Env().RemoteHost.MustExecute(fmt.Sprintf("docker pull %s", v.dockerImageName())) -} - -func (v *gpuSuite) dockerImageName() string { - return fmt.Sprintf("%s:%s", vectorAddDockerImg, v.imageTag) -} - // TODO: Extract this to common package? service_discovery uses it too type checkStatus struct { CheckID string `json:"CheckID"` @@ -118,7 +86,7 @@ func (v *gpuSuite) runCudaDockerWorkload() string { containerName := fmt.Sprintf("cuda-basic-%d", v.containerNameCounter) v.containerNameCounter++ - cmd := fmt.Sprintf("docker run --gpus all --name %s %s %s %d %d %d", containerName, v.dockerImageName(), binary, vectorSize, numLoops, waitTimeSeconds) + cmd := fmt.Sprintf("docker run --gpus all --name %s %s %s %d %d %d", containerName, dockerImageName(), binary, vectorSize, numLoops, waitTimeSeconds) out, err := v.Env().RemoteHost.Execute(cmd) v.Require().NoError(err) v.Require().NotEmpty(out) diff --git a/test/new-e2e/tests/gpu/provisioner.go b/test/new-e2e/tests/gpu/provisioner.go new file mode 100644 index 0000000000000..ee552dcca7d8d --- /dev/null +++ b/test/new-e2e/tests/gpu/provisioner.go @@ -0,0 +1,237 @@ +// 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 2024-present Datadog, Inc. + +package gpu + +import ( + "fmt" + "strconv" + + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + + "github.com/DataDog/test-infra-definitions/common/utils" + "github.com/DataDog/test-infra-definitions/components/command" + "github.com/DataDog/test-infra-definitions/components/datadog/agent" + "github.com/DataDog/test-infra-definitions/components/datadog/agentparams" + "github.com/DataDog/test-infra-definitions/components/docker" + "github.com/DataDog/test-infra-definitions/components/os" + "github.com/DataDog/test-infra-definitions/components/remote" + "github.com/DataDog/test-infra-definitions/resources/aws" + "github.com/DataDog/test-infra-definitions/scenarios/aws/ec2" + "github.com/DataDog/test-infra-definitions/scenarios/aws/fakeintake" + + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" +) + +// gpuEnabledAMI is an AMI that has GPU drivers pre-installed. In this case it's +// an Ubuntu 22.04 with NVIDIA drivers +const gpuEnabledAMI = "ami-0f71e237bb2ba34be" + +// gpuInstanceType is the instance type to use. By default we use g4dn.xlarge, +// which is the cheapest GPU instance type +const gpuInstanceType = "g4dn.xlarge" + +// nvidiaPCIVendorID is the PCI vendor ID for NVIDIA GPUs, used to identify the +// GPU devices with lspci +const nvidiaPCIVendorID = "10de" + +// cudaSanityCheckImage is a Docker image that contains a CUDA sample to +// validate the GPU setup with the default CUDA installation. Note that the CUDA +// version in this image must be equal or less than the one installed in the +// AMI. +const cudaSanityCheckImage = "669783387624.dkr.ecr.us-east-1.amazonaws.com/dockerhub/nvidia/cuda:12.6.3-base-ubuntu22.04" + +// nvidiaSMIValidationCmd is a command that checks if the nvidia-smi command is +// available and can list the GPUs +const nvidiaSMIValidationCmd = "nvidia-smi -L | grep GPU" + +// validationCommandMarker is a command that can be appended to all validation commands +// to identify them in the output, which can be useful to later force retries. Retries +// are controlled in test/new-e2e/pkg/utils/infra/retriable_errors.go, and the way to +// identify them are based on the pulumi logs. This command will be echoed to the output +// and can be used to identify the validation commands. +const validationCommandMarker = "echo 'gpu-validation-command'" + +const defaultGpuCheckConfig = ` +init_config: + min_collection_interval: 5 + +instances: + - {} +` + +const defaultSysprobeConfig = ` +gpu_monitoring: + enabled: true +` + +type provisionerParams struct { + agentOptions []agentparams.Option + ami string + amiOS os.Descriptor + instanceType string + dockerImages []string +} + +func getDefaultProvisionerParams() *provisionerParams { + return &provisionerParams{ + agentOptions: []agentparams.Option{ + agentparams.WithIntegration("gpu.d", defaultGpuCheckConfig), + agentparams.WithSystemProbeConfig(defaultSysprobeConfig), + }, + ami: gpuEnabledAMI, + amiOS: os.Ubuntu2204, + instanceType: gpuInstanceType, + dockerImages: []string{cudaSanityCheckImage}, + } +} + +func gpuInstanceProvisioner(params *provisionerParams) e2e.Provisioner { + return e2e.NewTypedPulumiProvisioner[environments.Host]("gpu", func(ctx *pulumi.Context, env *environments.Host) error { + name := "gpuvm" + awsEnv, err := aws.NewEnvironment(ctx) + if err != nil { + return err + } + + // Create the EC2 instance + host, err := ec2.NewVM(awsEnv, name, + ec2.WithInstanceType(params.instanceType), + ec2.WithAMI(params.ami, params.amiOS, os.AMD64Arch), + ) + if err != nil { + return err + } + err = host.Export(ctx, &env.RemoteHost.HostOutput) + if err != nil { + return err + } + + // Create the fakeintake instance + fakeIntake, err := fakeintake.NewECSFargateInstance(awsEnv, name) + if err != nil { + return err + } + err = fakeIntake.Export(ctx, &env.FakeIntake.FakeintakeOutput) + if err != nil { + return err + } + + // install the ECR credentials helper + // required to get pipeline agent images or other internally hosted images + installEcrCredsHelperCmd, err := ec2.InstallECRCredentialsHelper(awsEnv, host) + if err != nil { + return err + } + + // Validate GPU devices + validateGPUDevicesCmd, err := validateGPUDevices(awsEnv, host) + if err != nil { + return err + } + + // Install Docker (only after GPU devices are validated and the ECR credentials helper is installed) + dockerManager, err := docker.NewManager(&awsEnv, host, utils.PulumiDependsOn(installEcrCredsHelperCmd)) + if err != nil { + return err + } + + // Pull all the docker images required for the tests + dockerPullCmds, err := downloadDockerImages(awsEnv, host, params.dockerImages, dockerManager) + if err != nil { + return err + } + + // Validate that Docker can run CUDA samples + dockerCudaDeps := append(dockerPullCmds, validateGPUDevicesCmd...) + err = validateDockerCuda(awsEnv, host, dockerCudaDeps...) + if err != nil { + return err + } + + // Combine agent options from the parameters with the fakeintake and docker dependencies + params.agentOptions = append(params.agentOptions, + agentparams.WithFakeintake(fakeIntake), + agentparams.WithPulumiResourceOptions(utils.PulumiDependsOn(dockerManager)), // Depend on Docker to avoid apt lock issues + ) + + // Set updater to nil as we're not using it + env.Updater = nil + + // Install the agent + agent, err := agent.NewHostAgent(&awsEnv, host, params.agentOptions...) + if err != nil { + return err + } + + err = agent.Export(ctx, &env.Agent.HostAgentOutput) + if err != nil { + return err + } + + return nil + }, nil) +} + +// validateGPUDevices checks that there are GPU devices present and accesible +func validateGPUDevices(e aws.Environment, vm *remote.Host) ([]pulumi.Resource, error) { + commands := map[string]string{ + "pci": fmt.Sprintf("lspci -d %s:: | grep NVIDIA", nvidiaPCIVendorID), + "driver": "lsmod | grep nvidia", + "nvidia": "nvidia-smi -L | grep GPU", + } + + var cmds []pulumi.Resource + + for name, cmd := range commands { + c, err := vm.OS.Runner().Command( + e.CommonNamer().ResourceName("gpu-validate", name), + &command.Args{ + Create: pulumi.Sprintf("%s && %s", validationCommandMarker, cmd), + Sudo: false, + }, + ) + if err != nil { + return nil, err + } + cmds = append(cmds, c) + } + + return cmds, nil +} + +func downloadDockerImages(e aws.Environment, vm *remote.Host, images []string, dependsOn ...pulumi.Resource) ([]pulumi.Resource, error) { + var cmds []pulumi.Resource + + for i, image := range images { + cmd, err := vm.OS.Runner().Command( + e.CommonNamer().ResourceName("docker-pull", strconv.Itoa(i)), + &command.Args{ + Create: pulumi.Sprintf("docker pull %s", image), + }, + utils.PulumiDependsOn(dependsOn...), + ) + if err != nil { + return nil, err + } + + cmds = append(cmds, cmd) + } + + return cmds, nil +} + +func validateDockerCuda(e aws.Environment, vm *remote.Host, dependsOn ...pulumi.Resource) error { + _, err := vm.OS.Runner().Command( + e.CommonNamer().ResourceName("docker-cuda-validate"), + &command.Args{ + Create: pulumi.Sprintf("%s && docker run --gpus all --rm %s bash -c \"%s\"", validationCommandMarker, cudaSanityCheckImage, nvidiaSMIValidationCmd), + }, + utils.PulumiDependsOn(dependsOn...), + ) + + return err +} From 72fae75fc7f6f2f2257487178e3fd5a16818af8d Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Mon, 16 Dec 2024 13:35:13 +0100 Subject: [PATCH 217/303] pkg/util/trivy: gate additional containerd code under build tag (#32205) --- pkg/util/trivy/containerd.go | 2 +- pkg/util/trivy/trivy.go | 3 --- pkg/util/trivy/trivy_containerd.go | 4 ++++ 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pkg/util/trivy/containerd.go b/pkg/util/trivy/containerd.go index 94b8b7dab0f8b..d3ed7ddf3f84c 100644 --- a/pkg/util/trivy/containerd.go +++ b/pkg/util/trivy/containerd.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build trivy +//go:build trivy && containerd package trivy diff --git a/pkg/util/trivy/trivy.go b/pkg/util/trivy/trivy.go index 5709f4d384657..e78690f98ab6b 100644 --- a/pkg/util/trivy/trivy.go +++ b/pkg/util/trivy/trivy.go @@ -19,7 +19,6 @@ import ( "sort" "strings" "sync" - "time" "github.com/containerd/containerd/mount" @@ -53,8 +52,6 @@ import ( ) const ( - cleanupTimeout = 30 * time.Second - OSAnalyzers = "os" // OSAnalyzers defines an OS analyzer LanguagesAnalyzers = "languages" // LanguagesAnalyzers defines a language analyzer SecretAnalyzers = "secret" // SecretAnalyzers defines a secret analyzer diff --git a/pkg/util/trivy/trivy_containerd.go b/pkg/util/trivy/trivy_containerd.go index 6611a56c217dc..1a1a14345420b 100644 --- a/pkg/util/trivy/trivy_containerd.go +++ b/pkg/util/trivy/trivy_containerd.go @@ -24,6 +24,10 @@ import ( "github.com/containerd/errdefs" ) +const ( + cleanupTimeout = 30 * time.Second +) + // ContainerdAccessor is a function that should return a containerd client type ContainerdAccessor func() (cutil.ContainerdItf, error) From 21cd52ea94f0ec2f9581b9d330c0d7d198b4e639 Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Mon, 16 Dec 2024 14:15:17 +0100 Subject: [PATCH 218/303] pkg/util/trivy: remove some `//nolint` comments (#32212) --- pkg/util/trivy/overlayfs.go | 2 +- pkg/util/trivy/trivy_containerd.go | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/pkg/util/trivy/overlayfs.go b/pkg/util/trivy/overlayfs.go index 8c5a73cf8e3ea..f1f8e243983cc 100644 --- a/pkg/util/trivy/overlayfs.go +++ b/pkg/util/trivy/overlayfs.go @@ -23,7 +23,7 @@ import ( // whiteoutCharDev is defined as zero and is not const only for testing as it // is not allowed to mknod a 0/0 char dev in userns. -var whiteoutCharDev uint64 = 0 //nolint:revive +var whiteoutCharDev uint64 // = 0 var whiteout *fs.DirEntry diff --git a/pkg/util/trivy/trivy_containerd.go b/pkg/util/trivy/trivy_containerd.go index 1a1a14345420b..bd036354c514d 100644 --- a/pkg/util/trivy/trivy_containerd.go +++ b/pkg/util/trivy/trivy_containerd.go @@ -86,8 +86,7 @@ func (c *Collector) ScanContainerdImage(ctx context.Context, imgMeta *workloadme // ScanContainerdImageFromFilesystem scans containerd image from file-system func (c *Collector) ScanContainerdImageFromFilesystem(ctx context.Context, imgMeta *workloadmeta.ContainerImageMetadata, img containerd.Image, client cutil.ContainerdItf, scanOptions sbom.ScanOptions) (sbom.Report, error) { - //nolint:gosimple // TODO(CINT) Fix go simple linte - imagePath, err := os.MkdirTemp(os.TempDir(), fmt.Sprintf("containerd-image-*")) + imagePath, err := os.MkdirTemp("", "containerd-image-*") if err != nil { return nil, fmt.Errorf("unable to create temp dir, err: %w", err) } From 918a8c3b32ae0f0e4046dd0cc85394c2fcdf4187 Mon Sep 17 00:00:00 2001 From: Baptiste Foy Date: Mon, 16 Dec 2024 14:18:17 +0100 Subject: [PATCH 219/303] upgrade(installer): Support apm libraries configs (#31841) --- cmd/installer/subcommands/daemon/status.tmpl | 10 +- pkg/fleet/daemon/daemon.go | 52 +++++++-- pkg/fleet/installer/installer.go | 13 ++- pkg/fleet/installer/packages/datadog_agent.go | 1 + pkg/fleet/internal/cdn/cdn.go | 34 +++++- .../internal/cdn/config_datadog_agent.go | 27 +---- ...og_apm.go => config_datadog_apm_inject.go} | 20 ++-- .../cdn/config_datadog_apm_libraries.go | 101 ++++++++++++++++++ .../installer/unix/upgrade_scenario_test.go | 4 + 9 files changed, 212 insertions(+), 50 deletions(-) rename pkg/fleet/internal/cdn/{config_datadog_apm.go => config_datadog_apm_inject.go} (83%) create mode 100644 pkg/fleet/internal/cdn/config_datadog_apm_libraries.go diff --git a/cmd/installer/subcommands/daemon/status.tmpl b/cmd/installer/subcommands/daemon/status.tmpl index 045b819d53764..02481dea5c50d 100644 --- a/cmd/installer/subcommands/daemon/status.tmpl +++ b/cmd/installer/subcommands/daemon/status.tmpl @@ -1,12 +1,12 @@ Datadog Installer v{{ htmlSafe .Version }} {{ range $name, $package := .Packages }} {{ boldText $name }} - State: {{ if $package.Experiment -}}{{ yellowText "Upgrading" }}{{- else if $package.Stable -}}{{ greenText "OK" }}{{- else -}}{{ redText "no stable version" }}{{- end }} + State: {{ if $package.Experiment -}}{{ yellowText "Upgrading" }}{{- else if $package.Stable -}}{{ greenText "OK" }}{{- else -}}config only{{- end }} Installed versions: {{- if $package.Stable }} {{ greenText "●" }} stable: v{{ htmlSafe $package.Stable }} {{- else }} - {{ redText "●" }} stable: none + ● stable: none {{- end }} {{- if $package.Experiment }} {{ yellowText "●" }} experiment: v{{ htmlSafe $package.Experiment }} @@ -23,9 +23,9 @@ Datadog Installer v{{ htmlSafe .Version }} Remote configuration client state: StableVersion: {{ $remoteConfig.StableVersion }} ExperimentVersion: {{ $remoteConfig.ExperimentVersion }} - StableConfigVersion: {{ $remoteConfig.StableConfigVersion }} - ExperimentConfigVersion: {{ $remoteConfig.ExperimentConfigVersion }} - RemoteConfigVersion: {{ $remoteConfig.RemoteConfigVersion }} + StableConfigVersion: {{ if $remoteConfig.StableConfigState }}{{ $remoteConfig.StableConfigState.Version }}{{ else }}{{ "" }}{{ end }} + ExperimentConfigVersion: {{ if $remoteConfig.ExperimentConfigState }}{{ $remoteConfig.ExperimentConfigState.Version }}{{ else }}{{ "" }}{{ end }} + RemoteConfigVersion: {{ if $remoteConfig.RemoteConfigState }}{{ $remoteConfig.RemoteConfigState.Version }}{{ else }}{{ "" }}{{ end }} Task: {{- if $remoteConfig.Task }} Id: {{ $remoteConfig.Task.Id }} diff --git a/pkg/fleet/daemon/daemon.go b/pkg/fleet/daemon/daemon.go index 63ed3e2a3a626..ba79d5456dd3e 100644 --- a/pkg/fleet/daemon/daemon.go +++ b/pkg/fleet/daemon/daemon.go @@ -140,7 +140,34 @@ func (d *daemonImpl) GetState() (map[string]repository.State, error) { d.m.Lock() defer d.m.Unlock() - return d.installer.States() + states, err := d.installer.States() + if err != nil { + return nil, err + } + + var configStates map[string]repository.State + if d.env.RemotePolicies { + configStates, err = d.installer.ConfigStates() + if err != nil { + return nil, err + } + } + + res := make(map[string]repository.State) + for pkg, state := range states { + res[pkg] = state + } + for pkg, state := range configStates { + if _, ok := res[pkg]; !ok { + res[pkg] = repository.State{ + Stable: "", + Experiment: "", + StablePoliciesState: state.StablePoliciesState, + ExperimentPoliciesState: state.ExperimentPoliciesState, + } + } + } + return res, nil } // GetRemoteConfigState returns the remote config state. @@ -599,17 +626,24 @@ func (d *daemonImpl) refreshState(ctx context.Context) { log.Errorf("could not get available size: %v", err) } + for pkg, configState := range configState { + if _, ok := state[pkg]; !ok { + state[pkg] = repository.State{} + } + tmp := state[pkg] + tmp.StablePoliciesState = configState.StablePoliciesState + tmp.ExperimentPoliciesState = configState.ExperimentPoliciesState + state[pkg] = tmp + } + var packages []*pbgo.PackageState for pkg, s := range state { p := &pbgo.PackageState{ - Package: pkg, - StableVersion: s.Stable, - ExperimentVersion: s.Experiment, - } - cs, hasConfig := configState[pkg] - if hasConfig { - p.StableConfigState = cs.StablePoliciesState - p.ExperimentConfigState = cs.ExperimentPoliciesState + Package: pkg, + StableVersion: s.Stable, + ExperimentVersion: s.Experiment, + StableConfigState: s.StablePoliciesState, + ExperimentConfigState: s.ExperimentPoliciesState, } configState, err := d.resolveRemoteConfigVersion(ctx, pkg) diff --git a/pkg/fleet/installer/installer.go b/pkg/fleet/installer/installer.go index 3dd39b8fddb81..d9a2a910f45ef 100644 --- a/pkg/fleet/installer/installer.go +++ b/pkg/fleet/installer/installer.go @@ -34,6 +34,7 @@ import ( const ( packageDatadogAgent = "datadog-agent" packageAPMInjector = "datadog-apm-inject" + packageAPMLibraries = "datadog-apm-libraries" packageDatadogInstaller = "datadog-installer" ) @@ -210,6 +211,16 @@ func (i *installerImpl) Install(ctx context.Context, url string, args []string) if err != nil { return fmt.Errorf("could not configure package: %w", err) } + if pkg.Name == packageDatadogInstaller { + // We must handle the configuration of some packages that are not + // don't have an OCI. To properly configure their configuration repositories, + // we call configurePackage when setting up the installer; which is the only + // package that is always installed. + err = i.configurePackage(ctx, packageAPMLibraries) + if err != nil { + return fmt.Errorf("could not configure package: %w", err) + } + } err = i.setupPackage(ctx, pkg.Name, args) // Postinst if err != nil { return fmt.Errorf("could not setup package: %w", err) @@ -662,7 +673,7 @@ func (i *installerImpl) configurePackage(ctx context.Context, pkg string) (err e defer func() { span.Finish(err) }() switch pkg { - case packageDatadogAgent, packageAPMInjector: + case packageDatadogAgent, packageAPMInjector, packageAPMLibraries: config, err := i.cdn.Get(ctx, pkg) if err != nil { return fmt.Errorf("could not get %s CDN config: %w", pkg, err) diff --git a/pkg/fleet/installer/packages/datadog_agent.go b/pkg/fleet/installer/packages/datadog_agent.go index 34dbac394050f..c3b56f0e9c87b 100644 --- a/pkg/fleet/installer/packages/datadog_agent.go +++ b/pkg/fleet/installer/packages/datadog_agent.go @@ -60,6 +60,7 @@ var ( "system-probe.yaml", "inject/tracer.yaml", "inject", + "managed", } // matches omnibus/package-scripts/agent-deb/postinst rootOwnedAgentPaths = []string{ diff --git a/pkg/fleet/internal/cdn/cdn.go b/pkg/fleet/internal/cdn/cdn.go index 4f65108dfa90f..f35418cc0b7bc 100644 --- a/pkg/fleet/internal/cdn/cdn.go +++ b/pkg/fleet/internal/cdn/cdn.go @@ -7,6 +7,7 @@ package cdn import ( + "bytes" "context" "encoding/json" "errors" @@ -18,9 +19,13 @@ import ( "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" pbgo "github.com/DataDog/datadog-agent/pkg/proto/pbgo/core" + "gopkg.in/yaml.v2" ) -const policyMetadataFilename = "policy.metadata" +const ( + policyMetadataFilename = "policy.metadata" + doNotEditDisclaimer = `# This configuration was generated by Datadog's Fleet Automation. DO NOT EDIT.` +) var ( // ErrProductNotSupported is returned when the product is not supported. @@ -134,7 +139,16 @@ func (c *CDN) Get(ctx context.Context, pkg string) (cfg Config, err error) { if err != nil { return nil, err } - cfg, err = newAPMConfig(c.hostTagsGetter.get(), orderedLayers...) + cfg, err = newAPMSSIConfig(c.hostTagsGetter.get(), orderedLayers...) + if err != nil { + return nil, err + } + case "datadog-apm-libraries": + orderedLayers, err := c.fetcher.get(ctx) + if err != nil { + return nil, err + } + cfg, err = newAPMLibrariesConfig(c.hostTagsGetter.get(), orderedLayers...) if err != nil { return nil, err } @@ -175,3 +189,19 @@ func writePolicyMetadata(config Config, dir string) error { } return nil } + +// marshalYAMLConfig marshals the config as YAML. +func marshalYAMLConfig(c map[string]interface{}) ([]byte, error) { + if len(c) == 0 { + return nil, nil + } + var b bytes.Buffer + b.WriteString(doNotEditDisclaimer) + b.WriteString("\n") + rawConfig, err := yaml.Marshal(c) + if err != nil { + return nil, err + } + b.Write(rawConfig) + return b.Bytes(), nil +} diff --git a/pkg/fleet/internal/cdn/config_datadog_agent.go b/pkg/fleet/internal/cdn/config_datadog_agent.go index b9882ebaad469..71e96d0d2655e 100644 --- a/pkg/fleet/internal/cdn/config_datadog_agent.go +++ b/pkg/fleet/internal/cdn/config_datadog_agent.go @@ -6,7 +6,6 @@ package cdn import ( - "bytes" "crypto/sha256" "encoding/json" "fmt" @@ -18,12 +17,10 @@ import ( pbgo "github.com/DataDog/datadog-agent/pkg/proto/pbgo/core" "github.com/DataDog/datadog-agent/pkg/util/log" - "gopkg.in/yaml.v2" ) const ( - layerKeys = "fleet_layers" - doNotEditDisclaimer = `# This configuration was generated by Datadog's Fleet Automation. DO NOT EDIT.` + layerKeys = "fleet_layers" configDatadogYAML = "datadog.yaml" configSecurityAgentYAML = "security-agent.yaml" @@ -106,15 +103,15 @@ func newAgentConfig(orderedLayers ...[]byte) (*agentConfig, error) { compiledLayer.AgentConfig[layerKeys] = policyIDs // Marshal into YAML configs - config, err := marshalAgentConfig(compiledLayer.AgentConfig) + config, err := marshalYAMLConfig(compiledLayer.AgentConfig) if err != nil { return nil, err } - securityAgentConfig, err := marshalAgentConfig(compiledLayer.SecurityAgentConfig) + securityAgentConfig, err := marshalYAMLConfig(compiledLayer.SecurityAgentConfig) if err != nil { return nil, err } - systemProbeConfig, err := marshalAgentConfig(compiledLayer.SystemProbeConfig) + systemProbeConfig, err := marshalYAMLConfig(compiledLayer.SystemProbeConfig) if err != nil { return nil, err } @@ -182,22 +179,6 @@ func (a *agentConfig) Write(dir string) error { return writePolicyMetadata(a, dir) } -// marshalAgentConfig marshals the config as YAML. -func marshalAgentConfig(c map[string]interface{}) ([]byte, error) { - if len(c) == 0 { - return nil, nil - } - var b bytes.Buffer - b.WriteString(doNotEditDisclaimer) - b.WriteString("\n") - rawConfig, err := yaml.Marshal(c) - if err != nil { - return nil, err - } - b.Write(rawConfig) - return b.Bytes(), nil -} - // getAgentIDs returns the UID and GID of the dd-agent user and group. func getAgentIDs() (uid, gid int, err error) { ddAgentUser, err := user.Lookup("dd-agent") diff --git a/pkg/fleet/internal/cdn/config_datadog_apm.go b/pkg/fleet/internal/cdn/config_datadog_apm_inject.go similarity index 83% rename from pkg/fleet/internal/cdn/config_datadog_apm.go rename to pkg/fleet/internal/cdn/config_datadog_apm_inject.go index fd171f06e0d92..f5cc04894b7f7 100644 --- a/pkg/fleet/internal/cdn/config_datadog_apm.go +++ b/pkg/fleet/internal/cdn/config_datadog_apm_inject.go @@ -21,37 +21,37 @@ const ( injectorConfigFilename = "injector.msgpack" ) -// apmConfig represents the injector configuration from the CDN. -type apmConfig struct { +// apmSSIConfig represents the injector configuration from the CDN. +type apmSSIConfig struct { version string policyIDs []string injectorConfig []byte } -// apmConfigLayer is a config layer that can be merged with other layers into a config. -type apmConfigLayer struct { +// apmSSIConfigLayer is a config layer that can be merged with other layers into a config. +type apmSSIConfigLayer struct { ID string `json:"name"` InjectorConfig map[string]interface{} `json:"apm_ssi_config"` } // State returns the APM configs state -func (i *apmConfig) State() *pbgo.PoliciesState { +func (i *apmSSIConfig) State() *pbgo.PoliciesState { return &pbgo.PoliciesState{ MatchedPolicies: i.policyIDs, Version: i.version, } } -func newAPMConfig(hostTags []string, orderedLayers ...[]byte) (*apmConfig, error) { +func newAPMSSIConfig(hostTags []string, orderedLayers ...[]byte) (*apmSSIConfig, error) { // Compile ordered layers into a single config // TODO: maybe we don't want that and we should reject if there are more than one config? policyIDs := []string{} - compiledLayer := &apmConfigLayer{ + compiledLayer := &apmSSIConfigLayer{ InjectorConfig: map[string]interface{}{}, } for _, rawLayer := range orderedLayers { - layer := &apmConfigLayer{} + layer := &apmSSIConfigLayer{} if err := json.Unmarshal(rawLayer, layer); err != nil { log.Warnf("Failed to unmarshal layer: %v", err) continue @@ -84,7 +84,7 @@ func newAPMConfig(hostTags []string, orderedLayers ...[]byte) (*apmConfig, error return nil, err } - return &apmConfig{ + return &apmSSIConfig{ version: fmt.Sprintf("%x", hash.Sum(nil)), policyIDs: policyIDs, @@ -93,7 +93,7 @@ func newAPMConfig(hostTags []string, orderedLayers ...[]byte) (*apmConfig, error } // Write writes the agent configuration to the given directory. -func (i *apmConfig) Write(dir string) error { +func (i *apmSSIConfig) Write(dir string) error { if i.injectorConfig != nil { err := os.WriteFile(filepath.Join(dir, injectorConfigFilename), []byte(i.injectorConfig), 0644) // Must be world readable if err != nil { diff --git a/pkg/fleet/internal/cdn/config_datadog_apm_libraries.go b/pkg/fleet/internal/cdn/config_datadog_apm_libraries.go new file mode 100644 index 0000000000000..bf31d18bd69a3 --- /dev/null +++ b/pkg/fleet/internal/cdn/config_datadog_apm_libraries.go @@ -0,0 +1,101 @@ +// 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 cdn + +import ( + "crypto/sha256" + "encoding/json" + "fmt" + "os" + "path/filepath" + + pbgo "github.com/DataDog/datadog-agent/pkg/proto/pbgo/core" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +const ( + apmLibrariesConfigPath = "libraries_config.yaml" +) + +// apmLibrariesConfig represents the injector configuration from the CDN. +type apmLibrariesConfig struct { + version string + policyIDs []string + + apmLibrariesConfig []byte +} + +// apmLibrariesConfigLayer is a config layer that can be merged with other layers into a config. +type apmLibrariesConfigLayer struct { + ID string `json:"name"` + APMLibrariesConfig map[string]interface{} `json:"apm_libraries_config"` +} + +// State returns the APM configs state +func (i *apmLibrariesConfig) State() *pbgo.PoliciesState { + return &pbgo.PoliciesState{ + MatchedPolicies: i.policyIDs, + Version: i.version, + } +} + +func newAPMLibrariesConfig(hostTags []string, orderedLayers ...[]byte) (*apmLibrariesConfig, error) { + // Compile ordered layers into a single config + policyIDs := []string{} + compiledLayer := &apmLibrariesConfigLayer{ + APMLibrariesConfig: map[string]interface{}{}, + } + for _, rawLayer := range orderedLayers { + layer := &apmLibrariesConfigLayer{} + if err := json.Unmarshal(rawLayer, layer); err != nil { + log.Warnf("Failed to unmarshal layer: %v", err) + continue + } + + if layer.APMLibrariesConfig != nil { + cfg, err := merge(compiledLayer.APMLibrariesConfig, layer.APMLibrariesConfig) + if err != nil { + return nil, err + } + compiledLayer.APMLibrariesConfig = cfg.(map[string]interface{}) + policyIDs = append(policyIDs, layer.ID) + } + } + + hash := sha256.New() + version, err := json.Marshal(compiledLayer) + if err != nil { + return nil, err + } + hash.Write(version) + + // Add host tags AFTER compiling the version -- we don't want to trigger noop updates + compiledLayer.APMLibrariesConfig["host_tags"] = hostTags + + // Marshal into msgpack configs + yamlCfg, err := marshalYAMLConfig(compiledLayer.APMLibrariesConfig) + if err != nil { + return nil, err + } + + return &apmLibrariesConfig{ + version: fmt.Sprintf("%x", hash.Sum(nil)), + policyIDs: policyIDs, + + apmLibrariesConfig: yamlCfg, + }, nil +} + +// Write writes the agent configuration to the given directory. +func (i *apmLibrariesConfig) Write(dir string) error { + if i.apmLibrariesConfig != nil { + err := os.WriteFile(filepath.Join(dir, apmLibrariesConfigPath), []byte(i.apmLibrariesConfig), 0644) // Must be world readable + if err != nil { + return fmt.Errorf("could not write %s: %w", apmLibrariesConfigPath, err) + } + } + return writePolicyMetadata(i, dir) +} diff --git a/test/new-e2e/tests/installer/unix/upgrade_scenario_test.go b/test/new-e2e/tests/installer/unix/upgrade_scenario_test.go index 74d3b888cab58..6230ef741410c 100644 --- a/test/new-e2e/tests/installer/unix/upgrade_scenario_test.go +++ b/test/new-e2e/tests/installer/unix/upgrade_scenario_test.go @@ -404,6 +404,10 @@ func (s *upgradeScenarioSuite) TestConfigUpgradeSuccessful() { s.host.WaitForFileExists(true, "/opt/datadog-packages/run/installer.sock") state := s.host.State() + // Assert setup successful + state.AssertDirExists("/etc/datadog-agent/managed", 0755, "root", "root") + state.AssertDirExists("/etc/datadog-agent/managed/datadog-apm-libraries", 0755, "root", "root") + state.AssertDirExists("/etc/datadog-agent/managed/datadog-agent", 0755, "root", "root") state.AssertSymlinkExists("/etc/datadog-agent/managed/datadog-agent/stable", "/etc/datadog-agent/managed/datadog-agent/e94406c45ae766b7d34d2793e4759b9c4d15ed5d5e2b7f73ce1bf0e6836f728d", "root", "root") // Verify metadata state.AssertFileExists("/etc/datadog-agent/managed/datadog-agent/e94406c45ae766b7d34d2793e4759b9c4d15ed5d5e2b7f73ce1bf0e6836f728d/policy.metadata", 0440, "dd-agent", "dd-agent") From e681f1f73fdf7c01797954f37ee7aff9e64b19fa Mon Sep 17 00:00:00 2001 From: Adel Haj Hassan <41540817+adel121@users.noreply.github.com> Date: Mon, 16 Dec 2024 15:03:41 +0100 Subject: [PATCH 220/303] unify inclusion/exclusion logic for container images (#32013) Co-authored-by: DeForest Richards <56796055+drichards-87@users.noreply.github.com> --- .../corechecks/containers/generic/filters.go | 2 +- .../containers/kubelet/common/pod.go | 2 +- pkg/process/util/containers/containers.go | 4 +- pkg/util/containers/filter.go | 23 +++++++++ pkg/util/containers/filter_test.go | 51 ++++++++++++++++--- ...e_filters_consistent-14fd44a352723e50.yaml | 16 ++++++ 6 files changed, 86 insertions(+), 12 deletions(-) create mode 100644 releasenotes/notes/make_image_filters_consistent-14fd44a352723e50.yaml diff --git a/pkg/collector/corechecks/containers/generic/filters.go b/pkg/collector/corechecks/containers/generic/filters.go index 788a88664bcb5..fbf0fb544e25a 100644 --- a/pkg/collector/corechecks/containers/generic/filters.go +++ b/pkg/collector/corechecks/containers/generic/filters.go @@ -56,7 +56,7 @@ func (f LegacyContainerFilter) IsExcluded(container *workloadmeta.Container) boo annotations = pod.Annotations } - return f.OldFilter.IsExcluded(annotations, container.Name, container.Image.Name, container.Labels[kubernetes.CriContainerNamespaceLabel]) + return f.OldFilter.IsExcluded(annotations, container.Name, container.Image.RawName, container.Labels[kubernetes.CriContainerNamespaceLabel]) } // RuntimeContainerFilter filters containers by runtime diff --git a/pkg/collector/corechecks/containers/kubelet/common/pod.go b/pkg/collector/corechecks/containers/kubelet/common/pod.go index f0689b2c852d1..da2706b143de5 100644 --- a/pkg/collector/corechecks/containers/kubelet/common/pod.go +++ b/pkg/collector/corechecks/containers/kubelet/common/pod.go @@ -190,7 +190,7 @@ func GetContainerID(store workloadmeta.Component, metric model.Metric, filter *c return "", ErrContainerNotFound } - if filter.IsExcluded(pod.EntityMeta.Annotations, container.Name, container.Image.Name, pod.Namespace) { + if filter.IsExcluded(pod.EntityMeta.Annotations, container.Name, container.Image.RawName, pod.Namespace) { return "", ErrContainerExcluded } diff --git a/pkg/process/util/containers/containers.go b/pkg/process/util/containers/containers.go index 2beafeced27f5..c5ad7cae1c9b3 100644 --- a/pkg/process/util/containers/containers.go +++ b/pkg/process/util/containers/containers.go @@ -120,7 +120,7 @@ func (p *containerProvider) GetContainers(cacheValidity time.Duration, previousC annotations = pod.Annotations } - if p.filter != nil && p.filter.IsExcluded(annotations, container.Name, container.Image.Name, container.Labels[kubernetes.CriContainerNamespaceLabel]) { + if p.filter != nil && p.filter.IsExcluded(annotations, container.Name, container.Image.RawName, container.Labels[kubernetes.CriContainerNamespaceLabel]) { continue } @@ -209,7 +209,7 @@ func (p *containerProvider) GetPidToCid(cacheValidity time.Duration) map[int]str annotations = pod.Annotations } - if p.filter != nil && p.filter.IsExcluded(annotations, container.Name, container.Image.Name, container.Labels[kubernetes.CriContainerNamespaceLabel]) { + if p.filter != nil && p.filter.IsExcluded(annotations, container.Name, container.Image.RawName, container.Labels[kubernetes.CriContainerNamespaceLabel]) { continue } diff --git a/pkg/util/containers/filter.go b/pkg/util/containers/filter.go index 1e2ab52934e77..63676bc59533d 100644 --- a/pkg/util/containers/filter.go +++ b/pkg/util/containers/filter.go @@ -112,6 +112,7 @@ func parseFilters(filters []string) (imageFilters, nameFilters, namespaceFilters for _, filter := range filters { switch { case strings.HasPrefix(filter, imageFilterPrefix): + filter = preprocessImageFilter(filter) r, err := filterToRegex(filter, imageFilterPrefix) if err != nil { filterErrs = append(filterErrs, err.Error()) @@ -145,6 +146,19 @@ func parseFilters(filters []string) (imageFilters, nameFilters, namespaceFilters return imageFilters, nameFilters, namespaceFilters, filterWarnings, nil } +// preprocessImageFilter modifies image filters having the format `name$`, where {name} doesn't include a colon (e.g. nginx$, ^nginx$), to +// `name:.*`. +// This is done so that image filters can still match even if the matched image contains the tag or digest. +func preprocessImageFilter(imageFilter string) string { + regexVal := strings.TrimPrefix(imageFilter, imageFilterPrefix) + if strings.HasSuffix(regexVal, "$") && !strings.Contains(regexVal, ":") { + mutatedRegexVal := regexVal[:len(regexVal)-1] + "(@sha256)?:.*" + return imageFilterPrefix + mutatedRegexVal + } + + return imageFilter +} + // filterToRegex checks a filter's regex func filterToRegex(filter string, filterPrefix string) (*regexp.Regexp, error) { pat := strings.TrimPrefix(filter, filterPrefix) @@ -327,7 +341,16 @@ func NewAutodiscoveryFilter(ft FilterType) (*Filter, error) { // based on the filters in the containerFilter instance. Consider also using // Note: exclude filters are not applied to empty container names, empty // images and empty namespaces. +// +// containerImage may or may not contain the image tag or image digest. (e.g. nginx:latest and nginx are both valid) func (cf Filter) IsExcluded(annotations map[string]string, containerName, containerImage, podNamespace string) bool { + + // If containerImage doesn't include the tag or digest, add a colon so that it + // can match image filters + if len(containerImage) > 0 && !strings.Contains(containerImage, ":") { + containerImage += ":" + } + if cf.isExcludedByAnnotation(annotations, containerName) { return true } diff --git a/pkg/util/containers/filter_test.go b/pkg/util/containers/filter_test.go index 1c1d768a4dfc0..ea33a72134f46 100644 --- a/pkg/util/containers/filter_test.go +++ b/pkg/util/containers/filter_test.go @@ -28,6 +28,14 @@ func TestFilter(t *testing.T) { c ctnDef ns string }{ + { + c: ctnDef{ + ID: "0", + Name: "container-with-sha", + Image: "docker-dd-agent@sha256:1892862abcdef61516516", + }, + ns: "default", + }, { c: ctnDef{ ID: "1", @@ -268,25 +276,33 @@ func TestFilter(t *testing.T) { expectedIDs []string }{ { - expectedIDs: []string{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "23", "24", "25", "26", "27", "28", "29", "30", "31"}, + expectedIDs: []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "23", "24", "25", "26", "27", "28", "29", "30", "31"}, }, { - excludeList: []string{"name:secret"}, + excludeList: []string{"image:^docker-dd-agent$"}, expectedIDs: []string{"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "23", "24", "25", "26", "27", "28", "29", "30", "31"}, }, + { + excludeList: []string{"image:^apache$"}, + expectedIDs: []string{"0", "1", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "23", "24", "25", "26", "27", "28", "29", "30", "31"}, + }, + { + excludeList: []string{"name:secret"}, + expectedIDs: []string{"0", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "23", "24", "25", "26", "27", "28", "29", "30", "31"}, + }, { excludeList: []string{"image:secret"}, - expectedIDs: []string{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "23", "24", "25", "26", "27", "28", "29", "30", "31"}, + expectedIDs: []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "23", "24", "25", "26", "27", "28", "29", "30", "31"}, }, { includeList: []string{}, excludeList: []string{"image:apache", "image:alpine"}, - expectedIDs: []string{"1", "3", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "23", "24", "25", "26", "27", "28", "29", "30", "31"}, + expectedIDs: []string{"0", "1", "3", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "23", "24", "25", "26", "27", "28", "29", "30", "31"}, }, { includeList: []string{"name:mysql"}, excludeList: []string{"name:dd"}, - expectedIDs: []string{"3", "5", "6", "7", "8", "9", "10", "11", "12", "13", "16", "17", "18", "19", "20", "23", "24", "25", "26", "27", "28", "29", "30", "31"}, + expectedIDs: []string{"0", "3", "5", "6", "7", "8", "9", "10", "11", "12", "13", "16", "17", "18", "19", "20", "23", "24", "25", "26", "27", "28", "29", "30", "31"}, }, { excludeList: []string{"kube_namespace:.*"}, @@ -295,7 +311,7 @@ func TestFilter(t *testing.T) { }, { excludeList: []string{"kube_namespace:bar"}, - expectedIDs: []string{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "19", "20", "23", "24", "25", "26", "27", "28", "29", "30", "31"}, + expectedIDs: []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "19", "20", "23", "24", "25", "26", "27", "28", "29", "30", "31"}, }, { excludeList: []string{"name:.*"}, @@ -305,7 +321,17 @@ func TestFilter(t *testing.T) { { excludeList: []string{"image:.*"}, includeList: []string{"image:docker-dd-agent"}, - expectedIDs: []string{"1", "30"}, + expectedIDs: []string{"0", "1", "30"}, + }, + { + excludeList: []string{"image:.*"}, + includeList: []string{"image:^docker-dd-agent$"}, + expectedIDs: []string{"0", "1", "30"}, + }, + { + excludeList: []string{"image:.*"}, + includeList: []string{"image:^docker-dd-agent$"}, + expectedIDs: []string{"0", "1", "30"}, }, // Test kubernetes defaults { @@ -326,7 +352,7 @@ func TestFilter(t *testing.T) { pauseContainerUpstream, pauseContainerCDK, }, - expectedIDs: []string{"1", "2", "3", "4", "5", "14", "15", "29", "30", "31"}, + expectedIDs: []string{"0", "1", "2", "3", "4", "5", "14", "15", "29", "30", "31"}, }, } { t.Run("", func(t *testing.T) { @@ -624,6 +650,15 @@ func TestParseFilters(t *testing.T) { expectedErrMsg: nil, filterErrors: nil, }, + { + desc: "valid filters, image filter strict match without tag or digest", + filters: []string{"image:^nginx$", "name:xyz-.*", "kube_namespace:sandbox.*", "name:abc"}, + imageFilters: []*regexp.Regexp{regexp.MustCompile("^nginx(@sha256)?:.*")}, + nameFilters: []*regexp.Regexp{regexp.MustCompile("xyz-.*"), regexp.MustCompile("abc")}, + namespaceFilters: []*regexp.Regexp{regexp.MustCompile("sandbox.*")}, + expectedErrMsg: nil, + filterErrors: nil, + }, { desc: "invalid regex", filters: []string{"image:apache.*", "name:a(?=b)", "kube_namespace:sandbox.*", "name:abc"}, diff --git a/releasenotes/notes/make_image_filters_consistent-14fd44a352723e50.yaml b/releasenotes/notes/make_image_filters_consistent-14fd44a352723e50.yaml new file mode 100644 index 0000000000000..d0b292f5f2267 --- /dev/null +++ b/releasenotes/notes/make_image_filters_consistent-14fd44a352723e50.yaml @@ -0,0 +1,16 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + Fixes consistency issue with container image filters. + Depending on the Agent configuration, filters were sometimes behaving differently + for metrics and logs. For example, an image filter that worked for excluding logs + didn't work when used to exclude metrics, and vice versa. + The exclusion logic is now consistent between metrics and logs. + From e56059fbac2741b4a6ee33926ad9849ef9c20e4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lian=20Raimbault?= <161456554+CelianR@users.noreply.github.com> Date: Mon, 16 Dec 2024 09:06:46 -0500 Subject: [PATCH 221/303] Remove interactive questions for release.create-rc (#32127) --- tasks/libs/common/git.py | 40 +++++++++++++++++++++++++++++++--------- tasks/release.py | 33 ++++++++++++++++----------------- 2 files changed, 47 insertions(+), 26 deletions(-) diff --git a/tasks/libs/common/git.py b/tasks/libs/common/git.py index dfff77eda03f7..b50184c3af411 100644 --- a/tasks/libs/common/git.py +++ b/tasks/libs/common/git.py @@ -1,8 +1,10 @@ from __future__ import annotations import os +import sys import tempfile from contextlib import contextmanager +from time import sleep from typing import TYPE_CHECKING from invoke import Context @@ -161,25 +163,45 @@ def check_base_branch(branch, release_version): return branch == get_default_branch() or branch == release_version.branch() -def try_git_command(ctx, git_command): - """ - Try a git command that should be retried (after user confirmation) if it fails. +def try_git_command(ctx, git_command, non_interactive_retries=2, non_interactive_delay=5): + """Try a git command that should be retried (after user confirmation) if it fails. Primarily useful for commands which can fail if commit signing fails: we don't want the whole workflow to fail if that happens, we want to retry. + + Args: + ctx: The invoke context. + git_command: The git command to run. + non_interactive_retries: The number of times to retry the command if it fails when running non-interactively. + non_interactive_delay: The delay in seconds to retry the command if it fails when running non-interactively. """ do_retry = True + n_retries = 0 + interactive = sys.stdin.isatty() while do_retry: res = ctx.run(git_command, warn=True) if res.exited is None or res.exited > 0: - print( - color_message( - f"Failed to run \"{git_command}\" (did the commit/tag signing operation fail?)", - "orange", + if interactive: + print( + color_message( + f"Failed to run \"{git_command}\" (did the commit/tag signing operation fail?)", + "orange", + ) + ) + do_retry = yes_no_question("Do you want to retry this operation?", color="orange", default=True) + else: + # Non interactive, retry in `non_interactive_delay` seconds if we haven't reached the limit + n_retries += 1 + if n_retries > non_interactive_retries: + print(f'{color_message("Error", Color.RED)}: Failed to run git command', file=sys.stderr) + return False + + print( + f'{color_message("Warning", Color.ORANGE)}: Retrying git command in {non_interactive_delay}s', + file=sys.stderr, ) - ) - do_retry = yes_no_question("Do you want to retry this operation?", color="orange", default=True) + sleep(non_interactive_delay) continue return True diff --git a/tasks/release.py b/tasks/release.py index b91e4a48742a6..aa16b7fd7045f 100644 --- a/tasks/release.py +++ b/tasks/release.py @@ -84,16 +84,21 @@ BACKPORT_LABEL_COLOR = "5319e7" -def deduce_and_ask_version(ctx, branch, as_str=True, trust=False) -> str | Version: +def deduce_version(ctx, branch, as_str=True, trust=False) -> str | Version: release_version = get_next_version_from_branch(ctx, branch, as_str=as_str) - if trust: - return release_version + print( + f'{color_message("Info", Color.BLUE)}: Version {release_version} deduced from branch {branch}', file=sys.stderr + ) - if not os.isatty(sys.stdin.fileno()) or yes_no_question( - f'Version {release_version} deduced from branch {branch}. Is this the version you want to use?', - color="orange", - default=False, + if ( + trust + or not os.isatty(sys.stdin.fileno()) + or yes_no_question( + 'Is this the version you want to use?', + color="orange", + default=False, + ) ): return release_version @@ -170,7 +175,7 @@ def update_modules(ctx, release_branch=None, version=None, trust=False): assert release_branch or version - agent_version = version or deduce_and_ask_version(ctx, release_branch, trust=trust) + agent_version = version or deduce_version(ctx, release_branch, trust=trust) with agent_context(ctx, release_branch, skip_checkout=release_branch is None): modules = get_default_modules() @@ -235,7 +240,7 @@ def tag_modules( assert release_branch or version - agent_version = version or deduce_and_ask_version(ctx, release_branch, trust=trust) + agent_version = version or deduce_version(ctx, release_branch, trust=trust) tags = [] with agent_context(ctx, release_branch, skip_checkout=release_branch is None): @@ -274,7 +279,7 @@ def tag_version( assert release_branch or version - agent_version = version or deduce_and_ask_version(ctx, release_branch, trust=trust) + agent_version = version or deduce_version(ctx, release_branch, trust=trust) # Always tag the main module force_option = __get_force_option(force) @@ -463,12 +468,6 @@ def create_rc(ctx, release_branch, patch_version=False, upstream="origin", slack # Step 1: Update release entries print(color_message("Updating release entries", "bold")) new_version = next_rc_version(ctx, major_version, patch_version) - if not yes_no_question( - f'Do you want to create release candidate with:\n- new version: {new_version}\n- new highest version: {new_highest_version}\n- new final version: {new_final_version}?', - color="bold", - default=False, - ): - raise Exit(color_message("Aborting.", "red"), code=1) update_release_json(new_version, new_final_version) @@ -1257,7 +1256,7 @@ def create_github_release(ctx, release_branch, draft=True): ) notes = [] - version = deduce_and_ask_version(ctx, release_branch) + version = deduce_version(ctx, release_branch) with agent_context(ctx, release_branch): for section, filename in sections: From f028703ea10c5417545fda6954a658bd41c2f976 Mon Sep 17 00:00:00 2001 From: Raphael Gavache Date: Mon, 16 Dec 2024 15:10:21 +0100 Subject: [PATCH 222/303] [fleet] fix telemetry (#32218) --- pkg/fleet/telemetry/telemetry.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/fleet/telemetry/telemetry.go b/pkg/fleet/telemetry/telemetry.go index df641722cb18a..5bbfd8ca773c4 100644 --- a/pkg/fleet/telemetry/telemetry.go +++ b/pkg/fleet/telemetry/telemetry.go @@ -219,10 +219,9 @@ func StartSpanFromIDs(ctx context.Context, operationName, traceID, parentID stri spanCtx, err := tracer.Extract(ctxCarrier) if err != nil { log.Debugf("failed to extract span context from install script params: %v", err) - return Span{tracer.StartSpan("remote_request")}, ctx + return StartSpanFromContext(ctx, operationName, spanOptions...) } spanOptions = append([]ddtrace.StartSpanOption{tracer.ChildOf(spanCtx)}, spanOptions...) - return StartSpanFromContext(ctx, operationName, spanOptions...) } From 35a9baf10bc26f19b9557afa3ee786b0e248a2ef Mon Sep 17 00:00:00 2001 From: Baptiste Foy Date: Mon, 16 Dec 2024 15:16:58 +0100 Subject: [PATCH 223/303] chore(installer): Remove the amazon-ecr-credential-helper dependency (#32149) --- .gitlab/deploy_packages/e2e.yml | 26 ------------------- .gitlab/deploy_packages/oci.yml | 3 ++- .gitlab/e2e/e2e.yml | 16 ++++++------ LICENSE-3rdparty.csv | 11 -------- go.mod | 3 --- go.sum | 6 ----- pkg/fleet/installer/oci/download.go | 5 ---- .../installer/unix/package_definitions.go | 4 +-- 8 files changed, 12 insertions(+), 62 deletions(-) diff --git a/.gitlab/deploy_packages/e2e.yml b/.gitlab/deploy_packages/e2e.yml index a72844e37c245..78bb3286f1292 100644 --- a/.gitlab/deploy_packages/e2e.yml +++ b/.gitlab/deploy_packages/e2e.yml @@ -1,31 +1,5 @@ # Jobs that deploy agent packages on QA environment, to be used by e2e tests -qa_agent_oci: - extends: .docker_publish_job_definition - stage: deploy_packages - rules: - - !reference [.on_installer_or_e2e_changes] - - !reference [.manual] - needs: - - deploy_agent_oci - variables: - IMG_REGISTRIES: agent-qa - IMG_SOURCES: registry.ddbuild.io/ci/remote-updates/datadog-agent:pipeline-${CI_PIPELINE_ID} - IMG_DESTINATIONS: agent-package:pipeline-${CI_PIPELINE_ID} - -qa_installer_oci: - extends: .docker_publish_job_definition - stage: deploy_packages - rules: - - !reference [.on_installer_or_e2e_changes] - - !reference [.manual] - needs: - - deploy_installer_oci - variables: - IMG_REGISTRIES: agent-qa - IMG_SOURCES: registry.ddbuild.io/ci/remote-updates/datadog-installer:pipeline-${CI_PIPELINE_ID} - IMG_DESTINATIONS: installer-package:pipeline-${CI_PIPELINE_ID} - qa_installer_script: image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES stage: deploy_packages diff --git a/.gitlab/deploy_packages/oci.yml b/.gitlab/deploy_packages/oci.yml index 7db0433b743dd..bcefacac8d134 100644 --- a/.gitlab/deploy_packages/oci.yml +++ b/.gitlab/deploy_packages/oci.yml @@ -24,9 +24,10 @@ include: - datadog-package push registry.ddbuild.io/ci/remote-updates/${OCI_PRODUCT}:${VERSION} ${OMNIBUS_PACKAGE_DIR}/${OCI_PRODUCT}-${VERSION}.oci.tar # This is used for E2E tests. Doesn't cost more than an additional tag to the registry. - datadog-package push registry.ddbuild.io/ci/remote-updates/${OCI_PRODUCT}:pipeline-${CI_PIPELINE_ID} ${OMNIBUS_PACKAGE_DIR}/${OCI_PRODUCT}-${VERSION}.oci.tar - # Used for install scripts e2e tests + # Used for e2e tests - datadog-package replicate-s3 registry.ddbuild.io/ci/remote-updates/${OCI_PRODUCT}:pipeline-${CI_PIPELINE_ID} us-east-1 ${INSTALLER_TESTING_S3_BUCKET} ${S3_PACKAGE} ${VERSION} - datadog-package replicate-s3 registry.ddbuild.io/ci/remote-updates/${OCI_PRODUCT}:pipeline-${CI_PIPELINE_ID} us-east-1 ${INSTALLER_TESTING_S3_BUCKET} ${S3_PACKAGE} ${CI_COMMIT_SHA} + - datadog-package replicate-s3 registry.ddbuild.io/ci/remote-updates/${OCI_PRODUCT}:pipeline-${CI_PIPELINE_ID} us-east-1 ${INSTALLER_TESTING_S3_BUCKET} ${S3_PACKAGE} pipeline-${CI_PIPELINE_ID} variables: MAJOR_VERSION: 7 diff --git a/.gitlab/e2e/e2e.yml b/.gitlab/e2e/e2e.yml index b23939329f011..f944f407fa2dd 100644 --- a/.gitlab/e2e/e2e.yml +++ b/.gitlab/e2e/e2e.yml @@ -412,8 +412,8 @@ new-e2e-installer: - deploy_rpm_testing-a7_x64 - deploy_suse_rpm_testing_arm64-a7 - deploy_suse_rpm_testing_x64-a7 - - qa_installer_oci - - qa_agent_oci + - deploy_installer_oci + - deploy_agent_oci variables: TARGETS: ./tests/installer/unix TEAM: fleet @@ -428,8 +428,8 @@ new-e2e-installer-windows: needs: - !reference [.needs_new_e2e_template] - deploy_windows_testing-a7 - - qa_installer_oci - - qa_agent_oci + - deploy_installer_oci + - deploy_agent_oci before_script: # CURRENT_AGENT_VERSION is used to verify the installed agent version # Must run before new_e2e_template changes the aws profile @@ -471,8 +471,8 @@ new-e2e-installer-ansible: - deploy_rpm_testing-a7_x64 - deploy_suse_rpm_testing_arm64-a7 - deploy_suse_rpm_testing_x64-a7 - - qa_installer_oci - - qa_agent_oci + - deploy_installer_oci + - deploy_agent_oci variables: TARGETS: ./tests/installer/unix TEAM: fleet @@ -663,8 +663,8 @@ generate-flakes-finder-pipeline: - deploy_suse_rpm_testing_arm64-a7 - deploy_suse_rpm_testing_x64-a7 - deploy_windows_testing-a7 - - qa_installer_oci - - qa_agent_oci + - deploy_installer_oci + - deploy_agent_oci - qa_cws_instrumentation - qa_dca - qa_dogstatsd diff --git a/LICENSE-3rdparty.csv b/LICENSE-3rdparty.csv index 8c766a337eb1c..d424a9ed015c7 100644 --- a/LICENSE-3rdparty.csv +++ b/LICENSE-3rdparty.csv @@ -596,12 +596,6 @@ core,github.com/aws/aws-sdk-go-v2/service/ebs/types,Apache-2.0,"Copyright 2014-2 core,github.com/aws/aws-sdk-go-v2/service/ec2,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go-v2/service/ec2/internal/endpoints,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go-v2/service/ec2/types,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." -core,github.com/aws/aws-sdk-go-v2/service/ecr,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." -core,github.com/aws/aws-sdk-go-v2/service/ecr/internal/endpoints,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." -core,github.com/aws/aws-sdk-go-v2/service/ecr/types,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." -core,github.com/aws/aws-sdk-go-v2/service/ecrpublic,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." -core,github.com/aws/aws-sdk-go-v2/service/ecrpublic/internal/endpoints,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." -core,github.com/aws/aws-sdk-go-v2/service/ecrpublic/types,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go-v2/service/internal/presigned-url,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go-v2/service/kms,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." @@ -692,11 +686,6 @@ core,github.com/aws/smithy-go/tracing,Apache-2.0,"Copyright Amazon.com, Inc. or core,github.com/aws/smithy-go/transport/http,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" core,github.com/aws/smithy-go/transport/http/internal/io,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" core,github.com/aws/smithy-go/waiter,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" -core,github.com/awslabs/amazon-ecr-credential-helper/ecr-login,Apache-2.0,"Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved." -core,github.com/awslabs/amazon-ecr-credential-helper/ecr-login/api,Apache-2.0,"Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved." -core,github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cache,Apache-2.0,"Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved." -core,github.com/awslabs/amazon-ecr-credential-helper/ecr-login/config,Apache-2.0,"Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved." -core,github.com/awslabs/amazon-ecr-credential-helper/ecr-login/version,Apache-2.0,"Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/bahlo/generic-list-go,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,github.com/beevik/ntp,BSD-2-Clause,Al Cutter (AlCutter) | Andrey Smirnov (smira) | Anton Tolchanov (knyar) | Ask Bjørn Hansen (abh) | Brett Vickers (beevik) | Christopher Batey (chbatey) | Copyright © 2015-2023 Brett Vickers. All rights reserved | Leonid Evdokimov (darkk) | Meng Zhuo (mengzhuo) | Mikhail Salosin (AlphaB) | Silves-Xiang (silves-xiang) core,github.com/benbjohnson/clock,MIT,Copyright (c) 2014 Ben Johnson diff --git a/go.mod b/go.mod index 40f6882509169..0a6de46e14ef7 100644 --- a/go.mod +++ b/go.mod @@ -741,7 +741,6 @@ require ( github.com/aws/aws-sdk-go-v2/service/kms v1.37.6 github.com/aws/aws-sdk-go-v2/service/rds v1.90.0 github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.6 - github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20240409155312-26d1ea377073 github.com/cloudfoundry-community/go-cfclient/v2 v2.0.1-0.20230503155151-3d15366c5820 github.com/containerd/cgroups/v3 v3.0.4 github.com/containerd/typeurl/v2 v2.2.3 @@ -822,8 +821,6 @@ require ( github.com/antlr4-go/antlr/v4 v4.13.0 // indirect github.com/apache/thrift v0.21.0 // indirect github.com/aquasecurity/trivy-java-db v0.0.0-20240109071736-184bd7481d48 // indirect - github.com/aws/aws-sdk-go-v2/service/ecr v1.36.2 // indirect - github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.27.0 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect github.com/bitnami/go-version v0.0.0-20231130084017-bb00604d650c // indirect diff --git a/go.sum b/go.sum index b241ffba51c8e..5fd04067f4905 100644 --- a/go.sum +++ b/go.sum @@ -347,10 +347,6 @@ github.com/aws/aws-sdk-go-v2/service/ebs v1.27.0 h1:4zuGQITyy9O+GlSGcs+aUz3+Smlv github.com/aws/aws-sdk-go-v2/service/ebs v1.27.0/go.mod h1:T0t6q7wBD2P11xwVcc6GvwmuDT3i6ZJgZ+13ziQUUnA= github.com/aws/aws-sdk-go-v2/service/ec2 v1.190.0 h1:k97fGog9Tl0woxTiSIHN14Qs5ehqK6GXejUwkhJYyL0= github.com/aws/aws-sdk-go-v2/service/ec2 v1.190.0/go.mod h1:mzj8EEjIHSN2oZRXiw1Dd+uB4HZTl7hC8nBzX9IZMWw= -github.com/aws/aws-sdk-go-v2/service/ecr v1.36.2 h1:VDQaVwGOokbd3VUbHF+wupiffdrbAZPdQnr5XZMJqrs= -github.com/aws/aws-sdk-go-v2/service/ecr v1.36.2/go.mod h1:lvUlMghKYmSxSfv0vU7pdU/8jSY+s0zpG8xXhaGKCw0= -github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.27.0 h1:k4ykVLeoO2JohTC7BIfIqWYvmf8HcirbWHf8Zn0SPpI= -github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.27.0/go.mod h1:vJMqaxbvogPsWZYEInEwK82EBwCfc7cnE/5BEqnvTYI= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15/go.mod h1:26SQUPcTNgV1Tapwdt4a1rOsYRsnBsJHLMPoxK2b0d8= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE= @@ -378,8 +374,6 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.33.1/go.mod h1:GqWyYCwLXnlUB1lOAXQyN github.com/aws/smithy-go v1.15.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro= github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= -github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20240409155312-26d1ea377073 h1:9XtHL16FtbSDAedz9AnboTDqfKacYqc5BmwtUxzwwD8= -github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.0.0-20240409155312-26d1ea377073/go.mod h1:2nlYPkG0rFrODp6R875pk/kOnB8Ivj3+onhzk2mO57g= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo4tARvBm7l6KA9iVMnE3NWizDeWSrps= diff --git a/pkg/fleet/installer/oci/download.go b/pkg/fleet/installer/oci/download.go index 9260d19bc0e97..7fcce0234512c 100644 --- a/pkg/fleet/installer/oci/download.go +++ b/pkg/fleet/installer/oci/download.go @@ -20,7 +20,6 @@ import ( "syscall" "time" - "github.com/awslabs/amazon-ecr-credential-helper/ecr-login" "github.com/google/go-containerregistry/pkg/authn" "github.com/google/go-containerregistry/pkg/name" oci "github.com/google/go-containerregistry/pkg/v1" @@ -44,8 +43,6 @@ const ( RegistryAuthDefault string = "docker" // RegistryAuthGCR is the Google Container Registry authentication method. RegistryAuthGCR string = "gcr" - // RegistryAuthECR is the Amazon Elastic Container Registry authentication method. - RegistryAuthECR string = "ecr" // RegistryAuthPassword is the password registry authentication method. RegistryAuthPassword string = "password" ) @@ -154,8 +151,6 @@ func getKeychain(auth string, username string, password string) authn.Keychain { switch auth { case RegistryAuthGCR: return google.Keychain - case RegistryAuthECR: - return authn.NewKeychainFromHelper(ecr.NewECRHelper()) case RegistryAuthPassword: return usernamePasswordKeychain{ username: username, diff --git a/test/new-e2e/tests/installer/unix/package_definitions.go b/test/new-e2e/tests/installer/unix/package_definitions.go index 2f7c2d15057dd..78c5ac64fd75b 100644 --- a/test/new-e2e/tests/installer/unix/package_definitions.go +++ b/test/new-e2e/tests/installer/unix/package_definitions.go @@ -67,8 +67,8 @@ func WithAlias(alias string) PackageOption { // PackagesConfig is the list of known packages configuration for testing var PackagesConfig = []TestPackageConfig{ - {Name: "datadog-installer", Version: fmt.Sprintf("pipeline-%v", os.Getenv("E2E_PIPELINE_ID")), Registry: "669783387624.dkr.ecr.us-east-1.amazonaws.com", Auth: "ecr"}, - {Name: "datadog-agent", Alias: "agent-package", Version: fmt.Sprintf("pipeline-%v", os.Getenv("E2E_PIPELINE_ID")), Registry: "669783387624.dkr.ecr.us-east-1.amazonaws.com", Auth: "ecr"}, + {Name: "datadog-installer", Version: fmt.Sprintf("pipeline-%v", os.Getenv("E2E_PIPELINE_ID")), Registry: "installtesting.datad0g.com"}, + {Name: "datadog-agent", Alias: "agent-package", Version: fmt.Sprintf("pipeline-%v", os.Getenv("E2E_PIPELINE_ID")), Registry: "installtesting.datad0g.com"}, {Name: "datadog-apm-inject", Version: "latest"}, {Name: "datadog-apm-library-java", Version: "latest"}, {Name: "datadog-apm-library-ruby", Version: "latest"}, From 7fc4bc502f434a2d8633150ef41ff9b5f0f8642f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20Juli=C3=A1n?= Date: Mon, 16 Dec 2024 15:23:14 +0100 Subject: [PATCH 224/303] [EBPF] gpu: compute utilization based on active GPU (#32023) --- pkg/gpu/aggregator.go | 14 +++++------- pkg/gpu/context.go | 14 ++++++++++++ pkg/gpu/stats.go | 28 ++++++++++++++++++++---- pkg/gpu/stats_test.go | 46 +++++++++++++++++++++++++++++++++++++++ pkg/gpu/testutil/mocks.go | 11 ++++++---- 5 files changed, 97 insertions(+), 16 deletions(-) diff --git a/pkg/gpu/aggregator.go b/pkg/gpu/aggregator.go index 6e907c24428a1..30a20e9146efd 100644 --- a/pkg/gpu/aggregator.go +++ b/pkg/gpu/aggregator.go @@ -38,13 +38,13 @@ type aggregator struct { // processTerminated is true if the process has ended and this aggregator should be deleted processTerminated bool - // sysCtx is the system context with global GPU-system data - sysCtx *systemContext + // deviceMaxThreads is the maximum number of threads the GPU can run in parallel, for utilization calculations + deviceMaxThreads uint64 } -func newAggregator(sysCtx *systemContext) *aggregator { +func newAggregator(deviceMaxThreads uint64) *aggregator { return &aggregator{ - sysCtx: sysCtx, + deviceMaxThreads: deviceMaxThreads, } } @@ -60,8 +60,7 @@ func (agg *aggregator) processKernelSpan(span *kernelSpan) { } durationSec := float64(tsEnd-tsStart) / float64(time.Second.Nanoseconds()) - maxThreads := uint64(agg.sysCtx.maxGpuThreadsPerDevice[0]) // TODO: MultiGPU support not enabled yet - agg.totalThreadSecondsUsed += durationSec * float64(min(span.avgThreadCount, maxThreads)) // we can't use more threads than the GPU has + agg.totalThreadSecondsUsed += durationSec * float64(min(span.avgThreadCount, agg.deviceMaxThreads)) // we can't use more threads than the GPU has } // processPastData takes spans/allocations that have already been closed @@ -86,8 +85,7 @@ func (agg *aggregator) processCurrentData(data *streamData) { func (agg *aggregator) getGPUUtilization() float64 { intervalSecs := float64(agg.measuredIntervalNs) / float64(time.Second.Nanoseconds()) if intervalSecs > 0 { - // TODO: MultiGPU support not enabled yet - availableThreadSeconds := float64(agg.sysCtx.maxGpuThreadsPerDevice[0]) * intervalSecs + availableThreadSeconds := float64(agg.deviceMaxThreads) * intervalSecs return agg.totalThreadSecondsUsed / availableThreadSeconds } diff --git a/pkg/gpu/context.go b/pkg/gpu/context.go index 6c38ae4ad978c..77bac5185339f 100644 --- a/pkg/gpu/context.go +++ b/pkg/gpu/context.go @@ -248,3 +248,17 @@ func (ctx *systemContext) setDeviceSelection(pid int, tid int, deviceIndex int32 ctx.selectedDeviceByPIDAndTID[pid][tid] = deviceIndex } + +// getDeviceByUUID returns the device with the given UUID. +func (ctx *systemContext) getDeviceByUUID(uuid string) (nvml.Device, error) { + for _, dev := range ctx.gpuDevices { + devUUID, ret := dev.GetUUID() + if ret != nvml.SUCCESS { + return nil, fmt.Errorf("error getting device UUID: %s", nvml.ErrorString(ret)) + } + if devUUID == uuid { + return dev, nil + } + } + return nil, fmt.Errorf("device with UUID %s not found", uuid) +} diff --git a/pkg/gpu/stats.go b/pkg/gpu/stats.go index 753fadcf084d9..ba50db6c5226a 100644 --- a/pkg/gpu/stats.go +++ b/pkg/gpu/stats.go @@ -8,8 +8,13 @@ package gpu import ( + "fmt" + + "github.com/NVIDIA/go-nvml/pkg/nvml" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/gpu/model" ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" + "github.com/DataDog/datadog-agent/pkg/util/log" ) // statsGenerator connects to the active stream handlers and generates stats for the GPU monitoring, by distributing @@ -40,7 +45,12 @@ func (g *statsGenerator) getStats(nowKtime int64) *model.GPUStats { g.currGenerationKTime = nowKtime for key, handler := range g.streamHandlers { - aggr := g.getOrCreateAggregator(key) + aggr, err := g.getOrCreateAggregator(key) + if err != nil { + log.Errorf("Error getting or creating aggregator for key %v: %s", key, err) + continue + } + currData := handler.getCurrentData(uint64(nowKtime)) pastData := handler.getPastData(true) @@ -76,7 +86,7 @@ func (g *statsGenerator) getStats(nowKtime int64) *model.GPUStats { return stats } -func (g *statsGenerator) getOrCreateAggregator(sKey streamKey) *aggregator { +func (g *statsGenerator) getOrCreateAggregator(sKey streamKey) (*aggregator, error) { aggKey := model.StatsKey{ PID: sKey.pid, DeviceUUID: sKey.gpuUUID, @@ -84,13 +94,23 @@ func (g *statsGenerator) getOrCreateAggregator(sKey streamKey) *aggregator { } if _, ok := g.aggregators[aggKey]; !ok { - g.aggregators[aggKey] = newAggregator(g.sysCtx) + gpuDevice, err := g.sysCtx.getDeviceByUUID(sKey.gpuUUID) + if err != nil { + return nil, fmt.Errorf("Error getting device by UUID %s: %s", sKey.gpuUUID, err) + } + + maxThreads, ret := gpuDevice.GetNumGpuCores() + if ret != nvml.SUCCESS { + return nil, fmt.Errorf("Error getting number of GPU cores: %s", nvml.ErrorString(ret)) + } + + g.aggregators[aggKey] = newAggregator(uint64(maxThreads)) } // Update the last check time and the measured interval, as these change between check runs g.aggregators[aggKey].lastCheckKtime = uint64(g.lastGenerationKTime) g.aggregators[aggKey].measuredIntervalNs = g.currGenerationKTime - g.lastGenerationKTime - return g.aggregators[aggKey] + return g.aggregators[aggKey], nil } // getNormalizationFactor returns the factor to use for utilization diff --git a/pkg/gpu/stats_test.go b/pkg/gpu/stats_test.go index 4ebbec874ecdc..c0445e6c4e869 100644 --- a/pkg/gpu/stats_test.go +++ b/pkg/gpu/stats_test.go @@ -233,3 +233,49 @@ func TestGetStatsWithPastAndCurrentData(t *testing.T) { expectedUtil := expectedUtilKern1 + expectedUtilKern2 require.InDelta(t, expectedUtil, metrics.UtilizationPercentage, 0.001) } + +func TestGetStatsMultiGPU(t *testing.T) { + statsGen, streamHandlers, ktime := getStatsGeneratorForTest(t) + + startKtime := ktime + int64(1*time.Second) + endKtime := startKtime + int64(1*time.Second) + + pid := uint32(1) + numThreads := uint64(5) + + // Add kernels for all devices + for i, uuid := range testutil.GPUUUIDs { + streamID := uint64(i) + streamKey := streamKey{pid: pid, stream: streamID, gpuUUID: uuid} + streamHandlers[streamKey] = &StreamHandler{ + processEnded: false, + kernelSpans: []*kernelSpan{ + { + startKtime: uint64(startKtime), + endKtime: uint64(endKtime), + avgThreadCount: numThreads, + numKernels: 10, + }, + }, + } + } + + checkDuration := 10 * time.Second + checkKtime := ktime + int64(checkDuration) + stats := statsGen.getStats(checkKtime) + require.NotNil(t, stats) + + // Check the metrics for each device + for i, uuid := range testutil.GPUUUIDs { + metricsKey := model.StatsKey{PID: pid, DeviceUUID: uuid} + metrics := getMetricsEntry(metricsKey, stats) + require.NotNil(t, metrics, "cannot find metrics for key %+v", metricsKey) + + gpuCores := float64(testutil.GPUCores[i]) + threadSecondsUsed := float64(numThreads) * float64(endKtime-startKtime) / 1e9 + threadSecondsAvailable := gpuCores * checkDuration.Seconds() + expectedUtil := threadSecondsUsed / threadSecondsAvailable + + require.InDelta(t, expectedUtil, metrics.UtilizationPercentage, 0.001, "invalid utilization for device %d (uuid=%s)", i, uuid) + } +} diff --git a/pkg/gpu/testutil/mocks.go b/pkg/gpu/testutil/mocks.go index b703a39001ef4..a7dadd39215ad 100644 --- a/pkg/gpu/testutil/mocks.go +++ b/pkg/gpu/testutil/mocks.go @@ -23,20 +23,23 @@ var GPUUUIDs = []string{ "GPU-00000000-1234-1234-1234-123456789014", } +// GPUCores is a list of number of cores for the devices returned by the mock, should be the same length as GPUUUIDs +var GPUCores = []int{DefaultGpuCores, 20, 30} + // DefaultGpuUUID is the UUID for the default device returned by the mock var DefaultGpuUUID = GPUUUIDs[0] // GetDeviceMock returns a mock of the nvml.Device with the given UUID. -func GetDeviceMock(uuid string) *nvmlmock.Device { +func GetDeviceMock(deviceIdx int) *nvmlmock.Device { return &nvmlmock.Device{ GetNumGpuCoresFunc: func() (int, nvml.Return) { - return DefaultGpuCores, nvml.SUCCESS + return GPUCores[deviceIdx], nvml.SUCCESS }, GetCudaComputeCapabilityFunc: func() (int, int, nvml.Return) { return 7, 5, nvml.SUCCESS }, GetUUIDFunc: func() (string, nvml.Return) { - return uuid, nvml.SUCCESS + return GPUUUIDs[deviceIdx], nvml.SUCCESS }, } } @@ -49,7 +52,7 @@ func GetBasicNvmlMock() *nvmlmock.Interface { return len(GPUUUIDs), nvml.SUCCESS }, DeviceGetHandleByIndexFunc: func(index int) (nvml.Device, nvml.Return) { - return GetDeviceMock(GPUUUIDs[index]), nvml.SUCCESS + return GetDeviceMock(index), nvml.SUCCESS }, DeviceGetCudaComputeCapabilityFunc: func(nvml.Device) (int, int, nvml.Return) { return 7, 5, nvml.SUCCESS From ed416e047042c94cd1fbc6cc5def12c0d19c8f90 Mon Sep 17 00:00:00 2001 From: Mackenzie <63265430+mackjmr@users.noreply.github.com> Date: Mon, 16 Dec 2024 16:16:26 +0100 Subject: [PATCH 225/303] Update converter and ddflareextension README (#32105) --- comp/otelcol/converter/README.md | 10 +--------- comp/otelcol/ddflareextension/README.md | 2 +- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/comp/otelcol/converter/README.md b/comp/otelcol/converter/README.md index 31c0c53f7176b..ad8c831ada147 100644 --- a/comp/otelcol/converter/README.md +++ b/comp/otelcol/converter/README.md @@ -1,8 +1,6 @@ # Converter Component -The converter: -- Enhances the user provided configuration -- Provides an API which returns the provided and enhanced configurations +The converter enhances the user provided configuration. ## Autoconfigure logic @@ -32,12 +30,6 @@ If `api_key` is unset, set to an empty string or set to a secret, the converter The converter will automatically set `datadogconnector` config `trace.span_name_as_resource_name` to true in any datadog connectors in your configuration. -## Provided and enhanced config - -`GetProvidedConf` and `GetEnhancedConf` return the string representation of the user provided and autoconfigured conf respectively. Currently, these APIs have two limitations: -- They do not redact sensitive data -- They do not provide the effective config (including defaults...etc) - ## Opting out of converter It is possible to opt out of the converter by setting env var `DD_OTELCOLLECTOR_CONVERTER_ENABLED` or agent config `otelcollector.converter.enabled` to `false` (`true` by default). Please note that by doing so, you are removing functionality including flare collection from otel-agent, health metrics from collector, or infra level tagging on your telemetry data. If you want to opt out of some components, you can disable all and add the components that you require manually: diff --git a/comp/otelcol/ddflareextension/README.md b/comp/otelcol/ddflareextension/README.md index 13f5902877c4e..c54027041c70f 100644 --- a/comp/otelcol/ddflareextension/README.md +++ b/comp/otelcol/ddflareextension/README.md @@ -32,7 +32,7 @@ The port is the location in which the otel-agent will expose the data required t The flare will collect both the provided collector config and the enhanced config (enhanced via [converter](../converter/README.md)). -The provided collector configs can be found in `otel/otel-flare/customer.cfg` and the enhanced config can be found in `otel/otel-flare/customer.cfg`. +The provided collector configs can be found in `otel/otel-flare/customer.cfg` and the enhanced config can be found in `otel/otel-flare/runtime.cfg`. ### Environment variables From 9a5365e40cbaca79d47b7e9b08eb64b491bf18db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Mon, 16 Dec 2024 16:30:01 +0100 Subject: [PATCH 226/303] update last stable version (#32223) --- release.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release.json b/release.json index 24cb211dbbdc3..841e115eac8e4 100644 --- a/release.json +++ b/release.json @@ -3,7 +3,7 @@ "current_milestone": "7.62.0", "last_stable": { "6": "6.53.0", - "7": "7.59.1" + "7": "7.60.0" }, "nightly": { "INTEGRATIONS_CORE_VERSION": "master", From 2daad7fb23614df54a78247f0e1e2c1b3fd458ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9na=C3=AFc=20Huard?= Date: Mon, 16 Dec 2024 16:30:25 +0100 Subject: [PATCH 227/303] [incident-33304] Mark `dogstatsd` e2e tests as flaky (#32220) --- flakes.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/flakes.yaml b/flakes.yaml index ab2af6b55f3ea..bde9554d2f5f7 100644 --- a/flakes.yaml +++ b/flakes.yaml @@ -11,3 +11,8 @@ test/new-e2e/tests/containers: - TestECSSuite/TestCPU/metric___container.cpu.usage{^ecs_container_name:stress-ng$} - TestEKSSuite/TestCPU/metric___container.cpu.usage{^kube_deployment:stress-ng$,^kube_namespace:workload-cpustress$} - TestKindSuite/TestCPU/metric___container.cpu.usage{^kube_deployment:stress-ng$,^kube_namespace:workload-cpustress$} + + - TestEKSSuite/TestDogstatsdInAgent/metric___custom.metric{^kube_deployment:dogstatsd-udp$,^kube_namespace:workload-dogstatsd$} + - TestEKSSuite/TestDogstatsdStandalone/metric___custom.metric{^kube_deployment:dogstatsd-udp$,^kube_namespace:workload-dogstatsd$} + - TestKindSuite/TestDogstatsdInAgent/metric___custom.metric{^kube_deployment:dogstatsd-udp$,^kube_namespace:workload-dogstatsd$} + - TestKindSuite/TestDogstatsdStandalone/metric___custom.metric{^kube_deployment:dogstatsd-udp$,^kube_namespace:workload-dogstatsd$} From 53eec23ed7dd5ab324190d9294c98c36959c2a3d Mon Sep 17 00:00:00 2001 From: Alexandre Yang Date: Mon, 16 Dec 2024 16:30:33 +0100 Subject: [PATCH 228/303] Revert "Revert "[snmp] Add agent_group tag for snmp integration"" + Fix tests (#32198) --- comp/haagent/helpers/helpers.go | 26 ++++++++++ comp/haagent/helpers/helpers_test.go | 33 ++++++++++++ comp/haagent/impl/config.go | 5 +- comp/metadata/host/hostimpl/hosttags/tags.go | 5 +- .../snmp/internal/devicecheck/devicecheck.go | 17 +++++-- .../internal/devicecheck/devicecheck_test.go | 51 ++++++++++++++++--- .../snmp/internal/discovery/discovery.go | 7 ++- .../snmp/internal/discovery/discovery_test.go | 33 +++++++----- .../snmp/internal/discovery/testing.go | 20 -------- pkg/collector/corechecks/snmp/snmp.go | 15 ++++-- pkg/collector/corechecks/snmp/snmp_test.go | 13 ++--- pkg/commonchecks/corechecks.go | 2 +- 12 files changed, 164 insertions(+), 63 deletions(-) create mode 100644 comp/haagent/helpers/helpers.go create mode 100644 comp/haagent/helpers/helpers_test.go delete mode 100644 pkg/collector/corechecks/snmp/internal/discovery/testing.go diff --git a/comp/haagent/helpers/helpers.go b/comp/haagent/helpers/helpers.go new file mode 100644 index 0000000000000..4b5e755e04936 --- /dev/null +++ b/comp/haagent/helpers/helpers.go @@ -0,0 +1,26 @@ +// 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 2024-present Datadog, Inc. + +// Package haagenthelpers provides helpers for haagent component +package haagenthelpers + +import ( + "github.com/DataDog/datadog-agent/pkg/config/model" +) + +// IsEnabled returns true if HA Agent is enabled +func IsEnabled(agentConfig model.Reader) bool { + return agentConfig.GetBool("ha_agent.enabled") +} + +// GetGroup returns HA Agent group +func GetGroup(agentConfig model.Reader) string { + return agentConfig.GetString("ha_agent.group") +} + +// GetHaAgentTags returns HA Agent related tags +func GetHaAgentTags(agentConfig model.Reader) []string { + return []string{"agent_group:" + GetGroup(agentConfig)} +} diff --git a/comp/haagent/helpers/helpers_test.go b/comp/haagent/helpers/helpers_test.go new file mode 100644 index 0000000000000..987ab6a5cccf4 --- /dev/null +++ b/comp/haagent/helpers/helpers_test.go @@ -0,0 +1,33 @@ +// 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 2024-present Datadog, Inc. + +package haagenthelpers + +import ( + "testing" + + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/stretchr/testify/assert" +) + +func TestIsEnabled(t *testing.T) { + cfg := config.NewMock(t) + assert.False(t, IsEnabled(cfg)) + + cfg.SetWithoutSource("ha_agent.enabled", true) + assert.True(t, IsEnabled(cfg)) +} + +func TestGetGroup(t *testing.T) { + cfg := config.NewMock(t) + cfg.SetWithoutSource("ha_agent.group", "my-group") + assert.Equal(t, "my-group", GetGroup(cfg)) +} + +func TestGetHaAgentTags(t *testing.T) { + cfg := config.NewMock(t) + cfg.SetWithoutSource("ha_agent.group", "my-group") + assert.Equal(t, []string{"agent_group:my-group"}, GetHaAgentTags(cfg)) +} diff --git a/comp/haagent/impl/config.go b/comp/haagent/impl/config.go index 2a6c4e20a8d12..ea9f54d9f16ea 100644 --- a/comp/haagent/impl/config.go +++ b/comp/haagent/impl/config.go @@ -7,6 +7,7 @@ package haagentimpl import ( "github.com/DataDog/datadog-agent/comp/core/config" + helpers "github.com/DataDog/datadog-agent/comp/haagent/helpers" ) // validHaIntegrations represent the list of integrations that will be considered as @@ -30,7 +31,7 @@ type haAgentConfigs struct { func newHaAgentConfigs(agentConfig config.Component) *haAgentConfigs { return &haAgentConfigs{ - enabled: agentConfig.GetBool("ha_agent.enabled"), - group: agentConfig.GetString("ha_agent.group"), + enabled: helpers.IsEnabled(agentConfig), + group: helpers.GetGroup(agentConfig), } } diff --git a/comp/metadata/host/hostimpl/hosttags/tags.go b/comp/metadata/host/hostimpl/hosttags/tags.go index 01cfff7c0810f..92d610d49e079 100644 --- a/comp/metadata/host/hostimpl/hosttags/tags.go +++ b/comp/metadata/host/hostimpl/hosttags/tags.go @@ -12,6 +12,7 @@ import ( "strings" "time" + haagenthelpers "github.com/DataDog/datadog-agent/comp/haagent/helpers" "github.com/DataDog/datadog-agent/pkg/config/env" "github.com/DataDog/datadog-agent/pkg/config/model" configUtils "github.com/DataDog/datadog-agent/pkg/config/utils" @@ -133,8 +134,8 @@ func Get(ctx context.Context, cached bool, conf model.Reader) *Tags { hostTags = appendToHostTags(hostTags, clusterNameTags) } - if conf.GetBool("ha_agent.enabled") { - hostTags = appendToHostTags(hostTags, []string{"agent_group:" + conf.GetString("ha_agent.group")}) + if haagenthelpers.IsEnabled(conf) { + hostTags = appendToHostTags(hostTags, haagenthelpers.GetHaAgentTags(conf)) } gceTags := []string{} diff --git a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go index 969fd45d2da52..d23d5642a2470 100644 --- a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go +++ b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go @@ -17,8 +17,9 @@ import ( "go.uber.org/atomic" + "github.com/DataDog/datadog-agent/comp/core/config" + haagenthelpers "github.com/DataDog/datadog-agent/comp/haagent/helpers" "github.com/DataDog/datadog-agent/pkg/collector/externalhost" - pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" configUtils "github.com/DataDog/datadog-agent/pkg/config/utils" "github.com/DataDog/datadog-agent/pkg/metrics/servicecheck" "github.com/DataDog/datadog-agent/pkg/util/hostname/validate" @@ -66,12 +67,13 @@ type DeviceCheck struct { diagnoses *diagnoses.Diagnoses interfaceBandwidthState report.InterfaceBandwidthState cacheKey string + agentConfig config.Component } const cacheKeyPrefix = "snmp-tags" // NewDeviceCheck returns a new DeviceCheck -func NewDeviceCheck(config *checkconfig.CheckConfig, ipAddress string, sessionFactory session.Factory) (*DeviceCheck, error) { +func NewDeviceCheck(config *checkconfig.CheckConfig, ipAddress string, sessionFactory session.Factory, agentConfig config.Component) (*DeviceCheck, error) { newConfig := config.CopyWithNewIP(ipAddress) var devicePinger pinger.Pinger @@ -94,6 +96,7 @@ func NewDeviceCheck(config *checkconfig.CheckConfig, ipAddress string, sessionFa diagnoses: diagnoses.NewDeviceDiagnoses(newConfig.DeviceID), interfaceBandwidthState: report.MakeInterfaceBandwidthState(), cacheKey: cacheKey, + agentConfig: agentConfig, } d.readTagsFromCache() @@ -244,11 +247,19 @@ func (d *DeviceCheck) setDeviceHostExternalTags() { if deviceHostname == "" || err != nil { return } - agentTags := configUtils.GetConfiguredTags(pkgconfigsetup.Datadog(), false) + agentTags := d.buildExternalTags() log.Debugf("Set external tags for device host, host=`%s`, agentTags=`%v`", deviceHostname, agentTags) externalhost.SetExternalTags(deviceHostname, common.SnmpExternalTagsSourceType, agentTags) } +func (d *DeviceCheck) buildExternalTags() []string { + agentTags := configUtils.GetConfiguredTags(d.agentConfig, false) + if haagenthelpers.IsEnabled(d.agentConfig) { + agentTags = append(agentTags, haagenthelpers.GetHaAgentTags(d.agentConfig)...) + } + return agentTags +} + func (d *DeviceCheck) getValuesAndTags() (bool, []string, *valuestore.ResultValueStore, error) { var deviceReachable bool var checkErrors []string diff --git a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go index c56235171d3a2..1e7ad7fc7a001 100644 --- a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go +++ b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go @@ -17,6 +17,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" + agentconfig "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" "github.com/DataDog/datadog-agent/pkg/metrics/servicecheck" "github.com/DataDog/datadog-agent/pkg/version" @@ -57,7 +58,7 @@ profiles: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) assert.Nil(t, err) sender := mocksender.NewMockSender("123") // required to initiate aggregator @@ -197,7 +198,7 @@ global_metrics: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) assert.Nil(t, err) sender := mocksender.NewMockSender("123") // required to initiate aggregator @@ -246,7 +247,7 @@ community_string: public config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", session.NewMockSession) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", session.NewMockSession, agentconfig.NewMock(t)) assert.Nil(t, err) sender := mocksender.NewMockSender("123") // required to initiate aggregator @@ -277,7 +278,7 @@ community_string: public config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", session.NewMockSession) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", session.NewMockSession, agentconfig.NewMock(t)) assert.Nil(t, err) hostname, err := deviceCk.GetDeviceHostname() @@ -343,7 +344,7 @@ profiles: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) assert.Nil(t, err) snmpTags := []string{"snmp_device:1.2.3.4", "device_ip:1.2.3.4", "device_id:default:1.2.3.4", "snmp_profile:f5-big-ip", "device_vendor:f5", "snmp_host:foo_sys_name", @@ -648,7 +649,7 @@ profiles: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) assert.Nil(t, err) sender := mocksender.NewMockSender("123") // required to initiate aggregator @@ -695,7 +696,7 @@ profiles: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) assert.Nil(t, err) // override pinger with mock pinger @@ -846,7 +847,7 @@ profiles: config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) assert.Nil(t, err) - deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory) + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, agentconfig.NewMock(t)) assert.Nil(t, err) // override pinger with mock pinger @@ -967,3 +968,37 @@ profiles: sender.AssertNotCalled(t, "Gauge", pingAvgRttMetric, mock.Anything, mock.Anything, mock.Anything) sender.AssertNotCalled(t, "Gauge", pingPacketLoss, mock.Anything, mock.Anything, mock.Anything) } + +func TestDeviceCheck_buildExternalTags(t *testing.T) { + // GIVEN + profile.SetConfdPathAndCleanProfiles() + sess := session.CreateFakeSession() + sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { + return sess, nil + } + + // language=yaml + rawInstanceConfig := []byte(` +ip_address: 1.2.3.4 +community_string: public +collect_topology: false +`) + // language=yaml + rawInitConfig := []byte(``) + + config, err := checkconfig.NewCheckConfig(rawInstanceConfig, rawInitConfig) + assert.Nil(t, err) + + cfg := agentconfig.NewMock(t) + cfg.SetWithoutSource("ha_agent.enabled", true) + cfg.SetWithoutSource("ha_agent.group", "my-group") + + deviceCk, err := NewDeviceCheck(config, "1.2.3.4", sessionFactory, cfg) + assert.Nil(t, err) + + // WHEN + externalTags := deviceCk.buildExternalTags() + + // THEN + assert.Equal(t, []string{"agent_group:my-group"}, externalTags) +} diff --git a/pkg/collector/corechecks/snmp/internal/discovery/discovery.go b/pkg/collector/corechecks/snmp/internal/discovery/discovery.go index b7fb91915209a..860f3cb781991 100644 --- a/pkg/collector/corechecks/snmp/internal/discovery/discovery.go +++ b/pkg/collector/corechecks/snmp/internal/discovery/discovery.go @@ -14,6 +14,7 @@ import ( "sync" "time" + "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/persistentcache" "github.com/DataDog/datadog-agent/pkg/util/log" "go.uber.org/atomic" @@ -43,6 +44,7 @@ type Discovery struct { discoveredDevices map[checkconfig.DeviceDigest]Device sessionFactory session.Factory + agentConfig config.Component } // Device implements and store results from the Service interface for the SNMP listener @@ -237,7 +239,7 @@ func (d *Discovery) getDevicesFound() []string { } func (d *Discovery) createDevice(deviceDigest checkconfig.DeviceDigest, subnet *snmpSubnet, deviceIP string, writeCache bool) { - deviceCk, err := devicecheck.NewDeviceCheck(subnet.config, deviceIP, d.sessionFactory) + deviceCk, err := devicecheck.NewDeviceCheck(subnet.config, deviceIP, d.sessionFactory, d.agentConfig) if err != nil { // should not happen since the deviceCheck is expected to be valid at this point // and are only changing the device ip @@ -335,11 +337,12 @@ func (d *Discovery) writeCache(subnet *snmpSubnet) { } // NewDiscovery return a new Discovery instance -func NewDiscovery(config *checkconfig.CheckConfig, sessionFactory session.Factory) *Discovery { +func NewDiscovery(config *checkconfig.CheckConfig, sessionFactory session.Factory, agentConfig config.Component) *Discovery { return &Discovery{ discoveredDevices: make(map[checkconfig.DeviceDigest]Device), stop: make(chan struct{}), config: config, sessionFactory: sessionFactory, + agentConfig: agentConfig, } } diff --git a/pkg/collector/corechecks/snmp/internal/discovery/discovery_test.go b/pkg/collector/corechecks/snmp/internal/discovery/discovery_test.go index 9d59def5890d0..4ca8ccc302bf2 100644 --- a/pkg/collector/corechecks/snmp/internal/discovery/discovery_test.go +++ b/pkg/collector/corechecks/snmp/internal/discovery/discovery_test.go @@ -8,16 +8,15 @@ package discovery import ( "fmt" "net" - "path/filepath" "testing" "time" "github.com/gosnmp/gosnmp" "github.com/stretchr/testify/assert" + agentconfig "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/checkconfig" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/session" - pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" ) func waitForDiscoveredDevices(discovery *Discovery, expectedDeviceCount int, timeout time.Duration) error { @@ -33,8 +32,8 @@ func waitForDiscoveredDevices(discovery *Discovery, expectedDeviceCount int, tim } func TestDiscovery(t *testing.T) { - path, _ := filepath.Abs(filepath.Join(".", "test", "run_path", "TestDiscovery")) - pkgconfigsetup.Datadog().SetWithoutSource("run_path", path) + config := agentconfig.NewMock(t) + config.SetWithoutSource("run_path", t.TempDir()) sess := session.CreateMockSession() sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { @@ -59,7 +58,7 @@ func TestDiscovery(t *testing.T) { DiscoveryWorkers: 1, IgnoredIPAddresses: map[string]bool{"192.168.0.5": true}, } - discovery := NewDiscovery(checkConfig, sessionFactory) + discovery := NewDiscovery(checkConfig, sessionFactory, config) discovery.Start() assert.NoError(t, waitForDiscoveredDevices(discovery, 7, 2*time.Second)) discovery.Stop() @@ -84,8 +83,8 @@ func TestDiscovery(t *testing.T) { } func TestDiscoveryCache(t *testing.T) { - path, _ := filepath.Abs(filepath.Join(".", "test", "run_path", "TestDiscoveryCache")) - pkgconfigsetup.Datadog().SetWithoutSource("run_path", path) + config := agentconfig.NewMock(t) + config.SetWithoutSource("run_path", t.TempDir()) sess := session.CreateMockSession() sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { @@ -109,7 +108,7 @@ func TestDiscoveryCache(t *testing.T) { DiscoveryInterval: 3600, DiscoveryWorkers: 1, } - discovery := NewDiscovery(checkConfig, sessionFactory) + discovery := NewDiscovery(checkConfig, sessionFactory, config) discovery.Start() assert.NoError(t, waitForDiscoveredDevices(discovery, 4, 2*time.Second)) discovery.Stop() @@ -141,7 +140,7 @@ func TestDiscoveryCache(t *testing.T) { DiscoveryInterval: 3600, DiscoveryWorkers: 0, // no workers, the devices will be loaded from cache } - discovery2 := NewDiscovery(checkConfig, sessionFactory) + discovery2 := NewDiscovery(checkConfig, sessionFactory, config) discovery2.Start() assert.NoError(t, waitForDiscoveredDevices(discovery2, 4, 2*time.Second)) discovery2.Stop() @@ -158,6 +157,9 @@ func TestDiscoveryCache(t *testing.T) { func TestDiscoveryTicker(t *testing.T) { t.Skip() // TODO: FIX ME, currently this test is leading to data race when ran with other tests + config := agentconfig.NewMock(t) + config.SetWithoutSource("run_path", t.TempDir()) + sess := session.CreateMockSession() sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { return sess, nil @@ -180,7 +182,7 @@ func TestDiscoveryTicker(t *testing.T) { DiscoveryInterval: 1, DiscoveryWorkers: 1, } - discovery := NewDiscovery(checkConfig, sessionFactory) + discovery := NewDiscovery(checkConfig, sessionFactory, config) discovery.Start() time.Sleep(1500 * time.Millisecond) discovery.Stop() @@ -191,7 +193,8 @@ func TestDiscoveryTicker(t *testing.T) { } func TestDiscovery_checkDevice(t *testing.T) { - SetTestRunPath() + config := agentconfig.NewMock(t) + config.SetWithoutSource("run_path", t.TempDir()) checkConfig := &checkconfig.CheckConfig{ Network: "192.168.0.0/32", CommunityString: "public", @@ -227,7 +230,7 @@ func TestDiscovery_checkDevice(t *testing.T) { } var sess *session.MockSession - discovery := NewDiscovery(checkConfig, session.NewMockSession) + discovery := NewDiscovery(checkConfig, session.NewMockSession, config) checkDeviceOnce := func() { sess = session.CreateMockSession() @@ -306,7 +309,9 @@ func TestDiscovery_checkDevice(t *testing.T) { } func TestDiscovery_createDevice(t *testing.T) { - SetTestRunPath() + config := agentconfig.NewMock(t) + config.SetWithoutSource("run_path", t.TempDir()) + checkConfig := &checkconfig.CheckConfig{ Network: "192.168.0.0/32", CommunityString: "public", @@ -315,7 +320,7 @@ func TestDiscovery_createDevice(t *testing.T) { DiscoveryAllowedFailures: 3, Namespace: "default", } - discovery := NewDiscovery(checkConfig, session.NewMockSession) + discovery := NewDiscovery(checkConfig, session.NewMockSession, config) ipAddr, ipNet, err := net.ParseCIDR(checkConfig.Network) assert.Nil(t, err) startingIP := ipAddr.Mask(ipNet.Mask) diff --git a/pkg/collector/corechecks/snmp/internal/discovery/testing.go b/pkg/collector/corechecks/snmp/internal/discovery/testing.go deleted file mode 100644 index 820bc1747acd7..0000000000000 --- a/pkg/collector/corechecks/snmp/internal/discovery/testing.go +++ /dev/null @@ -1,20 +0,0 @@ -// 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. - -//go:build test - -package discovery - -import ( - "path/filepath" - - pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" -) - -// SetTestRunPath sets run_path for testing -func SetTestRunPath() { - path, _ := filepath.Abs(filepath.Join(".", "test", "run_path")) - pkgconfigsetup.Datadog().SetWithoutSource("run_path", path) -} diff --git a/pkg/collector/corechecks/snmp/snmp.go b/pkg/collector/corechecks/snmp/snmp.go index 6b59932b057c6..29e2ae2327c5b 100644 --- a/pkg/collector/corechecks/snmp/snmp.go +++ b/pkg/collector/corechecks/snmp/snmp.go @@ -11,6 +11,7 @@ import ( "sync" "time" + "github.com/DataDog/datadog-agent/comp/core/config" "go.uber.org/atomic" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" @@ -44,6 +45,7 @@ type Check struct { discovery *discovery.Discovery sessionFactory session.Factory workerRunDeviceCheckErrors *atomic.Uint64 + agentConfig config.Component } // Run executes the check @@ -155,10 +157,10 @@ func (c *Check) Configure(senderManager sender.SenderManager, integrationConfigD } if c.config.IsDiscovery() { - c.discovery = discovery.NewDiscovery(c.config, c.sessionFactory) + c.discovery = discovery.NewDiscovery(c.config, c.sessionFactory, c.agentConfig) c.discovery.Start() } else { - c.singleDeviceCk, err = devicecheck.NewDeviceCheck(c.config, c.config.IPAddress, c.sessionFactory) + c.singleDeviceCk, err = devicecheck.NewDeviceCheck(c.config, c.config.IPAddress, c.sessionFactory, c.agentConfig) if err != nil { return fmt.Errorf("failed to create device check: %s", err) } @@ -196,14 +198,17 @@ func (c *Check) GetDiagnoses() ([]diagnosis.Diagnosis, error) { } // Factory creates a new check factory -func Factory() optional.Option[func() check.Check] { - return optional.NewOption(newCheck) +func Factory(agentConfig config.Component) optional.Option[func() check.Check] { + return optional.NewOption(func() check.Check { + return newCheck(agentConfig) + }) } -func newCheck() check.Check { +func newCheck(agentConfig config.Component) check.Check { return &Check{ CheckBase: core.NewCheckBase(common.SnmpIntegrationName), sessionFactory: session.NewGosnmpSession, workerRunDeviceCheckErrors: atomic.NewUint64(0), + agentConfig: agentConfig, } } diff --git a/pkg/collector/corechecks/snmp/snmp_test.go b/pkg/collector/corechecks/snmp/snmp_test.go index 88513ca8ce0d3..2f1095dc52027 100644 --- a/pkg/collector/corechecks/snmp/snmp_test.go +++ b/pkg/collector/corechecks/snmp/snmp_test.go @@ -25,6 +25,7 @@ import ( "github.com/DataDog/datadog-agent/comp/aggregator/demultiplexer/demultiplexerimpl" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" + agentconfig "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/forwarder/defaultforwarder" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" "github.com/DataDog/datadog-agent/pkg/collector/externalhost" @@ -996,10 +997,10 @@ community_string: public func TestCheckID(t *testing.T) { profile.SetConfdPathAndCleanProfiles() - check1 := newCheck() - check2 := newCheck() - check3 := newCheck() - checkSubnet := newCheck() + check1 := newCheck(agentconfig.NewMock(t)) + check2 := newCheck(agentconfig.NewMock(t)) + check3 := newCheck(agentconfig.NewMock(t)) + checkSubnet := newCheck(agentconfig.NewMock(t)) // language=yaml rawInstanceConfig1 := []byte(` ip_address: 1.1.1.1 @@ -2165,7 +2166,7 @@ func TestDeviceIDAsHostname(t *testing.T) { sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { return sess, nil } - chk := Check{sessionFactory: sessionFactory} + chk := Check{sessionFactory: sessionFactory, agentConfig: agentconfig.NewMock(t)} pkgconfigsetup.Datadog().SetWithoutSource("hostname", "test-hostname") pkgconfigsetup.Datadog().SetWithoutSource("tags", []string{"agent_tag1:val1", "agent_tag2:val2"}) senderManager := deps.Demultiplexer @@ -2358,7 +2359,7 @@ func TestDiscoveryDeviceIDAsHostname(t *testing.T) { sessionFactory := func(*checkconfig.CheckConfig) (session.Session, error) { return sess, nil } - chk := Check{sessionFactory: sessionFactory} + chk := Check{sessionFactory: sessionFactory, agentConfig: agentconfig.NewMock(t)} pkgconfigsetup.Datadog().SetWithoutSource("hostname", "my-hostname") senderManager := deps.Demultiplexer diff --git a/pkg/commonchecks/corechecks.go b/pkg/commonchecks/corechecks.go index 9af1e7f9833c8..cb20f9412ab2a 100644 --- a/pkg/commonchecks/corechecks.go +++ b/pkg/commonchecks/corechecks.go @@ -62,7 +62,7 @@ func RegisterChecks(store workloadmeta.Component, tagger tagger.Component, cfg c corecheckLoader.RegisterCheck(uptime.CheckName, uptime.Factory()) corecheckLoader.RegisterCheck(telemetryCheck.CheckName, telemetryCheck.Factory(telemetry)) corecheckLoader.RegisterCheck(ntp.CheckName, ntp.Factory()) - corecheckLoader.RegisterCheck(snmp.CheckName, snmp.Factory()) + corecheckLoader.RegisterCheck(snmp.CheckName, snmp.Factory(cfg)) corecheckLoader.RegisterCheck(networkpath.CheckName, networkpath.Factory(telemetry)) corecheckLoader.RegisterCheck(io.CheckName, io.Factory()) corecheckLoader.RegisterCheck(filehandles.CheckName, filehandles.Factory()) From 5b903ef9eef116f41bea415f3f58f0ad031eba8a Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Mon, 16 Dec 2024 16:30:49 +0100 Subject: [PATCH 229/303] fix(build_rc): Enable compatibility with agent6 (#32100) --- tasks/libs/common/gomodules.py | 7 +++++- tasks/pipeline.py | 43 +++------------------------------- 2 files changed, 9 insertions(+), 41 deletions(-) diff --git a/tasks/libs/common/gomodules.py b/tasks/libs/common/gomodules.py index bd37387a010a2..e4805588f73f5 100644 --- a/tasks/libs/common/gomodules.py +++ b/tasks/libs/common/gomodules.py @@ -252,8 +252,13 @@ def tag(self, agent_version): >>> [mod.tag("7.27.0") for mod in mods] [["7.27.0"], ["pkg/util/log/v0.27.0"]] """ + from invoke import Context + + from tasks.libs.common.git import is_agent6 + + major = "6" if is_agent6(Context()) else "7" if self.path == ".": - return ["7" + agent_version[1:]] + return [major + agent_version[1:]] return [f"{self.path}/{self.__version(agent_version)}"] diff --git a/tasks/pipeline.py b/tasks/pipeline.py index bff7b05b8b1ab..59aa6a3666172 100644 --- a/tasks/pipeline.py +++ b/tasks/pipeline.py @@ -43,11 +43,9 @@ # Tasks to trigger pipelines -def check_deploy_pipeline(repo: Project, git_ref: str, release_version_6, release_version_7, repo_branch): +def check_deploy_pipeline(repo_branch): """ - Run checks to verify a deploy pipeline is valid: - - it targets a valid repo branch - - it has matching Agent 6 and Agent 7 tags (depending on release_version_* values) + Run checks to verify a deploy pipeline is valid (it targets a valid repo branch) """ # Check that the target repo branch is valid @@ -57,41 +55,6 @@ def check_deploy_pipeline(repo: Project, git_ref: str, release_version_6, releas ) raise Exit(code=1) - # - # If git_ref matches v7 pattern and release_version_6 is not empty, make sure Gitlab has v6 tag. - # If git_ref matches v6 pattern and release_version_7 is not empty, make sure Gitlab has v7 tag. - # v7 version pattern should be able to match 7.12.24-rc2 and 7.12.34 - # - v7_pattern = r'^7\.(\d+\.\d+)(-.+|)$' - v6_pattern = r'^6\.(\d+\.\d+)(-.+|)$' - - match = re.match(v7_pattern, git_ref) - - # TODO(@spencergilbert): remove cross reference check when all references to a6 are removed - if release_version_6 and match: - # release_version_6 is not empty and git_ref matches v7 pattern, construct v6 tag and check. - tag_name = "6." + "".join(match.groups()) - try: - repo.tags.get(tag_name) - except GitlabError: - print(f"Cannot find GitLab v6 tag {tag_name} while trying to build git ref {git_ref}") - print("v6 tags are no longer created, this check will be removed in a later commit") - - print(f"Successfully cross checked v6 tag {tag_name} and git ref {git_ref}") - else: - match = re.match(v6_pattern, git_ref) - - if release_version_7 and match: - # release_version_7 is not empty and git_ref matches v6 pattern, construct v7 tag and check. - tag_name = "7." + "".join(match.groups()) - try: - repo.tags.get(tag_name) - except GitlabError as e: - print(f"Cannot find GitLab v7 tag {tag_name} while trying to build git ref {git_ref}") - raise Exit(code=1) from e - - print(f"Successfully cross checked v7 tag {tag_name} and git ref {git_ref}") - @task def clean_running_pipelines(ctx, git_ref=None, here=False, use_latest_sha=False, sha=None): @@ -292,7 +255,7 @@ def run( if deploy or deploy_installer: # Check the validity of the deploy pipeline - check_deploy_pipeline(repo, git_ref, release_version_6, release_version_7, repo_branch) + check_deploy_pipeline(repo_branch) # Force all builds and e2e tests to be run if not all_builds: print( From 62639e3a6ebd6f4580195ec945bb0da4dcf718be Mon Sep 17 00:00:00 2001 From: Branden Clark Date: Mon, 16 Dec 2024 12:02:21 -0500 Subject: [PATCH 230/303] Build FIPS Agent chocolatey package (#32070) --- .gitlab-ci.yml | 4 +- .gitlab/choco_build/choco_build.yml | 36 ++- .../offline}/datadog-agent-offline.nuspec | 2 +- .../offline/tools}/VERIFICATION.txt | 0 .../offline/tools}/chocolateyinstall.ps1 | 0 .../online}/datadog-agent-online.nuspec | 2 +- .../online/tools}/VERIFICATION.txt | 0 .../online/tools}/chocolateyinstall.ps1 | 0 .../online/datadog-fips-agent-online.nuspec | 31 +++ .../online/tools/VERIFICATION.txt | 5 + .../online/tools/chocolateyinstall.ps1 | 27 ++ .../Generate-Chocolatey-Package.ps1 | 230 ++++++++++++------ tasks/winbuildscripts/chocopack.bat | 11 - 13 files changed, 258 insertions(+), 90 deletions(-) rename chocolatey/{ => datadog-agent/offline}/datadog-agent-offline.nuspec (97%) rename chocolatey/{tools-offline => datadog-agent/offline/tools}/VERIFICATION.txt (100%) rename chocolatey/{tools-offline => datadog-agent/offline/tools}/chocolateyinstall.ps1 (100%) rename chocolatey/{ => datadog-agent/online}/datadog-agent-online.nuspec (97%) rename chocolatey/{tools-online => datadog-agent/online/tools}/VERIFICATION.txt (100%) rename chocolatey/{tools-online => datadog-agent/online/tools}/chocolateyinstall.ps1 (100%) create mode 100644 chocolatey/datadog-fips-agent/online/datadog-fips-agent-online.nuspec create mode 100644 chocolatey/datadog-fips-agent/online/tools/VERIFICATION.txt create mode 100644 chocolatey/datadog-fips-agent/online/tools/chocolateyinstall.ps1 delete mode 100644 tasks/winbuildscripts/chocopack.bat diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 05351cee64faf..8d256885317c3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -584,8 +584,10 @@ workflow: when: always .on_deploy_stable_or_beta_repo_branch: + - !reference [.except_mergequeue] - <<: *if_not_stable_or_beta_repo_branch - when: never + when: manual + allow_failure: true - <<: *if_deploy .on_deploy_stable_or_beta_repo_branch_manual: diff --git a/.gitlab/choco_build/choco_build.yml b/.gitlab/choco_build/choco_build.yml index 97ef76cd478f0..8ec5bac814d18 100644 --- a/.gitlab/choco_build/choco_build.yml +++ b/.gitlab/choco_build/choco_build.yml @@ -14,8 +14,13 @@ windows_choco_offline_7_x64: script: - $ErrorActionPreference = "Stop" - Get-ChildItem omnibus\pkg - - copy omnibus\pkg\*.msi .\chocolatey\tools-offline\ - - docker run --rm -v "$(Get-Location):c:\mnt" registry.ddbuild.io/ci/datadog-agent-buildimages/windows_1809_${ARCH}${Env:DATADOG_AGENT_WINBUILDIMAGES_SUFFIX}:${Env:DATADOG_AGENT_WINBUILDIMAGES} c:\mnt\tasks\winbuildscripts\chocopack.bat offline + - copy omnibus\pkg\*.msi .\chocolatey\datadog-agent\offline\tools\ + - > + docker run --rm + -v "$(Get-Location):c:\mnt" + -e AWS_NETWORKING=true + registry.ddbuild.io/ci/datadog-agent-buildimages/windows_1809_${ARCH}${Env:DATADOG_AGENT_WINBUILDIMAGES_SUFFIX}:${Env:DATADOG_AGENT_WINBUILDIMAGES} + powershell.exe -C "C:\mnt\tasks\winbuildscripts\Generate-Chocolatey-Package.ps1 -InstallMethod offline -Flavor $FLAVOR -InstallDeps 1" - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } - copy build-out\*.nupkg omnibus\pkg artifacts: @@ -24,12 +29,11 @@ windows_choco_offline_7_x64: - omnibus/pkg # The online version of the choco job gets the msi package through the gitlab artifacts -windows_choco_online_7_x64: +.windows_choco_online_7_x64: rules: !reference [.on_deploy_stable_or_beta_repo_branch] stage: choco_and_install_script_build tags: ["runner:windows-docker", "windowsversion:1809"] - needs: ["deploy_packages_windows-x64-7"] variables: ARCH: "x64" script: @@ -43,10 +47,12 @@ windows_choco_online_7_x64: - > docker run --rm -v "$(Get-Location):c:\mnt" + -e CI_PROJECT_NAME=${CI_PROJECT_NAME} -e CI_PIPELINE_ID=${CI_PIPELINE_ID} -e BUCKET_BRANCH="$BUCKET_BRANCH" + -e AWS_NETWORKING=true registry.ddbuild.io/ci/datadog-agent-buildimages/windows_1809_${ARCH}${Env:DATADOG_AGENT_WINBUILDIMAGES_SUFFIX}:${Env:DATADOG_AGENT_WINBUILDIMAGES} - c:\mnt\tasks\winbuildscripts\chocopack.bat online c:\mnt\temp + powershell.exe -C "C:\mnt\tasks\winbuildscripts\Generate-Chocolatey-Package.ps1 -InstallMethod online -MSIDirectory c:\mnt\temp -Flavor $FLAVOR -InstallDeps 1" - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } - Remove-Item -Path "temp\" -Recurse -Force - copy build-out\*.nupkg omnibus\pkg @@ -58,3 +64,23 @@ windows_choco_online_7_x64: - omnibus/pkg # Sometimes Chocolatey is flakey retry: 2 + +windows_choco_online_7_x64: + extends: .windows_choco_online_7_x64 + # On dev/PR branches: + # - if the job is run manually it will create a package, but before the + # package can be installed, the deploy_windows_testing-a7 job must + # be run to push the MSI to the dd-agent-mstesting bucket. + needs: ["windows_msi_and_bosh_zip_x64-a7"] + variables: + FLAVOR: "datadog-agent" + +windows_choco_online_7_x64-fips: + extends: .windows_choco_online_7_x64 + # On dev/PR branches: + # - if the job is run manually it will create a package, but before the + # package can be installed, the deploy_windows_testing-a7-fips job must + # be run to push the MSI to the dd-agent-mstesting bucket. + needs: ["windows_msi_and_bosh_zip_x64-a7-fips"] + variables: + FLAVOR: "datadog-fips-agent" diff --git a/chocolatey/datadog-agent-offline.nuspec b/chocolatey/datadog-agent/offline/datadog-agent-offline.nuspec similarity index 97% rename from chocolatey/datadog-agent-offline.nuspec rename to chocolatey/datadog-agent/offline/datadog-agent-offline.nuspec index d049625a0ef3b..aedf9555a1c51 100644 --- a/chocolatey/datadog-agent-offline.nuspec +++ b/chocolatey/datadog-agent/offline/datadog-agent-offline.nuspec @@ -26,6 +26,6 @@ For example, to set the API key you may run: $release_notes$ - + diff --git a/chocolatey/tools-offline/VERIFICATION.txt b/chocolatey/datadog-agent/offline/tools/VERIFICATION.txt similarity index 100% rename from chocolatey/tools-offline/VERIFICATION.txt rename to chocolatey/datadog-agent/offline/tools/VERIFICATION.txt diff --git a/chocolatey/tools-offline/chocolateyinstall.ps1 b/chocolatey/datadog-agent/offline/tools/chocolateyinstall.ps1 similarity index 100% rename from chocolatey/tools-offline/chocolateyinstall.ps1 rename to chocolatey/datadog-agent/offline/tools/chocolateyinstall.ps1 diff --git a/chocolatey/datadog-agent-online.nuspec b/chocolatey/datadog-agent/online/datadog-agent-online.nuspec similarity index 97% rename from chocolatey/datadog-agent-online.nuspec rename to chocolatey/datadog-agent/online/datadog-agent-online.nuspec index d3cf3133a1a98..73f96bfb83871 100644 --- a/chocolatey/datadog-agent-online.nuspec +++ b/chocolatey/datadog-agent/online/datadog-agent-online.nuspec @@ -26,6 +26,6 @@ For example, to set the API key you may run: $release_notes$ - + diff --git a/chocolatey/tools-online/VERIFICATION.txt b/chocolatey/datadog-agent/online/tools/VERIFICATION.txt similarity index 100% rename from chocolatey/tools-online/VERIFICATION.txt rename to chocolatey/datadog-agent/online/tools/VERIFICATION.txt diff --git a/chocolatey/tools-online/chocolateyinstall.ps1 b/chocolatey/datadog-agent/online/tools/chocolateyinstall.ps1 similarity index 100% rename from chocolatey/tools-online/chocolateyinstall.ps1 rename to chocolatey/datadog-agent/online/tools/chocolateyinstall.ps1 diff --git a/chocolatey/datadog-fips-agent/online/datadog-fips-agent-online.nuspec b/chocolatey/datadog-fips-agent/online/datadog-fips-agent-online.nuspec new file mode 100644 index 0000000000000..90b6de924c628 --- /dev/null +++ b/chocolatey/datadog-fips-agent/online/datadog-fips-agent-online.nuspec @@ -0,0 +1,31 @@ + + + + datadog-fips-agent + $version$ + https://github.com/DataDog/datadog-agent/tree/main/chocolatey + Datadog + Datadog FIPS Agent + Datadog + https://github.com/DataDog/datadog-agent + https://datadog-prod.imgix.net/img/dd_logo_70x75.png + $copyright$ + https://raw.githubusercontent.com/DataDog/datadog-agent/main/LICENSE + true + https://docs.datadoghq.com + datadog agent monitoring admin + The Datadog FIPS Agent for Microsoft Windows + The Datadog FIPS Agent faithfully collects events and metrics and brings them to Datadog on your behalf so that you can do something useful with your monitoring and performance data. + +## Package settings + +You may set [custom settings](https://docs.datadoghq.com/agent/basic_agent_usage/windows/?tab=commandline#installation) to the Agent when installing by using the [`--installer-arguments` option of `choco install`](https://chocolatey.org/docs/getting-started#overriding-default-install-directory-or-other-advanced-install-concepts). + +For example, to set the API key you may run: +`choco install -ia="APIKEY=""YOUR_DATADOG_API_KEY""" datadog-fips-agent` + $release_notes$ + + + + + diff --git a/chocolatey/datadog-fips-agent/online/tools/VERIFICATION.txt b/chocolatey/datadog-fips-agent/online/tools/VERIFICATION.txt new file mode 100644 index 0000000000000..b13ab096f9a76 --- /dev/null +++ b/chocolatey/datadog-fips-agent/online/tools/VERIFICATION.txt @@ -0,0 +1,5 @@ +VERIFICATION +Verification is intended to assist the Chocolatey moderators and community in verifying that this package's contents are trustworthy. + +This package is published by Datadog itself. +The binaries are identical to other package types for the Datadog FIPS Agent. diff --git a/chocolatey/datadog-fips-agent/online/tools/chocolateyinstall.ps1 b/chocolatey/datadog-fips-agent/online/tools/chocolateyinstall.ps1 new file mode 100644 index 0000000000000..d928fdf7bff78 --- /dev/null +++ b/chocolatey/datadog-fips-agent/online/tools/chocolateyinstall.ps1 @@ -0,0 +1,27 @@ +$ErrorActionPreference = 'Stop'; + +$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)" +$packageArgs = @{ + packageName = $env:ChocolateyPackageName + unzipLocation = $toolsDir + fileType = 'msi' + # Note: Url is replaced at build time with the full URL to the MSI + url64bit = $__url_from_ci__ + checksum64 = $__checksum_from_ci__ + checksumType = 'sha256' + softwareName = "Datadog FIPS Agent" + silentArgs = "/qn /norestart /l*v `"$($env:TEMP)\$($packageName).$($env:chocolateyPackageVersion).MsiInstall.log`"" + validExitCodes= @(0, 3010, 1641) +} +Install-ChocolateyPackage @packageArgs + +$installInfo = @" +--- +install_method: + tool: chocolatey + tool_version: chocolatey-$($env:CHOCOLATEY_VERSION) + installer_version: chocolatey_package-online +"@ + +$appDataDir = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Datadog\Datadog Agent").ConfigRoot +Out-File -FilePath $appDataDir\install_info -InputObject $installInfo diff --git a/tasks/winbuildscripts/Generate-Chocolatey-Package.ps1 b/tasks/winbuildscripts/Generate-Chocolatey-Package.ps1 index 9780b4a3a4103..991317602152f 100644 --- a/tasks/winbuildscripts/Generate-Chocolatey-Package.ps1 +++ b/tasks/winbuildscripts/Generate-Chocolatey-Package.ps1 @@ -1,97 +1,185 @@ +<# +.SYNOPSIS +Generates a Chocolatey package for the Datadog Agent. + +.PARAMETER installMethod +Specifies the installation method. Valid values are "offline" and "online". This parameter is mandatory. + +.PARAMETER msiDirectory +Specifies the directory containing the MSI file that will be used to calculate the checksum. This parameter is mandatory when the installMethod is "online". + +.PARAMETER Flavor +Specifies the flavor of the Datadog Agent. The default value is "datadog-agent". + +.PARAMETER VersionOverride +Overrides the Agent version when building packages locally for testing. + +.PARAMETER InstallDeps +Indicates whether to install dependencies. The default value is $true. + +.EXAMPLE +.\Generate-Chocolatey-Package.ps1 -installMethod online -Flavor datadog-agent -VersionOverride "7.62.0" -msiDirectory C:\mnt\omnibus\pkg\ + +Generates a chocolatey package for 7.62.0, requires the MSI file to be present in MSIDirectory. + +.EXAMPLE +$env:CI_PIPELINE_ID="50910739"; .\Generate-Chocolatey-Package.ps1 -installMethod online -Flavor datadog-agent -VersionOverride "7.62.0-devel.git.276.e59b1b3.pipeline.50910739" -msiDirectory C:\mnt\omnibus\pkg + +Generates a chocolatey package for PR/devel build 7.62.0-devel.git.276.e59b1b3.pipeline.50910739, requires the MSI file to be present in MSIDirectory. +The generated chocolatey package requires the MSI be uploaded to the dd-agent-mstesting bucket. +#> Param( - [Parameter(Mandatory=$true,Position=0)] + [Parameter(Mandatory=$true)] [ValidateSet("offline", "online")] [String] $installMethod, - [Parameter(Mandatory=$false,Position=1)] - [String] - $msiDirectory + [Parameter(Mandatory=$false)] + [String] + $msiDirectory, + + [Parameter(Mandatory=$false)] + [ValidateSet("datadog-agent", "datadog-fips-agent")] + [String] + $Flavor = "datadog-agent", + + [Parameter(Mandatory=$false)] + [String] + $VersionOverride, + + [bool] $InstallDeps = $true ) $ErrorActionPreference = 'Stop'; Set-Location c:\mnt -# Install chocolatey binary -$env:chocolateyUseWindowsCompression = 'true'; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) - -# Install dev tools, including invoke -pip3 install -r requirements.txt +if ($InstallDeps) { + # Install chocolatey + $env:chocolateyUseWindowsCompression = 'true'; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) + # Install dev tools, including invoke + pip3 install -r requirements.txt +} -$outputDirectory = "c:\mnt\build-out" -$rawAgentVersion = (inv agent.version --url-safe --major-version 7) +$repoRoot = "C:\mnt" +$outputDirectory = "$repoRoot\build-out" +if (![string]::IsNullOrEmpty($VersionOverride)) { + $rawAgentVersion = $VersionOverride +} else { + $rawAgentVersion = (inv agent.version --url-safe --major-version 7) +} $copyright = "Datadog {0}" -f (Get-Date).Year $releasePattern = "(\d+\.\d+\.\d+)" $releaseCandidatePattern = "(\d+\.\d+\.\d+)-rc\.(\d+)" $develPattern = "(\d+\.\d+\.\d+)-devel\.git\.\d+\.(.+)" -$nuspecFile = "c:\mnt\chocolatey\datadog-agent-online.nuspec" -$licensePath = "c:\mnt\chocolatey\tools-online\LICENSE.txt" -$installScript = "c:\mnt\chocolatey\tools-online\chocolateyinstall.ps1" - -if ($installMethod -eq "offline") { - $nuspecFile = "c:\mnt\chocolatey\datadog-agent-offline.nuspec" - $licensePath = "c:\mnt\chocolatey\tools-offline\LICENSE.txt" +# Build the package in a temporary directory +# Some of the build steps modify the package source, so we don't want to do this in the source directory +$buildTempDir = [System.IO.Path]::GetTempPath() + "\datadog-choco-build" +if (Test-Path $buildTempDir) { + Remove-Item -Recurse -Force $buildTempDir } - -if ($rawAgentVersion -match $releaseCandidatePattern) { - $agentVersionMatches = $rawAgentVersion | Select-String -Pattern $releaseCandidatePattern - $agentVersion = "{0}-rc-{1}" -f $agentVersionMatches.Matches.Groups[1], $agentVersionMatches.Matches.Groups[2].Value - # We don't have release notes for RCs but this way the user can always see what commits are included in this RC - $releaseNotes = "https://github.com/DataDog/datadog-agent/releases/tag/{0}-rc.{1}" -f $agentVersionMatches.Matches.Groups[1], $agentVersionMatches.Matches.Groups[2] - $url = "https://s3.amazonaws.com/dd-agent-mstesting/builds/beta/ddagent-cli-$($agentVersionMatches.Matches.Groups[1])-rc.$($agentVersionMatches.Matches.Groups[2]).msi" -} elseif ($rawAgentVersion -match $develPattern) { - if ($installMethod -eq "online") { - # We don't publish online chocolatey packages for dev branches, error out - Write-Host "Chocolatey packages are not built for dev branches aborting" - exit 2 +New-Item -ItemType Directory -Path $buildTempDir | Out-Null +Push-Location -Path $buildTempDir +try { + # Set the artifact name and package source based on the flavor + if ($Flavor -eq "datadog-agent") { + # For historical reasons, use a different artifact name for the datadog-agent flavor + # See agent-release-management for more details + $artifactName = "ddagent-cli" + $packageSource = "$repoRoot\chocolatey\datadog-agent\$installMethod" + $nuspecFile = "datadog-agent-$installMethod.nuspec" + } elseif ($Flavor -eq "datadog-fips-agent") { + if ($installMethod -eq "offline") { + Write-Error "Offline install method not supported for flavor $Flavor" + exit 1 + } + $artifactName = "datadog-fips-agent" + $packageSource = "$repoRoot\chocolatey\datadog-fips-agent\online" + $nuspecFile = "datadog-fips-agent-online.nuspec" + } else { + Write-Error "Unknown flavor $Flavor" + exit 1 } - $agentVersionMatches = $rawAgentVersion | Select-String -Pattern $develPattern - $agentVersion = "{0}-devel-{1}" -f $agentVersionMatches.Matches.Groups[1], $agentVersionMatches.Matches.Groups[2].Value - # We don't have release notes for devel, so point it to the generic url - $releaseNotes = "https://github.com/DataDog/datadog-agent/releases" -} elseif ($rawAgentVersion -match $releasePattern) { - $agentVersionMatches = $rawAgentVersion | Select-String -Pattern $releasePattern - $agentVersion = $agentVersionMatches.Matches.Groups[1].Value - $releaseNotes = "https://github.com/DataDog/datadog-agent/releases/tag/$agentVersion" - $url = "https://s3.amazonaws.com/ddagent-windows-stable/ddagent-cli-$($agentVersion).msi" -} else { - Write-Host "Unknown agent version '$rawAgentVersion', aborting" - exit 3 -} -Invoke-WebRequest -Uri "https://raw.githubusercontent.com/DataDog/datadog-agent/main/LICENSE" -OutFile $licensePath - -Write-Host "Generating Chocolatey $installMethod package version $agentVersion in $outputDirectory" + # These files/directories are referenced in the nuspec file + $licensePath = "tools\LICENSE.txt" + $installScript = "tools\chocolateyinstall.ps1" + + # Copy package source to build temp dir + Copy-Item -Recurse -Force -Path $packageSource\* -Destination $buildTempDir + Copy-Item -Force -Path $repoRoot\LICENSE -Destination $licensePath + + # Generate URLs based on the Agent version + if ($rawAgentVersion -match $releaseCandidatePattern) { + $agentVersionMatches = $rawAgentVersion | Select-String -Pattern $releaseCandidatePattern + $agentVersion = "{0}-rc-{1}" -f $agentVersionMatches.Matches.Groups[1], $agentVersionMatches.Matches.Groups[2].Value + # We don't have release notes for RCs but this way the user can always see what commits are included in this RC + $releaseNotes = "https://github.com/DataDog/datadog-agent/releases/tag/{0}-rc.{1}" -f $agentVersionMatches.Matches.Groups[1], $agentVersionMatches.Matches.Groups[2] + $url = "https://s3.amazonaws.com/dd-agent-mstesting/builds/beta/$artifactName-$($agentVersionMatches.Matches.Groups[1])-rc.$($agentVersionMatches.Matches.Groups[2]).msi" + } elseif ($rawAgentVersion -match $develPattern) { + if ($installMethod -eq "online") { + # For devel builds/branches, use the dd-agent-mstesting bucket URL + # This allows us to build and test the package in PRs, and locally + # by using the `-VersionOverride` param. + if ([string]::IsNullOrEmpty($env:CI_PIPELINE_ID)) { + Write-Error "CI_PIPELINE_ID is not set, aborting" + exit 1 + } else { + if ($rawAgentVersion -notmatch $env:CI_PIPELINE_ID) { + Write-Error "CI_PIPELINE_ID is not found in the agent version, aborting" -ErrorAction Continue + if ([string]::IsNullOrEmpty($env:BUCKET_BRANCH)) { + # inv agent.version requires BUCKET_BRANCH to be set when including pipeline in version + Write-Error "BUCKET_BRANCH is not set, if you are running this locally, set `$env:BUCKET_BRANCH='dev' or pass the -VersionOverride parameter" -ErrorAction Continue + } + exit 1 + } + $url = "https://s3.amazonaws.com/dd-agent-mstesting/pipelines/A7/$env:CI_PIPELINE_ID/$flavor-$rawAgentVersion-1-x86_64.msi" + } + } + $agentVersionMatches = $rawAgentVersion | Select-String -Pattern $develPattern + $agentVersion = "{0}-devel-{1}" -f $agentVersionMatches.Matches.Groups[1], $agentVersionMatches.Matches.Groups[2].Value + # We don't have release notes for devel, so point it to the generic url + $releaseNotes = "https://github.com/DataDog/datadog-agent/releases" + } elseif ($rawAgentVersion -match $releasePattern) { + $agentVersionMatches = $rawAgentVersion | Select-String -Pattern $releasePattern + $agentVersion = $agentVersionMatches.Matches.Groups[1].Value + $releaseNotes = "https://github.com/DataDog/datadog-agent/releases/tag/$agentVersion" + $url = "https://s3.amazonaws.com/ddagent-windows-stable/$artifactName-$($agentVersion).msi" + } else { + Write-Host "Unknown agent version '$rawAgentVersion', aborting" + exit 1 + } -if (!(Test-Path $outputDirectory)) { - New-Item -ItemType Directory -Path $outputDirectory -} + Write-Host "Generating Chocolatey $installMethod package $flavor version $agentVersion in $(Get-Location)" -if ($installMethod -eq "online") { - try { - $tempMsi = Join-Path -Path "$msiDirectory" "datadog-agent-$rawAgentVersion-1-x86_64.msi" - if (!(Test-Path $tempMsi)) { - Write-Host "Error: Could not find MSI file in $tempMsi" - Get-ChildItem "$msiDirectory" - exit 1 + # Template the install script with the URL and checksum + if ($installMethod -eq "online") { + try { + $tempMsi = Join-Path -Path "$msiDirectory" "$flavor-$rawAgentVersion-1-x86_64.msi" + if (!(Test-Path $tempMsi)) { + Write-Host "Error: Could not find MSI file in $tempMsi" + Get-ChildItem "$msiDirectory" + exit 1 + } + $checksum = (Get-FileHash $tempMsi -Algorithm SHA256).Hash + } + catch { + Write-Host "Error: Could not generate checksum for package $($tempMsi): $($_)" + exit 1 } - $checksum = (Get-FileHash $tempMsi -Algorithm SHA256).Hash - } - catch { - Write-Host "Error: Could not generate checksum for package $($tempMsi): $($_)" - exit 4 + # Set the $url in the install script + (Get-Content $installScript).replace('$__url_from_ci__', '"' + $url + '"').replace('$__checksum_from_ci__', '"' + $checksum + '"') | Set-Content $installScript } - # Set the $url in the install script - (Get-Content $installScript).replace('$__url_from_ci__', '"' + $url + '"').replace('$__checksum_from_ci__', '"' + $checksum + '"') | Set-Content $installScript -} - -Write-Host "Generated nupsec file:" -Write-Host (Get-Content $installScript | Out-String) -Write-Host choco pack --out=$outputDirectory $nuspecFile --version $agentVersion release_notes=$releaseNotes copyright=$copyright -choco pack --out=$outputDirectory $nuspecFile --version $agentVersion release_notes=$releaseNotes copyright=$copyright + Write-Host "Generated nuspec file:" + Write-Host (Get-Content $installScript | Out-String) -# restore installScript (useful for local testing/deployment) -git checkout $installScript + if (!(Test-Path $outputDirectory)) { + New-Item -ItemType Directory -Path $outputDirectory + } + Write-Host choco pack --out=$outputDirectory $nuspecFile --version $agentVersion release_notes=$releaseNotes copyright=$copyright + choco pack --out=$outputDirectory $nuspecFile --version $agentVersion release_notes=$releaseNotes copyright=$copyright +} finally { + Pop-Location +} diff --git a/tasks/winbuildscripts/chocopack.bat b/tasks/winbuildscripts/chocopack.bat deleted file mode 100644 index df8915ae14698..0000000000000 --- a/tasks/winbuildscripts/chocopack.bat +++ /dev/null @@ -1,11 +0,0 @@ -if not exist c:\mnt\ goto nomntdir - -@echo c:\mnt found, continuing - -Powershell -C "C:\mnt\tasks\winbuildscripts\Generate-Chocolatey-Package.ps1 %1 %2" || exit /b 1 -goto :EOF - -:nomntdir -@echo directory not mounted, parameters incorrect -exit /b 2 -goto :EOF From b3667a382d2d688d29575eb6b55b8be6d901d0b9 Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Mon, 16 Dec 2024 18:07:48 +0100 Subject: [PATCH 231/303] remove `gce` build tag (#32226) --- pkg/util/cloudproviders/gce/gce_no_tags.go | 17 ----------------- pkg/util/cloudproviders/gce/gce_tags.go | 2 -- pkg/util/cloudproviders/gce/gce_tags_test.go | 2 -- tasks/build_tags.py | 6 ++---- 4 files changed, 2 insertions(+), 25 deletions(-) delete mode 100644 pkg/util/cloudproviders/gce/gce_no_tags.go diff --git a/pkg/util/cloudproviders/gce/gce_no_tags.go b/pkg/util/cloudproviders/gce/gce_no_tags.go deleted file mode 100644 index 270cf77ce59ce..0000000000000 --- a/pkg/util/cloudproviders/gce/gce_no_tags.go +++ /dev/null @@ -1,17 +0,0 @@ -// 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. - -//go:build !gce - -package gce - -import "context" - -// GetTags gets the tags from the GCE api -func GetTags(_ context.Context) ([]string, error) { - tags := []string{} - - return tags, nil -} diff --git a/pkg/util/cloudproviders/gce/gce_tags.go b/pkg/util/cloudproviders/gce/gce_tags.go index 31c986277bc97..9440ba6ccc21b 100644 --- a/pkg/util/cloudproviders/gce/gce_tags.go +++ b/pkg/util/cloudproviders/gce/gce_tags.go @@ -3,8 +3,6 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build gce - package gce import ( diff --git a/pkg/util/cloudproviders/gce/gce_tags_test.go b/pkg/util/cloudproviders/gce/gce_tags_test.go index 06f15ed938f21..80a803e3cc687 100644 --- a/pkg/util/cloudproviders/gce/gce_tags_test.go +++ b/pkg/util/cloudproviders/gce/gce_tags_test.go @@ -3,8 +3,6 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build gce - package gce import ( diff --git a/tasks/build_tags.py b/tasks/build_tags.py index ddd993490f389..a3c13f088eb8b 100644 --- a/tasks/build_tags.py +++ b/tasks/build_tags.py @@ -28,7 +28,6 @@ "ec2", "etcd", "fargateprocess", - "gce", "jmx", "jetson", "kubeapiserver", @@ -68,7 +67,6 @@ "docker", "ec2", "etcd", - "gce", "jetson", "jmx", "kubeapiserver", @@ -109,7 +107,7 @@ FIPS_AGENT_TAGS = AGENT_TAGS.union({"goexperiment.systemcrypto"}) # CLUSTER_AGENT_TAGS lists the tags needed when building the cluster-agent -CLUSTER_AGENT_TAGS = {"clusterchecks", "datadog.no_waf", "kubeapiserver", "orchestrator", "zlib", "zstd", "ec2", "gce"} +CLUSTER_AGENT_TAGS = {"clusterchecks", "datadog.no_waf", "kubeapiserver", "orchestrator", "zlib", "zstd", "ec2"} # CLUSTER_AGENT_CLOUDFOUNDRY_TAGS lists the tags needed when building the cloudfoundry cluster-agent CLUSTER_AGENT_CLOUDFOUNDRY_TAGS = {"clusterchecks"} @@ -121,7 +119,7 @@ IOT_AGENT_TAGS = {"jetson", "otlp", "systemd", "zlib", "zstd"} # INSTALLER_TAGS lists the tags needed when building the installer -INSTALLER_TAGS = {"docker", "ec2", "gce", "kubelet"} +INSTALLER_TAGS = {"docker", "ec2", "kubelet"} # PROCESS_AGENT_TAGS lists the tags necessary to build the process-agent PROCESS_AGENT_TAGS = AGENT_TAGS.union({"fargateprocess"}).difference({"otlp", "python", "trivy"}) From afd5e2a1a03e64b7b5b7d2c37224335ce0c9d07c Mon Sep 17 00:00:00 2001 From: Stuart Geipel Date: Mon, 16 Dec 2024 12:07:56 -0500 Subject: [PATCH 232/303] [config] Don't log network_process.enabled by default (#32172) --- pkg/network/config/config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/network/config/config.go b/pkg/network/config/config.go index c6d57230a4003..47f8c85cda215 100644 --- a/pkg/network/config/config.go +++ b/pkg/network/config/config.go @@ -414,8 +414,8 @@ func New() *Config { log.Info("network tracer DNS inspection disabled by configuration") } - if c.EnableProcessEventMonitoring { - log.Info("network process event monitoring enabled") + if !c.EnableProcessEventMonitoring { + log.Info("network process event monitoring disabled") } return c } From 328a1931eb51c8dddd549a3bf94ba2ceb5353851 Mon Sep 17 00:00:00 2001 From: Branden Clark Date: Mon, 16 Dec 2024 12:08:12 -0500 Subject: [PATCH 233/303] allow testing deploy jobs to be run manually (#32173) --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8d256885317c3..b2761698a9b16 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -616,7 +616,8 @@ workflow: .except_no_tests_no_deploy: - if: $DEPLOY_AGENT == "false" && $DDR_WORKFLOW_ID == null && $RUN_E2E_TESTS == "off" - when: never + when: manual + allow_failure: true .on_main_or_release_branch: - <<: *if_main_branch From 626f570cf380d1c1fc680ccb85934e5abcb24a9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9na=C3=AFc=20Huard?= Date: Mon, 16 Dec 2024 18:08:21 +0100 Subject: [PATCH 234/303] [incident-33304] Expect container tags on dogstatsd metrics (#32222) Co-authored-by: Wassim Dhif --- test/new-e2e/tests/containers/k8s_test.go | 69 ++++++++--------------- 1 file changed, 22 insertions(+), 47 deletions(-) diff --git a/test/new-e2e/tests/containers/k8s_test.go b/test/new-e2e/tests/containers/k8s_test.go index fb235f979c951..872714c799525 100644 --- a/test/new-e2e/tests/containers/k8s_test.go +++ b/test/new-e2e/tests/containers/k8s_test.go @@ -41,6 +41,7 @@ const ( kubeNamespaceDogstatsWorkload = "workload-dogstatsd" kubeNamespaceDogstatsStandaloneWorkload = "workload-dogstatsd-standalone" kubeNamespaceTracegenWorkload = "workload-tracegen" + kubeDeploymentDogstatsdUDP = "dogstatsd-udp" kubeDeploymentDogstatsdUDPOrigin = "dogstatsd-udp-origin-detection" kubeDeploymentDogstatsdUDPExternalData = "dogstatsd-udp-external-data-only" kubeDeploymentDogstatsdUDS = "dogstatsd-uds" @@ -796,44 +797,53 @@ func (suite *k8sSuite) TestCPU() { func (suite *k8sSuite) TestDogstatsdInAgent() { // Test with UDS - suite.testDogstatsdContainerID(kubeNamespaceDogstatsWorkload, kubeDeploymentDogstatsdUDS) + suite.testDogstatsd(kubeNamespaceDogstatsWorkload, kubeDeploymentDogstatsdUDS) // Test with UDP + Origin detection - suite.testDogstatsdContainerID(kubeNamespaceDogstatsWorkload, kubeDeploymentDogstatsdUDPOrigin) + suite.testDogstatsd(kubeNamespaceDogstatsWorkload, kubeDeploymentDogstatsdUDPOrigin) // Test with UDP + DD_ENTITY_ID - suite.testDogstatsdPodUID(kubeNamespaceDogstatsWorkload) + suite.testDogstatsd(kubeNamespaceDogstatsWorkload, kubeDeploymentDogstatsdUDP) // Test with UDP + External Data suite.testDogstatsdExternalData(kubeNamespaceDogstatsWorkload, kubeDeploymentDogstatsdUDPExternalData) } func (suite *k8sSuite) TestDogstatsdStandalone() { // Test with UDS - suite.testDogstatsdContainerID(kubeNamespaceDogstatsStandaloneWorkload, kubeDeploymentDogstatsdUDS) + suite.testDogstatsd(kubeNamespaceDogstatsStandaloneWorkload, kubeDeploymentDogstatsdUDS) // Dogstatsd standalone does not support origin detection // Test with UDP + DD_ENTITY_ID - suite.testDogstatsdPodUID(kubeNamespaceDogstatsWorkload) + suite.testDogstatsd(kubeNamespaceDogstatsWorkload, kubeDeploymentDogstatsdUDP) } -func (suite *k8sSuite) testDogstatsdPodUID(kubeNamespace string) { - // Test dogstatsd origin detection with UDP + DD_ENTITY_ID +func (suite *k8sSuite) testDogstatsd(kubeNamespace, kubeDeployment string) { suite.testMetric(&testMetricArgs{ Filter: testMetricFilterArgs{ Name: "custom.metric", Tags: []string{ - "^kube_deployment:dogstatsd-udp$", + "^kube_deployment:" + regexp.QuoteMeta(kubeDeployment) + "$", "^kube_namespace:" + regexp.QuoteMeta(kubeNamespace) + "$", }, }, Expect: testMetricExpectArgs{ Tags: &[]string{ - `^kube_deployment:dogstatsd-udp$`, + `^container_id:`, + `^container_name:dogstatsd$`, + `^display_container_name:dogstatsd`, + `^git.commit.sha:`, // org.opencontainers.image.revision docker image label + `^git.repository_url:https://github.com/DataDog/test-infra-definitions$`, // org.opencontainers.image.source docker image label + `^image_id:ghcr.io/datadog/apps-dogstatsd@sha256:`, + `^image_name:ghcr.io/datadog/apps-dogstatsd$`, + `^image_tag:main$`, + `^kube_container_name:dogstatsd$`, + `^kube_deployment:` + regexp.QuoteMeta(kubeDeployment) + `$`, "^kube_namespace:" + regexp.QuoteMeta(kubeNamespace) + "$", `^kube_ownerref_kind:replicaset$`, - `^kube_ownerref_name:dogstatsd-udp-[[:alnum:]]+$`, + `^kube_ownerref_name:` + regexp.QuoteMeta(kubeDeployment) + `-[[:alnum:]]+$`, `^kube_qos:Burstable$`, - `^kube_replica_set:dogstatsd-udp-[[:alnum:]]+$`, - `^pod_name:dogstatsd-udp-[[:alnum:]]+-[[:alnum:]]+$`, + `^kube_replica_set:` + regexp.QuoteMeta(kubeDeployment) + `-[[:alnum:]]+$`, + `^pod_name:` + regexp.QuoteMeta(kubeDeployment) + `-[[:alnum:]]+-[[:alnum:]]+$`, `^pod_phase:running$`, `^series:`, + `^short_image:apps-dogstatsd$`, }, }, }) @@ -911,41 +921,6 @@ func (suite *k8sSuite) testDogstatsdExternalData(kubeNamespace, kubeDeployment s }) } -func (suite *k8sSuite) testDogstatsdContainerID(kubeNamespace, kubeDeployment string) { - suite.testMetric(&testMetricArgs{ - Filter: testMetricFilterArgs{ - Name: "custom.metric", - Tags: []string{ - "^kube_deployment:" + regexp.QuoteMeta(kubeDeployment) + "$", - "^kube_namespace:" + regexp.QuoteMeta(kubeNamespace) + "$", - }, - }, - Expect: testMetricExpectArgs{ - Tags: &[]string{ - `^container_id:`, - `^container_name:dogstatsd$`, - `^display_container_name:dogstatsd`, - `^git.commit.sha:`, // org.opencontainers.image.revision docker image label - `^git.repository_url:https://github.com/DataDog/test-infra-definitions$`, // org.opencontainers.image.source docker image label - `^image_id:ghcr.io/datadog/apps-dogstatsd@sha256:`, - `^image_name:ghcr.io/datadog/apps-dogstatsd$`, - `^image_tag:main$`, - `^kube_container_name:dogstatsd$`, - `^kube_deployment:` + regexp.QuoteMeta(kubeDeployment) + `$`, - "^kube_namespace:" + regexp.QuoteMeta(kubeNamespace) + "$", - `^kube_ownerref_kind:replicaset$`, - `^kube_ownerref_name:` + regexp.QuoteMeta(kubeDeployment) + `-[[:alnum:]]+$`, - `^kube_qos:Burstable$`, - `^kube_replica_set:` + regexp.QuoteMeta(kubeDeployment) + `-[[:alnum:]]+$`, - `^pod_name:` + regexp.QuoteMeta(kubeDeployment) + `-[[:alnum:]]+-[[:alnum:]]+$`, - `^pod_phase:running$`, - `^series:`, - `^short_image:apps-dogstatsd$`, - }, - }, - }) -} - func (suite *k8sSuite) TestPrometheus() { // Test Prometheus check suite.testMetric(&testMetricArgs{ From 48b4521f4137351498bcc7c1679743daad4c5065 Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Mon, 16 Dec 2024 18:36:32 +0100 Subject: [PATCH 235/303] [ASCII-2614] Add a task to generate a dependency graph (#32206) Co-authored-by: louis-cqrl <93274433+louis-cqrl@users.noreply.github.com> --- tasks/go_deps.py | 107 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/tasks/go_deps.py b/tasks/go_deps.py index 5310ede1384d8..b08560eaa8056 100644 --- a/tasks/go_deps.py +++ b/tasks/go_deps.py @@ -1,5 +1,7 @@ import datetime import os +import shutil +import tempfile from collections.abc import Iterable from invoke.context import Context @@ -185,3 +187,108 @@ def show(ctx: Context, build: str, flavor: str = AgentFlavor.base.name, os: str for dep in deps: print(dep) + + +@task( + help={ + 'build': f'The agent build to use, one of {", ".join(BINARIES.keys())}', + 'flavor': f'The agent flavor to use, one of {", ".join(AgentFlavor.__members__.keys())}. Defaults to base', + 'os': f'The OS to use, one of {", ".join(GOOS_MAPPING.keys())}. Defaults to host platform', + 'arch': f'The architecture to use, one of {", ".join(GOARCH_MAPPING.keys())}. Defaults to host architecture', + 'entrypoint': 'A Go package path, defaults to the entrypoint of the build.', + 'target': 'A Go package path. If specified, generate a graph from the entrypoint to the target.', + 'std': 'Whether to include the standard library in the graph', + 'cluster': 'Whether to group packages by cluster.', + 'fmt': 'The format of the generated image. Must be accepted by "dot -T". Defaults to "svg".', + 'auto_open': 'Whether to open the generated graph automatically.', + } +) +def graph( + ctx: Context, + build: str, + flavor: str = AgentFlavor.base.name, + os: str | None = None, + arch: str | None = None, + entrypoint: str | None = None, + target: str | None = None, + std: bool = False, + cluster: bool = False, + fmt: str = "svg", + auto_open: bool = True, +): + """ + Generate a dependency graph of the given build. + Requires https://github.com/loov/goda and Graphviz's `dot` tools to be in the PATH. + + Usage: + Dependency graph of the trace-agent on Linux + inv -e go-deps.graph --build trace-agent --os linux + Reachability graph of the process-agent on Linux to k8s.io/... dependencies + inv -e go-deps.graph --build process-agent --os linux --target k8s.io/... + Dependency graph of workloadmeta on Linux when using the same build tags as the core-agent + inv -e go-deps.graph --build agent --os linux --entrypoint github.com/DataDog/datadog-agent/comp/core/workloadmeta/...:all + """ + if shutil.which("goda") is None: + raise Exit( + code=1, + message=color_message( + "'goda' not found in PATH. Please install it with `go install github.com/loov/goda@latest`", "red" + ), + ) + + if os is None: + goos = ctx.run("go env GOOS", hide=True) + assert goos is not None + os = goos.stdout.strip() + assert os in GOOS_MAPPING.values() + + if arch is None: + goarch = ctx.run("go env GOARCH", hide=True) + assert goarch is not None + arch = goarch.stdout.strip() + assert arch in GOARCH_MAPPING.values() + + stdarg = "-std" if std else "" + clusterarg = "-cluster" if cluster else "" + + if entrypoint is None: + entrypoint = BINARIES[build]["entrypoint"] + entrypoint = f"github.com/DataDog/datadog-agent/{entrypoint}:all" + + build_tags = get_default_build_tags( + build=build, flavor=AgentFlavor[flavor], platform=key_for_value(GOOS_MAPPING, os) + ) + for tag in build_tags: + entrypoint = f"{tag}=1({entrypoint})" + + expr = entrypoint if target is None else f"reach({entrypoint}, {target})" + + cmd = f"goda graph {stdarg} {clusterarg} \"{expr}\"" + + env = {"GOOS": os, "GOARCH": arch} + res = ctx.run(cmd, env=env, hide='out') + assert res + + tmpfile = tempfile.mktemp(prefix="graph-") + + dotfile = tmpfile + ".dot" + print("Saving dot file in " + dotfile) + with open(dotfile, "w") as f: + f.write(res.stdout) + + if shutil.which("dot") is None: + raise Exit( + code=1, + message=color_message( + "'dot' not found in PATH. Please follow instructions on https://graphviz.org/download/ to install it.", + "red", + ), + ) + + fmtfile = tmpfile + "." + fmt + print(f"Rendering {fmt} in {fmtfile}") + ctx.run(f"dot -T{fmt} -o {fmtfile} {dotfile}") + + if auto_open: + print(f"Opening {fmt} file") + ctx.run(f"open {fmtfile}") From f9698b996a20fabee3532e54a4b2e8cfb3efced4 Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Mon, 16 Dec 2024 19:00:40 +0100 Subject: [PATCH 236/303] [ASCII-2613] Move SetupCoreDump to pkg/util/coredump to remove deps from trace-agent (#32174) --- cmd/agent/subcommands/run/command.go | 4 ++-- cmd/cluster-agent/subcommands/start/command.go | 4 ++-- cmd/dogstatsd/subcommands/start/command.go | 4 ++-- cmd/process-agent/command/main_common.go | 4 ++-- cmd/security-agent/subcommands/start/command.go | 4 ++-- cmd/system-probe/subcommands/run/command.go | 4 ++-- comp/trace/agent/impl/run.go | 4 ++-- pkg/util/{ => coredump}/core.go | 6 +++--- pkg/util/{ => coredump}/core_windows.go | 6 +++--- pkg/util/coredump/docs.go | 7 +++++++ 10 files changed, 27 insertions(+), 20 deletions(-) rename pkg/util/{ => coredump}/core.go (81%) rename pkg/util/{ => coredump}/core_windows.go (73%) create mode 100644 pkg/util/coredump/docs.go diff --git a/cmd/agent/subcommands/run/command.go b/cmd/agent/subcommands/run/command.go index 9c126f014aab2..76775693251e4 100644 --- a/cmd/agent/subcommands/run/command.go +++ b/cmd/agent/subcommands/run/command.go @@ -146,8 +146,8 @@ import ( jmxStatus "github.com/DataDog/datadog-agent/pkg/status/jmx" systemprobeStatus "github.com/DataDog/datadog-agent/pkg/status/systemprobe" pkgTelemetry "github.com/DataDog/datadog-agent/pkg/telemetry" - "github.com/DataDog/datadog-agent/pkg/util" pkgcommon "github.com/DataDog/datadog-agent/pkg/util/common" + "github.com/DataDog/datadog-agent/pkg/util/coredump" "github.com/DataDog/datadog-agent/pkg/util/defaultpaths" "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/DataDog/datadog-agent/pkg/util/fxutil" @@ -512,7 +512,7 @@ func startAgent( log.Infof("Starting Datadog Agent v%v", version.AgentVersion) } - if err := util.SetupCoreDump(pkgconfigsetup.Datadog()); err != nil { + if err := coredump.Setup(pkgconfigsetup.Datadog()); err != nil { log.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } diff --git a/cmd/cluster-agent/subcommands/start/command.go b/cmd/cluster-agent/subcommands/start/command.go index f43ae03615401..aea5e4207f57c 100644 --- a/cmd/cluster-agent/subcommands/start/command.go +++ b/cmd/cluster-agent/subcommands/start/command.go @@ -81,7 +81,7 @@ import ( hostnameStatus "github.com/DataDog/datadog-agent/pkg/status/clusteragent/hostname" endpointsStatus "github.com/DataDog/datadog-agent/pkg/status/endpoints" "github.com/DataDog/datadog-agent/pkg/status/health" - "github.com/DataDog/datadog-agent/pkg/util" + "github.com/DataDog/datadog-agent/pkg/util/coredump" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/hostname" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver" @@ -241,7 +241,7 @@ func start(log log.Component, // Starting Cluster Agent sequence // Initialization order is important for multiple reasons, see comments - if err := util.SetupCoreDump(config); err != nil { + if err := coredump.Setup(config); err != nil { pkglog.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } diff --git a/cmd/dogstatsd/subcommands/start/command.go b/cmd/dogstatsd/subcommands/start/command.go index f61ae13db837d..b6e6a63361ae8 100644 --- a/cmd/dogstatsd/subcommands/start/command.go +++ b/cmd/dogstatsd/subcommands/start/command.go @@ -57,7 +57,7 @@ import ( compressionfx "github.com/DataDog/datadog-agent/comp/serializer/compression/fx" "github.com/DataDog/datadog-agent/pkg/serializer" "github.com/DataDog/datadog-agent/pkg/status/health" - "github.com/DataDog/datadog-agent/pkg/util" + "github.com/DataDog/datadog-agent/pkg/util/coredump" "github.com/DataDog/datadog-agent/pkg/util/fxutil" pkglog "github.com/DataDog/datadog-agent/pkg/util/log" pkglogsetup "github.com/DataDog/datadog-agent/pkg/util/log/setup" @@ -235,7 +235,7 @@ func RunDogstatsd(_ context.Context, cliParams *CLIParams, config config.Compone } }() - if err := util.SetupCoreDump(config); err != nil { + if err := coredump.Setup(config); err != nil { log.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } diff --git a/cmd/process-agent/command/main_common.go b/cmd/process-agent/command/main_common.go index 188c9684fd30b..dcb9287e74f04 100644 --- a/cmd/process-agent/command/main_common.go +++ b/cmd/process-agent/command/main_common.go @@ -61,7 +61,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/process/metadata/workloadmeta/collector" "github.com/DataDog/datadog-agent/pkg/process/util" proccontainers "github.com/DataDog/datadog-agent/pkg/process/util/containers" - ddutil "github.com/DataDog/datadog-agent/pkg/util" + "github.com/DataDog/datadog-agent/pkg/util/coredump" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/fxutil/logging" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -296,7 +296,7 @@ type miscDeps struct { // Todo: (Components) WorkloadMeta, remoteTagger // Todo: move metadata/workloadmeta/collector to workloadmeta func initMisc(deps miscDeps) error { - if err := ddutil.SetupCoreDump(deps.Config); err != nil { + if err := coredump.Setup(deps.Config); err != nil { deps.Logger.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } diff --git a/cmd/security-agent/subcommands/start/command.go b/cmd/security-agent/subcommands/start/command.go index 8386100c0031b..12a93fc4560ff 100644 --- a/cmd/security-agent/subcommands/start/command.go +++ b/cmd/security-agent/subcommands/start/command.go @@ -63,7 +63,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/agent" "github.com/DataDog/datadog-agent/pkg/security/utils" "github.com/DataDog/datadog-agent/pkg/status/health" - "github.com/DataDog/datadog-agent/pkg/util" + "github.com/DataDog/datadog-agent/pkg/util/coredump" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/optional" "github.com/DataDog/datadog-agent/pkg/util/profiling" @@ -257,7 +257,7 @@ var errNoAPIKeyConfigured = errors.New("no API key configured") // RunAgent initialized resources and starts API server func RunAgent(log log.Component, config config.Component, telemetry telemetry.Component, statusComponent status.Component, settings settings.Component, wmeta workloadmeta.Component) (err error) { - if err := util.SetupCoreDump(config); err != nil { + if err := coredump.Setup(config); err != nil { log.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } diff --git a/cmd/system-probe/subcommands/run/command.go b/cmd/system-probe/subcommands/run/command.go index cd35036946e88..659f7e2fe0f52 100644 --- a/cmd/system-probe/subcommands/run/command.go +++ b/cmd/system-probe/subcommands/run/command.go @@ -61,7 +61,7 @@ import ( ebpftelemetry "github.com/DataDog/datadog-agent/pkg/ebpf/telemetry" processstatsd "github.com/DataDog/datadog-agent/pkg/process/statsd" ddruntime "github.com/DataDog/datadog-agent/pkg/runtime" - "github.com/DataDog/datadog-agent/pkg/util" + "github.com/DataDog/datadog-agent/pkg/util/coredump" "github.com/DataDog/datadog-agent/pkg/util/fxutil" pkglog "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/optional" @@ -333,7 +333,7 @@ func startSystemProbe(log log.Component, statsd compstatsd.Component, telemetry return ErrNotEnabled } - if err := util.SetupCoreDump(sysprobeconfig); err != nil { + if err := coredump.Setup(sysprobeconfig); err != nil { log.Warnf("cannot setup core dumps: %s, core dumps might not be available after a crash", err) } diff --git a/comp/trace/agent/impl/run.go b/comp/trace/agent/impl/run.go index df25106b78755..20ecbc6496a1b 100644 --- a/comp/trace/agent/impl/run.go +++ b/comp/trace/agent/impl/run.go @@ -23,7 +23,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/info" "github.com/DataDog/datadog-agent/pkg/trace/telemetry" "github.com/DataDog/datadog-agent/pkg/trace/watchdog" - "github.com/DataDog/datadog-agent/pkg/util" + "github.com/DataDog/datadog-agent/pkg/util/coredump" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/profiling" "github.com/DataDog/datadog-agent/pkg/version" @@ -41,7 +41,7 @@ func runAgentSidekicks(ag component) error { defer watchdog.LogOnPanic(ag.Statsd) - if err := util.SetupCoreDump(pkgconfigsetup.Datadog()); err != nil { + if err := coredump.Setup(pkgconfigsetup.Datadog()); err != nil { log.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } diff --git a/pkg/util/core.go b/pkg/util/coredump/core.go similarity index 81% rename from pkg/util/core.go rename to pkg/util/coredump/core.go index 77649ea1d53f3..64b4f35c3a12a 100644 --- a/pkg/util/core.go +++ b/pkg/util/coredump/core.go @@ -5,7 +5,7 @@ //go:build !windows -package util +package coredump import ( "fmt" @@ -16,8 +16,8 @@ import ( "github.com/DataDog/datadog-agent/pkg/config/model" ) -// SetupCoreDump enables core dumps and sets the core dump size limit based on configuration -func SetupCoreDump(cfg model.Reader) error { +// Setup enables core dumps and sets the core dump size limit based on configuration +func Setup(cfg model.Reader) error { if cfg.GetBool("go_core_dump") { debug.SetTraceback("crash") diff --git a/pkg/util/core_windows.go b/pkg/util/coredump/core_windows.go similarity index 73% rename from pkg/util/core_windows.go rename to pkg/util/coredump/core_windows.go index c11422c8aff2b..3e7d3915f7636 100644 --- a/pkg/util/core_windows.go +++ b/pkg/util/coredump/core_windows.go @@ -3,7 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-2020 Datadog, Inc. -package util +package coredump import ( "fmt" @@ -11,8 +11,8 @@ import ( "github.com/DataDog/datadog-agent/pkg/config/model" ) -// SetupCoreDump enables core dumps and sets the core dump size limit based on configuration -func SetupCoreDump(cfg model.Reader) error { +// Setup enables core dumps and sets the core dump size limit based on configuration +func Setup(cfg model.Reader) error { if cfg.GetBool("go_core_dump") { return fmt.Errorf("Not supported on Windows") } diff --git a/pkg/util/coredump/docs.go b/pkg/util/coredump/docs.go new file mode 100644 index 0000000000000..43371b50e7dac --- /dev/null +++ b/pkg/util/coredump/docs.go @@ -0,0 +1,7 @@ +// 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-2020 Datadog, Inc. + +// Package coredump provides utils to enable core dumps and set core dump size limit +package coredump From b9100191842713916293d3e091c384755ac27f75 Mon Sep 17 00:00:00 2001 From: Ibraheem Aboulnaga <13734402+IbraheemA@users.noreply.github.com> Date: Mon, 16 Dec 2024 13:32:11 -0500 Subject: [PATCH 237/303] Remove SpanNameAsResourceName from default OTel agent config (#32112) --- cmd/otel-agent/config/agent_config_test.go | 4 ++-- .../impl/testdata/simple-dd/config-enhanced-result.yaml | 2 +- .../impl/testdata/simple-dd/config-provided-result.yaml | 2 +- .../otlp/components/exporter/datadogexporter/factory.go | 1 - 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/cmd/otel-agent/config/agent_config_test.go b/cmd/otel-agent/config/agent_config_test.go index 2d08cfb4ac58f..01567d48d7ffe 100644 --- a/cmd/otel-agent/config/agent_config_test.go +++ b/cmd/otel-agent/config/agent_config_test.go @@ -78,7 +78,7 @@ func (suite *ConfigTestSuite) TestAgentConfigDefaults() { assert.Equal(t, 6, c.Get("logs_config.compression_level")) assert.Equal(t, "https://trace.agent.datadoghq.com", c.Get("apm_config.apm_dd_url")) assert.Equal(t, false, c.Get("apm_config.receiver_enabled")) - assert.Equal(t, true, c.Get("otlp_config.traces.span_name_as_resource_name")) + assert.Equal(t, false, c.Get("otlp_config.traces.span_name_as_resource_name")) assert.Equal(t, []string{"enable_receive_resource_spans_v2", "enable_operation_and_resource_name_logic_v2", "enable_otlp_compute_top_level_by_span_kind"}, c.Get("apm_config.features")) } @@ -104,7 +104,7 @@ func (suite *ConfigTestSuite) TestAgentConfigWithDatadogYamlDefaults() { assert.Equal(t, 6, c.Get("logs_config.compression_level")) assert.Equal(t, "https://trace.agent.datadoghq.com", c.Get("apm_config.apm_dd_url")) assert.Equal(t, false, c.Get("apm_config.receiver_enabled")) - assert.Equal(t, true, c.Get("otlp_config.traces.span_name_as_resource_name")) + assert.Equal(t, false, c.Get("otlp_config.traces.span_name_as_resource_name")) assert.Equal(t, []string{"enable_receive_resource_spans_v2", "enable_operation_and_resource_name_logic_v2", "enable_otlp_compute_top_level_by_span_kind"}, c.Get("apm_config.features")) // log_level from datadog.yaml takes precedence -> more verbose diff --git a/comp/otelcol/ddflareextension/impl/testdata/simple-dd/config-enhanced-result.yaml b/comp/otelcol/ddflareextension/impl/testdata/simple-dd/config-enhanced-result.yaml index 5914d58d690a1..055f7c67144eb 100644 --- a/comp/otelcol/ddflareextension/impl/testdata/simple-dd/config-enhanced-result.yaml +++ b/comp/otelcol/ddflareextension/impl/testdata/simple-dd/config-enhanced-result.yaml @@ -88,7 +88,7 @@ exporters: peer_service_aggregation: false peer_tags: [] peer_tags_aggregation: false - span_name_as_resource_name: true + span_name_as_resource_name: false span_name_remappings: {} trace_buffer: 0 write_buffer_size: 0 diff --git a/comp/otelcol/ddflareextension/impl/testdata/simple-dd/config-provided-result.yaml b/comp/otelcol/ddflareextension/impl/testdata/simple-dd/config-provided-result.yaml index 807d80682416a..d0b9a8b4b3aa8 100644 --- a/comp/otelcol/ddflareextension/impl/testdata/simple-dd/config-provided-result.yaml +++ b/comp/otelcol/ddflareextension/impl/testdata/simple-dd/config-provided-result.yaml @@ -88,7 +88,7 @@ exporters: peer_service_aggregation: false peer_tags: [] peer_tags_aggregation: false - span_name_as_resource_name: true + span_name_as_resource_name: false span_name_remappings: {} trace_buffer: 0 write_buffer_size: 0 diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/factory.go b/comp/otelcol/otlp/components/exporter/datadogexporter/factory.go index 35cb0957daada..b32933f255ba3 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/factory.go +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/factory.go @@ -119,7 +119,6 @@ func NewFactory( func CreateDefaultConfig() component.Config { ddcfg := datadogconfig.CreateDefaultConfig().(*datadogconfig.Config) ddcfg.Traces.TracesConfig.ComputeTopLevelBySpanKind = true - ddcfg.Traces.TracesConfig.SpanNameAsResourceName = true ddcfg.Logs.Endpoint = "https://agent-http-intake.logs.datadoghq.com" ddcfg.HostMetadata.Enabled = false return ddcfg From 8d8a340480a07fe7b6d00c71c60d2337fe5d72d3 Mon Sep 17 00:00:00 2001 From: NouemanKHAL Date: Tue, 17 Dec 2024 01:35:51 +0700 Subject: [PATCH 238/303] bump github.com/shirou/gopsutil to v4 in corechecks (#32225) --- LICENSE-3rdparty.csv | 10 ---------- go.mod | 2 -- pkg/collector/corechecks/net/network/network.go | 2 +- pkg/collector/corechecks/net/network/network_test.go | 2 +- pkg/collector/corechecks/system/cpu/cpu/cpu.go | 2 +- pkg/collector/corechecks/system/cpu/cpu/cpu_test.go | 2 +- pkg/collector/corechecks/system/cpu/load/load.go | 4 ++-- pkg/collector/corechecks/system/cpu/load/load_test.go | 4 ++-- pkg/collector/corechecks/system/disk/disk/disk_nix.go | 2 +- pkg/collector/corechecks/system/disk/disk/disk_test.go | 2 +- pkg/collector/corechecks/system/disk/io/iostats.go | 2 +- pkg/collector/corechecks/system/disk/io/iostats_nix.go | 4 ++-- .../corechecks/system/disk/io/iostats_nix_test.go | 2 +- .../corechecks/system/disk/io/iostats_test.go | 4 ++-- pkg/collector/corechecks/system/memory/memory_nix.go | 2 +- .../corechecks/system/memory/memory_nix_test.go | 2 +- pkg/collector/corechecks/system/uptime/uptime_nix.go | 2 +- 17 files changed, 19 insertions(+), 31 deletions(-) diff --git a/LICENSE-3rdparty.csv b/LICENSE-3rdparty.csv index d424a9ed015c7..502d348bb5ab9 100644 --- a/LICENSE-3rdparty.csv +++ b/LICENSE-3rdparty.csv @@ -2043,15 +2043,6 @@ core,github.com/secure-systems-lab/go-securesystemslib/dsse,MIT,Copyright (c) 20 core,github.com/secure-systems-lab/go-securesystemslib/signerverifier,MIT,Copyright (c) 2021 NYU Secure Systems Lab core,github.com/sergi/go-diff/diffmatchpatch,MIT,Copyright (c) 2012-2016 The go-diff Authors. All rights reserved | Danny Yoo | James Kolb | Jonathan Amsterdam | Markus Zimmermann | Matt Kovars | Osman Masood | Robert Carlsen | Rory Flynn | Sergi Mansilla | Shatrugna Sadhu | Shawn Smith | Stas Maksimov | Tor Arvid Lund | Zac Bergquist | Örjan Persson core,github.com/shibumi/go-pathspec,Apache-2.0,Copyright (c) 2012 The Go Authors. All rights reserved. -core,github.com/shirou/gopsutil/v3/common,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" -core,github.com/shirou/gopsutil/v3/cpu,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" -core,github.com/shirou/gopsutil/v3/disk,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" -core,github.com/shirou/gopsutil/v3/host,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" -core,github.com/shirou/gopsutil/v3/internal/common,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" -core,github.com/shirou/gopsutil/v3/load,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" -core,github.com/shirou/gopsutil/v3/mem,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" -core,github.com/shirou/gopsutil/v3/net,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" -core,github.com/shirou/gopsutil/v3/process,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" core,github.com/shirou/gopsutil/v4/common,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" core,github.com/shirou/gopsutil/v4/cpu,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" core,github.com/shirou/gopsutil/v4/disk,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" @@ -2062,7 +2053,6 @@ core,github.com/shirou/gopsutil/v4/mem,BSD-3-Clause,"Copyright (c) 2009 The Go A core,github.com/shirou/gopsutil/v4/net,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" core,github.com/shirou/gopsutil/v4/process,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" core,github.com/shirou/w32,BSD-3-Clause,Copyright (c) 2010-2012 The w32 Authors. All rights reserved. -core,github.com/shoenig/go-m1cpu,MPL-2.0,"copyright doctrines of fair use, fair dealing, or other" core,github.com/shopspring/decimal,MIT,"Copyright (c) 2013 Oguz Bilgic | Copyright (c) 2015 Spring, Inc" core,github.com/signalfx/sapm-proto/client,Apache-2.0,"Copyright 2019 Splunk, Inc." core,github.com/signalfx/sapm-proto/gen,Apache-2.0,"Copyright 2019 Splunk, Inc." diff --git a/go.mod b/go.mod index 0a6de46e14ef7..468318882d2f0 100644 --- a/go.mod +++ b/go.mod @@ -262,7 +262,6 @@ require ( github.com/robfig/cron/v3 v3.0.1 github.com/samber/lo v1.47.0 github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da - github.com/shirou/gopsutil/v3 v3.24.5 github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 github.com/sirupsen/logrus v1.9.3 github.com/skydive-project/go-debouncer v1.0.0 @@ -974,7 +973,6 @@ require ( github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/signalfx/sapm-proto v0.17.0 // indirect github.com/sigstore/rekor v1.2.2 // indirect github.com/skeema/knownhosts v1.2.2 // indirect diff --git a/pkg/collector/corechecks/net/network/network.go b/pkg/collector/corechecks/net/network/network.go index c3505185203aa..d4a1e5cd6ebe7 100644 --- a/pkg/collector/corechecks/net/network/network.go +++ b/pkg/collector/corechecks/net/network/network.go @@ -17,7 +17,7 @@ import ( "strconv" "strings" - "github.com/shirou/gopsutil/v3/net" + "github.com/shirou/gopsutil/v4/net" yaml "gopkg.in/yaml.v2" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" diff --git a/pkg/collector/corechecks/net/network/network_test.go b/pkg/collector/corechecks/net/network/network_test.go index b2476ca3d734c..4a033f97dbe86 100644 --- a/pkg/collector/corechecks/net/network/network_test.go +++ b/pkg/collector/corechecks/net/network/network_test.go @@ -10,7 +10,7 @@ package network import ( "testing" - "github.com/shirou/gopsutil/v3/net" + "github.com/shirou/gopsutil/v4/net" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" diff --git a/pkg/collector/corechecks/system/cpu/cpu/cpu.go b/pkg/collector/corechecks/system/cpu/cpu/cpu.go index 8ca44f462bd61..a098b35a39647 100644 --- a/pkg/collector/corechecks/system/cpu/cpu/cpu.go +++ b/pkg/collector/corechecks/system/cpu/cpu/cpu.go @@ -10,7 +10,7 @@ package cpu import ( "fmt" - "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v4/cpu" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/aggregator/sender" diff --git a/pkg/collector/corechecks/system/cpu/cpu/cpu_test.go b/pkg/collector/corechecks/system/cpu/cpu/cpu_test.go index d5124637d6c4a..43a243f36d10d 100644 --- a/pkg/collector/corechecks/system/cpu/cpu/cpu_test.go +++ b/pkg/collector/corechecks/system/cpu/cpu/cpu_test.go @@ -20,7 +20,7 @@ import ( pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/metrics" - "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v4/cpu" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" ) diff --git a/pkg/collector/corechecks/system/cpu/load/load.go b/pkg/collector/corechecks/system/cpu/load/load.go index 6d6aa1833dedb..52be3ea30e08a 100644 --- a/pkg/collector/corechecks/system/cpu/load/load.go +++ b/pkg/collector/corechecks/system/cpu/load/load.go @@ -10,8 +10,8 @@ package load import ( "fmt" - "github.com/shirou/gopsutil/v3/cpu" - "github.com/shirou/gopsutil/v3/load" + "github.com/shirou/gopsutil/v4/cpu" + "github.com/shirou/gopsutil/v4/load" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/aggregator/sender" diff --git a/pkg/collector/corechecks/system/cpu/load/load_test.go b/pkg/collector/corechecks/system/cpu/load/load_test.go index af820e8fc21fa..fd140edd86ffd 100644 --- a/pkg/collector/corechecks/system/cpu/load/load_test.go +++ b/pkg/collector/corechecks/system/cpu/load/load_test.go @@ -9,9 +9,9 @@ package load import ( "testing" - "github.com/shirou/gopsutil/v3/load" + "github.com/shirou/gopsutil/v4/load" - "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v4/cpu" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" diff --git a/pkg/collector/corechecks/system/disk/disk/disk_nix.go b/pkg/collector/corechecks/system/disk/disk/disk_nix.go index 23a03601724a1..7a384f377056c 100644 --- a/pkg/collector/corechecks/system/disk/disk/disk_nix.go +++ b/pkg/collector/corechecks/system/disk/disk/disk_nix.go @@ -11,7 +11,7 @@ import ( "fmt" "path/filepath" - "github.com/shirou/gopsutil/v3/disk" + "github.com/shirou/gopsutil/v4/disk" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/aggregator/sender" diff --git a/pkg/collector/corechecks/system/disk/disk/disk_test.go b/pkg/collector/corechecks/system/disk/disk/disk_test.go index 76aae7d0cfc36..2934b7fe9ed11 100644 --- a/pkg/collector/corechecks/system/disk/disk/disk_test.go +++ b/pkg/collector/corechecks/system/disk/disk/disk_test.go @@ -10,7 +10,7 @@ import ( "regexp" "testing" - "github.com/shirou/gopsutil/v3/disk" + "github.com/shirou/gopsutil/v4/disk" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" diff --git a/pkg/collector/corechecks/system/disk/io/iostats.go b/pkg/collector/corechecks/system/disk/io/iostats.go index 2cdf7647bf14a..b40315ebff0af 100644 --- a/pkg/collector/corechecks/system/disk/io/iostats.go +++ b/pkg/collector/corechecks/system/disk/io/iostats.go @@ -20,7 +20,7 @@ import ( ) const ( - // SectorSize is used here to substitute non-exporeted from github.com/shirou/gopsutil/v3/disk package constant named "sectorSize" + // SectorSize is used here to substitute non-exporeted from github.com/shirou/gopsutil/v4/disk package constant named "sectorSize" SectorSize = 512 kB = (1 << 10) CheckName = "io" diff --git a/pkg/collector/corechecks/system/disk/io/iostats_nix.go b/pkg/collector/corechecks/system/disk/io/iostats_nix.go index 8fe5b1e66da5e..e3813f162da9e 100644 --- a/pkg/collector/corechecks/system/disk/io/iostats_nix.go +++ b/pkg/collector/corechecks/system/disk/io/iostats_nix.go @@ -13,8 +13,8 @@ import ( "regexp" "time" - "github.com/shirou/gopsutil/v3/disk" - "github.com/shirou/gopsutil/v3/mem" // for system.io.block_{in,out} + "github.com/shirou/gopsutil/v4/disk" + "github.com/shirou/gopsutil/v4/mem" // for system.io.block_{in,out} "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/aggregator/sender" diff --git a/pkg/collector/corechecks/system/disk/io/iostats_nix_test.go b/pkg/collector/corechecks/system/disk/io/iostats_nix_test.go index 21bfbef4109da..61a60ccab654d 100644 --- a/pkg/collector/corechecks/system/disk/io/iostats_nix_test.go +++ b/pkg/collector/corechecks/system/disk/io/iostats_nix_test.go @@ -12,7 +12,7 @@ import ( "testing" "time" - "github.com/shirou/gopsutil/v3/disk" + "github.com/shirou/gopsutil/v4/disk" "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" diff --git a/pkg/collector/corechecks/system/disk/io/iostats_test.go b/pkg/collector/corechecks/system/disk/io/iostats_test.go index 005b4aad3ebda..bb7d3eaef18b7 100644 --- a/pkg/collector/corechecks/system/disk/io/iostats_test.go +++ b/pkg/collector/corechecks/system/disk/io/iostats_test.go @@ -12,8 +12,8 @@ import ( "testing" "time" - "github.com/shirou/gopsutil/v3/disk" - "github.com/shirou/gopsutil/v3/mem" + "github.com/shirou/gopsutil/v4/disk" + "github.com/shirou/gopsutil/v4/mem" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" "github.com/DataDog/datadog-agent/pkg/aggregator" diff --git a/pkg/collector/corechecks/system/memory/memory_nix.go b/pkg/collector/corechecks/system/memory/memory_nix.go index 190a4c7e02b41..577fb222bb97b 100644 --- a/pkg/collector/corechecks/system/memory/memory_nix.go +++ b/pkg/collector/corechecks/system/memory/memory_nix.go @@ -11,7 +11,7 @@ import ( "fmt" "runtime" - "github.com/shirou/gopsutil/v3/mem" + "github.com/shirou/gopsutil/v4/mem" "github.com/DataDog/datadog-agent/pkg/util/log" diff --git a/pkg/collector/corechecks/system/memory/memory_nix_test.go b/pkg/collector/corechecks/system/memory/memory_nix_test.go index b7cfd2e55a3f9..e8be54dbb93a9 100644 --- a/pkg/collector/corechecks/system/memory/memory_nix_test.go +++ b/pkg/collector/corechecks/system/memory/memory_nix_test.go @@ -11,7 +11,7 @@ import ( "fmt" "testing" - "github.com/shirou/gopsutil/v3/mem" + "github.com/shirou/gopsutil/v4/mem" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/pkg/collector/corechecks/system/uptime/uptime_nix.go b/pkg/collector/corechecks/system/uptime/uptime_nix.go index cc121ac42de61..41c8421153e3b 100644 --- a/pkg/collector/corechecks/system/uptime/uptime_nix.go +++ b/pkg/collector/corechecks/system/uptime/uptime_nix.go @@ -7,7 +7,7 @@ package uptime import ( - "github.com/shirou/gopsutil/v3/host" + "github.com/shirou/gopsutil/v4/host" ) // For testing purpose From 7b74a22d9fb07d4b2834add5db0d0a0f9446a6db Mon Sep 17 00:00:00 2001 From: Maxime Riaud <65339037+misteriaud@users.noreply.github.com> Date: Mon, 16 Dec 2024 19:47:06 +0100 Subject: [PATCH 239/303] [ASCII-2585] Migrating ProcessAgent to use IPC cert (#31844) --- cmd/process-agent/subcommands/status/status.go | 3 +-- comp/process/apiserver/apiserver.go | 4 ++++ comp/process/apiserver/apiserver_test.go | 2 ++ comp/process/bundle_test.go | 2 ++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/cmd/process-agent/subcommands/status/status.go b/cmd/process-agent/subcommands/status/status.go index 2660ee8fb71b4..8826c7547fb61 100644 --- a/cmd/process-agent/subcommands/status/status.go +++ b/cmd/process-agent/subcommands/status/status.go @@ -28,8 +28,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) -var httpClient = apiutil.GetClient(false) - const ( notRunning = ` ============= @@ -111,6 +109,7 @@ func writeError(log log.Component, w io.Writer, e error) { } func fetchStatus(statusURL string) ([]byte, error) { + httpClient := apiutil.GetClient(false) body, err := apiutil.DoGet(httpClient, statusURL, apiutil.LeaveConnectionOpen) if err != nil { return nil, status.NewConnectionError(err) diff --git a/comp/process/apiserver/apiserver.go b/comp/process/apiserver/apiserver.go index c216b2a93fef4..24bbe6353d06f 100644 --- a/comp/process/apiserver/apiserver.go +++ b/comp/process/apiserver/apiserver.go @@ -15,6 +15,7 @@ import ( "go.uber.org/fx" "github.com/DataDog/datadog-agent/cmd/process-agent/api" + "github.com/DataDog/datadog-agent/comp/api/authtoken" log "github.com/DataDog/datadog-agent/comp/core/log/def" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" ) @@ -32,6 +33,8 @@ type dependencies struct { Log log.Component + At authtoken.Component + APIServerDeps api.APIServerDeps } @@ -54,6 +57,7 @@ func newApiServer(deps dependencies) Component { ReadTimeout: timeout, WriteTimeout: timeout, IdleTimeout: timeout, + TLSConfig: deps.At.GetTLSServerConfig(), }, } diff --git a/comp/process/apiserver/apiserver_test.go b/comp/process/apiserver/apiserver_test.go index c9b0f4b96e92d..a0d94db4db4c2 100644 --- a/comp/process/apiserver/apiserver_test.go +++ b/comp/process/apiserver/apiserver_test.go @@ -13,6 +13,7 @@ import ( "github.com/stretchr/testify/assert" "go.uber.org/fx" + "github.com/DataDog/datadog-agent/comp/api/authtoken/fetchonlyimpl" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/settings/settingsimpl" "github.com/DataDog/datadog-agent/comp/core/status" @@ -39,6 +40,7 @@ func TestLifecycle(t *testing.T) { }), statusimpl.Module(), settingsimpl.MockModule(), + fetchonlyimpl.MockModule(), )) assert.Eventually(t, func() bool { diff --git a/comp/process/bundle_test.go b/comp/process/bundle_test.go index 591dce9f63cfb..9fb4131e013c0 100644 --- a/comp/process/bundle_test.go +++ b/comp/process/bundle_test.go @@ -12,6 +12,7 @@ import ( "github.com/stretchr/testify/require" "go.uber.org/fx" + "github.com/DataDog/datadog-agent/comp/api/authtoken/fetchonlyimpl" "github.com/DataDog/datadog-agent/comp/core" configComp "github.com/DataDog/datadog-agent/comp/core/config" log "github.com/DataDog/datadog-agent/comp/core/log/def" @@ -60,6 +61,7 @@ func TestBundleDependencies(t *testing.T) { rdnsquerier.MockModule(), npcollectorimpl.MockModule(), statsd.MockModule(), + fetchonlyimpl.MockModule(), ) } From 452a153abe3cac69e175a08f18add4a103051036 Mon Sep 17 00:00:00 2001 From: Maxime Riaud <65339037+misteriaud@users.noreply.github.com> Date: Mon, 16 Dec 2024 20:31:04 +0100 Subject: [PATCH 240/303] [ASCII-2597] use contant-time compare for grpc AuthInterceptor callbacks (#32246) --- cmd/cluster-agent/api/server.go | 3 ++- comp/api/api/apiimpl/security.go | 3 ++- pkg/util/grpc/auth.go | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/cmd/cluster-agent/api/server.go b/cmd/cluster-agent/api/server.go index 37efad4d900dd..c4f5c0534633a 100644 --- a/cmd/cluster-agent/api/server.go +++ b/cmd/cluster-agent/api/server.go @@ -12,6 +12,7 @@ package api import ( "context" + "crypto/subtle" "crypto/tls" "crypto/x509" "encoding/pem" @@ -116,7 +117,7 @@ func StartServer(ctx context.Context, w workloadmeta.Component, taggerComp tagge logWriter, _ := pkglogsetup.NewTLSHandshakeErrorWriter(4, log.WarnLvl) authInterceptor := grpcutil.AuthInterceptor(func(token string) (interface{}, error) { - if token != util.GetDCAAuthToken() { + if subtle.ConstantTimeCompare([]byte(token), []byte(util.GetDCAAuthToken())) == 0 { return struct{}{}, errors.New("Invalid session token") } diff --git a/comp/api/api/apiimpl/security.go b/comp/api/api/apiimpl/security.go index 4587871aecec3..f7176bbfbf99c 100644 --- a/comp/api/api/apiimpl/security.go +++ b/comp/api/api/apiimpl/security.go @@ -6,6 +6,7 @@ package apiimpl import ( + "crypto/subtle" "crypto/tls" "crypto/x509" "encoding/pem" @@ -34,7 +35,7 @@ func validateToken(next http.Handler) http.Handler { // parseToken parses the token and validate it for our gRPC API, it returns an empty // struct and an error or nil func parseToken(token string) (interface{}, error) { - if token != util.GetAuthToken() { + if subtle.ConstantTimeCompare([]byte(token), []byte(util.GetAuthToken())) == 0 { return struct{}{}, errors.New("Invalid session token") } diff --git a/pkg/util/grpc/auth.go b/pkg/util/grpc/auth.go index 382c4838919a6..fae83d5c22e8d 100644 --- a/pkg/util/grpc/auth.go +++ b/pkg/util/grpc/auth.go @@ -7,6 +7,7 @@ package grpc import ( "context" + "crypto/subtle" "errors" "fmt" @@ -45,7 +46,7 @@ func AuthInterceptor(verifier verifierFunc) grpc_auth.AuthFunc { // using the given token. func StaticAuthInterceptor(token string) grpc_auth.AuthFunc { return AuthInterceptor(func(reqToken string) (interface{}, error) { - if reqToken != token { + if subtle.ConstantTimeCompare([]byte(reqToken), []byte(token)) == 0 { return struct{}{}, errors.New("invalid session token") } From 1e3d0a9e0c7e8dfa74129243154b79062f655b6a Mon Sep 17 00:00:00 2001 From: Maxime Riaud <65339037+misteriaud@users.noreply.github.com> Date: Mon, 16 Dec 2024 21:16:53 +0100 Subject: [PATCH 241/303] [ASCII-2586] Migrating SecurityAgent to use IPC cert (#31845) --- cmd/security-agent/api/server.go | 48 ++++--------------- cmd/security-agent/main_windows.go | 6 ++- .../subcommands/start/command.go | 9 ++-- 3 files changed, 19 insertions(+), 44 deletions(-) diff --git a/cmd/security-agent/api/server.go b/cmd/security-agent/api/server.go index e776628e5ccd4..33c8ac033f55a 100644 --- a/cmd/security-agent/api/server.go +++ b/cmd/security-agent/api/server.go @@ -12,9 +12,6 @@ package api import ( "crypto/tls" - "crypto/x509" - "encoding/pem" - "fmt" stdLog "log" "net" "net/http" @@ -23,10 +20,10 @@ import ( "github.com/gorilla/mux" "github.com/DataDog/datadog-agent/cmd/security-agent/api/agent" + "github.com/DataDog/datadog-agent/comp/api/authtoken" "github.com/DataDog/datadog-agent/comp/core/settings" "github.com/DataDog/datadog-agent/comp/core/status" workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" - "github.com/DataDog/datadog-agent/pkg/api/security" "github.com/DataDog/datadog-agent/pkg/api/util" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -35,19 +32,21 @@ import ( // Server implements security agent API server type Server struct { - listener net.Listener - agent *agent.Agent + listener net.Listener + agent *agent.Agent + tlsConfig *tls.Config } // NewServer creates a new Server instance -func NewServer(statusComponent status.Component, settings settings.Component, wmeta workloadmeta.Component) (*Server, error) { +func NewServer(statusComponent status.Component, settings settings.Component, wmeta workloadmeta.Component, at authtoken.Component) (*Server, error) { listener, err := newListener() if err != nil { return nil, err } return &Server{ - listener: listener, - agent: agent.NewAgent(statusComponent, settings, wmeta), + listener: listener, + agent: agent.NewAgent(statusComponent, settings, wmeta), + tlsConfig: at.GetTLSClientConfig(), }, nil } @@ -62,43 +61,16 @@ func (s *Server) Start() error { // Validate token for every request r.Use(validateToken) - err := util.CreateAndSetAuthToken(pkgconfigsetup.Datadog()) - if err != nil { - return err - } - - hosts := []string{"127.0.0.1", "localhost"} - _, rootCertPEM, rootKey, err := security.GenerateRootCert(hosts, 2048) - if err != nil { - return fmt.Errorf("unable to start TLS server") - } - - // PEM encode the private key - rootKeyPEM := pem.EncodeToMemory(&pem.Block{ - Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(rootKey), - }) - - // Create a TLS cert using the private key and certificate - rootTLSCert, err := tls.X509KeyPair(rootCertPEM, rootKeyPEM) - if err != nil { - return fmt.Errorf("invalid key pair: %v", err) - } - - tlsConfig := tls.Config{ - Certificates: []tls.Certificate{rootTLSCert}, - MinVersion: tls.VersionTLS13, - } - // Use a stack depth of 4 on top of the default one to get a relevant filename in the stdlib logWriter, _ := pkglogsetup.NewLogWriter(4, log.ErrorLvl) srv := &http.Server{ Handler: r, ErrorLog: stdLog.New(logWriter, "Error from the agent http API server: ", 0), // log errors to seelog, - TLSConfig: &tlsConfig, + TLSConfig: s.tlsConfig, WriteTimeout: pkgconfigsetup.Datadog().GetDuration("server_timeout") * time.Second, } - tlsListener := tls.NewListener(s.listener, &tlsConfig) + tlsListener := tls.NewListener(s.listener, s.tlsConfig) go srv.Serve(tlsListener) //nolint:errcheck return nil diff --git a/cmd/security-agent/main_windows.go b/cmd/security-agent/main_windows.go index b81223e6aebc1..a729e7a2003f0 100644 --- a/cmd/security-agent/main_windows.go +++ b/cmd/security-agent/main_windows.go @@ -25,6 +25,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/start" "github.com/DataDog/datadog-agent/comp/agent/autoexit" "github.com/DataDog/datadog-agent/comp/agent/autoexit/autoexitimpl" + "github.com/DataDog/datadog-agent/comp/api/authtoken" "github.com/DataDog/datadog-agent/comp/api/authtoken/fetchonlyimpl" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" @@ -91,10 +92,11 @@ func (s *service) Run(svcctx context.Context) error { params := &cliParams{} err := fxutil.OneShot( func(log log.Component, config config.Component, _ secrets.Component, _ statsd.Component, _ sysprobeconfig.Component, - telemetry telemetry.Component, _ workloadmeta.Component, _ *cliParams, statusComponent status.Component, _ autoexit.Component, settings settings.Component, wmeta workloadmeta.Component) error { + telemetry telemetry.Component, _ workloadmeta.Component, _ *cliParams, statusComponent status.Component, _ autoexit.Component, + settings settings.Component, wmeta workloadmeta.Component, at authtoken.Component) error { defer start.StopAgent(log) - err := start.RunAgent(log, config, telemetry, statusComponent, settings, wmeta) + err := start.RunAgent(log, config, telemetry, statusComponent, settings, wmeta, at) if err != nil { if errors.Is(err, start.ErrAllComponentsDisabled) { // If all components are disabled, we should exit cleanly diff --git a/cmd/security-agent/subcommands/start/command.go b/cmd/security-agent/subcommands/start/command.go index 12a93fc4560ff..2a3dd883dcd84 100644 --- a/cmd/security-agent/subcommands/start/command.go +++ b/cmd/security-agent/subcommands/start/command.go @@ -29,6 +29,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/runtime" "github.com/DataDog/datadog-agent/comp/agent/autoexit" "github.com/DataDog/datadog-agent/comp/agent/autoexit/autoexitimpl" + "github.com/DataDog/datadog-agent/comp/api/authtoken" "github.com/DataDog/datadog-agent/comp/api/authtoken/fetchonlyimpl" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" @@ -201,10 +202,10 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { // TODO(components): note how workloadmeta is passed anonymously, it is still required as it is used // as a global. This should eventually be fixed and all workloadmeta interactions should be via the // injected instance. -func start(log log.Component, config config.Component, _ secrets.Component, _ statsd.Component, _ sysprobeconfig.Component, telemetry telemetry.Component, statusComponent status.Component, _ pid.Component, _ autoexit.Component, settings settings.Component, wmeta workloadmeta.Component) error { +func start(log log.Component, config config.Component, _ secrets.Component, _ statsd.Component, _ sysprobeconfig.Component, telemetry telemetry.Component, statusComponent status.Component, _ pid.Component, _ autoexit.Component, settings settings.Component, wmeta workloadmeta.Component, at authtoken.Component) error { defer StopAgent(log) - err := RunAgent(log, config, telemetry, statusComponent, settings, wmeta) + err := RunAgent(log, config, telemetry, statusComponent, settings, wmeta, at) if errors.Is(err, ErrAllComponentsDisabled) || errors.Is(err, errNoAPIKeyConfigured) { return nil } @@ -256,7 +257,7 @@ var ErrAllComponentsDisabled = errors.New("all security-agent component are disa var errNoAPIKeyConfigured = errors.New("no API key configured") // RunAgent initialized resources and starts API server -func RunAgent(log log.Component, config config.Component, telemetry telemetry.Component, statusComponent status.Component, settings settings.Component, wmeta workloadmeta.Component) (err error) { +func RunAgent(log log.Component, config config.Component, telemetry telemetry.Component, statusComponent status.Component, settings settings.Component, wmeta workloadmeta.Component, at authtoken.Component) (err error) { if err := coredump.Setup(config); err != nil { log.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } @@ -299,7 +300,7 @@ func RunAgent(log log.Component, config config.Component, telemetry telemetry.Co } }() - srv, err = api.NewServer(statusComponent, settings, wmeta) + srv, err = api.NewServer(statusComponent, settings, wmeta, at) if err != nil { return log.Errorf("Error while creating api server, exiting: %v", err) } From 898efd46fa0034654361c3ed860826bcfde1fcbd Mon Sep 17 00:00:00 2001 From: Maxime Riaud <65339037+misteriaud@users.noreply.github.com> Date: Mon, 16 Dec 2024 22:03:58 +0100 Subject: [PATCH 242/303] bump github.com/hectane/go-acl (#32007) --- comp/api/authtoken/go.mod | 2 +- comp/api/authtoken/go.sum | 4 ++-- comp/core/config/go.mod | 2 +- comp/core/config/go.sum | 4 ++-- comp/core/log/impl-trace/go.mod | 2 +- comp/core/log/impl-trace/go.sum | 4 ++-- comp/core/log/impl/go.mod | 2 +- comp/core/log/impl/go.sum | 4 ++-- comp/core/log/mock/go.sum | 4 ++-- comp/core/status/statusimpl/go.mod | 2 +- comp/core/status/statusimpl/go.sum | 4 ++-- comp/forwarder/defaultforwarder/go.mod | 2 +- comp/forwarder/defaultforwarder/go.sum | 4 ++-- comp/forwarder/orchestrator/orchestratorinterface/go.mod | 2 +- comp/forwarder/orchestrator/orchestratorinterface/go.sum | 4 ++-- comp/logs/agent/config/go.mod | 2 +- comp/logs/agent/config/go.sum | 4 ++-- comp/otelcol/converter/impl/go.mod | 2 +- comp/otelcol/converter/impl/go.sum | 4 ++-- comp/otelcol/ddflareextension/impl/go.mod | 2 +- comp/otelcol/ddflareextension/impl/go.sum | 4 ++-- comp/otelcol/logsagentpipeline/go.mod | 2 +- comp/otelcol/logsagentpipeline/go.sum | 4 ++-- comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod | 2 +- comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum | 4 ++-- comp/otelcol/otlp/components/exporter/datadogexporter/go.mod | 2 +- comp/otelcol/otlp/components/exporter/datadogexporter/go.sum | 4 ++-- .../otelcol/otlp/components/exporter/logsagentexporter/go.mod | 2 +- .../otelcol/otlp/components/exporter/logsagentexporter/go.sum | 4 ++-- .../otlp/components/exporter/serializerexporter/go.mod | 2 +- .../otlp/components/exporter/serializerexporter/go.sum | 4 ++-- comp/otelcol/otlp/testutil/go.mod | 2 +- comp/otelcol/otlp/testutil/go.sum | 4 ++-- comp/serializer/compression/go.mod | 2 +- comp/serializer/compression/go.sum | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- pkg/api/go.mod | 2 +- pkg/api/go.sum | 4 ++-- pkg/config/env/go.mod | 2 +- pkg/config/env/go.sum | 4 ++-- pkg/config/mock/go.mod | 2 +- pkg/config/mock/go.sum | 4 ++-- pkg/config/remote/go.mod | 2 +- pkg/config/remote/go.sum | 4 ++-- pkg/config/setup/go.mod | 2 +- pkg/config/setup/go.sum | 4 ++-- pkg/config/utils/go.mod | 2 +- pkg/config/utils/go.sum | 4 ++-- pkg/logs/auditor/go.mod | 2 +- pkg/logs/auditor/go.sum | 4 ++-- pkg/logs/client/go.mod | 2 +- pkg/logs/client/go.sum | 4 ++-- pkg/logs/diagnostic/go.mod | 2 +- pkg/logs/diagnostic/go.sum | 4 ++-- pkg/logs/message/go.mod | 2 +- pkg/logs/message/go.sum | 4 ++-- pkg/logs/pipeline/go.mod | 2 +- pkg/logs/pipeline/go.sum | 4 ++-- pkg/logs/processor/go.mod | 2 +- pkg/logs/processor/go.sum | 4 ++-- pkg/logs/sds/go.mod | 2 +- pkg/logs/sds/go.sum | 4 ++-- pkg/logs/sender/go.mod | 2 +- pkg/logs/sender/go.sum | 4 ++-- pkg/logs/sources/go.mod | 2 +- pkg/logs/sources/go.sum | 4 ++-- pkg/logs/util/testutils/go.mod | 2 +- pkg/logs/util/testutils/go.sum | 4 ++-- pkg/metrics/go.mod | 2 +- pkg/metrics/go.sum | 4 ++-- pkg/serializer/go.mod | 2 +- pkg/serializer/go.sum | 4 ++-- pkg/util/filesystem/go.mod | 2 +- pkg/util/filesystem/go.sum | 4 ++-- pkg/util/flavor/go.mod | 2 +- pkg/util/flavor/go.sum | 4 ++-- pkg/util/grpc/go.mod | 2 +- pkg/util/grpc/go.sum | 4 ++-- pkg/util/http/go.mod | 2 +- pkg/util/http/go.sum | 4 ++-- pkg/util/log/setup/go.mod | 2 +- pkg/util/log/setup/go.sum | 4 ++-- pkg/util/system/go.mod | 2 +- pkg/util/system/go.sum | 4 ++-- test/otel/go.mod | 2 +- test/otel/go.sum | 4 ++-- 87 files changed, 131 insertions(+), 131 deletions(-) diff --git a/comp/api/authtoken/go.mod b/comp/api/authtoken/go.mod index ca4e617286f9e..24081f4824780 100644 --- a/comp/api/authtoken/go.mod +++ b/comp/api/authtoken/go.mod @@ -84,7 +84,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect diff --git a/comp/api/authtoken/go.sum b/comp/api/authtoken/go.sum index 9694f5d5e2355..dd16364891695 100644 --- a/comp/api/authtoken/go.sum +++ b/comp/api/authtoken/go.sum @@ -87,8 +87,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/comp/core/config/go.mod b/comp/core/config/go.mod index a8fc87fffecf0..00be19b3b9ba7 100644 --- a/comp/core/config/go.mod +++ b/comp/core/config/go.mod @@ -75,7 +75,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect diff --git a/comp/core/config/go.sum b/comp/core/config/go.sum index 49f42d5d3e0a6..323c4fa804e83 100644 --- a/comp/core/config/go.sum +++ b/comp/core/config/go.sum @@ -88,8 +88,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/comp/core/log/impl-trace/go.mod b/comp/core/log/impl-trace/go.mod index d78d19fde7f68..309b259ad3616 100644 --- a/comp/core/log/impl-trace/go.mod +++ b/comp/core/log/impl-trace/go.mod @@ -84,7 +84,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect diff --git a/comp/core/log/impl-trace/go.sum b/comp/core/log/impl-trace/go.sum index 9694f5d5e2355..dd16364891695 100644 --- a/comp/core/log/impl-trace/go.sum +++ b/comp/core/log/impl-trace/go.sum @@ -87,8 +87,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/comp/core/log/impl/go.mod b/comp/core/log/impl/go.mod index 0d68073c13084..12d048a84bd4d 100644 --- a/comp/core/log/impl/go.mod +++ b/comp/core/log/impl/go.mod @@ -74,7 +74,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect diff --git a/comp/core/log/impl/go.sum b/comp/core/log/impl/go.sum index 9694f5d5e2355..dd16364891695 100644 --- a/comp/core/log/impl/go.sum +++ b/comp/core/log/impl/go.sum @@ -87,8 +87,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/comp/core/log/mock/go.sum b/comp/core/log/mock/go.sum index 2ad11aee593c1..4b0aad4f95926 100644 --- a/comp/core/log/mock/go.sum +++ b/comp/core/log/mock/go.sum @@ -80,8 +80,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= diff --git a/comp/core/status/statusimpl/go.mod b/comp/core/status/statusimpl/go.mod index 9487310619057..c121259bfa141 100644 --- a/comp/core/status/statusimpl/go.mod +++ b/comp/core/status/statusimpl/go.mod @@ -88,7 +88,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect diff --git a/comp/core/status/statusimpl/go.sum b/comp/core/status/statusimpl/go.sum index fafe0837efa7e..73fea28e04146 100644 --- a/comp/core/status/statusimpl/go.sum +++ b/comp/core/status/statusimpl/go.sum @@ -93,8 +93,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/comp/forwarder/defaultforwarder/go.mod b/comp/forwarder/defaultforwarder/go.mod index a0891b10fda75..97eb61b033263 100644 --- a/comp/forwarder/defaultforwarder/go.mod +++ b/comp/forwarder/defaultforwarder/go.mod @@ -113,7 +113,7 @@ require ( github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/klauspost/compress v1.17.11 // indirect diff --git a/comp/forwarder/defaultforwarder/go.sum b/comp/forwarder/defaultforwarder/go.sum index 2e4c8055f6ab0..735da3a7badda 100644 --- a/comp/forwarder/defaultforwarder/go.sum +++ b/comp/forwarder/defaultforwarder/go.sum @@ -97,8 +97,8 @@ github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/comp/forwarder/orchestrator/orchestratorinterface/go.mod b/comp/forwarder/orchestrator/orchestratorinterface/go.mod index 3022f485e02a3..7c55fcf139cf0 100644 --- a/comp/forwarder/orchestrator/orchestratorinterface/go.mod +++ b/comp/forwarder/orchestrator/orchestratorinterface/go.mod @@ -117,7 +117,7 @@ require ( github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/klauspost/compress v1.17.11 // indirect diff --git a/comp/forwarder/orchestrator/orchestratorinterface/go.sum b/comp/forwarder/orchestrator/orchestratorinterface/go.sum index 68e574e5c8151..c23eb9a608463 100644 --- a/comp/forwarder/orchestrator/orchestratorinterface/go.sum +++ b/comp/forwarder/orchestrator/orchestratorinterface/go.sum @@ -100,8 +100,8 @@ github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/comp/logs/agent/config/go.mod b/comp/logs/agent/config/go.mod index 5e99aa77604f0..1ae81a7be7da6 100644 --- a/comp/logs/agent/config/go.mod +++ b/comp/logs/agent/config/go.mod @@ -76,7 +76,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect diff --git a/comp/logs/agent/config/go.sum b/comp/logs/agent/config/go.sum index 9694f5d5e2355..dd16364891695 100644 --- a/comp/logs/agent/config/go.sum +++ b/comp/logs/agent/config/go.sum @@ -87,8 +87,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/comp/otelcol/converter/impl/go.mod b/comp/otelcol/converter/impl/go.mod index b3bae2ce5b62b..ec9c75f1a3c68 100644 --- a/comp/otelcol/converter/impl/go.mod +++ b/comp/otelcol/converter/impl/go.mod @@ -86,7 +86,7 @@ require ( github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-viper/mapstructure/v2 v2.2.1 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/knadh/koanf/maps v0.1.1 // indirect diff --git a/comp/otelcol/converter/impl/go.sum b/comp/otelcol/converter/impl/go.sum index a98a26b75f480..4239a8ba70c9d 100644 --- a/comp/otelcol/converter/impl/go.sum +++ b/comp/otelcol/converter/impl/go.sum @@ -89,8 +89,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/comp/otelcol/ddflareextension/impl/go.mod b/comp/otelcol/ddflareextension/impl/go.mod index 0719700f9222a..7af5d796d92fb 100644 --- a/comp/otelcol/ddflareextension/impl/go.mod +++ b/comp/otelcol/ddflareextension/impl/go.mod @@ -358,7 +358,7 @@ require ( github.com/hashicorp/hcl v1.0.1-vault-5 // indirect github.com/hashicorp/nomad/api v0.0.0-20240717122358-3d93bd3778f3 // indirect github.com/hashicorp/serf v0.10.1 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/hetznercloud/hcloud-go/v2 v2.10.2 // indirect github.com/iancoleman/strcase v0.3.0 // indirect github.com/imdario/mergo v0.3.16 // indirect diff --git a/comp/otelcol/ddflareextension/impl/go.sum b/comp/otelcol/ddflareextension/impl/go.sum index 7a6bcb0649c64..d4f8e67e79da5 100644 --- a/comp/otelcol/ddflareextension/impl/go.sum +++ b/comp/otelcol/ddflareextension/impl/go.sum @@ -443,8 +443,8 @@ github.com/hashicorp/nomad/api v0.0.0-20240717122358-3d93bd3778f3 h1:fgVfQ4AC1av github.com/hashicorp/nomad/api v0.0.0-20240717122358-3d93bd3778f3/go.mod h1:svtxn6QnrQ69P23VvIWMR34tg3vmwLz4UdUzm1dSCgE= github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/hetznercloud/hcloud-go/v2 v2.10.2 h1:9gyTUPhfNbfbS40Spgij5mV5k37bOZgt8iHKCbfGs5I= github.com/hetznercloud/hcloud-go/v2 v2.10.2/go.mod h1:xQ+8KhIS62W0D78Dpi57jsufWh844gUw1az5OUvaeq8= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= diff --git a/comp/otelcol/logsagentpipeline/go.mod b/comp/otelcol/logsagentpipeline/go.mod index fd1925f5a1a1d..2a575bf145e7e 100644 --- a/comp/otelcol/logsagentpipeline/go.mod +++ b/comp/otelcol/logsagentpipeline/go.mod @@ -121,7 +121,7 @@ require ( github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/klauspost/compress v1.17.11 // indirect diff --git a/comp/otelcol/logsagentpipeline/go.sum b/comp/otelcol/logsagentpipeline/go.sum index 9061e9b89a5c6..b0f7d9ee40dfd 100644 --- a/comp/otelcol/logsagentpipeline/go.sum +++ b/comp/otelcol/logsagentpipeline/go.sum @@ -99,8 +99,8 @@ github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod index 6bce0b3c962d4..711aa095cc468 100644 --- a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod +++ b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.mod @@ -136,7 +136,7 @@ require ( github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/klauspost/compress v1.17.11 // indirect diff --git a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum index 9061e9b89a5c6..b0f7d9ee40dfd 100644 --- a/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum +++ b/comp/otelcol/logsagentpipeline/logsagentpipelineimpl/go.sum @@ -99,8 +99,8 @@ github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod index 5023166f00df5..c3e28a412d2e6 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.mod @@ -239,7 +239,7 @@ require ( github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect diff --git a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum index 5107430987dd3..e9c507fbafa8a 100644 --- a/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/datadogexporter/go.sum @@ -175,8 +175,8 @@ github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod index 23ddd3225d779..80cffa6a338c5 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.mod @@ -110,7 +110,7 @@ require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect diff --git a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum index 85a19bf8e57b5..c50808e9a40cd 100644 --- a/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/logsagentexporter/go.sum @@ -121,8 +121,8 @@ github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod index 3ed3c5a02c175..1f8b9e2be8d1d 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.mod @@ -161,7 +161,7 @@ require ( github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect diff --git a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum index b0e60957170e6..a33f1cc34269d 100644 --- a/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum +++ b/comp/otelcol/otlp/components/exporter/serializerexporter/go.sum @@ -139,8 +139,8 @@ github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/comp/otelcol/otlp/testutil/go.mod b/comp/otelcol/otlp/testutil/go.mod index 58832aca7482e..d51e4d63d2b36 100644 --- a/comp/otelcol/otlp/testutil/go.mod +++ b/comp/otelcol/otlp/testutil/go.mod @@ -72,7 +72,7 @@ require ( github.com/go-ole/go-ole v1.3.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect diff --git a/comp/otelcol/otlp/testutil/go.sum b/comp/otelcol/otlp/testutil/go.sum index 22f79264c82e8..0778f221b9bca 100644 --- a/comp/otelcol/otlp/testutil/go.sum +++ b/comp/otelcol/otlp/testutil/go.sum @@ -98,8 +98,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/comp/serializer/compression/go.mod b/comp/serializer/compression/go.mod index a46ee59b26ae6..f1c59cd40d645 100644 --- a/comp/serializer/compression/go.mod +++ b/comp/serializer/compression/go.mod @@ -71,7 +71,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect diff --git a/comp/serializer/compression/go.sum b/comp/serializer/compression/go.sum index a3f8c86e6fc2e..3b405d22ebcc8 100644 --- a/comp/serializer/compression/go.sum +++ b/comp/serializer/compression/go.sum @@ -89,8 +89,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/go.mod b/go.mod index 468318882d2f0..9f95055c7d7b6 100644 --- a/go.mod +++ b/go.mod @@ -227,7 +227,7 @@ require ( github.com/hashicorp/consul/api v1.30.0 github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/golang-lru/v2 v2.0.7 - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb github.com/iceber/iouring-go v0.0.0-20230403020409-002cfd2e2a90 github.com/imdario/mergo v0.3.16 github.com/invopop/jsonschema v0.12.0 diff --git a/go.sum b/go.sum index 5fd04067f4905..038a1a011d963 100644 --- a/go.sum +++ b/go.sum @@ -971,8 +971,8 @@ github.com/hashicorp/nomad/api v0.0.0-20240717122358-3d93bd3778f3 h1:fgVfQ4AC1av github.com/hashicorp/nomad/api v0.0.0-20240717122358-3d93bd3778f3/go.mod h1:svtxn6QnrQ69P23VvIWMR34tg3vmwLz4UdUzm1dSCgE= github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/hetznercloud/hcloud-go/v2 v2.10.2 h1:9gyTUPhfNbfbS40Spgij5mV5k37bOZgt8iHKCbfGs5I= github.com/hetznercloud/hcloud-go/v2 v2.10.2/go.mod h1:xQ+8KhIS62W0D78Dpi57jsufWh844gUw1az5OUvaeq8= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= diff --git a/pkg/api/go.mod b/pkg/api/go.mod index c3499a2fb94c2..ab50796cf7a58 100644 --- a/pkg/api/go.mod +++ b/pkg/api/go.mod @@ -76,7 +76,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect diff --git a/pkg/api/go.sum b/pkg/api/go.sum index 9694f5d5e2355..dd16364891695 100644 --- a/pkg/api/go.sum +++ b/pkg/api/go.sum @@ -87,8 +87,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/config/env/go.mod b/pkg/config/env/go.mod index 637c78a705df1..7b16228030c49 100644 --- a/pkg/config/env/go.mod +++ b/pkg/config/env/go.mod @@ -31,7 +31,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect diff --git a/pkg/config/env/go.sum b/pkg/config/env/go.sum index d7d4a9a3701e0..4a2c4e5bdc610 100644 --- a/pkg/config/env/go.sum +++ b/pkg/config/env/go.sum @@ -81,8 +81,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= diff --git a/pkg/config/mock/go.mod b/pkg/config/mock/go.mod index 48f1f452fa096..f4edf2bbb8c8e 100644 --- a/pkg/config/mock/go.mod +++ b/pkg/config/mock/go.mod @@ -61,7 +61,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/magiconair/properties v1.8.7 // indirect diff --git a/pkg/config/mock/go.sum b/pkg/config/mock/go.sum index 3f00397cbc301..7fdf16db5981c 100644 --- a/pkg/config/mock/go.sum +++ b/pkg/config/mock/go.sum @@ -86,8 +86,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/config/remote/go.mod b/pkg/config/remote/go.mod index 282d7f34ff86f..a1c4a4ebbc561 100644 --- a/pkg/config/remote/go.mod +++ b/pkg/config/remote/go.mod @@ -100,7 +100,7 @@ require ( github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8 // indirect github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect github.com/hashicorp/go-sockaddr v1.0.6 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect diff --git a/pkg/config/remote/go.sum b/pkg/config/remote/go.sum index 84cc570d9ad84..ca537b0d1660e 100644 --- a/pkg/config/remote/go.sum +++ b/pkg/config/remote/go.sum @@ -149,8 +149,8 @@ github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyf github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/config/setup/go.mod b/pkg/config/setup/go.mod index b7c9ff41de81b..efed57c318b83 100644 --- a/pkg/config/setup/go.mod +++ b/pkg/config/setup/go.mod @@ -73,7 +73,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect diff --git a/pkg/config/setup/go.sum b/pkg/config/setup/go.sum index 7f15a6d221890..eb1a58f09f4b8 100644 --- a/pkg/config/setup/go.sum +++ b/pkg/config/setup/go.sum @@ -91,8 +91,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/config/utils/go.mod b/pkg/config/utils/go.mod index 5fc90b2da63fd..ef80f1fde725b 100644 --- a/pkg/config/utils/go.mod +++ b/pkg/config/utils/go.mod @@ -66,7 +66,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/magiconair/properties v1.8.7 // indirect diff --git a/pkg/config/utils/go.sum b/pkg/config/utils/go.sum index 3f00397cbc301..7fdf16db5981c 100644 --- a/pkg/config/utils/go.sum +++ b/pkg/config/utils/go.sum @@ -86,8 +86,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/logs/auditor/go.mod b/pkg/logs/auditor/go.mod index 3fc9bf65dfa46..f9543ab0dda08 100644 --- a/pkg/logs/auditor/go.mod +++ b/pkg/logs/auditor/go.mod @@ -80,7 +80,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/magiconair/properties v1.8.7 // indirect diff --git a/pkg/logs/auditor/go.sum b/pkg/logs/auditor/go.sum index 3f00397cbc301..7fdf16db5981c 100644 --- a/pkg/logs/auditor/go.sum +++ b/pkg/logs/auditor/go.sum @@ -86,8 +86,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/logs/client/go.mod b/pkg/logs/client/go.mod index 093922b236bf3..49dad213dc24f 100644 --- a/pkg/logs/client/go.mod +++ b/pkg/logs/client/go.mod @@ -100,7 +100,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/klauspost/compress v1.17.11 // indirect diff --git a/pkg/logs/client/go.sum b/pkg/logs/client/go.sum index 1140bccbba9c9..5f7384266b821 100644 --- a/pkg/logs/client/go.sum +++ b/pkg/logs/client/go.sum @@ -88,8 +88,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/logs/diagnostic/go.mod b/pkg/logs/diagnostic/go.mod index 65fb4af75f769..690eb4c56105e 100644 --- a/pkg/logs/diagnostic/go.mod +++ b/pkg/logs/diagnostic/go.mod @@ -84,7 +84,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect diff --git a/pkg/logs/diagnostic/go.sum b/pkg/logs/diagnostic/go.sum index 9694f5d5e2355..dd16364891695 100644 --- a/pkg/logs/diagnostic/go.sum +++ b/pkg/logs/diagnostic/go.sum @@ -87,8 +87,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/logs/message/go.mod b/pkg/logs/message/go.mod index 716c4a57de92f..93c9793bafaf5 100644 --- a/pkg/logs/message/go.mod +++ b/pkg/logs/message/go.mod @@ -76,7 +76,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/magiconair/properties v1.8.7 // indirect diff --git a/pkg/logs/message/go.sum b/pkg/logs/message/go.sum index 3f00397cbc301..7fdf16db5981c 100644 --- a/pkg/logs/message/go.sum +++ b/pkg/logs/message/go.sum @@ -86,8 +86,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/logs/pipeline/go.mod b/pkg/logs/pipeline/go.mod index b2cca0985481e..10ad9ab1983b5 100644 --- a/pkg/logs/pipeline/go.mod +++ b/pkg/logs/pipeline/go.mod @@ -120,7 +120,7 @@ require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/klauspost/compress v1.17.11 // indirect diff --git a/pkg/logs/pipeline/go.sum b/pkg/logs/pipeline/go.sum index 9061e9b89a5c6..b0f7d9ee40dfd 100644 --- a/pkg/logs/pipeline/go.sum +++ b/pkg/logs/pipeline/go.sum @@ -99,8 +99,8 @@ github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/logs/processor/go.mod b/pkg/logs/processor/go.mod index cc9458ea710c0..b98eacd627e97 100644 --- a/pkg/logs/processor/go.mod +++ b/pkg/logs/processor/go.mod @@ -99,7 +99,7 @@ require ( github.com/go-ole/go-ole v1.3.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/klauspost/compress v1.17.11 // indirect diff --git a/pkg/logs/processor/go.sum b/pkg/logs/processor/go.sum index f97a65425513e..1fb7bbe76cabd 100644 --- a/pkg/logs/processor/go.sum +++ b/pkg/logs/processor/go.sum @@ -94,8 +94,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/logs/sds/go.mod b/pkg/logs/sds/go.mod index 33c40479ed13f..f5818700af57b 100644 --- a/pkg/logs/sds/go.mod +++ b/pkg/logs/sds/go.mod @@ -93,7 +93,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/klauspost/compress v1.17.11 // indirect diff --git a/pkg/logs/sds/go.sum b/pkg/logs/sds/go.sum index a5a699a22e560..c9341f0f48498 100644 --- a/pkg/logs/sds/go.sum +++ b/pkg/logs/sds/go.sum @@ -88,8 +88,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/logs/sender/go.mod b/pkg/logs/sender/go.mod index 5a77fb5bb761d..437b2592b6e94 100644 --- a/pkg/logs/sender/go.mod +++ b/pkg/logs/sender/go.mod @@ -100,7 +100,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/klauspost/compress v1.17.11 // indirect diff --git a/pkg/logs/sender/go.sum b/pkg/logs/sender/go.sum index 1140bccbba9c9..5f7384266b821 100644 --- a/pkg/logs/sender/go.sum +++ b/pkg/logs/sender/go.sum @@ -88,8 +88,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/logs/sources/go.mod b/pkg/logs/sources/go.mod index a5ff5d7147d72..47c016d543c91 100644 --- a/pkg/logs/sources/go.mod +++ b/pkg/logs/sources/go.mod @@ -74,7 +74,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/magiconair/properties v1.8.7 // indirect diff --git a/pkg/logs/sources/go.sum b/pkg/logs/sources/go.sum index 3f00397cbc301..7fdf16db5981c 100644 --- a/pkg/logs/sources/go.sum +++ b/pkg/logs/sources/go.sum @@ -86,8 +86,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/logs/util/testutils/go.mod b/pkg/logs/util/testutils/go.mod index ebf193c2c90a2..46e01043de4bf 100644 --- a/pkg/logs/util/testutils/go.mod +++ b/pkg/logs/util/testutils/go.mod @@ -74,7 +74,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/magiconair/properties v1.8.7 // indirect diff --git a/pkg/logs/util/testutils/go.sum b/pkg/logs/util/testutils/go.sum index 3f00397cbc301..7fdf16db5981c 100644 --- a/pkg/logs/util/testutils/go.sum +++ b/pkg/logs/util/testutils/go.sum @@ -86,8 +86,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/metrics/go.mod b/pkg/metrics/go.mod index a7369cfd728f6..66e73954c2885 100644 --- a/pkg/metrics/go.mod +++ b/pkg/metrics/go.mod @@ -85,7 +85,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/klauspost/compress v1.17.11 // indirect diff --git a/pkg/metrics/go.sum b/pkg/metrics/go.sum index cc70504832885..31112092709e6 100644 --- a/pkg/metrics/go.sum +++ b/pkg/metrics/go.sum @@ -96,8 +96,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/serializer/go.mod b/pkg/serializer/go.mod index 62d3ab7c2450c..ef22edcd67b2d 100644 --- a/pkg/serializer/go.mod +++ b/pkg/serializer/go.mod @@ -140,7 +140,7 @@ require ( github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/klauspost/compress v1.17.11 // indirect diff --git a/pkg/serializer/go.sum b/pkg/serializer/go.sum index 240d357b106d4..0e4568db35dfe 100644 --- a/pkg/serializer/go.sum +++ b/pkg/serializer/go.sum @@ -118,8 +118,8 @@ github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/util/filesystem/go.mod b/pkg/util/filesystem/go.mod index 1a0effc2f07e8..292bb06f164b9 100644 --- a/pkg/util/filesystem/go.mod +++ b/pkg/util/filesystem/go.mod @@ -12,7 +12,7 @@ replace ( require ( github.com/DataDog/datadog-agent/pkg/util/log v0.59.1 github.com/DataDog/datadog-agent/pkg/util/winutil v0.59.1 - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb github.com/shirou/gopsutil/v4 v4.24.11 github.com/stretchr/testify v1.10.0 golang.org/x/sys v0.28.0 diff --git a/pkg/util/filesystem/go.sum b/pkg/util/filesystem/go.sum index 97cab95a8f162..14cc56a3421e8 100644 --- a/pkg/util/filesystem/go.sum +++ b/pkg/util/filesystem/go.sum @@ -7,8 +7,8 @@ github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= diff --git a/pkg/util/flavor/go.mod b/pkg/util/flavor/go.mod index 4b2095a3d95dd..91efb20fa615f 100644 --- a/pkg/util/flavor/go.mod +++ b/pkg/util/flavor/go.mod @@ -62,7 +62,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/magiconair/properties v1.8.7 // indirect diff --git a/pkg/util/flavor/go.sum b/pkg/util/flavor/go.sum index 3f00397cbc301..7fdf16db5981c 100644 --- a/pkg/util/flavor/go.sum +++ b/pkg/util/flavor/go.sum @@ -86,8 +86,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/util/grpc/go.mod b/pkg/util/grpc/go.mod index 46b4cce771519..9598ddb031dea 100644 --- a/pkg/util/grpc/go.mod +++ b/pkg/util/grpc/go.mod @@ -75,7 +75,7 @@ require ( github.com/golang/protobuf v1.5.4 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/magiconair/properties v1.8.7 // indirect diff --git a/pkg/util/grpc/go.sum b/pkg/util/grpc/go.sum index 6b1fd57ab75ad..f5e59fbfc1ba8 100644 --- a/pkg/util/grpc/go.sum +++ b/pkg/util/grpc/go.sum @@ -105,8 +105,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFb github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/util/http/go.mod b/pkg/util/http/go.mod index fd083ad63e413..74a5f34311844 100644 --- a/pkg/util/http/go.mod +++ b/pkg/util/http/go.mod @@ -64,7 +64,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/magiconair/properties v1.8.7 // indirect diff --git a/pkg/util/http/go.sum b/pkg/util/http/go.sum index 71817661e74a3..0ba8e47583917 100644 --- a/pkg/util/http/go.sum +++ b/pkg/util/http/go.sum @@ -86,8 +86,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/util/log/setup/go.mod b/pkg/util/log/setup/go.mod index 480a4c8b2e4cd..f2c45da509f53 100644 --- a/pkg/util/log/setup/go.mod +++ b/pkg/util/log/setup/go.mod @@ -63,7 +63,7 @@ require ( github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/magiconair/properties v1.8.7 // indirect diff --git a/pkg/util/log/setup/go.sum b/pkg/util/log/setup/go.sum index 3f00397cbc301..7fdf16db5981c 100644 --- a/pkg/util/log/setup/go.sum +++ b/pkg/util/log/setup/go.sum @@ -86,8 +86,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.13.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqC github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= diff --git a/pkg/util/system/go.mod b/pkg/util/system/go.mod index b91b137b720c2..78e3380d124ed 100644 --- a/pkg/util/system/go.mod +++ b/pkg/util/system/go.mod @@ -30,7 +30,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/ebitengine/purego v0.8.1 // indirect github.com/go-ole/go-ole v1.3.0 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect diff --git a/pkg/util/system/go.sum b/pkg/util/system/go.sum index 5dc55f7f10161..47e0acb25ee1f 100644 --- a/pkg/util/system/go.sum +++ b/pkg/util/system/go.sum @@ -10,8 +10,8 @@ github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= diff --git a/test/otel/go.mod b/test/otel/go.mod index fd0d05c30abe4..a4523c0b33b0b 100644 --- a/test/otel/go.mod +++ b/test/otel/go.mod @@ -214,7 +214,7 @@ require ( github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect + github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect diff --git a/test/otel/go.sum b/test/otel/go.sum index 270aa7b812248..bce88ff15bfa8 100644 --- a/test/otel/go.sum +++ b/test/otel/go.sum @@ -168,8 +168,8 @@ github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ= -github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb h1:PGufWXXDq9yaev6xX1YQauaO1MV90e6Mpoq1I7Lz/VM= +github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= From 29d90d395e944a518a438b98bfc2610bddfc26df Mon Sep 17 00:00:00 2001 From: Stuart Geipel Date: Mon, 16 Dec 2024 17:27:08 -0500 Subject: [PATCH 243/303] [ebpfless] Fix the pre-existing connection tests (#31858) --- .../connection/ebpfless/tcp_processor.go | 32 ++++++++-- .../connection/ebpfless/tcp_processor_test.go | 31 +++++++++- .../tracer/connection/ebpfless/tcp_utils.go | 18 +++++- .../tracer/connection/ebpfless_tracer.go | 18 +++--- pkg/network/tracer/tracer_linux_test.go | 62 ++++++++++++------- pkg/network/tracer/tracer_test.go | 1 + 6 files changed, 126 insertions(+), 36 deletions(-) diff --git a/pkg/network/tracer/connection/ebpfless/tcp_processor.go b/pkg/network/tracer/connection/ebpfless/tcp_processor.go index b312f460269ee..8d530fc3cd70a 100644 --- a/pkg/network/tracer/connection/ebpfless/tcp_processor.go +++ b/pkg/network/tracer/connection/ebpfless/tcp_processor.go @@ -9,6 +9,7 @@ package ebpfless import ( "fmt" + "github.com/DataDog/datadog-agent/pkg/util/log" "syscall" "time" @@ -17,7 +18,6 @@ import ( "github.com/google/gopacket/layers" "github.com/DataDog/datadog-agent/pkg/network" - "github.com/DataDog/datadog-agent/pkg/util/log" ) type connectionState struct { @@ -51,9 +51,14 @@ type connectionState struct { // remoteFinSeq is the tcp.Seq number for the incoming FIN (including any payload length) remoteFinSeq uint32 + // rttTracker is used to track round trip times rttTracker rttTracker } +func (st *connectionState) hasMissedHandshake() bool { + return st.localSynState == synStateMissed || st.remoteSynState == synStateMissed +} + // TCPProcessor encapsulates TCP state tracking for the ebpfless tracer type TCPProcessor struct { conns map[network.ConnectionTuple]connectionState @@ -125,9 +130,13 @@ func (t *TCPProcessor) updateSynFlag(conn *network.ConnectionStats, st *connecti updateConnStatsForOpen(conn) } // if both synStates are ack'd, move to established - if st.tcpState == connStatAttempted && st.localSynState == synStateAcked && st.remoteSynState == synStateAcked { + if st.tcpState == connStatAttempted && st.localSynState.isSynAcked() && st.remoteSynState.isSynAcked() { st.tcpState = connStatEstablished - conn.Monotonic.TCPEstablished++ + if st.hasMissedHandshake() { + statsTelemetry.missedTCPConnections.Inc() + } else { + conn.Monotonic.TCPEstablished++ + } } } @@ -155,7 +164,7 @@ func (t *TCPProcessor) updateTCPStats(conn *network.ConnectionStats, st *connect ackOutdated := !st.hasLocalAck || isSeqBefore(st.lastLocalAck, tcp.Ack) if tcp.ACK && ackOutdated { // wait until data comes in via synStateAcked - if st.hasLocalAck && st.remoteSynState == synStateAcked { + if st.hasLocalAck && st.remoteSynState.isSynAcked() { ackDiff := tcp.Ack - st.lastLocalAck isFinAck := st.hasRemoteFin && tcp.Ack == st.remoteFinSeq if isFinAck { @@ -260,3 +269,18 @@ func (t *TCPProcessor) Process(conn *network.ConnectionStats, timestampNs uint64 t.conns[conn.ConnectionTuple] = st return nil } + +// HasConnEverEstablished is used to avoid a connection appearing before the three-way handshake is complete. +// This is done to mirror the behavior of ebpf tracing accept() and connect(), which both return +// after the handshake is completed. +func (t *TCPProcessor) HasConnEverEstablished(conn *network.ConnectionStats) bool { + st := t.conns[conn.ConnectionTuple] + + // conn.Monotonic.TCPEstablished can be 0 even though isEstablished is true, + // because pre-existing connections don't increment TCPEstablished. + // That's why we use tcpState instead of conn + isEstablished := st.tcpState == connStatEstablished + // if the connection has closed in any way, report that too + hasEverClosed := conn.Monotonic.TCPClosed > 0 || len(conn.TCPFailures) > 0 + return isEstablished || hasEverClosed +} diff --git a/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go b/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go index 8656a73463d36..f19729579a6bc 100644 --- a/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go +++ b/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go @@ -181,7 +181,7 @@ func (fixture *tcpTestFixture) runPkt(pkt testCapture) { require.NoError(fixture.t, err) } -func (fixture *tcpTestFixture) runPkts(packets []testCapture) { //nolint:unused // TODO +func (fixture *tcpTestFixture) runPkts(packets []testCapture) { for _, pkt := range packets { fixture.runPkt(pkt) } @@ -775,3 +775,32 @@ func TestOpenCloseConn(t *testing.T) { f.runPkt(pb.incoming(0, 0, 0, SYN)) require.False(t, f.conn.IsClosed) } +func TestPreexistingConn(t *testing.T) { + pb := newPacketBuilder(lowerSeq, higherSeq) + + f := newTCPTestFixture(t) + + capture := []testCapture{ + // just sending data, no SYN + pb.outgoing(1, 10, 10, ACK), + pb.incoming(1, 10, 11, ACK), + // active close after sending no data + pb.outgoing(0, 11, 11, FIN|ACK), + pb.incoming(0, 11, 12, FIN|ACK), + pb.outgoing(0, 12, 12, ACK), + } + f.runPkts(capture) + + require.Empty(t, f.conn.TCPFailures) + + expectedStats := network.StatCounters{ + SentBytes: 1, + RecvBytes: 1, + SentPackets: 3, + RecvPackets: 2, + Retransmits: 0, + TCPEstablished: 0, // we missed when it established + TCPClosed: 1, + } + require.Equal(t, expectedStats, f.conn.Monotonic) +} diff --git a/pkg/network/tracer/connection/ebpfless/tcp_utils.go b/pkg/network/tracer/connection/ebpfless/tcp_utils.go index 1969fd85a5bc1..9ebe4d778969d 100644 --- a/pkg/network/tracer/connection/ebpfless/tcp_utils.go +++ b/pkg/network/tracer/connection/ebpfless/tcp_utils.go @@ -54,9 +54,16 @@ var connStatusLabels = []string{ type synState uint8 const ( + // synStateNone - Nothing seen yet (initial state) synStateNone synState = iota + // synStateSent - We have seen the SYN but not its ACK synStateSent + // synStateAcked - SYN is ACK'd for this side of the connection. + // If both sides are synStateAcked, the connection is established. synStateAcked + // synStateMissed is effectively the same as synStateAcked but represents + // capturing a preexisting connection where we didn't get to see the SYN. + synStateMissed ) func (ss *synState) update(synFlag, ackFlag bool) { @@ -68,13 +75,20 @@ func (ss *synState) update(synFlag, ackFlag bool) { if *ss == synStateSent && ackFlag { *ss = synStateAcked } + + // this allows synStateMissed to recover via SYN in order to pass TestUnusualAckSyn + if *ss == synStateMissed && synFlag { + *ss = synStateAcked + } // if we see ACK'd traffic but missed the SYN, assume the connection started before // the datadog-agent starts. if *ss == synStateNone && ackFlag { - statsTelemetry.missedTCPConnections.Inc() - *ss = synStateAcked + *ss = synStateMissed } } +func (ss *synState) isSynAcked() bool { + return *ss == synStateAcked || *ss == synStateMissed +} func labelForState(tcpState connStatus) string { idx := int(tcpState) diff --git a/pkg/network/tracer/connection/ebpfless_tracer.go b/pkg/network/tracer/connection/ebpfless_tracer.go index 8bb0a54f170ec..e4e661c2782a3 100644 --- a/pkg/network/tracer/connection/ebpfless_tracer.go +++ b/pkg/network/tracer/connection/ebpfless_tracer.go @@ -148,20 +148,23 @@ func (t *ebpfLessTracer) processConnection( tcp *layers.TCP, decoded []gopacket.LayerType, ) error { + t.scratchConn.Source, t.scratchConn.Dest = util.Address{}, util.Address{} t.scratchConn.SPort, t.scratchConn.DPort = 0, 0 t.scratchConn.TCPFailures = make(map[uint16]uint32) - var udpPresent, tcpPresent bool + var ip4Present, ip6Present, udpPresent, tcpPresent bool for _, layerType := range decoded { switch layerType { case layers.LayerTypeIPv4: t.scratchConn.Source = util.AddressFromNetIP(ip4.SrcIP) t.scratchConn.Dest = util.AddressFromNetIP(ip4.DstIP) t.scratchConn.Family = network.AFINET + ip4Present = true case layers.LayerTypeIPv6: t.scratchConn.Source = util.AddressFromNetIP(ip6.SrcIP) t.scratchConn.Dest = util.AddressFromNetIP(ip6.DstIP) t.scratchConn.Family = network.AFINET6 + ip6Present = true case layers.LayerTypeTCP: t.scratchConn.SPort = uint16(tcp.SrcPort) t.scratchConn.DPort = uint16(tcp.DstPort) @@ -175,15 +178,15 @@ func (t *ebpfLessTracer) processConnection( } } - // check if have all the basic pieces + // check if we have all the basic pieces if !udpPresent && !tcpPresent { log.Debugf("ignoring packet since its not udp or tcp") ebpfLessTracerTelemetry.skippedPackets.Inc("not_tcp_udp") return nil } - flipSourceDest(t.scratchConn, pktType) t.determineConnectionDirection(t.scratchConn, pktType) + flipSourceDest(t.scratchConn, pktType) t.m.Lock() defer t.m.Unlock() @@ -202,17 +205,17 @@ func (t *ebpfLessTracer) processConnection( return fmt.Errorf("error getting last updated timestamp for connection: %w", err) } - if ip4 == nil && ip6 == nil { + if !ip4Present && !ip6Present { return nil } switch conn.Type { case network.UDP: - if (ip4 != nil && !t.config.CollectUDPv4Conns) || (ip6 != nil && !t.config.CollectUDPv6Conns) { + if (ip4Present && !t.config.CollectUDPv4Conns) || (ip6Present && !t.config.CollectUDPv6Conns) { return nil } err = t.udp.process(conn, pktType, udp) case network.TCP: - if (ip4 != nil && !t.config.CollectTCPv4Conns) || (ip6 != nil && !t.config.CollectTCPv6Conns) { + if (ip4Present && !t.config.CollectTCPv4Conns) || (ip6Present && !t.config.CollectTCPv6Conns) { return nil } err = t.tcp.Process(conn, uint64(ts), pktType, ip4, ip6, tcp) @@ -224,7 +227,8 @@ func (t *ebpfLessTracer) processConnection( return fmt.Errorf("error processing connection: %w", err) } - if conn.Type == network.UDP || conn.Monotonic.TCPEstablished > 0 { + // TODO probably remove HasConnEverEstablished once we handle closed connections properly + if conn.Type == network.UDP || (conn.Type == network.TCP && t.tcp.HasConnEverEstablished(conn)) { conn.LastUpdateEpoch = uint64(ts) t.conns[t.scratchConn.ConnectionTuple] = conn } diff --git a/pkg/network/tracer/tracer_linux_test.go b/pkg/network/tracer/tracer_linux_test.go index d90928d560da8..29a8b6e34965a 100644 --- a/pkg/network/tracer/tracer_linux_test.go +++ b/pkg/network/tracer/tracer_linux_test.go @@ -1979,16 +1979,16 @@ func (s *TracerSuite) TestPreexistingConnectionDirection() { t := s.T() // Start the client and server before we enable the system probe to test that the tracer picks // up the pre-existing connection - server := tracertestutil.NewTCPServer(func(c net.Conn) { r := bufio.NewReader(c) for { if _, err := r.ReadBytes(byte('\n')); err != nil { assert.ErrorIs(t, err, io.EOF, "exited server loop with error that is not EOF") - return + break } _, _ = c.Write(genPayload(serverMessageSize)) } + c.Close() }) t.Cleanup(server.Shutdown) require.NoError(t, server.Run()) @@ -2023,37 +2023,55 @@ func (s *TracerSuite) TestPreexistingConnectionDirection() { } require.NotNil(collect, outgoing) require.NotNil(collect, incoming) - }, 3*time.Second, 100*time.Millisecond, "could not find connection incoming and outgoing connections") + if !assert.True(collect, incoming != nil && outgoing != nil) { + return + } - m := outgoing.Monotonic - assert.Equal(t, clientMessageSize, int(m.SentBytes)) - assert.Equal(t, serverMessageSize, int(m.RecvBytes)) - if !tr.config.EnableEbpfless { - assert.Equal(t, os.Getpid(), int(outgoing.Pid)) - } - assert.Equal(t, addrPort(server.Address()), int(outgoing.DPort)) - assert.Equal(t, c.LocalAddr().(*net.TCPAddr).Port, int(outgoing.SPort)) - assert.Equal(t, network.OUTGOING, outgoing.Direction) + m := outgoing.Monotonic + assert.Equal(collect, clientMessageSize, int(m.SentBytes)) + // ebpfless RecvBytes is based off acknowledgements, so it can miss the first + // packet in a pre-existing connection + if !tr.config.EnableEbpfless { + assert.Equal(collect, serverMessageSize, int(m.RecvBytes)) + } + if !tr.config.EnableEbpfless { + assert.Equal(collect, os.Getpid(), int(outgoing.Pid)) + } + assert.Equal(collect, addrPort(server.Address()), int(outgoing.DPort)) + assert.Equal(collect, c.LocalAddr().(*net.TCPAddr).Port, int(outgoing.SPort)) + assert.Equal(collect, network.OUTGOING, outgoing.Direction) + + m = incoming.Monotonic + // ebpfless RecvBytes is based off acknowledgements, so it can miss the first + // packet in a pre-existing connection + if !tr.config.EnableEbpfless { + assert.Equal(collect, clientMessageSize, int(m.RecvBytes)) + } + assert.Equal(collect, serverMessageSize, int(m.SentBytes)) + if !tr.config.EnableEbpfless { + assert.Equal(collect, os.Getpid(), int(incoming.Pid)) + } + assert.Equal(collect, addrPort(server.Address()), int(incoming.SPort)) + assert.Equal(collect, c.LocalAddr().(*net.TCPAddr).Port, int(incoming.DPort)) + assert.Equal(collect, network.INCOMING, incoming.Direction) + }, 3*time.Second, 100*time.Millisecond, "could not find connection incoming and outgoing connections") - m = incoming.Monotonic - assert.Equal(t, clientMessageSize, int(m.RecvBytes)) - assert.Equal(t, serverMessageSize, int(m.SentBytes)) - if !tr.config.EnableEbpfless { - assert.Equal(t, os.Getpid(), int(incoming.Pid)) - } - assert.Equal(t, addrPort(server.Address()), int(incoming.SPort)) - assert.Equal(t, c.LocalAddr().(*net.TCPAddr).Port, int(incoming.DPort)) - assert.Equal(t, network.INCOMING, incoming.Direction) } func (s *TracerSuite) TestPreexistingEmptyIncomingConnectionDirection() { t := s.T() + + // The ebpf tracer uses this to ensure it drops pre-existing connections + // that close empty (with no data), because they are difficult to track. + // However, in ebpfless they are easy to track, so disable this test. + // For more context, see PR #31100 + skipOnEbpflessNotSupported(t, testConfig()) + t.Run("ringbuf_enabled", func(t *testing.T) { if features.HaveMapType(ebpf.RingBuf) != nil { t.Skip("skipping test as ringbuffers are not supported on this kernel") } c := testConfig() - skipOnEbpflessNotSupported(t, c) c.NPMRingbuffersEnabled = true testPreexistingEmptyIncomingConnectionDirection(t, c) }) diff --git a/pkg/network/tracer/tracer_test.go b/pkg/network/tracer/tracer_test.go index 710e5eb142253..d50f4f299690c 100644 --- a/pkg/network/tracer/tracer_test.go +++ b/pkg/network/tracer/tracer_test.go @@ -1130,6 +1130,7 @@ func (s *TracerSuite) TestTCPEstablishedPreExistingConn() { c, err := net.DialTimeout("tcp", server.Address(), 50*time.Millisecond) require.NoError(t, err) laddr, raddr := c.LocalAddr(), c.RemoteAddr() + t.Logf("laddr=%s raddr=%s", laddr, raddr) // Ensure closed connections are flushed as soon as possible cfg := testConfig() From 4ab0c77dabc38744147a5d86748f3e45bd87101d Mon Sep 17 00:00:00 2001 From: sabrina lu Date: Mon, 16 Dec 2024 18:18:27 -0500 Subject: [PATCH 244/303] add agent 6 schedule to create rc pr workflow (#32073) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/workflows/create_rc_pr.yml | 24 +++++++++++++++++------- tasks/collector.py | 19 +------------------ tasks/libs/common/git.py | 18 ++++++++++++++++++ tasks/release.py | 12 ++++++++++-- 4 files changed, 46 insertions(+), 27 deletions(-) diff --git a/.github/workflows/create_rc_pr.yml b/.github/workflows/create_rc_pr.yml index 4522ddd4100a2..2a685c3cc85df 100644 --- a/.github/workflows/create_rc_pr.yml +++ b/.github/workflows/create_rc_pr.yml @@ -5,10 +5,12 @@ on: schedule: - cron: '0 14 * * 1,3,5' # Run on Monday, Wednesday, and Friday at 14:00 UTC - cron: '0 8 * * 1,3,5' # Same as above but at 08:00 UTC, to warn agent-integrations team about releasing + - cron: '0 9 * * 1' # Run Agent 6 workflow on Monday at 09:00 UTC env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - + AGENT6_RELEASE_BRANCH: '6.53.x' + IS_AGENT6_RELEASE: ${{ github.event.schedule == '0 9 * * 1' }} permissions: {} jobs: @@ -19,18 +21,21 @@ jobs: warning: ${{ steps.warning.outputs.value }} steps: - name: Checkout repository + if: ${{ env.IS_AGENT6_RELEASE == 'false' }} uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 with: sparse-checkout: 'tasks' persist-credentials: false - name: Install python + if: ${{ env.IS_AGENT6_RELEASE == 'false' }} uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0 with: python-version: 3.11 cache: "pip" - name: Install Python dependencies + if: ${{ env.IS_AGENT6_RELEASE == 'false' }} run: | python -m pip install --upgrade pip pip install -r requirements.txt @@ -40,7 +45,11 @@ jobs: - name: Determine the release active branches id: branches run: | - echo "value=$(inv release.get-unreleased-release-branches)" >> $GITHUB_OUTPUT + if ${{ env.IS_AGENT6_RELEASE == 'true' }}; then + echo "value=[\"$AGENT6_RELEASE_BRANCH\"]" >> $GITHUB_OUTPUT + else + echo "value=$(inv release.get-unreleased-release-branches)" >> $GITHUB_OUTPUT + fi - name: Set the warning option id: warning @@ -93,11 +102,12 @@ jobs: fi - name: Create RC PR - if: ${{ steps.check_for_changes.outputs.CHANGES == 'true'}} + if: ${{ steps.check_for_changes.outputs.CHANGES == 'true' || env.IS_AGENT6_RELEASE == 'true' }} env: MATRIX: ${{ matrix.value }} run: | - git config user.name "github-actions[bot]" - git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git fetch - inv -e release.create-rc -r "$MATRIX" --slack-webhook=${{ secrets.AGENT_RELEASE_SYNC_SLACK_WEBHOOK }} + if ${{ env.IS_AGENT6_RELEASE == 'true' }}; then + inv -e release.create-rc -r "$MATRIX" --slack-webhook=${{ secrets.AGENT_RELEASE_SYNC_SLACK_WEBHOOK }} --patch-version + else + inv -e release.create-rc -r "$MATRIX" --slack-webhook=${{ secrets.AGENT_RELEASE_SYNC_SLACK_WEBHOOK }} + fi diff --git a/tasks/collector.py b/tasks/collector.py index e4dbd4ae4d68d..74f3a439bd9fd 100644 --- a/tasks/collector.py +++ b/tasks/collector.py @@ -14,7 +14,7 @@ from tasks.go import tidy from tasks.libs.ciproviders.github_api import GithubAPI from tasks.libs.common.color import Color, color_message -from tasks.libs.common.git import check_uncommitted_changes +from tasks.libs.common.git import check_uncommitted_changes, get_git_config, revert_git_config, set_git_config LICENSE_HEADER = """// Unless explicitly stated otherwise all files in this repository are licensed // under the Apache License Version 2.0. @@ -502,23 +502,6 @@ def update(ctx): print("Update complete.") -def get_git_config(key): - result = subprocess.run(['git', 'config', '--get', key], capture_output=True, text=True) - return result.stdout.strip() if result.returncode == 0 else None - - -def set_git_config(key, value): - subprocess.run(['git', 'config', key, value]) - - -def revert_git_config(original_config): - for key, value in original_config.items(): - if value is None: - subprocess.run(['git', 'config', '--unset', key]) - else: - subprocess.run(['git', 'config', key, value]) - - @task() def pull_request(ctx): # Save current Git configuration diff --git a/tasks/libs/common/git.py b/tasks/libs/common/git.py index b50184c3af411..b1dc1b1cd7683 100644 --- a/tasks/libs/common/git.py +++ b/tasks/libs/common/git.py @@ -1,6 +1,7 @@ from __future__ import annotations import os +import subprocess import sys import tempfile from contextlib import contextmanager @@ -292,3 +293,20 @@ def get_last_release_tag(ctx, repo, pattern): last_tag_name = last_tag_name_with_suffix.removesuffix("^{}") last_tag_name = last_tag_name.removeprefix("refs/tags/") return last_tag_commit, last_tag_name + + +def get_git_config(key): + result = subprocess.run(['git', 'config', '--get', key], capture_output=True, text=True) + return result.stdout.strip() if result.returncode == 0 else None + + +def set_git_config(key, value): + subprocess.run(['git', 'config', key, value]) + + +def revert_git_config(original_config): + for key, value in original_config.items(): + if value is None: + subprocess.run(['git', 'config', '--unset', key]) + else: + subprocess.run(['git', 'config', key, value]) diff --git a/tasks/release.py b/tasks/release.py index aa16b7fd7045f..d7acec73f8e05 100644 --- a/tasks/release.py +++ b/tasks/release.py @@ -34,6 +34,7 @@ get_last_commit, get_last_release_tag, is_agent6, + set_git_config, try_git_command, ) from tasks.libs.common.gomodules import get_default_modules @@ -432,11 +433,16 @@ def create_rc(ctx, release_branch, patch_version=False, upstream="origin", slack This also requires that there are no local uncommitted changes, that the current branch is 'main' or the release branch, and that no branch named 'release/' already exists locally or upstream. """ - major_version = get_version_major(release_branch) with agent_context(ctx, release_branch): github = GithubAPI(repository=GITHUB_REPO_NAME) + github_action = os.environ.get("GITHUB_ACTIONS") + + if github_action: + set_git_config('user.name', 'github-actions[bot]') + set_git_config('user.email', 'github-actions[bot]@users.noreply.github.com') + upstream = f"https://x-access-token:{os.environ.get('GITHUB_TOKEN')}@github.com/{GITHUB_REPO_NAME}.git" # Get the version of the highest major: useful for some logging & to get # the version to use for Go submodules updates @@ -491,7 +497,9 @@ def create_rc(ctx, release_branch, patch_version=False, upstream="origin", slack ctx.run("git ls-files . | grep 'go.mod$' | xargs git add") ok = try_git_command( - ctx, f"git commit --no-verify -m 'Update release.json and Go modules for {new_highest_version}'" + ctx, + f"git commit --no-verify -m 'Update release.json and Go modules for {new_highest_version}'", + github_action, ) if not ok: raise Exit( From 03265530dcf3b87f814d51f4b2a1cd34616d7e2e Mon Sep 17 00:00:00 2001 From: Julien Lebot Date: Tue, 17 Dec 2024 00:47:22 +0100 Subject: [PATCH 245/303] [Fleet Automation][Windows] Improve error handling (#31282) --- .../packages/datadog_agent_windows.go | 40 +- .../packages/datadog_installer_windows.go | 102 +++-- .../internal/bootstrap/bootstrap_windows.go | 25 +- pkg/fleet/internal/msi/file_in_use.log | Bin 0 -> 1895134 bytes .../internal/msi/invalid_credentials.log | Bin 0 -> 1397784 bytes .../internal/msi/missing_password_for_dc.log | Bin 0 -> 1346326 bytes pkg/fleet/internal/msi/msiexec.go | 289 +++++++++++++ pkg/fleet/internal/msi/msilog.go | 130 ++++++ pkg/fleet/internal/msi/msilog_test.go | 393 ++++++++++++++++++ .../msiexec.go => internal/msi/product.go} | 85 ++-- .../msi/service_marked_for_deletion.log | Bin 0 -> 108018 bytes .../internal/msi/wixfailwhendeferred.log | Bin 0 -> 128276 bytes 12 files changed, 936 insertions(+), 128 deletions(-) create mode 100644 pkg/fleet/internal/msi/file_in_use.log create mode 100644 pkg/fleet/internal/msi/invalid_credentials.log create mode 100644 pkg/fleet/internal/msi/missing_password_for_dc.log create mode 100644 pkg/fleet/internal/msi/msiexec.go create mode 100644 pkg/fleet/internal/msi/msilog.go create mode 100644 pkg/fleet/internal/msi/msilog_test.go rename pkg/fleet/{installer/packages/msiexec.go => internal/msi/product.go} (59%) create mode 100644 pkg/fleet/internal/msi/service_marked_for_deletion.log create mode 100644 pkg/fleet/internal/msi/wixfailwhendeferred.log diff --git a/pkg/fleet/installer/packages/datadog_agent_windows.go b/pkg/fleet/installer/packages/datadog_agent_windows.go index 69935fdee41d8..48e3e1e00148c 100644 --- a/pkg/fleet/installer/packages/datadog_agent_windows.go +++ b/pkg/fleet/installer/packages/datadog_agent_windows.go @@ -10,10 +10,13 @@ package packages import ( "context" "fmt" - + "github.com/DataDog/datadog-agent/pkg/fleet/internal/msi" + "github.com/DataDog/datadog-agent/pkg/fleet/internal/paths" "github.com/DataDog/datadog-agent/pkg/fleet/internal/winregistry" "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" + "os" + "path" ) const ( @@ -29,9 +32,8 @@ func PrepareAgent(_ context.Context) error { func SetupAgent(ctx context.Context, args []string) (err error) { span, _ := telemetry.StartSpanFromContext(ctx, "setup_agent") defer func() { - if err != nil { - log.Errorf("Failed to setup agent: %s", err) - } + // Don't log error here, or it will appear twice in the output + // since installerImpl.Install will also print the error. span.Finish(err) }() // Make sure there are no Agent already installed @@ -108,20 +110,38 @@ func installAgentPackage(target string, args []string) error { if err != nil { return fmt.Errorf("failed to get Agent user: %w", err) } - args = append(args, fmt.Sprintf("DDAGENTUSER_NAME=%s", agentUser)) - cmd, err := msiexec(target, datadogAgent, "/i", args) + rootPath := "" + _, err = os.Stat(paths.RootTmpDir) + // If bootstrap has not been called before, `paths.RootTmpDir` might not exist + if os.IsExist(err) { + rootPath = paths.RootTmpDir + } + tempDir, err := os.MkdirTemp(rootPath, "datadog-agent") + if err != nil { + return err + } + logFile := path.Join(tempDir, "msi.log") + + cmd, err := msi.Cmd( + msi.Install(), + msi.WithMsiFromPackagePath(target, datadogAgent), + msi.WithDdAgentUserName(agentUser), + msi.WithAdditionalArgs(args), + msi.WithLogFile(path.Join(tempDir, "msi.log")), + ) + var output []byte if err == nil { - err = cmd.Run() + output, err = cmd.Run() } if err != nil { - return fmt.Errorf("failed to install Agent %s: %w", target, err) + return fmt.Errorf("failed to install Agent %s: %w\nLog file located at: %s\n%s", target, err, logFile, string(output)) } return nil } func removeAgentIfInstalled(ctx context.Context) (err error) { - if isProductInstalled("Datadog Agent") { + if msi.IsProductInstalled("Datadog Agent") { span, _ := telemetry.StartSpanFromContext(ctx, "remove_agent") defer func() { if err != nil { @@ -131,7 +151,7 @@ func removeAgentIfInstalled(ctx context.Context) (err error) { } span.Finish(err) }() - err := removeProduct("Datadog Agent") + err := msi.RemoveProduct("Datadog Agent") if err != nil { return err } diff --git a/pkg/fleet/installer/packages/datadog_installer_windows.go b/pkg/fleet/installer/packages/datadog_installer_windows.go index d7714ddb257cc..6a4b313120840 100644 --- a/pkg/fleet/installer/packages/datadog_installer_windows.go +++ b/pkg/fleet/installer/packages/datadog_installer_windows.go @@ -10,9 +10,11 @@ package packages import ( "context" - - "github.com/DataDog/datadog-agent/pkg/fleet/telemetry" - "github.com/DataDog/datadog-agent/pkg/util/log" + "fmt" + "github.com/DataDog/datadog-agent/pkg/fleet/internal/msi" + "github.com/DataDog/datadog-agent/pkg/fleet/internal/paths" + "os" + "path" ) const ( @@ -20,68 +22,62 @@ const ( ) // SetupInstaller installs and starts the installer -func SetupInstaller(ctx context.Context) (err error) { - span, _ := telemetry.StartSpanFromContext(ctx, "setup_installer") - defer func() { - if err != nil { - log.Errorf("Failed to setup installer: %s", err) - } - span.Finish(err) - }() - cmd, err := msiexec("stable", datadogInstaller, "/i", nil) - if err == nil { - // This is the first time that we are installing the installer, - // so we can run it synchronously. - err = cmd.Run() +func SetupInstaller(_ context.Context) error { + rootPath := "" + _, err := os.Stat(paths.RootTmpDir) + // If bootstrap has not been called before, `paths.RootTmpDir` might not exist + if os.IsExist(err) { + rootPath = paths.RootTmpDir + } + tempDir, err := os.MkdirTemp(rootPath, "datadog-installer") + if err != nil { + return err + } + + cmd, err := msi.Cmd(msi.Install(), msi.WithMsiFromPackagePath("stable", datadogInstaller), msi.WithLogFile(path.Join(tempDir, "setup_installer.log"))) + if err != nil { + return fmt.Errorf("failed to setup installer: %w", err) + } + output, err := cmd.Run() + if err != nil { + return fmt.Errorf("failed to setup installer: %w\n%s", err, string(output)) } - return err + return nil } // RemoveInstaller removes the installer -func RemoveInstaller(ctx context.Context) (err error) { - span, _ := telemetry.StartSpanFromContext(ctx, "remove_installer") - defer func() { - if err != nil { - log.Errorf("Failed to remove installer: %s", err) - } - span.Finish(err) - }() - err = removeProduct("Datadog Installer") - return err +func RemoveInstaller(_ context.Context) error { + return msi.RemoveProduct("Datadog Installer") } // StartInstallerExperiment starts the installer experiment -func StartInstallerExperiment(ctx context.Context) (err error) { - span, _ := telemetry.StartSpanFromContext(ctx, "start_installer_experiment") - defer func() { - if err != nil { - log.Errorf("Failed to start installer experiment: %s", err) - } - span.Finish(err) - }() - cmd, err := msiexec("experiment", datadogInstaller, "/i", nil) - if err == nil { - // Launch the msiexec process asynchronously. - err = cmd.Start() +func StartInstallerExperiment(_ context.Context) error { + tempDir, err := os.MkdirTemp(paths.RootTmpDir, "datadog-installer") + if err != nil { + return err + } + + cmd, err := msi.Cmd(msi.Install(), msi.WithMsiFromPackagePath("experiment", datadogInstaller), msi.WithLogFile(path.Join(tempDir, "start_installer_experiment.log"))) + if err != nil { + return fmt.Errorf("failed to start installer experiment: %w", err) } - return err + // Launch the msiexec process asynchronously. + return cmd.FireAndForget() } // StopInstallerExperiment stops the installer experiment -func StopInstallerExperiment(ctx context.Context) (err error) { - span, _ := telemetry.StartSpanFromContext(ctx, "stop_installer_experiment") - defer func() { - if err != nil { - log.Errorf("Failed to stop installer experiment: %s", err) - } - span.Finish(err) - }() - cmd, err := msiexec("stable", datadogInstaller, "/i", nil) - if err == nil { - // Launch the msiexec process asynchronously. - err = cmd.Start() +func StopInstallerExperiment(_ context.Context) error { + tempDir, err := os.MkdirTemp(paths.RootTmpDir, "datadog-installer") + if err != nil { + return err + } + + cmd, err := msi.Cmd(msi.Install(), msi.WithMsiFromPackagePath("stable", datadogInstaller), msi.WithLogFile(path.Join(tempDir, "stop_installer_experiment.log"))) + if err != nil { + return fmt.Errorf("failed to stop installer experiment: %w", err) } - return err + // Launch the msiexec process asynchronously. + return cmd.FireAndForget() } // PromoteInstallerExperiment promotes the installer experiment diff --git a/pkg/fleet/internal/bootstrap/bootstrap_windows.go b/pkg/fleet/internal/bootstrap/bootstrap_windows.go index 6990ec77cf042..7172d02a1b6a9 100644 --- a/pkg/fleet/internal/bootstrap/bootstrap_windows.go +++ b/pkg/fleet/internal/bootstrap/bootstrap_windows.go @@ -11,8 +11,8 @@ package bootstrap import ( "context" "fmt" + "github.com/DataDog/datadog-agent/pkg/fleet/internal/msi" "os" - "os/exec" "path/filepath" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" @@ -81,20 +81,19 @@ func downloadInstaller(ctx context.Context, env *env.Env, url string, tmpDir str } else if len(msis) == 0 { return nil, fmt.Errorf("no MSIs in package") } - msiArgs := []string{ - "/i", - msis[0], - "/qn", - "MSIFASTINSTALL=7", - } - if env.AgentUserName != "" { - msiArgs = append(msiArgs, fmt.Sprintf("DDAGENTUSER_NAME=%s", env.AgentUserName)) - // don't need to look at the registry here since the installer will read it if the command line - // parameter is not provided + + cmd, err := msi.Cmd( + msi.Install(), + msi.WithMsi(msis[0]), + msi.WithDdAgentUserName(env.AgentUserName), + ) + var output []byte + if err == nil { + output, err = cmd.Run() } - err = exec.Command("msiexec", msiArgs...).Run() + if err != nil { - return nil, fmt.Errorf("failed to install the Datadog Installer") + return nil, fmt.Errorf("failed to install the Datadog Installer: %w\n%s", err, string(output)) } return iexec.NewInstallerExec(env, paths.StableInstallerPath), nil } diff --git a/pkg/fleet/internal/msi/file_in_use.log b/pkg/fleet/internal/msi/file_in_use.log new file mode 100644 index 0000000000000000000000000000000000000000..eb0ad60b3ddd666d06868c7827a30dea71754a3e GIT binary patch literal 1895134 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

BJ-X?E@D^6Y_WD)%a(W}h2JF!(Ju?r%;L^8N1 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 literal 0 HcmV?d00001 diff --git a/pkg/fleet/internal/msi/msiexec.go b/pkg/fleet/internal/msi/msiexec.go new file mode 100644 index 0000000000000..f2ca387fb3aa2 --- /dev/null +++ b/pkg/fleet/internal/msi/msiexec.go @@ -0,0 +1,289 @@ +// 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. + +//go:build windows + +// Package msi contains helper functions to work with msi packages +package msi + +import ( + "errors" + "fmt" + "github.com/DataDog/datadog-agent/pkg/fleet/internal/paths" + "io/fs" + "os" + "os/exec" + "path" + "path/filepath" + "regexp" +) + +type msiexecArgs struct { + // target should be either a full path to a MSI, an URL to a MSI or a product code. + target string + + // msiAction should be "/i" for installation, "/x" for uninstallation etc... + msiAction string + + // logFile should be a full local path where msiexec will write the installation logs. + // If nothing is specified, a random, temporary file is used. + logFile string + ddagentUserName string + + // additionalArgs are further args that can be passed to msiexec + additionalArgs []string +} + +// MsiexecOption is an option type for creating msiexec command lines +type MsiexecOption func(*msiexecArgs) error + +// Install specifies that msiexec will be invoked to install a product +func Install() MsiexecOption { + return func(a *msiexecArgs) error { + a.msiAction = "/i" + return nil + } +} + +// Uninstall specifies that msiexec will be invoked to uninstall a product +func Uninstall() MsiexecOption { + return func(a *msiexecArgs) error { + a.msiAction = "/x" + return nil + } +} + +// WithMsi specifies the MSI target for msiexec +func WithMsi(target string) MsiexecOption { + return func(a *msiexecArgs) error { + a.target = target + return nil + } +} + +// WithMsiFromPackagePath finds an MSI from the packages folder +func WithMsiFromPackagePath(target, product string) MsiexecOption { + return func(a *msiexecArgs) error { + updaterPath := filepath.Join(paths.PackagesPath, product, target) + msis, err := filepath.Glob(filepath.Join(updaterPath, fmt.Sprintf("%s-*-1-x86_64.msi", product))) + if err != nil { + return err + } + if len(msis) > 1 { + return fmt.Errorf("too many MSIs in package") + } else if len(msis) == 0 { + return fmt.Errorf("no MSIs in package") + } + a.target = msis[0] + return nil + } +} + +// WithProduct specifies the product name to target for msiexec +func WithProduct(productName string) MsiexecOption { + return func(a *msiexecArgs) error { + product, err := FindProductCode(productName) + if err != nil { + return fmt.Errorf("error trying to find product %s: %w", productName, err) + } + a.target = product.Code + return nil + } +} + +// WithLogFile specifies the log file for msiexec +func WithLogFile(logFile string) MsiexecOption { + return func(a *msiexecArgs) error { + a.logFile = logFile + return nil + } +} + +// WithAdditionalArgs specifies additional arguments for msiexec +func WithAdditionalArgs(additionalArgs []string) MsiexecOption { + return func(a *msiexecArgs) error { + a.additionalArgs = additionalArgs + return nil + } +} + +// WithDdAgentUserName specifies the DDAGENTUSER_NAME to use +func WithDdAgentUserName(ddagentUserName string) MsiexecOption { + return func(a *msiexecArgs) error { + a.ddagentUserName = ddagentUserName + return nil + } +} + +// Msiexec is a type wrapping msiexec +type Msiexec struct { + *exec.Cmd + + // logFile is the path to the MSI log file + logFile string + + // postExecActions is a list of actions to be executed after msiexec has run + postExecActions []func() +} + +func (m *Msiexec) openAndProcessLogFile() ([]byte, error) { + logfile, err := os.Open(m.logFile) + if err != nil { + if errors.Is(err, os.ErrNotExist) { + // File does not exist is not necessarily an error + return nil, nil + } + return nil, err + } + result, err := m.processLogFile(logfile) + _ = logfile.Close() + return result, err +} + +// processLogFile takes an open file and processes it with a series of processors to obtain +// a condensed version of the log file with only the relevant information. +func (m *Msiexec) processLogFile(logFile fs.File) ([]byte, error) { + // Compile a list of regular expressions we are interested in extracting from the logs + return processLogFile(logFile, + func(bytes []byte) []TextRange { + // Only need one TextRange of context before and after since other regexes will combine + return FindAllIndexWithContext(regexp.MustCompile("Datadog[.]CustomActions.*"), bytes, 1, 1) + }, + func(bytes []byte) []TextRange { + // Only need one TextRange of context before and after since other regexes will combine + return FindAllIndexWithContext(regexp.MustCompile("System[.]Exception"), bytes, 1, 1) + }, + func(bytes []byte) []TextRange { + // typically looks like this: + // Calling custom action AgentCustomActions!Datadog.AgentCustomActions.CustomActions.StartDDServices + // CA: 01:50:49: StartDDServices. Failed to start services: System.InvalidOperationException: Cannot start service datadogagent on computer '.'. ---> System.ComponentModel.Win32Exception: The service did not start due to a logon failure + // --- End of inner exception stack trace --- + // at System.ServiceProcess.ServiceController.Start(String args) + // at Datadog.CustomActions.Native.ServiceController.StartService(String serviceName, TimeSpan timeout) + // at Datadog.CustomActions.ServiceCustomAction.StartDDServices() + // Other regexes will pick up on the stack trace, but there's not much information to get before the error + return FindAllIndexWithContext(regexp.MustCompile("Cannot start service"), bytes, 1, 2) + }, + func(bytes []byte) []TextRange { + // Typically looks like this: + // CA(ddnpm): DriverInstall: serviceDef::create() + // CA(ddnpm): DriverInstall: Failed to CreateService 1073 + // CA(ddnpm): DriverInstall: Service exists, verifying + // CA(ddnpm): DriverInstall: Updated path for existing service + // So include a bit of context before and after + return FindAllIndexWithContext(regexp.MustCompile("Failed to CreateService"), bytes, 5, 5) + }, + func(bytes []byte) []TextRange { + // Typically looks like this: + // Calling custom action AgentCustomActions!Datadog.AgentCustomActions.CustomActions.ProcessDdAgentUserCredentials + // CA: 01:49:43: LookupAccountWithExtendedDomainSyntax. User not found, trying again with fixed domain part: \toto + // CA: 01:49:43: ProcessDdAgentUserCredentials. User toto doesn't exist. + // CA: 01:49:43: ProcessDdAgentUserCredentials. domain part is empty, using default + // CA: 01:49:43: ProcessDdAgentUserCredentials. Installing with DDAGENTUSER_PROCESSED_NAME=toto and DDAGENTUSER_PROCESSED_DOMAIN=datadoghq-qa-labs.local + // CA: 01:49:43: HandleProcessDdAgentUserCredentialsException. Error processing ddAgentUser credentials: Datadog.CustomActions.InvalidAgentUserConfigurationException: A password was not provided. A password is a required when installing on Domain Controllers. + // at Datadog.CustomActions.ProcessUserCustomActions.ProcessDdAgentUserCredentials(Boolean calledFromUIControl) + // MSI (s) (C8!50) [01:49:43:906]: Product: Datadog Agent -- A password was not provided. A password is a required when installing on Domain Controllers. + // + // A password was not provided. A password is a required when installing on Domain Controllers. + // CustomAction ProcessDdAgentUserCredentials returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox) + // Action ended 1:49:43: ProcessDdAgentUserCredentials. Return value 3. + // So include lots of context to ensure we get the full picture + return FindAllIndexWithContext(regexp.MustCompile("A password was not provided"), bytes, 6, 6) + }, + func(bytes []byte) []TextRange { + // Typically looks like this: + // Info 1603. The file C:\Program Files\Datadog\Datadog Agent\bin\agent\process-agent.exe is being held in use by the following process: Name: process-agent, Id: 4704, Window Title: '(not determined yet)'. Close that application and retry. + // Not much context to be had before and after + return FindAllIndexWithContext(regexp.MustCompile("is being held in use by the following process"), bytes, 1, 1) + }, + func(bytes []byte) []TextRange { + // Typically looks like this: + // Calling custom action AgentCustomActions!Datadog.AgentCustomActions.CustomActions.StartDDServices + // CustomAction WixFailWhenDeferred returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox) + // Action ended 2:11:49: InstallFinalize. Return value 3. + // The important context is the TextRange after the error ("Return value 3") but the previous lines can include some useful information too + return FindAllIndexWithContext(regexp.MustCompile("returned actual error"), bytes, 5, 1) + }, + func(bytes []byte) []TextRange { + // Typically looks like this: + // Action 12:24:00: InstallServices. Installing new services + // InstallServices: Service: + // Error 1923. Service 'Datadog Agent' (datadogagent) could not be installed. Verify that you have sufficient privileges to install system services. + // MSI (s) (54:EC) [12:25:53:886]: Product: Datadog Agent -- Error 1923. Service 'Datadog Agent' (datadogagent) could not be installed. Verify that you have sufficient privileges to install system services. + return FindAllIndexWithContext(regexp.MustCompile("Verify that you have sufficient privileges to install system services"), bytes, 2, 1) + }) +} + +// Run runs msiexec synchronously +func (m *Msiexec) Run() ([]byte, error) { + err := m.Cmd.Run() + // The log file *should not* be too big. Avoid verbose log files. + logFileBytes, err2 := m.openAndProcessLogFile() + err = errors.Join(err, err2) + for _, p := range m.postExecActions { + p() + } + + return logFileBytes, err +} + +// RunAsync runs msiexec asynchronously +func (m *Msiexec) RunAsync(done func([]byte, error)) error { + err := m.Cmd.Start() + if err != nil { + return err + } + go func() { + err := m.Cmd.Wait() + // The log file *should not* be too big. Avoid verbose log files. + logFileBytes, err2 := m.openAndProcessLogFile() + err = errors.Join(err, err2) + for _, p := range m.postExecActions { + p() + } + done(logFileBytes, err) + }() + return nil +} + +// FireAndForget starts msiexec and doesn't wait for it to finish. +// The log file won't be read at the end and post execution actions will not be executed. +func (m *Msiexec) FireAndForget() error { + return m.Cmd.Start() +} + +// Cmd creates a new Msiexec wrapper around cmd.Exec that will call msiexec +func Cmd(options ...MsiexecOption) (*Msiexec, error) { + a := &msiexecArgs{} + for _, opt := range options { + if err := opt(a); err != nil { + return nil, err + } + } + if a.msiAction == "" || a.target == "" { + return nil, fmt.Errorf("argument error") + } + + cmd := &Msiexec{} + if len(a.logFile) == 0 { + tempDir, err := os.MkdirTemp("", "datadog-installer") + if err != nil { + return nil, err + } + a.logFile = path.Join(tempDir, "msi.log") + cmd.postExecActions = append(cmd.postExecActions, func() { + _ = os.RemoveAll(tempDir) + }) + } + args := append(a.additionalArgs, a.msiAction, a.target, "/qn", "MSIFASTINSTALL=7", "/log", a.logFile) + if a.ddagentUserName != "" { + args = append(args, fmt.Sprintf("DDAGENTUSER_NAME=%s", a.ddagentUserName)) + } + + cmd.Cmd = exec.Command("msiexec", args...) + cmd.logFile = a.logFile + + return cmd, nil +} diff --git a/pkg/fleet/internal/msi/msilog.go b/pkg/fleet/internal/msi/msilog.go new file mode 100644 index 0000000000000..47f8ef5f30641 --- /dev/null +++ b/pkg/fleet/internal/msi/msilog.go @@ -0,0 +1,130 @@ +// 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. + +//go:build windows + +// Package msi contains helper functions to work with msi packages +package msi + +import ( + "bytes" + "fmt" + "golang.org/x/text/encoding/unicode" + "io" + "io/fs" + "regexp" + "sort" +) + +// TextRange is a simple struct to represent a range of text in a file. +type TextRange struct { + start int + end int +} + +// FindAllIndexWithContext is similar to FindAllIndex but expands the matched range for a number of lines +// before and after the TextRange (called contextBefore and contextAfter). +func FindAllIndexWithContext(r *regexp.Regexp, input []byte, contextBefore, contextAfter int) []TextRange { + contextBefore = max(contextBefore, 0) + contextAfter = max(contextAfter, 0) + var extractedRanges []TextRange + results := r.FindAllIndex(input, -1) + for _, result := range results { + lineCounter := 0 + charCounter := result[0] + for ; charCounter >= 0; charCounter-- { + if input[charCounter] == '\n' { + lineCounter++ + } + if lineCounter > contextBefore { + break + } + } + lineStart := charCounter + 1 + + lineCounter = 0 + charCounter = result[1] + for ; charCounter < len(input); charCounter++ { + if input[charCounter] == '\n' { + lineCounter++ + } + if lineCounter > contextAfter { + break + } + } + lineEnd := charCounter + + extractedRanges = append(extractedRanges, TextRange{lineStart, lineEnd}) + } + + return extractedRanges +} + +// insert merges newRanges into existingRanges by combining overlapping or adjacent ranges. +func insert(existingRanges, newRanges []TextRange) []TextRange { + // Combine all ranges into a single slice for sorting + allRanges := append(existingRanges, newRanges...) + + // Sort ranges by start value (and end value if starts are equal) + sort.Slice(allRanges, func(i, j int) bool { + if allRanges[i].start == allRanges[j].start { + return allRanges[i].end < allRanges[j].end + } + return allRanges[i].start < allRanges[j].start + }) + + // Merge ranges + var merged []TextRange + for _, current := range allRanges { + // If merged is empty or the current range does not overlap with the last merged range + if len(merged) == 0 || merged[len(merged)-1].end < current.start { + merged = append(merged, current) // Add the current range + } else { + // Overlapping or adjacent: Extend the end of the last merged range + merged[len(merged)-1].end = max(merged[len(merged)-1].end, current.end) + } + } + + return merged +} + +// Combine processes input using multiple logFileProcessors and merges their output ranges. +func Combine(input []byte, processors ...logFileProcessor) []TextRange { + var allRanges []TextRange + + // Collect all ranges from each processor + for _, processor := range processors { + allRanges = append(allRanges, processor(input)...) + } + + // Use the improved insert function to merge all collected ranges + return insert(nil, allRanges) +} + +type logFileProcessor func([]byte) []TextRange + +// processLogFile reads a UTF-16 MSI log file and applies various processors on it +// to retain only the relevant log lines. It combines the various outputs from the processors and +// decorate each range of log lines with a marker ('---') to distinguish them. +func processLogFile(logFile fs.File, processors ...logFileProcessor) ([]byte, error) { + logFileBuffer := bytes.NewBuffer(nil) + _, err := io.Copy(logFileBuffer, logFile) + if err != nil { + return nil, err + } + decodedLogsBytes, err := unicode.UTF16(unicode.LittleEndian, unicode.UseBOM).NewDecoder().Bytes(logFileBuffer.Bytes()) + if err != nil { + return nil, err + } + + var output []byte + rangesToSave := Combine(decodedLogsBytes, processors...) + for _, ranges := range rangesToSave { + output = append(output, []byte(fmt.Sprintf("--- %d:%d\r\n", ranges.start, ranges.end))...) + output = append(output, decodedLogsBytes[ranges.start:ranges.end]...) + output = append(output, '\r', '\n', '\r', '\n') + } + return output, nil +} diff --git a/pkg/fleet/internal/msi/msilog_test.go b/pkg/fleet/internal/msi/msilog_test.go new file mode 100644 index 0000000000000..f52ff24f2a65f --- /dev/null +++ b/pkg/fleet/internal/msi/msilog_test.go @@ -0,0 +1,393 @@ +// 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. + +//go:build windows + +package msi + +import ( + "embed" + "github.com/stretchr/testify/require" + "golang.org/x/text/encoding/unicode" + "regexp" + "strings" + "testing" +) + +//go:embed wixfailwhendeferred.log +//go:embed missing_password_for_dc.log +//go:embed file_in_use.log +//go:embed invalid_credentials.log +//go:embed service_marked_for_deletion.log +var logFilesFS embed.FS + +func TestFindAllIndexWithContext(t *testing.T) { + data, err := logFilesFS.ReadFile("wixfailwhendeferred.log") + require.NoError(t, err) + + r := regexp.MustCompile("returned actual error") + decodedLogsBytes, err := unicode.UTF16(unicode.LittleEndian, unicode.UseBOM).NewDecoder().Bytes(data) + require.NoError(t, err) + + matches := FindAllIndexWithContext(r, decodedLogsBytes, 2, 1) + + expectedMatches := []string{ + `Action start 2:10:53: WixRemoveFoldersEx. +WixRemoveFoldersEx: Error 0x80070057: Missing folder property: dd_PROJECTLOCATION_0 for row: RemoveFolderEx +CustomAction WixRemoveFoldersEx returned actual error code 1603 but will be translated to success due to continue marking +Action ended 2:10:53: WixRemoveFoldersEx. Return value 1.`, + `Calling custom action AgentCustomActions!Datadog.AgentCustomActions.CustomActions.PrepareDecompressPythonDistributions +CA: 02:10:56: PrepareDecompressPythonDistributions. Could not set the progress bar size +CustomAction PrepareDecompressPythonDistributions returned actual error code 1603 but will be translated to success due to continue marking +Action ended 2:10:56: PrepareDecompressPythonDistributions. Return value 1.`, + `SFXCA: Binding to CLR version v4.0.30319 +Calling custom action AgentCustomActions!Datadog.AgentCustomActions.CustomActions.StartDDServices +CustomAction WixFailWhenDeferred returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox) +Action ended 2:11:49: InstallFinalize. Return value 3.`, + } + for i, expectedMatch := range expectedMatches { + text := strings.ReplaceAll(string(decodedLogsBytes[matches[i].start:matches[i].end]), "\r", "") + require.Equal(t, expectedMatch, text) + } +} + +func TestFindAllIndexWithContextOutOfRangeDoesntFail(t *testing.T) { + data, err := logFilesFS.ReadFile("wixfailwhendeferred.log") + require.NoError(t, err) + + r := regexp.MustCompile("returned actual error") + decodedLogsBytes, err := unicode.UTF16(unicode.LittleEndian, unicode.UseBOM).NewDecoder().Bytes(data) + require.NoError(t, err) + + matches := FindAllIndexWithContext(r, decodedLogsBytes, -21, -1435) + expectedMatches := []string{ + `CustomAction WixRemoveFoldersEx returned actual error code 1603 but will be translated to success due to continue marking`, + `CustomAction PrepareDecompressPythonDistributions returned actual error code 1603 but will be translated to success due to continue marking`, + `CustomAction WixFailWhenDeferred returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)`, + } + for i, expectedMatch := range expectedMatches { + text := strings.ReplaceAll(string(decodedLogsBytes[matches[i].start:matches[i].end]), "\r", "") + require.Equal(t, expectedMatch, text) + } +} + +func TestCombineRanges(t *testing.T) { + tests := map[string]struct { + input []logFileProcessor + expected []TextRange + }{ + "overlap left": { + input: []logFileProcessor{ + func(_ []byte) []TextRange { + return []TextRange{{1, 5}} + }, + func(_ []byte) []TextRange { + return []TextRange{{4, 7}} + }}, + expected: []TextRange{{1, 7}}, + }, + "overlap right": { + input: []logFileProcessor{ + func(_ []byte) []TextRange { + return []TextRange{{2, 4}} + }, + func(_ []byte) []TextRange { + return []TextRange{{1, 3}} + }}, + expected: []TextRange{{1, 4}}, + }, + "no overlap": { + input: []logFileProcessor{ + func(_ []byte) []TextRange { + return []TextRange{{2, 4}} + }, + func(_ []byte) []TextRange { + return []TextRange{{5, 10}} + }}, + expected: []TextRange{{2, 4}, {5, 10}}, + }, + "full overlap": { + input: []logFileProcessor{ + func(_ []byte) []TextRange { + return []TextRange{{2, 4}} + }, + func(_ []byte) []TextRange { + return []TextRange{{1, 10}} + }}, + expected: []TextRange{{1, 10}}, + }, + "full overlap inverted": { + input: []logFileProcessor{ + func(_ []byte) []TextRange { + return []TextRange{{1, 10}} + }, + func(_ []byte) []TextRange { + return []TextRange{{2, 4}} + }}, + expected: []TextRange{{1, 10}}, + }, + "test many ranges": { + input: []logFileProcessor{ + func(_ []byte) []TextRange { + return []TextRange{{16067, 16421}} + }, + func(_ []byte) []TextRange { + return []TextRange{{19659, 20140}} + }, + func(_ []byte) []TextRange { + return []TextRange{{16002, 16359}} + }, + func(_ []byte) []TextRange { + return []TextRange{{19559, 19951}} + }, + func(_ []byte) []TextRange { + return []TextRange{{59421, 59556}} + }}, + expected: []TextRange{{16002, 16421}, {19559, 20140}, {59421, 59556}}, + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + require.Equal(t, test.expected, Combine(nil, test.input...)) + }) + } +} + +func TestReadLogFile(t *testing.T) { + m := &Msiexec{} + + tests := map[string]struct { + input string + expected string + }{ + "Wix built-in failure mode": { + input: "wixfailwhendeferred.log", + expected: `--- 1547:2038 +Action ended 2:10:53: LaunchConditions. Return value 1. +Action start 2:10:53: ValidateProductID. +Action ended 2:10:53: ValidateProductID. Return value 1. +Action start 2:10:53: WixRemoveFoldersEx. +WixRemoveFoldersEx: Error 0x80070057: Missing folder property: dd_PROJECTLOCATION_0 for row: RemoveFolderEx +CustomAction WixRemoveFoldersEx returned actual error code 1603 but will be translated to success due to continue marking +Action ended 2:10:53: WixRemoveFoldersEx. Return value 1. + +--- 6770:7391 +Action start 2:10:55: PrepareDecompressPythonDistributions. +SFXCA: Extracting custom action to temporary directory: C:\Windows\Installer\MSIB32B.tmp-\ +SFXCA: Binding to CLR version v4.0.30319 +Calling custom action AgentCustomActions!Datadog.AgentCustomActions.CustomActions.PrepareDecompressPythonDistributions +CA: 02:10:56: PrepareDecompressPythonDistributions. Could not set the progress bar size +CustomAction PrepareDecompressPythonDistributions returned actual error code 1603 but will be translated to success due to continue marking +Action ended 2:10:56: PrepareDecompressPythonDistributions. Return value 1. + +--- 16002:16421 +CA: 02:11:30: AddUser. ddagentuser already exists, not creating +CA: 02:11:30: GetPreviousAgentUser. Could not find previous agent user: System.Exception: Agent user information is not in registry + at Datadog.CustomActions.InstallStateCustomActions.GetPreviousAgentUser(ISession session, IRegistryServices registryServices, INativeMethods nativeMethods) +CA: 02:11:30: ConfigureUser. Resetting ddagentuser password. + +--- 19559:20140 +CA: 02:11:36: ConfigureServiceUsers. Configuring services with account WIN-ST17FJ32SOG\ddagentuser +CA: 02:11:36: GetPreviousAgentUser. Could not find previous agent user: System.Exception: Agent user information is not in registry + at Datadog.CustomActions.InstallStateCustomActions.GetPreviousAgentUser(ISession session, IRegistryServices registryServices, INativeMethods nativeMethods) +CA: 02:11:36: UpdateAndLogAccessControl. datadog-process-agent current ACLs: D:(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA) + +--- 24843:25383 +CA(ddprocmon): DriverInstall: Done with create() 0 +CA(ddprocmon): DriverInstall: done installing services +SFXCA: Extracting custom action to temporary directory: C:\Windows\Installer\MSI593F.tmp-\ +SFXCA: Binding to CLR version v4.0.30319 +Calling custom action AgentCustomActions!Datadog.AgentCustomActions.CustomActions.StartDDServices +CustomAction WixFailWhenDeferred returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox) +Action ended 2:11:49: InstallFinalize. Return value 3. + +`, + }, + "Missing password for DC": { + input: "missing_password_for_dc.log", + expected: `--- 3625:5242 +SFXCA: Binding to CLR version v4.0.30319 +Calling custom action AgentCustomActions!Datadog.AgentCustomActions.CustomActions.ProcessDdAgentUserCredentials +CA: 01:49:43: LookupAccountWithExtendedDomainSyntax. User not found, trying again with fixed domain part: \toto +CA: 01:49:43: ProcessDdAgentUserCredentials. User toto doesn't exist. +CA: 01:49:43: ProcessDdAgentUserCredentials. domain part is empty, using default +CA: 01:49:43: ProcessDdAgentUserCredentials. Installing with DDAGENTUSER_PROCESSED_NAME=toto and DDAGENTUSER_PROCESSED_DOMAIN=datadoghq-qa-labs.local +CA: 01:49:43: HandleProcessDdAgentUserCredentialsException. Error processing ddAgentUser credentials: Datadog.CustomActions.InvalidAgentUserConfigurationException: A password was not provided. A password is a required when installing on Domain Controllers. + at Datadog.CustomActions.ProcessUserCustomActions.ProcessDdAgentUserCredentials(Boolean calledFromUIControl) +MSI (s) (C8!50) [01:49:43:906]: Product: Datadog Agent -- A password was not provided. A password is a required when installing on Domain Controllers. + +A password was not provided. A password is a required when installing on Domain Controllers. +CustomAction ProcessDdAgentUserCredentials returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox) +Action ended 1:49:43: ProcessDdAgentUserCredentials. Return value 3. +Action ended 1:49:43: INSTALL. Return value 3. +Property(S): UpgradeCode = {0C50421B-AEFB-4F15-A809-7AF256D608A5} +Property(S): NETFRAMEWORK45 = #528449 +Property(S): WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 + +`, + }, + "File in use": { + input: "file_in_use.log", + expected: `--- 3557:3890 +Action start 1:45:18: InstallValidate. +Info 1603. The file C:\Program Files\Datadog\Datadog Agent\bin\agent\process-agent.exe is being held in use by the following process: Name: process-agent, Id: 4704, Window Title: '(not determined yet)'. Close that application and retry. +Action ended 1:45:21: InstallValidate. Return value 1. + +--- 5653:5849 +SFXCA: Binding to CLR version v4.0.30319 +Calling custom action CustomActions!Datadog.CustomActions.PrerequisitesCustomActions.EnsureAdminCaller +Action ended 1:45:22: RunAsAdmin. Return value 1. + +--- 5983:6218 +SFXCA: Binding to CLR version v4.0.30319 +Calling custom action CustomActions!Datadog.CustomActions.InstallStateCustomActions.ReadInstallState +CA: 01:45:23: RegistryProperty. Found DDAGENTUSER_NAME in registry DDOG-HQ-QA-LABS\ddGmsa$ + +--- 7338:7520 +SFXCA: Binding to CLR version v4.0.30319 +Calling custom action CustomActions!Datadog.CustomActions.ConfigCustomActions.ReadConfig +Action ended 1:45:25: ReadConfig. Return value 1. + +--- 7627:7960 +Action start 1:45:25: InstallValidate. +Info 1603. The file C:\Program Files\Datadog\Datadog Agent\bin\agent\process-agent.exe is being held in use by the following process: Name: process-agent, Id: 4704, Window Title: '(not determined yet)'. Close that application and retry. +Action ended 1:45:27: InstallValidate. Return value 1. + +--- 12929:13180 +SFXCA: Binding to CLR version v4.0.30319 +Calling custom action CustomActions!Datadog.CustomActions.Rollback.RestoreDaclRollbackCustomAction.DoRollback +CA: 01:45:35: DoRollback. Resetting inheritance flag on "C:\Program Files\Datadog\Datadog Agent\" + +--- 13273:13484 +SFXCA: Binding to CLR version v4.0.30319 +Calling custom action CustomActions!Datadog.CustomActions.ServiceCustomAction.StopDDServices +CA: 01:45:39: StopDDServices. Service datadog-system-probe status: Stopped + +--- 14824:15093 +SFXCA: Binding to CLR version v4.0.30319 +Calling custom action CustomActions!Datadog.CustomActions.ConfigureUserCustomActions.UninstallUser +CA: 01:45:42: UninstallUser. Removing file access for DDOG-HQ-QA-LABS\ddGmsa$ (S-1-5-21-3647231507-2031390810-2876811253-1605) + +--- 464565:465186 +Action start 1:46:16: PrepareDecompressPythonDistributions. +SFXCA: Extracting custom action to temporary directory: C:\Windows\Installer\MSI58A1.tmp-\ +SFXCA: Binding to CLR version v4.0.30319 +Calling custom action AgentCustomActions!Datadog.AgentCustomActions.CustomActions.PrepareDecompressPythonDistributions +CA: 01:46:17: PrepareDecompressPythonDistributions. Could not set the progress bar size +CustomAction PrepareDecompressPythonDistributions returned actual error code 1603 but will be translated to success due to continue marking +Action ended 1:46:17: PrepareDecompressPythonDistributions. Return value 1. + +`, + }, + "Invalid credentials": { + input: "invalid_credentials.log", + expected: `--- 7263:7883 +Action start 1:50:19: PrepareDecompressPythonDistributions. +SFXCA: Extracting custom action to temporary directory: C:\Windows\Installer\MSID56.tmp-\ +SFXCA: Binding to CLR version v4.0.30319 +Calling custom action AgentCustomActions!Datadog.AgentCustomActions.CustomActions.PrepareDecompressPythonDistributions +CA: 01:50:19: PrepareDecompressPythonDistributions. Could not set the progress bar size +CustomAction PrepareDecompressPythonDistributions returned actual error code 1603 but will be translated to success due to continue marking +Action ended 1:50:19: PrepareDecompressPythonDistributions. Return value 1. + +--- 25259:26729 +CA: 01:50:48: StoreAgentUserInRegistry. Storing installedUser=ddagentuser +CA(ddnpm): DriverInstall: Initialized +CA(ddnpm): DriverInstall: Installing services +CA(ddnpm): DriverInstall: installing service +CA(ddnpm): DriverInstall: serviceDef::create() +CA(ddnpm): DriverInstall: Failed to CreateService 1073 +CA(ddnpm): DriverInstall: Service exists, verifying +CA(ddnpm): DriverInstall: Updated path for existing service +CA(ddnpm): DriverInstall: done installing services +CA(ddapm): DriverInstall: Initialized +CA(ddapm): DriverInstall: Installing services +CA(ddapm): DriverInstall: installing service +CA(ddapm): DriverInstall: serviceDef::create() +CA(ddapm): DriverInstall: Failed to CreateService 1073 +CA(ddapm): DriverInstall: Service exists, verifying +CA(ddapm): DriverInstall: Updated path for existing service +CA(ddapm): DriverInstall: done installing services +CA(ddprocmon): DriverInstall: Initialized +CA(ddprocmon): DriverInstall: Installing services +CA(ddprocmon): DriverInstall: installing service +CA(ddprocmon): DriverInstall: serviceDef::create() +CA(ddprocmon): DriverInstall: Failed to CreateService 1073 +CA(ddprocmon): DriverInstall: Service exists, verifying +CA(ddprocmon): DriverInstall: Updated path for existing service +CA(ddprocmon): DriverInstall: done installing services +SFXCA: Extracting custom action to temporary directory: C:\Windows\Installer\MSI7FD3.tmp-\ +SFXCA: Binding to CLR version v4.0.30319 + +--- 26730:27404 +Calling custom action AgentCustomActions!Datadog.AgentCustomActions.CustomActions.StartDDServices +CA: 01:50:49: StartDDServices. Failed to start services: System.InvalidOperationException: Cannot start service datadogagent on computer '.'. ---> System.ComponentModel.Win32Exception: The service did not start due to a logon failure + --- End of inner exception stack trace --- + at System.ServiceProcess.ServiceController.Start(String args) + at Datadog.CustomActions.Native.ServiceController.StartService(String serviceName, TimeSpan timeout) + at Datadog.CustomActions.ServiceCustomAction.StartDDServices() +Action ended 1:50:49: InstallFinalize. Return value 1. + +`, + }, + "Service marked for deletion": { + input: "service_marked_for_deletion.log", + expected: `--- 1546:2037 +Action ended 6:11:36: LaunchConditions. Return value 1. +Action start 6:11:36: ValidateProductID. +Action ended 6:11:36: ValidateProductID. Return value 1. +Action start 6:11:36: WixRemoveFoldersEx. +WixRemoveFoldersEx: Error 0x80070057: Missing folder property: dd_PROJECTLOCATION_0 for row: RemoveFolderEx +CustomAction WixRemoveFoldersEx returned actual error code 1603 but will be translated to success due to continue marking +Action ended 6:11:36: WixRemoveFoldersEx. Return value 1. + +--- 6876:7497 +Action start 6:11:38: PrepareDecompressPythonDistributions. +SFXCA: Extracting custom action to temporary directory: C:\Windows\Installer\MSI7CB7.tmp-\ +SFXCA: Binding to CLR version v4.0.30319 +Calling custom action AgentCustomActions!Datadog.AgentCustomActions.CustomActions.PrepareDecompressPythonDistributions +CA: 06:11:39: PrepareDecompressPythonDistributions. Could not set the progress bar size +CustomAction PrepareDecompressPythonDistributions returned actual error code 1603 but will be translated to success due to continue marking +Action ended 6:11:39: PrepareDecompressPythonDistributions. Return value 1. + +--- 16762:17181 +CA: 06:12:16: AddUser. ddagentuser already exists, not creating +CA: 06:12:16: GetPreviousAgentUser. Could not find previous agent user: System.Exception: Agent user information is not in registry + at Datadog.CustomActions.InstallStateCustomActions.GetPreviousAgentUser(ISession session, IRegistryServices registryServices, INativeMethods nativeMethods) +CA: 06:12:16: ConfigureUser. Resetting ddagentuser password. + +--- 19832:20285 + } +] +MSI (s) (B4:24) [06:12:21:764]: Product: Datadog Agent -- Error 1923. Service 'Datadog Agent' (datadogagent) could not be installed. Verify that you have sufficient privileges to install system services. + +Error 1923. Service 'Datadog Agent' (datadogagent) could not be installed. Verify that you have sufficient privileges to install system services. +SFXCA: Extracting custom action to temporary directory: C:\Windows\Installer\MSI2787.tmp-\ + +--- 20286:20851 +SFXCA: Binding to CLR version v4.0.30319 +Calling custom action AgentCustomActions!Datadog.AgentCustomActions.CustomActions.EnsureNpmServiceDependency +ExecServiceConfig: Error 0x80070430: Cannot change service configuration. Error: The specified service has been marked for deletion. + +ExecServiceConfig: Error 0x80070430: Failed to configure service: datadogagent +CustomAction ExecServiceConfig returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox) +Action ended 6:12:22: InstallFinalize. Return value 3. + +`, + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + file, err := logFilesFS.Open(test.input) + require.NoError(t, err) + got, err := m.processLogFile(file) + require.NoError(t, err) + resultString := strings.ReplaceAll(string(got), "\r", "") + require.Equal(t, test.expected, resultString) + }) + } +} diff --git a/pkg/fleet/installer/packages/msiexec.go b/pkg/fleet/internal/msi/product.go similarity index 59% rename from pkg/fleet/installer/packages/msiexec.go rename to pkg/fleet/internal/msi/product.go index e65692bb38c8f..e87144d748f9d 100644 --- a/pkg/fleet/installer/packages/msiexec.go +++ b/pkg/fleet/internal/msi/product.go @@ -5,34 +5,14 @@ //go:build windows -package packages +package msi import ( "fmt" - "os/exec" - "path/filepath" - "github.com/DataDog/datadog-agent/pkg/fleet/internal/paths" - "github.com/DataDog/datadog-agent/pkg/util/log" "golang.org/x/sys/windows/registry" ) -func msiexec(target, product, operation string, args []string) (*exec.Cmd, error) { - updaterPath := filepath.Join(paths.PackagesPath, product, target) - msis, err := filepath.Glob(filepath.Join(updaterPath, fmt.Sprintf("%s-*-1-x86_64.msi", product))) - if err != nil { - return nil, err - } - if len(msis) > 1 { - return nil, fmt.Errorf("too many MSIs in package") - } else if len(msis) == 0 { - return nil, fmt.Errorf("no MSIs in package") - } - - cmd := exec.Command("msiexec", append([]string{operation, msis[0], "/qn", "MSIFASTINSTALL=7"}, args...)...) - return cmd, nil -} - // Product represents a software from the Windows Registry type Product struct { // Code is the software product code @@ -41,7 +21,8 @@ type Product struct { UninstallString string } -func findProductCode(name string) (*Product, error) { +// FindProductCode looks for the productName in the registry and returns information about it +func FindProductCode(productName string) (*Product, error) { rootPath := "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall" reg, err := registry.OpenKey(registry.LOCAL_MACHINE, rootPath, registry.ENUMERATE_SUB_KEYS) if err != nil { @@ -53,55 +34,55 @@ func findProductCode(name string) (*Product, error) { return nil, err } for _, key := range keys { - product, err := processKey(rootPath, key, name) + product, err := processKey(rootPath, key, productName) if err == nil && product != nil { - return product, err + return product, nil } } - return nil, nil + return nil, fmt.Errorf("product not found") } -func processKey(rootPath, key, name string) (*Product, error) { - subkey, err := registry.OpenKey(registry.LOCAL_MACHINE, rootPath+"\\"+key, registry.QUERY_VALUE) +// IsProductInstalled returns true if the given productName is installed +func IsProductInstalled(productName string) bool { + product, err := FindProductCode(productName) if err != nil { - return nil, err - } - defer subkey.Close() - - displayName, _, err := subkey.GetStringValue("DisplayName") - if err == nil && displayName == name { - product := &Product{} - product.UninstallString, _, _ = subkey.GetStringValue("UninstallString") - product.Code = key - return product, nil + return false } - - return nil, nil + return product != nil } -// removeProduct uses the registry to try and find a product and use msiexec to remove it. +// RemoveProduct uses the registry to try and find a product and use msiexec to remove it. // It is different from msiexec in that it uses the registry and not the stable/experiment path on disk to // uninstall the product. // This is needed because in certain circumstances the installer database stored in the stable/experiment paths does not // reflect the installed version, and using those installers can lead to undefined behavior (either failure to uninstall, // or weird bugs from uninstalling a product with an installer from a different version). -func removeProduct(productName string) error { - log.Debugf("Removing product %s", productName) - product, err := findProductCode(productName) +func RemoveProduct(productName string) error { + cmd, err := Cmd(Uninstall(), WithProduct(productName)) if err != nil { - return fmt.Errorf("error trying to find product %s: %w", productName, err) + return fmt.Errorf("failed to remove product: %w", err) } - if product != nil { - cmd := exec.Command("msiexec", "/x", product.Code, "/qn", "MSIFASTINSTALL=7") - return cmd.Run() + output, err := cmd.Run() + if err != nil { + return fmt.Errorf("failed to remove product: %w\n%s", err, string(output)) } - return fmt.Errorf("product %s not found", productName) + return nil } -func isProductInstalled(productName string) bool { - product, err := findProductCode(productName) +func processKey(rootPath, key, name string) (*Product, error) { + subkey, err := registry.OpenKey(registry.LOCAL_MACHINE, rootPath+"\\"+key, registry.QUERY_VALUE) if err != nil { - return false + return nil, err } - return product != nil + defer subkey.Close() + + displayName, _, err := subkey.GetStringValue("DisplayName") + if err == nil && displayName == name { + product := &Product{} + product.UninstallString, _, _ = subkey.GetStringValue("UninstallString") + product.Code = key + return product, nil + } + + return nil, nil } diff --git a/pkg/fleet/internal/msi/service_marked_for_deletion.log b/pkg/fleet/internal/msi/service_marked_for_deletion.log new file mode 100644 index 0000000000000000000000000000000000000000..7844b7a546931e3104ddd6eb35d7b6c32e2942e3 GIT binary patch literal 108018 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 LiOev*kdgln9pZqz literal 0 HcmV?d00001 diff --git a/pkg/fleet/internal/msi/wixfailwhendeferred.log b/pkg/fleet/internal/msi/wixfailwhendeferred.log new file mode 100644 index 0000000000000000000000000000000000000000..fb1982434be9b3a068f8fd1f90ae5ecff8f5ba70 GIT binary patch literal 128276 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 Y6Hi!{yJz2R#%QMW&1%$#J;u-f2c?K}MF0Q* literal 0 HcmV?d00001 From f215538d98687c4ca0d5620cd7750873446aeb2c Mon Sep 17 00:00:00 2001 From: Stuart Geipel Date: Mon, 16 Dec 2024 19:20:16 -0500 Subject: [PATCH 246/303] [ebpfless] Separate pending connection map, handle closed connections (#32158) --- .../tracer/connection/ebpfless/map_utils.go | 19 +++ .../connection/ebpfless/map_utils_test.go | 38 ++++++ .../connection/ebpfless/tcp_processor.go | 111 +++++++++++++----- .../connection/ebpfless/tcp_processor_test.go | 60 ++++------ .../tracer/connection/ebpfless/tcp_utils.go | 42 +++++-- .../tracer/connection/ebpfless_tracer.go | 48 ++++++-- 6 files changed, 232 insertions(+), 86 deletions(-) create mode 100644 pkg/network/tracer/connection/ebpfless/map_utils.go create mode 100644 pkg/network/tracer/connection/ebpfless/map_utils_test.go diff --git a/pkg/network/tracer/connection/ebpfless/map_utils.go b/pkg/network/tracer/connection/ebpfless/map_utils.go new file mode 100644 index 0000000000000..3e41f4832707d --- /dev/null +++ b/pkg/network/tracer/connection/ebpfless/map_utils.go @@ -0,0 +1,19 @@ +// 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 2024-present Datadog, Inc. + +//go:build linux + +package ebpfless + +// WriteMapWithSizeLimit updates a map via m[key] = val. +// However, if the map would overflow sizeLimit, it returns false instead. +func WriteMapWithSizeLimit[Key comparable, Val any](m map[Key]Val, key Key, val Val, sizeLimit int) bool { + _, exists := m[key] + if !exists && len(m) >= sizeLimit { + return false + } + m[key] = val + return true +} diff --git a/pkg/network/tracer/connection/ebpfless/map_utils_test.go b/pkg/network/tracer/connection/ebpfless/map_utils_test.go new file mode 100644 index 0000000000000..e387328d00610 --- /dev/null +++ b/pkg/network/tracer/connection/ebpfless/map_utils_test.go @@ -0,0 +1,38 @@ +// 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 2024-present Datadog, Inc. + +//go:build linux + +package ebpfless + +import ( + "github.com/stretchr/testify/require" + "testing" +) + +func TestWriteMapWithSizeLimit(t *testing.T) { + m := map[string]int{} + + // not full: any write should work + ok := WriteMapWithSizeLimit(m, "foo", 123, 1) + require.True(t, ok) + + expectedFoo := map[string]int{ + "foo": 123, + } + require.Equal(t, expectedFoo, m) + + // full: shouldn't write a new key + ok = WriteMapWithSizeLimit(m, "bar", 456, 1) + require.False(t, ok) + require.Equal(t, expectedFoo, m) + + // full: replacing key should still work + ok = WriteMapWithSizeLimit(m, "foo", 789, 1) + require.True(t, ok) + require.Equal(t, map[string]int{ + "foo": 789, + }, m) +} diff --git a/pkg/network/tracer/connection/ebpfless/tcp_processor.go b/pkg/network/tracer/connection/ebpfless/tcp_processor.go index 8d530fc3cd70a..c83a5430b96f1 100644 --- a/pkg/network/tracer/connection/ebpfless/tcp_processor.go +++ b/pkg/network/tracer/connection/ebpfless/tcp_processor.go @@ -18,6 +18,7 @@ import ( "github.com/google/gopacket/layers" "github.com/DataDog/datadog-agent/pkg/network" + "github.com/DataDog/datadog-agent/pkg/network/config" ) type connectionState struct { @@ -61,13 +62,22 @@ func (st *connectionState) hasMissedHandshake() bool { // TCPProcessor encapsulates TCP state tracking for the ebpfless tracer type TCPProcessor struct { - conns map[network.ConnectionTuple]connectionState + cfg *config.Config + // pendingConns contains connections with tcpState == connStatAttempted + pendingConns map[network.ConnectionTuple]*connectionState + // establishedConns contains connections with tcpState == connStatEstablished + establishedConns map[network.ConnectionTuple]*connectionState } +// TODO make this into a config value +const maxPendingConns = 4096 + // NewTCPProcessor constructs an empty TCPProcessor -func NewTCPProcessor() *TCPProcessor { +func NewTCPProcessor(cfg *config.Config) *TCPProcessor { return &TCPProcessor{ - conns: map[network.ConnectionTuple]connectionState{}, + cfg: cfg, + pendingConns: make(map[network.ConnectionTuple]*connectionState, maxPendingConns), + establishedConns: make(map[network.ConnectionTuple]*connectionState, cfg.MaxTrackedConnections), } } @@ -133,7 +143,7 @@ func (t *TCPProcessor) updateSynFlag(conn *network.ConnectionStats, st *connecti if st.tcpState == connStatAttempted && st.localSynState.isSynAcked() && st.remoteSynState.isSynAcked() { st.tcpState = connStatEstablished if st.hasMissedHandshake() { - statsTelemetry.missedTCPConnections.Inc() + statsTelemetry.missedTCPHandshakes.Inc() } else { conn.Monotonic.TCPEstablished++ } @@ -241,13 +251,13 @@ func (t *TCPProcessor) updateRstFlag(conn *network.ConnectionStats, st *connecti // Process handles a TCP packet, calculating stats and keeping track of its state according to the // TCP state machine. -func (t *TCPProcessor) Process(conn *network.ConnectionStats, timestampNs uint64, pktType uint8, ip4 *layers.IPv4, ip6 *layers.IPv6, tcp *layers.TCP) error { +func (t *TCPProcessor) Process(conn *network.ConnectionStats, timestampNs uint64, pktType uint8, ip4 *layers.IPv4, ip6 *layers.IPv6, tcp *layers.TCP) (ProcessResult, error) { if pktType != unix.PACKET_OUTGOING && pktType != unix.PACKET_HOST { - return fmt.Errorf("TCPProcessor saw invalid pktType: %d", pktType) + return ProcessResultNone, fmt.Errorf("TCPProcessor saw invalid pktType: %d", pktType) } payloadLen, err := TCPPayloadLen(conn.Family, ip4, ip6, tcp) if err != nil { - return err + return ProcessResultNone, err } log.TraceFunc(func() string { @@ -256,31 +266,76 @@ func (t *TCPProcessor) Process(conn *network.ConnectionStats, timestampNs uint64 // skip invalid packets we don't recognize: if checkInvalidTCP(tcp) { - return nil + return ProcessResultNone, nil + } + + st := t.getConn(conn.ConnectionTuple) + origState := st.tcpState + + t.updateSynFlag(conn, st, pktType, tcp, payloadLen) + t.updateTCPStats(conn, st, pktType, tcp, payloadLen, timestampNs) + t.updateFinFlag(conn, st, pktType, tcp, payloadLen) + t.updateRstFlag(conn, st, pktType, tcp, payloadLen) + + stateChanged := st.tcpState != origState + if stateChanged { + ok := t.moveConn(conn.ConnectionTuple, st) + // if the map is full then we are unable to move the connection, report that + if !ok { + return ProcessResultMapFull, nil + } } - st := t.conns[conn.ConnectionTuple] + // if the connection is still established, we should update the connection map + if st.tcpState == connStatEstablished { + return ProcessResultStoreConn, nil + } + // if the connection just closed, store it in the tracer's closeCallback + if st.tcpState == connStatClosed && stateChanged { + return ProcessResultCloseConn, nil + } + return ProcessResultNone, nil +} - t.updateSynFlag(conn, &st, pktType, tcp, payloadLen) - t.updateTCPStats(conn, &st, pktType, tcp, payloadLen, timestampNs) - t.updateFinFlag(conn, &st, pktType, tcp, payloadLen) - t.updateRstFlag(conn, &st, pktType, tcp, payloadLen) +func (t *TCPProcessor) getConn(tuple network.ConnectionTuple) *connectionState { + if st, ok := t.establishedConns[tuple]; ok { + return st + } + if st, ok := t.pendingConns[tuple]; ok { + return st + } + // otherwise, create a fresh state object that will be stored by moveConn later + return &connectionState{} +} - t.conns[conn.ConnectionTuple] = st - return nil +// RemoveConn clears a ConnectionTuple from its internal state. +func (t *TCPProcessor) RemoveConn(tuple network.ConnectionTuple) { + delete(t.pendingConns, tuple) + delete(t.establishedConns, tuple) } -// HasConnEverEstablished is used to avoid a connection appearing before the three-way handshake is complete. -// This is done to mirror the behavior of ebpf tracing accept() and connect(), which both return -// after the handshake is completed. -func (t *TCPProcessor) HasConnEverEstablished(conn *network.ConnectionStats) bool { - st := t.conns[conn.ConnectionTuple] - - // conn.Monotonic.TCPEstablished can be 0 even though isEstablished is true, - // because pre-existing connections don't increment TCPEstablished. - // That's why we use tcpState instead of conn - isEstablished := st.tcpState == connStatEstablished - // if the connection has closed in any way, report that too - hasEverClosed := conn.Monotonic.TCPClosed > 0 || len(conn.TCPFailures) > 0 - return isEstablished || hasEverClosed +// moveConn moves a connection to the correct map based on its tcpState. +// If it had to drop the connection because the target map was full, it returns false. +func (t *TCPProcessor) moveConn(tuple network.ConnectionTuple, st *connectionState) bool { + t.RemoveConn(tuple) + + switch st.tcpState { + // For this case, simply let closed connections disappear. Process() will return + // ProcessResultCloseConn letting the ebpfless tracer know the connection has closed. + case connStatClosed: + case connStatAttempted: + ok := WriteMapWithSizeLimit(t.pendingConns, tuple, st, maxPendingConns) + if !ok { + statsTelemetry.droppedPendingConns.Inc() + } + return ok + case connStatEstablished: + maxTrackedConns := int(t.cfg.MaxTrackedConnections) + ok := WriteMapWithSizeLimit(t.establishedConns, tuple, st, maxTrackedConns) + if !ok { + statsTelemetry.droppedEstablishedConns.Inc() + } + return ok + } + return true } diff --git a/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go b/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go index f19729579a6bc..dea6090eb121d 100644 --- a/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go +++ b/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go @@ -8,6 +8,7 @@ package ebpfless import ( + "github.com/DataDog/datadog-agent/pkg/network/config" "net" "syscall" "testing" @@ -166,19 +167,21 @@ func (pb packetBuilder) outgoing(payloadLen uint16, relSeq, relAck uint32, flags } func newTCPTestFixture(t *testing.T) *tcpTestFixture { + cfg := config.New() return &tcpTestFixture{ t: t, - tcp: NewTCPProcessor(), + tcp: NewTCPProcessor(cfg), conn: nil, } } -func (fixture *tcpTestFixture) runPkt(pkt testCapture) { +func (fixture *tcpTestFixture) runPkt(pkt testCapture) ProcessResult { if fixture.conn == nil { fixture.conn = makeTCPStates(pkt) } - err := fixture.tcp.Process(fixture.conn, pkt.timestampNs, pkt.pktType, pkt.ipv4, pkt.ipv6, pkt.tcp) + result, err := fixture.tcp.Process(fixture.conn, pkt.timestampNs, pkt.pktType, pkt.ipv4, pkt.ipv6, pkt.tcp) require.NoError(fixture.t, err) + return result } func (fixture *tcpTestFixture) runPkts(packets []testCapture) { @@ -197,7 +200,7 @@ func (fixture *tcpTestFixture) runAgainstState(packets []testCapture, expected [ fixture.runPkt(pkt) connTuple := fixture.conn.ConnectionTuple - actual := fixture.tcp.conns[connTuple].tcpState + actual := fixture.tcp.getConn(connTuple).tcpState actualStrs = append(actualStrs, labelForState(actual)) } require.Equal(fixture.t, expectedStrs, actualStrs) @@ -255,6 +258,9 @@ func testBasicHandshake(t *testing.T, pb packetBuilder) { } require.Equal(t, expectedStats, f.conn.Monotonic) + + require.Empty(t, f.tcp.pendingConns) + require.Empty(t, f.tcp.establishedConns) } var lowerSeq uint32 = 2134452051 @@ -322,6 +328,9 @@ func testReversedBasicHandshake(t *testing.T, pb packetBuilder) { TCPClosed: 1, } require.Equal(t, expectedStats, f.conn.Monotonic) + + require.Empty(t, f.tcp.pendingConns) + require.Empty(t, f.tcp.establishedConns) } func TestReversedBasicHandshake(t *testing.T) { @@ -614,9 +623,8 @@ func TestConnReset(t *testing.T) { require.Equal(t, expectedStats, f.conn.Monotonic) } -func TestConnectTwice(t *testing.T) { - // same as TestImmediateFin but everything happens twice - +func TestProcessResult(t *testing.T) { + // same as TestImmediateFin but checks ProcessResult pb := newPacketBuilder(lowerSeq, higherSeq) basicHandshake := []testCapture{ pb.incoming(0, 0, 0, SYN), @@ -628,40 +636,20 @@ func TestConnectTwice(t *testing.T) { pb.outgoing(0, 2, 2, ACK), } - expectedClientStates := []connStatus{ - connStatAttempted, - connStatAttempted, - connStatEstablished, - // active close begins here - connStatEstablished, - connStatEstablished, - connStatClosed, + processResults := []ProcessResult{ + ProcessResultNone, + ProcessResultNone, + ProcessResultStoreConn, + ProcessResultStoreConn, + ProcessResultStoreConn, + ProcessResultCloseConn, } f := newTCPTestFixture(t) - f.runAgainstState(basicHandshake, expectedClientStates) - - state := f.tcp.conns[f.conn.ConnectionTuple] - // make sure the TCP state was erased after the connection was closed - require.Equal(t, connectionState{ - tcpState: connStatClosed, - }, state) - - // second connection here - f.runAgainstState(basicHandshake, expectedClientStates) - - require.Empty(t, f.conn.TCPFailures) - expectedStats := network.StatCounters{ - SentBytes: 0, - RecvBytes: 0, - SentPackets: 3 * 2, - RecvPackets: 3 * 2, - Retransmits: 0, - TCPEstablished: 1 * 2, - TCPClosed: 1 * 2, + for i, pkt := range basicHandshake { + require.Equal(t, processResults[i], f.runPkt(pkt), "packet #%d has the wrong ProcessResult", i) } - require.Equal(t, expectedStats, f.conn.Monotonic) } func TestSimultaneousClose(t *testing.T) { diff --git a/pkg/network/tracer/connection/ebpfless/tcp_utils.go b/pkg/network/tracer/connection/ebpfless/tcp_utils.go index 9ebe4d778969d..4abe627a995d5 100644 --- a/pkg/network/tracer/connection/ebpfless/tcp_utils.go +++ b/pkg/network/tracer/connection/ebpfless/tcp_utils.go @@ -21,18 +21,40 @@ import ( const ebpflessModuleName = "ebpfless_network_tracer" +// ProcessResult represents what the ebpfless tracer should do with ConnectionStats after processing a packet +type ProcessResult uint8 + +const ( + // ProcessResultNone - the updated ConnectionStats should NOT be stored in the connection map. + // Usually, this is because the connection is not established yet. + ProcessResultNone ProcessResult = iota + // ProcessResultStoreConn - the updated ConnectionStats should be stored in the connection map. + // This happens when the connection is established. + ProcessResultStoreConn + // ProcessResultCloseConn - this connection is done and its ConnectionStats should be passed + // to the ebpfless tracer's closed connection handler. + ProcessResultCloseConn + // ProcessResultMapFull - this connection can't be tracked because the TCPProcessor's connection + // map is full. This connection should be removed from the tracer as well. + ProcessResultMapFull +) + var statsTelemetry = struct { - missedTCPConnections telemetry.Counter - missingTCPFlags telemetry.Counter - tcpSynAndFin telemetry.Counter - tcpRstAndSyn telemetry.Counter - tcpRstAndFin telemetry.Counter + droppedPendingConns telemetry.Counter + droppedEstablishedConns telemetry.Counter + missedTCPHandshakes telemetry.Counter + missingTCPFlags telemetry.Counter + tcpSynAndFin telemetry.Counter + tcpRstAndSyn telemetry.Counter + tcpRstAndFin telemetry.Counter }{ - telemetry.NewCounter(ebpflessModuleName, "missed_tcp_connections", []string{}, "Counter measuring the number of TCP connections where we missed the SYN handshake"), - telemetry.NewCounter(ebpflessModuleName, "missing_tcp_flags", []string{}, "Counter measuring packets encountered with none of SYN, FIN, ACK, RST set"), - telemetry.NewCounter(ebpflessModuleName, "tcp_syn_and_fin", []string{}, "Counter measuring packets encountered with SYN+FIN together"), - telemetry.NewCounter(ebpflessModuleName, "tcp_rst_and_syn", []string{}, "Counter measuring packets encountered with RST+SYN together"), - telemetry.NewCounter(ebpflessModuleName, "tcp_rst_and_fin", []string{}, "Counter measuring packets encountered with RST+FIN together"), + droppedPendingConns: telemetry.NewCounter(ebpflessModuleName, "dropped_pending_conns", nil, "Counter measuring the number of TCP connections which were dropped during the handshake (because the map was full)"), + droppedEstablishedConns: telemetry.NewCounter(ebpflessModuleName, "dropped_established_conns", nil, "Counter measuring the number of TCP connections which were dropped while established (because the map was full)"), + missedTCPHandshakes: telemetry.NewCounter(ebpflessModuleName, "missed_tcp_handshakes", nil, "Counter measuring the number of TCP connections where we missed the SYN handshake"), + missingTCPFlags: telemetry.NewCounter(ebpflessModuleName, "missing_tcp_flags", nil, "Counter measuring packets encountered with none of SYN, FIN, ACK, RST set"), + tcpSynAndFin: telemetry.NewCounter(ebpflessModuleName, "tcp_syn_and_fin", nil, "Counter measuring packets encountered with SYN+FIN together"), + tcpRstAndSyn: telemetry.NewCounter(ebpflessModuleName, "tcp_rst_and_syn", nil, "Counter measuring packets encountered with RST+SYN together"), + tcpRstAndFin: telemetry.NewCounter(ebpflessModuleName, "tcp_rst_and_fin", nil, "Counter measuring packets encountered with RST+FIN together"), } const tcpSeqMidpoint = 0x80000000 diff --git a/pkg/network/tracer/connection/ebpfless_tracer.go b/pkg/network/tracer/connection/ebpfless_tracer.go index e4e661c2782a3..88c744239fd39 100644 --- a/pkg/network/tracer/connection/ebpfless_tracer.go +++ b/pkg/network/tracer/connection/ebpfless_tracer.go @@ -40,9 +40,11 @@ const ( var ( ebpfLessTracerTelemetry = struct { - skippedPackets telemetry.Counter + skippedPackets telemetry.Counter + droppedConnections telemetry.Counter }{ telemetry.NewCounter(ebpfLessTelemetryPrefix, "skipped_packets", []string{"reason"}, "Counter measuring skipped packets"), + telemetry.NewCounter(ebpfLessTelemetryPrefix, "dropped_connections", nil, "Counter measuring dropped connections"), } ) @@ -81,7 +83,7 @@ func newEbpfLessTracer(cfg *config.Config) (*ebpfLessTracer, error) { exit: make(chan struct{}), scratchConn: &network.ConnectionStats{}, udp: &udpProcessor{}, - tcp: ebpfless.NewTCPProcessor(), + tcp: ebpfless.NewTCPProcessor(cfg), conns: make(map[network.ConnectionTuple]*network.ConnectionStats, cfg.MaxTrackedConnections), boundPorts: ebpfless.NewBoundPorts(cfg), cookieHasher: newCookieHasher(), @@ -96,7 +98,7 @@ func newEbpfLessTracer(cfg *config.Config) (*ebpfLessTracer, error) { } // Start begins collecting network connection data. -func (t *ebpfLessTracer) Start(_ func(*network.ConnectionStats)) error { +func (t *ebpfLessTracer) Start(closeCallback func(*network.ConnectionStats)) error { if err := t.boundPorts.Start(); err != nil { return fmt.Errorf("could not update bound ports: %w", err) } @@ -123,7 +125,7 @@ func (t *ebpfLessTracer) Start(_ func(*network.ConnectionStats)) error { return nil } - if err := t.processConnection(pktType, &ip4, &ip6, &udp, &tcp, decoded); err != nil { + if err := t.processConnection(pktType, &ip4, &ip6, &udp, &tcp, decoded, closeCallback); err != nil { log.Warnf("could not process packet: %s", err) } @@ -147,8 +149,8 @@ func (t *ebpfLessTracer) processConnection( udp *layers.UDP, tcp *layers.TCP, decoded []gopacket.LayerType, + closeCallback func(*network.ConnectionStats), ) error { - t.scratchConn.Source, t.scratchConn.Dest = util.Address{}, util.Address{} t.scratchConn.SPort, t.scratchConn.DPort = 0, 0 t.scratchConn.TCPFailures = make(map[uint16]uint32) @@ -204,21 +206,25 @@ func (t *ebpfLessTracer) processConnection( if ts, err = ddebpf.NowNanoseconds(); err != nil { return fmt.Errorf("error getting last updated timestamp for connection: %w", err) } + conn.LastUpdateEpoch = uint64(ts) if !ip4Present && !ip6Present { return nil } + + var result ebpfless.ProcessResult switch conn.Type { case network.UDP: if (ip4Present && !t.config.CollectUDPv4Conns) || (ip6Present && !t.config.CollectUDPv6Conns) { return nil } + result = ebpfless.ProcessResultStoreConn err = t.udp.process(conn, pktType, udp) case network.TCP: if (ip4Present && !t.config.CollectTCPv4Conns) || (ip6Present && !t.config.CollectTCPv6Conns) { return nil } - err = t.tcp.Process(conn, uint64(ts), pktType, ip4, ip6, tcp) + result, err = t.tcp.Process(conn, uint64(ts), pktType, ip4, ip6, tcp) default: err = fmt.Errorf("unsupported connection type %d", conn.Type) } @@ -227,15 +233,30 @@ func (t *ebpfLessTracer) processConnection( return fmt.Errorf("error processing connection: %w", err) } - // TODO probably remove HasConnEverEstablished once we handle closed connections properly - if conn.Type == network.UDP || (conn.Type == network.TCP && t.tcp.HasConnEverEstablished(conn)) { - conn.LastUpdateEpoch = uint64(ts) - t.conns[t.scratchConn.ConnectionTuple] = conn - } - log.TraceFunc(func() string { return fmt.Sprintf("connection: %s", conn) }) + + switch result { + case ebpfless.ProcessResultNone: + case ebpfless.ProcessResultStoreConn: + maxTrackedConns := int(t.config.MaxTrackedConnections) + ok := ebpfless.WriteMapWithSizeLimit(t.conns, conn.ConnectionTuple, conn, maxTrackedConns) + if !ok { + // we don't have enough space to add this connection, remove its TCP state tracking + if conn.Type == network.TCP { + t.tcp.RemoveConn(conn.ConnectionTuple) + } + ebpfLessTracerTelemetry.droppedConnections.Inc() + } + case ebpfless.ProcessResultCloseConn: + delete(t.conns, conn.ConnectionTuple) + closeCallback(conn) + case ebpfless.ProcessResultMapFull: + delete(t.conns, conn.ConnectionTuple) + ebpfLessTracerTelemetry.droppedConnections.Inc() + } + return nil } @@ -310,6 +331,9 @@ func (t *ebpfLessTracer) Remove(conn *network.ConnectionStats) error { defer t.m.Unlock() delete(t.conns, conn.ConnectionTuple) + if conn.Type == network.TCP { + t.tcp.RemoveConn(conn.ConnectionTuple) + } return nil } From 51ec10ca20b382377f93528aa913a7028cd2b67a Mon Sep 17 00:00:00 2001 From: Stuart Geipel Date: Mon, 16 Dec 2024 22:05:06 -0500 Subject: [PATCH 247/303] [ebpfless] Add 5 second expiry to pending connections (#32187) --- .../connection/ebpfless/tcp_processor.go | 26 ++++++++++++++++ .../connection/ebpfless/tcp_processor_test.go | 23 ++++++++++++++ .../tracer/connection/ebpfless/tcp_utils.go | 2 ++ .../tracer/connection/ebpfless_tracer.go | 31 ++++++++++++++++--- 4 files changed, 77 insertions(+), 5 deletions(-) diff --git a/pkg/network/tracer/connection/ebpfless/tcp_processor.go b/pkg/network/tracer/connection/ebpfless/tcp_processor.go index c83a5430b96f1..73ea6a1152aa3 100644 --- a/pkg/network/tracer/connection/ebpfless/tcp_processor.go +++ b/pkg/network/tracer/connection/ebpfless/tcp_processor.go @@ -54,6 +54,13 @@ type connectionState struct { // rttTracker is used to track round trip times rttTracker rttTracker + + // lastUpdateEpoch contains the last timestamp this connection sent/received a packet + // TODO find a way to combine this with ConnectionStats.lastUpdateEpoch + // This exists because connections in pendingConns don't have a ConnectionStats object yet. + // Can we make all connections in TCPProcessor have a ConnectionStats no matter what, and + // filter them out in GetConnections? + lastUpdateEpoch uint64 } func (st *connectionState) hasMissedHandshake() bool { @@ -71,6 +78,7 @@ type TCPProcessor struct { // TODO make this into a config value const maxPendingConns = 4096 +const pendingConnTimeoutNs = uint64(5 * time.Second) // NewTCPProcessor constructs an empty TCPProcessor func NewTCPProcessor(cfg *config.Config) *TCPProcessor { @@ -155,6 +163,7 @@ func (t *TCPProcessor) updateSynFlag(conn *network.ConnectionStats, st *connecti func (t *TCPProcessor) updateTCPStats(conn *network.ConnectionStats, st *connectionState, pktType uint8, tcp *layers.TCP, payloadLen uint16, timestampNs uint64) { nextSeq := calcNextSeq(tcp, payloadLen) + st.lastUpdateEpoch = timestampNs if pktType == unix.PACKET_OUTGOING { conn.Monotonic.SentPackets++ // packetCanRetransmit filters out packets that look like retransmits but aren't, like TCP keepalives @@ -339,3 +348,20 @@ func (t *TCPProcessor) moveConn(tuple network.ConnectionTuple, st *connectionSta } return true } + +// CleanupExpiredPendingConns iterates through pendingConns and removes those that +// have existed too long - in normal TCP, they should become established right away. +// +// This is only required for pendingConns because the tracer already has logic to remove +// established connections (connections that have ConnectionStats) +func (t *TCPProcessor) CleanupExpiredPendingConns(timestampNs uint64) { + for tuple, st := range t.pendingConns { + timeoutTime := st.lastUpdateEpoch + pendingConnTimeoutNs + + if timeoutTime <= timestampNs { + delete(t.pendingConns, tuple) + + statsTelemetry.expiredPendingConns.Inc() + } + } +} diff --git a/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go b/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go index dea6090eb121d..b7d525bce1531 100644 --- a/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go +++ b/pkg/network/tracer/connection/ebpfless/tcp_processor_test.go @@ -12,6 +12,7 @@ import ( "net" "syscall" "testing" + "time" "golang.org/x/sys/unix" @@ -792,3 +793,25 @@ func TestPreexistingConn(t *testing.T) { } require.Equal(t, expectedStats, f.conn.Monotonic) } + +func TestPendingConnExpiry(t *testing.T) { + now := uint64(time.Now().UnixNano()) + + pb := newPacketBuilder(lowerSeq, higherSeq) + pkt := pb.outgoing(0, 0, 0, SYN) + pkt.timestampNs = now + + f := newTCPTestFixture(t) + + f.runPkt(pkt) + require.Len(t, f.tcp.pendingConns, 1) + + // if no time has passed, should not remove the connection + f.tcp.CleanupExpiredPendingConns(now) + require.Len(t, f.tcp.pendingConns, 1) + + // if too much time has passed, should remove the connection + tenSecNs := uint64((10 * time.Second).Nanoseconds()) + f.tcp.CleanupExpiredPendingConns(now + tenSecNs) + require.Empty(t, f.tcp.pendingConns) +} diff --git a/pkg/network/tracer/connection/ebpfless/tcp_utils.go b/pkg/network/tracer/connection/ebpfless/tcp_utils.go index 4abe627a995d5..7a30737e734ae 100644 --- a/pkg/network/tracer/connection/ebpfless/tcp_utils.go +++ b/pkg/network/tracer/connection/ebpfless/tcp_utils.go @@ -40,6 +40,7 @@ const ( ) var statsTelemetry = struct { + expiredPendingConns telemetry.Counter droppedPendingConns telemetry.Counter droppedEstablishedConns telemetry.Counter missedTCPHandshakes telemetry.Counter @@ -48,6 +49,7 @@ var statsTelemetry = struct { tcpRstAndSyn telemetry.Counter tcpRstAndFin telemetry.Counter }{ + expiredPendingConns: telemetry.NewCounter(ebpflessModuleName, "expired_pending_conns", nil, "Counter measuring the number of TCP connections which expired because it took too long to complete the handshake"), droppedPendingConns: telemetry.NewCounter(ebpflessModuleName, "dropped_pending_conns", nil, "Counter measuring the number of TCP connections which were dropped during the handshake (because the map was full)"), droppedEstablishedConns: telemetry.NewCounter(ebpflessModuleName, "dropped_established_conns", nil, "Counter measuring the number of TCP connections which were dropped while established (because the map was full)"), missedTCPHandshakes: telemetry.NewCounter(ebpflessModuleName, "missed_tcp_handshakes", nil, "Counter measuring the number of TCP connections where we missed the SYN handshake"), diff --git a/pkg/network/tracer/connection/ebpfless_tracer.go b/pkg/network/tracer/connection/ebpfless_tracer.go index 88c744239fd39..3eb5a03344b2a 100644 --- a/pkg/network/tracer/connection/ebpfless_tracer.go +++ b/pkg/network/tracer/connection/ebpfless_tracer.go @@ -303,6 +303,12 @@ func (t *ebpfLessTracer) GetConnections(buffer *network.ConnectionBuffer, filter t.m.Lock() defer t.m.Unlock() + // use GetConnections to periodically cleanup pending connections + err := t.cleanupPendingConns() + if err != nil { + return err + } + if len(t.conns) == 0 { return nil } @@ -321,20 +327,35 @@ func (t *ebpfLessTracer) GetConnections(buffer *network.ConnectionBuffer, filter return nil } +// cleanupPendingConns removes pending connections from the TCP tracer. +// For more information, refer to CleanupExpiredPendingConns +func (t *ebpfLessTracer) cleanupPendingConns() error { + ts, err := ddebpf.NowNanoseconds() + if err != nil { + return fmt.Errorf("error getting last updated timestamp for connection: %w", err) + } + t.tcp.CleanupExpiredPendingConns(uint64(ts)) + return nil +} + // FlushPending forces any closed connections waiting for batching to be processed immediately. func (t *ebpfLessTracer) FlushPending() {} +func (t *ebpfLessTracer) remove(conn *network.ConnectionStats) error { + delete(t.conns, conn.ConnectionTuple) + if conn.Type == network.TCP { + t.tcp.RemoveConn(conn.ConnectionTuple) + } + return nil +} + // Remove deletes the connection from tracking state. // It does not prevent the connection from re-appearing later, if additional traffic occurs. func (t *ebpfLessTracer) Remove(conn *network.ConnectionStats) error { t.m.Lock() defer t.m.Unlock() - delete(t.conns, conn.ConnectionTuple) - if conn.Type == network.TCP { - t.tcp.RemoveConn(conn.ConnectionTuple) - } - return nil + return t.remove(conn) } // GetMap returns the underlying named map. This is useful if any maps are shared with other eBPF components. From 6a7a2be4e760b1bbf5918648649f18f99a916fee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Tue, 17 Dec 2024 08:44:20 +0100 Subject: [PATCH 248/303] omnibus: python: don't attempt to substitute an unset value (#32230) --- omnibus/config/software/python3.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/omnibus/config/software/python3.rb b/omnibus/config/software/python3.rb index 7f8fd8e8f4219..6e5636064bad2 100644 --- a/omnibus/config/software/python3.rb +++ b/omnibus/config/software/python3.rb @@ -54,10 +54,12 @@ # Don't forward CC and CXX to python extensions Makefile, it's quite unlikely that any non default # compiler we use would end up being available in the system/docker image used by customers - if linux_target? + if linux_target? && ENV["CC"] command "sed -i \"s/^CC=[[:space:]]*${CC}/CC=gcc/\" #{install_dir}/embedded/lib/python#{major}.#{minor}/config-3.12-*-linux-gnu/Makefile", :env => env - command "sed -i \"s/^CXX=[[:space:]]*${CXX}/CC=g++/\" #{install_dir}/embedded/lib/python#{major}.#{minor}/config-3.12-*-linux-gnu/Makefile", :env => env command "sed -i \"s/${CC}/gcc/g\" #{install_dir}/embedded/lib/python#{major}.#{minor}/_sysconfigdata__linux_*-linux-gnu.py", :env => env + end + if linux_target? && ENV["CXX"] + command "sed -i \"s/^CXX=[[:space:]]*${CXX}/CC=g++/\" #{install_dir}/embedded/lib/python#{major}.#{minor}/config-3.12-*-linux-gnu/Makefile", :env => env command "sed -i \"s/${CXX}/g++/g\" #{install_dir}/embedded/lib/python#{major}.#{minor}/_sysconfigdata__linux_*-linux-gnu.py", :env => env end delete "#{install_dir}/embedded/lib/python#{major}.#{minor}/test" From 219e2f0bb6e88a678c0e7e4debfdb88137b8f7bb Mon Sep 17 00:00:00 2001 From: Vincent Whitchurch Date: Tue, 17 Dec 2024 10:06:52 +0100 Subject: [PATCH 249/303] discovery: e2e: Avoid fail on temporary network errors (#32215) --- test/new-e2e/tests/discovery/linux_test.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/test/new-e2e/tests/discovery/linux_test.go b/test/new-e2e/tests/discovery/linux_test.go index ec7d0aa339be3..0df272712dedd 100644 --- a/test/new-e2e/tests/discovery/linux_test.go +++ b/test/new-e2e/tests/discovery/linux_test.go @@ -170,7 +170,19 @@ func assertRunningCheck(t *assert.CollectT, remoteHost *components.RemoteHost, c func (s *linuxTestSuite) provisionServer() { err := s.Env().RemoteHost.CopyFolder("testdata/provision", "/home/ubuntu/e2e-test") require.NoError(s.T(), err) - s.Env().RemoteHost.MustExecute("sudo bash /home/ubuntu/e2e-test/provision.sh") + + cmd := "sudo bash /home/ubuntu/e2e-test/provision.sh" + _, err = s.Env().RemoteHost.Execute(cmd) + if err != nil { + // Sometimes temporary network errors are seen which cause the provision + // script to fail. + s.T().Log("Retrying provision due to failure", err) + time.Sleep(30 * time.Second) + _, err := s.Env().RemoteHost.Execute(cmd) + if err != nil { + s.T().Skip("Unable to provision server") + } + } } func (s *linuxTestSuite) startServices() { From 89985fb58f415ee49a88a63c3c4cf3d8c6684926 Mon Sep 17 00:00:00 2001 From: "agent-platform-auto-pr[bot]" <153269286+agent-platform-auto-pr[bot]@users.noreply.github.com> Date: Tue, 17 Dec 2024 09:08:23 +0000 Subject: [PATCH 250/303] [Backport main] Changelog update for 7.60.0 (#32202) Co-authored-by: chouquette --- CHANGELOG-DCA.rst | 27 ++++++++++ CHANGELOG.rst | 132 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+) diff --git a/CHANGELOG-DCA.rst b/CHANGELOG-DCA.rst index 5ed8fdc3430f3..569bda03c6a0d 100644 --- a/CHANGELOG-DCA.rst +++ b/CHANGELOG-DCA.rst @@ -2,6 +2,33 @@ Release Notes ============= +.. _Release Notes_7.60.0: + +7.60.0 +====== + +.. _Release Notes_7.60.0_Prelude: + +Prelude +------- + +Released on: 2024-12-16 +Pinned to datadog-agent v7.60.0: `CHANGELOG `_. + + +.. _Release Notes_7.60.0_Bug Fixes: + +Bug Fixes +--------- + +- Fixes bug where incorrect timestamp would be used for unbundled Kubernetes events. + +- Fixed an issue in the KSM check when it's configured with the option + ``pod_collection_mode`` set to ``node_kubelet``. Previously, the check could + fail to start if there was a timeout while contacting the API server. This + issue has now been resolved. + + .. _Release Notes_7.59.1: 7.59.1 diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 9dcb70ac5e1e1..ba9f97c930ee8 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -2,6 +2,138 @@ Release Notes ============= +.. _Release Notes_7.60.0: + +7.60.0 +====== + +.. _Release Notes_7.60.0_Prelude: + +Prelude +------- + +Release on: 2024-12-16 + +- Please refer to the `7.60.0 tag on integrations-core `_ for the list of changes on the Core Checks + + +.. _Release Notes_7.60.0_Upgrade Notes: + +Upgrade Notes +------------- + +- * Parameter ``peer_tags_aggregation`` (a.k.a. environment variable ``DD_APM_PEER_TAGS_AGGREGATION``) is now enabled by default. This means that aggregation of peer related tags (e.g., `peer.service`, `db.instance`, etc.) now happens in the Agent, which enables statistics for Inferred Entities. If you want to disable this feature, set `peer_tags_aggregation` to `false` in your Agent configuration. + + * Parameter ``compute_stats_by_span_kind`` (a.k.a. environment variable ``DD_APM_COMPUTE_STATS_BY_SPAN_KIND``) is now enabled by default. This means spans with an eligible `span.kind` will have stats computed. If disabled, only top-level and measured spans will have stats computed. If you want to disable this feature, set `compute_stats_by_span_kind` to `false` in your Agent configuration. + + Note: When using ``peer_tags_aggregation`` and ``compute_stats_by_span_kind``, a high cardinality of peer tags or APM resources can contribute to higher CPU and memory consumption. If enabling both causes the Agent to consume too many resources, try disabling `compute_stats_by_span_kind` first. + + It is recommended that you update your tracing libraries according to the instructions `here `_ and set ``DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED`` (or ``dd.trace.remove.integration-service-names.enabled``) to ``true``. + +- Upgraded JMXFetch to `0.49.5 `_ which adds support for ``UnloadedClassCount`` metric + and IBM J9 gc metrics. See `0.49.5 `_ for more details. + + +.. _Release Notes_7.60.0_New Features: + +New Features +------------ + +- `Inferred Service dependencies `_ are now Generally Available (exiting Beta) and enabled by default. Inferred Services of all kinds now have trace metrics and are available in dependency maps. `apm_config.peer_tags_aggregation` and `apm_config.compute_stats_by_span_kind` both now default to `true` unless explicitly set to `false`. + +- Add `check_tag_cardinality` parameter config check. + + By default `check_tag_cardinality` is not set which doesn't change the behavior of the checks. + Once it is set in pod annotaions, it overrides the cardinality value provided in the base agent configuration. + Example of usage: + ```yaml + ad.datadoghq.com/redis.checks: | + { + "redisdb": { + "check_tag_cardinality": "high", + "instances": [ + { + "host": "%%host%%", + "port": "6379" + } + ] + } + } + ``` + +- Added a new feature flag `enable_receive_resource_spans_v2` in DD_APM_FEATURES that gates a refactored implementation of ReceiveResourceSpans for OTLP. + + +.. _Release Notes_7.60.0_Enhancement Notes: + +Enhancement Notes +----------------- + +- Added information about where the Agent sourced BTF data for eBPF to the Agent flare. When applicable, this will appear in ``system-probe/ebpf_btf_loader.log``. + +- The Agent flare now returns NAT debug information from conntrack in the ``system-probe`` directory. + +- The ``flare`` subcommand includes a ``--provider-timeout`` option to set a timeout for each file collection (default is 10s), useful for unblocking slow flare creation. + +- This change reduces the number of DNS queries made by Network Traffic + based paths in Network Path. + A cache of reverse DNS lookups is used to reduce the number of DNS + queries. Additionally, reverse DNS lookups are now performed only + for private IPs and not for public IPs. + +- Agent flare now includes system-probe telemetry data via ``system-probe/system_probe_telemetry.log``. + +- The MSI installer uses 7zr.exe to decompress the embedded Python. + +- On Windows, the endpoint /windows_crash_detection/check has been modified to report crashes in + an asynchronous manner, to allow processing of large crash dumps without blocking or timing out. + The first check will return a busy status and continue to do so until the processing is completed. + + +.. _Release Notes_7.60.0_Deprecation Notes: + +Deprecation Notes +----------------- + +- Prebuilt eBPF for the network tracer system-probe module has been + deprecated in favor of CO-RE and runtime compilation variants on Linux + kernel versions 6+ and RHEL kernel versions 5.14+. To continue to use + the prebuilt eBPF network tracer, set + `system_probe_config.allow_prebuilt_fallback` in the + system-probe config file, or set the environment variable + `DD_ALLOW_PREBUILT_FALLBACK`, to `true` on these platforms. + +- The feature flag `service_monitoring_config.enable_http_stats_by_status_code` was deprecated and removed. + No impact on USM's behavior. + + +.. _Release Notes_7.60.0_Bug Fixes: + +Bug Fixes +--------- + +- Fixes an issue added in 7.50 that causes the Windows event log tailer to drop + events if it cannot open their publisher metadata. + +- Fix a bug in the config parser that broke ignored_ip_addresses from working in NDM Autodiscovery. + +- Fixes host tags with a configurable duration so the metric's context hash doesn't change, preventing the aggregator from mistaking it as a new metric. + +- Fix `could not parse voltage fields` error in Nvidia Jetson integration when tegrastats output contains mW units. + +- Fix building of Python extension containing native code. + +- [oracle] Fix broken activity sampling with an external Oracle client. + +- Fix nil pointer error on Oracle DBM query when the check's connection is lost before SELECT statement executes. + +- Fix a regression that caused the Agent to not be able to run if its + capabilities had been modified with the `setcap` command. + +- Fix bug wherein single line truncated logs ended with whitespace characters were not being tagged as truncated. + Fix issue with the truncation message occasionally causing subsequent logs to think they were truncated when they were not (single line logs only). + + .. _Release Notes_7.59.1: 7.59.1 From fb6bdd392ef5ac747c00e5a61404f2a6e8d777ef Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Tue, 17 Dec 2024 10:28:17 +0100 Subject: [PATCH 251/303] pkg/sbom: force disable the license file analyzer (#32184) --- LICENSE-3rdparty.csv | 2 -- go.mod | 3 +-- go.sum | 7 ++----- pkg/util/trivy/trivy.go | 8 +++----- 4 files changed, 6 insertions(+), 14 deletions(-) diff --git a/LICENSE-3rdparty.csv b/LICENSE-3rdparty.csv index 502d348bb5ab9..92e5c072e3c8e 100644 --- a/LICENSE-3rdparty.csv +++ b/LICENSE-3rdparty.csv @@ -1209,8 +1209,6 @@ core,github.com/google/gopacket/afpacket,BSD-3-Clause,"Copyright (c) 2009-2011 A core,github.com/google/gopacket/layers,BSD-3-Clause,"Copyright (c) 2009-2011 Andreas Krennmair. All rights reserved. | Copyright (c) 2012 Google, Inc. All rights reserved." core,github.com/google/gopacket/pcap,BSD-3-Clause,"Copyright (c) 2009-2011 Andreas Krennmair. All rights reserved. | Copyright (c) 2012 Google, Inc. All rights reserved." core,github.com/google/gopacket/pcapgo,BSD-3-Clause,"Copyright (c) 2009-2011 Andreas Krennmair. All rights reserved. | Copyright (c) 2012 Google, Inc. All rights reserved." -core,github.com/google/licenseclassifier/v2,Apache-2.0,Copyright 2017 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. -core,github.com/google/licenseclassifier/v2/assets,Apache-2.0,Copyright 2017 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. core,github.com/google/pprof/profile,Apache-2.0,Andrew Hunter | Google Inc. | Hyoun Kyu Cho | Martin Spier | Raul Silvera | Taco de Wolff | Tipp Moseley core,github.com/google/s2a-go,Apache-2.0,Copyright (c) 2020 Google core,github.com/google/s2a-go/fallback,Apache-2.0,Copyright (c) 2020 Google diff --git a/go.mod b/go.mod index 9f95055c7d7b6..e44ee3eddac45 100644 --- a/go.mod +++ b/go.mod @@ -425,7 +425,6 @@ require ( github.com/godbus/dbus/v5 v5.1.0 github.com/golang/glog v1.2.2 // indirect github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect - github.com/google/licenseclassifier/v2 v2.0.0 // indirect github.com/google/uuid v1.6.0 github.com/google/wire v0.6.0 // indirect github.com/googleapis/gax-go/v2 v2.13.0 // indirect @@ -1061,7 +1060,7 @@ replace github.com/vishvananda/netlink => github.com/DataDog/netlink v1.0.1-0.20 // Pull in replacements needed by upstream Trivy replace ( // Maps to Trivy fork https://github.com/DataDog/trivy/commits/use-fs-main-dd/ - github.com/aquasecurity/trivy => github.com/DataDog/trivy v0.0.0-20241126101205-8517f9b946f4 + github.com/aquasecurity/trivy => github.com/DataDog/trivy v0.0.0-20241216135157-95e0e96002ee github.com/saracen/walker => github.com/DataDog/walker v0.0.0-20230418153152-7f29bb2dc950 // testcontainers-go has a bug with versions v0.25.0 and v0.26.0 // ref: https://github.com/testcontainers/testcontainers-go/issues/1782 diff --git a/go.sum b/go.sum index 038a1a011d963..44b70bde70c36 100644 --- a/go.sum +++ b/go.sum @@ -174,8 +174,8 @@ github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0 h1:63SzQz9Ab8XJ github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.22.0/go.mod h1:E/PY/aQ6S/N5hBPHXZRGmovs5b1BSi4RHGNcB4yP/Z0= github.com/DataDog/sketches-go v1.4.6 h1:acd5fb+QdUzGrosfNLwrIhqyrbMORpvBy7mE+vHlT3I= github.com/DataDog/sketches-go v1.4.6/go.mod h1:7Y8GN8Jf66DLyDhc94zuWA3uHEt/7ttt8jHOBWWrSOg= -github.com/DataDog/trivy v0.0.0-20241126101205-8517f9b946f4 h1:UVL5oU/8o0JhEv8Js6qxJgiqeV+PzPw/aldojyexS/U= -github.com/DataDog/trivy v0.0.0-20241126101205-8517f9b946f4/go.mod h1:hLiUAm3v175M5jWbq34TdGmX6mvHIJY7FMuZ3wBugtw= +github.com/DataDog/trivy v0.0.0-20241216135157-95e0e96002ee h1:taj22FDHhWs9QkVJypOYMhdgJTnTb5y4SHiW7YcJJms= +github.com/DataDog/trivy v0.0.0-20241216135157-95e0e96002ee/go.mod h1:hv4bqUzcHXSfVft8E9DUlu9d+szHrxYSh+WykZU70Dk= github.com/DataDog/viper v1.14.0 h1:dIjTe/uJiah+QFqFZ+MXeqgmUvWhg37l37ZxFWxr3is= github.com/DataDog/viper v1.14.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/DataDog/walker v0.0.0-20230418153152-7f29bb2dc950 h1:2imDajw3V85w1iqHsuXN+hUBZQVF+r9eME8tsPq/HpA= @@ -842,8 +842,6 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/licenseclassifier/v2 v2.0.0 h1:1Y57HHILNf4m0ABuMVb6xk4vAJYEUO0gDxNpog0pyeA= -github.com/google/licenseclassifier/v2 v2.0.0/go.mod h1:cOjbdH0kyC9R22sdQbYsFkto4NGCAc+ZSwbeThazEtM= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -1606,7 +1604,6 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUt github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbmfHkLguCE9laoZCUzEEpIZXA= github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shibumi/go-pathspec v1.3.0 h1:QUyMZhFo0Md5B8zV8x2tesohbb5kfbpTi9rBnKh5dkI= diff --git a/pkg/util/trivy/trivy.go b/pkg/util/trivy/trivy.go index e78690f98ab6b..63163ff3ae307 100644 --- a/pkg/util/trivy/trivy.go +++ b/pkg/util/trivy/trivy.go @@ -56,7 +56,6 @@ const ( LanguagesAnalyzers = "languages" // LanguagesAnalyzers defines a language analyzer SecretAnalyzers = "secret" // SecretAnalyzers defines a secret analyzer ConfigFileAnalyzers = "config" // ConfigFileAnalyzers defines a configuration file analyzer - LicenseAnalyzers = "license" // LicenseAnalyzers defines a license analyzer TypeApkCommand = "apk-command" // TypeApkCommand defines a apk-command analyzer HistoryDockerfile = "history-dockerfile" // HistoryDockerfile defines a history-dockerfile analyzer TypeImageConfigSecret = "image-config-secret" // TypeImageConfigSecret defines a history-dockerfile analyzer @@ -149,9 +148,6 @@ func DefaultDisabledCollectors(enabledAnalyzers []string) []analyzer.Type { if analyzersDisabled(ConfigFileAnalyzers) { disabledAnalyzers = append(disabledAnalyzers, analyzer.TypeConfigFiles...) } - if analyzersDisabled(LicenseAnalyzers) { - disabledAnalyzers = append(disabledAnalyzers, analyzer.TypeLicenseFile) - } if analyzersDisabled(TypeApkCommand) { disabledAnalyzers = append(disabledAnalyzers, analyzer.TypeApkCommand) } @@ -166,7 +162,9 @@ func DefaultDisabledCollectors(enabledAnalyzers []string) []analyzer.Type { analyzer.TypeRedHatContentManifestType, analyzer.TypeRedHatDockerfileType, analyzer.TypeSBOM, - analyzer.TypeUbuntuESM) + analyzer.TypeUbuntuESM, + analyzer.TypeLicenseFile, + ) return disabledAnalyzers } From 49e0feffd2c5b12d7dad55c0c297f0942a147f5a Mon Sep 17 00:00:00 2001 From: Alex Lopez Date: Tue, 17 Dec 2024 11:06:43 +0100 Subject: [PATCH 252/303] Revert "[ASCII-2586] Migrating SecurityAgent to use IPC cert" (#32278) --- cmd/security-agent/api/server.go | 48 +++++++++++++++---- cmd/security-agent/main_windows.go | 6 +-- .../subcommands/start/command.go | 9 ++-- 3 files changed, 44 insertions(+), 19 deletions(-) diff --git a/cmd/security-agent/api/server.go b/cmd/security-agent/api/server.go index 33c8ac033f55a..e776628e5ccd4 100644 --- a/cmd/security-agent/api/server.go +++ b/cmd/security-agent/api/server.go @@ -12,6 +12,9 @@ package api import ( "crypto/tls" + "crypto/x509" + "encoding/pem" + "fmt" stdLog "log" "net" "net/http" @@ -20,10 +23,10 @@ import ( "github.com/gorilla/mux" "github.com/DataDog/datadog-agent/cmd/security-agent/api/agent" - "github.com/DataDog/datadog-agent/comp/api/authtoken" "github.com/DataDog/datadog-agent/comp/core/settings" "github.com/DataDog/datadog-agent/comp/core/status" workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" + "github.com/DataDog/datadog-agent/pkg/api/security" "github.com/DataDog/datadog-agent/pkg/api/util" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -32,21 +35,19 @@ import ( // Server implements security agent API server type Server struct { - listener net.Listener - agent *agent.Agent - tlsConfig *tls.Config + listener net.Listener + agent *agent.Agent } // NewServer creates a new Server instance -func NewServer(statusComponent status.Component, settings settings.Component, wmeta workloadmeta.Component, at authtoken.Component) (*Server, error) { +func NewServer(statusComponent status.Component, settings settings.Component, wmeta workloadmeta.Component) (*Server, error) { listener, err := newListener() if err != nil { return nil, err } return &Server{ - listener: listener, - agent: agent.NewAgent(statusComponent, settings, wmeta), - tlsConfig: at.GetTLSClientConfig(), + listener: listener, + agent: agent.NewAgent(statusComponent, settings, wmeta), }, nil } @@ -61,16 +62,43 @@ func (s *Server) Start() error { // Validate token for every request r.Use(validateToken) + err := util.CreateAndSetAuthToken(pkgconfigsetup.Datadog()) + if err != nil { + return err + } + + hosts := []string{"127.0.0.1", "localhost"} + _, rootCertPEM, rootKey, err := security.GenerateRootCert(hosts, 2048) + if err != nil { + return fmt.Errorf("unable to start TLS server") + } + + // PEM encode the private key + rootKeyPEM := pem.EncodeToMemory(&pem.Block{ + Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(rootKey), + }) + + // Create a TLS cert using the private key and certificate + rootTLSCert, err := tls.X509KeyPair(rootCertPEM, rootKeyPEM) + if err != nil { + return fmt.Errorf("invalid key pair: %v", err) + } + + tlsConfig := tls.Config{ + Certificates: []tls.Certificate{rootTLSCert}, + MinVersion: tls.VersionTLS13, + } + // Use a stack depth of 4 on top of the default one to get a relevant filename in the stdlib logWriter, _ := pkglogsetup.NewLogWriter(4, log.ErrorLvl) srv := &http.Server{ Handler: r, ErrorLog: stdLog.New(logWriter, "Error from the agent http API server: ", 0), // log errors to seelog, - TLSConfig: s.tlsConfig, + TLSConfig: &tlsConfig, WriteTimeout: pkgconfigsetup.Datadog().GetDuration("server_timeout") * time.Second, } - tlsListener := tls.NewListener(s.listener, s.tlsConfig) + tlsListener := tls.NewListener(s.listener, &tlsConfig) go srv.Serve(tlsListener) //nolint:errcheck return nil diff --git a/cmd/security-agent/main_windows.go b/cmd/security-agent/main_windows.go index a729e7a2003f0..b81223e6aebc1 100644 --- a/cmd/security-agent/main_windows.go +++ b/cmd/security-agent/main_windows.go @@ -25,7 +25,6 @@ import ( "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/start" "github.com/DataDog/datadog-agent/comp/agent/autoexit" "github.com/DataDog/datadog-agent/comp/agent/autoexit/autoexitimpl" - "github.com/DataDog/datadog-agent/comp/api/authtoken" "github.com/DataDog/datadog-agent/comp/api/authtoken/fetchonlyimpl" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" @@ -92,11 +91,10 @@ func (s *service) Run(svcctx context.Context) error { params := &cliParams{} err := fxutil.OneShot( func(log log.Component, config config.Component, _ secrets.Component, _ statsd.Component, _ sysprobeconfig.Component, - telemetry telemetry.Component, _ workloadmeta.Component, _ *cliParams, statusComponent status.Component, _ autoexit.Component, - settings settings.Component, wmeta workloadmeta.Component, at authtoken.Component) error { + telemetry telemetry.Component, _ workloadmeta.Component, _ *cliParams, statusComponent status.Component, _ autoexit.Component, settings settings.Component, wmeta workloadmeta.Component) error { defer start.StopAgent(log) - err := start.RunAgent(log, config, telemetry, statusComponent, settings, wmeta, at) + err := start.RunAgent(log, config, telemetry, statusComponent, settings, wmeta) if err != nil { if errors.Is(err, start.ErrAllComponentsDisabled) { // If all components are disabled, we should exit cleanly diff --git a/cmd/security-agent/subcommands/start/command.go b/cmd/security-agent/subcommands/start/command.go index 2a3dd883dcd84..12a93fc4560ff 100644 --- a/cmd/security-agent/subcommands/start/command.go +++ b/cmd/security-agent/subcommands/start/command.go @@ -29,7 +29,6 @@ import ( "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/runtime" "github.com/DataDog/datadog-agent/comp/agent/autoexit" "github.com/DataDog/datadog-agent/comp/agent/autoexit/autoexitimpl" - "github.com/DataDog/datadog-agent/comp/api/authtoken" "github.com/DataDog/datadog-agent/comp/api/authtoken/fetchonlyimpl" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" @@ -202,10 +201,10 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { // TODO(components): note how workloadmeta is passed anonymously, it is still required as it is used // as a global. This should eventually be fixed and all workloadmeta interactions should be via the // injected instance. -func start(log log.Component, config config.Component, _ secrets.Component, _ statsd.Component, _ sysprobeconfig.Component, telemetry telemetry.Component, statusComponent status.Component, _ pid.Component, _ autoexit.Component, settings settings.Component, wmeta workloadmeta.Component, at authtoken.Component) error { +func start(log log.Component, config config.Component, _ secrets.Component, _ statsd.Component, _ sysprobeconfig.Component, telemetry telemetry.Component, statusComponent status.Component, _ pid.Component, _ autoexit.Component, settings settings.Component, wmeta workloadmeta.Component) error { defer StopAgent(log) - err := RunAgent(log, config, telemetry, statusComponent, settings, wmeta, at) + err := RunAgent(log, config, telemetry, statusComponent, settings, wmeta) if errors.Is(err, ErrAllComponentsDisabled) || errors.Is(err, errNoAPIKeyConfigured) { return nil } @@ -257,7 +256,7 @@ var ErrAllComponentsDisabled = errors.New("all security-agent component are disa var errNoAPIKeyConfigured = errors.New("no API key configured") // RunAgent initialized resources and starts API server -func RunAgent(log log.Component, config config.Component, telemetry telemetry.Component, statusComponent status.Component, settings settings.Component, wmeta workloadmeta.Component, at authtoken.Component) (err error) { +func RunAgent(log log.Component, config config.Component, telemetry telemetry.Component, statusComponent status.Component, settings settings.Component, wmeta workloadmeta.Component) (err error) { if err := coredump.Setup(config); err != nil { log.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } @@ -300,7 +299,7 @@ func RunAgent(log log.Component, config config.Component, telemetry telemetry.Co } }() - srv, err = api.NewServer(statusComponent, settings, wmeta, at) + srv, err = api.NewServer(statusComponent, settings, wmeta) if err != nil { return log.Errorf("Error while creating api server, exiting: %v", err) } From b743e35030e0a6ebc402264185196efcf9b2d6cb Mon Sep 17 00:00:00 2001 From: Florent Clarret Date: Tue, 17 Dec 2024 11:06:52 +0100 Subject: [PATCH 253/303] Create a dedicated task to bump the `current_milestone` (#32275) --- tasks/libs/ciproviders/github_api.py | 3 + tasks/release.py | 100 ++++++++++++++++----------- 2 files changed, 64 insertions(+), 39 deletions(-) diff --git a/tasks/libs/ciproviders/github_api.py b/tasks/libs/ciproviders/github_api.py index a32546d23ee38..8a4d5e69027d1 100644 --- a/tasks/libs/ciproviders/github_api.py +++ b/tasks/libs/ciproviders/github_api.py @@ -523,6 +523,9 @@ def create_label(self, name, color, description=""): """ return self._repository.create_label(name, color, description) + def create_milestone(self, title): + self._repository.create_milestone(title) + def create_release(self, tag, message, draft=True): return self._repository.create_git_release( tag=tag, diff --git a/tasks/release.py b/tasks/release.py index d7acec73f8e05..077834b279923 100644 --- a/tasks/release.py +++ b/tasks/release.py @@ -731,10 +731,8 @@ def create_release_branches(ctx, base_directory="~/dd", major_version: int = 7, github = GithubAPI(repository=GITHUB_REPO_NAME) current = current_version(ctx, major_version) - next = current.next_version(bump_minor=True) current.rc = False current.devel = False - next.devel = False # Strings with proper branch/tag names release_branch = current.branch() @@ -772,43 +770,7 @@ def create_release_branches(ctx, base_directory="~/dd", major_version: int = 7, ) # Step 2 - Create PRs with new settings in datadog-agent repository - # Step 2.0 - Create milestone update - milestone_branch = f"release_milestone-{int(time.time())}" - ctx.run(f"git switch -c {milestone_branch}") - rj = load_release_json() - rj["current_milestone"] = f"{next}" - _save_release_json(rj) - # Commit release.json - ctx.run("git add release.json") - ok = try_git_command(ctx, f"git commit -m 'Update release.json with current milestone to {next}'") - - if not ok: - raise Exit( - color_message( - f"Could not create commit. Please commit manually and push the commit to the {milestone_branch} branch.", - "red", - ), - code=1, - ) - - res = ctx.run(f"git push --set-upstream {upstream} {milestone_branch}", warn=True) - if res.exited is None or res.exited > 0: - raise Exit( - color_message( - f"Could not push branch {milestone_branch} to the upstream '{upstream}'. Please push it manually and then open a PR against {release_branch}.", - "red", - ), - code=1, - ) - - create_release_pr( - f"[release] Update current milestone to {next}", - get_default_branch(), - milestone_branch, - next, - ) - - # Step 2.1 - Update release.json + # Step 2.0 - Update release.json update_branch = f"{release_branch}-updates" ctx.run(f"git checkout {release_branch}") @@ -1303,3 +1265,63 @@ def create_github_release(ctx, release_branch, draft=True): ) print(f"Link to the release note: {release.html_url}") + + +@task +def update_current_milestone(ctx, major_version: int = 7, upstream="origin"): + """ + Create a PR to bump the current_milestone in the release.json file + """ + import github + + gh = GithubAPI() + + current = current_version(ctx, major_version) + next = current.next_version(bump_minor=True) + next.devel = False + + print(f"Creating the {next} milestone...") + + try: + gh.create_milestone(str(next)) + except github.GithubException as e: + if e.status == 422: + print(f"Milestone {next} already exists") + else: + raise e + + with agent_context(ctx, get_default_branch(major=major_version)): + milestone_branch = f"release_milestone-{int(time.time())}" + ctx.run(f"git switch -c {milestone_branch}") + rj = load_release_json() + rj["current_milestone"] = f"{next}" + _save_release_json(rj) + # Commit release.json + ctx.run("git add release.json") + ok = try_git_command(ctx, f"git commit -m 'Update release.json with current milestone to {next}'") + + if not ok: + raise Exit( + color_message( + f"Could not create commit. Please commit manually and push the commit to the {milestone_branch} branch.", + Color.RED, + ), + code=1, + ) + + res = ctx.run(f"git push --set-upstream {upstream} {milestone_branch}", warn=True) + if res.exited is None or res.exited > 0: + raise Exit( + color_message( + f"Could not push branch {milestone_branch} to the upstream '{upstream}'. Please push it manually and then open a PR against main.", + Color.RED, + ), + code=1, + ) + + create_release_pr( + f"[release] Update current milestone to {next}", + get_default_branch(), + milestone_branch, + next, + ) From 9f49879720e7586fb4ae35c19f62095f9229d002 Mon Sep 17 00:00:00 2001 From: David du Colombier Date: Tue, 17 Dec 2024 11:20:10 +0100 Subject: [PATCH 254/303] [omnibus] Upgrade OpenSCAP to version 1.4.0 (#32276) --- omnibus/config/software/openscap.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/omnibus/config/software/openscap.rb b/omnibus/config/software/openscap.rb index e97250467e2a2..3e8e08d71990d 100644 --- a/omnibus/config/software/openscap.rb +++ b/omnibus/config/software/openscap.rb @@ -4,12 +4,12 @@ # Copyright 2016-present Datadog, Inc. name 'openscap' -default_version '1.3.10' +default_version '1.4.0' license "LGPL-3.0-or-later" license_file "COPYING" -version("1.3.10") { source sha256: "0d023ff3fbdec617768ea5977fd3bb6702dfef4ae595da9a5bbc6ecc6ac9e575" } +version("1.4.0") { source sha256: "b64f3709f0e072262708212d56897c419abdd2dc618273a363bc0497c6b4ba0b" } ship_source_offer true From 2c6de378d89139ecc2ca1a6201c1cd465016c631 Mon Sep 17 00:00:00 2001 From: Sylvain Afchain Date: Tue, 17 Dec 2024 11:20:52 +0100 Subject: [PATCH 255/303] [CWS] fix secl weight (#32162) --- pkg/security/secl/compiler/eval/eval_test.go | 8 +++++--- pkg/security/secl/compiler/eval/operators.go | 3 +-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/pkg/security/secl/compiler/eval/eval_test.go b/pkg/security/secl/compiler/eval/eval_test.go index 0674e4ef744b1..6a217e8877444 100644 --- a/pkg/security/secl/compiler/eval/eval_test.go +++ b/pkg/security/secl/compiler/eval/eval_test.go @@ -1006,8 +1006,9 @@ func TestRegisterPartial(t *testing.T) { func TestOptimizer(t *testing.T) { event := &testEvent{ process: testProcess{ - uid: 44, - gid: 44, + uid: 44, + gid: 44, + name: "aaa", }, } @@ -1018,10 +1019,11 @@ func TestOptimizer(t *testing.T) { Expr string Evaluated func() bool }{ - {Expr: `process.list[A].key == 44 && process.gid == 55`, Evaluated: func() bool { return event.listEvaluated }}, + {Expr: `process.list.key == 44 && process.gid == 55`, Evaluated: func() bool { return event.listEvaluated }}, {Expr: `process.gid == 55 && process.list[A].key == 44`, Evaluated: func() bool { return event.listEvaluated }}, {Expr: `process.uid in [66, 77, 88] && process.gid == 55`, Evaluated: func() bool { return event.uidEvaluated }}, {Expr: `process.gid == 55 && process.uid in [66, 77, 88]`, Evaluated: func() bool { return event.uidEvaluated }}, + {Expr: `process.list.value == "AA" && process.name == "zzz"`, Evaluated: func() bool { return event.listEvaluated }}, } for _, test := range tests { diff --git a/pkg/security/secl/compiler/eval/operators.go b/pkg/security/secl/compiler/eval/operators.go index 9f39ff3e3550e..9fd97b9a98177 100644 --- a/pkg/security/secl/compiler/eval/operators.go +++ b/pkg/security/secl/compiler/eval/operators.go @@ -352,7 +352,6 @@ func StringEquals(a *StringEvaluator, b *StringEvaluator, state *State) (*BoolEv return &BoolEvaluator{ Value: op(ea, eb), - Weight: a.Weight + InArrayWeight*len(eb), isDeterministic: isDc, }, nil } @@ -366,7 +365,7 @@ func StringEquals(a *StringEvaluator, b *StringEvaluator, state *State) (*BoolEv return &BoolEvaluator{ EvalFnc: evalFnc, - Weight: a.Weight + InArrayWeight*len(eb), + Weight: a.Weight, isDeterministic: isDc, }, nil } From 98d6070e42c86b7bf88507ee9e85ffe7ce68a7a6 Mon Sep 17 00:00:00 2001 From: Paul Cacheux Date: Tue, 17 Dec 2024 11:32:04 +0100 Subject: [PATCH 256/303] remove unused build tags from system-probe build (#32188) --- tasks/build_tags.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tasks/build_tags.py b/tasks/build_tags.py index a3c13f088eb8b..c400d2560aa94 100644 --- a/tasks/build_tags.py +++ b/tasks/build_tags.py @@ -159,7 +159,18 @@ SERVERLESS_TAGS = {"serverless", "otlp"} # SYSTEM_PROBE_TAGS lists the tags necessary to build system-probe -SYSTEM_PROBE_TAGS = AGENT_TAGS.union({"linux_bpf", "npm", "pcap"}).difference({"python", "systemd"}) +SYSTEM_PROBE_TAGS = { + "datadog.no_waf", + "ec2", + "linux_bpf", + "netcgo", + "npm", + "pcap", + "process", + "trivy", + "zlib", + "zstd", +} # TRACE_AGENT_TAGS lists the tags that have to be added when the trace-agent TRACE_AGENT_TAGS = {"docker", "containerd", "datadog.no_waf", "kubeapiserver", "kubelet", "otlp", "netcgo", "podman"} From abb0743733b1713b582a9c9b0f259b8f3d93c479 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9na=C3=AFc=20Huard?= Date: Tue, 17 Dec 2024 11:46:57 +0100 Subject: [PATCH 257/303] [incident-33304] Remove the flaky mark on fixed tests (#32266) --- flakes.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/flakes.yaml b/flakes.yaml index bde9554d2f5f7..ab2af6b55f3ea 100644 --- a/flakes.yaml +++ b/flakes.yaml @@ -11,8 +11,3 @@ test/new-e2e/tests/containers: - TestECSSuite/TestCPU/metric___container.cpu.usage{^ecs_container_name:stress-ng$} - TestEKSSuite/TestCPU/metric___container.cpu.usage{^kube_deployment:stress-ng$,^kube_namespace:workload-cpustress$} - TestKindSuite/TestCPU/metric___container.cpu.usage{^kube_deployment:stress-ng$,^kube_namespace:workload-cpustress$} - - - TestEKSSuite/TestDogstatsdInAgent/metric___custom.metric{^kube_deployment:dogstatsd-udp$,^kube_namespace:workload-dogstatsd$} - - TestEKSSuite/TestDogstatsdStandalone/metric___custom.metric{^kube_deployment:dogstatsd-udp$,^kube_namespace:workload-dogstatsd$} - - TestKindSuite/TestDogstatsdInAgent/metric___custom.metric{^kube_deployment:dogstatsd-udp$,^kube_namespace:workload-dogstatsd$} - - TestKindSuite/TestDogstatsdStandalone/metric___custom.metric{^kube_deployment:dogstatsd-udp$,^kube_namespace:workload-dogstatsd$} From 326b13e4e5add1756013e69ac8b486d871360c37 Mon Sep 17 00:00:00 2001 From: Florian Veaux Date: Tue, 17 Dec 2024 11:51:30 +0100 Subject: [PATCH 258/303] [VULN-9579] Traps: Validate community string in constant time (#32280) --- comp/snmptraps/listener/listenerimpl/listener.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/comp/snmptraps/listener/listenerimpl/listener.go b/comp/snmptraps/listener/listenerimpl/listener.go index 7571896edc30d..ab3d5c3aa3dea 100644 --- a/comp/snmptraps/listener/listenerimpl/listener.go +++ b/comp/snmptraps/listener/listenerimpl/listener.go @@ -8,6 +8,7 @@ package listenerimpl import ( "context" + "crypto/subtle" "errors" "fmt" "net" @@ -167,7 +168,8 @@ func validatePacket(p *gosnmp.SnmpPacket, c *config.TrapsConfig) error { // At least one of the known community strings must match. for _, community := range c.CommunityStrings { - if community == p.Community { + // Simple string equality check, but in constant time to avoid timing attacks + if subtle.ConstantTimeCompare([]byte(community), []byte(p.Community)) == 1 { return nil } } From a89d19f18c7fb151515383e8137fb0dcacc1c388 Mon Sep 17 00:00:00 2001 From: Sylvain Baubeau Date: Tue, 17 Dec 2024 12:06:00 +0100 Subject: [PATCH 259/303] [CWS] Use config defaults rather than CLI defaults to generate dumps (#32224) --- .../subcommands/runtime/activity_dump.go | 11 +++++++++-- pkg/security/security_profile/dump/manager.go | 15 ++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/cmd/security-agent/subcommands/runtime/activity_dump.go b/cmd/security-agent/subcommands/runtime/activity_dump.go index 35907553045fb..0f15351d72e02 100644 --- a/cmd/security-agent/subcommands/runtime/activity_dump.go +++ b/cmd/security-agent/subcommands/runtime/activity_dump.go @@ -12,6 +12,7 @@ import ( "encoding/json" "fmt" "os" + "time" "github.com/spf13/cobra" "go.uber.org/fx" @@ -173,7 +174,7 @@ func generateDumpCommands(globalParams *command.GlobalParams) []*cobra.Command { activityDumpGenerateDumpCmd.Flags().StringVar( &cliParams.timeout, "timeout", - "1m", + "", "timeout for the activity dump", ) activityDumpGenerateDumpCmd.Flags().BoolVar( @@ -185,7 +186,7 @@ func generateDumpCommands(globalParams *command.GlobalParams) []*cobra.Command { activityDumpGenerateDumpCmd.Flags().StringVar( &cliParams.localStorageDirectory, "output", - "/tmp/activity_dumps/", + "", "local storage output directory", ) activityDumpGenerateDumpCmd.Flags().BoolVar( @@ -472,6 +473,12 @@ func generateActivityDump(_ log.Component, _ config.Component, _ secrets.Compone return err } + if activityDumpArgs.timeout != "" { + if _, err = time.ParseDuration(activityDumpArgs.timeout); err != nil { + return err + } + } + output, err := client.GenerateActivityDump(&api.ActivityDumpParams{ ContainerID: activityDumpArgs.containerID, CGroupID: activityDumpArgs.cgroupID, diff --git a/pkg/security/security_profile/dump/manager.go b/pkg/security/security_profile/dump/manager.go index d06600ed81bca..079f45c13bc21 100644 --- a/pkg/security/security_profile/dump/manager.go +++ b/pkg/security/security_profile/dump/manager.go @@ -548,11 +548,24 @@ func (adm *ActivityDumpManager) DumpActivity(params *api.ActivityDumpParams) (*a adm.Lock() defer adm.Unlock() + var dumpDuration time.Duration + var err error + if params.Timeout != "" { + if dumpDuration, err = time.ParseDuration(params.Timeout); err != nil { + return nil, err + } + } else { + dumpDuration = adm.config.RuntimeSecurity.ActivityDumpCgroupDumpTimeout + } + + if params.Storage.LocalStorageDirectory == "" { + params.Storage.LocalStorageDirectory = adm.config.RuntimeSecurity.ActivityDumpLocalStorageDirectory + } + newDump := NewActivityDump(adm, func(ad *ActivityDump) { ad.Metadata.ContainerID = containerutils.ContainerID(params.GetContainerID()) ad.Metadata.CGroupContext.CGroupID = containerutils.CGroupID(params.GetCGroupID()) - dumpDuration, _ := time.ParseDuration(params.Timeout) ad.SetTimeout(dumpDuration) if params.GetDifferentiateArgs() { From 8ef1fd9a7dc9bbe049b53e3b92bfad81cab9c77c Mon Sep 17 00:00:00 2001 From: Sylvain Baubeau Date: Tue, 17 Dec 2024 12:06:10 +0100 Subject: [PATCH 260/303] [CWS] Reduce fallbacks to cgroup file read (#32199) --- pkg/security/resolvers/process/resolver_ebpf.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/security/resolvers/process/resolver_ebpf.go b/pkg/security/resolvers/process/resolver_ebpf.go index dc5694dd55647..5bcccdb52c540 100644 --- a/pkg/security/resolvers/process/resolver_ebpf.go +++ b/pkg/security/resolvers/process/resolver_ebpf.go @@ -852,7 +852,7 @@ func (p *EBPFResolver) resolveFromKernelMaps(pid, tid uint32, inode uint64, newE // is no insurance that the parent of this process is still running, we can't use our user space cache to check if // the parent is in a container. In other words, we have to fall back to /proc to query the container ID of the // process. - if entry.ContainerID == "" || entry.CGroup.CGroupFile.Inode == 0 { + if entry.CGroup.CGroupFile.Inode == 0 { if containerID, cgroup, err := p.containerResolver.GetContainerContext(pid); err == nil { entry.CGroup.Merge(&cgroup) entry.ContainerID = containerID From 9c7198c00df845570cb75a5238fe19d443cdae00 Mon Sep 17 00:00:00 2001 From: Wassim Dhif Date: Tue, 17 Dec 2024 12:13:50 +0100 Subject: [PATCH 261/303] feat(tagger): implement remote OriginInfo resolution (#31836) Signed-off-by: Wassim DHIF --- comp/api/api/apiimpl/grpc.go | 6 + comp/core/tagger/def/component.go | 2 + comp/core/tagger/impl-noop/tagger.go | 7 + comp/core/tagger/impl-remote/remote.go | 80 +++ comp/core/tagger/impl/local_tagger.go | 10 + comp/core/tagger/impl/replay_tagger.go | 7 + comp/core/tagger/impl/tagger.go | 8 +- comp/core/tagger/mock/fake_tagger.go | 6 + comp/core/tagger/origindetection/go.mod | 14 + comp/core/tagger/origindetection/go.sum | 23 + .../tagger/origindetection/origindetection.go | 84 +++ .../origindetection/origindetection_test.go | 81 +++ comp/core/tagger/server/server.go | 20 + comp/core/tagger/telemetry/telemetry.go | 10 + go.mod | 2 + go.work | 1 + modules.yml | 1 + pkg/proto/datadog/api/v1/api.proto | 16 + pkg/proto/datadog/model/v1/model.proto | 24 + pkg/proto/pbgo/core/api.pb.go | 402 ++++++++------ pkg/proto/pbgo/core/api.pb.gw.go | 81 +++ pkg/proto/pbgo/core/model.pb.go | 514 ++++++++++++++---- pkg/proto/pbgo/mocks/core/api_mockgen.pb.go | 35 ++ 23 files changed, 1154 insertions(+), 280 deletions(-) create mode 100644 comp/core/tagger/origindetection/go.mod create mode 100644 comp/core/tagger/origindetection/go.sum create mode 100644 comp/core/tagger/origindetection/origindetection.go create mode 100644 comp/core/tagger/origindetection/origindetection_test.go diff --git a/comp/api/api/apiimpl/grpc.go b/comp/api/api/apiimpl/grpc.go index 5f88cdb722163..6272a7f00fe05 100644 --- a/comp/api/api/apiimpl/grpc.go +++ b/comp/api/api/apiimpl/grpc.go @@ -74,6 +74,12 @@ func (s *serverSecure) TaggerStreamEntities(req *pb.StreamTagsRequest, srv pb.Ag return s.taggerServer.TaggerStreamEntities(req, srv) } +// TaggerGenerateContainerIDFromOriginInfo generates a container ID from the Origin Info. +// This function takes an Origin Info but only uses the ExternalData part of it, this is done for backward compatibility. +func (s *serverSecure) TaggerGenerateContainerIDFromOriginInfo(ctx context.Context, req *pb.GenerateContainerIDFromOriginInfoRequest) (*pb.GenerateContainerIDFromOriginInfoResponse, error) { + return s.taggerServer.TaggerGenerateContainerIDFromOriginInfo(ctx, req) +} + func (s *serverSecure) TaggerFetchEntity(ctx context.Context, req *pb.FetchEntityRequest) (*pb.FetchEntityResponse, error) { return s.taggerServer.TaggerFetchEntity(ctx, req) } diff --git a/comp/core/tagger/def/component.go b/comp/core/tagger/def/component.go index c580325c3bf81..619196f41de95 100644 --- a/comp/core/tagger/def/component.go +++ b/comp/core/tagger/def/component.go @@ -9,6 +9,7 @@ package tagger import ( "context" + "github.com/DataDog/datadog-agent/comp/core/tagger/origindetection" "github.com/DataDog/datadog-agent/comp/core/tagger/telemetry" "github.com/DataDog/datadog-agent/comp/core/tagger/types" taggertypes "github.com/DataDog/datadog-agent/pkg/tagger/types" @@ -37,6 +38,7 @@ type Component interface { // integrations using the tagger LegacyTag(entity string, cardinality types.TagCardinality) ([]string, error) Tag(entityID types.EntityID, cardinality types.TagCardinality) ([]string, error) + GenerateContainerIDFromOriginInfo(originInfo origindetection.OriginInfo) (string, error) AccumulateTagsFor(entityID types.EntityID, cardinality types.TagCardinality, tb tagset.TagsAccumulator) error Standard(entityID types.EntityID) ([]string, error) List() types.TaggerListResponse diff --git a/comp/core/tagger/impl-noop/tagger.go b/comp/core/tagger/impl-noop/tagger.go index 811a60e905923..986e113df2c1e 100644 --- a/comp/core/tagger/impl-noop/tagger.go +++ b/comp/core/tagger/impl-noop/tagger.go @@ -17,6 +17,7 @@ import ( "context" tagger "github.com/DataDog/datadog-agent/comp/core/tagger/def" + "github.com/DataDog/datadog-agent/comp/core/tagger/origindetection" "github.com/DataDog/datadog-agent/comp/core/tagger/telemetry" "github.com/DataDog/datadog-agent/comp/core/tagger/types" taggertypes "github.com/DataDog/datadog-agent/pkg/tagger/types" @@ -49,6 +50,12 @@ func (n *noopTagger) LegacyTag(string, types.TagCardinality) ([]string, error) { return nil, nil } +// GenerateContainerIDFromOriginInfo generates a container ID from Origin Info. +// This is a no-op for the noop tagger +func (n *noopTagger) GenerateContainerIDFromOriginInfo(origindetection.OriginInfo) (string, error) { + return "", nil +} + func (n *noopTagger) AccumulateTagsFor(types.EntityID, types.TagCardinality, tagset.TagsAccumulator) error { return nil } diff --git a/comp/core/tagger/impl-remote/remote.go b/comp/core/tagger/impl-remote/remote.go index b1a77165f18a9..b602facbb824b 100644 --- a/comp/core/tagger/impl-remote/remote.go +++ b/comp/core/tagger/impl-remote/remote.go @@ -27,6 +27,7 @@ import ( "github.com/DataDog/datadog-agent/comp/core/config" log "github.com/DataDog/datadog-agent/comp/core/log/def" tagger "github.com/DataDog/datadog-agent/comp/core/tagger/def" + "github.com/DataDog/datadog-agent/comp/core/tagger/origindetection" "github.com/DataDog/datadog-agent/comp/core/tagger/telemetry" "github.com/DataDog/datadog-agent/comp/core/tagger/types" "github.com/DataDog/datadog-agent/comp/core/tagger/utils" @@ -47,6 +48,8 @@ const ( var errTaggerStreamNotStarted = errors.New("tagger stream not started") +var errTaggerFailedGenerateContainerIDFromOriginInfo = errors.New("tagger failed to generate container ID from origin info") + // Requires defines the dependencies for the remote tagger. type Requires struct { compdef.In @@ -75,6 +78,7 @@ type remoteTagger struct { log log.Component conn *grpc.ClientConn + token string client pb.AgentSecureClient stream pb.AgentSecure_TaggerStreamEntitiesClient @@ -82,6 +86,9 @@ type remoteTagger struct { streamCancel context.CancelFunc filter *types.Filter + queryCtx context.Context + queryCancel context.CancelFunc + ctx context.Context cancel context.CancelFunc @@ -250,6 +257,79 @@ func (t *remoteTagger) LegacyTag(entity string, cardinality types.TagCardinality return t.Tag(entityID, cardinality) } +// GenerateContainerIDFromOriginInfo returns a container ID for the given Origin Info. +// This function currently only uses the External Data from the Origin Info to generate the container ID. +func (t *remoteTagger) GenerateContainerIDFromOriginInfo(originInfo origindetection.OriginInfo) (string, error) { + fail := true + defer func() { + if fail { + t.telemetryStore.OriginInfoRequests.Inc("failed") + } else { + t.telemetryStore.OriginInfoRequests.Inc("success") + } + }() + + expBackoff := backoff.NewExponentialBackOff() + expBackoff.InitialInterval = 500 * time.Millisecond + expBackoff.MaxInterval = 1 * time.Second + expBackoff.MaxElapsedTime = 15 * time.Second + + var containerID string + + err := backoff.Retry(func() error { + select { + case <-t.ctx.Done(): + return &backoff.PermanentError{Err: errTaggerFailedGenerateContainerIDFromOriginInfo} + default: + } + + // Fetch the auth token + if t.token == "" { + var authError error + t.token, authError = t.options.TokenFetcher() + if authError != nil { + _ = t.log.Errorf("unable to fetch auth token, will possibly retry: %s", authError) + return authError + } + } + + // Create the context with the auth token + t.queryCtx, t.queryCancel = context.WithCancel( + metadata.NewOutgoingContext(t.ctx, metadata.MD{ + "authorization": []string{fmt.Sprintf("Bearer %s", t.token)}, + }), + ) + + // Call the gRPC method to get the container ID from the origin info + containerIDResponse, err := t.client.TaggerGenerateContainerIDFromOriginInfo(t.queryCtx, &pb.GenerateContainerIDFromOriginInfoRequest{ + ExternalData: &pb.GenerateContainerIDFromOriginInfoRequest_ExternalData{ + Init: &originInfo.ExternalData.Init, + ContainerName: &originInfo.ExternalData.ContainerName, + PodUID: &originInfo.ExternalData.PodUID, + }, + }) + if err != nil { + _ = t.log.Errorf("unable to generate container ID from origin info, will retry: %s", err) + return err + } + + if containerIDResponse == nil { + _ = t.log.Warnf("unable to generate container ID from origin info, will retry: %s", err) + return errors.New("containerIDResponse is nil") + } + containerID = containerIDResponse.ContainerID + + fail = false + t.log.Debugf("Container ID generated successfully from origin info %+v: %s", originInfo, containerID) + return nil + }, expBackoff) + + if err != nil { + return "", err + } + return containerID, nil +} + // AccumulateTagsFor returns tags for a given entity at the desired cardinality. func (t *remoteTagger) AccumulateTagsFor(entityID types.EntityID, cardinality types.TagCardinality, tb tagset.TagsAccumulator) error { tags, err := t.Tag(entityID, cardinality) diff --git a/comp/core/tagger/impl/local_tagger.go b/comp/core/tagger/impl/local_tagger.go index ac2259342eb25..85c8741c52b02 100644 --- a/comp/core/tagger/impl/local_tagger.go +++ b/comp/core/tagger/impl/local_tagger.go @@ -9,16 +9,20 @@ import ( "context" "fmt" "sync" + "time" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/tagger/collectors" tagger "github.com/DataDog/datadog-agent/comp/core/tagger/def" + "github.com/DataDog/datadog-agent/comp/core/tagger/origindetection" "github.com/DataDog/datadog-agent/comp/core/tagger/tagstore" "github.com/DataDog/datadog-agent/comp/core/tagger/telemetry" "github.com/DataDog/datadog-agent/comp/core/tagger/types" workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" taggertypes "github.com/DataDog/datadog-agent/pkg/tagger/types" "github.com/DataDog/datadog-agent/pkg/tagset" + "github.com/DataDog/datadog-agent/pkg/util/containers/metrics" + "github.com/DataDog/datadog-agent/pkg/util/optional" ) // Tagger is the entry class for entity tagging. It hold the tagger collector, @@ -99,6 +103,12 @@ func (t *localTagger) Tag(entityID types.EntityID, cardinality types.TagCardinal return tags.Copy(), nil } +// GenerateContainerIDFromOriginInfo generates a container ID from Origin Info. +func (t *localTagger) GenerateContainerIDFromOriginInfo(originInfo origindetection.OriginInfo) (string, error) { + metaCollector := metrics.GetProvider(optional.NewOption(t.workloadStore)).GetMetaCollector() + return metaCollector.ContainerIDForPodUIDAndContName(originInfo.ExternalData.PodUID, originInfo.ExternalData.ContainerName, originInfo.ExternalData.Init, time.Second) +} + // LegacyTag has the same behaviour as the Tag method, but it receives the entity id as a string and parses it. // If possible, avoid using this function, and use the Tag method instead. // This function exists in order not to break backward compatibility with rtloader and python diff --git a/comp/core/tagger/impl/replay_tagger.go b/comp/core/tagger/impl/replay_tagger.go index ddc9851a898db..6f012e9c9d680 100644 --- a/comp/core/tagger/impl/replay_tagger.go +++ b/comp/core/tagger/impl/replay_tagger.go @@ -11,6 +11,7 @@ import ( "time" tagger "github.com/DataDog/datadog-agent/comp/core/tagger/def" + "github.com/DataDog/datadog-agent/comp/core/tagger/origindetection" "github.com/DataDog/datadog-agent/comp/core/tagger/tagstore" "github.com/DataDog/datadog-agent/comp/core/tagger/telemetry" "github.com/DataDog/datadog-agent/comp/core/tagger/types" @@ -77,6 +78,12 @@ func (t *replayTagger) LegacyTag(entity string, cardinality types.TagCardinality return t.Tag(entityID, cardinality) } +// GenerateContainerIDFromOriginInfo generates a container ID from Origin Info. +// This is a no-op for the replay tagger +func (t *replayTagger) GenerateContainerIDFromOriginInfo(origindetection.OriginInfo) (string, error) { + return "", nil +} + // AccumulateTagsFor returns tags for a given entity at the desired cardinality. func (t *replayTagger) AccumulateTagsFor(entityID types.EntityID, cardinality types.TagCardinality, tb tagset.TagsAccumulator) error { tags := t.store.LookupHashed(entityID, cardinality) diff --git a/comp/core/tagger/impl/tagger.go b/comp/core/tagger/impl/tagger.go index 1ef1a137d6a34..7023106b1c118 100644 --- a/comp/core/tagger/impl/tagger.go +++ b/comp/core/tagger/impl/tagger.go @@ -27,6 +27,7 @@ import ( log "github.com/DataDog/datadog-agent/comp/core/log/def" tagger "github.com/DataDog/datadog-agent/comp/core/tagger/def" taggermock "github.com/DataDog/datadog-agent/comp/core/tagger/mock" + "github.com/DataDog/datadog-agent/comp/core/tagger/origindetection" "github.com/DataDog/datadog-agent/comp/core/tagger/telemetry" "github.com/DataDog/datadog-agent/comp/core/tagger/types" "github.com/DataDog/datadog-agent/comp/core/tagger/utils" @@ -538,7 +539,12 @@ func (t *TaggerWrapper) EnrichTags(tb tagset.TagsAccumulator, originInfo taggert } } -// generateContainerIDFromExternalData generates a container ID from the external data +// GenerateContainerIDFromOriginInfo generates a container ID from Origin Info. +func (t *TaggerWrapper) GenerateContainerIDFromOriginInfo(originInfo origindetection.OriginInfo) (string, error) { + return t.defaultTagger.GenerateContainerIDFromOriginInfo(originInfo) +} + +// generateContainerIDFromExternalData generates a container ID from the External Data. func (t *TaggerWrapper) generateContainerIDFromExternalData(e externalData, metricsProvider provider.ContainerIDForPodUIDAndContNameRetriever) (string, error) { return metricsProvider.ContainerIDForPodUIDAndContName(e.podUID, e.containerName, e.init, time.Second) } diff --git a/comp/core/tagger/mock/fake_tagger.go b/comp/core/tagger/mock/fake_tagger.go index b4ff66a65d2c6..8a609d052c766 100644 --- a/comp/core/tagger/mock/fake_tagger.go +++ b/comp/core/tagger/mock/fake_tagger.go @@ -10,6 +10,7 @@ import ( "strconv" tagger "github.com/DataDog/datadog-agent/comp/core/tagger/def" + "github.com/DataDog/datadog-agent/comp/core/tagger/origindetection" "github.com/DataDog/datadog-agent/comp/core/tagger/tagstore" "github.com/DataDog/datadog-agent/comp/core/tagger/telemetry" "github.com/DataDog/datadog-agent/comp/core/tagger/types" @@ -118,6 +119,11 @@ func (f *FakeTagger) LegacyTag(entity string, cardinality types.TagCardinality) return f.Tag(entityID, cardinality) } +// GenerateContainerIDFromOriginInfo fake implementation +func (f *FakeTagger) GenerateContainerIDFromOriginInfo(origindetection.OriginInfo) (string, error) { + return "", nil +} + // GlobalTags fake implementation func (f *FakeTagger) GlobalTags(cardinality types.TagCardinality) ([]string, error) { return f.Tag(types.GetGlobalEntityID(), cardinality) diff --git a/comp/core/tagger/origindetection/go.mod b/comp/core/tagger/origindetection/go.mod new file mode 100644 index 0000000000000..10e53c86ea39d --- /dev/null +++ b/comp/core/tagger/origindetection/go.mod @@ -0,0 +1,14 @@ +module github.com/DataDog/datadog-agent/comp/core/tagger/origindetection + +go 1.22.0 + +require github.com/stretchr/testify v1.10.0 + +require ( + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/rogpeppe/go-internal v1.13.1 // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/comp/core/tagger/origindetection/go.sum b/comp/core/tagger/origindetection/go.sum new file mode 100644 index 0000000000000..cec386e1e2769 --- /dev/null +++ b/comp/core/tagger/origindetection/go.sum @@ -0,0 +1,23 @@ +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/comp/core/tagger/origindetection/origindetection.go b/comp/core/tagger/origindetection/origindetection.go new file mode 100644 index 0000000000000..712792c54f298 --- /dev/null +++ b/comp/core/tagger/origindetection/origindetection.go @@ -0,0 +1,84 @@ +// 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. + +// TODO: A lot of the code in this file is currently duplicated in taggertypes. +// We will need to move all the code in taggertype to this file and remove the taggertypes package. + +// Package origindetection contains the types and functions used for Origin Detection. +package origindetection + +import ( + "strconv" + "strings" +) + +// ProductOrigin is the origin of the product that sent the entity. +type ProductOrigin int + +const ( + // ProductOriginDogStatsDLegacy is the ProductOrigin for DogStatsD in Legacy mode. + // TODO: remove this when dogstatsd_origin_detection_unified is enabled by default + ProductOriginDogStatsDLegacy ProductOrigin = iota + // ProductOriginDogStatsD is the ProductOrigin for DogStatsD. + ProductOriginDogStatsD ProductOrigin = iota + // ProductOriginAPM is the ProductOrigin for APM. + ProductOriginAPM ProductOrigin = iota + + // External Data Prefixes + // These prefixes are used to build the External Data Environment Variable. + + // ExternalDataInitPrefix is the prefix for the Init flag in the External Data. + ExternalDataInitPrefix = "it-" + // ExternalDataContainerNamePrefix is the prefix for the Container Name in the External Data. + ExternalDataContainerNamePrefix = "cn-" + // ExternalDataPodUIDPrefix is the prefix for the Pod UID in the External Data. + ExternalDataPodUIDPrefix = "pu-" +) + +// OriginInfo contains the Origin Detection information. +type OriginInfo struct { + LocalData LocalData // LocalData is the local data list. + ExternalData ExternalData // ExternalData is the external data list. + Cardinality string // Cardinality is the cardinality of the resolved origin. + ProductOrigin ProductOrigin // ProductOrigin is the product that sent the origin information. +} + +// LocalData that is generated by the client and sent to the Agent. +type LocalData struct { + ProcessID uint32 // ProcessID of the container process on the host. + ContainerID string // ContainerID sent from the client. + Inode uint64 // Inode is the Cgroup inode of the container. + PodUID string // PodUID of the pod sent from the client. +} + +// ExternalData generated by the Admission Controller and sent to the Agent. +type ExternalData struct { + Init bool // Init is true if the container is an init container. + ContainerName string // ContainerName is the name of the container as seen by the Admission Controller. + PodUID string // PodUID is the UID of the pod as seen by the Admission Controller. +} + +// GenerateContainerIDFromExternalData generates a container ID from the external data. +type GenerateContainerIDFromExternalData func(externalData ExternalData) (string, error) + +// ParseExternalData parses the external data string into an ExternalData struct. +func ParseExternalData(externalEnv string) (ExternalData, error) { + if externalEnv == "" { + return ExternalData{}, nil + } + var externalData ExternalData + var parsingError error + for _, item := range strings.Split(externalEnv, ",") { + switch { + case strings.HasPrefix(item, ExternalDataInitPrefix): + externalData.Init, parsingError = strconv.ParseBool(item[len(ExternalDataInitPrefix):]) + case strings.HasPrefix(item, ExternalDataContainerNamePrefix): + externalData.ContainerName = item[len(ExternalDataContainerNamePrefix):] + case strings.HasPrefix(item, ExternalDataPodUIDPrefix): + externalData.PodUID = item[len(ExternalDataPodUIDPrefix):] + } + } + return externalData, parsingError +} diff --git a/comp/core/tagger/origindetection/origindetection_test.go b/comp/core/tagger/origindetection/origindetection_test.go new file mode 100644 index 0000000000000..a873093f6191b --- /dev/null +++ b/comp/core/tagger/origindetection/origindetection_test.go @@ -0,0 +1,81 @@ +// 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 origindetection contains the types and functions used for Origin Detection. +package origindetection + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestParseExternalData(t *testing.T) { + tests := []struct { + name string + externalEnv string + expectedData ExternalData + expectedError bool + }{ + { + name: "Empty external data", + externalEnv: "", + expectedData: ExternalData{ + Init: false, + ContainerName: "", + PodUID: "", + }, + expectedError: false, + }, + { + name: "Valid external data with Init", + externalEnv: "it-true,cn-container-name,pu-12345678-90ab-cdef-1234-567890abcdef", + expectedData: ExternalData{ + Init: true, + ContainerName: "container-name", + PodUID: "12345678-90ab-cdef-1234-567890abcdef", + }, + expectedError: false, + }, + { + name: "Invalid Init value", + externalEnv: "it-invalid,cn-container-name,pu-12345678-90ab-cdef-1234-567890abcdef", + expectedData: ExternalData{}, + expectedError: true, + }, + { + name: "Partial external data", + externalEnv: "cn-container-name", + expectedData: ExternalData{ + Init: false, + ContainerName: "container-name", + PodUID: "", + }, + expectedError: false, + }, + { + name: "Unrecognized prefix", + externalEnv: "unknown-prefix", + expectedData: ExternalData{ + Init: false, + ContainerName: "", + PodUID: "", + }, + expectedError: false, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + result, err := ParseExternalData(tc.externalEnv) + + if tc.expectedError { + assert.Error(t, err) + } else { + assert.Equal(t, tc.expectedData, result) + } + }) + } +} diff --git a/comp/core/tagger/server/server.go b/comp/core/tagger/server/server.go index 5e323c43c7ee2..34a719f32c440 100644 --- a/comp/core/tagger/server/server.go +++ b/comp/core/tagger/server/server.go @@ -17,6 +17,7 @@ import ( "github.com/google/uuid" tagger "github.com/DataDog/datadog-agent/comp/core/tagger/def" + "github.com/DataDog/datadog-agent/comp/core/tagger/origindetection" "github.com/DataDog/datadog-agent/comp/core/tagger/proto" "github.com/DataDog/datadog-agent/comp/core/tagger/types" pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo/core" @@ -165,3 +166,22 @@ func (s *Server) TaggerFetchEntity(_ context.Context, in *pb.FetchEntityRequest) Tags: tags, }, nil } + +// TaggerGenerateContainerIDFromOriginInfo request the generation of a container ID from external data from the Tagger. +// This function takes an Origin Info but only uses the ExternalData part of it, this is done for backward compatibility. +func (s *Server) TaggerGenerateContainerIDFromOriginInfo(_ context.Context, in *pb.GenerateContainerIDFromOriginInfoRequest) (*pb.GenerateContainerIDFromOriginInfoResponse, error) { + generatedContainerID, err := s.taggerComponent.GenerateContainerIDFromOriginInfo(origindetection.OriginInfo{ + ExternalData: origindetection.ExternalData{ + Init: *in.ExternalData.Init, + ContainerName: *in.ExternalData.ContainerName, + PodUID: *in.ExternalData.PodUID, + }, + }) + if err != nil { + return nil, status.Errorf(codes.InvalidArgument, "%s", err) + } + + return &pb.GenerateContainerIDFromOriginInfoResponse{ + ContainerID: generatedContainerID, + }, nil +} diff --git a/comp/core/tagger/telemetry/telemetry.go b/comp/core/tagger/telemetry/telemetry.go index 8b50202dd2e99..97c7153d9c052 100644 --- a/comp/core/tagger/telemetry/telemetry.go +++ b/comp/core/tagger/telemetry/telemetry.go @@ -61,6 +61,10 @@ type Store struct { // notification with a group of events. Receives telemetry.Counter + // OriginInfoRequests tracks the number of requests to the Tagger + // to generate a container ID from Origin Info. + OriginInfoRequests telemetry.Counter + LowCardinalityQueries CardinalityTelemetry OrchestratorCardinalityQueries CardinalityTelemetry HighCardinalityQueries CardinalityTelemetry @@ -131,6 +135,12 @@ func NewStore(telemetryComp telemetry.Component) *Store { []string{}, "Number of of times the tagger has received a notification with a group of events", telemetry.Options{NoDoubleUnderscoreSep: true}), + // OriginInfoRequests tracks the number of requests to the tagger + // to generate a container ID from origin info. + OriginInfoRequests: telemetryComp.NewCounterWithOpts(subsystem, "origin_info_requests", + []string{"status"}, "Number of requests to the tagger to generate a container ID from origin info.", + telemetry.Options{NoDoubleUnderscoreSep: true}), + LowCardinalityQueries: newCardinalityTelemetry(queries, types.LowCardinalityString), OrchestratorCardinalityQueries: newCardinalityTelemetry(queries, types.OrchestratorCardinalityString), HighCardinalityQueries: newCardinalityTelemetry(queries, types.HighCardinalityString), diff --git a/go.mod b/go.mod index e44ee3eddac45..e8175e8cf0efb 100644 --- a/go.mod +++ b/go.mod @@ -37,6 +37,7 @@ replace ( github.com/DataDog/datadog-agent/comp/core/secrets => ./comp/core/secrets github.com/DataDog/datadog-agent/comp/core/status => ./comp/core/status github.com/DataDog/datadog-agent/comp/core/status/statusimpl => ./comp/core/status/statusimpl + github.com/DataDog/datadog-agent/comp/core/tagger/origindetection => ./comp/core/tagger/origindetection github.com/DataDog/datadog-agent/comp/core/tagger/tags => ./comp/core/tagger/tags github.com/DataDog/datadog-agent/comp/core/tagger/types => ./comp/core/tagger/types github.com/DataDog/datadog-agent/comp/core/tagger/utils => ./comp/core/tagger/utils @@ -653,6 +654,7 @@ require ( github.com/DataDog/datadog-agent/comp/core/secrets v0.59.0 github.com/DataDog/datadog-agent/comp/core/status v0.59.0-rc.6 github.com/DataDog/datadog-agent/comp/core/status/statusimpl v0.56.0-rc.3 + github.com/DataDog/datadog-agent/comp/core/tagger/origindetection v0.0.0-00010101000000-000000000000 github.com/DataDog/datadog-agent/comp/core/tagger/tags v0.0.0-00010101000000-000000000000 github.com/DataDog/datadog-agent/comp/core/tagger/types v0.59.0 github.com/DataDog/datadog-agent/comp/core/telemetry v0.59.0 diff --git a/go.work b/go.work index 880b236237204..c7c6ebf27d3ff 100644 --- a/go.work +++ b/go.work @@ -17,6 +17,7 @@ use ( comp/core/secrets comp/core/status comp/core/status/statusimpl + comp/core/tagger/origindetection comp/core/tagger/tags comp/core/tagger/types comp/core/tagger/utils diff --git a/modules.yml b/modules.yml index f9550b4b82943..291db46bc53cc 100644 --- a/modules.yml +++ b/modules.yml @@ -35,6 +35,7 @@ modules: comp/core/status: used_by_otel: true comp/core/status/statusimpl: default + comp/core/tagger/origindetection: default comp/core/tagger/tags: used_by_otel: true comp/core/tagger/types: diff --git a/pkg/proto/datadog/api/v1/api.proto b/pkg/proto/datadog/api/v1/api.proto index 1ffbfa02aa562..3e53e3aa7c773 100644 --- a/pkg/proto/datadog/api/v1/api.proto +++ b/pkg/proto/datadog/api/v1/api.proto @@ -51,6 +51,22 @@ service AgentSecure { }; }; + // Generates a container ID from Origin Info. + // can be called through the HTTP gateway, and entity will be returned as JSON: + // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ + // -XPOST -k -H "Content-Type: application/json" \ + // --data '{"externalDataInit": false,"externalDataPodUID": "54383382-cea3-49e3-9dda-325436ddd5b8","externalDataContainerName": "dd-trace-py"}' \ + // https://localhost:5001/v1/grpc/tagger/generate_container_id_from_origin_info + // { + // "containerID":"c9fd60251b5237467462dad48999815eb0025f367c6e1abe91e0bd787d5915fc" + // } + rpc TaggerGenerateContainerIDFromOriginInfo(datadog.model.v1.GenerateContainerIDFromOriginInfoRequest) returns (datadog.model.v1.GenerateContainerIDFromOriginInfoResponse) { + option (google.api.http) = { + post: "/v1/grpc/tagger/generate_container_id_from_origin_info" + body: "*" + }; + }; + // fetches an entity from the Tagger with the desired cardinality tags. // can be called through the HTTP gateway, and entity will be returned as JSON: // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ diff --git a/pkg/proto/datadog/model/v1/model.proto b/pkg/proto/datadog/model/v1/model.proto index 506f90fa95702..2d4f96d208483 100644 --- a/pkg/proto/datadog/model/v1/model.proto +++ b/pkg/proto/datadog/model/v1/model.proto @@ -73,6 +73,30 @@ message Entity { repeated string standardTags = 6; } +message GenerateContainerIDFromOriginInfoRequest { + // Nested message for the local data + message LocalData { + optional uint32 processID = 1; // Process ID of the container process on the host. + optional string containerID = 2; // Container ID send from the client. + optional uint64 inode = 3; // Cgroup inode of the container. + optional string podUID = 4; // Pod UID send from the client. + } + + // Nested message for the external data + message ExternalData { + optional bool init = 1; // Init is true if the container is an init container. + optional string containerName = 2; // Container name in the Kubernetes Pod spec. + optional string podUID = 3; // Pod UID in the Kubernetes Pod spec. + } + + optional LocalData localData = 1; // Local data for the container, generated by the client. + optional ExternalData externalData = 2; // External data for the container, generated by the Admission Controller. +} + +message GenerateContainerIDFromOriginInfoResponse { + string containerID = 1; +} + message FetchEntityRequest { EntityId id = 1; TagCardinality cardinality = 2; diff --git a/pkg/proto/pbgo/core/api.pb.go b/pkg/proto/pbgo/core/api.pb.go index 57de2030c617e..f99b9d0f48fbf 100644 --- a/pkg/proto/pbgo/core/api.pb.go +++ b/pkg/proto/pbgo/core/api.pb.go @@ -53,7 +53,7 @@ var file_datadog_api_v1_api_proto_rawDesc = []byte{ 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x76, 0x31, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x32, 0x80, 0x0d, 0x0a, 0x0b, 0x41, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x32, 0xe8, 0x0e, 0x0a, 0x0b, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x14, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, @@ -63,176 +63,194 @@ var file_datadog_api_v1_api_proto_rawDesc = []byte{ 0x61, 0x6d, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x30, 0x01, 0x12, 0x89, 0x01, 0x0a, - 0x11, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x12, 0x24, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, - 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, - 0x68, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2f, 0x66, 0x65, 0x74, 0x63, - 0x68, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x9b, 0x01, 0x0a, 0x17, 0x44, 0x6f, 0x67, - 0x73, 0x74, 0x61, 0x74, 0x73, 0x64, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x54, 0x72, 0x69, - 0x67, 0x67, 0x65, 0x72, 0x12, 0x27, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, - 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x54, - 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, - 0x01, 0x2a, 0x22, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x64, 0x6f, 0x67, - 0x73, 0x74, 0x61, 0x74, 0x73, 0x64, 0x2f, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x2f, 0x74, - 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x8c, 0x01, 0x0a, 0x17, 0x44, 0x6f, 0x67, 0x73, 0x74, - 0x61, 0x74, 0x73, 0x64, 0x53, 0x65, 0x74, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, - 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x1a, 0x25, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, - 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x64, 0x6f, - 0x67, 0x73, 0x74, 0x61, 0x74, 0x73, 0x64, 0x2f, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x2f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x10, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x78, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x26, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x94, 0x01, 0x0a, 0x12, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x48, 0x41, 0x12, 0x27, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, - 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x73, 0x5f, 0x68, 0x61, 0x12, 0x7d, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, 0x41, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x26, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x61, 0x12, 0xb3, 0x01, 0x0a, 0x1a, 0x57, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, - 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x57, 0x6f, - 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, - 0x67, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x57, - 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x77, - 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x30, 0x01, 0x12, 0xaf, 0x01, - 0x0a, 0x13, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, - 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, - 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x12, - 0x9b, 0x01, 0x0a, 0x19, 0x41, 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x32, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, - 0x61, 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x75, - 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x61, - 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x30, 0x01, 0x32, 0xe6, 0x01, - 0x0a, 0x0b, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x6f, 0x0a, - 0x10, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x12, 0x2c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, - 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, - 0x29, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x72, 0x65, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x15, 0x5a, 0x13, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x67, 0x6f, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6d, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x30, 0x01, 0x12, 0xe5, 0x01, 0x0a, + 0x27, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x72, + 0x69, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3a, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, + 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x46, + 0x72, 0x6f, 0x6d, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, + 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x4f, + 0x72, 0x69, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x3a, 0x01, 0x2a, 0x22, 0x36, 0x2f, 0x76, + 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2f, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, + 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x89, 0x01, 0x0a, 0x11, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x46, + 0x65, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x24, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, + 0x74, 0x63, 0x68, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x25, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, + 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x61, 0x67, + 0x67, 0x65, 0x72, 0x2f, 0x66, 0x65, 0x74, 0x63, 0x68, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x12, 0x9b, 0x01, 0x0a, 0x17, 0x44, 0x6f, 0x67, 0x73, 0x74, 0x61, 0x74, 0x73, 0x64, 0x43, 0x61, + 0x70, 0x74, 0x75, 0x72, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x27, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, + 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x22, 0x22, 0x2f, 0x76, 0x31, 0x2f, + 0x67, 0x72, 0x70, 0x63, 0x2f, 0x64, 0x6f, 0x67, 0x73, 0x74, 0x61, 0x74, 0x73, 0x64, 0x2f, 0x63, + 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x2f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x8c, + 0x01, 0x0a, 0x17, 0x44, 0x6f, 0x67, 0x73, 0x74, 0x61, 0x74, 0x73, 0x64, 0x53, 0x65, 0x74, 0x54, + 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x64, 0x61, 0x74, + 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, + 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x25, 0x2e, 0x64, 0x61, 0x74, 0x61, + 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x67, + 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x76, 0x31, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x64, 0x6f, 0x67, 0x73, 0x74, 0x61, 0x74, 0x73, 0x64, 0x2f, + 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x8f, 0x01, + 0x0a, 0x10, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x73, 0x12, 0x27, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x61, + 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, + 0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, + 0x78, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x26, 0x2e, 0x64, 0x61, 0x74, 0x61, + 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x76, + 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x94, 0x01, 0x0a, 0x12, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x48, 0x41, + 0x12, 0x27, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x61, 0x74, 0x61, + 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, + 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x5f, 0x68, 0x61, + 0x12, 0x7d, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x48, 0x41, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x26, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x01, 0x2a, 0x22, + 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x61, 0x12, + 0xb3, 0x01, 0x0a, 0x1a, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2f, + 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, 0x65, + 0x74, 0x61, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x30, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, + 0x65, 0x74, 0x61, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, + 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x6d, + 0x65, 0x74, 0x61, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x30, 0x01, 0x12, 0xaf, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, + 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, + 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x76, 0x31, + 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x9b, 0x01, 0x0a, 0x19, 0x41, 0x75, 0x74, 0x6f, + 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x32, 0x2e, + 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, + 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x61, 0x75, 0x74, 0x6f, 0x64, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x79, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x73, 0x30, 0x01, 0x32, 0xe6, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x6f, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x2c, 0x2e, 0x64, 0x61, 0x74, 0x61, + 0x64, 0x6f, 0x67, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, + 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, + 0x67, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, + 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, + 0x67, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, + 0x74, 0x46, 0x6c, 0x61, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x72, + 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x15, + 0x5a, 0x13, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x67, 0x6f, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var file_datadog_api_v1_api_proto_goTypes = []any{ - (*HostnameRequest)(nil), // 0: datadog.model.v1.HostnameRequest - (*StreamTagsRequest)(nil), // 1: datadog.model.v1.StreamTagsRequest - (*FetchEntityRequest)(nil), // 2: datadog.model.v1.FetchEntityRequest - (*CaptureTriggerRequest)(nil), // 3: datadog.model.v1.CaptureTriggerRequest - (*TaggerState)(nil), // 4: datadog.model.v1.TaggerState - (*ClientGetConfigsRequest)(nil), // 5: datadog.config.ClientGetConfigsRequest - (*empty.Empty)(nil), // 6: google.protobuf.Empty - (*WorkloadmetaStreamRequest)(nil), // 7: datadog.workloadmeta.WorkloadmetaStreamRequest - (*RegisterRemoteAgentRequest)(nil), // 8: datadog.remoteagent.RegisterRemoteAgentRequest - (*GetStatusDetailsRequest)(nil), // 9: datadog.remoteagent.GetStatusDetailsRequest - (*GetFlareFilesRequest)(nil), // 10: datadog.remoteagent.GetFlareFilesRequest - (*HostnameReply)(nil), // 11: datadog.model.v1.HostnameReply - (*StreamTagsResponse)(nil), // 12: datadog.model.v1.StreamTagsResponse - (*FetchEntityResponse)(nil), // 13: datadog.model.v1.FetchEntityResponse - (*CaptureTriggerResponse)(nil), // 14: datadog.model.v1.CaptureTriggerResponse - (*TaggerStateResponse)(nil), // 15: datadog.model.v1.TaggerStateResponse - (*ClientGetConfigsResponse)(nil), // 16: datadog.config.ClientGetConfigsResponse - (*GetStateConfigResponse)(nil), // 17: datadog.config.GetStateConfigResponse - (*WorkloadmetaStreamResponse)(nil), // 18: datadog.workloadmeta.WorkloadmetaStreamResponse - (*RegisterRemoteAgentResponse)(nil), // 19: datadog.remoteagent.RegisterRemoteAgentResponse - (*AutodiscoveryStreamResponse)(nil), // 20: datadog.autodiscovery.AutodiscoveryStreamResponse - (*GetStatusDetailsResponse)(nil), // 21: datadog.remoteagent.GetStatusDetailsResponse - (*GetFlareFilesResponse)(nil), // 22: datadog.remoteagent.GetFlareFilesResponse + (*HostnameRequest)(nil), // 0: datadog.model.v1.HostnameRequest + (*StreamTagsRequest)(nil), // 1: datadog.model.v1.StreamTagsRequest + (*GenerateContainerIDFromOriginInfoRequest)(nil), // 2: datadog.model.v1.GenerateContainerIDFromOriginInfoRequest + (*FetchEntityRequest)(nil), // 3: datadog.model.v1.FetchEntityRequest + (*CaptureTriggerRequest)(nil), // 4: datadog.model.v1.CaptureTriggerRequest + (*TaggerState)(nil), // 5: datadog.model.v1.TaggerState + (*ClientGetConfigsRequest)(nil), // 6: datadog.config.ClientGetConfigsRequest + (*empty.Empty)(nil), // 7: google.protobuf.Empty + (*WorkloadmetaStreamRequest)(nil), // 8: datadog.workloadmeta.WorkloadmetaStreamRequest + (*RegisterRemoteAgentRequest)(nil), // 9: datadog.remoteagent.RegisterRemoteAgentRequest + (*GetStatusDetailsRequest)(nil), // 10: datadog.remoteagent.GetStatusDetailsRequest + (*GetFlareFilesRequest)(nil), // 11: datadog.remoteagent.GetFlareFilesRequest + (*HostnameReply)(nil), // 12: datadog.model.v1.HostnameReply + (*StreamTagsResponse)(nil), // 13: datadog.model.v1.StreamTagsResponse + (*GenerateContainerIDFromOriginInfoResponse)(nil), // 14: datadog.model.v1.GenerateContainerIDFromOriginInfoResponse + (*FetchEntityResponse)(nil), // 15: datadog.model.v1.FetchEntityResponse + (*CaptureTriggerResponse)(nil), // 16: datadog.model.v1.CaptureTriggerResponse + (*TaggerStateResponse)(nil), // 17: datadog.model.v1.TaggerStateResponse + (*ClientGetConfigsResponse)(nil), // 18: datadog.config.ClientGetConfigsResponse + (*GetStateConfigResponse)(nil), // 19: datadog.config.GetStateConfigResponse + (*WorkloadmetaStreamResponse)(nil), // 20: datadog.workloadmeta.WorkloadmetaStreamResponse + (*RegisterRemoteAgentResponse)(nil), // 21: datadog.remoteagent.RegisterRemoteAgentResponse + (*AutodiscoveryStreamResponse)(nil), // 22: datadog.autodiscovery.AutodiscoveryStreamResponse + (*GetStatusDetailsResponse)(nil), // 23: datadog.remoteagent.GetStatusDetailsResponse + (*GetFlareFilesResponse)(nil), // 24: datadog.remoteagent.GetFlareFilesResponse } var file_datadog_api_v1_api_proto_depIdxs = []int32{ 0, // 0: datadog.api.v1.Agent.GetHostname:input_type -> datadog.model.v1.HostnameRequest 1, // 1: datadog.api.v1.AgentSecure.TaggerStreamEntities:input_type -> datadog.model.v1.StreamTagsRequest - 2, // 2: datadog.api.v1.AgentSecure.TaggerFetchEntity:input_type -> datadog.model.v1.FetchEntityRequest - 3, // 3: datadog.api.v1.AgentSecure.DogstatsdCaptureTrigger:input_type -> datadog.model.v1.CaptureTriggerRequest - 4, // 4: datadog.api.v1.AgentSecure.DogstatsdSetTaggerState:input_type -> datadog.model.v1.TaggerState - 5, // 5: datadog.api.v1.AgentSecure.ClientGetConfigs:input_type -> datadog.config.ClientGetConfigsRequest - 6, // 6: datadog.api.v1.AgentSecure.GetConfigState:input_type -> google.protobuf.Empty - 5, // 7: datadog.api.v1.AgentSecure.ClientGetConfigsHA:input_type -> datadog.config.ClientGetConfigsRequest - 6, // 8: datadog.api.v1.AgentSecure.GetConfigStateHA:input_type -> google.protobuf.Empty - 7, // 9: datadog.api.v1.AgentSecure.WorkloadmetaStreamEntities:input_type -> datadog.workloadmeta.WorkloadmetaStreamRequest - 8, // 10: datadog.api.v1.AgentSecure.RegisterRemoteAgent:input_type -> datadog.remoteagent.RegisterRemoteAgentRequest - 6, // 11: datadog.api.v1.AgentSecure.AutodiscoveryStreamConfig:input_type -> google.protobuf.Empty - 9, // 12: datadog.api.v1.RemoteAgent.GetStatusDetails:input_type -> datadog.remoteagent.GetStatusDetailsRequest - 10, // 13: datadog.api.v1.RemoteAgent.GetFlareFiles:input_type -> datadog.remoteagent.GetFlareFilesRequest - 11, // 14: datadog.api.v1.Agent.GetHostname:output_type -> datadog.model.v1.HostnameReply - 12, // 15: datadog.api.v1.AgentSecure.TaggerStreamEntities:output_type -> datadog.model.v1.StreamTagsResponse - 13, // 16: datadog.api.v1.AgentSecure.TaggerFetchEntity:output_type -> datadog.model.v1.FetchEntityResponse - 14, // 17: datadog.api.v1.AgentSecure.DogstatsdCaptureTrigger:output_type -> datadog.model.v1.CaptureTriggerResponse - 15, // 18: datadog.api.v1.AgentSecure.DogstatsdSetTaggerState:output_type -> datadog.model.v1.TaggerStateResponse - 16, // 19: datadog.api.v1.AgentSecure.ClientGetConfigs:output_type -> datadog.config.ClientGetConfigsResponse - 17, // 20: datadog.api.v1.AgentSecure.GetConfigState:output_type -> datadog.config.GetStateConfigResponse - 16, // 21: datadog.api.v1.AgentSecure.ClientGetConfigsHA:output_type -> datadog.config.ClientGetConfigsResponse - 17, // 22: datadog.api.v1.AgentSecure.GetConfigStateHA:output_type -> datadog.config.GetStateConfigResponse - 18, // 23: datadog.api.v1.AgentSecure.WorkloadmetaStreamEntities:output_type -> datadog.workloadmeta.WorkloadmetaStreamResponse - 19, // 24: datadog.api.v1.AgentSecure.RegisterRemoteAgent:output_type -> datadog.remoteagent.RegisterRemoteAgentResponse - 20, // 25: datadog.api.v1.AgentSecure.AutodiscoveryStreamConfig:output_type -> datadog.autodiscovery.AutodiscoveryStreamResponse - 21, // 26: datadog.api.v1.RemoteAgent.GetStatusDetails:output_type -> datadog.remoteagent.GetStatusDetailsResponse - 22, // 27: datadog.api.v1.RemoteAgent.GetFlareFiles:output_type -> datadog.remoteagent.GetFlareFilesResponse - 14, // [14:28] is the sub-list for method output_type - 0, // [0:14] is the sub-list for method input_type + 2, // 2: datadog.api.v1.AgentSecure.TaggerGenerateContainerIDFromOriginInfo:input_type -> datadog.model.v1.GenerateContainerIDFromOriginInfoRequest + 3, // 3: datadog.api.v1.AgentSecure.TaggerFetchEntity:input_type -> datadog.model.v1.FetchEntityRequest + 4, // 4: datadog.api.v1.AgentSecure.DogstatsdCaptureTrigger:input_type -> datadog.model.v1.CaptureTriggerRequest + 5, // 5: datadog.api.v1.AgentSecure.DogstatsdSetTaggerState:input_type -> datadog.model.v1.TaggerState + 6, // 6: datadog.api.v1.AgentSecure.ClientGetConfigs:input_type -> datadog.config.ClientGetConfigsRequest + 7, // 7: datadog.api.v1.AgentSecure.GetConfigState:input_type -> google.protobuf.Empty + 6, // 8: datadog.api.v1.AgentSecure.ClientGetConfigsHA:input_type -> datadog.config.ClientGetConfigsRequest + 7, // 9: datadog.api.v1.AgentSecure.GetConfigStateHA:input_type -> google.protobuf.Empty + 8, // 10: datadog.api.v1.AgentSecure.WorkloadmetaStreamEntities:input_type -> datadog.workloadmeta.WorkloadmetaStreamRequest + 9, // 11: datadog.api.v1.AgentSecure.RegisterRemoteAgent:input_type -> datadog.remoteagent.RegisterRemoteAgentRequest + 7, // 12: datadog.api.v1.AgentSecure.AutodiscoveryStreamConfig:input_type -> google.protobuf.Empty + 10, // 13: datadog.api.v1.RemoteAgent.GetStatusDetails:input_type -> datadog.remoteagent.GetStatusDetailsRequest + 11, // 14: datadog.api.v1.RemoteAgent.GetFlareFiles:input_type -> datadog.remoteagent.GetFlareFilesRequest + 12, // 15: datadog.api.v1.Agent.GetHostname:output_type -> datadog.model.v1.HostnameReply + 13, // 16: datadog.api.v1.AgentSecure.TaggerStreamEntities:output_type -> datadog.model.v1.StreamTagsResponse + 14, // 17: datadog.api.v1.AgentSecure.TaggerGenerateContainerIDFromOriginInfo:output_type -> datadog.model.v1.GenerateContainerIDFromOriginInfoResponse + 15, // 18: datadog.api.v1.AgentSecure.TaggerFetchEntity:output_type -> datadog.model.v1.FetchEntityResponse + 16, // 19: datadog.api.v1.AgentSecure.DogstatsdCaptureTrigger:output_type -> datadog.model.v1.CaptureTriggerResponse + 17, // 20: datadog.api.v1.AgentSecure.DogstatsdSetTaggerState:output_type -> datadog.model.v1.TaggerStateResponse + 18, // 21: datadog.api.v1.AgentSecure.ClientGetConfigs:output_type -> datadog.config.ClientGetConfigsResponse + 19, // 22: datadog.api.v1.AgentSecure.GetConfigState:output_type -> datadog.config.GetStateConfigResponse + 18, // 23: datadog.api.v1.AgentSecure.ClientGetConfigsHA:output_type -> datadog.config.ClientGetConfigsResponse + 19, // 24: datadog.api.v1.AgentSecure.GetConfigStateHA:output_type -> datadog.config.GetStateConfigResponse + 20, // 25: datadog.api.v1.AgentSecure.WorkloadmetaStreamEntities:output_type -> datadog.workloadmeta.WorkloadmetaStreamResponse + 21, // 26: datadog.api.v1.AgentSecure.RegisterRemoteAgent:output_type -> datadog.remoteagent.RegisterRemoteAgentResponse + 22, // 27: datadog.api.v1.AgentSecure.AutodiscoveryStreamConfig:output_type -> datadog.autodiscovery.AutodiscoveryStreamResponse + 23, // 28: datadog.api.v1.RemoteAgent.GetStatusDetails:output_type -> datadog.remoteagent.GetStatusDetailsResponse + 24, // 29: datadog.api.v1.RemoteAgent.GetFlareFiles:output_type -> datadog.remoteagent.GetFlareFilesResponse + 15, // [15:30] is the sub-list for method output_type + 0, // [0:15] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name @@ -375,6 +393,17 @@ type AgentSecureClient interface { // } // } TaggerStreamEntities(ctx context.Context, in *StreamTagsRequest, opts ...grpc.CallOption) (AgentSecure_TaggerStreamEntitiesClient, error) + // Generates a container ID from Origin Info. + // can be called through the HTTP gateway, and entity will be returned as JSON: + // + // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ + // -XPOST -k -H "Content-Type: application/json" \ + // --data '{"externalDataInit": false,"externalDataPodUID": "54383382-cea3-49e3-9dda-325436ddd5b8","externalDataContainerName": "dd-trace-py"}' \ + // https://localhost:5001/v1/grpc/tagger/generate_container_id_from_origin_info + // { + // "containerID":"c9fd60251b5237467462dad48999815eb0025f367c6e1abe91e0bd787d5915fc" + // } + TaggerGenerateContainerIDFromOriginInfo(ctx context.Context, in *GenerateContainerIDFromOriginInfoRequest, opts ...grpc.CallOption) (*GenerateContainerIDFromOriginInfoResponse, error) // fetches an entity from the Tagger with the desired cardinality tags. // can be called through the HTTP gateway, and entity will be returned as JSON: // @@ -477,6 +506,15 @@ func (x *agentSecureTaggerStreamEntitiesClient) Recv() (*StreamTagsResponse, err return m, nil } +func (c *agentSecureClient) TaggerGenerateContainerIDFromOriginInfo(ctx context.Context, in *GenerateContainerIDFromOriginInfoRequest, opts ...grpc.CallOption) (*GenerateContainerIDFromOriginInfoResponse, error) { + out := new(GenerateContainerIDFromOriginInfoResponse) + err := c.cc.Invoke(ctx, "/datadog.api.v1.AgentSecure/TaggerGenerateContainerIDFromOriginInfo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *agentSecureClient) TaggerFetchEntity(ctx context.Context, in *FetchEntityRequest, opts ...grpc.CallOption) (*FetchEntityResponse, error) { out := new(FetchEntityResponse) err := c.cc.Invoke(ctx, "/datadog.api.v1.AgentSecure/TaggerFetchEntity", in, out, opts...) @@ -637,6 +675,17 @@ type AgentSecureServer interface { // } // } TaggerStreamEntities(*StreamTagsRequest, AgentSecure_TaggerStreamEntitiesServer) error + // Generates a container ID from Origin Info. + // can be called through the HTTP gateway, and entity will be returned as JSON: + // + // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ + // -XPOST -k -H "Content-Type: application/json" \ + // --data '{"externalDataInit": false,"externalDataPodUID": "54383382-cea3-49e3-9dda-325436ddd5b8","externalDataContainerName": "dd-trace-py"}' \ + // https://localhost:5001/v1/grpc/tagger/generate_container_id_from_origin_info + // { + // "containerID":"c9fd60251b5237467462dad48999815eb0025f367c6e1abe91e0bd787d5915fc" + // } + TaggerGenerateContainerIDFromOriginInfo(context.Context, *GenerateContainerIDFromOriginInfoRequest) (*GenerateContainerIDFromOriginInfoResponse, error) // fetches an entity from the Tagger with the desired cardinality tags. // can be called through the HTTP gateway, and entity will be returned as JSON: // @@ -706,6 +755,9 @@ type UnimplementedAgentSecureServer struct { func (*UnimplementedAgentSecureServer) TaggerStreamEntities(*StreamTagsRequest, AgentSecure_TaggerStreamEntitiesServer) error { return status.Errorf(codes.Unimplemented, "method TaggerStreamEntities not implemented") } +func (*UnimplementedAgentSecureServer) TaggerGenerateContainerIDFromOriginInfo(context.Context, *GenerateContainerIDFromOriginInfoRequest) (*GenerateContainerIDFromOriginInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TaggerGenerateContainerIDFromOriginInfo not implemented") +} func (*UnimplementedAgentSecureServer) TaggerFetchEntity(context.Context, *FetchEntityRequest) (*FetchEntityResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method TaggerFetchEntity not implemented") } @@ -762,6 +814,24 @@ func (x *agentSecureTaggerStreamEntitiesServer) Send(m *StreamTagsResponse) erro return x.ServerStream.SendMsg(m) } +func _AgentSecure_TaggerGenerateContainerIDFromOriginInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GenerateContainerIDFromOriginInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentSecureServer).TaggerGenerateContainerIDFromOriginInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/datadog.api.v1.AgentSecure/TaggerGenerateContainerIDFromOriginInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentSecureServer).TaggerGenerateContainerIDFromOriginInfo(ctx, req.(*GenerateContainerIDFromOriginInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _AgentSecure_TaggerFetchEntity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(FetchEntityRequest) if err := dec(in); err != nil { @@ -952,6 +1022,10 @@ var _AgentSecure_serviceDesc = grpc.ServiceDesc{ ServiceName: "datadog.api.v1.AgentSecure", HandlerType: (*AgentSecureServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "TaggerGenerateContainerIDFromOriginInfo", + Handler: _AgentSecure_TaggerGenerateContainerIDFromOriginInfo_Handler, + }, { MethodName: "TaggerFetchEntity", Handler: _AgentSecure_TaggerFetchEntity_Handler, diff --git a/pkg/proto/pbgo/core/api.pb.gw.go b/pkg/proto/pbgo/core/api.pb.gw.go index 0fac62a1daa72..7be078c4eb534 100644 --- a/pkg/proto/pbgo/core/api.pb.gw.go +++ b/pkg/proto/pbgo/core/api.pb.gw.go @@ -77,6 +77,40 @@ func request_AgentSecure_TaggerStreamEntities_0(ctx context.Context, marshaler r } +func request_AgentSecure_TaggerGenerateContainerIDFromOriginInfo_0(ctx context.Context, marshaler runtime.Marshaler, client AgentSecureClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GenerateContainerIDFromOriginInfoRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.TaggerGenerateContainerIDFromOriginInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_AgentSecure_TaggerGenerateContainerIDFromOriginInfo_0(ctx context.Context, marshaler runtime.Marshaler, server AgentSecureServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GenerateContainerIDFromOriginInfoRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.TaggerGenerateContainerIDFromOriginInfo(ctx, &protoReq) + return msg, metadata, err + +} + func request_AgentSecure_TaggerFetchEntity_0(ctx context.Context, marshaler runtime.Marshaler, client AgentSecureClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq FetchEntityRequest var metadata runtime.ServerMetadata @@ -444,6 +478,29 @@ func RegisterAgentSecureHandlerServer(ctx context.Context, mux *runtime.ServeMux return }) + mux.Handle("POST", pattern_AgentSecure_TaggerGenerateContainerIDFromOriginInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_AgentSecure_TaggerGenerateContainerIDFromOriginInfo_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AgentSecure_TaggerGenerateContainerIDFromOriginInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_AgentSecure_TaggerFetchEntity_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -772,6 +829,26 @@ func RegisterAgentSecureHandlerClient(ctx context.Context, mux *runtime.ServeMux }) + mux.Handle("POST", pattern_AgentSecure_TaggerGenerateContainerIDFromOriginInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AgentSecure_TaggerGenerateContainerIDFromOriginInfo_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_AgentSecure_TaggerGenerateContainerIDFromOriginInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_AgentSecure_TaggerFetchEntity_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -978,6 +1055,8 @@ func RegisterAgentSecureHandlerClient(ctx context.Context, mux *runtime.ServeMux var ( pattern_AgentSecure_TaggerStreamEntities_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "grpc", "tagger", "stream_entities"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_AgentSecure_TaggerGenerateContainerIDFromOriginInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "grpc", "tagger", "generate_container_id_from_origin_info"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_AgentSecure_TaggerFetchEntity_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v1", "grpc", "tagger", "fetch_entity"}, "", runtime.AssumeColonVerbOpt(true))) pattern_AgentSecure_DogstatsdCaptureTrigger_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"v1", "grpc", "dogstatsd", "capture", "trigger"}, "", runtime.AssumeColonVerbOpt(true))) @@ -1002,6 +1081,8 @@ var ( var ( forward_AgentSecure_TaggerStreamEntities_0 = runtime.ForwardResponseStream + forward_AgentSecure_TaggerGenerateContainerIDFromOriginInfo_0 = runtime.ForwardResponseMessage + forward_AgentSecure_TaggerFetchEntity_0 = runtime.ForwardResponseMessage forward_AgentSecure_DogstatsdCaptureTrigger_0 = runtime.ForwardResponseMessage diff --git a/pkg/proto/pbgo/core/model.pb.go b/pkg/proto/pbgo/core/model.pb.go index 3f85da4236b7f..016a2cf53e260 100644 --- a/pkg/proto/pbgo/core/model.pb.go +++ b/pkg/proto/pbgo/core/model.pb.go @@ -628,6 +628,104 @@ func (x *Entity) GetStandardTags() []string { return nil } +type GenerateContainerIDFromOriginInfoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LocalData *GenerateContainerIDFromOriginInfoRequest_LocalData `protobuf:"bytes,1,opt,name=localData,proto3,oneof" json:"localData,omitempty"` // Local data for the container, generated by the client. + ExternalData *GenerateContainerIDFromOriginInfoRequest_ExternalData `protobuf:"bytes,2,opt,name=externalData,proto3,oneof" json:"externalData,omitempty"` // External data for the container, generated by the Admission Controller. +} + +func (x *GenerateContainerIDFromOriginInfoRequest) Reset() { + *x = GenerateContainerIDFromOriginInfoRequest{} + mi := &file_datadog_model_v1_model_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GenerateContainerIDFromOriginInfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateContainerIDFromOriginInfoRequest) ProtoMessage() {} + +func (x *GenerateContainerIDFromOriginInfoRequest) ProtoReflect() protoreflect.Message { + mi := &file_datadog_model_v1_model_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenerateContainerIDFromOriginInfoRequest.ProtoReflect.Descriptor instead. +func (*GenerateContainerIDFromOriginInfoRequest) Descriptor() ([]byte, []int) { + return file_datadog_model_v1_model_proto_rawDescGZIP(), []int{9} +} + +func (x *GenerateContainerIDFromOriginInfoRequest) GetLocalData() *GenerateContainerIDFromOriginInfoRequest_LocalData { + if x != nil { + return x.LocalData + } + return nil +} + +func (x *GenerateContainerIDFromOriginInfoRequest) GetExternalData() *GenerateContainerIDFromOriginInfoRequest_ExternalData { + if x != nil { + return x.ExternalData + } + return nil +} + +type GenerateContainerIDFromOriginInfoResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ContainerID string `protobuf:"bytes,1,opt,name=containerID,proto3" json:"containerID,omitempty"` +} + +func (x *GenerateContainerIDFromOriginInfoResponse) Reset() { + *x = GenerateContainerIDFromOriginInfoResponse{} + mi := &file_datadog_model_v1_model_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GenerateContainerIDFromOriginInfoResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateContainerIDFromOriginInfoResponse) ProtoMessage() {} + +func (x *GenerateContainerIDFromOriginInfoResponse) ProtoReflect() protoreflect.Message { + mi := &file_datadog_model_v1_model_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenerateContainerIDFromOriginInfoResponse.ProtoReflect.Descriptor instead. +func (*GenerateContainerIDFromOriginInfoResponse) Descriptor() ([]byte, []int) { + return file_datadog_model_v1_model_proto_rawDescGZIP(), []int{10} +} + +func (x *GenerateContainerIDFromOriginInfoResponse) GetContainerID() string { + if x != nil { + return x.ContainerID + } + return "" +} + type FetchEntityRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -639,7 +737,7 @@ type FetchEntityRequest struct { func (x *FetchEntityRequest) Reset() { *x = FetchEntityRequest{} - mi := &file_datadog_model_v1_model_proto_msgTypes[9] + mi := &file_datadog_model_v1_model_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -651,7 +749,7 @@ func (x *FetchEntityRequest) String() string { func (*FetchEntityRequest) ProtoMessage() {} func (x *FetchEntityRequest) ProtoReflect() protoreflect.Message { - mi := &file_datadog_model_v1_model_proto_msgTypes[9] + mi := &file_datadog_model_v1_model_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -664,7 +762,7 @@ func (x *FetchEntityRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FetchEntityRequest.ProtoReflect.Descriptor instead. func (*FetchEntityRequest) Descriptor() ([]byte, []int) { - return file_datadog_model_v1_model_proto_rawDescGZIP(), []int{9} + return file_datadog_model_v1_model_proto_rawDescGZIP(), []int{11} } func (x *FetchEntityRequest) GetId() *EntityId { @@ -693,7 +791,7 @@ type FetchEntityResponse struct { func (x *FetchEntityResponse) Reset() { *x = FetchEntityResponse{} - mi := &file_datadog_model_v1_model_proto_msgTypes[10] + mi := &file_datadog_model_v1_model_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -705,7 +803,7 @@ func (x *FetchEntityResponse) String() string { func (*FetchEntityResponse) ProtoMessage() {} func (x *FetchEntityResponse) ProtoReflect() protoreflect.Message { - mi := &file_datadog_model_v1_model_proto_msgTypes[10] + mi := &file_datadog_model_v1_model_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -718,7 +816,7 @@ func (x *FetchEntityResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FetchEntityResponse.ProtoReflect.Descriptor instead. func (*FetchEntityResponse) Descriptor() ([]byte, []int) { - return file_datadog_model_v1_model_proto_rawDescGZIP(), []int{10} + return file_datadog_model_v1_model_proto_rawDescGZIP(), []int{12} } func (x *FetchEntityResponse) GetId() *EntityId { @@ -753,7 +851,7 @@ type EntityId struct { func (x *EntityId) Reset() { *x = EntityId{} - mi := &file_datadog_model_v1_model_proto_msgTypes[11] + mi := &file_datadog_model_v1_model_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -765,7 +863,7 @@ func (x *EntityId) String() string { func (*EntityId) ProtoMessage() {} func (x *EntityId) ProtoReflect() protoreflect.Message { - mi := &file_datadog_model_v1_model_proto_msgTypes[11] + mi := &file_datadog_model_v1_model_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -778,7 +876,7 @@ func (x *EntityId) ProtoReflect() protoreflect.Message { // Deprecated: Use EntityId.ProtoReflect.Descriptor instead. func (*EntityId) Descriptor() ([]byte, []int) { - return file_datadog_model_v1_model_proto_rawDescGZIP(), []int{11} + return file_datadog_model_v1_model_proto_rawDescGZIP(), []int{13} } func (x *EntityId) GetPrefix() string { @@ -812,7 +910,7 @@ type UnixDogstatsdMsg struct { func (x *UnixDogstatsdMsg) Reset() { *x = UnixDogstatsdMsg{} - mi := &file_datadog_model_v1_model_proto_msgTypes[12] + mi := &file_datadog_model_v1_model_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -824,7 +922,7 @@ func (x *UnixDogstatsdMsg) String() string { func (*UnixDogstatsdMsg) ProtoMessage() {} func (x *UnixDogstatsdMsg) ProtoReflect() protoreflect.Message { - mi := &file_datadog_model_v1_model_proto_msgTypes[12] + mi := &file_datadog_model_v1_model_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -837,7 +935,7 @@ func (x *UnixDogstatsdMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use UnixDogstatsdMsg.ProtoReflect.Descriptor instead. func (*UnixDogstatsdMsg) Descriptor() ([]byte, []int) { - return file_datadog_model_v1_model_proto_rawDescGZIP(), []int{12} + return file_datadog_model_v1_model_proto_rawDescGZIP(), []int{14} } func (x *UnixDogstatsdMsg) GetTimestamp() int64 { @@ -893,7 +991,7 @@ type TaggerState struct { func (x *TaggerState) Reset() { *x = TaggerState{} - mi := &file_datadog_model_v1_model_proto_msgTypes[13] + mi := &file_datadog_model_v1_model_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -905,7 +1003,7 @@ func (x *TaggerState) String() string { func (*TaggerState) ProtoMessage() {} func (x *TaggerState) ProtoReflect() protoreflect.Message { - mi := &file_datadog_model_v1_model_proto_msgTypes[13] + mi := &file_datadog_model_v1_model_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -918,7 +1016,7 @@ func (x *TaggerState) ProtoReflect() protoreflect.Message { // Deprecated: Use TaggerState.ProtoReflect.Descriptor instead. func (*TaggerState) Descriptor() ([]byte, []int) { - return file_datadog_model_v1_model_proto_rawDescGZIP(), []int{13} + return file_datadog_model_v1_model_proto_rawDescGZIP(), []int{15} } func (x *TaggerState) GetState() map[string]*Entity { @@ -945,7 +1043,7 @@ type TaggerStateResponse struct { func (x *TaggerStateResponse) Reset() { *x = TaggerStateResponse{} - mi := &file_datadog_model_v1_model_proto_msgTypes[14] + mi := &file_datadog_model_v1_model_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -957,7 +1055,7 @@ func (x *TaggerStateResponse) String() string { func (*TaggerStateResponse) ProtoMessage() {} func (x *TaggerStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_datadog_model_v1_model_proto_msgTypes[14] + mi := &file_datadog_model_v1_model_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -970,7 +1068,7 @@ func (x *TaggerStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TaggerStateResponse.ProtoReflect.Descriptor instead. func (*TaggerStateResponse) Descriptor() ([]byte, []int) { - return file_datadog_model_v1_model_proto_rawDescGZIP(), []int{14} + return file_datadog_model_v1_model_proto_rawDescGZIP(), []int{16} } func (x *TaggerStateResponse) GetLoaded() bool { @@ -980,6 +1078,138 @@ func (x *TaggerStateResponse) GetLoaded() bool { return false } +// Nested message for the local data +type GenerateContainerIDFromOriginInfoRequest_LocalData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProcessID *uint32 `protobuf:"varint,1,opt,name=processID,proto3,oneof" json:"processID,omitempty"` // Process ID of the container process on the host. + ContainerID *string `protobuf:"bytes,2,opt,name=containerID,proto3,oneof" json:"containerID,omitempty"` // Container ID send from the client. + Inode *uint64 `protobuf:"varint,3,opt,name=inode,proto3,oneof" json:"inode,omitempty"` // Cgroup inode of the container. + PodUID *string `protobuf:"bytes,4,opt,name=podUID,proto3,oneof" json:"podUID,omitempty"` // Pod UID send from the client. +} + +func (x *GenerateContainerIDFromOriginInfoRequest_LocalData) Reset() { + *x = GenerateContainerIDFromOriginInfoRequest_LocalData{} + mi := &file_datadog_model_v1_model_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GenerateContainerIDFromOriginInfoRequest_LocalData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateContainerIDFromOriginInfoRequest_LocalData) ProtoMessage() {} + +func (x *GenerateContainerIDFromOriginInfoRequest_LocalData) ProtoReflect() protoreflect.Message { + mi := &file_datadog_model_v1_model_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenerateContainerIDFromOriginInfoRequest_LocalData.ProtoReflect.Descriptor instead. +func (*GenerateContainerIDFromOriginInfoRequest_LocalData) Descriptor() ([]byte, []int) { + return file_datadog_model_v1_model_proto_rawDescGZIP(), []int{9, 0} +} + +func (x *GenerateContainerIDFromOriginInfoRequest_LocalData) GetProcessID() uint32 { + if x != nil && x.ProcessID != nil { + return *x.ProcessID + } + return 0 +} + +func (x *GenerateContainerIDFromOriginInfoRequest_LocalData) GetContainerID() string { + if x != nil && x.ContainerID != nil { + return *x.ContainerID + } + return "" +} + +func (x *GenerateContainerIDFromOriginInfoRequest_LocalData) GetInode() uint64 { + if x != nil && x.Inode != nil { + return *x.Inode + } + return 0 +} + +func (x *GenerateContainerIDFromOriginInfoRequest_LocalData) GetPodUID() string { + if x != nil && x.PodUID != nil { + return *x.PodUID + } + return "" +} + +// Nested message for the external data +type GenerateContainerIDFromOriginInfoRequest_ExternalData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Init *bool `protobuf:"varint,1,opt,name=init,proto3,oneof" json:"init,omitempty"` // Init is true if the container is an init container. + ContainerName *string `protobuf:"bytes,2,opt,name=containerName,proto3,oneof" json:"containerName,omitempty"` // Container name as seen by the Admission Controller. + PodUID *string `protobuf:"bytes,3,opt,name=podUID,proto3,oneof" json:"podUID,omitempty"` // Pod UID as seen by the Admission Controller. +} + +func (x *GenerateContainerIDFromOriginInfoRequest_ExternalData) Reset() { + *x = GenerateContainerIDFromOriginInfoRequest_ExternalData{} + mi := &file_datadog_model_v1_model_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GenerateContainerIDFromOriginInfoRequest_ExternalData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateContainerIDFromOriginInfoRequest_ExternalData) ProtoMessage() {} + +func (x *GenerateContainerIDFromOriginInfoRequest_ExternalData) ProtoReflect() protoreflect.Message { + mi := &file_datadog_model_v1_model_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenerateContainerIDFromOriginInfoRequest_ExternalData.ProtoReflect.Descriptor instead. +func (*GenerateContainerIDFromOriginInfoRequest_ExternalData) Descriptor() ([]byte, []int) { + return file_datadog_model_v1_model_proto_rawDescGZIP(), []int{9, 1} +} + +func (x *GenerateContainerIDFromOriginInfoRequest_ExternalData) GetInit() bool { + if x != nil && x.Init != nil { + return *x.Init + } + return false +} + +func (x *GenerateContainerIDFromOriginInfoRequest_ExternalData) GetContainerName() string { + if x != nil && x.ContainerName != nil { + return *x.ContainerName + } + return "" +} + +func (x *GenerateContainerIDFromOriginInfoRequest_ExternalData) GetPodUID() string { + if x != nil && x.PodUID != nil { + return *x.PodUID + } + return "" +} + var File_datadog_model_v1_model_proto protoreflect.FileDescriptor var file_datadog_model_v1_model_proto_rawDesc = []byte{ @@ -1055,70 +1285,115 @@ var file_datadog_model_v1_model_proto_rawDesc = []byte{ 0x43, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x61, 0x67, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x54, 0x61, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x54, - 0x61, 0x67, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x12, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, - 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x0b, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x64, 0x61, - 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x61, 0x67, 0x43, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0b, 0x63, - 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x99, 0x01, 0x0a, 0x13, 0x46, - 0x65, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, - 0x0a, 0x0b, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x61, 0x72, 0x64, 0x69, 0x6e, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0b, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, - 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0x34, 0x0a, 0x08, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0xc2, 0x01, 0x0a, - 0x10, 0x55, 0x6e, 0x69, 0x78, 0x44, 0x6f, 0x67, 0x73, 0x74, 0x61, 0x74, 0x73, 0x64, 0x4d, 0x73, - 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x70, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x24, 0x0a, - 0x0d, 0x61, 0x6e, 0x63, 0x69, 0x6c, 0x6c, 0x61, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x61, 0x6e, 0x63, 0x69, 0x6c, 0x6c, 0x61, 0x72, 0x79, 0x53, - 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6e, 0x63, 0x69, 0x6c, 0x6c, 0x61, 0x72, 0x79, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x61, 0x6e, 0x63, 0x69, 0x6c, 0x6c, 0x61, 0x72, - 0x79, 0x22, 0x9f, 0x02, 0x0a, 0x0b, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x3e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x69, 0x64, 0x4d, 0x61, 0x70, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, + 0x61, 0x67, 0x73, 0x22, 0xff, 0x04, 0x0a, 0x28, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x4f, + 0x72, 0x69, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x67, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x72, + 0x69, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x12, 0x70, 0x0a, 0x0c, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x47, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x48, 0x01, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x1a, 0xc0, 0x01, 0x0a, 0x09, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x09, 0x70, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x09, + 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, 0x44, 0x88, 0x01, 0x01, 0x12, 0x25, 0x0a, 0x0b, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x01, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, + 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x48, 0x02, 0x52, 0x05, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1b, + 0x0a, 0x06, 0x70, 0x6f, 0x64, 0x55, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, + 0x52, 0x06, 0x70, 0x6f, 0x64, 0x55, 0x49, 0x44, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, + 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, 0x44, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x69, 0x6e, + 0x6f, 0x64, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x70, 0x6f, 0x64, 0x55, 0x49, 0x44, 0x1a, 0x95, + 0x01, 0x0a, 0x0c, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x17, 0x0a, 0x04, 0x69, 0x6e, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, + 0x04, 0x69, 0x6e, 0x69, 0x74, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x01, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x70, 0x6f, 0x64, 0x55, 0x49, 0x44, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, 0x70, 0x6f, 0x64, 0x55, 0x49, 0x44, 0x88, 0x01, 0x01, + 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, + 0x70, 0x6f, 0x64, 0x55, 0x49, 0x44, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x44, 0x61, 0x74, 0x61, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x44, 0x61, 0x74, 0x61, 0x22, 0x4d, 0x0a, 0x29, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x44, 0x46, 0x72, 0x6f, 0x6d, + 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x49, 0x44, 0x22, 0x84, 0x01, 0x0a, 0x12, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, + 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x0b, 0x63, 0x61, 0x72, 0x64, 0x69, + 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x61, 0x67, 0x43, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0b, + 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x99, 0x01, 0x0a, 0x13, + 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x42, 0x0a, 0x0b, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, + 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x61, 0x72, 0x64, 0x69, + 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0b, 0x63, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0x34, 0x0a, 0x08, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x10, 0x0a, 0x03, 0x75, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0xc2, 0x01, + 0x0a, 0x10, 0x55, 0x6e, 0x69, 0x78, 0x44, 0x6f, 0x67, 0x73, 0x74, 0x61, 0x74, 0x73, 0x64, 0x4d, + 0x73, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x70, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x24, + 0x0a, 0x0d, 0x61, 0x6e, 0x63, 0x69, 0x6c, 0x6c, 0x61, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x61, 0x6e, 0x63, 0x69, 0x6c, 0x6c, 0x61, 0x72, 0x79, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6e, 0x63, 0x69, 0x6c, 0x6c, 0x61, 0x72, + 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x61, 0x6e, 0x63, 0x69, 0x6c, 0x6c, 0x61, + 0x72, 0x79, 0x22, 0x9f, 0x02, 0x0a, 0x0b, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x3e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x2e, 0x50, 0x69, 0x64, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x70, 0x69, - 0x64, 0x4d, 0x61, 0x70, 0x1a, 0x52, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x69, 0x64, 0x4d, - 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x2d, 0x0a, 0x13, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, - 0x61, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c, 0x6f, 0x61, 0x64, - 0x65, 0x64, 0x2a, 0x31, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x09, 0x0a, 0x05, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x4f, - 0x44, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x4c, 0x45, - 0x54, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x35, 0x0a, 0x0e, 0x54, 0x61, 0x67, 0x43, 0x61, 0x72, 0x64, - 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x4f, 0x57, 0x10, 0x00, - 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x52, 0x43, 0x48, 0x45, 0x53, 0x54, 0x52, 0x41, 0x54, 0x4f, 0x52, - 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x49, 0x47, 0x48, 0x10, 0x02, 0x42, 0x15, 0x5a, 0x13, - 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x67, 0x6f, 0x2f, 0x63, - 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x69, 0x64, 0x4d, 0x61, 0x70, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x2e, 0x50, 0x69, 0x64, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x70, + 0x69, 0x64, 0x4d, 0x61, 0x70, 0x1a, 0x52, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x6d, + 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x69, 0x64, + 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2d, 0x0a, 0x13, 0x54, 0x61, 0x67, 0x67, 0x65, 0x72, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, + 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c, 0x6f, 0x61, + 0x64, 0x65, 0x64, 0x2a, 0x31, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x09, 0x0a, 0x05, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4d, + 0x4f, 0x44, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x4c, + 0x45, 0x54, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x35, 0x0a, 0x0e, 0x54, 0x61, 0x67, 0x43, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x4f, 0x57, 0x10, + 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x52, 0x43, 0x48, 0x45, 0x53, 0x54, 0x52, 0x41, 0x54, 0x4f, + 0x52, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x49, 0x47, 0x48, 0x10, 0x02, 0x42, 0x15, 0x5a, + 0x13, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x67, 0x6f, 0x2f, + 0x63, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1134,27 +1409,31 @@ func file_datadog_model_v1_model_proto_rawDescGZIP() []byte { } var file_datadog_model_v1_model_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_datadog_model_v1_model_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_datadog_model_v1_model_proto_msgTypes = make([]protoimpl.MessageInfo, 21) var file_datadog_model_v1_model_proto_goTypes = []any{ - (EventType)(0), // 0: datadog.model.v1.EventType - (TagCardinality)(0), // 1: datadog.model.v1.TagCardinality - (*HostnameRequest)(nil), // 2: datadog.model.v1.HostnameRequest - (*HostnameReply)(nil), // 3: datadog.model.v1.HostnameReply - (*CaptureTriggerRequest)(nil), // 4: datadog.model.v1.CaptureTriggerRequest - (*CaptureTriggerResponse)(nil), // 5: datadog.model.v1.CaptureTriggerResponse - (*StreamTagsRequest)(nil), // 6: datadog.model.v1.StreamTagsRequest - (*StreamTagsResponse)(nil), // 7: datadog.model.v1.StreamTagsResponse - (*StreamTagsEvent)(nil), // 8: datadog.model.v1.StreamTagsEvent - (*DeprecatedFilter)(nil), // 9: datadog.model.v1.DeprecatedFilter - (*Entity)(nil), // 10: datadog.model.v1.Entity - (*FetchEntityRequest)(nil), // 11: datadog.model.v1.FetchEntityRequest - (*FetchEntityResponse)(nil), // 12: datadog.model.v1.FetchEntityResponse - (*EntityId)(nil), // 13: datadog.model.v1.EntityId - (*UnixDogstatsdMsg)(nil), // 14: datadog.model.v1.UnixDogstatsdMsg - (*TaggerState)(nil), // 15: datadog.model.v1.TaggerState - (*TaggerStateResponse)(nil), // 16: datadog.model.v1.TaggerStateResponse - nil, // 17: datadog.model.v1.TaggerState.StateEntry - nil, // 18: datadog.model.v1.TaggerState.PidMapEntry + (EventType)(0), // 0: datadog.model.v1.EventType + (TagCardinality)(0), // 1: datadog.model.v1.TagCardinality + (*HostnameRequest)(nil), // 2: datadog.model.v1.HostnameRequest + (*HostnameReply)(nil), // 3: datadog.model.v1.HostnameReply + (*CaptureTriggerRequest)(nil), // 4: datadog.model.v1.CaptureTriggerRequest + (*CaptureTriggerResponse)(nil), // 5: datadog.model.v1.CaptureTriggerResponse + (*StreamTagsRequest)(nil), // 6: datadog.model.v1.StreamTagsRequest + (*StreamTagsResponse)(nil), // 7: datadog.model.v1.StreamTagsResponse + (*StreamTagsEvent)(nil), // 8: datadog.model.v1.StreamTagsEvent + (*DeprecatedFilter)(nil), // 9: datadog.model.v1.DeprecatedFilter + (*Entity)(nil), // 10: datadog.model.v1.Entity + (*GenerateContainerIDFromOriginInfoRequest)(nil), // 11: datadog.model.v1.GenerateContainerIDFromOriginInfoRequest + (*GenerateContainerIDFromOriginInfoResponse)(nil), // 12: datadog.model.v1.GenerateContainerIDFromOriginInfoResponse + (*FetchEntityRequest)(nil), // 13: datadog.model.v1.FetchEntityRequest + (*FetchEntityResponse)(nil), // 14: datadog.model.v1.FetchEntityResponse + (*EntityId)(nil), // 15: datadog.model.v1.EntityId + (*UnixDogstatsdMsg)(nil), // 16: datadog.model.v1.UnixDogstatsdMsg + (*TaggerState)(nil), // 17: datadog.model.v1.TaggerState + (*TaggerStateResponse)(nil), // 18: datadog.model.v1.TaggerStateResponse + (*GenerateContainerIDFromOriginInfoRequest_LocalData)(nil), // 19: datadog.model.v1.GenerateContainerIDFromOriginInfoRequest.LocalData + (*GenerateContainerIDFromOriginInfoRequest_ExternalData)(nil), // 20: datadog.model.v1.GenerateContainerIDFromOriginInfoRequest.ExternalData + nil, // 21: datadog.model.v1.TaggerState.StateEntry + nil, // 22: datadog.model.v1.TaggerState.PidMapEntry } var file_datadog_model_v1_model_proto_depIdxs = []int32{ 1, // 0: datadog.model.v1.StreamTagsRequest.cardinality:type_name -> datadog.model.v1.TagCardinality @@ -1163,19 +1442,21 @@ var file_datadog_model_v1_model_proto_depIdxs = []int32{ 8, // 3: datadog.model.v1.StreamTagsResponse.events:type_name -> datadog.model.v1.StreamTagsEvent 0, // 4: datadog.model.v1.StreamTagsEvent.type:type_name -> datadog.model.v1.EventType 10, // 5: datadog.model.v1.StreamTagsEvent.entity:type_name -> datadog.model.v1.Entity - 13, // 6: datadog.model.v1.Entity.id:type_name -> datadog.model.v1.EntityId - 13, // 7: datadog.model.v1.FetchEntityRequest.id:type_name -> datadog.model.v1.EntityId - 1, // 8: datadog.model.v1.FetchEntityRequest.cardinality:type_name -> datadog.model.v1.TagCardinality - 13, // 9: datadog.model.v1.FetchEntityResponse.id:type_name -> datadog.model.v1.EntityId - 1, // 10: datadog.model.v1.FetchEntityResponse.cardinality:type_name -> datadog.model.v1.TagCardinality - 17, // 11: datadog.model.v1.TaggerState.state:type_name -> datadog.model.v1.TaggerState.StateEntry - 18, // 12: datadog.model.v1.TaggerState.pidMap:type_name -> datadog.model.v1.TaggerState.PidMapEntry - 10, // 13: datadog.model.v1.TaggerState.StateEntry.value:type_name -> datadog.model.v1.Entity - 14, // [14:14] is the sub-list for method output_type - 14, // [14:14] is the sub-list for method input_type - 14, // [14:14] is the sub-list for extension type_name - 14, // [14:14] is the sub-list for extension extendee - 0, // [0:14] is the sub-list for field type_name + 15, // 6: datadog.model.v1.Entity.id:type_name -> datadog.model.v1.EntityId + 19, // 7: datadog.model.v1.GenerateContainerIDFromOriginInfoRequest.localData:type_name -> datadog.model.v1.GenerateContainerIDFromOriginInfoRequest.LocalData + 20, // 8: datadog.model.v1.GenerateContainerIDFromOriginInfoRequest.externalData:type_name -> datadog.model.v1.GenerateContainerIDFromOriginInfoRequest.ExternalData + 15, // 9: datadog.model.v1.FetchEntityRequest.id:type_name -> datadog.model.v1.EntityId + 1, // 10: datadog.model.v1.FetchEntityRequest.cardinality:type_name -> datadog.model.v1.TagCardinality + 15, // 11: datadog.model.v1.FetchEntityResponse.id:type_name -> datadog.model.v1.EntityId + 1, // 12: datadog.model.v1.FetchEntityResponse.cardinality:type_name -> datadog.model.v1.TagCardinality + 21, // 13: datadog.model.v1.TaggerState.state:type_name -> datadog.model.v1.TaggerState.StateEntry + 22, // 14: datadog.model.v1.TaggerState.pidMap:type_name -> datadog.model.v1.TaggerState.PidMapEntry + 10, // 15: datadog.model.v1.TaggerState.StateEntry.value:type_name -> datadog.model.v1.Entity + 16, // [16:16] is the sub-list for method output_type + 16, // [16:16] is the sub-list for method input_type + 16, // [16:16] is the sub-list for extension type_name + 16, // [16:16] is the sub-list for extension extendee + 0, // [0:16] is the sub-list for field type_name } func init() { file_datadog_model_v1_model_proto_init() } @@ -1183,13 +1464,16 @@ func file_datadog_model_v1_model_proto_init() { if File_datadog_model_v1_model_proto != nil { return } + file_datadog_model_v1_model_proto_msgTypes[9].OneofWrappers = []any{} + file_datadog_model_v1_model_proto_msgTypes[17].OneofWrappers = []any{} + file_datadog_model_v1_model_proto_msgTypes[18].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_datadog_model_v1_model_proto_rawDesc, NumEnums: 2, - NumMessages: 17, + NumMessages: 21, NumExtensions: 0, NumServices: 0, }, diff --git a/pkg/proto/pbgo/mocks/core/api_mockgen.pb.go b/pkg/proto/pbgo/mocks/core/api_mockgen.pb.go index 7d7798b724aaa..a28d85a34a874 100644 --- a/pkg/proto/pbgo/mocks/core/api_mockgen.pb.go +++ b/pkg/proto/pbgo/mocks/core/api_mockgen.pb.go @@ -299,6 +299,26 @@ func (mr *MockAgentSecureClientMockRecorder) TaggerFetchEntity(ctx, in interface return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TaggerFetchEntity", reflect.TypeOf((*MockAgentSecureClient)(nil).TaggerFetchEntity), varargs...) } +// TaggerGenerateContainerIDFromOriginInfo mocks base method. +func (m *MockAgentSecureClient) TaggerGenerateContainerIDFromOriginInfo(ctx context.Context, in *core.GenerateContainerIDFromOriginInfoRequest, opts ...grpc.CallOption) (*core.GenerateContainerIDFromOriginInfoResponse, error) { + m.ctrl.T.Helper() + varargs := []interface{}{ctx, in} + for _, a := range opts { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "TaggerGenerateContainerIDFromOriginInfo", varargs...) + ret0, _ := ret[0].(*core.GenerateContainerIDFromOriginInfoResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// TaggerGenerateContainerIDFromOriginInfo indicates an expected call of TaggerGenerateContainerIDFromOriginInfo. +func (mr *MockAgentSecureClientMockRecorder) TaggerGenerateContainerIDFromOriginInfo(ctx, in interface{}, opts ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{ctx, in}, opts...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TaggerGenerateContainerIDFromOriginInfo", reflect.TypeOf((*MockAgentSecureClient)(nil).TaggerGenerateContainerIDFromOriginInfo), varargs...) +} + // TaggerStreamEntities mocks base method. func (m *MockAgentSecureClient) TaggerStreamEntities(ctx context.Context, in *core.StreamTagsRequest, opts ...grpc.CallOption) (core.AgentSecure_TaggerStreamEntitiesClient, error) { m.ctrl.T.Helper() @@ -865,6 +885,21 @@ func (mr *MockAgentSecureServerMockRecorder) TaggerFetchEntity(arg0, arg1 interf return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TaggerFetchEntity", reflect.TypeOf((*MockAgentSecureServer)(nil).TaggerFetchEntity), arg0, arg1) } +// TaggerGenerateContainerIDFromOriginInfo mocks base method. +func (m *MockAgentSecureServer) TaggerGenerateContainerIDFromOriginInfo(arg0 context.Context, arg1 *core.GenerateContainerIDFromOriginInfoRequest) (*core.GenerateContainerIDFromOriginInfoResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "TaggerGenerateContainerIDFromOriginInfo", arg0, arg1) + ret0, _ := ret[0].(*core.GenerateContainerIDFromOriginInfoResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// TaggerGenerateContainerIDFromOriginInfo indicates an expected call of TaggerGenerateContainerIDFromOriginInfo. +func (mr *MockAgentSecureServerMockRecorder) TaggerGenerateContainerIDFromOriginInfo(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TaggerGenerateContainerIDFromOriginInfo", reflect.TypeOf((*MockAgentSecureServer)(nil).TaggerGenerateContainerIDFromOriginInfo), arg0, arg1) +} + // TaggerStreamEntities mocks base method. func (m *MockAgentSecureServer) TaggerStreamEntities(arg0 *core.StreamTagsRequest, arg1 core.AgentSecure_TaggerStreamEntitiesServer) error { m.ctrl.T.Helper() From 4189bbbf669b8eb0fe987e02ebcbb4507b001c3b Mon Sep 17 00:00:00 2001 From: Baptiste Foy Date: Tue, 17 Dec 2024 12:40:03 +0100 Subject: [PATCH 262/303] upgrade(installer): Support os & os_version as policy scope (#32281) --- pkg/fleet/internal/cdn/scope_expression.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/fleet/internal/cdn/scope_expression.go b/pkg/fleet/internal/cdn/scope_expression.go index 659d6798c0670..cc86626fcf9c0 100644 --- a/pkg/fleet/internal/cdn/scope_expression.go +++ b/pkg/fleet/internal/cdn/scope_expression.go @@ -10,7 +10,9 @@ import ( "fmt" "regexp" + "github.com/DataDog/datadog-agent/comp/metadata/host/hostimpl/utils" "github.com/DataDog/datadog-agent/pkg/fleet/installer/env" + "github.com/DataDog/datadog-agent/pkg/gohai/platform" "github.com/DataDog/datadog-agent/pkg/version" "github.com/expr-lang/expr" ) @@ -115,6 +117,8 @@ func getScopeExprVars(env *env.Env, hostTagsGetter hostTagsGetter) map[string]in return map[string]interface{}{ "hostname": env.Hostname, "installer_version": version.AgentVersion, // AgentVersion evaluates to the installer version here + "os": platform.CollectInfo().KernelName.ValueOrDefault(), + "os_version": utils.GetOSVersion(), "tags": hostTagsGetter.get(), } From 48e04d76736adedd5f8955e62c6a19c39128d8be Mon Sep 17 00:00:00 2001 From: Vincent Whitchurch Date: Tue, 17 Dec 2024 13:16:56 +0100 Subject: [PATCH 263/303] discovery: Fix spurious failures in TestPorts (#32283) --- .../servicediscovery/module/impl_linux_test.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go b/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go index d40a5216f1355..357409b59712c 100644 --- a/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go +++ b/pkg/collector/corechecks/servicediscovery/module/impl_linux_test.go @@ -288,13 +288,23 @@ func TestPorts(t *testing.T) { startUDP("udp4") startUDP("udp6") + expectedPortsMap := make(map[uint16]struct{}, len(expectedPorts)) + serviceMap := getServicesMap(t, url) pid := os.Getpid() require.Contains(t, serviceMap, pid) for _, port := range expectedPorts { + expectedPortsMap[port] = struct{}{} assert.Contains(t, serviceMap[pid].Ports, port) } for _, port := range unexpectedPorts { + // An unexpected port number can also be expected since UDP and TCP and + // v4 and v6 are all in the same list. Just skip the extra check in that + // case since it should be rare. + if _, alsoExpected := expectedPortsMap[port]; alsoExpected { + continue + } + assert.NotContains(t, serviceMap[pid].Ports, port) } } From 175edb6c74f2afa7d331c5b3cc090fe1326d207a Mon Sep 17 00:00:00 2001 From: Guy Arbitman Date: Tue, 17 Dec 2024 14:24:54 +0200 Subject: [PATCH 264/303] usm, npm: rework pid_tgid (#32186) --- pkg/network/ebpf/c/co-re/tracer-fentry.c | 27 +++++----- pkg/network/ebpf/c/pid_tgid.h | 52 +++++++++++++++++++ pkg/network/ebpf/c/prebuilt/conntrack.c | 3 +- pkg/network/ebpf/c/prebuilt/offset-guess.c | 10 ++-- pkg/network/ebpf/c/prebuilt/usm_events_test.c | 3 +- pkg/network/ebpf/c/protocols/sockfd-probes.h | 5 +- .../ebpf/c/protocols/tls/go-tls-conn.h | 3 +- pkg/network/ebpf/c/protocols/tls/https.h | 3 +- pkg/network/ebpf/c/runtime/conntrack.c | 3 +- pkg/network/ebpf/c/runtime/usm.c | 25 ++++----- pkg/network/ebpf/c/shared-libraries/probes.h | 3 +- pkg/network/ebpf/c/sock.h | 3 +- pkg/network/ebpf/c/tracer.c | 35 +++++++------ pkg/network/ebpf/c/tracer/bind.h | 17 +++--- pkg/network/ebpf/c/tracer/stats.h | 3 +- 15 files changed, 130 insertions(+), 65 deletions(-) create mode 100644 pkg/network/ebpf/c/pid_tgid.h diff --git a/pkg/network/ebpf/c/co-re/tracer-fentry.c b/pkg/network/ebpf/c/co-re/tracer-fentry.c index 09259e948047d..b89ab7e351d35 100644 --- a/pkg/network/ebpf/c/co-re/tracer-fentry.c +++ b/pkg/network/ebpf/c/co-re/tracer-fentry.c @@ -8,6 +8,7 @@ #include "ipv6.h" #include "sock.h" #include "skb.h" +#include "pid_tgid.h" #include "tracer/tracer.h" #include "tracer/events.h" @@ -52,7 +53,7 @@ static __always_inline bool event_in_task(char *prog_name) { } static __always_inline int read_conn_tuple_partial_from_flowi4(conn_tuple_t *t, struct flowi4 *fl4, u64 pid_tgid, metadata_mask_t type) { - t->pid = pid_tgid >> 32; + t->pid = GET_USER_MODE_PID(pid_tgid); t->metadata = type; if (t->saddr_l == 0) { @@ -85,7 +86,7 @@ static __always_inline int read_conn_tuple_partial_from_flowi4(conn_tuple_t *t, } static __always_inline int read_conn_tuple_partial_from_flowi6(conn_tuple_t *t, struct flowi6 *fl6, u64 pid_tgid, metadata_mask_t type) { - t->pid = pid_tgid >> 32; + t->pid = GET_USER_MODE_PID(pid_tgid); t->metadata = type; struct in6_addr addr = BPF_CORE_READ(fl6, saddr); @@ -233,7 +234,7 @@ int BPF_PROG(tcp_close, struct sock *sk, long timeout) { u64 pid_tgid = bpf_get_current_pid_tgid(); // Get network namespace id - log_debug("fentry/tcp_close: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); + log_debug("fentry/tcp_close: kernel thread id: %llu, user mode pid: %llu", GET_KERNEL_THREAD_ID(pid_tgid), GET_USER_MODE_PID(pid_tgid)); if (!read_conn_tuple(&t, sk, pid_tgid, CONN_TYPE_TCP)) { return 0; } @@ -410,14 +411,14 @@ SEC("fentry/tcp_retransmit_skb") int BPF_PROG(tcp_retransmit_skb, struct sock *sk, struct sk_buff *skb, int segs, int err) { RETURN_IF_NOT_IN_SYSPROBE_TASK("fentry/tcp_retransmit_skb"); log_debug("fexntry/tcp_retransmit"); - u64 tid = bpf_get_current_pid_tgid(); + u64 pid_tgid = bpf_get_current_pid_tgid(); tcp_retransmit_skb_args_t args = {}; args.retrans_out_pre = BPF_CORE_READ(tcp_sk(sk), retrans_out); if (args.retrans_out_pre < 0) { return 0; } - bpf_map_update_with_telemetry(pending_tcp_retransmit_skb, &tid, &args, BPF_ANY); + bpf_map_update_with_telemetry(pending_tcp_retransmit_skb, &pid_tgid, &args, BPF_ANY); return 0; } @@ -426,18 +427,18 @@ SEC("fexit/tcp_retransmit_skb") int BPF_PROG(tcp_retransmit_skb_exit, struct sock *sk, struct sk_buff *skb, int segs, int err) { RETURN_IF_NOT_IN_SYSPROBE_TASK("fexit/tcp_retransmit_skb"); log_debug("fexit/tcp_retransmit"); - u64 tid = bpf_get_current_pid_tgid(); + u64 pid_tgid = bpf_get_current_pid_tgid(); if (err < 0) { - bpf_map_delete_elem(&pending_tcp_retransmit_skb, &tid); + bpf_map_delete_elem(&pending_tcp_retransmit_skb, &pid_tgid); return 0; } - tcp_retransmit_skb_args_t *args = bpf_map_lookup_elem(&pending_tcp_retransmit_skb, &tid); + tcp_retransmit_skb_args_t *args = bpf_map_lookup_elem(&pending_tcp_retransmit_skb, &pid_tgid); if (args == NULL) { return 0; } u32 retrans_out_pre = args->retrans_out_pre; u32 retrans_out = BPF_CORE_READ(tcp_sk(sk), retrans_out); - bpf_map_delete_elem(&pending_tcp_retransmit_skb, &tid); + bpf_map_delete_elem(&pending_tcp_retransmit_skb, &pid_tgid); if (retrans_out < 0) { return 0; @@ -450,7 +451,7 @@ SEC("fentry/tcp_connect") int BPF_PROG(tcp_connect, struct sock *sk) { RETURN_IF_NOT_IN_SYSPROBE_TASK("fentry/tcp_connect"); u64 pid_tgid = bpf_get_current_pid_tgid(); - log_debug("fentry/tcp_connect: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); + log_debug("fentry/tcp_connect: kernel thread id: %llu, user mode pid: %llu", GET_KERNEL_THREAD_ID(pid_tgid), GET_USER_MODE_PID(pid_tgid)); conn_tuple_t t = {}; if (!read_conn_tuple(&t, sk, 0, CONN_TYPE_TCP)) { @@ -479,8 +480,8 @@ int BPF_PROG(tcp_finish_connect, struct sock *sk, struct sk_buff *skb, int rc) { return 0; } u64 pid_tgid = pid_tgid_p->pid_tgid; - t.pid = pid_tgid >> 32; - log_debug("fentry/tcp_finish_connect: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); + t.pid = GET_USER_MODE_PID(pid_tgid); + log_debug("fentry/tcp_finish_connect: kernel thread id: %llu, user mode pid: %llu", GET_KERNEL_THREAD_ID(pid_tgid), GET_USER_MODE_PID(pid_tgid)); handle_tcp_stats(&t, sk, TCP_ESTABLISHED); handle_message(&t, 0, 0, CONN_DIRECTION_OUTGOING, 0, 0, PACKET_COUNT_NONE, sk); @@ -498,7 +499,7 @@ int BPF_PROG(inet_csk_accept_exit, struct sock *_sk, int flags, int *err, bool k } u64 pid_tgid = bpf_get_current_pid_tgid(); - log_debug("fexit/inet_csk_accept: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); + log_debug("fexit/inet_csk_accept: kernel thread id: %llu, user mode pid: %llu", GET_KERNEL_THREAD_ID(pid_tgid), GET_USER_MODE_PID(pid_tgid)); conn_tuple_t t = {}; if (!read_conn_tuple(&t, sk, pid_tgid, CONN_TYPE_TCP)) { diff --git a/pkg/network/ebpf/c/pid_tgid.h b/pkg/network/ebpf/c/pid_tgid.h new file mode 100644 index 0000000000000..a3439bca233a7 --- /dev/null +++ b/pkg/network/ebpf/c/pid_tgid.h @@ -0,0 +1,52 @@ +#ifndef __PID_TGID_H +#define __PID_TGID_H + +/* + * The following documentation is based on https://stackoverflow.com/a/9306150 + * Note on Process and Thread Identifiers: + * + * What users refer to as a "PID" is not quite the same as what the kernel sees. + * + * In the kernel: + * - Each thread has its own ID, called a PID (though it might be better termed a TID, or Thread ID). + * - Threads within the same process share a TGID (Thread Group ID), which is the PID of the first thread + * created when the process was initialized. + * + * When a process is created: + * - It starts as a single thread where the PID and TGID are the same. + * + * When a new thread is created: + * - It receives its own unique PID for independent scheduling by the kernel. + * - It inherits the TGID from the original (parent) thread, tying it to the same process. + * + * This separation allows the kernel to schedule threads independently while maintaining the process view + * (TGID) when reporting information to users. + * + * Example Hierarchy of Threads: + * + * USER VIEW + * vvvvvvvv + * + * | + * <-- PID 43 -->|<----------------- PID 42 -----------------> + * | | + * | +---------+ | + * | | process | | + * | _| pid=42 |_ | + * __(fork) _/ | tgid=42 | \_ (new thread) _ + * / | +---------+ | \ + * +---------+ | | +---------+ + * | process | | | | process | + * | pid=43 | | | | pid=44 | + * | tgid=43 | | | | tgid=42 | + * +---------+ | | +---------+ + * | | + * <-- PID 43 -->|<--------- PID 42 -------->|<--- PID 44 ---> + * | | + * ^^^^^^^^ + * KERNEL VIEW + */ +#define GET_USER_MODE_PID(x) ((x) >> 32) +#define GET_KERNEL_THREAD_ID(x) ((x) & 0xFFFFFFFF) + +#endif // __PID_TGID_H diff --git a/pkg/network/ebpf/c/prebuilt/conntrack.c b/pkg/network/ebpf/c/prebuilt/conntrack.c index 8e77c1fd98ff8..8417806ce3077 100644 --- a/pkg/network/ebpf/c/prebuilt/conntrack.c +++ b/pkg/network/ebpf/c/prebuilt/conntrack.c @@ -12,6 +12,7 @@ #include "conntrack/maps.h" #include "ip.h" #include "ipv6.h" +#include "pid_tgid.h" SEC("kprobe/__nf_conntrack_hash_insert") int BPF_BYPASSABLE_KPROBE(kprobe___nf_conntrack_hash_insert, struct nf_conn *ct) { @@ -32,7 +33,7 @@ int BPF_BYPASSABLE_KPROBE(kprobe___nf_conntrack_hash_insert, struct nf_conn *ct) SEC("kprobe/ctnetlink_fill_info") int BPF_BYPASSABLE_KPROBE(kprobe_ctnetlink_fill_info) { - u32 pid = bpf_get_current_pid_tgid() >> 32; + u32 pid = GET_USER_MODE_PID(bpf_get_current_pid_tgid()); if (pid != systemprobe_pid()) { log_debug("skipping kprobe/ctnetlink_fill_info invocation from non-system-probe process"); return 0; diff --git a/pkg/network/ebpf/c/prebuilt/offset-guess.c b/pkg/network/ebpf/c/prebuilt/offset-guess.c index cc32fee223935..556a770082684 100644 --- a/pkg/network/ebpf/c/prebuilt/offset-guess.c +++ b/pkg/network/ebpf/c/prebuilt/offset-guess.c @@ -298,11 +298,11 @@ int kprobe__sock_common_getsockopt(struct pt_regs* ctx) { SEC("kprobe/tcp_v6_connect") int kprobe__tcp_v6_connect(struct pt_regs* ctx) { struct sock* sk; - u64 pid = bpf_get_current_pid_tgid(); + u64 pid_tgid = bpf_get_current_pid_tgid(); sk = (struct sock*)PT_REGS_PARM1(ctx); - bpf_map_update_elem(&connectsock_ipv6, &pid, &sk, BPF_ANY); + bpf_map_update_elem(&connectsock_ipv6, &pid_tgid, &sk, BPF_ANY); return 0; } @@ -310,17 +310,17 @@ int kprobe__tcp_v6_connect(struct pt_regs* ctx) { // Used for offset guessing (see: pkg/ebpf/offsetguess.go) SEC("kretprobe/tcp_v6_connect") int kretprobe__tcp_v6_connect(struct pt_regs* __attribute__((unused)) ctx) { - u64 pid = bpf_get_current_pid_tgid(); + u64 pid_tgid = bpf_get_current_pid_tgid(); u64 zero = 0; struct sock** skpp; tracer_status_t* status; - skpp = bpf_map_lookup_elem(&connectsock_ipv6, &pid); + skpp = bpf_map_lookup_elem(&connectsock_ipv6, &pid_tgid); if (skpp == 0) { return 0; // missed entry } struct sock* skp = *skpp; - bpf_map_delete_elem(&connectsock_ipv6, &pid); + bpf_map_delete_elem(&connectsock_ipv6, &pid_tgid); status = bpf_map_lookup_elem(&tracer_status, &zero); if (status == NULL || is_sk_buff_event(status->what)) { diff --git a/pkg/network/ebpf/c/prebuilt/usm_events_test.c b/pkg/network/ebpf/c/prebuilt/usm_events_test.c index 820afb50ef0f0..f2bfb640aa54a 100644 --- a/pkg/network/ebpf/c/prebuilt/usm_events_test.c +++ b/pkg/network/ebpf/c/prebuilt/usm_events_test.c @@ -9,6 +9,7 @@ #include "defs.h" #include "map-defs.h" #include "protocols/events.h" +#include "pid_tgid.h" // -------------------------------------------------------- // this is a test program for pkg/networks/protocols/events @@ -37,7 +38,7 @@ struct syscalls_enter_write_args { SEC("tracepoint/syscalls/sys_enter_write") int tracepoint__syscalls__sys_enter_write(struct syscalls_enter_write_args *ctx) { __u32 zero = 0; - __u32 pid = bpf_get_current_pid_tgid() >> 32; + __u32 pid = GET_USER_MODE_PID(bpf_get_current_pid_tgid()); test_ctx_t *test_ctx = bpf_map_lookup_elem(&test, &zero); if (!test_ctx || test_ctx->expected_fd != ctx->fd || test_ctx->expected_pid != pid) return 0; diff --git a/pkg/network/ebpf/c/protocols/sockfd-probes.h b/pkg/network/ebpf/c/protocols/sockfd-probes.h index 9c31f236ab087..06ecbeee6fe57 100644 --- a/pkg/network/ebpf/c/protocols/sockfd-probes.h +++ b/pkg/network/ebpf/c/protocols/sockfd-probes.h @@ -13,6 +13,7 @@ #include "sock.h" #include "sockfd.h" +#include "pid_tgid.h" SEC("kprobe/tcp_close") int BPF_KPROBE(kprobe__tcp_close, struct sock *sk) { @@ -53,7 +54,7 @@ int BPF_KPROBE(kprobe__sockfd_lookup_light, int sockfd) { // but can reduce the accuracy of programs relying on socket FDs for // processes with a lot of FD churn pid_fd_t key = { - .pid = pid_tgid >> 32, + .pid = GET_USER_MODE_PID(pid_tgid), .fd = sockfd, }; conn_tuple_t *t = bpf_map_lookup_elem(&tuple_by_pid_fd, &key); @@ -121,7 +122,7 @@ int BPF_KRETPROBE(kretprobe__sockfd_lookup_light, struct socket *socket) { } pid_fd_t pid_fd = { - .pid = pid_tgid >> 32, + .pid = GET_USER_MODE_PID(pid_tgid), .fd = (*sockfd), }; diff --git a/pkg/network/ebpf/c/protocols/tls/go-tls-conn.h b/pkg/network/ebpf/c/protocols/tls/go-tls-conn.h index ba812de0385bd..d297ad11f57cf 100644 --- a/pkg/network/ebpf/c/protocols/tls/go-tls-conn.h +++ b/pkg/network/ebpf/c/protocols/tls/go-tls-conn.h @@ -4,6 +4,7 @@ #include "bpf_helpers.h" #include "ip.h" #include "port_range.h" +#include "pid_tgid.h" #include "protocols/http/maps.h" #include "protocols/tls/go-tls-types.h" @@ -49,7 +50,7 @@ static __always_inline conn_tuple_t* conn_tup_from_tls_conn(tls_offsets_data_t* // The code path below should be executed only once during the lifecycle of a TLS connection pid_fd_t pid_fd = { - .pid = pid_tgid >> 32, + .pid = GET_USER_MODE_PID(pid_tgid), // fd is populated by the code downstream .fd = 0, }; diff --git a/pkg/network/ebpf/c/protocols/tls/https.h b/pkg/network/ebpf/c/protocols/tls/https.h index f1d0562033a54..ac3c509daaeb3 100644 --- a/pkg/network/ebpf/c/protocols/tls/https.h +++ b/pkg/network/ebpf/c/protocols/tls/https.h @@ -17,6 +17,7 @@ #include "bpf_builtins.h" #include "port_range.h" #include "sock.h" +#include "pid_tgid.h" #include "protocols/amqp/helpers.h" #include "protocols/redis/helpers.h" @@ -250,7 +251,7 @@ static __always_inline conn_tuple_t* tup_from_ssl_ctx(void *ssl_ctx, u64 pid_tgi // the code path below should be executed only once during the lifecycle of a SSL session pid_fd_t pid_fd = { - .pid = pid_tgid >> 32, + .pid = GET_USER_MODE_PID(pid_tgid), .fd = ssl_sock->fd, }; diff --git a/pkg/network/ebpf/c/runtime/conntrack.c b/pkg/network/ebpf/c/runtime/conntrack.c index a054504439230..e7418edcd986e 100644 --- a/pkg/network/ebpf/c/runtime/conntrack.c +++ b/pkg/network/ebpf/c/runtime/conntrack.c @@ -21,6 +21,7 @@ #include "conntrack/maps.h" #include "netns.h" #include "ip.h" +#include "pid_tgid.h" #if defined(FEATURE_TCPV6_ENABLED) || defined(FEATURE_UDPV6_ENABLED) #include "ipv6.h" @@ -50,7 +51,7 @@ int BPF_BYPASSABLE_KPROBE(kprobe___nf_conntrack_hash_insert, struct nf_conn *ct) SEC("kprobe/ctnetlink_fill_info") int BPF_BYPASSABLE_KPROBE(kprobe_ctnetlink_fill_info) { - u32 pid = bpf_get_current_pid_tgid() >> 32; + u32 pid = GET_USER_MODE_PID(bpf_get_current_pid_tgid()); if (pid != systemprobe_pid()) { log_debug("skipping kprobe/ctnetlink_fill_info invocation from non-system-probe process"); return 0; diff --git a/pkg/network/ebpf/c/runtime/usm.c b/pkg/network/ebpf/c/runtime/usm.c index 3cb3f1245a3ab..bf3737b311a92 100644 --- a/pkg/network/ebpf/c/runtime/usm.c +++ b/pkg/network/ebpf/c/runtime/usm.c @@ -13,6 +13,7 @@ #include "ipv6.h" #include "sock.h" #include "port_range.h" +#include "pid_tgid.h" #include "protocols/classification/dispatcher-helpers.h" #include "protocols/http/buffer.h" @@ -84,7 +85,7 @@ int tracepoint__net__netif_receive_skb(void *ctx) { SEC("uprobe/crypto/tls.(*Conn).Write") int BPF_BYPASSABLE_UPROBE(uprobe__crypto_tls_Conn_Write) { u64 pid_tgid = bpf_get_current_pid_tgid(); - u64 pid = pid_tgid >> 32; + u64 pid = GET_USER_MODE_PID(pid_tgid); tls_offsets_data_t* od = get_offsets_data(); if (od == NULL) { log_debug("[go-tls-write] no offsets data in map for pid %llu", pid); @@ -125,7 +126,7 @@ int BPF_BYPASSABLE_UPROBE(uprobe__crypto_tls_Conn_Write) { SEC("uprobe/crypto/tls.(*Conn).Write/return") int BPF_BYPASSABLE_UPROBE(uprobe__crypto_tls_Conn_Write__return) { u64 pid_tgid = bpf_get_current_pid_tgid(); - u64 pid = pid_tgid >> 32; + u64 pid = GET_USER_MODE_PID(pid_tgid); tls_offsets_data_t* od = get_offsets_data(); if (od == NULL) { log_debug("[go-tls-write-return] no offsets data in map for pid %llu", pid); @@ -200,10 +201,10 @@ int BPF_BYPASSABLE_UPROBE(uprobe__crypto_tls_Conn_Write__return) { SEC("uprobe/crypto/tls.(*Conn).Read") int BPF_BYPASSABLE_UPROBE(uprobe__crypto_tls_Conn_Read) { u64 pid_tgid = bpf_get_current_pid_tgid(); - u64 pid = pid_tgid >> 32; + u64 pid = GET_USER_MODE_PID(pid_tgid); tls_offsets_data_t* od = get_offsets_data(); if (od == NULL) { - log_debug("[go-tls-read] no offsets data in map for pid %llu", pid_tgid >> 32); + log_debug("[go-tls-read] no offsets data in map for pid %llu", pid); return 0; } @@ -211,7 +212,7 @@ int BPF_BYPASSABLE_UPROBE(uprobe__crypto_tls_Conn_Read) { go_tls_function_args_key_t call_key = {0}; call_key.pid = pid; if (read_goroutine_id(ctx, &od->goroutine_id, &call_key.goroutine_id)) { - log_debug("[go-tls-read] failed reading go routine id for pid %llu", pid_tgid >> 32); + log_debug("[go-tls-read] failed reading go routine id for pid %llu", pid); return 0; } @@ -219,11 +220,11 @@ int BPF_BYPASSABLE_UPROBE(uprobe__crypto_tls_Conn_Read) { // (since the parameters might not be live by the time the return probe is hit). go_tls_read_args_data_t call_data = {0}; if (read_location(ctx, &od->read_conn_pointer, sizeof(call_data.conn_pointer), &call_data.conn_pointer)) { - log_debug("[go-tls-read] failed reading conn pointer for pid %llu", pid_tgid >> 32); + log_debug("[go-tls-read] failed reading conn pointer for pid %llu", pid); return 0; } if (read_location(ctx, &od->read_buffer.ptr, sizeof(call_data.b_data), &call_data.b_data)) { - log_debug("[go-tls-read] failed reading buffer pointer for pid %llu", pid_tgid >> 32); + log_debug("[go-tls-read] failed reading buffer pointer for pid %llu", pid); return 0; } @@ -235,7 +236,7 @@ int BPF_BYPASSABLE_UPROBE(uprobe__crypto_tls_Conn_Read) { SEC("uprobe/crypto/tls.(*Conn).Read/return") int BPF_BYPASSABLE_UPROBE(uprobe__crypto_tls_Conn_Read__return) { u64 pid_tgid = bpf_get_current_pid_tgid(); - u64 pid = pid_tgid >> 32; + u64 pid = GET_USER_MODE_PID(pid_tgid); tls_offsets_data_t* od = get_offsets_data(); if (od == NULL) { log_debug("[go-tls-read-return] no offsets data in map for pid %llu", pid); @@ -305,13 +306,13 @@ int BPF_BYPASSABLE_UPROBE(uprobe__crypto_tls_Conn_Close) { u64 pid_tgid = bpf_get_current_pid_tgid(); tls_offsets_data_t* od = get_offsets_data(); if (od == NULL) { - log_debug("[go-tls-close] no offsets data in map for pid %llu", pid_tgid >> 32); + log_debug("[go-tls-close] no offsets data in map for pid %llu", GET_USER_MODE_PID(pid_tgid)); return 0; } // Read the PID and goroutine ID to make the partial call key go_tls_function_args_key_t call_key = {0}; - call_key.pid = pid_tgid >> 32; + call_key.pid = GET_USER_MODE_PID(pid_tgid); if (read_goroutine_id(ctx, &od->goroutine_id, &call_key.goroutine_id) == 0) { bpf_map_delete_elem(&go_tls_read_args, &call_key); bpf_map_delete_elem(&go_tls_write_args, &call_key); @@ -319,13 +320,13 @@ int BPF_BYPASSABLE_UPROBE(uprobe__crypto_tls_Conn_Close) { void* conn_pointer = NULL; if (read_location(ctx, &od->close_conn_pointer, sizeof(conn_pointer), &conn_pointer)) { - log_debug("[go-tls-close] failed reading close conn pointer for pid %llu", pid_tgid >> 32); + log_debug("[go-tls-close] failed reading close conn pointer for pid %llu", GET_USER_MODE_PID(pid_tgid)); return 0; } conn_tuple_t* t = conn_tup_from_tls_conn(od, conn_pointer, pid_tgid); if (t == NULL) { - log_debug("[go-tls-close] failed getting conn tup from tls conn for pid %llu", pid_tgid >> 32); + log_debug("[go-tls-close] failed getting conn tup from tls conn for pid %llu", GET_USER_MODE_PID(pid_tgid)); return 0; } diff --git a/pkg/network/ebpf/c/shared-libraries/probes.h b/pkg/network/ebpf/c/shared-libraries/probes.h index a33e228a63b26..a45e9d0b494e1 100644 --- a/pkg/network/ebpf/c/shared-libraries/probes.h +++ b/pkg/network/ebpf/c/shared-libraries/probes.h @@ -4,6 +4,7 @@ #include "bpf_telemetry.h" #include "bpf_bypass.h" +#include "pid_tgid.h" #include "shared-libraries/types.h" static __always_inline void fill_path_safe(lib_path_t *path, const char *path_argument) { @@ -38,7 +39,7 @@ static __always_inline void do_sys_open_helper_enter(const char *filename) { } u64 pid_tgid = bpf_get_current_pid_tgid(); - path.pid = pid_tgid >> 32; + path.pid = GET_USER_MODE_PID(pid_tgid); bpf_map_update_with_telemetry(open_at_args, &pid_tgid, &path, BPF_ANY); return; } diff --git a/pkg/network/ebpf/c/sock.h b/pkg/network/ebpf/c/sock.h index c71e48a544f1d..997acc13edef6 100644 --- a/pkg/network/ebpf/c/sock.h +++ b/pkg/network/ebpf/c/sock.h @@ -8,6 +8,7 @@ #include "ip.h" #include "ipv6.h" #include "netns.h" +#include "pid_tgid.h" #ifdef COMPILE_CORE @@ -178,7 +179,7 @@ static __always_inline u16 _sk_family(struct sock *skp) { */ static __always_inline int read_conn_tuple_partial(conn_tuple_t* t, struct sock* skp, u64 pid_tgid, metadata_mask_t type) { int err = 0; - t->pid = pid_tgid >> 32; + t->pid = GET_USER_MODE_PID(pid_tgid); t->metadata = type; // Retrieve network namespace id first since addresses and ports may not be available for unconnected UDP diff --git a/pkg/network/ebpf/c/tracer.c b/pkg/network/ebpf/c/tracer.c index 8de25a2a37e6b..66cefbee1d08d 100644 --- a/pkg/network/ebpf/c/tracer.c +++ b/pkg/network/ebpf/c/tracer.c @@ -19,6 +19,7 @@ #include "tracer/port.h" #include "tracer/tcp_recv.h" #include "protocols/classification/protocol-classification.h" +#include "pid_tgid.h" __maybe_unused static __always_inline bool tcp_failed_connections_enabled() { __u64 val = 0; @@ -226,7 +227,7 @@ int BPF_BYPASSABLE_KPROBE(kprobe__tcp_done, struct sock *sk) { pid_ts_t *failed_conn_pid = bpf_map_lookup_elem(&tcp_ongoing_connect_pid, &skp_conn); if (failed_conn_pid) { bpf_map_delete_elem(&tcp_ongoing_connect_pid, &skp_conn); - t.pid = failed_conn_pid->pid_tgid >> 32; + t.pid = GET_USER_MODE_PID(failed_conn_pid->pid_tgid); } else { increment_telemetry_count(tcp_done_missing_pid); return 0; @@ -256,7 +257,7 @@ int BPF_BYPASSABLE_KPROBE(kprobe__tcp_close, struct sock *sk) { u64 pid_tgid = bpf_get_current_pid_tgid(); // Get network namespace id - log_debug("kprobe/tcp_close: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); + log_debug("kprobe/tcp_close: kernel thread id: %llu, user mode pid: %llu", GET_KERNEL_THREAD_ID(pid_tgid), GET_USER_MODE_PID(pid_tgid)); if (!read_conn_tuple(&t, sk, pid_tgid, CONN_TYPE_TCP)) { return 0; } @@ -734,7 +735,7 @@ int BPF_BYPASSABLE_KRETPROBE(kretprobe__udpv6_recvmsg) { static __always_inline int handle_ret_udp_recvmsg_pre_4_7_0(int copied, void *udp_sock_map) { u64 pid_tgid = bpf_get_current_pid_tgid(); - log_debug("kretprobe/udp_recvmsg: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); + log_debug("kretprobe/udp_recvmsg: kernel thread id: %llu, user mode pid: %llu", GET_KERNEL_THREAD_ID(pid_tgid), GET_USER_MODE_PID(pid_tgid)); // Retrieve socket pointer from kprobe via pid/tgid udp_recv_sock_t *st = bpf_map_lookup_elem(udp_sock_map, &pid_tgid); @@ -886,18 +887,18 @@ int BPF_BYPASSABLE_KPROBE(kprobe__tcp_retransmit_skb_pre_4_7_0, struct sock *sk) SEC("kretprobe/tcp_retransmit_skb") int BPF_BYPASSABLE_KRETPROBE(kretprobe__tcp_retransmit_skb, int ret) { - __u64 tid = bpf_get_current_pid_tgid(); + __u64 pid_tgid = bpf_get_current_pid_tgid(); if (ret < 0) { - bpf_map_delete_elem(&pending_tcp_retransmit_skb, &tid); + bpf_map_delete_elem(&pending_tcp_retransmit_skb, &pid_tgid); return 0; } - tcp_retransmit_skb_args_t *args = bpf_map_lookup_elem(&pending_tcp_retransmit_skb, &tid); + tcp_retransmit_skb_args_t *args = bpf_map_lookup_elem(&pending_tcp_retransmit_skb, &pid_tgid); if (args == NULL) { return 0; } struct sock *sk = args->sk; int segs = args->segs; - bpf_map_delete_elem(&pending_tcp_retransmit_skb, &tid); + bpf_map_delete_elem(&pending_tcp_retransmit_skb, &pid_tgid); log_debug("kretprobe/tcp_retransmit: segs: %d", segs); return handle_retransmit(sk, segs); } @@ -908,30 +909,30 @@ int BPF_BYPASSABLE_KRETPROBE(kretprobe__tcp_retransmit_skb, int ret) { SEC("kprobe/tcp_retransmit_skb") int BPF_BYPASSABLE_KPROBE(kprobe__tcp_retransmit_skb, struct sock *sk) { - u64 tid = bpf_get_current_pid_tgid(); + u64 pid_tgid = bpf_get_current_pid_tgid(); tcp_retransmit_skb_args_t args = {}; args.sk = sk; args.segs = 0; BPF_CORE_READ_INTO(&args.retrans_out_pre, tcp_sk(sk), retrans_out); - bpf_map_update_with_telemetry(pending_tcp_retransmit_skb, &tid, &args, BPF_ANY); + bpf_map_update_with_telemetry(pending_tcp_retransmit_skb, &pid_tgid, &args, BPF_ANY); return 0; } SEC("kretprobe/tcp_retransmit_skb") int BPF_BYPASSABLE_KRETPROBE(kretprobe__tcp_retransmit_skb, int rc) { log_debug("kretprobe/tcp_retransmit"); - u64 tid = bpf_get_current_pid_tgid(); + u64 pid_tgid = bpf_get_current_pid_tgid(); if (rc < 0) { - bpf_map_delete_elem(&pending_tcp_retransmit_skb, &tid); + bpf_map_delete_elem(&pending_tcp_retransmit_skb, &pid_tgid); return 0; } - tcp_retransmit_skb_args_t *args = bpf_map_lookup_elem(&pending_tcp_retransmit_skb, &tid); + tcp_retransmit_skb_args_t *args = bpf_map_lookup_elem(&pending_tcp_retransmit_skb, &pid_tgid); if (args == NULL) { return 0; } struct sock *sk = args->sk; u32 retrans_out_pre = args->retrans_out_pre; - bpf_map_delete_elem(&pending_tcp_retransmit_skb, &tid); + bpf_map_delete_elem(&pending_tcp_retransmit_skb, &pid_tgid); u32 retrans_out = 0; BPF_CORE_READ_INTO(&retrans_out, tcp_sk(sk), retrans_out); return handle_retransmit(sk, retrans_out - retrans_out_pre); @@ -942,7 +943,7 @@ int BPF_BYPASSABLE_KRETPROBE(kretprobe__tcp_retransmit_skb, int rc) { SEC("kprobe/tcp_connect") int BPF_BYPASSABLE_KPROBE(kprobe__tcp_connect, struct sock *skp) { u64 pid_tgid = bpf_get_current_pid_tgid(); - log_debug("kprobe/tcp_connect: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); + log_debug("kprobe/tcp_connect: kernel thread id: %llu, user mode pid: %llu", GET_KERNEL_THREAD_ID(pid_tgid), GET_USER_MODE_PID(pid_tgid)); conn_tuple_t t = {}; if (!read_conn_tuple(&t, skp, 0, CONN_TYPE_TCP)) { @@ -971,8 +972,8 @@ int BPF_BYPASSABLE_KPROBE(kprobe__tcp_finish_connect, struct sock *skp) { } u64 pid_tgid = pid_tgid_p->pid_tgid; - t.pid = pid_tgid >> 32; - log_debug("kprobe/tcp_finish_connect: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); + t.pid = GET_USER_MODE_PID(pid_tgid); + log_debug("kprobe/tcp_finish_connect: kernel thread id: %llu, user mode pid: %llu", GET_KERNEL_THREAD_ID(pid_tgid), GET_USER_MODE_PID(pid_tgid)); handle_tcp_stats(&t, skp, TCP_ESTABLISHED); handle_message(&t, 0, 0, CONN_DIRECTION_OUTGOING, 0, 0, PACKET_COUNT_NONE, skp); @@ -989,7 +990,7 @@ int BPF_BYPASSABLE_KRETPROBE(kretprobe__inet_csk_accept, struct sock *sk) { } u64 pid_tgid = bpf_get_current_pid_tgid(); - log_debug("kretprobe/inet_csk_accept: tgid: %llu, pid: %llu", pid_tgid >> 32, pid_tgid & 0xFFFFFFFF); + log_debug("kretprobe/inet_csk_accept: kernel thread id: %llu, user mode pid: %llu", GET_KERNEL_THREAD_ID(pid_tgid), GET_USER_MODE_PID(pid_tgid)); conn_tuple_t t = {}; if (!read_conn_tuple(&t, sk, pid_tgid, CONN_TYPE_TCP)) { diff --git a/pkg/network/ebpf/c/tracer/bind.h b/pkg/network/ebpf/c/tracer/bind.h index 67a01a2da4f4c..cc8c3dd99e5cc 100644 --- a/pkg/network/ebpf/c/tracer/bind.h +++ b/pkg/network/ebpf/c/tracer/bind.h @@ -1,6 +1,7 @@ #ifndef __TRACER_BIND_H #define __TRACER_BIND_H +#include "pid_tgid.h" #include "tracer/tracer.h" #include "tracer/maps.h" #include "tracer/port.h" @@ -19,7 +20,7 @@ static __always_inline u16 sockaddr_sin_port(struct sockaddr *addr) { } static __always_inline int sys_enter_bind(struct socket *sock, struct sockaddr *addr) { - __u64 tid = bpf_get_current_pid_tgid(); + __u64 pid_tgid = bpf_get_current_pid_tgid(); __u16 type = 0; bpf_probe_read_kernel_with_telemetry(&type, sizeof(__u16), &sock->type); @@ -28,7 +29,7 @@ static __always_inline int sys_enter_bind(struct socket *sock, struct sockaddr * } if (addr == NULL) { - log_debug("sys_enter_bind: could not read sockaddr, sock=%p, tid=%llu", sock, tid); + log_debug("sys_enter_bind: could not read sockaddr, sock=%p, pid_tgid=%llu", sock, pid_tgid); return 0; } @@ -49,19 +50,19 @@ static __always_inline int sys_enter_bind(struct socket *sock, struct sockaddr * args.addr = addr; - bpf_map_update_with_telemetry(pending_bind, &tid, &args, BPF_ANY); - log_debug("sys_enter_bind: started a bind on UDP sock=%p tid=%llu", sock, tid); + bpf_map_update_with_telemetry(pending_bind, &pid_tgid, &args, BPF_ANY); + log_debug("sys_enter_bind: started a bind on UDP sock=%p pid_tgid=%llu", sock, pid_tgid); return 0; } static __always_inline int sys_exit_bind(__s64 ret) { - __u64 tid = bpf_get_current_pid_tgid(); + __u64 pid_tgid = bpf_get_current_pid_tgid(); // bail if this bind() is not the one we're instrumenting - bind_syscall_args_t *args = bpf_map_lookup_elem(&pending_bind, &tid); + bind_syscall_args_t *args = bpf_map_lookup_elem(&pending_bind, &pid_tgid); - log_debug("sys_exit_bind: tid=%llu, ret=%lld", tid, ret); + log_debug("sys_exit_bind: pid_tgid=%llu, ret=%lld", pid_tgid, ret); if (args == NULL) { log_debug("sys_exit_bind: was not a UDP bind, will not process"); @@ -70,7 +71,7 @@ static __always_inline int sys_exit_bind(__s64 ret) { struct sock * sk = args->sk; struct sockaddr *addr = args->addr; - bpf_map_delete_elem(&pending_bind, &tid); + bpf_map_delete_elem(&pending_bind, &pid_tgid); if (ret != 0) { return 0; diff --git a/pkg/network/ebpf/c/tracer/stats.h b/pkg/network/ebpf/c/tracer/stats.h index b05811c86190a..862d8e32f81f1 100644 --- a/pkg/network/ebpf/c/tracer/stats.h +++ b/pkg/network/ebpf/c/tracer/stats.h @@ -16,6 +16,7 @@ #include "protocols/tls/tags-types.h" #include "ip.h" #include "skb.h" +#include "pid_tgid.h" #ifdef COMPILE_PREBUILT static __always_inline __u64 offset_rtt(); @@ -286,7 +287,7 @@ static __always_inline int handle_skb_consume_udp(struct sock *sk, struct sk_buf flip_tuple(&t); log_debug("skb_consume_udp: bytes=%d", data_len); - t.pid = pid_tgid >> 32; + t.pid = GET_USER_MODE_PID(pid_tgid); t.netns = get_netns_from_sock(sk); return handle_message(&t, 0, data_len, CONN_DIRECTION_UNKNOWN, 0, 1, PACKET_COUNT_INCREMENT, sk); } From a5253a069be79c1016185470e1d6d82a8d58c223 Mon Sep 17 00:00:00 2001 From: pducolin <45568537+pducolin@users.noreply.github.com> Date: Tue, 17 Dec 2024 13:35:54 +0100 Subject: [PATCH 265/303] [gitlab] allow triggering a dev bump of test-infra (#32245) --- tasks/buildimages.py | 20 ++++++++++++-------- tasks/libs/ciproviders/gitlab_api.py | 28 ++++++++++++++++++---------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/tasks/buildimages.py b/tasks/buildimages.py index 2f7d228d4d070..e2bf5316e18c7 100644 --- a/tasks/buildimages.py +++ b/tasks/buildimages.py @@ -1,7 +1,5 @@ from __future__ import annotations -import os - import yaml from invoke import Context, Exit, task @@ -37,17 +35,23 @@ def update(_: Context, tag: str = "", images: str = "", test: bool = True, list_ print(f" {', '.join(modified)}") -@task(help={"commit_sha": "commit sha from the test-infra-definitions repository"}) -def update_test_infra_definitions(ctx: Context, commit_sha: str, go_mod_only: bool = False): +@task( + help={ + "commit_sha": "commit sha from the test-infra-definitions repository", + "go_mod_only": "Update only the go.mod file", + "is_dev_image": "Is the image bumped to a dev version, used to test changes in test-infra-definitions", + } +) +def update_test_infra_definitions(ctx: Context, commit_sha: str, go_mod_only: bool = False, is_dev_image: bool = False): """ Update the test-infra-definition image version in the Gitlab CI as well as in the e2e go.mod """ if not go_mod_only: - update_test_infra_def(".gitlab/common/test_infra_version.yml", commit_sha[:12]) + update_test_infra_def(".gitlab/common/test_infra_version.yml", commit_sha[:12], is_dev_image) - os.chdir("test/new-e2e") - ctx.run(f"go get github.com/DataDog/test-infra-definitions@{commit_sha}") - ctx.run("go mod tidy") + with ctx.cd("test/new-e2e"): + ctx.run(f"go get github.com/DataDog/test-infra-definitions@{commit_sha}") + ctx.run("go mod tidy") @task( diff --git a/tasks/libs/ciproviders/gitlab_api.py b/tasks/libs/ciproviders/gitlab_api.py index cb4e42644e7c6..adfd8aacfb569 100644 --- a/tasks/libs/ciproviders/gitlab_api.py +++ b/tasks/libs/ciproviders/gitlab_api.py @@ -1258,19 +1258,27 @@ def full_config_get_all_stages(full_config: dict) -> set[str]: return all_stages -def update_test_infra_def(file_path, image_tag): +def update_test_infra_def(file_path, image_tag, is_dev_image=False): """ - Override TEST_INFRA_DEFINITIONS_BUILDIMAGES in `.gitlab/common/test_infra_version.yml` file + Updates TEST_INFRA_DEFINITIONS_BUILDIMAGES in `.gitlab/common/test_infra_version.yml` file """ - with open(file_path) as gl: - file_content = gl.readlines() - with open(file_path, "w") as gl: - for line in file_content: - test_infra_def = re.search(r"TEST_INFRA_DEFINITIONS_BUILDIMAGES:\s*(\w+)", line) - if test_infra_def: - gl.write(line.replace(test_infra_def.group(1), image_tag)) + import yaml + + test_infra_def = {} + with open(file_path) as test_infra_version_file: + try: + test_infra_def = yaml.safe_load(test_infra_version_file) + test_infra_def["variables"]["TEST_INFRA_DEFINITIONS_BUILDIMAGES"] = image_tag + if is_dev_image: + test_infra_def["variables"]["TEST_INFRA_DEFINITIONS_BUILDIMAGES_SUFFIX"] = "-dev" else: - gl.write(line) + test_infra_def["variables"]["TEST_INFRA_DEFINITIONS_BUILDIMAGES_SUFFIX"] = "" + except yaml.YAMLError as e: + raise Exit(f"Error while loading {file_path}: {e}") from e + with open(file_path, "w") as test_infra_version_file: + # Add explicit_start=True to keep the document start marker --- + # See "Document Start" in https://www.yaml.info/learn/document.html for more details + yaml.dump(test_infra_def, test_infra_version_file, explicit_start=True) def update_gitlab_config(file_path, tag, images="", test=True, update=True): From 0eab37397f2a120f891e7f9d3df6f4fe9db29051 Mon Sep 17 00:00:00 2001 From: Guy Arbitman Date: Tue, 17 Dec 2024 14:58:33 +0200 Subject: [PATCH 266/303] usm: sharedlibraries: Increase size of a map (#32286) --- pkg/network/ebpf/c/protocols/tls/native-tls-maps.h | 2 +- pkg/network/usm/ebpf_ssl.go | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/pkg/network/ebpf/c/protocols/tls/native-tls-maps.h b/pkg/network/ebpf/c/protocols/tls/native-tls-maps.h index 282c593308b16..5e139833d4302 100644 --- a/pkg/network/ebpf/c/protocols/tls/native-tls-maps.h +++ b/pkg/network/ebpf/c/protocols/tls/native-tls-maps.h @@ -17,6 +17,6 @@ BPF_HASH_MAP(bio_new_socket_args, __u64, __u32, 1024) BPF_HASH_MAP(fd_by_ssl_bio, __u32, void *, 1024) -BPF_HASH_MAP(ssl_ctx_by_pid_tgid, __u64, void *, 1024) +BPF_HASH_MAP(ssl_ctx_by_pid_tgid, __u64, void *, 1) #endif diff --git a/pkg/network/usm/ebpf_ssl.go b/pkg/network/usm/ebpf_ssl.go index 64e452ea7fe45..4a7800de41d4b 100644 --- a/pkg/network/usm/ebpf_ssl.go +++ b/pkg/network/usm/ebpf_ssl.go @@ -237,7 +237,8 @@ var gnuTLSProbes = []manager.ProbesSelector{ } const ( - sslSockByCtxMap = "ssl_sock_by_ctx" + sslSockByCtxMap = "ssl_sock_by_ctx" + sslCtxByPIDTGIDMap = "ssl_ctx_by_pid_tgid" ) var ( @@ -271,7 +272,7 @@ var opensslSpec = &protocols.ProtocolSpec{ Name: "fd_by_ssl_bio", }, { - Name: "ssl_ctx_by_pid_tgid", + Name: sslCtxByPIDTGIDMap, }, }, Probes: []*manager.Probe{ @@ -491,6 +492,10 @@ func (o *sslProgram) ConfigureOptions(_ *manager.Manager, options *manager.Optio MaxEntries: o.cfg.MaxTrackedConnections, EditorFlag: manager.EditMaxEntries, } + options.MapSpecEditors[sslCtxByPIDTGIDMap] = manager.MapSpecEditor{ + MaxEntries: o.cfg.MaxTrackedConnections, + EditorFlag: manager.EditMaxEntries, + } } // PreStart is called before the start of the provided eBPF manager. @@ -552,7 +557,7 @@ func (o *sslProgram) DumpMaps(w io.Writer, mapName string, currentMap *ebpf.Map) spew.Fdump(w, key, value) } - case "ssl_ctx_by_pid_tgid": // maps/ssl_ctx_by_pid_tgid (BPF_MAP_TYPE_HASH), key C.__u64, value uintptr // C.void * + case sslCtxByPIDTGIDMap: // maps/ssl_ctx_by_pid_tgid (BPF_MAP_TYPE_HASH), key C.__u64, value uintptr // C.void * io.WriteString(w, "Map: '"+mapName+"', key: 'C.__u64', value: 'uintptr // C.void *'\n") iter := currentMap.Iterate() var key uint64 From 9dd33c3f0814a3aaf31280d1d49ff46d741a9947 Mon Sep 17 00:00:00 2001 From: Alex Lopez Date: Tue, 17 Dec 2024 13:58:44 +0100 Subject: [PATCH 267/303] Disable Omnibus git cache for Windows builds (#32289) --- .gitlab/package_build/windows.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitlab/package_build/windows.yml b/.gitlab/package_build/windows.yml index ea458c9db77a7..88c93ac82c01c 100644 --- a/.gitlab/package_build/windows.yml +++ b/.gitlab/package_build/windows.yml @@ -36,7 +36,6 @@ -e BUNDLE_MIRROR__RUBYGEMS__ORG=${BUNDLE_MIRROR__RUBYGEMS__ORG} -e PIP_INDEX_URL=${PIP_INDEX_URL} -e API_KEY_ORG2=${API_KEY_ORG2} - -e OMNIBUS_GIT_CACHE_DIR=${Env:TEMP}/${CI_PIPELINE_ID}/omnibus-git-cache -e AGENT_FLAVOR=${AGENT_FLAVOR} registry.ddbuild.io/ci/datadog-agent-buildimages/windows_1809_${ARCH}${Env:DATADOG_AGENT_WINBUILDIMAGES_SUFFIX}:${Env:DATADOG_AGENT_WINBUILDIMAGES} powershell -C "c:\mnt\tasks\winbuildscripts\Build-AgentPackages.ps1 -BuildOutOfSource 1 -InstallDeps 1 -CheckGoVersion 1" From 8c87fc5ddc3423e6c0851b1842e78d2adb06abba Mon Sep 17 00:00:00 2001 From: Jack Phillips Date: Tue, 17 Dec 2024 08:24:57 -0500 Subject: [PATCH 268/303] update embedded permissions (#32119) Co-authored-by: DeForest Richards <56796055+drichards-87@users.noreply.github.com> --- pkg/collector/python/init_windows.go | 38 +++++++++++++++++++ ...embedded-permissions-a8e169f1c079cd41.yaml | 11 ++++++ .../windows/install-test/installtester.go | 25 ------------ .../ConfigureUserCustomActions.cs | 3 -- 4 files changed, 49 insertions(+), 28 deletions(-) create mode 100644 releasenotes/notes/update-embedded-permissions-a8e169f1c079cd41.yaml diff --git a/pkg/collector/python/init_windows.go b/pkg/collector/python/init_windows.go index 04d18175df1f7..3de1ba7a459b0 100644 --- a/pkg/collector/python/init_windows.go +++ b/pkg/collector/python/init_windows.go @@ -9,8 +9,10 @@ package python import ( "os" + "path/filepath" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" + "github.com/DataDog/datadog-agent/pkg/util/winutil" ) // Any platform-specific initialization belongs here. @@ -21,5 +23,41 @@ func initializePlatform() error { os.Unsetenv("PYTHONPATH") } + // only use cache file when not admin + admin, _ := winutil.IsUserAnAdmin() + if !admin { + err := enableSeparatePythonCacheDir() + if err != nil { + return err + } + } + return nil } + +// enableSeparatePythonCacheDir configures Python to use a separate directory for its pycache. +// +// Creates a python-cache subdir in the configuration directory and configures Python to use it via the PYTHONPYCACHEPREFIX env var. +// +// https://docs.python.org/3/using/cmdline.html#envvar-PYTHONPYCACHEPREFIX +func enableSeparatePythonCacheDir() error { + pd, err := winutil.GetProgramDataDir() + if err != nil { + return err + } + pycache := filepath.Join(pd, "python-cache") + + // check if path exists and create directory if it doesn't + if _, err := os.Stat(pycache); os.IsNotExist(err) { + if err := os.MkdirAll(pycache, 0755); err != nil { + return err + } + } else if err != nil { + return err + } + + os.Setenv("PYTHONPYCACHEPREFIX", pycache) + + return nil + +} diff --git a/releasenotes/notes/update-embedded-permissions-a8e169f1c079cd41.yaml b/releasenotes/notes/update-embedded-permissions-a8e169f1c079cd41.yaml new file mode 100644 index 0000000000000..8b9cafd486a16 --- /dev/null +++ b/releasenotes/notes/update-embedded-permissions-a8e169f1c079cd41.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +security: + - | + Move the embedded Python cache out of the installation directory on Windows. diff --git a/test/new-e2e/tests/windows/install-test/installtester.go b/test/new-e2e/tests/windows/install-test/installtester.go index e0fbee6886600..f0c86fdf8c9d1 100644 --- a/test/new-e2e/tests/windows/install-test/installtester.go +++ b/test/new-e2e/tests/windows/install-test/installtester.go @@ -536,31 +536,6 @@ func (t *Tester) testInstalledFilePermissions(tt *testing.T, ddAgentUserIdentity }) } - // expect to have standard inherited permissions, plus an explciit ACE for ddagentuser - embeddedPaths := []string{ - filepath.Join(t.expectedInstallPath, "embedded3"), - } - if t.ExpectPython2Installed() { - embeddedPaths = append(embeddedPaths, - filepath.Join(t.expectedInstallPath, "embedded2"), - ) - } - agentUserFullAccessDirRule := windows.NewExplicitAccessRuleWithFlags( - ddAgentUserIdentity, - windows.FileFullControl, - windows.AccessControlTypeAllow, - windows.InheritanceFlagsContainer|windows.InheritanceFlagsObject, - windows.PropagationFlagsNone, - ) - for _, path := range embeddedPaths { - out, err := windows.GetSecurityInfoForPath(t.host, path) - require.NoError(tt, err) - if !windows.IsIdentityLocalSystem(ddAgentUserIdentity) { - windows.AssertContainsEqualable(tt, out.Access, agentUserFullAccessDirRule, "%s should have full access rule for %s", path, ddAgentUserIdentity) - } - assert.False(tt, out.AreAccessRulesProtected, "%s should inherit access rules", path) - } - // ensure the agent user does not have an ACE on the install dir out, err := windows.GetSecurityInfoForPath(t.host, t.expectedInstallPath) require.NoError(tt, err) diff --git a/tools/windows/DatadogAgentInstaller/CustomActions/ConfigureUserCustomActions.cs b/tools/windows/DatadogAgentInstaller/CustomActions/ConfigureUserCustomActions.cs index 1447f8a080fd0..817f118b0c797 100644 --- a/tools/windows/DatadogAgentInstaller/CustomActions/ConfigureUserCustomActions.cs +++ b/tools/windows/DatadogAgentInstaller/CustomActions/ConfigureUserCustomActions.cs @@ -586,9 +586,6 @@ private List PathsWithAgentAccess() // agent needs to be able to write to run/ // agent needs to be able to create auth_token _session.Property("APPLICATIONDATADIRECTORY"), - // allow agent to write __pycache__ - Path.Combine(_session.Property("PROJECTLOCATION"), "embedded2"), - Path.Combine(_session.Property("PROJECTLOCATION"), "embedded3"), }; } From d18fc884c26d4e5b1cbf1344b005253c342df311 Mon Sep 17 00:00:00 2001 From: Arthur Bellal Date: Tue, 17 Dec 2024 14:34:37 +0100 Subject: [PATCH 269/303] (fleet) persist proxy settings during setup (#32217) --- pkg/fleet/installer/setup/common/config.go | 8 ++++++++ pkg/fleet/installer/setup/common/setup.go | 12 +++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pkg/fleet/installer/setup/common/config.go b/pkg/fleet/installer/setup/common/config.go index 650b6b0acebe7..7d9e00aba1483 100644 --- a/pkg/fleet/installer/setup/common/config.go +++ b/pkg/fleet/installer/setup/common/config.go @@ -103,6 +103,7 @@ type DatadogConfig struct { APIKey string `yaml:"api_key"` Hostname string `yaml:"hostname,omitempty"` Site string `yaml:"site,omitempty"` + Proxy DatadogConfigProxy `yaml:"proxy,omitempty"` Env string `yaml:"env,omitempty"` Tags []string `yaml:"tags,omitempty"` LogsEnabled bool `yaml:"logs_enabled,omitempty"` @@ -111,6 +112,13 @@ type DatadogConfig struct { ExpectedTagsDuration string `yaml:"expected_tags_duration,omitempty"` } +// DatadogConfigProxy represents the configuration for the proxy +type DatadogConfigProxy struct { + HTTP string `yaml:"http,omitempty"` + HTTPS string `yaml:"https,omitempty"` + NoProxy []string `yaml:"no_proxy,omitempty"` +} + // DatadogConfigDJM represents the configuration for the Data Jobs Monitoring type DatadogConfigDJM struct { Enabled bool `yaml:"enabled,omitempty"` diff --git a/pkg/fleet/installer/setup/common/setup.go b/pkg/fleet/installer/setup/common/setup.go index 60931ef01da69..0a7b93447c22f 100644 --- a/pkg/fleet/installer/setup/common/setup.go +++ b/pkg/fleet/installer/setup/common/setup.go @@ -12,6 +12,7 @@ import ( "fmt" "io" "os" + "strings" "time" "github.com/DataDog/datadog-agent/pkg/fleet/installer" @@ -60,6 +61,10 @@ Running the %s installation script (https://github.com/DataDog/datadog-agent/tre if err != nil { return nil, fmt.Errorf("failed to create installer: %w", err) } + var proxyNoProxy []string + if os.Getenv("DD_PROXY_NO_PROXY") != "" { + proxyNoProxy = strings.Split(os.Getenv("DD_PROXY_NO_PROXY"), ",") + } span, ctx := telemetry.StartSpanFromContext(ctx, fmt.Sprintf("setup.%s", flavor)) s := &Setup{ configDir: configDir, @@ -75,7 +80,12 @@ Running the %s installation script (https://github.com/DataDog/datadog-agent/tre APIKey: env.APIKey, Hostname: os.Getenv("DD_HOSTNAME"), Site: env.Site, - Env: os.Getenv("DD_ENV"), + Proxy: DatadogConfigProxy{ + HTTP: os.Getenv("DD_PROXY_HTTP"), + HTTPS: os.Getenv("DD_PROXY_HTTPS"), + NoProxy: proxyNoProxy, + }, + Env: os.Getenv("DD_ENV"), }, IntegrationConfigs: make(map[string]IntegrationConfig), }, From 6c2005471e5ffb61ec454ceac51ee9cf7087f615 Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Tue, 17 Dec 2024 14:54:15 +0100 Subject: [PATCH 270/303] Exit early if CI_COMMIT_REF_NAME is empty (#32241) --- tasks/pipeline.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tasks/pipeline.py b/tasks/pipeline.py index 59aa6a3666172..ad825bee1540d 100644 --- a/tasks/pipeline.py +++ b/tasks/pipeline.py @@ -131,6 +131,9 @@ def auto_cancel_previous_pipelines(ctx): raise Exit("GITLAB_TOKEN variable needed to cancel pipelines on the same ref.", 1) git_ref = os.environ["CI_COMMIT_REF_NAME"] + if git_ref == "": + raise Exit("CI_COMMIT_REF_NAME is empty, skipping pipeline cancellation", 0) + git_sha = os.getenv("CI_COMMIT_SHA") repo = get_gitlab_repo() From 5d81b5d4377ca3be9dac2134700683eedb516337 Mon Sep 17 00:00:00 2001 From: Aldrick Castro Date: Tue, 17 Dec 2024 09:27:20 -0500 Subject: [PATCH 271/303] Corrected how we submit the oracle.can_connect check (#31945) --- pkg/collector/corechecks/oracle/oracle.go | 2 +- .../corechecks/oracle/oracle_integration_test.go | 8 ++++++++ ...-oracle-can_connect-host-tag-c7b00cb45e17735c.yaml | 11 +++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/fix-oracle-can_connect-host-tag-c7b00cb45e17735c.yaml diff --git a/pkg/collector/corechecks/oracle/oracle.go b/pkg/collector/corechecks/oracle/oracle.go index a36830ceb39bb..224555ba85bd6 100644 --- a/pkg/collector/corechecks/oracle/oracle.go +++ b/pkg/collector/corechecks/oracle/oracle.go @@ -137,7 +137,7 @@ func handleServiceCheck(c *Check, err error) { status = servicecheck.ServiceCheckCritical log.Errorf("%s failed to connect: %s", c.logPrompt, err) } - sender.ServiceCheck("oracle.can_connect", status, "", c.tags, message) + sendServiceCheck(c, "oracle.can_connect", status, message) sender.Commit() } diff --git a/pkg/collector/corechecks/oracle/oracle_integration_test.go b/pkg/collector/corechecks/oracle/oracle_integration_test.go index c0df585ca2065..0d37c3d66ec50 100644 --- a/pkg/collector/corechecks/oracle/oracle_integration_test.go +++ b/pkg/collector/corechecks/oracle/oracle_integration_test.go @@ -424,6 +424,14 @@ func buildConnectionString(connectionConfig config.ConnectionConfig) string { return connStr } +func TestCanConnectTags(t *testing.T) { + chk, sender := newDefaultCheck(t, "", "") + err := chk.Run() + require.NoError(t, err) + + sender.AssertServiceCheck(t, "oracle.can_connect", servicecheck.ServiceCheckOK, chk.dbHostname, nil, "") +} + func TestLargeUint64Binding(t *testing.T) { var err error c, _ := newDefaultCheck(t, "", "") diff --git a/releasenotes/notes/fix-oracle-can_connect-host-tag-c7b00cb45e17735c.yaml b/releasenotes/notes/fix-oracle-can_connect-host-tag-c7b00cb45e17735c.yaml new file mode 100644 index 0000000000000..df805c338b08c --- /dev/null +++ b/releasenotes/notes/fix-oracle-can_connect-host-tag-c7b00cb45e17735c.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + Corrects host tagging for the oracle.can_connect service check From 593c137a1db537f340ffb990c7d30386d7bec289 Mon Sep 17 00:00:00 2001 From: "agent-platform-auto-pr[bot]" <153269286+agent-platform-auto-pr[bot]@users.noreply.github.com> Date: Tue, 17 Dec 2024 15:29:14 +0000 Subject: [PATCH 272/303] [test-infra-definitions][automated] Bump test-infra-definitions to 4b4112f5f64d18c33cc15eb1bc8eccb603b71a93 (#32288) Co-authored-by: L3n41c Co-authored-by: pducolin Co-authored-by: adel121 --- .gitlab/common/test_infra_version.yml | 2 +- go.mod | 20 +++--- go.sum | 40 +++++------ test/new-e2e/go.mod | 44 ++++++------ test/new-e2e/go.sum | 84 +++++++++++------------ test/new-e2e/tests/containers/k8s_test.go | 10 ++- test/new-e2e/tests/orchestrator/apply.go | 7 ++ 7 files changed, 110 insertions(+), 97 deletions(-) diff --git a/.gitlab/common/test_infra_version.yml b/.gitlab/common/test_infra_version.yml index 7d435a4bc3a4b..71934be35d15a 100644 --- a/.gitlab/common/test_infra_version.yml +++ b/.gitlab/common/test_infra_version.yml @@ -4,4 +4,4 @@ variables: # and check the job creating the image to make sure you have the right SHA prefix TEST_INFRA_DEFINITIONS_BUILDIMAGES_SUFFIX: "" # Make sure to update test-infra-definitions version in go.mod as well - TEST_INFRA_DEFINITIONS_BUILDIMAGES: 9c7c5005ca28 + TEST_INFRA_DEFINITIONS_BUILDIMAGES: 4b4112f5f64d diff --git a/go.mod b/go.mod index e8175e8cf0efb..30981dbec9ce2 100644 --- a/go.mod +++ b/go.mod @@ -375,19 +375,19 @@ require ( github.com/armon/go-metrics v0.4.1 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/awalterschulze/gographviz v2.0.3+incompatible // indirect - github.com/aws/aws-sdk-go-v2 v1.32.5 - github.com/aws/aws-sdk-go-v2/config v1.28.5 - github.com/aws/aws-sdk-go-v2/credentials v1.17.46 - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.24 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24 // indirect + github.com/aws/aws-sdk-go-v2 v1.32.6 + github.com/aws/aws-sdk-go-v2/config v1.28.6 + github.com/aws/aws-sdk-go-v2/credentials v1.17.47 + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect github.com/aws/aws-sdk-go-v2/service/ebs v1.27.0 // indirect github.com/aws/aws-sdk-go-v2/service/ec2 v1.190.0 - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.24.6 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.33.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 // indirect github.com/aws/smithy-go v1.22.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 // indirect diff --git a/go.sum b/go.sum index 44b70bde70c36..26375333ef0cf 100644 --- a/go.sum +++ b/go.sum @@ -321,24 +321,24 @@ github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2z github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go-v2 v1.21.2/go.mod h1:ErQhvNuEMhJjweavOYhxVkn2RUx7kQXVATHrjKtxIpM= -github.com/aws/aws-sdk-go-v2 v1.32.5 h1:U8vdWJuY7ruAkzaOdD7guwJjD06YSKmnKCJs7s3IkIo= -github.com/aws/aws-sdk-go-v2 v1.32.5/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U= +github.com/aws/aws-sdk-go-v2 v1.32.6 h1:7BokKRgRPuGmKkFMhEg/jSul+tB9VvXhcViILtfG8b4= +github.com/aws/aws-sdk-go-v2 v1.32.6/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.14/go.mod h1:9NCTOURS8OpxvoAVHq79LK81/zC78hfRWFn+aL0SPcY= github.com/aws/aws-sdk-go-v2/config v1.19.0/go.mod h1:ZwDUgFnQgsazQTnWfeLWk5GjeqTQTL8lMkoE1UXzxdE= -github.com/aws/aws-sdk-go-v2/config v1.28.5 h1:Za41twdCXbuyyWv9LndXxZZv3QhTG1DinqlFsSuvtI0= -github.com/aws/aws-sdk-go-v2/config v1.28.5/go.mod h1:4VsPbHP8JdcdUDmbTVgNL/8w9SqOkM5jyY8ljIxLO3o= +github.com/aws/aws-sdk-go-v2/config v1.28.6 h1:D89IKtGrs/I3QXOLNTH93NJYtDhm8SYa9Q5CsPShmyo= +github.com/aws/aws-sdk-go-v2/config v1.28.6/go.mod h1:GDzxJ5wyyFSCoLkS+UhGB0dArhb9mI+Co4dHtoTxbko= github.com/aws/aws-sdk-go-v2/credentials v1.13.43/go.mod h1:zWJBz1Yf1ZtX5NGax9ZdNjhhI4rgjfgsyk6vTY1yfVg= -github.com/aws/aws-sdk-go-v2/credentials v1.17.46 h1:AU7RcriIo2lXjUfHFnFKYsLCwgbz1E7Mm95ieIRDNUg= -github.com/aws/aws-sdk-go-v2/credentials v1.17.46/go.mod h1:1FmYyLGL08KQXQ6mcTlifyFXfJVCNJTVGuQP4m0d/UA= +github.com/aws/aws-sdk-go-v2/credentials v1.17.47 h1:48bA+3/fCdi2yAwVt+3COvmatZ6jUDNkDTIsqDiMUdw= +github.com/aws/aws-sdk-go-v2/credentials v1.17.47/go.mod h1:+KdckOejLW3Ks3b0E3b5rHsr2f9yuORBum0WPnE5o5w= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13/go.mod h1:f/Ib/qYjhV2/qdsf79H3QP/eRE4AkVyEf6sk7XfZ1tg= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.20 h1:sDSXIrlsFSFJtWKLQS4PUWRvrT580rrnuLydJrCQ/yA= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.20/go.mod h1:WZ/c+w0ofps+/OUqMwWgnfrgzZH1DZO1RIkktICsqnY= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 h1:AmoU1pziydclFT/xRV+xXE/Vb8fttJCLRPv8oAkprc0= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21/go.mod h1:AjUdLYe4Tgs6kpH4Bv7uMZo7pottoyHMn4eTcIcneaY= github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43/go.mod h1:auo+PiyLl0n1l8A0e8RIeR8tOzYPfZZH/JNlrJ8igTQ= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.24 h1:4usbeaes3yJnCFC7kfeyhkdkPtoRYPa/hTmCqMpKpLI= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.24/go.mod h1:5CI1JemjVwde8m2WG3cz23qHKPOxbpkq0HaoreEgLIY= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 h1:s/fF4+yDQDoElYhfIVvSNyeCydfbuTKzhxSXDXCPasU= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25/go.mod h1:IgPfDv5jqFIzQSNbUEMoitNooSMXjRSDkhXv8jiROvU= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37/go.mod h1:Qe+2KtKml+FEsQF/DHmDV+xjtche/hwoF75EG4UlHW8= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24 h1:N1zsICrQglfzaBnrfM0Ys00860C+QFwu6u/5+LomP+o= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24/go.mod h1:dCn9HbJ8+K31i8IQ8EWmWj0EiIk0+vKiHNMxTTYveAg= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 h1:ZntTCl5EsYnhN/IygQEUugpdwbhdkom9uHcbCftiGgA= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25/go.mod h1:DBdPrgeocww+CSl1C8cEV8PN1mHMBhuCDLpXezyvWkE= github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45/go.mod h1:lD5M20o09/LCuQ2mE62Mb/iSdSlCNuj6H5ci7tW7OsE= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= @@ -352,8 +352,8 @@ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhv github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.38/go.mod h1:epIZoRSSbRIwLPJU5F+OldHhwZPBdpDeQkRdCeY3+00= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37/go.mod h1:vBmDnwWXWxNPFRMmG2m/3MKOe+xEcMDo1tanpaWCcck= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5 h1:wtpJ4zcwrSbwhECWQoI/g6WM9zqCcSpHDJIWSbMLOu4= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5/go.mod h1:qu/W9HXQbbQ4+1+JcZp0ZNPV31ym537ZJN+fiS7Ti8E= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 h1:50+XsN70RS7dwJ2CkVNXzj7U2L1HKP8nqTd3XWEXBN4= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6/go.mod h1:WqgLmwY7so32kG01zD8CPTJWVWM+TzJoOVHwTg4aPug= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.6/go.mod h1:lnc2taBsR9nTlz9meD+lhFZZ9EWY712QHrRflWpTcOA= github.com/aws/aws-sdk-go-v2/service/kms v1.37.6 h1:CZImQdb1QbU9sGgJ9IswhVkxAcjkkD1eQTMA1KHWk+E= github.com/aws/aws-sdk-go-v2/service/kms v1.37.6/go.mod h1:YJDdlK0zsyxVBxGU48AR/Mi8DMrGdc1E3Yij4fNrONA= @@ -363,14 +363,14 @@ github.com/aws/aws-sdk-go-v2/service/s3 v1.40.2/go.mod h1:Zjfqt7KhQK+PO1bbOsFNzK github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.6 h1:1KDMKvOKNrpD667ORbZ/+4OgvUoaok1gg/MLzrHF9fw= github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.6/go.mod h1:DmtyfCfONhOyVAJ6ZMTrDSFIeyCBlEO93Qkfhxwbxu0= github.com/aws/aws-sdk-go-v2/service/sso v1.15.2/go.mod h1:gsL4keucRCgW+xA85ALBpRFfdSLH4kHOVSnLMSuBECo= -github.com/aws/aws-sdk-go-v2/service/sso v1.24.6 h1:3zu537oLmsPfDMyjnUS2g+F2vITgy5pB74tHI+JBNoM= -github.com/aws/aws-sdk-go-v2/service/sso v1.24.6/go.mod h1:WJSZH2ZvepM6t6jwu4w/Z45Eoi75lPN7DcydSRtJg6Y= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 h1:rLnYAfXQ3YAccocshIH5mzNNwZBkBo+bP6EhIxak6Hw= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.7/go.mod h1:ZHtuQJ6t9A/+YDuxOLnbryAmITtr8UysSny3qcyvJTc= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3/go.mod h1:a7bHA82fyUXOm+ZSWKU6PIoBxrjSprdLoM8xPYvzYVg= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5 h1:K0OQAsDywb0ltlFrZm0JHPY3yZp/S9OaoLU33S7vPS8= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5/go.mod h1:ORITg+fyuMoeiQFiVGoqB3OydVTLkClw/ljbblMq6Cc= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 h1:JnhTZR3PiYDNKlXy50/pNeix9aGMo6lLpXwJ1mw8MD4= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6/go.mod h1:URronUEGfXZN1VpdktPSD1EkAL9mfrV+2F4sjH38qOY= github.com/aws/aws-sdk-go-v2/service/sts v1.23.2/go.mod h1:Eows6e1uQEsc4ZaHANmsPRzAKcVDrcmjjWiih2+HUUQ= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.1 h1:6SZUVRQNvExYlMLbHdlKB48x0fLbc2iVROyaNEwBHbU= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.1/go.mod h1:GqWyYCwLXnlUB1lOAXQyNSPqPLQJvmo8J0DWBzp9mtg= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 h1:s4074ZO1Hk8qv65GqNXqDjmkf4HSQqJukaLuuW0TpDA= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.2/go.mod h1:mVggCnIWoM09jP71Wh+ea7+5gAp53q+49wDFs1SW5z8= github.com/aws/smithy-go v1.15.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro= github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= diff --git a/test/new-e2e/go.mod b/test/new-e2e/go.mod index 008a6b32a4753..2bd2138c3ea69 100644 --- a/test/new-e2e/go.mod +++ b/test/new-e2e/go.mod @@ -45,7 +45,7 @@ replace ( require ( github.com/DataDog/agent-payload/v5 v5.0.138 github.com/DataDog/datadog-agent/comp/otelcol/ddflareextension/def v0.56.2 - github.com/DataDog/datadog-agent/pkg/util/optional v0.59.0 + github.com/DataDog/datadog-agent/pkg/util/optional v0.59.1 github.com/DataDog/datadog-agent/pkg/util/pointer v0.59.0 github.com/DataDog/datadog-agent/pkg/util/scrubber v0.59.0 github.com/DataDog/datadog-agent/pkg/util/testutil v0.56.2 @@ -58,9 +58,9 @@ require ( // `TEST_INFRA_DEFINITIONS_BUILDIMAGES` matches the commit sha in the module version // Example: github.com/DataDog/test-infra-definitions v0.0.0-YYYYMMDDHHmmSS-0123456789AB // => TEST_INFRA_DEFINITIONS_BUILDIMAGES: 0123456789AB - github.com/DataDog/test-infra-definitions v0.0.0-20241211124138-9c7c5005ca28 - github.com/aws/aws-sdk-go-v2 v1.32.5 - github.com/aws/aws-sdk-go-v2/config v1.28.5 + github.com/DataDog/test-infra-definitions v0.0.0-20241217110507-4b4112f5f64d + github.com/aws/aws-sdk-go-v2 v1.32.6 + github.com/aws/aws-sdk-go-v2/config v1.28.6 github.com/aws/aws-sdk-go-v2/service/ec2 v1.190.0 github.com/aws/aws-sdk-go-v2/service/eks v1.51.0 github.com/aws/aws-sdk-go-v2/service/ssm v1.55.2 @@ -109,22 +109,22 @@ require ( github.com/alessio/shellescape v1.4.2 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect github.com/atotto/clipboard v0.1.4 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.17.46 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.24 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.47 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.21 // indirect - github.com/aws/aws-sdk-go-v2/service/ecr v1.36.2 // indirect - github.com/aws/aws-sdk-go-v2/service/ecs v1.47.4 + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.25 // indirect + github.com/aws/aws-sdk-go-v2/service/ecr v1.36.7 // indirect + github.com/aws/aws-sdk-go-v2/service/ecs v1.52.2 github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.2 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.2 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.24.6 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.33.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.6 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.6 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 // indirect github.com/aws/smithy-go v1.22.1 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/blang/semver v3.5.1+incompatible // indirect @@ -217,8 +217,8 @@ require ( github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect github.com/pulumi/esc v0.10.0 // indirect github.com/pulumi/pulumi-command/sdk v1.0.1 // indirect - github.com/pulumi/pulumi-docker/sdk/v4 v4.5.5 // indirect - github.com/pulumi/pulumi-libvirt/sdk v0.4.7 // indirect + github.com/pulumi/pulumi-docker/sdk/v4 v4.5.7 // indirect + github.com/pulumi/pulumi-libvirt/sdk v0.5.3 // indirect github.com/pulumi/pulumi-random/sdk/v4 v4.16.7 // indirect github.com/pulumi/pulumi-tls/sdk/v4 v4.11.1 // indirect github.com/pulumiverse/pulumi-time/sdk v0.1.0 // indirect @@ -284,7 +284,7 @@ require ( github.com/DataDog/datadog-agent/pkg/trace v0.56.0-rc.3 github.com/DataDog/datadog-go/v5 v5.6.0 github.com/aws/aws-sdk-go v1.55.5 - github.com/aws/aws-sdk-go-v2/service/s3 v1.66.0 + github.com/aws/aws-sdk-go-v2/service/s3 v1.71.0 github.com/aws/session-manager-plugin v0.0.0-20241119210807-82dc72922492 github.com/digitalocean/go-libvirt v0.0.0-20240812180835-9c6c0a310c6c github.com/hairyhenderson/go-codeowners v0.7.0 @@ -309,7 +309,7 @@ require ( github.com/pulumi/pulumi-azure-native-sdk/managedidentity/v2 v2.73.1 // indirect github.com/pulumi/pulumi-azure-native-sdk/network/v2 v2.73.1 // indirect github.com/pulumi/pulumi-azure-native-sdk/v2 v2.73.1 // indirect - github.com/pulumi/pulumi-eks/sdk/v3 v3.3.0 // indirect + github.com/pulumi/pulumi-eks/sdk/v3 v3.4.0 // indirect github.com/pulumi/pulumi-gcp/sdk/v7 v7.38.0 // indirect github.com/twinj/uuid v0.0.0-20151029044442-89173bcdda19 // indirect github.com/x448/float16 v0.8.4 // indirect diff --git a/test/new-e2e/go.sum b/test/new-e2e/go.sum index cbbd971dd8ac3..b08902fb2e378 100644 --- a/test/new-e2e/go.sum +++ b/test/new-e2e/go.sum @@ -17,8 +17,8 @@ github.com/DataDog/datadog-go/v5 v5.6.0 h1:2oCLxjF/4htd55piM75baflj/KoE6VYS7alEU github.com/DataDog/datadog-go/v5 v5.6.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= -github.com/DataDog/test-infra-definitions v0.0.0-20241211124138-9c7c5005ca28 h1:LaZgAke+RN4wBKNl+R10ewdtKe/C2MJCbp9ozXKlLP8= -github.com/DataDog/test-infra-definitions v0.0.0-20241211124138-9c7c5005ca28/go.mod h1:blPG0VXBgk1oXm2+KHMTMyR0sNI2jv51FACAYPNQvNo= +github.com/DataDog/test-infra-definitions v0.0.0-20241217110507-4b4112f5f64d h1:F1yqGiWtXVsHkMiNUhs8bgaoZ1WlV3rYGRZ1CtCxpm8= +github.com/DataDog/test-infra-definitions v0.0.0-20241217110507-4b4112f5f64d/go.mod h1:1PAUwGjC25ACjfft4HrLEmHliuajlvjzcLFWpuqAIyk= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/DataDog/zstd_0 v0.0.0-20210310093942-586c1286621f h1:5Vuo4niPKFkfwW55jV4vY0ih3VQ9RaQqeqY67fvRn8A= @@ -52,50 +52,50 @@ github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= -github.com/aws/aws-sdk-go-v2 v1.32.5 h1:U8vdWJuY7ruAkzaOdD7guwJjD06YSKmnKCJs7s3IkIo= -github.com/aws/aws-sdk-go-v2 v1.32.5/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6 h1:pT3hpW0cOHRJx8Y0DfJUEQuqPild8jRGmSFmBgvydr0= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6/go.mod h1:j/I2++U0xX+cr44QjHay4Cvxj6FUbnxrgmqN3H1jTZA= -github.com/aws/aws-sdk-go-v2/config v1.28.5 h1:Za41twdCXbuyyWv9LndXxZZv3QhTG1DinqlFsSuvtI0= -github.com/aws/aws-sdk-go-v2/config v1.28.5/go.mod h1:4VsPbHP8JdcdUDmbTVgNL/8w9SqOkM5jyY8ljIxLO3o= -github.com/aws/aws-sdk-go-v2/credentials v1.17.46 h1:AU7RcriIo2lXjUfHFnFKYsLCwgbz1E7Mm95ieIRDNUg= -github.com/aws/aws-sdk-go-v2/credentials v1.17.46/go.mod h1:1FmYyLGL08KQXQ6mcTlifyFXfJVCNJTVGuQP4m0d/UA= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.20 h1:sDSXIrlsFSFJtWKLQS4PUWRvrT580rrnuLydJrCQ/yA= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.20/go.mod h1:WZ/c+w0ofps+/OUqMwWgnfrgzZH1DZO1RIkktICsqnY= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.24 h1:4usbeaes3yJnCFC7kfeyhkdkPtoRYPa/hTmCqMpKpLI= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.24/go.mod h1:5CI1JemjVwde8m2WG3cz23qHKPOxbpkq0HaoreEgLIY= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24 h1:N1zsICrQglfzaBnrfM0Ys00860C+QFwu6u/5+LomP+o= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24/go.mod h1:dCn9HbJ8+K31i8IQ8EWmWj0EiIk0+vKiHNMxTTYveAg= +github.com/aws/aws-sdk-go-v2 v1.32.6 h1:7BokKRgRPuGmKkFMhEg/jSul+tB9VvXhcViILtfG8b4= +github.com/aws/aws-sdk-go-v2 v1.32.6/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 h1:lL7IfaFzngfx0ZwUGOZdsFFnQ5uLvR0hWqqhyE7Q9M8= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7/go.mod h1:QraP0UcVlQJsmHfioCrveWOC1nbiWUl3ej08h4mXWoc= +github.com/aws/aws-sdk-go-v2/config v1.28.6 h1:D89IKtGrs/I3QXOLNTH93NJYtDhm8SYa9Q5CsPShmyo= +github.com/aws/aws-sdk-go-v2/config v1.28.6/go.mod h1:GDzxJ5wyyFSCoLkS+UhGB0dArhb9mI+Co4dHtoTxbko= +github.com/aws/aws-sdk-go-v2/credentials v1.17.47 h1:48bA+3/fCdi2yAwVt+3COvmatZ6jUDNkDTIsqDiMUdw= +github.com/aws/aws-sdk-go-v2/credentials v1.17.47/go.mod h1:+KdckOejLW3Ks3b0E3b5rHsr2f9yuORBum0WPnE5o5w= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 h1:AmoU1pziydclFT/xRV+xXE/Vb8fttJCLRPv8oAkprc0= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21/go.mod h1:AjUdLYe4Tgs6kpH4Bv7uMZo7pottoyHMn4eTcIcneaY= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 h1:s/fF4+yDQDoElYhfIVvSNyeCydfbuTKzhxSXDXCPasU= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25/go.mod h1:IgPfDv5jqFIzQSNbUEMoitNooSMXjRSDkhXv8jiROvU= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 h1:ZntTCl5EsYnhN/IygQEUugpdwbhdkom9uHcbCftiGgA= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25/go.mod h1:DBdPrgeocww+CSl1C8cEV8PN1mHMBhuCDLpXezyvWkE= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.21 h1:7edmS3VOBDhK00b/MwGtGglCm7hhwNYnjJs/PgFdMQE= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.21/go.mod h1:Q9o5h4HoIWG8XfzxqiuK/CGUbepCJ8uTlaE3bAbxytQ= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.25 h1:r67ps7oHCYnflpgDy2LZU0MAQtQbYIOqNNnqGO6xQkE= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.25/go.mod h1:GrGY+Q4fIokYLtjCVB/aFfCVL6hhGUFl8inD18fDalE= github.com/aws/aws-sdk-go-v2/service/ec2 v1.190.0 h1:k97fGog9Tl0woxTiSIHN14Qs5ehqK6GXejUwkhJYyL0= github.com/aws/aws-sdk-go-v2/service/ec2 v1.190.0/go.mod h1:mzj8EEjIHSN2oZRXiw1Dd+uB4HZTl7hC8nBzX9IZMWw= -github.com/aws/aws-sdk-go-v2/service/ecr v1.36.2 h1:VDQaVwGOokbd3VUbHF+wupiffdrbAZPdQnr5XZMJqrs= -github.com/aws/aws-sdk-go-v2/service/ecr v1.36.2/go.mod h1:lvUlMghKYmSxSfv0vU7pdU/8jSY+s0zpG8xXhaGKCw0= -github.com/aws/aws-sdk-go-v2/service/ecs v1.47.4 h1:CTkPGE8fiElvLtYWl/U+Eu5+1fVXiZbJUjyVCRSRgxk= -github.com/aws/aws-sdk-go-v2/service/ecs v1.47.4/go.mod h1:sMFLFhL27cKYa/eQYZp4asvIwHsnJWrAzTUpy9AQdnU= +github.com/aws/aws-sdk-go-v2/service/ecr v1.36.7 h1:R+5XKIJga2K9Dkj0/iQ6fD/MBGo02oxGGFTc512lK/Q= +github.com/aws/aws-sdk-go-v2/service/ecr v1.36.7/go.mod h1:fDPQV/6ONOQOjvtKhtypIy1wcGLcKYtoK/lvZ9fyDGQ= +github.com/aws/aws-sdk-go-v2/service/ecs v1.52.2 h1:LRM6z+wmXqAgCvuH36RR+Wf8SZZhvOVjt6f5r38V2II= +github.com/aws/aws-sdk-go-v2/service/ecs v1.52.2/go.mod h1:Ghi1OWUv4+VMEULWiHsKH2gNA3KAcMoLWsvU0eRXvIA= github.com/aws/aws-sdk-go-v2/service/eks v1.51.0 h1:BYyB+byjQ7oyupe3v+YjTp1yfmfNEwChYA2naCc85xI= github.com/aws/aws-sdk-go-v2/service/eks v1.51.0/go.mod h1:oaPCqTzAe8C5RQZJGRD4RENcV7A4n99uGxbD4rULbNg= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.2 h1:4FMHqLfk0efmTqhXVRL5xYRqlEBNBiRI7N6w4jsEdd4= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.2/go.mod h1:LWoqeWlK9OZeJxsROW2RqrSPvQHKTpp69r/iDjwsSaw= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5 h1:wtpJ4zcwrSbwhECWQoI/g6WM9zqCcSpHDJIWSbMLOu4= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5/go.mod h1:qu/W9HXQbbQ4+1+JcZp0ZNPV31ym537ZJN+fiS7Ti8E= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.2 h1:t7iUP9+4wdc5lt3E41huP+GvQZJD38WLsgVp4iOtAjg= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.2/go.mod h1:/niFCtmuQNxqx9v8WAPq5qh7EH25U4BF6tjoyq9bObM= -github.com/aws/aws-sdk-go-v2/service/s3 v1.66.0 h1:xA6XhTF7PE89BCNHJbQi8VvPzcgMtmGC5dr8S8N7lHk= -github.com/aws/aws-sdk-go-v2/service/s3 v1.66.0/go.mod h1:cB6oAuus7YXRZhWCc1wIwPywwZ1XwweNp2TVAEGYeB8= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.6 h1:HCpPsWqmYQieU7SS6E9HXfdAMSud0pteVXieJmcpIRI= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.6/go.mod h1:ngUiVRCco++u+soRRVBIvBZxSMMvOVMXA4PJ36JLfSw= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 h1:50+XsN70RS7dwJ2CkVNXzj7U2L1HKP8nqTd3XWEXBN4= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6/go.mod h1:WqgLmwY7so32kG01zD8CPTJWVWM+TzJoOVHwTg4aPug= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.6 h1:BbGDtTi0T1DYlmjBiCr/le3wzhA37O8QTC5/Ab8+EXk= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.6/go.mod h1:hLMJt7Q8ePgViKupeymbqI0la+t9/iYFBjxQCFwuAwI= +github.com/aws/aws-sdk-go-v2/service/s3 v1.71.0 h1:nyuzXooUNJexRT0Oy0UQY6AhOzxPxhtt4DcBIHyCnmw= +github.com/aws/aws-sdk-go-v2/service/s3 v1.71.0/go.mod h1:sT/iQz8JK3u/5gZkT+Hmr7GzVZehUMkRZpOaAwYXeGY= github.com/aws/aws-sdk-go-v2/service/ssm v1.55.2 h1:z6Pq4+jtKlhK4wWJGHRGwMLGjC1HZwAO3KJr/Na0tSU= github.com/aws/aws-sdk-go-v2/service/ssm v1.55.2/go.mod h1:DSmu/VZzpQlAubWBbAvNpt+S4k/XweglJi4XaDGyvQk= -github.com/aws/aws-sdk-go-v2/service/sso v1.24.6 h1:3zu537oLmsPfDMyjnUS2g+F2vITgy5pB74tHI+JBNoM= -github.com/aws/aws-sdk-go-v2/service/sso v1.24.6/go.mod h1:WJSZH2ZvepM6t6jwu4w/Z45Eoi75lPN7DcydSRtJg6Y= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5 h1:K0OQAsDywb0ltlFrZm0JHPY3yZp/S9OaoLU33S7vPS8= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5/go.mod h1:ORITg+fyuMoeiQFiVGoqB3OydVTLkClw/ljbblMq6Cc= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.1 h1:6SZUVRQNvExYlMLbHdlKB48x0fLbc2iVROyaNEwBHbU= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.1/go.mod h1:GqWyYCwLXnlUB1lOAXQyNSPqPLQJvmo8J0DWBzp9mtg= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 h1:rLnYAfXQ3YAccocshIH5mzNNwZBkBo+bP6EhIxak6Hw= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.7/go.mod h1:ZHtuQJ6t9A/+YDuxOLnbryAmITtr8UysSny3qcyvJTc= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 h1:JnhTZR3PiYDNKlXy50/pNeix9aGMo6lLpXwJ1mw8MD4= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6/go.mod h1:URronUEGfXZN1VpdktPSD1EkAL9mfrV+2F4sjH38qOY= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 h1:s4074ZO1Hk8qv65GqNXqDjmkf4HSQqJukaLuuW0TpDA= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.2/go.mod h1:mVggCnIWoM09jP71Wh+ea7+5gAp53q+49wDFs1SW5z8= github.com/aws/session-manager-plugin v0.0.0-20241119210807-82dc72922492 h1:Ihams/fjKo4iWwM313ng2gCJWoetsL7ZQkXhOTmVUq4= github.com/aws/session-manager-plugin v0.0.0-20241119210807-82dc72922492/go.mod h1:7n17tunRPUsniNBu5Ja9C7WwJWTdOzaLqr/H0Ns3uuI= github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro= @@ -421,16 +421,16 @@ github.com/pulumi/pulumi-azure-native-sdk/v2 v2.73.1 h1:yzXxwwq3tHdtSOi5vjKmKXq7 github.com/pulumi/pulumi-azure-native-sdk/v2 v2.73.1/go.mod h1:ChjIUNDNeN6jI33ZOivHUFqM6purDiLP01mghMGe1Fs= github.com/pulumi/pulumi-command/sdk v1.0.1 h1:ZuBSFT57nxg/fs8yBymUhKLkjJ6qmyN3gNvlY/idiN0= github.com/pulumi/pulumi-command/sdk v1.0.1/go.mod h1:C7sfdFbUIoXKoIASfXUbP/U9xnwPfxvz8dBpFodohlA= -github.com/pulumi/pulumi-docker/sdk/v4 v4.5.5 h1:7OjAfgLz5PAy95ynbgPAlWls5WBe4I/QW/61TdPWRlQ= -github.com/pulumi/pulumi-docker/sdk/v4 v4.5.5/go.mod h1:XZKLFXbw13olxuztlWnmVUPYZp2a+BqzqhuMl0j/Ow8= -github.com/pulumi/pulumi-eks/sdk/v3 v3.3.0 h1:F3xAOBZ/In4PqydTsKeg3tou/c5FZ+JTp5dQO0oMjqE= -github.com/pulumi/pulumi-eks/sdk/v3 v3.3.0/go.mod h1:QbAamxfUpDJC81BGtyEuV0P88RrdbOjQEhbgY+OOPpg= +github.com/pulumi/pulumi-docker/sdk/v4 v4.5.7 h1:cuIl5YyIghqtnFMGsdtPOeaNSix5S2CrqO0/UZ1Yjsc= +github.com/pulumi/pulumi-docker/sdk/v4 v4.5.7/go.mod h1:f2ek887nKRSwNtqTqCFENJSOH0PXm1b3FhzSXYL0IyM= +github.com/pulumi/pulumi-eks/sdk/v3 v3.4.0 h1:s2Cpu6E2lmADNUbutbJGm6O+O9j0mBLlrhQmc40ukt0= +github.com/pulumi/pulumi-eks/sdk/v3 v3.4.0/go.mod h1:QbAamxfUpDJC81BGtyEuV0P88RrdbOjQEhbgY+OOPpg= github.com/pulumi/pulumi-gcp/sdk/v7 v7.38.0 h1:21oSj+TKlKTzQcxN9Hik7iSNNHPUQXN4s3itOnahy/w= github.com/pulumi/pulumi-gcp/sdk/v7 v7.38.0/go.mod h1:YaEZms1NgXFqGhObKVofcAeWXu2V+3t/BAXdHQZq7fU= github.com/pulumi/pulumi-kubernetes/sdk/v4 v4.18.3 h1:quqoGsLbF7lpGpGU4mi5WfVLIAo4gfvoQeYYmemx1Dg= github.com/pulumi/pulumi-kubernetes/sdk/v4 v4.18.3/go.mod h1:9dBA6+rtpKmyZB3k1XryUOHDOuNdoTODFKEEZZCtrz8= -github.com/pulumi/pulumi-libvirt/sdk v0.4.7 h1:/BBnqqx/Gbg2vINvJxXIVb58THXzw2lSqFqxlRSXH9M= -github.com/pulumi/pulumi-libvirt/sdk v0.4.7/go.mod h1:VKvjhAm1sGtzKZruYwIhgascabEx7+oVVRCoxp/cPi4= +github.com/pulumi/pulumi-libvirt/sdk v0.5.3 h1:CiUGTweLLIxbAbADxxnwPv4BK8pxXfU8urokJvK1ihM= +github.com/pulumi/pulumi-libvirt/sdk v0.5.3/go.mod h1:gAhyIZKtzs4rknrl8fu8BQnyqijAmViFbaUkyuHt4xY= github.com/pulumi/pulumi-random/sdk/v4 v4.16.7 h1:39rhOe/PTUGMYia8pR5T2wbxxMt2pwrlonf0ncYKSzE= github.com/pulumi/pulumi-random/sdk/v4 v4.16.7/go.mod h1:cxxDhJzUPt/YElfvlWa15Q4NGF6XXS8kUs4OQsCxSBk= github.com/pulumi/pulumi-tls/sdk/v4 v4.11.1 h1:tXemWrzeVTqG8zq6hBdv1TdPFXjgZ+dob63a/6GlF1o= diff --git a/test/new-e2e/tests/containers/k8s_test.go b/test/new-e2e/tests/containers/k8s_test.go index 872714c799525..84a65c936561e 100644 --- a/test/new-e2e/tests/containers/k8s_test.go +++ b/test/new-e2e/tests/containers/k8s_test.go @@ -469,7 +469,10 @@ func (suite *k8sSuite) TestNginx() { `^pod_name:nginx-[[:alnum:]]+-[[:alnum:]]+$`, `^pod_phase:running$`, `^short_image:apps-nginx-server$`, - `^email:team-container-platform@datadoghq.com$`, + `^domain:deployment$`, + `^mail:team-container-platform@datadoghq.com$`, + `^org:agent-org$`, + `^parent-name:nginx$`, `^team:contp$`, }, AcceptUnexpectedTags: true, @@ -544,7 +547,10 @@ func (suite *k8sSuite) TestNginx() { `^pod_name:nginx-[[:alnum:]]+-[[:alnum:]]+$`, `^pod_phase:running$`, `^short_image:apps-nginx-server$`, - `^email:team-container-platform@datadoghq.com$`, + `^domain:deployment$`, + `^mail:team-container-platform@datadoghq.com$`, + `^org:agent-org$`, + `^parent-name:nginx$`, `^team:contp$`, }, Message: `GET / HTTP/1\.1`, diff --git a/test/new-e2e/tests/orchestrator/apply.go b/test/new-e2e/tests/orchestrator/apply.go index ee4e8668ab40c..45b3d792102a7 100644 --- a/test/new-e2e/tests/orchestrator/apply.go +++ b/test/new-e2e/tests/orchestrator/apply.go @@ -18,6 +18,7 @@ import ( dogstatsdstandalone "github.com/DataDog/test-infra-definitions/components/datadog/dogstatsd-standalone" fakeintakeComp "github.com/DataDog/test-infra-definitions/components/datadog/fakeintake" localKubernetes "github.com/DataDog/test-infra-definitions/components/kubernetes" + "github.com/DataDog/test-infra-definitions/components/kubernetes/vpa" resAws "github.com/DataDog/test-infra-definitions/resources/aws" "github.com/DataDog/test-infra-definitions/scenarios/aws/ec2" "github.com/DataDog/test-infra-definitions/scenarios/aws/fakeintake" @@ -86,6 +87,12 @@ func createCluster(ctx *pulumi.Context) (*resAws.Environment, *localKubernetes.C if err != nil { return nil, nil, nil, err } + + // Deploy VPA CRD + if _, err := vpa.DeployCRD(&awsEnv, kindKubeProvider); err != nil { + return nil, nil, nil, err + } + return &awsEnv, kindCluster, kindKubeProvider, nil } From 2b44f9730152dbff11d2c2499775fd6701360f4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Tue, 17 Dec 2024 17:00:46 +0100 Subject: [PATCH 273/303] omnibus: vcredist: move the actual file copy to the recipe (#32299) --- omnibus/config/software/python3.rb | 1 - omnibus/config/software/vc_redist_14.rb | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/omnibus/config/software/python3.rb b/omnibus/config/software/python3.rb index 6e5636064bad2..2fe37a032fc24 100644 --- a/omnibus/config/software/python3.rb +++ b/omnibus/config/software/python3.rb @@ -81,7 +81,6 @@ license "Python-2.0" command "XCOPY /YEHIR *.* \"#{windows_safe_path(python_3_embedded)}\"" - command "copy /y \"#{windows_safe_path(vcrt140_root)}\\*.dll\" \"#{windows_safe_path(python_3_embedded)}\"" # Install pip python = "#{windows_safe_path(python_3_embedded)}\\python.exe" diff --git a/omnibus/config/software/vc_redist_14.rb b/omnibus/config/software/vc_redist_14.rb index ecc8067943f96..226a1145bb993 100644 --- a/omnibus/config/software/vc_redist_14.rb +++ b/omnibus/config/software/vc_redist_14.rb @@ -23,5 +23,5 @@ else source_msm = "Microsoft_VC141_CRT_x64.msm" end - command "powershell -C \"#{windows_safe_path(script_root)} -file #{source_msm} -targetDir .\\expanded\"" + command "powershell -C \"#{windows_safe_path(script_root)} -file #{source_msm} -targetDir \"#{windows_safe_path(python_3_embedded)}\"\"" end From f5794905d1fc472991da3edecf4d0957461df92a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lian=20Raimbault?= <161456554+CelianR@users.noreply.github.com> Date: Tue, 17 Dec 2024 11:07:13 -0500 Subject: [PATCH 274/303] Don't run notify gitlab ci changes on merge queue (#32293) --- .gitlab/notify/notify.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.gitlab/notify/notify.yml b/.gitlab/notify/notify.yml index f40187465a50f..13131a7fecb4a 100644 --- a/.gitlab/notify/notify.yml +++ b/.gitlab/notify/notify.yml @@ -80,8 +80,8 @@ notify_github: script: - !reference [.setup_agent_github_app] # Python 3.12 changes default behavior how packages are installed. - # In particular, --break-system-packages command line option is - # required to use the old behavior or use a virtual env. https://github.com/actions/runner-images/issues/8615 + # In particular, --break-system-packages command line option is + # required to use the old behavior or use a virtual env. https://github.com/actions/runner-images/issues/8615 - python3 -m pip install -r tasks/libs/requirements-github.txt --break-system-packages - messagefile="$(mktemp)" - echo "Use this command from [test-infra-definitions](https://github.com/DataDog/test-infra-definitions) to manually test this PR changes on a VM:" >> "$messagefile" @@ -98,6 +98,7 @@ notify_gitlab_ci_changes: needs: [compute_gitlab_ci_config] tags: ["arch:amd64"] rules: + - !reference [.except_mergequeue] - changes: paths: - .gitlab-ci.yml @@ -105,8 +106,8 @@ notify_gitlab_ci_changes: compare_to: main # TODO: use a variable, when this is supported https://gitlab.com/gitlab-org/gitlab/-/issues/369916 script: # Python 3.12 changes default behavior how packages are installed. - # In particular, --break-system-packages command line option is - # required to use the old behavior or use a virtual env. https://github.com/actions/runner-images/issues/8615 + # In particular, --break-system-packages command line option is + # required to use the old behavior or use a virtual env. https://github.com/actions/runner-images/issues/8615 - python3 -m pip install -r tasks/libs/requirements-github.txt --break-system-packages - !reference [.setup_agent_github_app] - inv -e notify.gitlab-ci-diff --from-diff artifacts/diff.gitlab-ci.yml --pr-comment From 5cde5c4d2dc3c143ff6efc6ef70a73fc6e248e9e Mon Sep 17 00:00:00 2001 From: Alexandre Menasria <47357713+amenasria@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:24:10 +0100 Subject: [PATCH 275/303] [CI] Refactor the Agent integration tests (#31801) --- tasks/__init__.py | 2 +- tasks/agent.py | 88 ++++---------------- tasks/cluster_agent.py | 39 +++------ tasks/dogstatsd.py | 34 +++----- tasks/gointegrationtest.py | 161 +++++++++++++++++++++++++++++++++++++ tasks/gotest.py | 36 --------- tasks/trace_agent.py | 20 ++--- 7 files changed, 208 insertions(+), 172 deletions(-) create mode 100644 tasks/gointegrationtest.py diff --git a/tasks/__init__.py b/tasks/__init__.py index d59a06de7463b..0dffed23dacaf 100644 --- a/tasks/__init__.py +++ b/tasks/__init__.py @@ -87,13 +87,13 @@ tidy, tidy_all, ) +from tasks.gointegrationtest import integration_tests from tasks.gotest import ( check_otel_build, check_otel_module_versions, e2e_tests, get_impacted_packages, get_modified_packages, - integration_tests, lint_go, send_unit_tests_stats, test, diff --git a/tasks/agent.py b/tasks/agent.py index d4e5d13230885..19cd6170b96c6 100644 --- a/tasks/agent.py +++ b/tasks/agent.py @@ -17,6 +17,11 @@ from tasks.build_tags import add_fips_tags, filter_incompatible_tags, get_build_tags, get_default_build_tags from tasks.devcontainer import run_on_devcontainer from tasks.flavor import AgentFlavor +from tasks.gointegrationtest import ( + CORE_AGENT_LINUX_IT_CONF, + CORE_AGENT_WINDOWS_IT_CONF, + containerized_integration_tests, +) from tasks.libs.common.utils import ( REPO_PATH, bin_name, @@ -578,79 +583,18 @@ def integration_tests(ctx, race=False, remote_docker=False, go_mod="readonly", t """ Run integration tests for the Agent """ - if sys.platform == 'win32': - return _windows_integration_tests(ctx, race=race, go_mod=go_mod, timeout=timeout) - else: - # TODO: See if these will function on Windows - return _linux_integration_tests(ctx, race=race, remote_docker=remote_docker, go_mod=go_mod, timeout=timeout) - - -def _windows_integration_tests(ctx, race=False, go_mod="readonly", timeout=""): - test_args = { - "go_mod": go_mod, - "go_build_tags": " ".join(get_default_build_tags(build="test")), - "race_opt": "-race" if race else "", - "exec_opts": "", - "timeout_opt": f"-timeout {timeout}" if timeout else "", - } - - go_cmd = 'go test {timeout_opt} -mod={go_mod} {race_opt} -tags "{go_build_tags}" {exec_opts}'.format(**test_args) # noqa: FS002 - - tests = [ - { - # Run eventlog tests with the Windows API, which depend on the EventLog service - "dir": "./pkg/util/winutil/", - 'prefix': './eventlog/...', - 'extra_args': '-evtapi Windows', - }, - { - # Run eventlog tailer tests with the Windows API, which depend on the EventLog service - "dir": ".", - 'prefix': './pkg/logs/tailers/windowsevent/...', - 'extra_args': '-evtapi Windows', - }, - { - # Run eventlog check tests with the Windows API, which depend on the EventLog service - "dir": ".", - # Don't include submodules, since the `-evtapi` flag is not defined in them - 'prefix': './comp/checks/windowseventlog/windowseventlogimpl/check', - 'extra_args': '-evtapi Windows', - }, - ] - - for test in tests: - with ctx.cd(f"{test['dir']}"): - ctx.run(f"{go_cmd} {test['prefix']} {test['extra_args']}") - - -def _linux_integration_tests(ctx, race=False, remote_docker=False, go_mod="readonly", timeout=""): - test_args = { - "go_mod": go_mod, - "go_build_tags": " ".join(get_default_build_tags(build="test")), - "race_opt": "-race" if race else "", - "exec_opts": "", - "timeout_opt": f"-timeout {timeout}" if timeout else "", - } - - # since Go 1.13, the -exec flag of go test could add some parameters such as -test.timeout - # to the call, we don't want them because while calling invoke below, invoke - # thinks that the parameters are for it to interpret. - # we're calling an intermediate script which only pass the binary name to the invoke task. - if remote_docker: - test_args["exec_opts"] = f"-exec \"{os.getcwd()}/test/integration/dockerize_tests.sh\"" - - go_cmd = 'go test {timeout_opt} -mod={go_mod} {race_opt} -tags "{go_build_tags}" {exec_opts}'.format(**test_args) # noqa: FS002 - - prefixes = [ - "./test/integration/config_providers/...", - "./test/integration/corechecks/...", - "./test/integration/listeners/...", - "./test/integration/util/kubelet/...", - ] - - for prefix in prefixes: - ctx.run(f"{go_cmd} {prefix}") + return containerized_integration_tests( + ctx, CORE_AGENT_WINDOWS_IT_CONF, race=race, go_mod=go_mod, timeout=timeout + ) + return containerized_integration_tests( + ctx, + CORE_AGENT_LINUX_IT_CONF, + race=race, + remote_docker=remote_docker, + go_mod=go_mod, + timeout=timeout, + ) def check_supports_python_version(check_dir, python): diff --git a/tasks/cluster_agent.py b/tasks/cluster_agent.py index 8bbde5be51ece..b929270831a58 100644 --- a/tasks/cluster_agent.py +++ b/tasks/cluster_agent.py @@ -12,10 +12,10 @@ from invoke import task from invoke.exceptions import Exit -from tasks.build_tags import get_build_tags, get_default_build_tags +from tasks.build_tags import get_default_build_tags from tasks.cluster_agent_helpers import build_common, clean_common, refresh_assets_common, version_common from tasks.cws_instrumentation import BIN_PATH as CWS_INSTRUMENTATION_BIN_PATH -from tasks.libs.common.utils import TestsNotSupportedError +from tasks.gointegrationtest import CLUSTER_AGENT_IT_CONF, containerized_integration_tests from tasks.libs.releasing.version import load_release_versions # constants @@ -92,33 +92,14 @@ def integration_tests(ctx, race=False, remote_docker=False, go_mod="readonly", t """ Run integration tests for cluster-agent """ - if sys.platform == 'win32': - raise TestsNotSupportedError('Cluster Agent integration tests are not supported on Windows') - - # We need docker for the kubeapiserver integration tests - tags = get_default_build_tags(build="cluster-agent") + ["docker", "test"] - - go_build_tags = " ".join(get_build_tags(tags, [])) - race_opt = "-race" if race else "" - exec_opts = "" - timeout_opt = f"-timeout {timeout}" if timeout else "" - - # since Go 1.13, the -exec flag of go test could add some parameters such as -test.timeout - # to the call, we don't want them because while calling invoke below, invoke - # thinks that the parameters are for it to interpret. - # we're calling an intermediate script which only pass the binary name to the invoke task. - if remote_docker: - exec_opts = f"-exec \"{os.getcwd()}/test/integration/dockerize_tests.sh\"" - - go_cmd = f'go test {timeout_opt} -mod={go_mod} {race_opt} -tags "{go_build_tags}" {exec_opts}' - - prefixes = [ - "./test/integration/util/kube_apiserver", - "./test/integration/util/leaderelection", - ] - - for prefix in prefixes: - ctx.run(f"{go_cmd} {prefix}") + containerized_integration_tests( + ctx, + CLUSTER_AGENT_IT_CONF, + race=race, + remote_docker=remote_docker, + go_mod=go_mod, + timeout=timeout, + ) @task diff --git a/tasks/dogstatsd.py b/tasks/dogstatsd.py index 08dbe80a85993..311560a3d118e 100644 --- a/tasks/dogstatsd.py +++ b/tasks/dogstatsd.py @@ -11,7 +11,8 @@ from tasks.build_tags import filter_incompatible_tags, get_build_tags, get_default_build_tags from tasks.flavor import AgentFlavor -from tasks.libs.common.utils import REPO_PATH, TestsNotSupportedError, bin_name, get_build_flags, get_root +from tasks.gointegrationtest import DOGSTATSD_IT_CONF, containerized_integration_tests +from tasks.libs.common.utils import REPO_PATH, bin_name, get_build_flags, get_root from tasks.windows_resources import build_messagetable, build_rc, versioninfo_vars # constants @@ -174,29 +175,14 @@ def integration_tests(ctx, race=False, remote_docker=False, go_mod="readonly", t """ Run integration tests for dogstatsd """ - if sys.platform == 'win32': - raise TestsNotSupportedError('DogStatsD integration tests are not supported on Windows') - - go_build_tags = " ".join(get_default_build_tags(build="test")) - race_opt = "-race" if race else "" - exec_opts = "" - timeout_opt = f"-timeout {timeout}" if timeout else "" - - # since Go 1.13, the -exec flag of go test could add some parameters such as -test.timeout - # to the call, we don't want them because while calling invoke below, invoke - # thinks that the parameters are for it to interpret. - # we're calling an intermediate script which only pass the binary name to the invoke task. - if remote_docker: - exec_opts = f"-exec \"{os.getcwd()}/test/integration/dockerize_tests.sh\"" - - go_cmd = f'go test {timeout_opt} -mod={go_mod} {race_opt} -tags "{go_build_tags}" {exec_opts}' - - prefixes = [ - "./test/integration/dogstatsd/...", - ] - - for prefix in prefixes: - ctx.run(f"{go_cmd} {prefix}") + containerized_integration_tests( + ctx, + DOGSTATSD_IT_CONF, + race=race, + remote_docker=remote_docker, + go_mod=go_mod, + timeout=timeout, + ) @task diff --git a/tasks/gointegrationtest.py b/tasks/gointegrationtest.py new file mode 100644 index 0000000000000..1d5cc56c8b9cf --- /dev/null +++ b/tasks/gointegrationtest.py @@ -0,0 +1,161 @@ +import os +import sys +import traceback +from dataclasses import dataclass + +from invoke import Context, task +from invoke.exceptions import Exit + +from tasks.build_tags import get_default_build_tags +from tasks.libs.common.utils import TestsNotSupportedError, gitlab_section + + +@dataclass +class IntegrationTest: + """ + Integration tests + """ + + prefix: str + dir: str = None + extra_args: str = None + + +@dataclass +class IntegrationTestsConfig: + """ + Integration tests configuration + """ + + name: str + go_build_tags: list[str] + tests: list[IntegrationTest] + env: dict[str, str] = None + is_windows_supported: bool = True + + +CORE_AGENT_LINUX_IT_CONF = IntegrationTestsConfig( + name="Core Agent Linux", + go_build_tags=get_default_build_tags(build="test"), + tests=[ + IntegrationTest(prefix="./test/integration/config_providers/..."), + IntegrationTest(prefix="./test/integration/corechecks/..."), + IntegrationTest(prefix="./test/integration/listeners/..."), + IntegrationTest(prefix="./test/integration/util/kubelet/..."), + ], + is_windows_supported=False, +) + +CORE_AGENT_WINDOWS_IT_CONF = IntegrationTestsConfig( + name="Core Agent Windows", + go_build_tags=get_default_build_tags(build="test"), + tests=[ + # Run eventlog tests with the Windows API, which depend on the EventLog service + IntegrationTest(dir="./pkg/util/winutil/", prefix="./eventlog/...", extra_args="-evtapi Windows"), + # Run eventlog tailer tests with the Windows API, which depend on the EventLog service + IntegrationTest(dir=".", prefix="./pkg/logs/tailers/windowsevent/...", extra_args="-evtapi Windows"), + # Run eventlog check tests with the Windows API, which depend on the EventLog service + # Don't include submodules, since the `-evtapi` flag is not defined in them + IntegrationTest( + dir=".", prefix="./comp/checks/windowseventlog/windowseventlogimpl/check", extra_args="-evtapi Windows" + ), + ], +) + +DOGSTATSD_IT_CONF = IntegrationTestsConfig( + name="DogStatsD", + go_build_tags=get_default_build_tags(build="test"), + tests=[IntegrationTest(prefix="./test/integration/dogstatsd/...")], + is_windows_supported=False, +) + +CLUSTER_AGENT_IT_CONF = IntegrationTestsConfig( + name="Cluster Agent", + go_build_tags=get_default_build_tags(build="cluster-agent") + ["docker", "test"], + tests=[ + IntegrationTest(prefix="./test/integration/util/kube_apiserver"), + IntegrationTest(prefix="./test/integration/util/leaderelection"), + ], + is_windows_supported=False, +) + +TRACE_AGENT_IT_CONF = IntegrationTestsConfig( + name="Trace Agent", + go_build_tags=get_default_build_tags(build="test"), + tests=[IntegrationTest(prefix="./cmd/trace-agent/test/testsuite/...")], + env={"INTEGRATION": "yes"}, + is_windows_supported=False, +) + + +def containerized_integration_tests( + ctx: Context, + integration_tests_config: IntegrationTestsConfig, + race=False, + remote_docker=False, + go_mod="readonly", + timeout="", +): + if sys.platform == 'win32' and not integration_tests_config.is_windows_supported: + raise TestsNotSupportedError(f'{integration_tests_config.name} integration tests are not supported on Windows') + test_args = { + "go_mod": go_mod, + "go_build_tags": " ".join(integration_tests_config.go_build_tags), + "race_opt": "-race" if race else "", + "exec_opts": "", + "timeout_opt": f"-timeout {timeout}" if timeout else "", + } + + # since Go 1.13, the -exec flag of go test could add some parameters such as -test.timeout + # to the call, we don't want them because while calling invoke below, invoke + # thinks that the parameters are for it to interpret. + # we're calling an intermediate script which only pass the binary name to the invoke task. + if remote_docker: + test_args["exec_opts"] = f"-exec \"{os.getcwd()}/test/integration/dockerize_tests.sh\"" + + go_cmd = 'go test {timeout_opt} -mod={go_mod} {race_opt} -tags "{go_build_tags}" {exec_opts}'.format(**test_args) # noqa: FS002 + + for it in integration_tests_config.tests: + if it.dir: + with ctx.cd(f"{it.dir}"): + ctx.run(f"{go_cmd} {it.prefix}", env=integration_tests_config.env) + else: + ctx.run(f"{go_cmd} {it.prefix}", env=integration_tests_config.env) + + +@task +def integration_tests(ctx, race=False, remote_docker=False, timeout=""): + """ + Run all the available integration tests + """ + core_agent_conf = CORE_AGENT_WINDOWS_IT_CONF if sys.platform == 'win32' else CORE_AGENT_LINUX_IT_CONF + tests = { + "Agent Core": lambda: containerized_integration_tests( + ctx, core_agent_conf, race=race, remote_docker=remote_docker, timeout=timeout + ), + "DogStatsD": lambda: containerized_integration_tests( + ctx, DOGSTATSD_IT_CONF, race=race, remote_docker=remote_docker, timeout=timeout + ), + "Cluster Agent": lambda: containerized_integration_tests( + ctx, CLUSTER_AGENT_IT_CONF, race=race, remote_docker=remote_docker, timeout=timeout + ), + "Trace Agent": lambda: containerized_integration_tests(ctx, TRACE_AGENT_IT_CONF, race=race, timeout=timeout), + } + tests_failures = {} + for t_name, t in tests.items(): + with gitlab_section(f"Running the {t_name} integration tests", collapsed=True, echo=True): + try: + t() + except TestsNotSupportedError as e: + print(f"Skipping {t_name}: {e}") + except Exception: + # Keep printing the traceback not to have to wait until all tests are done to see what failed + traceback.print_exc() + # Storing the traceback to print it at the end without directly raising the exception + tests_failures[t_name] = traceback.format_exc() + if tests_failures: + print("The following integration tests failed:") + for t_name in tests_failures: + print(f"- {t_name}") + print("See the above logs to get the full traceback.") + raise Exit(code=1) diff --git a/tasks/gotest.py b/tasks/gotest.py index 7ca411e7521ea..4aa9a4b3e151f 100644 --- a/tasks/gotest.py +++ b/tasks/gotest.py @@ -11,7 +11,6 @@ import os import re import sys -import traceback from collections import defaultdict from collections.abc import Iterable from datetime import datetime @@ -22,13 +21,10 @@ from invoke.context import Context from invoke.exceptions import Exit -from tasks.agent import integration_tests as agent_integration_tests from tasks.build_tags import compute_build_tags_for_flavor -from tasks.cluster_agent import integration_tests as dca_integration_tests from tasks.collector import OCB_VERSION from tasks.coverage import PROFILE_COV, CodecovWorkaround from tasks.devcontainer import run_on_devcontainer -from tasks.dogstatsd import integration_tests as dsd_integration_tests from tasks.flavor import AgentFlavor from tasks.libs.common.color import color_message from tasks.libs.common.datadog_api import create_count, send_metrics @@ -36,7 +32,6 @@ from tasks.libs.common.gomodules import get_default_modules from tasks.libs.common.junit_upload_core import enrich_junitxml, produce_junit_tar from tasks.libs.common.utils import ( - TestsNotSupportedError, clean_nested_paths, get_build_flags, gitlab_section, @@ -46,7 +41,6 @@ from tasks.modules import GoModule, get_module_by_path from tasks.test_core import ModuleTestResult, process_input_args, process_module_results, test_core from tasks.testwasher import TestWasher -from tasks.trace_agent import integration_tests as trace_integration_tests from tasks.update_go import PATTERN_MAJOR_MINOR_BUGFIX GO_TEST_RESULT_TMP_JSON = 'module_test_output.json' @@ -405,36 +399,6 @@ def test( print(f"Tests final status (including re-runs): {color_message('ALL TESTS PASSED', 'green')}") -@task -def integration_tests(ctx, race=False, remote_docker=False, timeout=""): - """ - Run all the available integration tests - """ - tests = { - "Agent": lambda: agent_integration_tests(ctx, race=race, remote_docker=remote_docker, timeout=timeout), - "DogStatsD": lambda: dsd_integration_tests(ctx, race=race, remote_docker=remote_docker, timeout=timeout), - "Cluster Agent": lambda: dca_integration_tests(ctx, race=race, remote_docker=remote_docker, timeout=timeout), - "Trace Agent": lambda: trace_integration_tests(ctx, race=race, timeout=timeout), - } - tests_failures = {} - for t_name, t in tests.items(): - with gitlab_section(f"Running the {t_name} integration tests", collapsed=True, echo=True): - try: - t() - except TestsNotSupportedError as e: - print(f"Skipping {t_name}: {e}") - except Exception: - # Keep printing the traceback not to have to wait until all tests are done to see what failed - traceback.print_exc() - # Storing the traceback to print it at the end without directly raising the exception - tests_failures[t_name] = traceback.format_exc() - if tests_failures: - print("Integration tests failed:") - for t_name, t_failure in tests_failures.items(): - print(f"{t_name}:\n{t_failure}") - raise Exit(code=1) - - @task def e2e_tests(ctx, target="gitlab", agent_image="", dca_image="", argo_workflow="default"): """ diff --git a/tasks/trace_agent.py b/tasks/trace_agent.py index d65ae6861fcd8..0ec1dd1956aa8 100644 --- a/tasks/trace_agent.py +++ b/tasks/trace_agent.py @@ -5,7 +5,8 @@ from tasks.build_tags import add_fips_tags, filter_incompatible_tags, get_build_tags, get_default_build_tags from tasks.flavor import AgentFlavor -from tasks.libs.common.utils import REPO_PATH, TestsNotSupportedError, bin_name, get_build_flags +from tasks.gointegrationtest import TRACE_AGENT_IT_CONF, containerized_integration_tests +from tasks.libs.common.utils import REPO_PATH, bin_name, get_build_flags from tasks.windows_resources import build_messagetable, build_rc, versioninfo_vars BIN_PATH = os.path.join(".", "bin", "trace-agent") @@ -81,15 +82,14 @@ def integration_tests(ctx, race=False, go_mod="readonly", timeout="10m"): """ Run integration tests for trace agent """ - if sys.platform == 'win32': - raise TestsNotSupportedError('Trace Agent integration tests are not supported on Windows') - - go_build_tags = " ".join(get_default_build_tags(build="test")) - race_opt = "-race" if race else "" - timeout_opt = f"-timeout {timeout}" if timeout else "" - - go_cmd = f'go test {timeout_opt} -mod={go_mod} {race_opt} -v -tags "{go_build_tags}"' - ctx.run(f"{go_cmd} ./cmd/trace-agent/test/testsuite/...", env={"INTEGRATION": "yes"}) + containerized_integration_tests( + ctx, + TRACE_AGENT_IT_CONF, + race=race, + remote_docker=False, + go_mod=go_mod, + timeout=timeout, + ) @task From 381a3cb19124c62dccb064ea35c326b26bc3077f Mon Sep 17 00:00:00 2001 From: Kevin Gosse Date: Tue, 17 Dec 2024 17:37:35 +0100 Subject: [PATCH 276/303] Capture additional entries from the event log (#31559) Co-authored-by: Ursula Chen <58821586+urseberry@users.noreply.github.com> --- pkg/flare/archive_win.go | 2 +- .../notes/add-events-to-flare-b10cb7bf1aaf4d50.yaml | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/add-events-to-flare-b10cb7bf1aaf4d50.yaml diff --git a/pkg/flare/archive_win.go b/pkg/flare/archive_win.go index e62f23d58a8dc..96afe5ac17a94 100644 --- a/pkg/flare/archive_win.go +++ b/pkg/flare/archive_win.go @@ -31,7 +31,7 @@ var ( eventLogChannelsToExport = map[string]string{ "System": "Event/System/Provider[@Name=\"Service Control Manager\"]", - "Application": "Event/System/Provider[@Name=\"datadog-trace-agent\" or @Name=\"DatadogAgent\"]", + "Application": "Event/System/Provider[@Name=\"datadog-trace-agent\" or @Name=\"DatadogAgent\" or @Name=\".NET Runtime\" or @Name=\"Application Error\"]", "Microsoft-Windows-WMI-Activity/Operational": "*", } execTimeout = 30 * time.Second diff --git a/releasenotes/notes/add-events-to-flare-b10cb7bf1aaf4d50.yaml b/releasenotes/notes/add-events-to-flare-b10cb7bf1aaf4d50.yaml new file mode 100644 index 0000000000000..9bff569f5f774 --- /dev/null +++ b/releasenotes/notes/add-events-to-flare-b10cb7bf1aaf4d50.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + On Windows, Agent flares now include event logs for .NET applications. From 2ad528f546105c0b0b24271a5bec8d4db2cd31ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9na=C3=AFc=20Huard?= Date: Tue, 17 Dec 2024 18:32:53 +0100 Subject: [PATCH 277/303] Add e2e test for VPA metrics from KSM check (#31872) --- test/new-e2e/tests/containers/k8s_test.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/new-e2e/tests/containers/k8s_test.go b/test/new-e2e/tests/containers/k8s_test.go index 84a65c936561e..ea2e14c8d3742 100644 --- a/test/new-e2e/tests/containers/k8s_test.go +++ b/test/new-e2e/tests/containers/k8s_test.go @@ -801,6 +801,24 @@ func (suite *k8sSuite) TestCPU() { }) } +func (suite *k8sSuite) TestKSM() { + suite.testMetric(&testMetricArgs{ + Filter: testMetricFilterArgs{ + Name: "kubernetes_state.vpa.count", + }, + Expect: testMetricExpectArgs{ + Tags: &[]string{ + `^kube_cluster_name:` + regexp.QuoteMeta(suite.clusterName) + `$`, + `^kube_namespace:workload-(?:nginx|redis)$`, + }, + Value: &testMetricExpectValueArgs{ + Max: 1, + Min: 1, + }, + }, + }) +} + func (suite *k8sSuite) TestDogstatsdInAgent() { // Test with UDS suite.testDogstatsd(kubeNamespaceDogstatsWorkload, kubeDeploymentDogstatsdUDS) From c2f284215d18bcf9fc155ec362459a5f30af0773 Mon Sep 17 00:00:00 2001 From: Gabriel Dos Santos <91925154+gabedos@users.noreply.github.com> Date: Tue, 17 Dec 2024 12:53:06 -0500 Subject: [PATCH 278/303] chore(dca): Config component migration in webhook and config (#32247) --- .../admission/controllers/webhook/config.go | 20 +++--- .../controllers/webhook/controller_base.go | 5 +- .../webhook/controller_base_test.go | 4 +- .../controllers/webhook/controller_v1_test.go | 69 +++++++++--------- .../webhook/controller_v1beta1_test.go | 70 ++++++++++--------- .../mutate/autoscaling/autoscaling.go | 6 +- pkg/clusteragent/admission/start.go | 2 +- 7 files changed, 91 insertions(+), 85 deletions(-) diff --git a/pkg/clusteragent/admission/controllers/webhook/config.go b/pkg/clusteragent/admission/controllers/webhook/config.go index 90cec93a8d8db..4f5e549434557 100644 --- a/pkg/clusteragent/admission/controllers/webhook/config.go +++ b/pkg/clusteragent/admission/controllers/webhook/config.go @@ -13,7 +13,7 @@ import ( "fmt" "strings" - pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" + "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver/common" ) @@ -36,21 +36,21 @@ type Config struct { } // NewConfig creates a webhook controller configuration -func NewConfig(admissionV1Enabled, namespaceSelectorEnabled, matchConditionsSupported bool) Config { +func NewConfig(admissionV1Enabled, namespaceSelectorEnabled, matchConditionsSupported bool, datadogConfig config.Component) Config { return Config{ - webhookName: pkgconfigsetup.Datadog().GetString("admission_controller.webhook_name"), - secretName: pkgconfigsetup.Datadog().GetString("admission_controller.certificate.secret_name"), - validationEnabled: pkgconfigsetup.Datadog().GetBool("admission_controller.validation.enabled"), - mutationEnabled: pkgconfigsetup.Datadog().GetBool("admission_controller.mutation.enabled"), + webhookName: datadogConfig.GetString("admission_controller.webhook_name"), + secretName: datadogConfig.GetString("admission_controller.certificate.secret_name"), + validationEnabled: datadogConfig.GetBool("admission_controller.validation.enabled"), + mutationEnabled: datadogConfig.GetBool("admission_controller.mutation.enabled"), namespace: common.GetResourcesNamespace(), admissionV1Enabled: admissionV1Enabled, namespaceSelectorEnabled: namespaceSelectorEnabled, matchConditionsSupported: matchConditionsSupported, - svcName: pkgconfigsetup.Datadog().GetString("admission_controller.service_name"), + svcName: datadogConfig.GetString("admission_controller.service_name"), svcPort: int32(443), - timeout: pkgconfigsetup.Datadog().GetInt32("admission_controller.timeout_seconds"), - failurePolicy: pkgconfigsetup.Datadog().GetString("admission_controller.failure_policy"), - reinvocationPolicy: pkgconfigsetup.Datadog().GetString("admission_controller.reinvocation_policy"), + timeout: datadogConfig.GetInt32("admission_controller.timeout_seconds"), + failurePolicy: datadogConfig.GetString("admission_controller.failure_policy"), + reinvocationPolicy: datadogConfig.GetString("admission_controller.reinvocation_policy"), } } diff --git a/pkg/clusteragent/admission/controllers/webhook/controller_base.go b/pkg/clusteragent/admission/controllers/webhook/controller_base.go index 79114dac7397f..5505337ba5838 100644 --- a/pkg/clusteragent/admission/controllers/webhook/controller_base.go +++ b/pkg/clusteragent/admission/controllers/webhook/controller_base.go @@ -35,7 +35,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/mutate/tagsfromlabels" "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/validate/kubernetesadmissionevents" "github.com/DataDog/datadog-agent/pkg/clusteragent/autoscaling/workload" - pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -125,7 +124,7 @@ func (c *controllerBase) generateWebhooks(wmeta workloadmeta.Component, pa workl configWebhook.NewWebhook(wmeta, injectionFilter, datadogConfig), tagsfromlabels.NewWebhook(wmeta, datadogConfig, injectionFilter), agentsidecar.NewWebhook(datadogConfig), - autoscaling.NewWebhook(pa), + autoscaling.NewWebhook(pa, datadogConfig), } webhooks = append(webhooks, mutatingWebhooks...) @@ -137,7 +136,7 @@ func (c *controllerBase) generateWebhooks(wmeta workloadmeta.Component, pa workl log.Errorf("failed to register APM Instrumentation webhook: %v", err) } - isCWSInstrumentationEnabled := pkgconfigsetup.Datadog().GetBool("admission_controller.cws_instrumentation.enabled") + isCWSInstrumentationEnabled := datadogConfig.GetBool("admission_controller.cws_instrumentation.enabled") if isCWSInstrumentationEnabled { cws, err := cwsinstrumentation.NewCWSInstrumentation(wmeta, datadogConfig) if err == nil { diff --git a/pkg/clusteragent/admission/controllers/webhook/controller_base_test.go b/pkg/clusteragent/admission/controllers/webhook/controller_base_test.go index c202f1ab38f25..d5612b96c74e0 100644 --- a/pkg/clusteragent/admission/controllers/webhook/controller_base_test.go +++ b/pkg/clusteragent/admission/controllers/webhook/controller_base_test.go @@ -36,7 +36,7 @@ func TestNewController(t *testing.T) { factory.Admissionregistration(), func() bool { return true }, make(chan struct{}), - v1Cfg, + getV1Cfg(t), wmeta, nil, datadogConfig, @@ -53,7 +53,7 @@ func TestNewController(t *testing.T) { factory.Admissionregistration(), func() bool { return true }, make(chan struct{}), - v1beta1Cfg, + getV1beta1Cfg(t), wmeta, nil, datadogConfig, diff --git a/pkg/clusteragent/admission/controllers/webhook/controller_v1_test.go b/pkg/clusteragent/admission/controllers/webhook/controller_v1_test.go index aa2a3efc4e68e..6a52255c42e29 100644 --- a/pkg/clusteragent/admission/controllers/webhook/controller_v1_test.go +++ b/pkg/clusteragent/admission/controllers/webhook/controller_v1_test.go @@ -41,10 +41,11 @@ const ( tick = 50 * time.Millisecond ) -var v1Cfg = NewConfig(true, false, false) +func getV1Cfg(t *testing.T) Config { return NewConfig(true, false, false, configComp.NewMock(t)) } func TestSecretNotFoundV1(t *testing.T) { f := newFixtureV1(t) + v1Cfg := getV1Cfg(t) stopCh := make(chan struct{}) defer close(stopCh) @@ -63,6 +64,7 @@ func TestSecretNotFoundV1(t *testing.T) { func TestCreateWebhookV1(t *testing.T) { f := newFixtureV1(t) + v1Cfg := getV1Cfg(t) data, err := certificate.GenerateSecretData(time.Now(), time.Now().Add(365*24*time.Hour), []string{"my.svc.dns"}) if err != nil { @@ -97,6 +99,7 @@ func TestCreateWebhookV1(t *testing.T) { func TestUpdateOutdatedWebhookV1(t *testing.T) { f := newFixtureV1(t) + v1Cfg := getV1Cfg(t) data, err := certificate.GenerateSecretData(time.Now(), time.Now().Add(365*24*time.Hour), []string{"my.svc.dns"}) if err != nil { @@ -166,7 +169,7 @@ func TestAdmissionControllerFailureModeV1(t *testing.T) { for _, value := range []string{"Ignore", "ignore", "BadVal", ""} { mockConfig.SetWithoutSource("admission_controller.failure_policy", value) - c.config = NewConfig(true, false, false) + c.config = NewConfig(true, false, false, mockConfig) validatingWebhookSkeleton := c.getValidatingWebhookSkeleton("foo", "/bar", []admiv1.OperationType{admiv1.Create}, map[string][]string{"": {"pods"}}, nil, nil, nil) assert.Equal(t, admiv1.Ignore, *validatingWebhookSkeleton.FailurePolicy) @@ -176,7 +179,7 @@ func TestAdmissionControllerFailureModeV1(t *testing.T) { for _, value := range []string{"Fail", "fail"} { mockConfig.SetWithoutSource("admission_controller.failure_policy", value) - c.config = NewConfig(true, false, false) + c.config = NewConfig(true, false, false, mockConfig) validatingWebhookSkeleton := c.getValidatingWebhookSkeleton("foo", "/bar", []admiv1.OperationType{admiv1.Create}, map[string][]string{"": {"pods"}}, nil, nil, nil) assert.Equal(t, admiv1.Fail, *validatingWebhookSkeleton.FailurePolicy) @@ -192,7 +195,7 @@ func TestAdmissionControllerReinvocationPolicyV1(t *testing.T) { for _, value := range []string{"IfNeeded", "ifneeded", "Never", "never", "wrong", ""} { mockConfig.SetWithoutSource("admission_controller.reinvocationpolicy", value) - c.config = NewConfig(true, false, false) + c.config = NewConfig(true, false, false, mockConfig) mutatingWebhookSkeleton := c.getMutatingWebhookSkeleton("foo", "/bar", []admiv1.OperationType{admiv1.Create}, map[string][]string{"": {"pods"}}, nil, nil, nil) assert.Equal(t, admiv1.IfNeededReinvocationPolicy, *mutatingWebhookSkeleton.ReinvocationPolicy) @@ -241,7 +244,7 @@ func TestGenerateTemplatesV1(t *testing.T) { tests := []struct { name string setupConfig func(model.Config) - configFunc func() Config + configFunc func(model.Config) Config want func() []admiv1.MutatingWebhook }{ { @@ -253,7 +256,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { webhook := webhook("datadog.webhook.agent.config", "/injectconfig", &metav1.LabelSelector{ MatchExpressions: []metav1.LabelSelectorRequirement{ @@ -276,7 +279,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { webhook := webhook("datadog.webhook.agent.config", "/injectconfig", &metav1.LabelSelector{ MatchLabels: map[string]string{ @@ -295,7 +298,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { webhook := webhook("datadog.webhook.standard.tags", "/injecttags", &metav1.LabelSelector{ MatchExpressions: []metav1.LabelSelectorRequirement{ @@ -318,7 +321,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { webhook := webhook("datadog.webhook.standard.tags", "/injecttags", &metav1.LabelSelector{ MatchLabels: map[string]string{ @@ -337,7 +340,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", true) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { webhook := webhook("datadog.webhook.lib.injection", "/injectlib", &metav1.LabelSelector{ MatchExpressions: []metav1.LabelSelectorRequirement{ @@ -360,7 +363,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", true) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { webhook := webhook("datadog.webhook.lib.injection", "/injectlib", &metav1.LabelSelector{ MatchLabels: map[string]string{ @@ -378,7 +381,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { webhookConfig := webhook("datadog.webhook.agent.config", "/injectconfig", &metav1.LabelSelector{ MatchLabels: map[string]string{ @@ -402,7 +405,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { webhookConfig := webhook("datadog.webhook.agent.config", "/injectconfig", &metav1.LabelSelector{ MatchExpressions: []metav1.LabelSelectorRequirement{ @@ -435,7 +438,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.namespace_selector_fallback", true) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, true, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { webhookConfig := webhook("datadog.webhook.agent.config", "/injectconfig", nil, &metav1.LabelSelector{ MatchLabels: map[string]string{ @@ -461,7 +464,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.inject_tags.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { webhook := webhook( "datadog.webhook.agent.config", @@ -511,7 +514,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, true, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { webhook := webhook( "datadog.webhook.agent.config", @@ -559,7 +562,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.mutate_unlabelled", true) mockConfig.SetWithoutSource("cluster_agent.service_account_name", "datadog-cluster-agent") }, - configFunc: func() Config { return NewConfig(true, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, false, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { podWebhook := webhook( "datadog.webhook.cws.pod.instrumentation", @@ -602,7 +605,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.mutate_unlabelled", false) mockConfig.SetWithoutSource("cluster_agent.service_account_name", "datadog-cluster-agent") }, - configFunc: func() Config { return NewConfig(true, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, false, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { podWebhook := webhook( "datadog.webhook.cws.pod.instrumentation", @@ -641,7 +644,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.mutate_unlabelled", true) mockConfig.SetWithoutSource("cluster_agent.service_account_name", "datadog-cluster-agent") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { podWebhook := webhook( "datadog.webhook.cws.pod.instrumentation", @@ -684,7 +687,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.mutate_unlabelled", false) mockConfig.SetWithoutSource("cluster_agent.service_account_name", "datadog-cluster-agent") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { podWebhook := webhook( "datadog.webhook.cws.pod.instrumentation", @@ -726,7 +729,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "misconfigured") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { return []admiv1.MutatingWebhook{} }, @@ -746,7 +749,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "[]") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { podWebhook := webhook( "datadog.webhook.agent.sidecar", @@ -779,7 +782,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "[]") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { return []admiv1.MutatingWebhook{} }, @@ -799,7 +802,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "[]") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { return []admiv1.MutatingWebhook{} }, @@ -819,7 +822,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[{\"NamespaceSelector\": {\"MatchLabels\": {\"labelKey\": \"labelVal\"}}}]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "[]") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { podWebhook := webhook( "datadog.webhook.agent.sidecar", @@ -850,7 +853,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[{\"ObjectSelector\": {\"MatchLabels\": {\"labelKey\": \"labelVal\"}}}]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "[]") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { return []admiv1.MutatingWebhook{} }, @@ -870,7 +873,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[{\"ObjectSelector\": {\"MatchLabels\": {\"labelKey\": \"labelVal\"}}}]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "[]") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { podWebhook := webhook( "datadog.webhook.agent.sidecar", @@ -899,7 +902,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[{\"ObjectSelector\": {\"MatchLabels\": {\"labelKey1\": \"labelVal1\"}}, \"NamespaceSelector\": {\"MatchLabels\": {\"labelKey2\": \"labelVal2\"}}}]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "[]") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { podWebhook := webhook( "datadog.webhook.agent.sidecar", @@ -928,7 +931,7 @@ func TestGenerateTemplatesV1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[{\"NamespaceSelector\": {\"MatchLabels\":{\"labelKey1\": \"labelVal1\"}}} , {\"ObjectSelector\": {\"MatchLabels\": {\"labelKey2\": \"labelVal2\"}}}]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "[]") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1.MutatingWebhook { return []admiv1.MutatingWebhook{} }, @@ -947,7 +950,7 @@ func TestGenerateTemplatesV1(t *testing.T) { tt.setupConfig(mockConfig) c := &ControllerV1{} - c.config = tt.configFunc() + c.config = tt.configFunc(mockConfig) c.webhooks = c.generateWebhooks(wmeta, nil, mockConfig, nil) c.generateTemplates() @@ -1051,7 +1054,7 @@ func TestGetValidatingWebhookSkeletonV1(t *testing.T) { } c := &ControllerV1{} - c.config = NewConfig(false, tt.namespaceSelector, false) + c.config = NewConfig(false, tt.namespaceSelector, false, mockConfig) nsSelector, objSelector := common.DefaultLabelSelectors(tt.namespaceSelector) @@ -1157,7 +1160,7 @@ func TestGetMutatingWebhookSkeletonV1(t *testing.T) { } c := &ControllerV1{} - c.config = NewConfig(false, tt.namespaceSelector, false) + c.config = NewConfig(false, tt.namespaceSelector, false, mockConfig) nsSelector, objSelector := common.DefaultLabelSelectors(tt.namespaceSelector) @@ -1188,7 +1191,7 @@ func (f *fixtureV1) createController() (*ControllerV1, informers.SharedInformerF factory.Admissionregistration().V1().MutatingWebhookConfigurations(), func() bool { return true }, make(chan struct{}), - v1Cfg, + getV1Cfg(f.t), wmeta, nil, datadogConfig, diff --git a/pkg/clusteragent/admission/controllers/webhook/controller_v1beta1_test.go b/pkg/clusteragent/admission/controllers/webhook/controller_v1beta1_test.go index bd5daf906a2fb..62fa7713cd809 100644 --- a/pkg/clusteragent/admission/controllers/webhook/controller_v1beta1_test.go +++ b/pkg/clusteragent/admission/controllers/webhook/controller_v1beta1_test.go @@ -36,10 +36,11 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/kubernetes/certificate" ) -var v1beta1Cfg = NewConfig(false, false, false) +func getV1beta1Cfg(t *testing.T) Config { return NewConfig(false, false, false, configComp.NewMock(t)) } func TestSecretNotFoundV1beta1(t *testing.T) { f := newFixtureV1beta1(t) + v1beta1Cfg := getV1beta1Cfg(t) stopCh := make(chan struct{}) defer close(stopCh) @@ -58,6 +59,7 @@ func TestSecretNotFoundV1beta1(t *testing.T) { func TestCreateWebhookV1beta1(t *testing.T) { f := newFixtureV1beta1(t) + v1beta1Cfg := getV1beta1Cfg(t) data, err := certificate.GenerateSecretData(time.Now(), time.Now().Add(365*24*time.Hour), []string{"my.svc.dns"}) if err != nil { @@ -92,6 +94,8 @@ func TestCreateWebhookV1beta1(t *testing.T) { func TestUpdateOutdatedWebhookV1beta1(t *testing.T) { f := newFixtureV1beta1(t) + v1Cfg := getV1Cfg(t) + v1beta1Cfg := getV1beta1Cfg(t) data, err := certificate.GenerateSecretData(time.Now(), time.Now().Add(365*24*time.Hour), []string{"my.svc.dns"}) if err != nil { @@ -161,7 +165,7 @@ func TestAdmissionControllerFailureModeV1beta1(t *testing.T) { for _, value := range []string{"Ignore", "ignore", "BadVal", ""} { mockConfig.SetWithoutSource("admission_controller.failure_policy", value) - c.config = NewConfig(true, false, false) + c.config = NewConfig(true, false, false, mockConfig) validatingWebhookSkeleton := c.getValidatingWebhookSkeleton("foo", "/bar", []admiv1beta1.OperationType{admiv1beta1.Create}, map[string][]string{"": {"pods"}}, nil, nil, nil) assert.Equal(t, admiv1beta1.Ignore, *validatingWebhookSkeleton.FailurePolicy) @@ -171,7 +175,7 @@ func TestAdmissionControllerFailureModeV1beta1(t *testing.T) { for _, value := range []string{"Fail", "fail"} { mockConfig.SetWithoutSource("admission_controller.failure_policy", value) - c.config = NewConfig(true, false, false) + c.config = NewConfig(true, false, false, mockConfig) validatingWebhookSkeleton := c.getValidatingWebhookSkeleton("foo", "/bar", []admiv1beta1.OperationType{admiv1beta1.Create}, map[string][]string{"": {"pods"}}, nil, nil, nil) assert.Equal(t, admiv1beta1.Fail, *validatingWebhookSkeleton.FailurePolicy) @@ -187,7 +191,7 @@ func TestAdmissionControllerReinvocationPolicyV1beta1(t *testing.T) { for _, value := range []string{"IfNeeded", "ifneeded", "Never", "never", "wrong", ""} { mockConfig.SetWithoutSource("admission_controller.reinvocationpolicy", value) - c.config = NewConfig(true, false, false) + c.config = NewConfig(true, false, false, mockConfig) mutatingWebhookSkeleton := c.getMutatingWebhookSkeleton("foo", "/bar", []admiv1beta1.OperationType{admiv1beta1.Create}, map[string][]string{"": {"pods"}}, nil, nil, nil) assert.Equal(t, admiv1beta1.IfNeededReinvocationPolicy, *mutatingWebhookSkeleton.ReinvocationPolicy) @@ -236,7 +240,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { tests := []struct { name string setupConfig func(model.Config) - configFunc func() Config + configFunc func(model.Config) Config want func() []admiv1beta1.MutatingWebhook }{ { @@ -248,7 +252,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { webhook := webhook("datadog.webhook.agent.config", "/injectconfig", &metav1.LabelSelector{ MatchExpressions: []metav1.LabelSelectorRequirement{ @@ -271,7 +275,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { webhook := webhook("datadog.webhook.agent.config", "/injectconfig", &metav1.LabelSelector{ MatchLabels: map[string]string{ @@ -290,7 +294,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { webhook := webhook("datadog.webhook.standard.tags", "/injecttags", &metav1.LabelSelector{ MatchExpressions: []metav1.LabelSelectorRequirement{ @@ -313,7 +317,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { webhook := webhook("datadog.webhook.standard.tags", "/injecttags", &metav1.LabelSelector{ MatchLabels: map[string]string{ @@ -332,7 +336,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", true) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { webhook := webhook("datadog.webhook.lib.injection", "/injectlib", &metav1.LabelSelector{ MatchExpressions: []metav1.LabelSelectorRequirement{ @@ -355,7 +359,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", true) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { webhook := webhook("datadog.webhook.lib.injection", "/injectlib", &metav1.LabelSelector{ MatchLabels: map[string]string{ @@ -373,7 +377,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { webhookConfig := webhook("datadog.webhook.agent.config", "/injectconfig", &metav1.LabelSelector{ MatchLabels: map[string]string{ @@ -397,7 +401,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { webhookConfig := webhook("datadog.webhook.agent.config", "/injectconfig", &metav1.LabelSelector{ MatchExpressions: []metav1.LabelSelectorRequirement{ @@ -430,7 +434,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, true, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { webhookConfig := webhook("datadog.webhook.agent.config", "/injectconfig", nil, &metav1.LabelSelector{ MatchLabels: map[string]string{ @@ -456,7 +460,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { webhook := webhook( "datadog.webhook.agent.config", @@ -505,7 +509,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.auto_instrumentation.enabled", false) mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.enabled", false) }, - configFunc: func() Config { return NewConfig(false, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, true, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { webhook := webhook( "datadog.webhook.agent.config", @@ -552,7 +556,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.mutate_unlabelled", true) mockConfig.SetWithoutSource("cluster_agent.service_account_name", "datadog-cluster-agent") }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { podWebhook := webhook( "datadog.webhook.cws.pod.instrumentation", @@ -595,7 +599,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.mutate_unlabelled", false) mockConfig.SetWithoutSource("cluster_agent.service_account_name", "datadog-cluster-agent") }, - configFunc: func() Config { return NewConfig(false, false, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, false, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { podWebhook := webhook( "datadog.webhook.cws.pod.instrumentation", @@ -634,7 +638,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.mutate_unlabelled", true) mockConfig.SetWithoutSource("cluster_agent.service_account_name", "datadog-cluster-agent") }, - configFunc: func() Config { return NewConfig(false, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, true, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { podWebhook := webhook( "datadog.webhook.cws.pod.instrumentation", @@ -677,7 +681,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.cws_instrumentation.mutate_unlabelled", false) mockConfig.SetWithoutSource("cluster_agent.service_account_name", "datadog-cluster-agent") }, - configFunc: func() Config { return NewConfig(false, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(false, true, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { podWebhook := webhook( "datadog.webhook.cws.pod.instrumentation", @@ -719,7 +723,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "misconfigured") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { return []admiv1beta1.MutatingWebhook{} }, @@ -739,7 +743,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "[]") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { podWebhook := webhook( "datadog.webhook.agent.sidecar", @@ -772,7 +776,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "[]") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { return []admiv1beta1.MutatingWebhook{} }, @@ -792,7 +796,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "[]") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { return []admiv1beta1.MutatingWebhook{} }, @@ -812,7 +816,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[{\"NamespaceSelector\": {\"MatchLabels\": {\"labelKey\": \"labelVal\"}}}]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "[]") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { podWebhook := webhook( "datadog.webhook.agent.sidecar", @@ -843,7 +847,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[{\"ObjectSelector\": {\"MatchLabels\": {\"labelKey\": \"labelVal\"}}}]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "[]") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { return []admiv1beta1.MutatingWebhook{} }, @@ -863,7 +867,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[{\"ObjectSelector\": {\"MatchLabels\": {\"labelKey\": \"labelVal\"}}}]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "[]") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { podWebhook := webhook( "datadog.webhook.agent.sidecar", @@ -892,7 +896,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[{\"ObjectSelector\": {\"MatchLabels\": {\"labelKey1\": \"labelVal1\"}}, \"NamespaceSelector\": {\"MatchLabels\": {\"labelKey2\": \"labelVal2\"}}}]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "[]") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { podWebhook := webhook( "datadog.webhook.agent.sidecar", @@ -921,7 +925,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { mockConfig.SetWithoutSource("admission_controller.agent_sidecar.selectors", "[{\"NamespaceSelector\": {\"MatchLabels\":{\"labelKey1\": \"labelVal1\"}}} , {\"ObjectSelector\": {\"MatchLabels\": {\"labelKey2\": \"labelVal2\"}}}]") mockConfig.SetWithoutSource("admission_controller.agent_sidecar.profiles", "[]") }, - configFunc: func() Config { return NewConfig(true, true, false) }, + configFunc: func(mockConfig model.Config) Config { return NewConfig(true, true, false, mockConfig) }, want: func() []admiv1beta1.MutatingWebhook { return []admiv1beta1.MutatingWebhook{} }, @@ -940,7 +944,7 @@ func TestGenerateTemplatesV1beta1(t *testing.T) { tt.setupConfig(mockConfig) c := &ControllerV1beta1{} - c.config = tt.configFunc() + c.config = tt.configFunc(mockConfig) c.webhooks = c.generateWebhooks(wmeta, nil, mockConfig, nil) c.generateTemplates() @@ -1044,7 +1048,7 @@ func TestGetValidatingWebhookSkeletonV1beta1(t *testing.T) { } c := &ControllerV1beta1{} - c.config = NewConfig(false, tt.namespaceSelector, false) + c.config = NewConfig(false, tt.namespaceSelector, false, mockConfig) nsSelector, objSelector := common.DefaultLabelSelectors(tt.namespaceSelector) @@ -1150,7 +1154,7 @@ func TestGetMutatingWebhookSkeletonV1beta1(t *testing.T) { } c := &ControllerV1beta1{} - c.config = NewConfig(false, tt.namespaceSelector, false) + c.config = NewConfig(false, tt.namespaceSelector, false, mockConfig) nsSelector, objSelector := common.DefaultLabelSelectors(tt.namespaceSelector) @@ -1181,7 +1185,7 @@ func (f *fixtureV1beta1) createController() (*ControllerV1beta1, informers.Share factory.Admissionregistration().V1beta1().MutatingWebhookConfigurations(), func() bool { return true }, make(chan struct{}), - v1beta1Cfg, + getV1beta1Cfg(f.t), wmeta, nil, datadogConfig, diff --git a/pkg/clusteragent/admission/mutate/autoscaling/autoscaling.go b/pkg/clusteragent/admission/mutate/autoscaling/autoscaling.go index b4e7225ef710e..4ac5396506357 100644 --- a/pkg/clusteragent/admission/mutate/autoscaling/autoscaling.go +++ b/pkg/clusteragent/admission/mutate/autoscaling/autoscaling.go @@ -16,10 +16,10 @@ import ( "k8s.io/client-go/dynamic" "github.com/DataDog/datadog-agent/cmd/cluster-agent/admission" + "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/common" mutatecommon "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/mutate/common" "github.com/DataDog/datadog-agent/pkg/clusteragent/autoscaling/workload" - pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" ) const ( @@ -39,10 +39,10 @@ type Webhook struct { } // NewWebhook returns a new Webhook -func NewWebhook(patcher workload.PodPatcher) *Webhook { +func NewWebhook(patcher workload.PodPatcher, datadogConfig config.Component) *Webhook { return &Webhook{ name: webhookName, - isEnabled: pkgconfigsetup.Datadog().GetBool("autoscaling.workload.enabled"), + isEnabled: datadogConfig.GetBool("autoscaling.workload.enabled"), endpoint: webhookEndpoint, resources: map[string][]string{"": {"pods"}}, operations: []admissionregistrationv1.OperationType{admissionregistrationv1.Create}, diff --git a/pkg/clusteragent/admission/start.go b/pkg/clusteragent/admission/start.go index aee1183a3133d..ef69edfd4a203 100644 --- a/pkg/clusteragent/admission/start.go +++ b/pkg/clusteragent/admission/start.go @@ -79,7 +79,7 @@ func StartControllers(ctx ControllerContext, wmeta workloadmeta.Component, pa wo return webhooks, err } - webhookConfig := webhook.NewConfig(v1Enabled, nsSelectorEnabled, matchConditionsSupported) + webhookConfig := webhook.NewConfig(v1Enabled, nsSelectorEnabled, matchConditionsSupported, datadogConfig) webhookController := webhook.NewController( ctx.Client, ctx.SecretInformers.Core().V1().Secrets(), From a582565b880ad6d75587090d9417ab6150fd7cc5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Dec 2024 18:31:24 +0000 Subject: [PATCH 279/303] Bump actions/upload-artifact from 4.4.0 to 4.4.3 (#32041) Co-authored-by: chouetz --- .github/workflows/cws-btfhub-sync.yml | 2 +- .github/workflows/docs-dev.yml | 2 +- .github/workflows/serverless-benchmarks.yml | 4 ++-- .github/workflows/serverless-binary-size.yml | 2 +- .github/workflows/serverless-integration.yml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/cws-btfhub-sync.yml b/.github/workflows/cws-btfhub-sync.yml index b5f1ba4df7b0c..795953b22a354 100644 --- a/.github/workflows/cws-btfhub-sync.yml +++ b/.github/workflows/cws-btfhub-sync.yml @@ -97,7 +97,7 @@ jobs: inv -e security-agent.generate-btfhub-constants --archive-path=./dev/dist/archive --output-path=./"$ARTIFACT_NAME".json --force-refresh - name: Upload artifact - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: ${{ steps.artifact-name.outputs.ARTIFACT_NAME }} path: ./${{ steps.artifact-name.outputs.ARTIFACT_NAME }}.json diff --git a/.github/workflows/docs-dev.yml b/.github/workflows/docs-dev.yml index 8602adc372c1f..1eab6460db4b6 100644 --- a/.github/workflows/docs-dev.yml +++ b/.github/workflows/docs-dev.yml @@ -50,7 +50,7 @@ jobs: - name: Build documentation run: invoke docs.build - - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: documentation path: site diff --git a/.github/workflows/serverless-benchmarks.yml b/.github/workflows/serverless-benchmarks.yml index 195f3441c4591..8ad83b34d36d1 100644 --- a/.github/workflows/serverless-benchmarks.yml +++ b/.github/workflows/serverless-benchmarks.yml @@ -48,7 +48,7 @@ jobs: ./pkg/serverless/... | tee "$TEMP_RUNNER"/benchmark.log - name: Upload result artifact - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: baseline.log path: ${{runner.temp}}/benchmark.log @@ -87,7 +87,7 @@ jobs: ./pkg/serverless/... | tee "$TEMP_RUNNER"/benchmark.log - name: Upload result artifact - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: current.log path: ${{runner.temp}}/benchmark.log diff --git a/.github/workflows/serverless-binary-size.yml b/.github/workflows/serverless-binary-size.yml index 5bf7a69b36177..7be692d81d51a 100644 --- a/.github/workflows/serverless-binary-size.yml +++ b/.github/workflows/serverless-binary-size.yml @@ -152,7 +152,7 @@ jobs: done - name: Archive dependency graphs - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 if: steps.should.outputs.should_run == 'true' with: name: dependency-graphs diff --git a/.github/workflows/serverless-integration.yml b/.github/workflows/serverless-integration.yml index f94ed5ca56b52..ace5e88fbda98 100644 --- a/.github/workflows/serverless-integration.yml +++ b/.github/workflows/serverless-integration.yml @@ -80,7 +80,7 @@ jobs: - name: Archive raw logs if: always() - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: rawlogs-${{ matrix.suite }}-${{ matrix.architecture }} path: ${{ steps.rawlogs.outputs.dir }} From 6fb76d59dcac4a66e7ed9bb68845dfe1ed653a7d Mon Sep 17 00:00:00 2001 From: Scott Opell Date: Tue, 17 Dec 2024 14:22:39 -0500 Subject: [PATCH 280/303] Sets new lower limits based on latest SMP nightly build (#32302) --- test/regression/cases/quality_gate_idle/experiment.yaml | 2 +- .../cases/quality_gate_idle_all_features/experiment.yaml | 2 +- test/regression/cases/quality_gate_logs/experiment.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/regression/cases/quality_gate_idle/experiment.yaml b/test/regression/cases/quality_gate_idle/experiment.yaml index 6555258f34601..1c120a0d23187 100644 --- a/test/regression/cases/quality_gate_idle/experiment.yaml +++ b/test/regression/cases/quality_gate_idle/experiment.yaml @@ -36,7 +36,7 @@ checks: description: "Memory usage quality gate. This puts a bound on the total agent memory usage." bounds: series: total_rss_bytes - upper_bound: "390.0 MiB" + upper_bound: "365.0 MiB" report_links: - text: "bounds checks dashboard" diff --git a/test/regression/cases/quality_gate_idle_all_features/experiment.yaml b/test/regression/cases/quality_gate_idle_all_features/experiment.yaml index 624b68caeab20..2b16f4988c0b0 100644 --- a/test/regression/cases/quality_gate_idle_all_features/experiment.yaml +++ b/test/regression/cases/quality_gate_idle_all_features/experiment.yaml @@ -47,7 +47,7 @@ checks: description: "Memory usage quality gate. This puts a bound on the total agent memory usage." bounds: series: total_rss_bytes - upper_bound: "795.0 MiB" + upper_bound: "755.0 MiB" report_links: - text: "bounds checks dashboard" diff --git a/test/regression/cases/quality_gate_logs/experiment.yaml b/test/regression/cases/quality_gate_logs/experiment.yaml index b1b2d9ee9c02b..761cae4678a8e 100644 --- a/test/regression/cases/quality_gate_logs/experiment.yaml +++ b/test/regression/cases/quality_gate_logs/experiment.yaml @@ -29,7 +29,7 @@ checks: description: "Memory usage" bounds: series: total_rss_bytes - upper_bound: 440MiB + upper_bound: 420MiB - name: lost_bytes description: "Allowable bytes not polled by log Agent" From 007c8aa999a3b6aa436edf18c9b4c32ea546afb9 Mon Sep 17 00:00:00 2001 From: Maxime Riaud <65339037+misteriaud@users.noreply.github.com> Date: Tue, 17 Dec 2024 15:53:53 -0600 Subject: [PATCH 281/303] Reapply "[ASCII-2586] Migrating SecurityAgent to use IPC cert" (#32313) --- cmd/security-agent/api/server.go | 48 ++++--------------- cmd/security-agent/main_windows.go | 6 ++- .../subcommands/start/command.go | 9 ++-- 3 files changed, 19 insertions(+), 44 deletions(-) diff --git a/cmd/security-agent/api/server.go b/cmd/security-agent/api/server.go index e776628e5ccd4..307a4e4c6cd43 100644 --- a/cmd/security-agent/api/server.go +++ b/cmd/security-agent/api/server.go @@ -12,9 +12,6 @@ package api import ( "crypto/tls" - "crypto/x509" - "encoding/pem" - "fmt" stdLog "log" "net" "net/http" @@ -23,10 +20,10 @@ import ( "github.com/gorilla/mux" "github.com/DataDog/datadog-agent/cmd/security-agent/api/agent" + "github.com/DataDog/datadog-agent/comp/api/authtoken" "github.com/DataDog/datadog-agent/comp/core/settings" "github.com/DataDog/datadog-agent/comp/core/status" workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" - "github.com/DataDog/datadog-agent/pkg/api/security" "github.com/DataDog/datadog-agent/pkg/api/util" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -35,19 +32,21 @@ import ( // Server implements security agent API server type Server struct { - listener net.Listener - agent *agent.Agent + listener net.Listener + agent *agent.Agent + tlsConfig *tls.Config } // NewServer creates a new Server instance -func NewServer(statusComponent status.Component, settings settings.Component, wmeta workloadmeta.Component) (*Server, error) { +func NewServer(statusComponent status.Component, settings settings.Component, wmeta workloadmeta.Component, at authtoken.Component) (*Server, error) { listener, err := newListener() if err != nil { return nil, err } return &Server{ - listener: listener, - agent: agent.NewAgent(statusComponent, settings, wmeta), + listener: listener, + agent: agent.NewAgent(statusComponent, settings, wmeta), + tlsConfig: at.GetTLSServerConfig(), }, nil } @@ -62,43 +61,16 @@ func (s *Server) Start() error { // Validate token for every request r.Use(validateToken) - err := util.CreateAndSetAuthToken(pkgconfigsetup.Datadog()) - if err != nil { - return err - } - - hosts := []string{"127.0.0.1", "localhost"} - _, rootCertPEM, rootKey, err := security.GenerateRootCert(hosts, 2048) - if err != nil { - return fmt.Errorf("unable to start TLS server") - } - - // PEM encode the private key - rootKeyPEM := pem.EncodeToMemory(&pem.Block{ - Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(rootKey), - }) - - // Create a TLS cert using the private key and certificate - rootTLSCert, err := tls.X509KeyPair(rootCertPEM, rootKeyPEM) - if err != nil { - return fmt.Errorf("invalid key pair: %v", err) - } - - tlsConfig := tls.Config{ - Certificates: []tls.Certificate{rootTLSCert}, - MinVersion: tls.VersionTLS13, - } - // Use a stack depth of 4 on top of the default one to get a relevant filename in the stdlib logWriter, _ := pkglogsetup.NewLogWriter(4, log.ErrorLvl) srv := &http.Server{ Handler: r, ErrorLog: stdLog.New(logWriter, "Error from the agent http API server: ", 0), // log errors to seelog, - TLSConfig: &tlsConfig, + TLSConfig: s.tlsConfig, WriteTimeout: pkgconfigsetup.Datadog().GetDuration("server_timeout") * time.Second, } - tlsListener := tls.NewListener(s.listener, &tlsConfig) + tlsListener := tls.NewListener(s.listener, s.tlsConfig) go srv.Serve(tlsListener) //nolint:errcheck return nil diff --git a/cmd/security-agent/main_windows.go b/cmd/security-agent/main_windows.go index b81223e6aebc1..a729e7a2003f0 100644 --- a/cmd/security-agent/main_windows.go +++ b/cmd/security-agent/main_windows.go @@ -25,6 +25,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/start" "github.com/DataDog/datadog-agent/comp/agent/autoexit" "github.com/DataDog/datadog-agent/comp/agent/autoexit/autoexitimpl" + "github.com/DataDog/datadog-agent/comp/api/authtoken" "github.com/DataDog/datadog-agent/comp/api/authtoken/fetchonlyimpl" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" @@ -91,10 +92,11 @@ func (s *service) Run(svcctx context.Context) error { params := &cliParams{} err := fxutil.OneShot( func(log log.Component, config config.Component, _ secrets.Component, _ statsd.Component, _ sysprobeconfig.Component, - telemetry telemetry.Component, _ workloadmeta.Component, _ *cliParams, statusComponent status.Component, _ autoexit.Component, settings settings.Component, wmeta workloadmeta.Component) error { + telemetry telemetry.Component, _ workloadmeta.Component, _ *cliParams, statusComponent status.Component, _ autoexit.Component, + settings settings.Component, wmeta workloadmeta.Component, at authtoken.Component) error { defer start.StopAgent(log) - err := start.RunAgent(log, config, telemetry, statusComponent, settings, wmeta) + err := start.RunAgent(log, config, telemetry, statusComponent, settings, wmeta, at) if err != nil { if errors.Is(err, start.ErrAllComponentsDisabled) { // If all components are disabled, we should exit cleanly diff --git a/cmd/security-agent/subcommands/start/command.go b/cmd/security-agent/subcommands/start/command.go index 12a93fc4560ff..2a3dd883dcd84 100644 --- a/cmd/security-agent/subcommands/start/command.go +++ b/cmd/security-agent/subcommands/start/command.go @@ -29,6 +29,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/runtime" "github.com/DataDog/datadog-agent/comp/agent/autoexit" "github.com/DataDog/datadog-agent/comp/agent/autoexit/autoexitimpl" + "github.com/DataDog/datadog-agent/comp/api/authtoken" "github.com/DataDog/datadog-agent/comp/api/authtoken/fetchonlyimpl" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" @@ -201,10 +202,10 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { // TODO(components): note how workloadmeta is passed anonymously, it is still required as it is used // as a global. This should eventually be fixed and all workloadmeta interactions should be via the // injected instance. -func start(log log.Component, config config.Component, _ secrets.Component, _ statsd.Component, _ sysprobeconfig.Component, telemetry telemetry.Component, statusComponent status.Component, _ pid.Component, _ autoexit.Component, settings settings.Component, wmeta workloadmeta.Component) error { +func start(log log.Component, config config.Component, _ secrets.Component, _ statsd.Component, _ sysprobeconfig.Component, telemetry telemetry.Component, statusComponent status.Component, _ pid.Component, _ autoexit.Component, settings settings.Component, wmeta workloadmeta.Component, at authtoken.Component) error { defer StopAgent(log) - err := RunAgent(log, config, telemetry, statusComponent, settings, wmeta) + err := RunAgent(log, config, telemetry, statusComponent, settings, wmeta, at) if errors.Is(err, ErrAllComponentsDisabled) || errors.Is(err, errNoAPIKeyConfigured) { return nil } @@ -256,7 +257,7 @@ var ErrAllComponentsDisabled = errors.New("all security-agent component are disa var errNoAPIKeyConfigured = errors.New("no API key configured") // RunAgent initialized resources and starts API server -func RunAgent(log log.Component, config config.Component, telemetry telemetry.Component, statusComponent status.Component, settings settings.Component, wmeta workloadmeta.Component) (err error) { +func RunAgent(log log.Component, config config.Component, telemetry telemetry.Component, statusComponent status.Component, settings settings.Component, wmeta workloadmeta.Component, at authtoken.Component) (err error) { if err := coredump.Setup(config); err != nil { log.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } @@ -299,7 +300,7 @@ func RunAgent(log log.Component, config config.Component, telemetry telemetry.Co } }() - srv, err = api.NewServer(statusComponent, settings, wmeta) + srv, err = api.NewServer(statusComponent, settings, wmeta, at) if err != nil { return log.Errorf("Error while creating api server, exiting: %v", err) } From 04763f785605e993831458a37faaccc8d950cdf8 Mon Sep 17 00:00:00 2001 From: Kyle Ames Date: Tue, 17 Dec 2024 17:14:13 -0500 Subject: [PATCH 282/303] [RC] Optimize retrieval of raw target files in ClientGetConfigs (#31987) --- pkg/config/remote/service/service.go | 151 +++++++++++----------- pkg/config/remote/service/service_test.go | 42 ++++-- pkg/config/remote/uptane/client.go | 31 +++++ 3 files changed, 140 insertions(+), 84 deletions(-) diff --git a/pkg/config/remote/service/service.go b/pkg/config/remote/service/service.go index a379ac5b387ec..84377477da44c 100644 --- a/pkg/config/remote/service/service.go +++ b/pkg/config/remote/service/service.go @@ -111,50 +111,21 @@ func (s *Service) getNewDirectorRoots(uptane uptaneClient, currentVersion uint64 return roots, nil } -func (s *Service) getTargetFiles(uptane uptaneClient, products []rdata.Product, cachedTargetFiles []*pbgo.TargetFileMeta) ([]*pbgo.File, error) { - productSet := make(map[rdata.Product]struct{}) - for _, product := range products { - productSet[product] = struct{}{} - } - targets, err := uptane.Targets() +func (s *Service) getTargetFiles(uptaneClient uptaneClient, targetFilePaths []string) ([]*pbgo.File, error) { + files, err := uptaneClient.TargetFiles(targetFilePaths) if err != nil { return nil, err } - cachedTargets := make(map[string]data.FileMeta) - for _, cachedTarget := range cachedTargetFiles { - hashes := make(data.Hashes) - for _, hash := range cachedTarget.Hashes { - h, err := hex.DecodeString(hash.Hash) - if err != nil { - return nil, err - } - hashes[hash.Algorithm] = h - } - cachedTargets[cachedTarget.Path] = data.FileMeta{ - Hashes: hashes, - Length: cachedTarget.Length, - } - } + var configFiles []*pbgo.File - for targetPath, targetMeta := range targets { - configPathMeta, err := rdata.ParseConfigPath(targetPath) - if err != nil { - return nil, err - } - if _, inClientProducts := productSet[rdata.Product(configPathMeta.Product)]; inClientProducts { - if notEqualErr := tufutil.FileMetaEqual(cachedTargets[targetPath], targetMeta.FileMeta); notEqualErr == nil { - continue - } - fileContents, err := uptane.TargetFile(targetPath) - if err != nil { - return nil, err - } - configFiles = append(configFiles, &pbgo.File{ - Path: targetPath, - Raw: fileContents, - }) - } + for path, contents := range files { + // Note: This unconditionally succeeds as long as we don't change bufferDestination earlier + configFiles = append(configFiles, &pbgo.File{ + Path: path, + Raw: contents, + }) } + return configFiles, nil } @@ -211,6 +182,7 @@ type uptaneClient interface { StoredOrgUUID() (string, error) Targets() (data.TargetFiles, error) TargetFile(path string) ([]byte, error) + TargetFiles(files []string) (map[string][]byte, error) TargetsMeta() ([]byte, error) TargetsCustom() ([]byte, error) TUFVersionState() (uptane.TUFVersions, error) @@ -828,36 +800,30 @@ func (s *CoreAgentService) ClientGetConfigs(_ context.Context, request *pbgo.Cli if err != nil { return nil, err } - targetsRaw, err := s.uptane.TargetsMeta() + + directorTargets, err := s.uptane.Targets() if err != nil { return nil, err } - targetFiles, err := s.getTargetFiles(s.uptane, rdata.StringListToProduct(request.Client.Products), request.CachedTargetFiles) + matchedClientConfigs, err := executeTracerPredicates(request.Client, directorTargets) if err != nil { return nil, err } - directorTargets, err := s.uptane.Targets() + neededFiles, err := filterNeededTargetFiles(matchedClientConfigs, request.CachedTargetFiles, directorTargets) if err != nil { return nil, err } - matchedClientConfigs, err := executeTracerPredicates(request.Client, directorTargets) + + targetFiles, err := s.getTargetFiles(s.uptane, neededFiles) if err != nil { return nil, err } - // filter files to only return the ones that predicates marked for this client - matchedConfigsMap := make(map[string]interface{}) - for _, configPointer := range matchedClientConfigs { - matchedConfigsMap[configPointer] = struct{}{} - } - filteredFiles := make([]*pbgo.File, 0, len(matchedClientConfigs)) - for _, targetFile := range targetFiles { - if _, ok := matchedConfigsMap[targetFile.Path]; ok { - filteredFiles = append(filteredFiles, targetFile) - } + targetsRaw, err := s.uptane.TargetsMeta() + if err != nil { + return nil, err } - canonicalTargets, err := enforceCanonicalJSON(targetsRaw) if err != nil { return nil, err @@ -866,11 +832,42 @@ func (s *CoreAgentService) ClientGetConfigs(_ context.Context, request *pbgo.Cli return &pbgo.ClientGetConfigsResponse{ Roots: roots, Targets: canonicalTargets, - TargetFiles: filteredFiles, + TargetFiles: targetFiles, ClientConfigs: matchedClientConfigs, }, nil } +func filterNeededTargetFiles(neededConfigs []string, cachedTargetFiles []*pbgo.TargetFileMeta, tufTargets data.TargetFiles) ([]string, error) { + // Build an O(1) lookup of cached target files + cachedTargetsMap := make(map[string]data.FileMeta) + for _, cachedTarget := range cachedTargetFiles { + hashes := make(data.Hashes) + for _, hash := range cachedTarget.Hashes { + h, err := hex.DecodeString(hash.Hash) + if err != nil { + return nil, err + } + hashes[hash.Algorithm] = h + } + cachedTargetsMap[cachedTarget.Path] = data.FileMeta{ + Hashes: hashes, + Length: cachedTarget.Length, + } + } + + // We don't need to pull the raw contents if the client already has the exact version of the file cached + filteredList := make([]string, 0, len(neededConfigs)) + for _, path := range neededConfigs { + if notEqualErr := tufutil.FileMetaEqual(cachedTargetsMap[path], tufTargets[path].FileMeta); notEqualErr == nil { + continue + } + + filteredList = append(filteredList, path) + } + + return filteredList, nil +} + // ConfigGetState returns the state of the configuration and the director repos in the local store func (s *CoreAgentService) ConfigGetState() (*pbgo.GetStateConfigResponse, error) { state, err := s.uptane.State() @@ -1117,29 +1114,14 @@ func (c *HTTPClient) getUpdate( if tufVersions.DirectorTargets == currentTargetsVersion { return nil, nil } - roots, err := c.getNewDirectorRoots(c.uptane, currentRootVersion, tufVersions.DirectorRoot) - if err != nil { - return nil, err - } - targetsRaw, err := c.uptane.TargetsMeta() - if err != nil { - return nil, err - } - targetFiles, err := c.getTargetFiles(c.uptane, rdata.StringListToProduct(products), cachedTargetFiles) - if err != nil { - return nil, err - } - - canonicalTargets, err := enforceCanonicalJSON(targetsRaw) - if err != nil { - return nil, err - } + // Filter out files that either: + // - don't correspond to the product list the client is requesting + // - have expired directorTargets, err := c.uptane.Targets() if err != nil { return nil, err } - productsMap := make(map[string]struct{}) for _, product := range products { productsMap[product] = struct{}{} @@ -1165,14 +1147,33 @@ func (c *HTTPClient) getUpdate( configs = append(configs, path) } + span.SetTag("configs.returned", configs) + span.SetTag("configs.expired", expiredConfigs) + // Gather the files and map-ify them for the state data structure + targetFiles, err := c.getTargetFiles(c.uptane, configs) + if err != nil { + return nil, err + } fileMap := make(map[string][]byte, len(targetFiles)) for _, f := range targetFiles { fileMap[f.Path] = f.Raw } - span.SetTag("configs.returned", configs) - span.SetTag("configs.expired", expiredConfigs) + // Gather some TUF metadata files we need to send down + roots, err := c.getNewDirectorRoots(c.uptane, currentRootVersion, tufVersions.DirectorRoot) + if err != nil { + return nil, err + } + targetsRaw, err := c.uptane.TargetsMeta() + if err != nil { + return nil, err + } + canonicalTargets, err := enforceCanonicalJSON(targetsRaw) + if err != nil { + return nil, err + } + return &state.Update{ TUFRoots: roots, TUFTargets: canonicalTargets, diff --git a/pkg/config/remote/service/service_test.go b/pkg/config/remote/service/service_test.go index 40d8302db3192..34175eea2feba 100644 --- a/pkg/config/remote/service/service_test.go +++ b/pkg/config/remote/service/service_test.go @@ -116,6 +116,11 @@ func (m *mockUptane) TargetFile(path string) ([]byte, error) { return args.Get(0).([]byte), args.Error(1) } +func (m *mockUptane) TargetFiles(files []string) (map[string][]byte, error) { + args := m.Called(files) + return args.Get(0).(map[string][]byte), args.Error(1) +} + func (m *mockUptane) TargetsMeta() ([]byte, error) { args := m.Called() return args.Get(0).([]byte), args.Error(1) @@ -486,8 +491,8 @@ func TestService(t *testing.T) { }, nil) uptaneClient.On("DirectorRoot", uint64(3)).Return(root3, nil) uptaneClient.On("DirectorRoot", uint64(4)).Return(root4, nil) - uptaneClient.On("TargetFile", "datadog/2/APM_SAMPLING/id/1").Return(fileAPM1, nil) - uptaneClient.On("TargetFile", "datadog/2/APM_SAMPLING/id/2").Return(fileAPM2, nil) + + uptaneClient.On("TargetFiles", mock.MatchedBy(listsEqual([]string{"datadog/2/APM_SAMPLING/id/1", "datadog/2/APM_SAMPLING/id/2"}))).Return(map[string][]byte{"datadog/2/APM_SAMPLING/id/1": fileAPM1, "datadog/2/APM_SAMPLING/id/2": fileAPM2}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) api.On("Fetch", mock.Anything, &pbgo.LatestConfigsRequest{ Hostname: service.hostname, @@ -513,7 +518,7 @@ func TestService(t *testing.T) { configResponse, err := service.ClientGetConfigs(context.Background(), &pbgo.ClientGetConfigsRequest{Client: client}) assert.NoError(t, err) assert.ElementsMatch(t, [][]byte{canonicalRoot3, canonicalRoot4}, configResponse.Roots) - assert.ElementsMatch(t, []*pbgo.File{{Path: "datadog/2/APM_SAMPLING/id/1", Raw: fileAPM1}, {Path: "datadog/2/APM_SAMPLING/id/2", Raw: fileAPM2}}, configResponse.TargetFiles) + assert.ElementsMatch(t, []*pbgo.File{{Path: "datadog/2/APM_SAMPLING/id/1", Raw: fileAPM1}, {Path: "datadog/2/APM_SAMPLING/id/2", Raw: fileAPM2}}, configResponse.TargetFiles, nil) assert.Equal(t, canonicalTargets, configResponse.Targets) assert.ElementsMatch(t, configResponse.ClientConfigs, @@ -597,8 +602,7 @@ func TestServiceClientPredicates(t *testing.T) { DirectorRoot: 1, DirectorTargets: 5, }, nil) - uptaneClient.On("TargetFile", "datadog/2/APM_SAMPLING/id/1").Return([]byte(``), nil) - uptaneClient.On("TargetFile", "datadog/2/APM_SAMPLING/id/2").Return([]byte(``), nil) + uptaneClient.On("TargetFiles", mock.MatchedBy(listsEqual([]string{"datadog/2/APM_SAMPLING/id/1", "datadog/2/APM_SAMPLING/id/2"}))).Return(map[string][]byte{"datadog/2/APM_SAMPLING/id/1": []byte(``), "datadog/2/APM_SAMPLING/id/2": []byte(``)}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) api.On("Fetch", mock.Anything, &pbgo.LatestConfigsRequest{ Hostname: service.hostname, @@ -887,8 +891,7 @@ func TestConfigExpiration(t *testing.T) { DirectorRoot: 1, DirectorTargets: 5, }, nil) - uptaneClient.On("TargetFile", "datadog/2/APM_SAMPLING/id/1").Return([]byte(``), nil) - uptaneClient.On("TargetFile", "datadog/2/APM_SAMPLING/id/2").Return([]byte(``), nil) + uptaneClient.On("TargetFiles", []string{"datadog/2/APM_SAMPLING/id/1"}).Return(map[string][]byte{"datadog/2/APM_SAMPLING/id/1": []byte(``), "datadog/2/APM_SAMPLING/id/2": []byte(``)}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) api.On("Fetch", mock.Anything, &pbgo.LatestConfigsRequest{ Hostname: service.hostname, @@ -1190,7 +1193,7 @@ func TestHTTPClientRecentUpdate(t *testing.T) { }, nil, ) - uptaneClient.On("TargetFile", "datadog/2/TESTING1/id/1").Return([]byte(`testing_1`), nil) + uptaneClient.On("TargetFiles", []string{"datadog/2/TESTING1/id/1"}).Return(map[string][]byte{"datadog/2/TESTING1/id/1": []byte(`testing_1`)}, nil) client := setupCDNClient(t, uptaneClient) defer client.Close() @@ -1236,7 +1239,7 @@ func TestHTTPClientUpdateSuccess(t *testing.T) { }, nil, ) - uptaneClient.On("TargetFile", "datadog/2/TESTING1/id/1").Return([]byte(`testing_1`), nil) + uptaneClient.On("TargetFiles", []string{"datadog/2/TESTING1/id/1"}).Return(map[string][]byte{"datadog/2/TESTING1/id/1": []byte(`testing_1`)}, nil) updateErr := fmt.Errorf("uh oh") if tt.updateSucceeds { @@ -1261,3 +1264,24 @@ func TestHTTPClientUpdateSuccess(t *testing.T) { }) } } + +func listsEqual(mustMatch []string) func(candidate []string) bool { + return func(candidate []string) bool { + if len(candidate) != len(mustMatch) { + return false + } + + candidateSet := make(map[string]struct{}) + for _, item := range candidate { + candidateSet[item] = struct{}{} + } + + for _, item := range mustMatch { + if _, ok := candidateSet[item]; !ok { + return false + } + } + + return true + } +} diff --git a/pkg/config/remote/uptane/client.go b/pkg/config/remote/uptane/client.go index b4da1c675b296..fcd1d3834b478 100644 --- a/pkg/config/remote/uptane/client.go +++ b/pkg/config/remote/uptane/client.go @@ -342,6 +342,37 @@ func (c *Client) TargetFile(path string) ([]byte, error) { return c.unsafeTargetFile(path) } +// TargetFiles returns the content of various multiple target files if the repository is in a +// verified state. +func (c *Client) TargetFiles(targetFiles []string) (map[string][]byte, error) { + c.Lock() + defer c.Unlock() + + err := c.verify() + if err != nil { + return nil, err + } + + // Build the storage space + destinations := make(map[string]client.Destination) + for _, path := range targetFiles { + destinations[path] = &bufferDestination{} + } + + err = c.directorTUFClient.DownloadBatch(destinations) + if err != nil { + return nil, err + } + + // Build the return type + files := make(map[string][]byte) + for path, contents := range destinations { + files[path] = contents.(*bufferDestination).Bytes() + } + + return files, nil +} + // TargetsMeta returns the current raw targets.json meta of this uptane client func (c *Client) TargetsMeta() ([]byte, error) { c.Lock() From 7992c127770f6b3c17efc6d6a50ce9aa9d1a7732 Mon Sep 17 00:00:00 2001 From: Maxime Riaud <65339037+misteriaud@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:02:24 -0600 Subject: [PATCH 283/303] [ASCII-2584] Migrating CoreAgent to use IPC cert (#31843) --- comp/api/api/apiimpl/api_test.go | 5 ++-- comp/api/api/apiimpl/security.go | 48 ------------------------------ comp/api/api/apiimpl/server.go | 31 ++++--------------- comp/api/api/apiimpl/server_cmd.go | 14 ++------- comp/api/api/apiimpl/server_ipc.go | 5 ++-- 5 files changed, 13 insertions(+), 90 deletions(-) diff --git a/comp/api/api/apiimpl/api_test.go b/comp/api/api/apiimpl/api_test.go index d92e8f1e4fa48..b248dc9531330 100644 --- a/comp/api/api/apiimpl/api_test.go +++ b/comp/api/api/apiimpl/api_test.go @@ -20,7 +20,7 @@ import ( "github.com/DataDog/datadog-agent/comp/aggregator/demultiplexer/demultiplexerimpl" "github.com/DataDog/datadog-agent/comp/api/api/apiimpl/observability" api "github.com/DataDog/datadog-agent/comp/api/api/def" - "github.com/DataDog/datadog-agent/comp/api/authtoken/fetchonlyimpl" + "github.com/DataDog/datadog-agent/comp/api/authtoken/createandfetchimpl" "github.com/DataDog/datadog-agent/comp/collector/collector" "github.com/DataDog/datadog-agent/comp/core/autodiscovery" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/autodiscoveryimpl" @@ -76,7 +76,7 @@ func getTestAPIServer(t *testing.T, params config.MockParams) testdeps { demultiplexerimpl.MockModule(), fx.Supply(optional.NewNoneOption[rcservice.Component]()), fx.Supply(optional.NewNoneOption[rcservicemrf.Component]()), - fetchonlyimpl.MockModule(), + createandfetchimpl.Module(), fx.Supply(context.Background()), taggermock.Module(), fx.Provide(func(mock taggermock.Mock) tagger.Component { @@ -166,7 +166,6 @@ func TestStartBothServersWithObservability(t *testing.T) { req, err := http.NewRequest(http.MethodGet, url, nil) require.NoError(t, err) - req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", authTokenValue)) resp, err := util.GetClient(false).Do(req) require.NoError(t, err) defer resp.Body.Close() diff --git a/comp/api/api/apiimpl/security.go b/comp/api/api/apiimpl/security.go index f7176bbfbf99c..4b8b17d2ba33d 100644 --- a/comp/api/api/apiimpl/security.go +++ b/comp/api/api/apiimpl/security.go @@ -7,16 +7,9 @@ package apiimpl import ( "crypto/subtle" - "crypto/tls" - "crypto/x509" - "encoding/pem" "errors" - "fmt" "net/http" - "runtime" - "strings" - "github.com/DataDog/datadog-agent/pkg/api/security" "github.com/DataDog/datadog-agent/pkg/api/util" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -44,44 +37,3 @@ func parseToken(token string) (interface{}, error) { // type. return struct{}{}, nil } - -func buildSelfSignedKeyPair(additionalHostIdentities ...string) ([]byte, []byte) { - hosts := []string{"127.0.0.1", "localhost", "::1"} - hosts = append(hosts, additionalHostIdentities...) - _, rootCertPEM, rootKey, err := security.GenerateRootCert(hosts, 2048) - if err != nil { - return nil, nil - } - - // PEM encode the private key - rootKeyPEM := pem.EncodeToMemory(&pem.Block{ - Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(rootKey), - }) - - // Create and return TLS private cert and key - return rootCertPEM, rootKeyPEM -} - -func initializeTLS(additionalHostIdentities ...string) (*tls.Certificate, *x509.CertPool, error) { - // print the caller to identify what is calling this function - if _, file, line, ok := runtime.Caller(1); ok { - log.Infof("[%s:%d] Initializing TLS certificates for hosts %v", file, line, strings.Join(additionalHostIdentities, ", ")) - } - - cert, key := buildSelfSignedKeyPair(additionalHostIdentities...) - if cert == nil { - return nil, nil, errors.New("unable to generate certificate") - } - pair, err := tls.X509KeyPair(cert, key) - if err != nil { - return nil, nil, fmt.Errorf("unable to generate TLS key pair: %v", err) - } - - tlsCertPool := x509.NewCertPool() - ok := tlsCertPool.AppendCertsFromPEM(cert) - if !ok { - return nil, nil, fmt.Errorf("unable to add new certificate to pool") - } - - return &pair, tlsCertPool, nil -} diff --git a/comp/api/api/apiimpl/server.go b/comp/api/api/apiimpl/server.go index 762a67b8a4a63..6def35781eb1a 100644 --- a/comp/api/api/apiimpl/server.go +++ b/comp/api/api/apiimpl/server.go @@ -11,6 +11,7 @@ import ( stdLog "log" "net" "net/http" + "strconv" "github.com/DataDog/datadog-agent/comp/api/api/apiimpl/observability" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -47,34 +48,11 @@ func (server *apiServer) startServers() error { return fmt.Errorf("unable to get IPC address and port: %v", err) } - additionalHostIdentities := []string{apiAddr} - - ipcServerHost, ipcServerHostPort, ipcServerEnabled := getIPCServerAddressPort() - if ipcServerEnabled { - additionalHostIdentities = append(additionalHostIdentities, ipcServerHost) - } - - tlsKeyPair, tlsCertPool, err := initializeTLS(additionalHostIdentities...) - if err != nil { - return fmt.Errorf("unable to initialize TLS: %v", err) - } - - // tls.Config is written to when serving, so it has to be cloned for each server - tlsConfig := func() *tls.Config { - return &tls.Config{ - Certificates: []tls.Certificate{*tlsKeyPair}, - NextProtos: []string{"h2"}, - MinVersion: tls.VersionTLS12, - } - } - tmf := observability.NewTelemetryMiddlewareFactory(server.telemetry) // start the CMD server if err := server.startCMDServer( apiAddr, - tlsConfig(), - tlsCertPool, tmf, server.cfg, ); err != nil { @@ -82,8 +60,11 @@ func (server *apiServer) startServers() error { } // start the IPC server - if ipcServerEnabled { - if err := server.startIPCServer(ipcServerHostPort, tlsConfig(), tmf); err != nil { + if ipcServerPort := server.cfg.GetInt("agent_ipc.port"); ipcServerPort > 0 { + ipcServerHost := server.cfg.GetString("agent_ipc.host") + ipcServerHostPort := net.JoinHostPort(ipcServerHost, strconv.Itoa(ipcServerPort)) + + if err := server.startIPCServer(ipcServerHostPort, tmf); err != nil { // if we fail to start the IPC server, we should stop the CMD server server.stopServers() return fmt.Errorf("unable to start IPC API server: %v", err) diff --git a/comp/api/api/apiimpl/server_cmd.go b/comp/api/api/apiimpl/server_cmd.go index 2b806aa8726e3..2eca0fe7abd09 100644 --- a/comp/api/api/apiimpl/server_cmd.go +++ b/comp/api/api/apiimpl/server_cmd.go @@ -7,8 +7,6 @@ package apiimpl import ( "context" - "crypto/tls" - "crypto/x509" "fmt" "net/http" "time" @@ -35,8 +33,6 @@ const cmdServerShortName string = "CMD" func (server *apiServer) startCMDServer( cmdAddr string, - tlsConfig *tls.Config, - tlsCertPool *x509.CertPool, tmf observability.TelemetryMiddlewareFactory, cfg config.Component, ) (err error) { @@ -54,7 +50,7 @@ func (server *apiServer) startCMDServer( maxMessageSize := cfg.GetInt("cluster_agent.cluster_tagger.grpc_max_message_size") opts := []grpc.ServerOption{ - grpc.Creds(credentials.NewClientTLSFromCert(tlsCertPool, cmdAddr)), + grpc.Creds(credentials.NewTLS(server.authToken.GetTLSServerConfig())), grpc.StreamInterceptor(grpc_auth.StreamServerInterceptor(authInterceptor)), grpc.UnaryInterceptor(grpc_auth.UnaryServerInterceptor(authInterceptor)), grpc.MaxRecvMsgSize(maxMessageSize), @@ -79,11 +75,7 @@ func (server *apiServer) startCMDServer( autodiscovery: server.autoConfig, }) - dcreds := credentials.NewTLS(&tls.Config{ - ServerName: cmdAddr, - RootCAs: tlsCertPool, - }) - dopts := []grpc.DialOption{grpc.WithTransportCredentials(dcreds)} + dopts := []grpc.DialOption{grpc.WithTransportCredentials(credentials.NewTLS(server.authToken.GetTLSClientConfig()))} // starting grpc gateway ctx := context.Background() @@ -133,7 +125,7 @@ func (server *apiServer) startCMDServer( srv := grpcutil.NewMuxedGRPCServer( cmdAddr, - tlsConfig, + server.authToken.GetTLSServerConfig(), s, grpcutil.TimeoutHandlerFunc(cmdMuxHandler, time.Duration(pkgconfigsetup.Datadog().GetInt64("server_timeout"))*time.Second), ) diff --git a/comp/api/api/apiimpl/server_ipc.go b/comp/api/api/apiimpl/server_ipc.go index 10e17509f75e3..634ec1810f35a 100644 --- a/comp/api/api/apiimpl/server_ipc.go +++ b/comp/api/api/apiimpl/server_ipc.go @@ -6,7 +6,6 @@ package apiimpl import ( - "crypto/tls" "net/http" "time" @@ -18,7 +17,7 @@ import ( const ipcServerName string = "IPC API Server" const ipcServerShortName string = "IPC" -func (server *apiServer) startIPCServer(ipcServerAddr string, tlsConfig *tls.Config, tmf observability.TelemetryMiddlewareFactory) (err error) { +func (server *apiServer) startIPCServer(ipcServerAddr string, tmf observability.TelemetryMiddlewareFactory) (err error) { server.ipcListener, err = getListener(ipcServerAddr) if err != nil { return err @@ -39,7 +38,7 @@ func (server *apiServer) startIPCServer(ipcServerAddr string, tlsConfig *tls.Con ipcServer := &http.Server{ Addr: ipcServerAddr, Handler: http.TimeoutHandler(ipcMuxHandler, time.Duration(pkgconfigsetup.Datadog().GetInt64("server_timeout"))*time.Second, "timeout"), - TLSConfig: tlsConfig, + TLSConfig: server.authToken.GetTLSServerConfig(), } startServer(server.ipcListener, ipcServer, ipcServerName) From 1c2598522c37ad6b0dc338331c8b02d3e48c1cf1 Mon Sep 17 00:00:00 2001 From: Maxime Riaud <65339037+misteriaud@users.noreply.github.com> Date: Tue, 17 Dec 2024 17:02:29 -0600 Subject: [PATCH 284/303] [ASCII-2587] Migrating TraceAgent to use IPC cert (#31847) --- cmd/agent/subcommands/flare/command.go | 22 ++++++++++++++------- cmd/agent/subcommands/flare/command_test.go | 18 +++++++++++++---- cmd/agent/subcommands/secret/command.go | 2 +- comp/trace/agent/impl/agent.go | 4 ++++ comp/trace/agent/impl/run.go | 3 +++ comp/trace/bundle_test.go | 4 ++++ comp/trace/status/statusimpl/status.go | 2 +- pkg/config/fetcher/from_processes.go | 2 +- pkg/flare/archive.go | 2 +- pkg/trace/api/api_test.go | 18 ++++++++++++++--- pkg/trace/api/debug_server.go | 18 ++++++++++++----- pkg/trace/info/info.go | 6 ++++-- pkg/trace/info/info_test.go | 8 ++++---- 13 files changed, 80 insertions(+), 29 deletions(-) diff --git a/cmd/agent/subcommands/flare/command.go b/cmd/agent/subcommands/flare/command.go index 1b4fb2d3bc1e3..a6da5391ae5d5 100644 --- a/cmd/agent/subcommands/flare/command.go +++ b/cmd/agent/subcommands/flare/command.go @@ -175,10 +175,18 @@ func readProfileData(seconds int) (flare.ProfileData, error) { type pprofGetter func(path string) ([]byte, error) - tcpGet := func(portConfig string) pprofGetter { - pprofURL := fmt.Sprintf("http://127.0.0.1:%d/debug/pprof", pkgconfigsetup.Datadog().GetInt(portConfig)) + tcpGet := func(portConfig string, onHTTPS bool) pprofGetter { + endpoint := url.URL{ + Scheme: "http", + Host: net.JoinHostPort("127.0.0.1", strconv.Itoa(pkgconfigsetup.Datadog().GetInt(portConfig))), + Path: "/debug/pprof", + } + if onHTTPS { + endpoint.Scheme = "https" + } + return func(path string) ([]byte, error) { - return util.DoGet(c, pprofURL+path, util.LeaveConnectionOpen) + return util.DoGet(c, endpoint.String()+path, util.LeaveConnectionOpen) } } @@ -228,15 +236,15 @@ func readProfileData(seconds int) (flare.ProfileData, error) { } agentCollectors := map[string]agentProfileCollector{ - "core": serviceProfileCollector(tcpGet("expvar_port"), seconds), - "security-agent": serviceProfileCollector(tcpGet("security_agent.expvar_port"), seconds), + "core": serviceProfileCollector(tcpGet("expvar_port", false), seconds), + "security-agent": serviceProfileCollector(tcpGet("security_agent.expvar_port", false), seconds), } if pkgconfigsetup.Datadog().GetBool("process_config.enabled") || pkgconfigsetup.Datadog().GetBool("process_config.container_collection.enabled") || pkgconfigsetup.Datadog().GetBool("process_config.process_collection.enabled") { - agentCollectors["process"] = serviceProfileCollector(tcpGet("process_config.expvar_port"), seconds) + agentCollectors["process"] = serviceProfileCollector(tcpGet("process_config.expvar_port", false), seconds) } if pkgconfigsetup.Datadog().GetBool("apm_config.enabled") { @@ -249,7 +257,7 @@ func readProfileData(seconds int) (flare.ProfileData, error) { traceCpusec = 4 } - agentCollectors["trace"] = serviceProfileCollector(tcpGet("apm_config.debug.port"), traceCpusec) + agentCollectors["trace"] = serviceProfileCollector(tcpGet("apm_config.debug.port", true), traceCpusec) } if pkgconfigsetup.SystemProbe().GetBool("system_probe_config.enabled") { diff --git a/cmd/agent/subcommands/flare/command_test.go b/cmd/agent/subcommands/flare/command_test.go index a27304e95b133..4c96cae079aa9 100644 --- a/cmd/agent/subcommands/flare/command_test.go +++ b/cmd/agent/subcommands/flare/command_test.go @@ -29,6 +29,7 @@ type commandTestSuite struct { suite.Suite sysprobeSocketPath string tcpServer *httptest.Server + tcpTLSServer *httptest.Server unixServer *httptest.Server systemProbeServer *httptest.Server } @@ -42,13 +43,17 @@ func (c *commandTestSuite) SetupSuite() { // This should be called by each test that requires them. func (c *commandTestSuite) startTestServers() { t := c.T() - c.tcpServer, c.unixServer, c.systemProbeServer = c.getPprofTestServer() + c.tcpServer, c.tcpTLSServer, c.unixServer, c.systemProbeServer = c.getPprofTestServer() t.Cleanup(func() { if c.tcpServer != nil { c.tcpServer.Close() c.tcpServer = nil } + if c.tcpTLSServer != nil { + c.tcpTLSServer.Close() + c.tcpTLSServer = nil + } if c.unixServer != nil { c.unixServer.Close() c.unixServer = nil @@ -82,12 +87,13 @@ func newMockHandler() http.HandlerFunc { }) } -func (c *commandTestSuite) getPprofTestServer() (tcpServer *httptest.Server, unixServer *httptest.Server, sysProbeServer *httptest.Server) { +func (c *commandTestSuite) getPprofTestServer() (tcpServer *httptest.Server, tcpTLSServer *httptest.Server, unixServer *httptest.Server, sysProbeServer *httptest.Server) { var err error t := c.T() handler := newMockHandler() tcpServer = httptest.NewServer(handler) + tcpTLSServer = httptest.NewTLSServer(handler) if runtime.GOOS == "linux" { unixServer = httptest.NewUnstartedServer(handler) unixServer.Listener, err = net.Listen("unix", c.sysprobeSocketPath) @@ -101,7 +107,7 @@ func (c *commandTestSuite) getPprofTestServer() (tcpServer *httptest.Server, uni sysProbeServer.Start() } - return tcpServer, unixServer, sysProbeServer + return tcpServer, tcpTLSServer, unixServer, sysProbeServer } func TestCommandTestSuite(t *testing.T) { @@ -116,10 +122,14 @@ func (c *commandTestSuite) TestReadProfileData() { require.NoError(t, err) port := u.Port() + u, err = url.Parse(c.tcpTLSServer.URL) + require.NoError(t, err) + httpsPort := u.Port() + mockConfig := configmock.New(t) mockConfig.SetWithoutSource("expvar_port", port) mockConfig.SetWithoutSource("apm_config.enabled", true) - mockConfig.SetWithoutSource("apm_config.debug.port", port) + mockConfig.SetWithoutSource("apm_config.debug.port", httpsPort) mockConfig.SetWithoutSource("apm_config.receiver_timeout", "10") mockConfig.SetWithoutSource("process_config.expvar_port", port) mockConfig.SetWithoutSource("security_agent.expvar_port", port) diff --git a/cmd/agent/subcommands/secret/command.go b/cmd/agent/subcommands/secret/command.go index e24f95ca6d693..d8b2a7048114f 100644 --- a/cmd/agent/subcommands/secret/command.go +++ b/cmd/agent/subcommands/secret/command.go @@ -101,7 +101,7 @@ func traceAgentSecretRefresh(conf config.Component) ([]byte, error) { c := apiutil.GetClient(false) c.Timeout = conf.GetDuration("server_timeout") * time.Second - url := fmt.Sprintf("http://127.0.0.1:%d/secret/refresh", port) + url := fmt.Sprintf("https://127.0.0.1:%d/secret/refresh", port) res, err := apiutil.DoGet(c, url, apiutil.CloseConnection) if err != nil { return nil, fmt.Errorf("could not contact trace-agent: %s", err) diff --git a/comp/trace/agent/impl/agent.go b/comp/trace/agent/impl/agent.go index b3d783288ceb6..de9237dedeea5 100644 --- a/comp/trace/agent/impl/agent.go +++ b/comp/trace/agent/impl/agent.go @@ -24,6 +24,7 @@ import ( "go.opentelemetry.io/collector/pdata/ptrace" "go.uber.org/fx" + "github.com/DataDog/datadog-agent/comp/api/authtoken" "github.com/DataDog/datadog-agent/comp/core/secrets" tagger "github.com/DataDog/datadog-agent/comp/core/tagger/def" "github.com/DataDog/datadog-agent/comp/dogstatsd/statsd" @@ -68,6 +69,7 @@ type dependencies struct { Statsd statsd.Component Tagger tagger.Component Compressor compression.Component + At authtoken.Component } var _ traceagent.Component = (*component)(nil) @@ -93,6 +95,7 @@ type component struct { params *Params tagger tagger.Component telemetryCollector telemetry.TelemetryCollector + at authtoken.Component wg *sync.WaitGroup } @@ -115,6 +118,7 @@ func NewAgent(deps dependencies) (traceagent.Component, error) { params: deps.Params, telemetryCollector: deps.TelemetryCollector, tagger: deps.Tagger, + at: deps.At, wg: &sync.WaitGroup{}, } statsdCl, err := setupMetrics(deps.Statsd, c.config, c.telemetryCollector) diff --git a/comp/trace/agent/impl/run.go b/comp/trace/agent/impl/run.go index 20ecbc6496a1b..f40b36e29ae7f 100644 --- a/comp/trace/agent/impl/run.go +++ b/comp/trace/agent/impl/run.go @@ -98,6 +98,9 @@ func runAgentSidekicks(ag component) error { })) } + // Configure the Trace Agent Debug server to use the IPC certificate + ag.Agent.DebugServer.SetTLSConfig(ag.at.GetTLSServerConfig()) + log.Infof("Trace agent running on host %s", tracecfg.Hostname) if pcfg := profilingConfig(tracecfg); pcfg != nil { if err := profiling.Start(*pcfg); err != nil { diff --git a/comp/trace/bundle_test.go b/comp/trace/bundle_test.go index e9874a4b40077..692e7c255f473 100644 --- a/comp/trace/bundle_test.go +++ b/comp/trace/bundle_test.go @@ -13,6 +13,8 @@ import ( "github.com/stretchr/testify/require" "go.uber.org/fx" + "github.com/DataDog/datadog-agent/comp/api/authtoken/createandfetchimpl" + "github.com/DataDog/datadog-agent/comp/api/authtoken/fetchonlyimpl" "github.com/DataDog/datadog-agent/comp/core" coreconfig "github.com/DataDog/datadog-agent/comp/core/config" log "github.com/DataDog/datadog-agent/comp/core/log/def" @@ -45,6 +47,7 @@ func TestBundleDependencies(t *testing.T) { zstdfx.Module(), taggerfx.Module(tagger.Params{}), fx.Supply(&traceagentimpl.Params{}), + createandfetchimpl.Module(), ) } @@ -75,6 +78,7 @@ func TestMockBundleDependencies(t *testing.T) { fx.Invoke(func(_ traceagent.Component) {}), MockBundle(), taggerfx.Module(tagger.Params{}), + fetchonlyimpl.MockModule(), )) require.NotNil(t, cfg.Object()) diff --git a/comp/trace/status/statusimpl/status.go b/comp/trace/status/statusimpl/status.go index e476ee0281d7a..00a8730b87da8 100644 --- a/comp/trace/status/statusimpl/status.go +++ b/comp/trace/status/statusimpl/status.go @@ -95,7 +95,7 @@ func (s statusProvider) populateStatus() map[string]interface{} { port := s.Config.GetInt("apm_config.debug.port") c := client() - url := fmt.Sprintf("http://localhost:%d/debug/vars", port) + url := fmt.Sprintf("https://localhost:%d/debug/vars", port) resp, err := apiutil.DoGet(c, url, apiutil.CloseConnection) if err != nil { return map[string]interface{}{ diff --git a/pkg/config/fetcher/from_processes.go b/pkg/config/fetcher/from_processes.go index 5b8088f41d970..95c24e283fb46 100644 --- a/pkg/config/fetcher/from_processes.go +++ b/pkg/config/fetcher/from_processes.go @@ -71,7 +71,7 @@ func TraceAgentConfig(config config.Reader) (string, error) { c := util.GetClient(false) c.Timeout = config.GetDuration("server_timeout") * time.Second - ipcAddressWithPort := fmt.Sprintf("http://127.0.0.1:%d/config", port) + ipcAddressWithPort := fmt.Sprintf("https://127.0.0.1:%d/config", port) client := settingshttp.NewClient(c, ipcAddressWithPort, "trace-agent", settingshttp.NewHTTPClientOptions(util.CloseConnection)) return client.FullConfig() diff --git a/pkg/flare/archive.go b/pkg/flare/archive.go index c3e5dffe00ca8..b61c6d9dd6ed2 100644 --- a/pkg/flare/archive.go +++ b/pkg/flare/archive.go @@ -214,7 +214,7 @@ func getExpVar(fb flaretypes.FlareBuilder) error { apmDebugPort := pkgconfigsetup.Datadog().GetInt("apm_config.debug.port") f := filepath.Join("expvar", "trace-agent") - resp, err := http.Get(fmt.Sprintf("http://127.0.0.1:%d/debug/vars", apmDebugPort)) + resp, err := http.Get(fmt.Sprintf("https://127.0.0.1:%d/debug/vars", apmDebugPort)) if err != nil { return fb.AddFile(f, []byte(fmt.Sprintf("Error retrieving vars: %v", err))) } diff --git a/pkg/trace/api/api_test.go b/pkg/trace/api/api_test.go index 9a468dc164487..3f3b2c5b3a20b 100644 --- a/pkg/trace/api/api_test.go +++ b/pkg/trace/api/api_test.go @@ -1039,14 +1039,26 @@ func TestExpvar(t *testing.T) { } c := newTestReceiverConfig() - c.DebugServerPort = 5012 + c.DebugServerPort = 6789 info.InitInfo(c) + + // Starting a TLS httptest server to retrieve tlsCert + ts := httptest.NewTLSServer(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) {})) + tlsConfig := ts.TLS.Clone() + // Setting a client with the proper TLS configuration + client := ts.Client() + ts.Close() + + // Starting Debug Server s := NewDebugServer(c) + s.SetTLSConfig(tlsConfig) + + // Starting the Debug server s.Start() defer s.Stop() - resp, err := http.Get("http://127.0.0.1:5012/debug/vars") - assert.NoError(t, err) + resp, err := client.Get(fmt.Sprintf("https://127.0.0.1:%d/debug/vars", c.DebugServerPort)) + require.NoError(t, err) defer resp.Body.Close() t.Run("read-expvars", func(t *testing.T) { diff --git a/pkg/trace/api/debug_server.go b/pkg/trace/api/debug_server.go index 828d5357330eb..6fd2f39cc011a 100644 --- a/pkg/trace/api/debug_server.go +++ b/pkg/trace/api/debug_server.go @@ -9,6 +9,7 @@ package api import ( "context" + "crypto/tls" "expvar" "fmt" "net" @@ -29,9 +30,10 @@ const ( // DebugServer serves /debug/* endpoints type DebugServer struct { - conf *config.AgentConfig - server *http.Server - mux *http.ServeMux + conf *config.AgentConfig + server *http.Server + mux *http.ServeMux + tlsConfig *tls.Config } // NewDebugServer returns a debug server @@ -53,13 +55,14 @@ func (ds *DebugServer) Start() { WriteTimeout: defaultTimeout, Handler: ds.setupMux(), } - listener, err := net.Listen("tcp", fmt.Sprintf("127.0.0.1:%d", ds.conf.DebugServerPort)) + listener, err := net.Listen("tcp", net.JoinHostPort("127.0.0.1", strconv.Itoa(ds.conf.DebugServerPort))) if err != nil { log.Errorf("Error creating debug server listener: %s", err) return } + tlsListener := tls.NewListener(listener, ds.tlsConfig) go func() { - if err := ds.server.Serve(listener); err != nil && err != http.ErrServerClosed { + if err := ds.server.Serve(tlsListener); err != nil && err != http.ErrServerClosed { log.Errorf("Could not start debug server: %s. Debug server disabled.", err) } }() @@ -82,6 +85,11 @@ func (ds *DebugServer) AddRoute(route string, handler http.Handler) { ds.mux.Handle(route, handler) } +// SetTLSConfig adds the provided tls.Config to the internal http.Server +func (ds *DebugServer) SetTLSConfig(config *tls.Config) { + ds.tlsConfig = config +} + func (ds *DebugServer) setupMux() *http.ServeMux { ds.mux.HandleFunc("/debug/pprof/", pprof.Index) ds.mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline) diff --git a/pkg/trace/info/info.go b/pkg/trace/info/info.go index df86c40587fdc..4198100ee6a5b 100644 --- a/pkg/trace/info/info.go +++ b/pkg/trace/info/info.go @@ -8,6 +8,7 @@ package info import ( "bytes" + "crypto/tls" "encoding/json" "expvar" // automatically publish `/debug/vars` on HTTP port "fmt" @@ -236,8 +237,9 @@ func getProgramBanner(version string) (string, string) { // If error is nil, means the program is running. // If not, it displays a pretty-printed message anyway (for support) func Info(w io.Writer, conf *config.AgentConfig) error { - url := fmt.Sprintf("http://127.0.0.1:%d/debug/vars", conf.DebugServerPort) - client := http.Client{Timeout: 3 * time.Second} + url := fmt.Sprintf("https://127.0.0.1:%d/debug/vars", conf.DebugServerPort) + tr := &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true}} + client := http.Client{Timeout: 3 * time.Second, Transport: tr} resp, err := client.Get(url) if err != nil { // OK, here, we can't even make an http call on the agent port, diff --git a/pkg/trace/info/info_test.go b/pkg/trace/info/info_test.go index 01c369cac403e..25b7cb42b13ff 100644 --- a/pkg/trace/info/info_test.go +++ b/pkg/trace/info/info_test.go @@ -63,7 +63,7 @@ func (h *testServerHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { func testServer(t *testing.T, testFile string) *httptest.Server { t.Helper() - server := httptest.NewServer(&testServerHandler{t: t, testFile: testFile}) + server := httptest.NewTLSServer(&testServerHandler{t: t, testFile: testFile}) t.Logf("test server (serving fake yet valid data) listening on %s", server.URL) return server } @@ -94,7 +94,7 @@ func (h *testServerWarningHandler) ServeHTTP(w http.ResponseWriter, r *http.Requ } func testServerWarning(t *testing.T) *httptest.Server { - server := httptest.NewServer(&testServerWarningHandler{t: t}) + server := httptest.NewTLSServer(&testServerWarningHandler{t: t}) t.Logf("test server (serving data containing worrying values) listening on %s", server.URL) return server } @@ -119,7 +119,7 @@ func (h *testServerErrorHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques } func testServerError(t *testing.T) *httptest.Server { - server := httptest.NewServer(&testServerErrorHandler{t: t}) + server := httptest.NewTLSServer(&testServerErrorHandler{t: t}) t.Logf("test server (serving bad data to trigger errors) listening on %s", server.URL) return server } @@ -331,7 +331,7 @@ func TestError(t *testing.T) { assert.Equal(len(lines[1]), len(lines[2])) assert.Equal("", lines[3]) assert.Regexp(regexp.MustCompile(`^ Error: .*$`), lines[4]) - assert.Equal(fmt.Sprintf(" URL: http://127.0.0.1:%d/debug/vars", port), lines[5]) + assert.Equal(fmt.Sprintf(" URL: https://127.0.0.1:%d/debug/vars", port), lines[5]) assert.Equal("", lines[6]) assert.Equal("", lines[7]) } From 26052f9b0fdb75103002f7090cab64a7c9a12aa2 Mon Sep 17 00:00:00 2001 From: Keisuke Umegaki <41987730+keisku@users.noreply.github.com> Date: Wed, 18 Dec 2024 09:53:55 +0900 Subject: [PATCH 285/303] typo: `DD_APM_OBFUSCATION_CACHE_ENABLED` in Agent Main Configuration File (#32291) --- pkg/config/config_template.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/config/config_template.yaml b/pkg/config/config_template.yaml index a858e50ce8b7f..5b4403be1a654 100644 --- a/pkg/config/config_template.yaml +++ b/pkg/config/config_template.yaml @@ -1261,7 +1261,7 @@ api_key: # obfuscate_sql_values: # - val1 # cache: - ## @param DD_APM_CACHE_ENABLED - boolean - optional + ## @param DD_APM_OBFUSCATION_CACHE_ENABLED - boolean - optional ## Enables caching obfuscated statements. Currently supported for SQL and MongoDB queries. ## Enabled by default. # enabled: true From 9f73ec4f6622e92c48f9008b7797ef5aeb9dc28f Mon Sep 17 00:00:00 2001 From: Guy Arbitman Date: Wed, 18 Dec 2024 08:59:55 +0200 Subject: [PATCH 286/303] npm: tests: Fixed testing gotchas (#32190) --- pkg/network/tracer/tracer_linux_test.go | 57 +++++++++++++------------ 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/pkg/network/tracer/tracer_linux_test.go b/pkg/network/tracer/tracer_linux_test.go index 29a8b6e34965a..46f33ac7fa405 100644 --- a/pkg/network/tracer/tracer_linux_test.go +++ b/pkg/network/tracer/tracer_linux_test.go @@ -109,7 +109,7 @@ func (s *TracerSuite) TestTCPRemoveEntries() { defer c2.Close() assert.EventuallyWithT(t, func(ct *assert.CollectT) { - conn, ok := findConnection(c2.LocalAddr(), c2.RemoteAddr(), getConnections(t, tr)) + conn, ok := findConnection(c2.LocalAddr(), c2.RemoteAddr(), getConnections(ct, tr)) if !assert.True(ct, ok) { return } @@ -123,9 +123,9 @@ func (s *TracerSuite) TestTCPRemoveEntries() { }, 3*time.Second, 100*time.Millisecond) // Make sure the first connection got cleaned up - assert.Eventually(t, func() bool { - _, ok := findConnection(c.LocalAddr(), c.RemoteAddr(), getConnections(t, tr)) - return !ok + assert.EventuallyWithT(t, func(ct *assert.CollectT) { + _, ok := findConnection(c.LocalAddr(), c.RemoteAddr(), getConnections(ct, tr)) + require.False(ct, ok) }, 5*time.Second, 100*time.Millisecond) } @@ -735,10 +735,10 @@ func (s *TracerSuite) TestGatewayLookupEnabled() { dnsServerAddr := &net.UDPAddr{IP: dnsAddr, Port: 53} var conn *network.ConnectionStats - require.Eventually(t, func() bool { + require.EventuallyWithT(t, func(ct *assert.CollectT) { var ok bool - conn, ok = findConnection(dnsClientAddr, dnsServerAddr, getConnections(t, tr)) - return ok + conn, ok = findConnection(dnsClientAddr, dnsServerAddr, getConnections(ct, tr)) + require.True(ct, ok, "connection not found") }, 3*time.Second, 100*time.Millisecond) require.NotNil(t, conn.Via, "connection is missing via: %s", conn) @@ -791,10 +791,10 @@ func (s *TracerSuite) TestGatewayLookupSubnetLookupError() { dnsClientAddr := &net.UDPAddr{IP: net.ParseIP(clientIP), Port: clientPort} dnsServerAddr := &net.UDPAddr{IP: destAddr, Port: 53} var c *network.ConnectionStats - require.Eventually(t, func() bool { + require.EventuallyWithT(t, func(ct *assert.CollectT) { var ok bool - c, ok = findConnection(dnsClientAddr, dnsServerAddr, getConnections(t, tr)) - return ok + c, ok = findConnection(dnsClientAddr, dnsServerAddr, getConnections(ct, tr)) + require.True(ct, ok, "connection not found") }, 3*time.Second, 100*time.Millisecond, "connection not found") require.Nil(t, c.Via) @@ -804,10 +804,10 @@ func (s *TracerSuite) TestGatewayLookupSubnetLookupError() { }, 6*time.Second, 100*time.Millisecond, "failed to send dns query") dnsClientAddr = &net.UDPAddr{IP: net.ParseIP(clientIP), Port: clientPort} - require.Eventually(t, func() bool { + require.EventuallyWithT(t, func(ct *assert.CollectT) { var ok bool - c, ok = findConnection(dnsClientAddr, dnsServerAddr, getConnections(t, tr)) - return ok + c, ok = findConnection(dnsClientAddr, dnsServerAddr, getConnections(ct, tr)) + require.True(ct, ok, "connection not found") }, 3*time.Second, 100*time.Millisecond, "connection not found") require.Nil(t, c.Via) @@ -1529,25 +1529,25 @@ func testUDPReusePort(t *testing.T, udpnet string, ip string) { assert.EventuallyWithT(t, func(ct *assert.CollectT) { //nolint:revive // TODO // use t instead of ct because getConnections uses require (not assert), and we get a better error message that way - connections := getConnections(t, tr) + connections := getConnections(ct, tr) incoming, ok := findConnection(c.RemoteAddr(), c.LocalAddr(), connections) - if assert.True(t, ok, "unable to find incoming connection") { - assert.Equal(t, network.INCOMING, incoming.Direction) + if assert.True(ct, ok, "unable to find incoming connection") { + assert.Equal(ct, network.INCOMING, incoming.Direction) // make sure the inverse values are seen for the other message - assert.Equal(t, serverMessageSize, int(incoming.Monotonic.SentBytes), "incoming sent") - assert.Equal(t, clientMessageSize, int(incoming.Monotonic.RecvBytes), "incoming recv") - assert.True(t, incoming.IntraHost, "incoming intrahost") + assert.Equal(ct, serverMessageSize, int(incoming.Monotonic.SentBytes), "incoming sent") + assert.Equal(ct, clientMessageSize, int(incoming.Monotonic.RecvBytes), "incoming recv") + assert.True(ct, incoming.IntraHost, "incoming intrahost") } outgoing, ok := findConnection(c.LocalAddr(), c.RemoteAddr(), connections) - if assert.True(t, ok, "unable to find outgoing connection") { - assert.Equal(t, network.OUTGOING, outgoing.Direction) + if assert.True(ct, ok, "unable to find outgoing connection") { + assert.Equal(ct, network.OUTGOING, outgoing.Direction) - assert.Equal(t, clientMessageSize, int(outgoing.Monotonic.SentBytes), "outgoing sent") - assert.Equal(t, serverMessageSize, int(outgoing.Monotonic.RecvBytes), "outgoing recv") - assert.True(t, outgoing.IntraHost, "outgoing intrahost") + assert.Equal(ct, clientMessageSize, int(outgoing.Monotonic.SentBytes), "outgoing sent") + assert.Equal(ct, serverMessageSize, int(outgoing.Monotonic.RecvBytes), "outgoing recv") + assert.True(ct, outgoing.IntraHost, "outgoing intrahost") } }, 3*time.Second, 100*time.Millisecond) @@ -1660,8 +1660,8 @@ func (s *TracerSuite) TestSendfileRegression() { t.Logf("looking for connections %+v <-> %+v", c.LocalAddr(), c.RemoteAddr()) var outConn, inConn *network.ConnectionStats - assert.Eventually(t, func() bool { - conns := getConnections(t, tr) + assert.EventuallyWithT(t, func(ct *assert.CollectT) { + conns := getConnections(ct, tr) t.Log(conns) if outConn == nil { outConn = network.FirstConnection(conns, network.ByType(connType), network.ByFamily(family), network.ByTuple(c.LocalAddr(), c.RemoteAddr())) @@ -1669,7 +1669,8 @@ func (s *TracerSuite) TestSendfileRegression() { if inConn == nil { inConn = network.FirstConnection(conns, network.ByType(connType), network.ByFamily(family), network.ByTuple(c.RemoteAddr(), c.LocalAddr())) } - return outConn != nil && inConn != nil + require.NotNil(ct, outConn) + require.NotNil(ct, inConn) }, 3*time.Second, 100*time.Millisecond, "couldn't find connections used by sendfile(2)") if assert.NotNil(t, outConn, "couldn't find outgoing connection used by sendfile(2)") { @@ -2433,7 +2434,7 @@ LOOP: require.NoError(t, c.Close(), "error closing client connection") require.EventuallyWithT(t, func(collect *assert.CollectT) { - conn, found := findConnection(c.LocalAddr(), srv.Addr(), getConnections(t, tr)) + conn, found := findConnection(c.LocalAddr(), srv.Addr(), getConnections(collect, tr)) require.True(collect, found, "could not find connection") require.True(collect, conn.IsClosed, "connection should be closed") // after closing the client connection, the duration should be From 332025d2eca869ea264ad9abde503853757d5f70 Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Wed, 18 Dec 2024 09:26:17 +0100 Subject: [PATCH 287/303] fix(release.cleanup): Checkout the default branch (#32234) --- tasks/libs/ciproviders/github_api.py | 4 +++- tasks/release.py | 17 ++++++----------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/tasks/libs/ciproviders/github_api.py b/tasks/libs/ciproviders/github_api.py index 8a4d5e69027d1..54a3ba49a43f1 100644 --- a/tasks/libs/ciproviders/github_api.py +++ b/tasks/libs/ciproviders/github_api.py @@ -332,7 +332,9 @@ def workflow_run_for_ref_after_date(self, workflow_name, ref, oldest_date): return sorted(recent_runs, key=lambda run: run.created_at, reverse=True) - def latest_release(self) -> str: + def latest_release(self, major_version=7) -> str: + if major_version == 6: + return max((r for r in self.get_releases() if r.title.startswith('6.53')), key=lambda r: r.created_at).title release = self._repository.get_latest_release() return release.title diff --git a/tasks/release.py b/tasks/release.py index 077834b279923..4e5805b0ffb76 100644 --- a/tasks/release.py +++ b/tasks/release.py @@ -837,10 +837,6 @@ def _update_last_stable(_, version, major_version: int = 7): return release_json["current_milestone"] -def _get_agent6_latest_release(gh): - return max((r for r in gh.get_releases() if r.title.startswith('6.53')), key=lambda r: r.created_at).title - - @task def cleanup(ctx, release_branch): """Perform the post release cleanup steps @@ -850,13 +846,13 @@ def cleanup(ctx, release_branch): - Updates the release.json last_stable fields """ - with agent_context(ctx, release_branch): + # This task will create a PR to update the last_stable field in release.json + # It must create the PR against the default branch (6 or 7), so setting the context on it + main_branch = get_default_branch() + with agent_context(ctx, main_branch): gh = GithubAPI() major_version = get_version_major(release_branch) - if major_version == 6: - latest_release = _get_agent6_latest_release(gh) - else: - latest_release = gh.latest_release() + latest_release = gh.latest_release(major_version) match = VERSION_RE.search(latest_release) if not match: raise Exit(f'Unexpected version fetched from github {latest_release}', code=1) @@ -865,7 +861,6 @@ def cleanup(ctx, release_branch): current_milestone = _update_last_stable(ctx, version, major_version=major_version) # create pull request to update last stable version - main_branch = get_default_branch() cleanup_branch = f"release/{version}-cleanup" ctx.run(f"git checkout -b {cleanup_branch}") ctx.run("git add release.json") @@ -1034,7 +1029,7 @@ def get_active_release_branch(ctx, release_branch): with agent_context(ctx, branch=release_branch): gh = GithubAPI() - next_version = get_next_version(gh, latest_release=_get_agent6_latest_release(gh) if is_agent6(ctx) else None) + next_version = get_next_version(gh, latest_release=gh.latest_release(6) if is_agent6(ctx) else None) release_branch = gh.get_branch(next_version.branch()) if release_branch: print(f"{release_branch.name}") From 469bd66d6ad9bbb0b11af7b487d6f86c991782b6 Mon Sep 17 00:00:00 2001 From: louis-cqrl <93274433+louis-cqrl@users.noreply.github.com> Date: Wed, 18 Dec 2024 10:02:37 +0100 Subject: [PATCH 288/303] [ASCII-2621] Update Scrubber package (#32311) --- comp/core/flare/helpers/builder_test.go | 8 +- comp/core/log/mock/go.mod | 1 + .../otlp/components/statsprocessor/go.mod | 1 - .../otlp/components/statsprocessor/go.sum | 2 - pkg/config/teeconfig/go.mod | 1 + pkg/gohai/go.mod | 1 - pkg/gohai/go.sum | 2 - pkg/logs/util/testutils/go.mod | 1 + pkg/orchestrator/model/go.mod | 2 +- pkg/orchestrator/model/go.sum | 2 - pkg/trace/go.mod | 1 - pkg/trace/go.sum | 2 - pkg/trace/stats/oteltest/go.mod | 1 - pkg/trace/stats/oteltest/go.sum | 2 - pkg/util/cgroups/go.mod | 1 - pkg/util/cgroups/go.sum | 2 - pkg/util/defaultpaths/go.mod | 2 +- pkg/util/defaultpaths/go.sum | 2 - pkg/util/filesystem/go.mod | 1 - pkg/util/filesystem/go.sum | 2 - pkg/util/hostname/validate/go.mod | 1 - pkg/util/hostname/validate/go.sum | 2 - pkg/util/log/go.mod | 1 - pkg/util/log/go.sum | 2 - pkg/util/scrubber/default_test.go | 180 +++--------------- pkg/util/scrubber/go.mod | 3 +- pkg/util/scrubber/go.sum | 2 - pkg/util/scrubber/json_scrubber_test.go | 27 +++ pkg/util/scrubber/test/conf.yaml | 16 +- pkg/util/scrubber/test/conf_scrubbed.yaml | 16 +- pkg/util/scrubber/yaml_scrubber.go | 16 +- pkg/util/scrubber/yaml_scrubber_test.go | 107 +++++++++++ pkg/util/system/go.mod | 1 - pkg/util/system/go.sum | 2 - pkg/util/uuid/go.mod | 2 +- pkg/util/uuid/go.sum | 2 - pkg/util/winutil/go.mod | 1 - pkg/util/winutil/go.sum | 2 - 38 files changed, 198 insertions(+), 222 deletions(-) diff --git a/comp/core/flare/helpers/builder_test.go b/comp/core/flare/helpers/builder_test.go index 26508575eef92..ccc544eb6ecb9 100644 --- a/comp/core/flare/helpers/builder_test.go +++ b/comp/core/flare/helpers/builder_test.go @@ -213,8 +213,8 @@ func TestAddFileYamlDetection(t *testing.T) { - abcdef - abcdef`) redacted := `instances: -- host: 127.0.0.1 - token: "********"` + - host: 127.0.0.1 + token: "********"` fb.AddFile("test.yaml", clear) assertFileContent(t, fb, redacted, "test.yaml") @@ -297,8 +297,8 @@ func TestCopyFileYamlDetection(t *testing.T) { - abcdef - abcdef`) redacted := `instances: -- host: 127.0.0.1 - token: "********"` + - host: 127.0.0.1 + token: "********"` path1 := filepath.Join(t.TempDir(), "test.yaml") os.WriteFile(path1, []byte(input), os.ModePerm) diff --git a/comp/core/log/mock/go.mod b/comp/core/log/mock/go.mod index 8b744f1e85ca2..e4f0f87cabdcb 100644 --- a/comp/core/log/mock/go.mod +++ b/comp/core/log/mock/go.mod @@ -58,6 +58,7 @@ require ( golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) replace github.com/DataDog/datadog-agent/pkg/config/structure => ../../../../pkg/config/structure diff --git a/comp/otelcol/otlp/components/statsprocessor/go.mod b/comp/otelcol/otlp/components/statsprocessor/go.mod index 05eb43fdf4629..4ad268c10dfcb 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.mod +++ b/comp/otelcol/otlp/components/statsprocessor/go.mod @@ -97,7 +97,6 @@ require ( google.golang.org/grpc v1.67.1 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/comp/otelcol/otlp/components/statsprocessor/go.sum b/comp/otelcol/otlp/components/statsprocessor/go.sum index 25a9e6fccac3c..a19fb370fa6c4 100644 --- a/comp/otelcol/otlp/components/statsprocessor/go.sum +++ b/comp/otelcol/otlp/components/statsprocessor/go.sum @@ -245,8 +245,6 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/config/teeconfig/go.mod b/pkg/config/teeconfig/go.mod index 2484fb9cd55e3..daec9f976da68 100644 --- a/pkg/config/teeconfig/go.mod +++ b/pkg/config/teeconfig/go.mod @@ -33,6 +33,7 @@ require ( golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/gohai/go.mod b/pkg/gohai/go.mod index 45edc82c08f38..e7dee142ec26f 100644 --- a/pkg/gohai/go.mod +++ b/pkg/gohai/go.mod @@ -26,7 +26,6 @@ require ( github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/gohai/go.sum b/pkg/gohai/go.sum index 99c1b368ae068..828633a9495c7 100644 --- a/pkg/gohai/go.sum +++ b/pkg/gohai/go.sum @@ -44,7 +44,5 @@ golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/logs/util/testutils/go.mod b/pkg/logs/util/testutils/go.mod index 46e01043de4bf..1c02f6f2f8775 100644 --- a/pkg/logs/util/testutils/go.mod +++ b/pkg/logs/util/testutils/go.mod @@ -95,4 +95,5 @@ require ( golang.org/x/sys v0.28.0 // indirect golang.org/x/text v0.21.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/orchestrator/model/go.mod b/pkg/orchestrator/model/go.mod index 96f90197c3fe2..f941c7960e5ae 100644 --- a/pkg/orchestrator/model/go.mod +++ b/pkg/orchestrator/model/go.mod @@ -17,7 +17,7 @@ require ( github.com/DataDog/datadog-agent/pkg/version v0.59.1 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect go.uber.org/atomic v1.11.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/orchestrator/model/go.sum b/pkg/orchestrator/model/go.sum index 3c93bebd8c6dd..01c4e89a188d8 100644 --- a/pkg/orchestrator/model/go.sum +++ b/pkg/orchestrator/model/go.sum @@ -19,7 +19,5 @@ go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/trace/go.mod b/pkg/trace/go.mod index fa1ca487a3dc8..51564f328f09e 100644 --- a/pkg/trace/go.mod +++ b/pkg/trace/go.mod @@ -110,7 +110,6 @@ require ( golang.org/x/text v0.21.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/trace/go.sum b/pkg/trace/go.sum index 4613790f7cc34..e1b7335487809 100644 --- a/pkg/trace/go.sum +++ b/pkg/trace/go.sum @@ -402,8 +402,6 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/trace/stats/oteltest/go.mod b/pkg/trace/stats/oteltest/go.mod index 306e0217b22ad..c3759db9cc74b 100644 --- a/pkg/trace/stats/oteltest/go.mod +++ b/pkg/trace/stats/oteltest/go.mod @@ -83,7 +83,6 @@ require ( google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect google.golang.org/grpc v1.67.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/trace/stats/oteltest/go.sum b/pkg/trace/stats/oteltest/go.sum index 25a9e6fccac3c..a19fb370fa6c4 100644 --- a/pkg/trace/stats/oteltest/go.sum +++ b/pkg/trace/stats/oteltest/go.sum @@ -245,8 +245,6 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/util/cgroups/go.mod b/pkg/util/cgroups/go.mod index 47a3c2c368f5f..0be6406d65503 100644 --- a/pkg/util/cgroups/go.mod +++ b/pkg/util/cgroups/go.mod @@ -31,7 +31,6 @@ require ( go.uber.org/atomic v1.11.0 // indirect golang.org/x/sys v0.28.0 // indirect google.golang.org/protobuf v1.35.2 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/util/cgroups/go.sum b/pkg/util/cgroups/go.sum index 69f8c3e58e44b..d2a0373b5e095 100644 --- a/pkg/util/cgroups/go.sum +++ b/pkg/util/cgroups/go.sum @@ -38,7 +38,5 @@ google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojt gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/util/defaultpaths/go.mod b/pkg/util/defaultpaths/go.mod index ad84aa45db6e9..0f0c498c8154e 100644 --- a/pkg/util/defaultpaths/go.mod +++ b/pkg/util/defaultpaths/go.mod @@ -22,7 +22,7 @@ require ( github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect go.uber.org/atomic v1.11.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/util/defaultpaths/go.sum b/pkg/util/defaultpaths/go.sum index 767c365bf98df..82beecfd023fb 100644 --- a/pkg/util/defaultpaths/go.sum +++ b/pkg/util/defaultpaths/go.sum @@ -21,7 +21,5 @@ golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/util/filesystem/go.mod b/pkg/util/filesystem/go.mod index 292bb06f164b9..31b6f1fbd4ab0 100644 --- a/pkg/util/filesystem/go.mod +++ b/pkg/util/filesystem/go.mod @@ -29,7 +29,6 @@ require ( github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/util/filesystem/go.sum b/pkg/util/filesystem/go.sum index 14cc56a3421e8..ebdb96f4beb1d 100644 --- a/pkg/util/filesystem/go.sum +++ b/pkg/util/filesystem/go.sum @@ -36,7 +36,5 @@ golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/util/hostname/validate/go.mod b/pkg/util/hostname/validate/go.mod index 6ec1ae79a177d..9c1a227476e2c 100644 --- a/pkg/util/hostname/validate/go.mod +++ b/pkg/util/hostname/validate/go.mod @@ -19,7 +19,6 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect go.uber.org/atomic v1.11.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/util/hostname/validate/go.sum b/pkg/util/hostname/validate/go.sum index c57375d7e46df..d45d69118e85e 100644 --- a/pkg/util/hostname/validate/go.sum +++ b/pkg/util/hostname/validate/go.sum @@ -17,7 +17,5 @@ go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/util/log/go.mod b/pkg/util/log/go.mod index 26f759935f92e..a439a62283f76 100644 --- a/pkg/util/log/go.mod +++ b/pkg/util/log/go.mod @@ -17,7 +17,6 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect go.uber.org/multierr v1.11.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/util/log/go.sum b/pkg/util/log/go.sum index f46b720dc7374..ffca41d546584 100644 --- a/pkg/util/log/go.sum +++ b/pkg/util/log/go.sum @@ -23,7 +23,5 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/util/scrubber/default_test.go b/pkg/util/scrubber/default_test.go index 86134fbc90328..7c093d9e40300 100644 --- a/pkg/util/scrubber/default_test.go +++ b/pkg/util/scrubber/default_test.go @@ -6,16 +6,13 @@ package scrubber import ( - "encoding/json" "os" "path/filepath" - "reflect" "strings" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "gopkg.in/yaml.v2" ) func assertClean(t *testing.T, contents, cleanContents string) { @@ -26,96 +23,6 @@ func assertClean(t *testing.T, contents, cleanContents string) { assert.Equal(t, strings.TrimSpace(cleanContents), strings.TrimSpace(cleanedString)) } -func TestConfigScrubbedValidYaml(t *testing.T) { - wd, _ := os.Getwd() - - inputConf := filepath.Join(wd, "test", "conf.yaml") - inputConfData, err := os.ReadFile(inputConf) - require.NoError(t, err) - - outputConf := filepath.Join(wd, "test", "conf_scrubbed.yaml") - outputConfData, err := os.ReadFile(outputConf) - require.NoError(t, err) - - cleaned, err := ScrubBytes([]byte(inputConfData)) - require.NoError(t, err) - - // First test that the a scrubbed yaml is still a valid yaml - var out interface{} - err = yaml.Unmarshal(cleaned, &out) - assert.NoError(t, err, "Could not load YAML configuration after being scrubbed") - - // We replace windows line break by linux so the tests pass on every OS - trimmedOutput := strings.TrimSpace(strings.Replace(string(outputConfData), "\r\n", "\n", -1)) - trimmedCleaned := strings.TrimSpace(strings.Replace(string(cleaned), "\r\n", "\n", -1)) - - assert.Equal(t, trimmedOutput, trimmedCleaned) -} - -func TestConfigScrubbedYaml(t *testing.T) { - wd, _ := os.Getwd() - - inputConf := filepath.Join(wd, "test", "conf_multiline.yaml") - inputConfData, err := os.ReadFile(inputConf) - require.NoError(t, err) - - outputConf := filepath.Join(wd, "test", "conf_multiline_scrubbed.yaml") - outputConfData, err := os.ReadFile(outputConf) - require.NoError(t, err) - - cleaned, err := ScrubYaml([]byte(inputConfData)) - require.NoError(t, err) - - // First test that the a scrubbed yaml is still a valid yaml - var out interface{} - err = yaml.Unmarshal(cleaned, &out) - assert.NoError(t, err, "Could not load YAML configuration after being scrubbed") - - // We replace windows line break by linux so the tests pass on every OS - trimmedOutput := strings.TrimSpace(strings.Replace(string(outputConfData), "\r\n", "\n", -1)) - trimmedCleaned := strings.TrimSpace(strings.Replace(string(cleaned), "\r\n", "\n", -1)) - - assert.Equal(t, trimmedOutput, trimmedCleaned) -} - -func TestConfigScrubbedJson(t *testing.T) { - wd, _ := os.Getwd() - - inputConf := filepath.Join(wd, "test", "config.json") - inputConfData, err := os.ReadFile(inputConf) - require.NoError(t, err) - cleaned, err := ScrubJSON([]byte(inputConfData)) - require.NoError(t, err) - // First test that the a scrubbed json is still valid - var actualOutJSON map[string]interface{} - err = json.Unmarshal(cleaned, &actualOutJSON) - assert.NoError(t, err, "Could not load JSON configuration after being scrubbed") - - outputConf := filepath.Join(wd, "test", "config_scrubbed.json") - outputConfData, err := os.ReadFile(outputConf) - require.NoError(t, err) - var expectedOutJSON map[string]interface{} - err = json.Unmarshal(outputConfData, &expectedOutJSON) - require.NoError(t, err) - assert.Equal(t, reflect.DeepEqual(expectedOutJSON, actualOutJSON), true) -} - -func TestEmptyYaml(t *testing.T) { - cleaned, err := ScrubYaml(nil) - require.NoError(t, err) - assert.Equal(t, "", string(cleaned)) - - cleaned, err = ScrubYaml([]byte("")) - require.NoError(t, err) - assert.Equal(t, "", string(cleaned)) -} - -func TestEmptyYamlString(t *testing.T) { - cleaned, err := ScrubYamlString("") - require.NoError(t, err) - assert.Equal(t, "", string(cleaned)) -} - func TestConfigStripApiKey(t *testing.T) { assertClean(t, `api_key: aaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb`, @@ -569,39 +476,6 @@ func TestAddStrippedKeys(t *testing.T) { assertClean(t, contents, `foobar: "********"`) } -func TestAddStrippedKeysExceptions(t *testing.T) { - t.Run("single key", func(t *testing.T) { - contents := `api_key: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'` - - AddStrippedKeys([]string{"api_key"}) - - scrubbed, err := ScrubYamlString(contents) - require.Nil(t, err) - require.YAMLEq(t, `api_key: '***************************aaaaa'`, scrubbed) - }) - - t.Run("multiple keys", func(t *testing.T) { - contents := `api_key: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' -some_other_key: 'bbbb' -app_key: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccc' -yet_another_key: 'dddd'` - - keys := []string{"api_key", "some_other_key", "app_key"} - AddStrippedKeys(keys) - - // check that AddStrippedKeys didn't modify the parameter slice - assert.Equal(t, []string{"api_key", "some_other_key", "app_key"}, keys) - - scrubbed, err := ScrubYamlString(contents) - require.Nil(t, err) - expected := `api_key: '***************************aaaaa' -some_other_key: '********' -app_key: '***********************************acccc' -yet_another_key: 'dddd'` - require.YAMLEq(t, expected, scrubbed) - }) -} - func TestAddStrippedKeysNewReplacer(t *testing.T) { contents := `foobar: baz` AddStrippedKeys([]string{"foobar"}) @@ -686,33 +560,6 @@ network_devices: log_level: info`) } -func TestConfigFile(t *testing.T) { - cleanedConfigFile := `dd_url: https://app.datadoghq.com - -api_key: "***************************aaaaa" - -proxy: http://user:********@host:port - - - - - - -dogstatsd_port : 8125 - - -log_level: info -` - - wd, _ := os.Getwd() - filePath := filepath.Join(wd, "test", "datadog.yaml") - cleaned, err := ScrubFile(filePath) - assert.NoError(t, err) - cleanedString := string(cleaned) - - assert.Equal(t, cleanedConfigFile, cleanedString) -} - func TestBearerToken(t *testing.T) { assertClean(t, `Bearer 2fe663014abcd1850076f6d68c0355666db98758262870811cace007cd4a62ba`, @@ -785,3 +632,30 @@ func TestScrubCommandsEnv(t *testing.T) { }) } } + +func TestConfigFile(t *testing.T) { + cleanedConfigFile := `dd_url: https://app.datadoghq.com + +api_key: "***************************aaaaa" + +proxy: http://user:********@host:port + + + + + + +dogstatsd_port : 8125 + + +log_level: info +` + + wd, _ := os.Getwd() + filePath := filepath.Join(wd, "test", "datadog.yaml") + cleaned, err := ScrubFile(filePath) + assert.NoError(t, err) + cleanedString := string(cleaned) + + assert.Equal(t, cleanedConfigFile, cleanedString) +} diff --git a/pkg/util/scrubber/go.mod b/pkg/util/scrubber/go.mod index 6f10e986954d3..ff0eb09afc0ef 100644 --- a/pkg/util/scrubber/go.mod +++ b/pkg/util/scrubber/go.mod @@ -5,14 +5,13 @@ go 1.22.0 require ( github.com/DataDog/datadog-agent/pkg/version v0.59.1 github.com/stretchr/testify v1.10.0 - gopkg.in/yaml.v2 v2.4.0 + gopkg.in/yaml.v3 v3.0.1 ) require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/kr/text v0.2.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect ) replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/util/scrubber/go.sum b/pkg/util/scrubber/go.sum index def44d1759f5c..878d5c29e2e5d 100644 --- a/pkg/util/scrubber/go.sum +++ b/pkg/util/scrubber/go.sum @@ -14,7 +14,5 @@ github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/util/scrubber/json_scrubber_test.go b/pkg/util/scrubber/json_scrubber_test.go index 007da8d3f34cb..b45d0a8d08f78 100644 --- a/pkg/util/scrubber/json_scrubber_test.go +++ b/pkg/util/scrubber/json_scrubber_test.go @@ -6,9 +6,14 @@ package scrubber import ( + "encoding/json" + "os" + "path/filepath" + "reflect" "regexp" "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -68,3 +73,25 @@ func TestScrubJSON(t *testing.T) { require.Equal(t, expected, string(actual)) }) } + +func TestConfigScrubbedJson(t *testing.T) { + wd, _ := os.Getwd() + + inputConf := filepath.Join(wd, "test", "config.json") + inputConfData, err := os.ReadFile(inputConf) + require.NoError(t, err) + cleaned, err := ScrubJSON([]byte(inputConfData)) + require.NoError(t, err) + // First test that the a scrubbed json is still valid + var actualOutJSON map[string]interface{} + err = json.Unmarshal(cleaned, &actualOutJSON) + assert.NoError(t, err, "Could not load JSON configuration after being scrubbed") + + outputConf := filepath.Join(wd, "test", "config_scrubbed.json") + outputConfData, err := os.ReadFile(outputConf) + require.NoError(t, err) + var expectedOutJSON map[string]interface{} + err = json.Unmarshal(outputConfData, &expectedOutJSON) + require.NoError(t, err) + assert.Equal(t, reflect.DeepEqual(expectedOutJSON, actualOutJSON), true) +} diff --git a/pkg/util/scrubber/test/conf.yaml b/pkg/util/scrubber/test/conf.yaml index cf7fc3d34d3f5..d2bb11a2a9fe3 100644 --- a/pkg/util/scrubber/test/conf.yaml +++ b/pkg/util/scrubber/test/conf.yaml @@ -14,7 +14,7 @@ list_api_key: [aaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb, aaaaaaaaaaaaaaaaaaaaaaaaaaaabbb list_app_key: [aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb] dict_api_key: {one: aaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb, two: aaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb} -dict_app_key: {two: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb, two: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb} +dict_app_key: {one: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb, two: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbb} additional_endpoints: "https://app.datadoghq.com": @@ -29,15 +29,15 @@ random_url_key1: http://user:p@ssw0r)@host:port random_url_key2: protocol://user:p@ssw0r)@host:port random_url_key3: "http://user:password@host:port" random_domain_key: 'user:password@host:port' -random_url_key1: | +random_url_key4: | http://user:password@host:port -random_url_key2: > +random_url_key5: > http://user:password@host:port -random_url_key3: 'http://user:password@host:port' -random_url_key4: 'mongodb+s.r-v://user:password@host:port' -random_url_key5: 'mongodb+srv://user:pass-with-hyphen@abc.example.com/database' -random_url_key6: 'http://user-with-hyphen:pass-with-hyphen@abc.example.com/database' -random_url_key7: 'http://user-with-hyphen:pass@abc.example.com/database' +random_url_key6: 'http://user:password@host:port' +random_url_key7: 'mongodb+s.r-v://user:password@host:port' +random_url_key8: 'mongodb+srv://user:pass-with-hyphen@abc.example.com/database' +random_url_key9: 'http://user-with-hyphen:pass-with-hyphen@abc.example.com/database' +random_url_key10: 'http://user-with-hyphen:pass@abc.example.com/database' mysql_password1: password mysql_password3: "password" diff --git a/pkg/util/scrubber/test/conf_scrubbed.yaml b/pkg/util/scrubber/test/conf_scrubbed.yaml index c4c987bba5df4..5bb34c750ac3c 100644 --- a/pkg/util/scrubber/test/conf_scrubbed.yaml +++ b/pkg/util/scrubber/test/conf_scrubbed.yaml @@ -14,7 +14,7 @@ list_api_key: ["***************************abbbb", "***************************a list_app_key: ["***********************************abbbb", "***********************************abbbb"] dict_api_key: {one: "***************************abbbb", two: "***************************abbbb"} -dict_app_key: {two: "***********************************abbbb", two: "***********************************abbbb"} +dict_app_key: {one: "***********************************abbbb", two: "***********************************abbbb"} additional_endpoints: "https://app.datadoghq.com": @@ -29,15 +29,15 @@ random_url_key1: http://user:********@host:port random_url_key2: protocol://user:********@host:port random_url_key3: "http://user:********@host:port" random_domain_key: 'user:********@host:port' -random_url_key1: | +random_url_key4: | http://user:********@host:port -random_url_key2: > +random_url_key5: > http://user:********@host:port -random_url_key3: 'http://user:********@host:port' -random_url_key4: 'mongodb+s.r-v://user:********@host:port' -random_url_key5: 'mongodb+srv://user:********@abc.example.com/database' -random_url_key6: 'http://user-with-hyphen:********@abc.example.com/database' -random_url_key7: 'http://user-with-hyphen:********@abc.example.com/database' +random_url_key6: 'http://user:********@host:port' +random_url_key7: 'mongodb+s.r-v://user:********@host:port' +random_url_key8: 'mongodb+srv://user:********@abc.example.com/database' +random_url_key9: 'http://user-with-hyphen:********@abc.example.com/database' +random_url_key10: 'http://user-with-hyphen:********@abc.example.com/database' mysql_password1: "********" mysql_password3: "********" diff --git a/pkg/util/scrubber/yaml_scrubber.go b/pkg/util/scrubber/yaml_scrubber.go index f01d93e064ec5..90f144c6617eb 100644 --- a/pkg/util/scrubber/yaml_scrubber.go +++ b/pkg/util/scrubber/yaml_scrubber.go @@ -6,10 +6,11 @@ package scrubber import ( + "bytes" "fmt" "os" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" ) type scrubCallback = func(string, interface{}) (bool, interface{}) @@ -110,13 +111,16 @@ func (c *Scrubber) ScrubYaml(input []byte) ([]byte, error) { // if we can't load the yaml run the default scrubber on the input if len(input) != 0 && err == nil { c.ScrubDataObj(data) - newInput, err := yaml.Marshal(data) - if err == nil { - input = newInput - } else { - // Since the scrubber is a dependency of the logger we can use it here. + + var buffer bytes.Buffer + encoder := yaml.NewEncoder(&buffer) + encoder.SetIndent(2) + if err := encoder.Encode(&data); err != nil { fmt.Fprintf(os.Stderr, "error scrubbing YAML, falling back on text scrubber: %s\n", err) + } else { + input = buffer.Bytes() } + encoder.Close() } return c.ScrubBytes(input) } diff --git a/pkg/util/scrubber/yaml_scrubber_test.go b/pkg/util/scrubber/yaml_scrubber_test.go index 68f45dbcb9aaa..d576472186bd2 100644 --- a/pkg/util/scrubber/yaml_scrubber_test.go +++ b/pkg/util/scrubber/yaml_scrubber_test.go @@ -6,9 +6,15 @@ package scrubber import ( + "os" + "path/filepath" + "strings" "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "gopkg.in/yaml.v3" ) func TestScrubDataObj(t *testing.T) { @@ -62,3 +68,104 @@ func TestScrubDataObj(t *testing.T) { }) } } + +func TestConfigScrubbedValidYaml(t *testing.T) { + wd, _ := os.Getwd() + + inputConf := filepath.Join(wd, "test", "conf.yaml") + inputConfData, err := os.ReadFile(inputConf) + require.NoError(t, err) + + outputConf := filepath.Join(wd, "test", "conf_scrubbed.yaml") + outputConfData, err := os.ReadFile(outputConf) + require.NoError(t, err) + + cleaned, err := ScrubBytes([]byte(inputConfData)) + require.NoError(t, err) + + // First test that the a scrubbed yaml is still a valid yaml + var out interface{} + err = yaml.Unmarshal(cleaned, &out) + assert.NoError(t, err, "Could not load YAML configuration after being scrubbed") + + // We replace windows line break by linux so the tests pass on every OS + trimmedOutput := strings.TrimSpace(strings.Replace(string(outputConfData), "\r\n", "\n", -1)) + trimmedCleaned := strings.TrimSpace(strings.Replace(string(cleaned), "\r\n", "\n", -1)) + + assert.Equal(t, trimmedOutput, trimmedCleaned) +} + +func TestConfigScrubbedYaml(t *testing.T) { + wd, _ := os.Getwd() + + inputConf := filepath.Join(wd, "test", "conf_multiline.yaml") + inputConfData, err := os.ReadFile(inputConf) + require.NoError(t, err) + + outputConf := filepath.Join(wd, "test", "conf_multiline_scrubbed.yaml") + outputConfData, err := os.ReadFile(outputConf) + require.NoError(t, err) + + cleaned, err := ScrubYaml([]byte(inputConfData)) + require.NoError(t, err) + + // First test that the a scrubbed yaml is still a valid yaml + var out interface{} + err = yaml.Unmarshal(cleaned, &out) + assert.NoError(t, err, "Could not load YAML configuration after being scrubbed") + + // We replace windows line break by linux so the tests pass on every OS + trimmedOutput := strings.TrimSpace(strings.Replace(string(outputConfData), "\r\n", "\n", -1)) + trimmedCleaned := strings.TrimSpace(strings.Replace(string(cleaned), "\r\n", "\n", -1)) + + assert.Equal(t, trimmedOutput, trimmedCleaned) +} + +func TestEmptyYaml(t *testing.T) { + cleaned, err := ScrubYaml(nil) + require.NoError(t, err) + assert.Equal(t, "", string(cleaned)) + + cleaned, err = ScrubYaml([]byte("")) + require.NoError(t, err) + assert.Equal(t, "", string(cleaned)) +} + +func TestEmptyYamlString(t *testing.T) { + cleaned, err := ScrubYamlString("") + require.NoError(t, err) + assert.Equal(t, "", string(cleaned)) +} + +func TestAddStrippedKeysExceptions(t *testing.T) { + t.Run("single key", func(t *testing.T) { + contents := `api_key: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'` + + AddStrippedKeys([]string{"api_key"}) + + scrubbed, err := ScrubYamlString(contents) + require.Nil(t, err) + require.YAMLEq(t, `api_key: '***************************aaaaa'`, scrubbed) + }) + + t.Run("multiple keys", func(t *testing.T) { + contents := `api_key: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' +some_other_key: 'bbbb' +app_key: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccc' +yet_another_key: 'dddd'` + + keys := []string{"api_key", "some_other_key", "app_key"} + AddStrippedKeys(keys) + + // check that AddStrippedKeys didn't modify the parameter slice + assert.Equal(t, []string{"api_key", "some_other_key", "app_key"}, keys) + + scrubbed, err := ScrubYamlString(contents) + require.Nil(t, err) + expected := `api_key: '***************************aaaaa' +some_other_key: '********' +app_key: '***********************************acccc' +yet_another_key: 'dddd'` + require.YAMLEq(t, expected, scrubbed) + }) +} diff --git a/pkg/util/system/go.mod b/pkg/util/system/go.mod index 78e3380d124ed..69183e1155599 100644 --- a/pkg/util/system/go.mod +++ b/pkg/util/system/go.mod @@ -37,7 +37,6 @@ require ( github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/util/system/go.sum b/pkg/util/system/go.sum index 47e0acb25ee1f..5eac83e6a0bd2 100644 --- a/pkg/util/system/go.sum +++ b/pkg/util/system/go.sum @@ -45,7 +45,5 @@ golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/util/uuid/go.mod b/pkg/util/uuid/go.mod index ad2e7ef2c7f0a..0f8d47fc3bb8c 100644 --- a/pkg/util/uuid/go.mod +++ b/pkg/util/uuid/go.mod @@ -28,7 +28,7 @@ require ( github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/atomic v1.11.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) replace github.com/DataDog/datadog-agent/pkg/version => ../../version diff --git a/pkg/util/uuid/go.sum b/pkg/util/uuid/go.sum index 2e5f8b7759901..7399205747094 100644 --- a/pkg/util/uuid/go.sum +++ b/pkg/util/uuid/go.sum @@ -44,7 +44,5 @@ golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pkg/util/winutil/go.mod b/pkg/util/winutil/go.mod index 1facedf93843c..172db988efae7 100644 --- a/pkg/util/winutil/go.mod +++ b/pkg/util/winutil/go.mod @@ -21,7 +21,6 @@ require ( github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/util/winutil/go.sum b/pkg/util/winutil/go.sum index 99e864f633ef6..788135f619bbb 100644 --- a/pkg/util/winutil/go.sum +++ b/pkg/util/winutil/go.sum @@ -21,7 +21,5 @@ golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From a53dc62289591cb1d1abe3cb028699f8bc4f5896 Mon Sep 17 00:00:00 2001 From: Sylvain Baubeau Date: Wed, 18 Dec 2024 10:10:38 +0100 Subject: [PATCH 289/303] [CWS] Add test on container scope variables (#32319) --- pkg/security/tests/container_test.go | 70 ++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/pkg/security/tests/container_test.go b/pkg/security/tests/container_test.go index 7a659481da74b..15d896f1718ef 100644 --- a/pkg/security/tests/container_test.go +++ b/pkg/security/tests/container_test.go @@ -182,3 +182,73 @@ func TestContainerFlagsPodman(t *testing.T) { }) }) } + +func TestContainerVariables(t *testing.T) { + SkipIfNotAvailable(t) + + ruleDefs := []*rules.RuleDefinition{ + { + ID: "test_container_set_variable", + Expression: `container.id != "" && open.file.path == "{{.Root}}/test-open"`, + Actions: []*rules.ActionDefinition{ + { + Set: &rules.SetDefinition{ + Scope: "container", + Value: 1, + Name: "foo", + }, + }, + }, + }, + { + ID: "test_container_check_variable", + Expression: `container.id != "" && open.file.path == "{{.Root}}/test-open2" && ${container.foo} == 1`, + }, + } + test, err := newTestModule(t, nil, ruleDefs) + if err != nil { + t.Fatal(err) + } + defer test.Close() + + testFile, _, err := test.Path("test-open") + if err != nil { + t.Fatal(err) + } + + testFile2, _, err := test.Path("test-open2") + if err != nil { + t.Fatal(err) + } + + dockerWrapper, err := newDockerCmdWrapper(test.Root(), test.Root(), "ubuntu", "") + if err != nil { + t.Skip("Skipping created time in containers tests: Docker not available") + return + } + defer dockerWrapper.stop() + + dockerWrapper.Run(t, "container-variables", func(t *testing.T, _ wrapperType, cmdFunc func(cmd string, args []string, envs []string) *exec.Cmd) { + test.WaitSignal(t, func() error { + cmd := cmdFunc("touch", []string{testFile}, nil) + return cmd.Run() + }, func(event *model.Event, rule *rules.Rule) { + assertTriggeredRule(t, rule, "test_container_set_variable") + assertFieldEqual(t, event, "open.file.path", testFile) + assertFieldNotEmpty(t, event, "container.id", "container id shouldn't be empty") + + test.validateOpenSchema(t, event) + }) + + test.WaitSignal(t, func() error { + cmd := cmdFunc("touch", []string{testFile2}, nil) + return cmd.Run() + }, func(event *model.Event, rule *rules.Rule) { + assertTriggeredRule(t, rule, "test_container_check_variable") + assertFieldEqual(t, event, "open.file.path", testFile2) + assertFieldNotEmpty(t, event, "container.id", "container id shouldn't be empty") + + test.validateOpenSchema(t, event) + }) + }) +} From 6d0ce2d61353b6fca280b60e157c06642515fc9c Mon Sep 17 00:00:00 2001 From: Alex Lopez Date: Wed, 18 Dec 2024 10:13:12 +0100 Subject: [PATCH 290/303] Revert "[ASCII-2587] Migrating TraceAgent to use IPC cert" (#32320) --- cmd/agent/subcommands/flare/command.go | 22 +++++++-------------- cmd/agent/subcommands/flare/command_test.go | 18 ++++------------- cmd/agent/subcommands/secret/command.go | 2 +- comp/trace/agent/impl/agent.go | 4 ---- comp/trace/agent/impl/run.go | 3 --- comp/trace/bundle_test.go | 4 ---- comp/trace/status/statusimpl/status.go | 2 +- pkg/config/fetcher/from_processes.go | 2 +- pkg/flare/archive.go | 2 +- pkg/trace/api/api_test.go | 18 +++-------------- pkg/trace/api/debug_server.go | 18 +++++------------ pkg/trace/info/info.go | 6 ++---- pkg/trace/info/info_test.go | 8 ++++---- 13 files changed, 29 insertions(+), 80 deletions(-) diff --git a/cmd/agent/subcommands/flare/command.go b/cmd/agent/subcommands/flare/command.go index a6da5391ae5d5..1b4fb2d3bc1e3 100644 --- a/cmd/agent/subcommands/flare/command.go +++ b/cmd/agent/subcommands/flare/command.go @@ -175,18 +175,10 @@ func readProfileData(seconds int) (flare.ProfileData, error) { type pprofGetter func(path string) ([]byte, error) - tcpGet := func(portConfig string, onHTTPS bool) pprofGetter { - endpoint := url.URL{ - Scheme: "http", - Host: net.JoinHostPort("127.0.0.1", strconv.Itoa(pkgconfigsetup.Datadog().GetInt(portConfig))), - Path: "/debug/pprof", - } - if onHTTPS { - endpoint.Scheme = "https" - } - + tcpGet := func(portConfig string) pprofGetter { + pprofURL := fmt.Sprintf("http://127.0.0.1:%d/debug/pprof", pkgconfigsetup.Datadog().GetInt(portConfig)) return func(path string) ([]byte, error) { - return util.DoGet(c, endpoint.String()+path, util.LeaveConnectionOpen) + return util.DoGet(c, pprofURL+path, util.LeaveConnectionOpen) } } @@ -236,15 +228,15 @@ func readProfileData(seconds int) (flare.ProfileData, error) { } agentCollectors := map[string]agentProfileCollector{ - "core": serviceProfileCollector(tcpGet("expvar_port", false), seconds), - "security-agent": serviceProfileCollector(tcpGet("security_agent.expvar_port", false), seconds), + "core": serviceProfileCollector(tcpGet("expvar_port"), seconds), + "security-agent": serviceProfileCollector(tcpGet("security_agent.expvar_port"), seconds), } if pkgconfigsetup.Datadog().GetBool("process_config.enabled") || pkgconfigsetup.Datadog().GetBool("process_config.container_collection.enabled") || pkgconfigsetup.Datadog().GetBool("process_config.process_collection.enabled") { - agentCollectors["process"] = serviceProfileCollector(tcpGet("process_config.expvar_port", false), seconds) + agentCollectors["process"] = serviceProfileCollector(tcpGet("process_config.expvar_port"), seconds) } if pkgconfigsetup.Datadog().GetBool("apm_config.enabled") { @@ -257,7 +249,7 @@ func readProfileData(seconds int) (flare.ProfileData, error) { traceCpusec = 4 } - agentCollectors["trace"] = serviceProfileCollector(tcpGet("apm_config.debug.port", true), traceCpusec) + agentCollectors["trace"] = serviceProfileCollector(tcpGet("apm_config.debug.port"), traceCpusec) } if pkgconfigsetup.SystemProbe().GetBool("system_probe_config.enabled") { diff --git a/cmd/agent/subcommands/flare/command_test.go b/cmd/agent/subcommands/flare/command_test.go index 4c96cae079aa9..a27304e95b133 100644 --- a/cmd/agent/subcommands/flare/command_test.go +++ b/cmd/agent/subcommands/flare/command_test.go @@ -29,7 +29,6 @@ type commandTestSuite struct { suite.Suite sysprobeSocketPath string tcpServer *httptest.Server - tcpTLSServer *httptest.Server unixServer *httptest.Server systemProbeServer *httptest.Server } @@ -43,17 +42,13 @@ func (c *commandTestSuite) SetupSuite() { // This should be called by each test that requires them. func (c *commandTestSuite) startTestServers() { t := c.T() - c.tcpServer, c.tcpTLSServer, c.unixServer, c.systemProbeServer = c.getPprofTestServer() + c.tcpServer, c.unixServer, c.systemProbeServer = c.getPprofTestServer() t.Cleanup(func() { if c.tcpServer != nil { c.tcpServer.Close() c.tcpServer = nil } - if c.tcpTLSServer != nil { - c.tcpTLSServer.Close() - c.tcpTLSServer = nil - } if c.unixServer != nil { c.unixServer.Close() c.unixServer = nil @@ -87,13 +82,12 @@ func newMockHandler() http.HandlerFunc { }) } -func (c *commandTestSuite) getPprofTestServer() (tcpServer *httptest.Server, tcpTLSServer *httptest.Server, unixServer *httptest.Server, sysProbeServer *httptest.Server) { +func (c *commandTestSuite) getPprofTestServer() (tcpServer *httptest.Server, unixServer *httptest.Server, sysProbeServer *httptest.Server) { var err error t := c.T() handler := newMockHandler() tcpServer = httptest.NewServer(handler) - tcpTLSServer = httptest.NewTLSServer(handler) if runtime.GOOS == "linux" { unixServer = httptest.NewUnstartedServer(handler) unixServer.Listener, err = net.Listen("unix", c.sysprobeSocketPath) @@ -107,7 +101,7 @@ func (c *commandTestSuite) getPprofTestServer() (tcpServer *httptest.Server, tcp sysProbeServer.Start() } - return tcpServer, tcpTLSServer, unixServer, sysProbeServer + return tcpServer, unixServer, sysProbeServer } func TestCommandTestSuite(t *testing.T) { @@ -122,14 +116,10 @@ func (c *commandTestSuite) TestReadProfileData() { require.NoError(t, err) port := u.Port() - u, err = url.Parse(c.tcpTLSServer.URL) - require.NoError(t, err) - httpsPort := u.Port() - mockConfig := configmock.New(t) mockConfig.SetWithoutSource("expvar_port", port) mockConfig.SetWithoutSource("apm_config.enabled", true) - mockConfig.SetWithoutSource("apm_config.debug.port", httpsPort) + mockConfig.SetWithoutSource("apm_config.debug.port", port) mockConfig.SetWithoutSource("apm_config.receiver_timeout", "10") mockConfig.SetWithoutSource("process_config.expvar_port", port) mockConfig.SetWithoutSource("security_agent.expvar_port", port) diff --git a/cmd/agent/subcommands/secret/command.go b/cmd/agent/subcommands/secret/command.go index d8b2a7048114f..e24f95ca6d693 100644 --- a/cmd/agent/subcommands/secret/command.go +++ b/cmd/agent/subcommands/secret/command.go @@ -101,7 +101,7 @@ func traceAgentSecretRefresh(conf config.Component) ([]byte, error) { c := apiutil.GetClient(false) c.Timeout = conf.GetDuration("server_timeout") * time.Second - url := fmt.Sprintf("https://127.0.0.1:%d/secret/refresh", port) + url := fmt.Sprintf("http://127.0.0.1:%d/secret/refresh", port) res, err := apiutil.DoGet(c, url, apiutil.CloseConnection) if err != nil { return nil, fmt.Errorf("could not contact trace-agent: %s", err) diff --git a/comp/trace/agent/impl/agent.go b/comp/trace/agent/impl/agent.go index de9237dedeea5..b3d783288ceb6 100644 --- a/comp/trace/agent/impl/agent.go +++ b/comp/trace/agent/impl/agent.go @@ -24,7 +24,6 @@ import ( "go.opentelemetry.io/collector/pdata/ptrace" "go.uber.org/fx" - "github.com/DataDog/datadog-agent/comp/api/authtoken" "github.com/DataDog/datadog-agent/comp/core/secrets" tagger "github.com/DataDog/datadog-agent/comp/core/tagger/def" "github.com/DataDog/datadog-agent/comp/dogstatsd/statsd" @@ -69,7 +68,6 @@ type dependencies struct { Statsd statsd.Component Tagger tagger.Component Compressor compression.Component - At authtoken.Component } var _ traceagent.Component = (*component)(nil) @@ -95,7 +93,6 @@ type component struct { params *Params tagger tagger.Component telemetryCollector telemetry.TelemetryCollector - at authtoken.Component wg *sync.WaitGroup } @@ -118,7 +115,6 @@ func NewAgent(deps dependencies) (traceagent.Component, error) { params: deps.Params, telemetryCollector: deps.TelemetryCollector, tagger: deps.Tagger, - at: deps.At, wg: &sync.WaitGroup{}, } statsdCl, err := setupMetrics(deps.Statsd, c.config, c.telemetryCollector) diff --git a/comp/trace/agent/impl/run.go b/comp/trace/agent/impl/run.go index f40b36e29ae7f..20ecbc6496a1b 100644 --- a/comp/trace/agent/impl/run.go +++ b/comp/trace/agent/impl/run.go @@ -98,9 +98,6 @@ func runAgentSidekicks(ag component) error { })) } - // Configure the Trace Agent Debug server to use the IPC certificate - ag.Agent.DebugServer.SetTLSConfig(ag.at.GetTLSServerConfig()) - log.Infof("Trace agent running on host %s", tracecfg.Hostname) if pcfg := profilingConfig(tracecfg); pcfg != nil { if err := profiling.Start(*pcfg); err != nil { diff --git a/comp/trace/bundle_test.go b/comp/trace/bundle_test.go index 692e7c255f473..e9874a4b40077 100644 --- a/comp/trace/bundle_test.go +++ b/comp/trace/bundle_test.go @@ -13,8 +13,6 @@ import ( "github.com/stretchr/testify/require" "go.uber.org/fx" - "github.com/DataDog/datadog-agent/comp/api/authtoken/createandfetchimpl" - "github.com/DataDog/datadog-agent/comp/api/authtoken/fetchonlyimpl" "github.com/DataDog/datadog-agent/comp/core" coreconfig "github.com/DataDog/datadog-agent/comp/core/config" log "github.com/DataDog/datadog-agent/comp/core/log/def" @@ -47,7 +45,6 @@ func TestBundleDependencies(t *testing.T) { zstdfx.Module(), taggerfx.Module(tagger.Params{}), fx.Supply(&traceagentimpl.Params{}), - createandfetchimpl.Module(), ) } @@ -78,7 +75,6 @@ func TestMockBundleDependencies(t *testing.T) { fx.Invoke(func(_ traceagent.Component) {}), MockBundle(), taggerfx.Module(tagger.Params{}), - fetchonlyimpl.MockModule(), )) require.NotNil(t, cfg.Object()) diff --git a/comp/trace/status/statusimpl/status.go b/comp/trace/status/statusimpl/status.go index 00a8730b87da8..e476ee0281d7a 100644 --- a/comp/trace/status/statusimpl/status.go +++ b/comp/trace/status/statusimpl/status.go @@ -95,7 +95,7 @@ func (s statusProvider) populateStatus() map[string]interface{} { port := s.Config.GetInt("apm_config.debug.port") c := client() - url := fmt.Sprintf("https://localhost:%d/debug/vars", port) + url := fmt.Sprintf("http://localhost:%d/debug/vars", port) resp, err := apiutil.DoGet(c, url, apiutil.CloseConnection) if err != nil { return map[string]interface{}{ diff --git a/pkg/config/fetcher/from_processes.go b/pkg/config/fetcher/from_processes.go index 95c24e283fb46..5b8088f41d970 100644 --- a/pkg/config/fetcher/from_processes.go +++ b/pkg/config/fetcher/from_processes.go @@ -71,7 +71,7 @@ func TraceAgentConfig(config config.Reader) (string, error) { c := util.GetClient(false) c.Timeout = config.GetDuration("server_timeout") * time.Second - ipcAddressWithPort := fmt.Sprintf("https://127.0.0.1:%d/config", port) + ipcAddressWithPort := fmt.Sprintf("http://127.0.0.1:%d/config", port) client := settingshttp.NewClient(c, ipcAddressWithPort, "trace-agent", settingshttp.NewHTTPClientOptions(util.CloseConnection)) return client.FullConfig() diff --git a/pkg/flare/archive.go b/pkg/flare/archive.go index b61c6d9dd6ed2..c3e5dffe00ca8 100644 --- a/pkg/flare/archive.go +++ b/pkg/flare/archive.go @@ -214,7 +214,7 @@ func getExpVar(fb flaretypes.FlareBuilder) error { apmDebugPort := pkgconfigsetup.Datadog().GetInt("apm_config.debug.port") f := filepath.Join("expvar", "trace-agent") - resp, err := http.Get(fmt.Sprintf("https://127.0.0.1:%d/debug/vars", apmDebugPort)) + resp, err := http.Get(fmt.Sprintf("http://127.0.0.1:%d/debug/vars", apmDebugPort)) if err != nil { return fb.AddFile(f, []byte(fmt.Sprintf("Error retrieving vars: %v", err))) } diff --git a/pkg/trace/api/api_test.go b/pkg/trace/api/api_test.go index 3f3b2c5b3a20b..9a468dc164487 100644 --- a/pkg/trace/api/api_test.go +++ b/pkg/trace/api/api_test.go @@ -1039,26 +1039,14 @@ func TestExpvar(t *testing.T) { } c := newTestReceiverConfig() - c.DebugServerPort = 6789 + c.DebugServerPort = 5012 info.InitInfo(c) - - // Starting a TLS httptest server to retrieve tlsCert - ts := httptest.NewTLSServer(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) {})) - tlsConfig := ts.TLS.Clone() - // Setting a client with the proper TLS configuration - client := ts.Client() - ts.Close() - - // Starting Debug Server s := NewDebugServer(c) - s.SetTLSConfig(tlsConfig) - - // Starting the Debug server s.Start() defer s.Stop() - resp, err := client.Get(fmt.Sprintf("https://127.0.0.1:%d/debug/vars", c.DebugServerPort)) - require.NoError(t, err) + resp, err := http.Get("http://127.0.0.1:5012/debug/vars") + assert.NoError(t, err) defer resp.Body.Close() t.Run("read-expvars", func(t *testing.T) { diff --git a/pkg/trace/api/debug_server.go b/pkg/trace/api/debug_server.go index 6fd2f39cc011a..828d5357330eb 100644 --- a/pkg/trace/api/debug_server.go +++ b/pkg/trace/api/debug_server.go @@ -9,7 +9,6 @@ package api import ( "context" - "crypto/tls" "expvar" "fmt" "net" @@ -30,10 +29,9 @@ const ( // DebugServer serves /debug/* endpoints type DebugServer struct { - conf *config.AgentConfig - server *http.Server - mux *http.ServeMux - tlsConfig *tls.Config + conf *config.AgentConfig + server *http.Server + mux *http.ServeMux } // NewDebugServer returns a debug server @@ -55,14 +53,13 @@ func (ds *DebugServer) Start() { WriteTimeout: defaultTimeout, Handler: ds.setupMux(), } - listener, err := net.Listen("tcp", net.JoinHostPort("127.0.0.1", strconv.Itoa(ds.conf.DebugServerPort))) + listener, err := net.Listen("tcp", fmt.Sprintf("127.0.0.1:%d", ds.conf.DebugServerPort)) if err != nil { log.Errorf("Error creating debug server listener: %s", err) return } - tlsListener := tls.NewListener(listener, ds.tlsConfig) go func() { - if err := ds.server.Serve(tlsListener); err != nil && err != http.ErrServerClosed { + if err := ds.server.Serve(listener); err != nil && err != http.ErrServerClosed { log.Errorf("Could not start debug server: %s. Debug server disabled.", err) } }() @@ -85,11 +82,6 @@ func (ds *DebugServer) AddRoute(route string, handler http.Handler) { ds.mux.Handle(route, handler) } -// SetTLSConfig adds the provided tls.Config to the internal http.Server -func (ds *DebugServer) SetTLSConfig(config *tls.Config) { - ds.tlsConfig = config -} - func (ds *DebugServer) setupMux() *http.ServeMux { ds.mux.HandleFunc("/debug/pprof/", pprof.Index) ds.mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline) diff --git a/pkg/trace/info/info.go b/pkg/trace/info/info.go index 4198100ee6a5b..df86c40587fdc 100644 --- a/pkg/trace/info/info.go +++ b/pkg/trace/info/info.go @@ -8,7 +8,6 @@ package info import ( "bytes" - "crypto/tls" "encoding/json" "expvar" // automatically publish `/debug/vars` on HTTP port "fmt" @@ -237,9 +236,8 @@ func getProgramBanner(version string) (string, string) { // If error is nil, means the program is running. // If not, it displays a pretty-printed message anyway (for support) func Info(w io.Writer, conf *config.AgentConfig) error { - url := fmt.Sprintf("https://127.0.0.1:%d/debug/vars", conf.DebugServerPort) - tr := &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true}} - client := http.Client{Timeout: 3 * time.Second, Transport: tr} + url := fmt.Sprintf("http://127.0.0.1:%d/debug/vars", conf.DebugServerPort) + client := http.Client{Timeout: 3 * time.Second} resp, err := client.Get(url) if err != nil { // OK, here, we can't even make an http call on the agent port, diff --git a/pkg/trace/info/info_test.go b/pkg/trace/info/info_test.go index 25b7cb42b13ff..01c369cac403e 100644 --- a/pkg/trace/info/info_test.go +++ b/pkg/trace/info/info_test.go @@ -63,7 +63,7 @@ func (h *testServerHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { func testServer(t *testing.T, testFile string) *httptest.Server { t.Helper() - server := httptest.NewTLSServer(&testServerHandler{t: t, testFile: testFile}) + server := httptest.NewServer(&testServerHandler{t: t, testFile: testFile}) t.Logf("test server (serving fake yet valid data) listening on %s", server.URL) return server } @@ -94,7 +94,7 @@ func (h *testServerWarningHandler) ServeHTTP(w http.ResponseWriter, r *http.Requ } func testServerWarning(t *testing.T) *httptest.Server { - server := httptest.NewTLSServer(&testServerWarningHandler{t: t}) + server := httptest.NewServer(&testServerWarningHandler{t: t}) t.Logf("test server (serving data containing worrying values) listening on %s", server.URL) return server } @@ -119,7 +119,7 @@ func (h *testServerErrorHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques } func testServerError(t *testing.T) *httptest.Server { - server := httptest.NewTLSServer(&testServerErrorHandler{t: t}) + server := httptest.NewServer(&testServerErrorHandler{t: t}) t.Logf("test server (serving bad data to trigger errors) listening on %s", server.URL) return server } @@ -331,7 +331,7 @@ func TestError(t *testing.T) { assert.Equal(len(lines[1]), len(lines[2])) assert.Equal("", lines[3]) assert.Regexp(regexp.MustCompile(`^ Error: .*$`), lines[4]) - assert.Equal(fmt.Sprintf(" URL: https://127.0.0.1:%d/debug/vars", port), lines[5]) + assert.Equal(fmt.Sprintf(" URL: http://127.0.0.1:%d/debug/vars", port), lines[5]) assert.Equal("", lines[6]) assert.Equal("", lines[7]) } From 6caf7d7f3a2286388a7bfbc08e72f7558932c2a0 Mon Sep 17 00:00:00 2001 From: Yoann Ghigoff Date: Wed, 18 Dec 2024 10:58:15 +0100 Subject: [PATCH 291/303] Commit data when writing `auth_token` file (#32244) --- pkg/api/security/security.go | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/pkg/api/security/security.go b/pkg/api/security/security.go index 40b1310c2f79c..93867572572d0 100644 --- a/pkg/api/security/security.go +++ b/pkg/api/security/security.go @@ -239,7 +239,7 @@ func validateAuthToken(authToken string) error { // writes auth token(s) to a file with the same permissions as datadog.yaml func saveAuthToken(token, tokenPath string) error { log.Infof("Saving a new authentication token in %s", tokenPath) - if err := os.WriteFile(tokenPath, []byte(token), 0o600); err != nil { + if err := writeFileAndSync(tokenPath, []byte(token), 0o600); err != nil { return err } @@ -256,3 +256,21 @@ func saveAuthToken(token, tokenPath string) error { log.Infof("Wrote auth token in %s", tokenPath) return nil } + +// call the file.Sync method to flush the file to disk and catch potential I/O errors +func writeFileAndSync(name string, data []byte, perm os.FileMode) error { + f, err := os.OpenFile(name, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm) + if err != nil { + return err + } + _, err = f.Write(data) + // only sync data if the write was successful + if err == nil { + err = f.Sync() + } + // but always close the file and report the first error that occurred + if err1 := f.Close(); err1 != nil && err == nil { + err = err1 + } + return err +} From 48763aacf6fe5a19d9d4c8c29be6cd9872b1fb65 Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Wed, 18 Dec 2024 11:04:32 +0100 Subject: [PATCH 292/303] Make go.mod files unowned by default (#32121) Co-authored-by: Pierre Gimalac --- .github/CODEOWNERS | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8c82bee16308e..ec5ac92f6a2e5 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -271,6 +271,7 @@ /go.mod # do not notify anyone /go.sum # do not notify anyone + /Makefile.trace @DataDog/agent-apm /omnibus/ @DataDog/agent-delivery @@ -647,3 +648,16 @@ /internal/third_party/client-go @DataDog/container-platform /internal/third_party/kubernetes @DataDog/container-integrations /internal/third_party/golang/ @DataDog/container-integrations + +# With the introduction of go.work, dependencies bump modify go.mod and go.sum in a lot of file. +# Which bring a lot of team in the review each time. To make it smoother we no longer consider go.mod and go.sum owned by teams. +# Each team can individually decide to update CODEOWNERS to be requested for a review on each modification of their go.mod/sum +/**/go.mod # do not notify anyone +/**/go.sum # do not notify anyone + +# Add here modules that need explicit review from the team owning them +/internal/tools/**/go.mod @DataDog/agent-devx-loops +/internal/tools/**/go.sum @DataDog/agent-devx-loops + +/pkg/util/scrubber/go.mod @DataDog/agent-shared-components +/pkg/util/scrubber/go.sum @DataDog/agent-shared-components From 459aa24aad5a8903db6b58266b7497a7ecf33509 Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Wed, 18 Dec 2024 11:33:38 +0100 Subject: [PATCH 293/303] Stop lint and test tasks on keyboard interrupt (#32201) --- tasks/go.py | 7 ++++++- tasks/gotest.py | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/tasks/go.py b/tasks/go.py index 13f451cce050f..5bb3fcad7d656 100644 --- a/tasks/go.py +++ b/tasks/go.py @@ -78,11 +78,16 @@ def lint_module(target): concurrency_arg = "" if concurrency is None else f"--concurrency {concurrency}" tags_arg = " ".join(sorted(set(tags))) timeout_arg_value = "25m0s" if not timeout else f"{timeout}m0s" - return ctx.run( + res = ctx.run( f'golangci-lint run {verbosity} --timeout {timeout_arg_value} {concurrency_arg} --build-tags "{tags_arg}" --path-prefix "{module_path}" {golangci_lint_kwargs} {target}/...', env=env, warn=True, ) + # early stop on SIGINT: exit code is 128 + signal number, SIGINT is 2, so 130 + # for some reason this becomes -2 here + if res is not None and (res.exited == -2 or res.exited == 130): + raise KeyboardInterrupt() + return res target_path = Path(module_path) / target result, time_result = TimedOperationResult.run( diff --git a/tasks/gotest.py b/tasks/gotest.py index 4aa9a4b3e151f..af889e8b6dcae 100644 --- a/tasks/gotest.py +++ b/tasks/gotest.py @@ -145,6 +145,9 @@ def command(test_results, module, module_result): out_stream=test_profiler, warn=True, ) + # early stop on SIGINT: exit code is 128 + signal number, SIGINT is 2, so 130 + if res is not None and res.exited == 130: + raise KeyboardInterrupt() module_result.result_json_path = os.path.join(module_path, GO_TEST_RESULT_TMP_JSON) From d598917c9843de41c0178306f41a91705f2ed6d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9na=C3=AFc=20Huard?= Date: Wed, 18 Dec 2024 12:09:48 +0100 Subject: [PATCH 294/303] Fix `pulumi.DependsOn` in `test-infra-definitions` (#31393) --- .gitlab/common/test_infra_version.yml | 2 +- test/new-e2e/go.mod | 2 +- test/new-e2e/go.sum | 4 +- test/new-e2e/tests/containers/k8s_test.go | 105 +--------------------- 4 files changed, 8 insertions(+), 105 deletions(-) diff --git a/.gitlab/common/test_infra_version.yml b/.gitlab/common/test_infra_version.yml index 71934be35d15a..9008ad3e857b1 100644 --- a/.gitlab/common/test_infra_version.yml +++ b/.gitlab/common/test_infra_version.yml @@ -4,4 +4,4 @@ variables: # and check the job creating the image to make sure you have the right SHA prefix TEST_INFRA_DEFINITIONS_BUILDIMAGES_SUFFIX: "" # Make sure to update test-infra-definitions version in go.mod as well - TEST_INFRA_DEFINITIONS_BUILDIMAGES: 4b4112f5f64d + TEST_INFRA_DEFINITIONS_BUILDIMAGES: 6459608ed9fa diff --git a/test/new-e2e/go.mod b/test/new-e2e/go.mod index 2bd2138c3ea69..92faae31be87d 100644 --- a/test/new-e2e/go.mod +++ b/test/new-e2e/go.mod @@ -58,7 +58,7 @@ require ( // `TEST_INFRA_DEFINITIONS_BUILDIMAGES` matches the commit sha in the module version // Example: github.com/DataDog/test-infra-definitions v0.0.0-YYYYMMDDHHmmSS-0123456789AB // => TEST_INFRA_DEFINITIONS_BUILDIMAGES: 0123456789AB - github.com/DataDog/test-infra-definitions v0.0.0-20241217110507-4b4112f5f64d + github.com/DataDog/test-infra-definitions v0.0.0-20241218082354-6459608ed9fa github.com/aws/aws-sdk-go-v2 v1.32.6 github.com/aws/aws-sdk-go-v2/config v1.28.6 github.com/aws/aws-sdk-go-v2/service/ec2 v1.190.0 diff --git a/test/new-e2e/go.sum b/test/new-e2e/go.sum index b08902fb2e378..e922c7c7a56b9 100644 --- a/test/new-e2e/go.sum +++ b/test/new-e2e/go.sum @@ -17,8 +17,8 @@ github.com/DataDog/datadog-go/v5 v5.6.0 h1:2oCLxjF/4htd55piM75baflj/KoE6VYS7alEU github.com/DataDog/datadog-go/v5 v5.6.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 h1:EbzDX8HPk5uE2FsJYxD74QmMw0/3CqSKhEr6teh0ncQ= github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49/go.mod h1:SvsjzyJlSg0rKsqYgdcFxeEVflx3ZNAyFfkUHP0TxXg= -github.com/DataDog/test-infra-definitions v0.0.0-20241217110507-4b4112f5f64d h1:F1yqGiWtXVsHkMiNUhs8bgaoZ1WlV3rYGRZ1CtCxpm8= -github.com/DataDog/test-infra-definitions v0.0.0-20241217110507-4b4112f5f64d/go.mod h1:1PAUwGjC25ACjfft4HrLEmHliuajlvjzcLFWpuqAIyk= +github.com/DataDog/test-infra-definitions v0.0.0-20241218082354-6459608ed9fa h1:l8KLWgU9l2qTlMtu4ing3V6PptTO+suaU8zusc45IiM= +github.com/DataDog/test-infra-definitions v0.0.0-20241218082354-6459608ed9fa/go.mod h1:1PAUwGjC25ACjfft4HrLEmHliuajlvjzcLFWpuqAIyk= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/DataDog/zstd_0 v0.0.0-20210310093942-586c1286621f h1:5Vuo4niPKFkfwW55jV4vY0ih3VQ9RaQqeqY67fvRn8A= diff --git a/test/new-e2e/tests/containers/k8s_test.go b/test/new-e2e/tests/containers/k8s_test.go index ea2e14c8d3742..9561b71fb7a26 100644 --- a/test/new-e2e/tests/containers/k8s_test.go +++ b/test/new-e2e/tests/containers/k8s_test.go @@ -827,7 +827,7 @@ func (suite *k8sSuite) TestDogstatsdInAgent() { // Test with UDP + DD_ENTITY_ID suite.testDogstatsd(kubeNamespaceDogstatsWorkload, kubeDeploymentDogstatsdUDP) // Test with UDP + External Data - suite.testDogstatsdExternalData(kubeNamespaceDogstatsWorkload, kubeDeploymentDogstatsdUDPExternalData) + suite.testDogstatsd(kubeNamespaceDogstatsWorkload, kubeDeploymentDogstatsdUDPExternalData) } func (suite *k8sSuite) TestDogstatsdStandalone() { @@ -873,78 +873,6 @@ func (suite *k8sSuite) testDogstatsd(kubeNamespace, kubeDeployment string) { }) } -// testDogstatsdExternalData tests that the External Data origin resolution works for the dogstatsd. -func (suite *k8sSuite) testDogstatsdExternalData(kubeNamespace, kubeDeployment string) { - ctx := context.Background() - - // Record old pod, so we can be sure we are not looking at the incorrect one after deletion - oldPods, err := suite.K8sClient.CoreV1().Pods(kubeNamespace).List(ctx, metav1.ListOptions{ - LabelSelector: fields.OneTermEqualSelector("app", kubeDeployment).String(), - }) - suite.Require().NoError(err) - suite.Require().Len(oldPods.Items, 1) - oldPod := oldPods.Items[0] - - // Delete the pod to ensure it is recreated after the admission controller is deployed - err = suite.K8sClient.CoreV1().Pods(kubeNamespace).DeleteCollection(ctx, metav1.DeleteOptions{}, metav1.ListOptions{ - LabelSelector: fields.OneTermEqualSelector("app", kubeDeployment).String(), - }) - suite.Require().NoError(err) - - // Wait for the fresh pod to be created - var pod corev1.Pod - suite.Require().EventuallyWithTf(func(c *assert.CollectT) { - pods, err := suite.K8sClient.CoreV1().Pods(kubeNamespace).List(ctx, metav1.ListOptions{ - LabelSelector: fields.OneTermEqualSelector("app", kubeDeployment).String(), - }) - if !assert.NoError(c, err) { - return - } - if !assert.Len(c, pods.Items, 1) { - return - } - pod = pods.Items[0] - if !assert.NotEqual(c, oldPod.Name, pod.Name) { - return - } - }, 2*time.Minute, 10*time.Second, "Failed to witness the creation of pod with name %s in namespace %s", kubeDeployment, kubeNamespace) - - suite.Require().Len(pod.Spec.Containers, 1) - - suite.testMetric(&testMetricArgs{ - Filter: testMetricFilterArgs{ - Name: "custom.metric", - Tags: []string{ - "^kube_deployment:" + regexp.QuoteMeta(kubeDeployment) + "$", - "^kube_namespace:" + regexp.QuoteMeta(kubeNamespace) + "$", - }, - }, - Expect: testMetricExpectArgs{ - Tags: &[]string{ - `^container_id:`, - `^container_name:dogstatsd$`, - `^display_container_name:dogstatsd`, - `^git.commit.sha:`, // org.opencontainers.image.revision docker image label - `^git.repository_url:https://github.com/DataDog/test-infra-definitions$`, // org.opencontainers.image.source docker image label - `^image_id:ghcr.io/datadog/apps-dogstatsd@sha256:`, - `^image_name:ghcr.io/datadog/apps-dogstatsd$`, - `^image_tag:main$`, - `^kube_container_name:dogstatsd$`, - `^kube_deployment:` + regexp.QuoteMeta(kubeDeployment) + `$`, - "^kube_namespace:" + regexp.QuoteMeta(kubeNamespace) + "$", - `^kube_ownerref_kind:replicaset$`, - `^kube_ownerref_name:` + regexp.QuoteMeta(kubeDeployment) + `-[[:alnum:]]+$`, - `^kube_qos:Burstable$`, - `^kube_replica_set:` + regexp.QuoteMeta(kubeDeployment) + `-[[:alnum:]]+$`, - `^pod_name:` + regexp.QuoteMeta(kubeDeployment) + `-[[:alnum:]]+-[[:alnum:]]+$`, - `^pod_phase:running$`, - `^series:`, - `^short_image:apps-dogstatsd$`, - }, - }, - }) -} - func (suite *k8sSuite) TestPrometheus() { // Test Prometheus check suite.testMetric(&testMetricArgs{ @@ -1020,37 +948,12 @@ func (suite *k8sSuite) testAdmissionControllerPod(namespace string, name string, }, 5*time.Minute, 10*time.Second, "The deployment with name %s in namespace %s does not exist or does not have the auto detected languages annotation", name, namespace) } - // Record old pod, so we can be sure we are not looking at the incorrect one after deletion - oldPods, err := suite.K8sClient.CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{ - LabelSelector: fields.OneTermEqualSelector("app", name).String(), - }) - suite.Require().NoError(err) - suite.Require().Len(oldPods.Items, 1) - oldPod := oldPods.Items[0] - - // Delete the pod to ensure it is recreated after the admission controller is deployed - err = suite.K8sClient.CoreV1().Pods(namespace).DeleteCollection(ctx, metav1.DeleteOptions{}, metav1.ListOptions{ + pods, err := suite.K8sClient.CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{ LabelSelector: fields.OneTermEqualSelector("app", name).String(), }) suite.Require().NoError(err) - - // Wait for the fresh pod to be created - var pod corev1.Pod - suite.Require().EventuallyWithTf(func(c *assert.CollectT) { - pods, err := suite.K8sClient.CoreV1().Pods(namespace).List(ctx, metav1.ListOptions{ - LabelSelector: fields.OneTermEqualSelector("app", name).String(), - }) - if !assert.NoError(c, err) { - return - } - if !assert.Len(c, pods.Items, 1) { - return - } - pod = pods.Items[0] - if !assert.NotEqual(c, oldPod.Name, pod.Name) { - return - } - }, 2*time.Minute, 10*time.Second, "Failed to witness the creation of pod with name %s in namespace %s", name, namespace) + suite.Require().Len(pods.Items, 1) + pod := pods.Items[0] suite.Require().Len(pod.Spec.Containers, 1) From 0bda4481f31fd183a6a2fe333b7375a26720ea91 Mon Sep 17 00:00:00 2001 From: louis-cqrl <93274433+louis-cqrl@users.noreply.github.com> Date: Wed, 18 Dec 2024 12:34:22 +0100 Subject: [PATCH 295/303] Add test to ensure LastUpdated is well populated for default scrubber rules (#32322) --- pkg/util/scrubber/default_test.go | 4 ++++ pkg/util/scrubber/scrubber_test.go | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/pkg/util/scrubber/default_test.go b/pkg/util/scrubber/default_test.go index 7c093d9e40300..0bb2d721c3983 100644 --- a/pkg/util/scrubber/default_test.go +++ b/pkg/util/scrubber/default_test.go @@ -474,6 +474,8 @@ func TestAddStrippedKeys(t *testing.T) { AddStrippedKeys([]string{"foobar"}) assertClean(t, contents, `foobar: "********"`) + + dynamicReplacers = []Replacer{} } func TestAddStrippedKeysNewReplacer(t *testing.T) { @@ -486,6 +488,8 @@ func TestAddStrippedKeysNewReplacer(t *testing.T) { cleaned, err := newScrubber.ScrubBytes([]byte(contents)) require.NoError(t, err) assert.Equal(t, strings.TrimSpace(`foobar: "********"`), strings.TrimSpace(string(cleaned))) + + dynamicReplacers = []Replacer{} } func TestCertConfig(t *testing.T) { diff --git a/pkg/util/scrubber/scrubber_test.go b/pkg/util/scrubber/scrubber_test.go index dc23ec52d1971..5a6245d81cddd 100644 --- a/pkg/util/scrubber/scrubber_test.go +++ b/pkg/util/scrubber/scrubber_test.go @@ -28,6 +28,16 @@ func TestNewWithDefaults(t *testing.T) { assert.Equal(t, len(scrubberEmpty.multiLineReplacers), len(scrubber.multiLineReplacers)) } +func TestLastUpdated(t *testing.T) { + scrubber := NewWithDefaults() + for _, replacer := range scrubber.singleLineReplacers { + assert.NotNil(t, replacer.LastUpdated, "single line replacer has no LastUpdated: %v", replacer) + } + for _, replacer := range scrubber.multiLineReplacers { + assert.NotNil(t, replacer.LastUpdated, "multi line replacer has no LastUpdated: %v", replacer) + } +} + func TestRepl(t *testing.T) { scrubber := New() scrubber.AddReplacer(SingleLine, Replacer{ From 06bdd8baed5d856fc32498533b451da20d993665 Mon Sep 17 00:00:00 2001 From: Adel Haj Hassan <41540817+adel121@users.noreply.github.com> Date: Wed, 18 Dec 2024 12:43:20 +0100 Subject: [PATCH 296/303] fix unit-test bug in leaderelection subscription unit test (#32324) --- .../apiserver/leaderelection/leaderelection_test.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/util/kubernetes/apiserver/leaderelection/leaderelection_test.go b/pkg/util/kubernetes/apiserver/leaderelection/leaderelection_test.go index af604ec84e37c..eefce053e2e22 100644 --- a/pkg/util/kubernetes/apiserver/leaderelection/leaderelection_test.go +++ b/pkg/util/kubernetes/apiserver/leaderelection/leaderelection_test.go @@ -211,7 +211,7 @@ func TestSubscribe(t *testing.T) { coreClient: client.CoreV1(), coordClient: client.CoordinationV1(), leaderMetric: &dummyGauge{}, - lockType: cmLock.ConfigMapsResourceLock, + lockType: tc.lockType, } notif1 := le.Subscribe() @@ -227,6 +227,9 @@ func TestSubscribe(t *testing.T) { le.EnsureLeaderElectionRuns() require.True(t, le.IsLeader()) + err = tc.getTokenFunc(client) + require.NoError(t, err) + counter1, counter2 := 0, 0 for { select { From 2470d047b2cb6a37d546c5886d2ad5577b08a4f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20Juli=C3=A1n?= Date: Wed, 18 Dec 2024 14:26:20 +0100 Subject: [PATCH 297/303] [EBPF] gpu: query k8s device -> container mapping (#32020) --- cmd/system-probe/modules/gpu.go | 1 + pkg/ebpf/uprobes/testutil.go | 21 +++- pkg/gpu/consumer.go | 2 +- pkg/gpu/consumer_test.go | 2 +- pkg/gpu/context.go | 79 +++++++++++++- pkg/gpu/context_test.go | 176 ++++++++++++++++++++++++++++++++ pkg/gpu/probe.go | 7 +- pkg/gpu/probe_stub.go | 2 + pkg/gpu/probe_test.go | 1 + pkg/gpu/stats_test.go | 2 +- pkg/gpu/stream_test.go | 30 +++--- pkg/gpu/testutil/mocks.go | 77 +++++++++++++- 12 files changed, 367 insertions(+), 33 deletions(-) create mode 100644 pkg/gpu/context_test.go diff --git a/cmd/system-probe/modules/gpu.go b/cmd/system-probe/modules/gpu.go index 7ec273e7c2869..c7dbac874dccd 100644 --- a/cmd/system-probe/modules/gpu.go +++ b/cmd/system-probe/modules/gpu.go @@ -55,6 +55,7 @@ var GPUMonitoring = module.Factory{ //(https://github.com/NVIDIA/go-nvml/blob/main/pkg/nvml/lib.go#L30) NvmlLib: nvml.New(nvml.WithLibraryPath(c.NVMLLibraryPath)), ProcessMonitor: processEventConsumer, + WorkloadMeta: deps.WMeta, } ret := probeDeps.NvmlLib.Init() diff --git a/pkg/ebpf/uprobes/testutil.go b/pkg/ebpf/uprobes/testutil.go index 93b109b499aa3..2d4e8b85d4b25 100644 --- a/pkg/ebpf/uprobes/testutil.go +++ b/pkg/ebpf/uprobes/testutil.go @@ -13,6 +13,7 @@ import ( "path/filepath" "runtime" "strconv" + "strings" "sync" "testing" "time" @@ -132,6 +133,21 @@ type FakeProcFSEntry struct { Command string Exe string Maps string + Env map[string]string +} + +// getEnvironContents returns the formatted contents of the /proc//environ file for the entry. +func (f *FakeProcFSEntry) getEnvironContents() string { + if len(f.Env) == 0 { + return "" + } + + formattedEnvVars := make([]string, 0, len(f.Env)) + for k, v := range f.Env { + formattedEnvVars = append(formattedEnvVars, fmt.Sprintf("%s=%s", k, v)) + } + + return strings.Join(formattedEnvVars, "\x00") + "\x00" } // CreateFakeProcFS creates a fake /proc filesystem with the given entries, useful for testing attachment to processes. @@ -145,16 +161,13 @@ func CreateFakeProcFS(t *testing.T, entries []FakeProcFSEntry) string { createFile(t, filepath.Join(baseDir, "comm"), entry.Command) createFile(t, filepath.Join(baseDir, "maps"), entry.Maps) createSymlink(t, entry.Exe, filepath.Join(baseDir, "exe")) + createFile(t, filepath.Join(baseDir, "environ"), entry.getEnvironContents()) } return procRoot } func createFile(t *testing.T, path, data string) { - if data == "" { - return - } - dir := filepath.Dir(path) require.NoError(t, os.MkdirAll(dir, 0775)) require.NoError(t, os.WriteFile(path, []byte(data), 0775)) diff --git a/pkg/gpu/consumer.go b/pkg/gpu/consumer.go index f4ebb7f04b0f2..55148350b12e3 100644 --- a/pkg/gpu/consumer.go +++ b/pkg/gpu/consumer.go @@ -220,7 +220,7 @@ func (c *cudaEventConsumer) getStreamKey(header *gpuebpf.CudaEventHeader) stream // Try to get the GPU device if we can, but do not fail if we can't as we want to report // the data even if we can't get the GPU UUID - gpuDevice, err := c.sysCtx.getCurrentActiveGpuDevice(int(pid), int(tid)) + gpuDevice, err := c.sysCtx.getCurrentActiveGpuDevice(int(pid), int(tid), containerID) if err != nil { log.Warnf("Error getting GPU device for process %d: %v", pid, err) } else { diff --git a/pkg/gpu/consumer_test.go b/pkg/gpu/consumer_test.go index 6530f2bb49738..c7c7aa04837d7 100644 --- a/pkg/gpu/consumer_test.go +++ b/pkg/gpu/consumer_test.go @@ -22,7 +22,7 @@ import ( func TestConsumerCanStartAndStop(t *testing.T) { handler := ddebpf.NewRingBufferHandler(consumerChannelSize) cfg := config.New() - ctx, err := getSystemContext(testutil.GetBasicNvmlMock(), kernel.ProcFSRoot()) + ctx, err := getSystemContext(testutil.GetBasicNvmlMock(), kernel.ProcFSRoot(), testutil.GetWorkloadMetaMock(t)) require.NoError(t, err) consumer := newCudaEventConsumer(ctx, handler, cfg) diff --git a/pkg/gpu/context.go b/pkg/gpu/context.go index 77bac5185339f..59d778bfea5c1 100644 --- a/pkg/gpu/context.go +++ b/pkg/gpu/context.go @@ -16,10 +16,15 @@ import ( "github.com/NVIDIA/go-nvml/pkg/nvml" + workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" + "github.com/DataDog/datadog-agent/pkg/errors" "github.com/DataDog/datadog-agent/pkg/gpu/cuda" "github.com/DataDog/datadog-agent/pkg/util/ktime" + "github.com/DataDog/datadog-agent/pkg/util/log" ) +const nvidiaResourceName = "nvidia.com/gpu" + // systemContext holds certain attributes about the system that are used by the GPU probe. type systemContext struct { // maxGpuThreadsPerDevice maps each device index to the maximum number of threads it can run in parallel @@ -60,6 +65,9 @@ type systemContext struct { // visibleDevicesCache is a cache of visible devices for each process, to avoid // looking into the environment variables every time visibleDevicesCache map[int][]nvml.Device + + // workloadmeta is the workloadmeta component that we use to get necessary container metadata + workloadmeta workloadmeta.Component } // symbolsEntry embeds cuda.Symbols adding a field for keeping track of the last @@ -73,7 +81,7 @@ func (e *symbolsEntry) updateLastUsedTime() { e.lastUsedTime = time.Now() } -func getSystemContext(nvmlLib nvml.Interface, procRoot string) (*systemContext, error) { +func getSystemContext(nvmlLib nvml.Interface, procRoot string, wmeta workloadmeta.Component) (*systemContext, error) { ctx := &systemContext{ maxGpuThreadsPerDevice: make(map[int]int), deviceSmVersions: make(map[int]int), @@ -83,6 +91,7 @@ func getSystemContext(nvmlLib nvml.Interface, procRoot string) (*systemContext, procRoot: procRoot, selectedDeviceByPIDAndTID: make(map[int]map[int]int32), visibleDevicesCache: make(map[int][]nvml.Device), + workloadmeta: wmeta, } if err := ctx.fillDeviceInfo(); err != nil { @@ -209,13 +218,75 @@ func (ctx *systemContext) cleanupOldEntries() { } } +// filterDevicesForContainer filters the available GPU devices for the given +// container. If the ID is not empty, we check the assignment of GPU resources +// to the container and return only the devices that are available to the +// container. +func (ctx *systemContext) filterDevicesForContainer(devices []nvml.Device, containerID string) ([]nvml.Device, error) { + if containerID == "" { + // If the process is not running in a container, we assume all devices are available. + return devices, nil + } + + container, err := ctx.workloadmeta.GetContainer(containerID) + if err != nil { + // If we don't find the container, we assume all devices are available. + // This can happen sometimes, e.g. if we don't have the container in the + // store yet. Do not block metrics on that. + if errors.IsNotFound(err) { + return devices, nil + } + + // Some error occurred while retrieving the container, this could be a + // general error with the store, report it. + return nil, fmt.Errorf("cannot retrieve data for container %s: %s", containerID, err) + } + + var filteredDevices []nvml.Device + for _, resource := range container.AllocatedResources { + // Only consider NVIDIA GPUs + if resource.Name != nvidiaResourceName { + continue + } + + for _, device := range devices { + uuid, ret := device.GetUUID() + if ret != nvml.SUCCESS { + log.Warnf("Error getting GPU UUID for device %s: %s", device, nvml.ErrorString(ret)) + continue + } + + if resource.ID == uuid { + filteredDevices = append(filteredDevices, device) + break + } + } + } + + // We didn't find any devices assigned to the container, report it as an error. + if len(filteredDevices) == 0 { + return nil, fmt.Errorf("no GPU devices found for container %s that matched its allocated resources %+v", containerID, container.AllocatedResources) + } + + return filteredDevices, nil +} + // getCurrentActiveGpuDevice returns the active GPU device for a given process and thread, based on the // last selection (via cudaSetDevice) this thread made and the visible devices for the process. -func (ctx *systemContext) getCurrentActiveGpuDevice(pid int, tid int) (nvml.Device, error) { +func (ctx *systemContext) getCurrentActiveGpuDevice(pid int, tid int, containerID string) (nvml.Device, error) { visibleDevices, ok := ctx.visibleDevicesCache[pid] if !ok { - var err error - visibleDevices, err = cuda.GetVisibleDevicesForProcess(ctx.gpuDevices, pid, ctx.procRoot) + // Order is important! We need to filter the devices for the container + // first. In a container setting, the environment variable acts as a + // filter on the devices that are available to the process, not on the + // devices available on the host system. + var err error // avoid shadowing visibleDevices, declare error before so we can use = instead of := + visibleDevices, err = ctx.filterDevicesForContainer(ctx.gpuDevices, containerID) + if err != nil { + return nil, fmt.Errorf("error filtering devices for container %s: %w", containerID, err) + } + + visibleDevices, err = cuda.GetVisibleDevicesForProcess(visibleDevices, pid, ctx.procRoot) if err != nil { return nil, fmt.Errorf("error getting visible devices for process %d: %w", pid, err) } diff --git a/pkg/gpu/context_test.go b/pkg/gpu/context_test.go new file mode 100644 index 0000000000000..dbb6e1735df24 --- /dev/null +++ b/pkg/gpu/context_test.go @@ -0,0 +1,176 @@ +// 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 2024-present Datadog, Inc. + +//go:build linux_bpf + +package gpu + +import ( + "strconv" + "strings" + "testing" + + "github.com/stretchr/testify/require" + + workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" + "github.com/DataDog/datadog-agent/pkg/ebpf/uprobes" + "github.com/DataDog/datadog-agent/pkg/gpu/testutil" + "github.com/DataDog/datadog-agent/pkg/util/kernel" +) + +func TestFilterDevicesForContainer(t *testing.T) { + wmetaMock := testutil.GetWorkloadMetaMock(t) + sysCtx, err := getSystemContext(testutil.GetBasicNvmlMock(), kernel.ProcFSRoot(), wmetaMock) + require.NotNil(t, sysCtx) + require.NoError(t, err) + + // Create a container with a single GPU and add it to the store + containerID := "abcdef" + deviceIndex := 2 + gpuUUID := testutil.GPUUUIDs[deviceIndex] + container := &workloadmeta.Container{ + EntityID: workloadmeta.EntityID{ + Kind: workloadmeta.KindContainer, + ID: containerID, + }, + EntityMeta: workloadmeta.EntityMeta{ + Name: containerID, + }, + AllocatedResources: []workloadmeta.ContainerAllocatedResource{ + { + Name: nvidiaResourceName, + ID: gpuUUID, + }, + }, + } + + wmetaMock.Set(container) + storeContainer, err := wmetaMock.GetContainer(containerID) + require.NoError(t, err, "container should be found in the store") + require.NotNil(t, storeContainer, "container should be found in the store") + + t.Run("NoContainer", func(t *testing.T) { + filtered, err := sysCtx.filterDevicesForContainer(sysCtx.gpuDevices, "") + require.NoError(t, err) + testutil.RequireDeviceListsEqual(t, filtered, sysCtx.gpuDevices) // With no container, all devices should be returned + }) + + t.Run("NonExistentContainer", func(t *testing.T) { + filtered, err := sysCtx.filterDevicesForContainer(sysCtx.gpuDevices, "non-existent-at-all") + require.NoError(t, err) + testutil.RequireDeviceListsEqual(t, filtered, sysCtx.gpuDevices) // If we can't find the container, all devices should be returned + }) + + t.Run("ContainerWithGPU", func(t *testing.T) { + filtered, err := sysCtx.filterDevicesForContainer(sysCtx.gpuDevices, containerID) + require.NoError(t, err) + require.Len(t, filtered, 1) + testutil.RequireDeviceListsEqual(t, filtered, sysCtx.gpuDevices[deviceIndex:deviceIndex+1]) + }) +} + +func TestGetCurrentActiveGpuDevice(t *testing.T) { + pidNoContainer := 1234 + pidNoContainerButEnv := 2235 + pidContainer := 3238 + pidContainerAndEnv := 3239 + + envVisibleDevices := []int32{1, 2, 3} + envVisibleDevicesStr := make([]string, len(envVisibleDevices)) + for i, idx := range envVisibleDevices { + envVisibleDevicesStr[i] = strconv.Itoa(int(idx)) + } + envVisibleDevicesValue := strings.Join(envVisibleDevicesStr, ",") + + procFs := uprobes.CreateFakeProcFS(t, []uprobes.FakeProcFSEntry{ + {Pid: uint32(pidNoContainer)}, + {Pid: uint32(pidContainer)}, + {Pid: uint32(pidContainerAndEnv), Env: map[string]string{"CUDA_VISIBLE_DEVICES": envVisibleDevicesValue}}, + {Pid: uint32(pidNoContainerButEnv), Env: map[string]string{"CUDA_VISIBLE_DEVICES": envVisibleDevicesValue}}, + }) + + wmetaMock := testutil.GetWorkloadMetaMock(t) + sysCtx, err := getSystemContext(testutil.GetBasicNvmlMock(), procFs, wmetaMock) + require.NotNil(t, sysCtx) + require.NoError(t, err) + + // Create a container with a single GPU and add it to the store + containerID := "abcdef" + container := &workloadmeta.Container{ + EntityID: workloadmeta.EntityID{ + Kind: workloadmeta.KindContainer, + ID: containerID, + }, + EntityMeta: workloadmeta.EntityMeta{ + Name: containerID, + }, + } + + containerDeviceIndexes := []int32{1, 2, 3, 4} + for _, idx := range containerDeviceIndexes { + gpuUUID := testutil.GPUUUIDs[idx] + resource := workloadmeta.ContainerAllocatedResource{ + Name: nvidiaResourceName, + ID: gpuUUID, + } + container.AllocatedResources = append(container.AllocatedResources, resource) + } + + wmetaMock.Set(container) + storeContainer, err := wmetaMock.GetContainer(containerID) + require.NoError(t, err, "container should be found in the store") + require.NotNil(t, storeContainer, "container should be found in the store") + + cases := []struct { + name string + pid int + containerID string + configuredDeviceIdx []int32 + expectedDeviceIdx []int32 + }{ + { + name: "NoContainer", + containerID: "", + pid: pidNoContainer, + configuredDeviceIdx: []int32{1, 2}, + expectedDeviceIdx: []int32{1, 2}, + }, + { + name: "NoContainerButEnv", + containerID: "", + pid: pidNoContainerButEnv, + configuredDeviceIdx: []int32{1, 2}, + expectedDeviceIdx: []int32{envVisibleDevices[1], envVisibleDevices[2]}, + }, + { + name: "WithContainer", + containerID: containerID, + pid: pidContainer, + configuredDeviceIdx: []int32{1, 2}, + expectedDeviceIdx: []int32{containerDeviceIndexes[1], containerDeviceIndexes[2]}, + }, + { + name: "WithContainerAndEnv", + pid: pidContainerAndEnv, + containerID: containerID, + configuredDeviceIdx: []int32{1, 2}, + expectedDeviceIdx: []int32{containerDeviceIndexes[envVisibleDevices[1]], containerDeviceIndexes[envVisibleDevices[2]]}, + }, + } + + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + for i, idx := range c.configuredDeviceIdx { + sysCtx.setDeviceSelection(c.pid, c.pid+i, idx) + } + + for i, idx := range c.expectedDeviceIdx { + activeDevice, err := sysCtx.getCurrentActiveGpuDevice(c.pid, c.pid+i, c.containerID) + require.NoError(t, err) + testutil.RequireDevicesEqual(t, sysCtx.gpuDevices[idx], activeDevice, "invalid device at index %d (real index is %d, selected index is %d)", i, idx, c.configuredDeviceIdx[i]) + } + }) + } +} diff --git a/pkg/gpu/probe.go b/pkg/gpu/probe.go index 3ab58ede54f35..fafc90df19c28 100644 --- a/pkg/gpu/probe.go +++ b/pkg/gpu/probe.go @@ -22,6 +22,7 @@ import ( "github.com/cilium/ebpf" "github.com/DataDog/datadog-agent/comp/core/telemetry" + workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/gpu/model" ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" ebpftelemetry "github.com/DataDog/datadog-agent/pkg/ebpf/telemetry" @@ -81,6 +82,10 @@ type ProbeDependencies struct { // ProcessMonitor is the process monitor interface ProcessMonitor uprobes.ProcessMonitor + + // WorkloadMeta used to retrieve data about workloads (containers, processes) running + // on the host + WorkloadMeta workloadmeta.Component } // Probe represents the GPU monitoring probe @@ -109,7 +114,7 @@ func NewProbe(cfg *config.Config, deps ProbeDependencies) (*Probe, error) { } attachCfg := getAttacherConfig(cfg) - sysCtx, err := getSystemContext(deps.NvmlLib, cfg.ProcRoot) + sysCtx, err := getSystemContext(deps.NvmlLib, cfg.ProcRoot, deps.WorkloadMeta) if err != nil { return nil, fmt.Errorf("error getting system context: %w", err) } diff --git a/pkg/gpu/probe_stub.go b/pkg/gpu/probe_stub.go index 734a11919abb9..2f4ebf544c984 100644 --- a/pkg/gpu/probe_stub.go +++ b/pkg/gpu/probe_stub.go @@ -11,6 +11,7 @@ import ( "github.com/NVIDIA/go-nvml/pkg/nvml" "github.com/DataDog/datadog-agent/comp/core/telemetry" + workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/gpu/model" "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/gpu/config" @@ -21,6 +22,7 @@ type ProbeDependencies struct { Telemetry telemetry.Component NvmlLib nvml.Interface ProcessMonitor any // uprobes.ProcessMonitor is only compiled with the linux_bpf build tag, so we need to use type any here + WorkloadMeta workloadmeta.Component } // Probe is not implemented on non-linux systems diff --git a/pkg/gpu/probe_test.go b/pkg/gpu/probe_test.go index f3eda56e2d2d9..ff2834b0327bc 100644 --- a/pkg/gpu/probe_test.go +++ b/pkg/gpu/probe_test.go @@ -47,6 +47,7 @@ func (s *probeTestSuite) getProbe() *Probe { deps := ProbeDependencies{ NvmlLib: testutil.GetBasicNvmlMock(), ProcessMonitor: consumerstestutil.NewTestProcessConsumer(t), + WorkloadMeta: testutil.GetWorkloadMetaMock(t), } probe, err := NewProbe(cfg, deps) require.NoError(t, err) diff --git a/pkg/gpu/stats_test.go b/pkg/gpu/stats_test.go index c0445e6c4e869..5aa4b2304cf3a 100644 --- a/pkg/gpu/stats_test.go +++ b/pkg/gpu/stats_test.go @@ -31,7 +31,7 @@ func getMetricsEntry(key model.StatsKey, stats *model.GPUStats) *model.Utilizati } func getStatsGeneratorForTest(t *testing.T) (*statsGenerator, map[streamKey]*StreamHandler, int64) { - sysCtx, err := getSystemContext(testutil.GetBasicNvmlMock(), kernel.ProcFSRoot()) + sysCtx, err := getSystemContext(testutil.GetBasicNvmlMock(), kernel.ProcFSRoot(), testutil.GetWorkloadMetaMock(t)) require.NoError(t, err) require.NotNil(t, sysCtx) diff --git a/pkg/gpu/stream_test.go b/pkg/gpu/stream_test.go index f33e4f342e98b..0e4f0a5b734c8 100644 --- a/pkg/gpu/stream_test.go +++ b/pkg/gpu/stream_test.go @@ -21,10 +21,16 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/kernel" ) -func TestKernelLaunchesHandled(t *testing.T) { - sysCtx, err := getSystemContext(testutil.GetBasicNvmlMock(), kernel.ProcFSRoot()) +func getSystemContextForTest(t *testing.T) *systemContext { + sysCtx, err := getSystemContext(testutil.GetBasicNvmlMock(), kernel.ProcFSRoot(), testutil.GetWorkloadMetaMock(t)) require.NoError(t, err) - stream := newStreamHandler(0, "", sysCtx) + require.NotNil(t, sysCtx) + + return sysCtx +} + +func TestKernelLaunchesHandled(t *testing.T) { + stream := newStreamHandler(0, "", getSystemContextForTest(t)) kernStartTime := uint64(1) launch := &gpuebpf.CudaKernelLaunch{ @@ -81,9 +87,7 @@ func TestKernelLaunchesHandled(t *testing.T) { } func TestMemoryAllocationsHandled(t *testing.T) { - sysCtx, err := getSystemContext(testutil.GetBasicNvmlMock(), kernel.ProcFSRoot()) - require.NoError(t, err) - stream := newStreamHandler(0, "", sysCtx) + stream := newStreamHandler(0, "", getSystemContextForTest(t)) memAllocTime := uint64(1) memFreeTime := uint64(2) @@ -152,9 +156,7 @@ func TestMemoryAllocationsHandled(t *testing.T) { } func TestMemoryAllocationsDetectLeaks(t *testing.T) { - sysCtx, err := getSystemContext(testutil.GetBasicNvmlMock(), kernel.ProcFSRoot()) - require.NoError(t, err) - stream := newStreamHandler(0, "", sysCtx) + stream := newStreamHandler(0, "", getSystemContextForTest(t)) memAllocTime := uint64(1) memAddr := uint64(42) @@ -187,9 +189,7 @@ func TestMemoryAllocationsDetectLeaks(t *testing.T) { } func TestMemoryAllocationsNoCrashOnInvalidFree(t *testing.T) { - sysCtx, err := getSystemContext(testutil.GetBasicNvmlMock(), kernel.ProcFSRoot()) - require.NoError(t, err) - stream := newStreamHandler(0, "", sysCtx) + stream := newStreamHandler(0, "", getSystemContextForTest(t)) memAllocTime := uint64(1) memFreeTime := uint64(2) @@ -231,9 +231,7 @@ func TestMemoryAllocationsNoCrashOnInvalidFree(t *testing.T) { } func TestMemoryAllocationsMultipleAllocsHandled(t *testing.T) { - sysCtx, err := getSystemContext(testutil.GetBasicNvmlMock(), kernel.ProcFSRoot()) - require.NoError(t, err) - stream := newStreamHandler(0, "", sysCtx) + stream := newStreamHandler(0, "", getSystemContextForTest(t)) memAllocTime1, memAllocTime2 := uint64(1), uint64(10) memFreeTime1, memFreeTime2 := uint64(15), uint64(20) @@ -324,7 +322,7 @@ func TestMemoryAllocationsMultipleAllocsHandled(t *testing.T) { func TestKernelLaunchesIncludeEnrichedKernelData(t *testing.T) { proc := kernel.ProcFSRoot() - sysCtx, err := getSystemContext(testutil.GetBasicNvmlMock(), proc) + sysCtx, err := getSystemContext(testutil.GetBasicNvmlMock(), proc, testutil.GetWorkloadMetaMock(t)) require.NoError(t, err) // Set up the caches in system context so no actual queries are done diff --git a/pkg/gpu/testutil/mocks.go b/pkg/gpu/testutil/mocks.go index a7dadd39215ad..009385125600a 100644 --- a/pkg/gpu/testutil/mocks.go +++ b/pkg/gpu/testutil/mocks.go @@ -9,8 +9,19 @@ package testutil import ( + "fmt" + "testing" + "github.com/NVIDIA/go-nvml/pkg/nvml" nvmlmock "github.com/NVIDIA/go-nvml/pkg/nvml/mock" + "github.com/stretchr/testify/require" + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/core" + workloadmeta "github.com/DataDog/datadog-agent/comp/core/workloadmeta/def" + workloadmetafxmock "github.com/DataDog/datadog-agent/comp/core/workloadmeta/fx-mock" + workloadmetamock "github.com/DataDog/datadog-agent/comp/core/workloadmeta/mock" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) // DefaultGpuCores is the default number of cores for a GPU device in the mock. @@ -18,13 +29,18 @@ const DefaultGpuCores = 10 // GPUUUIDs is a list of UUIDs for the devices returned by the mock var GPUUUIDs = []string{ - "GPU-12345678-1234-1234-1234-123456789012", - "GPU-99999999-1234-1234-1234-123456789013", - "GPU-00000000-1234-1234-1234-123456789014", + "GPU-00000000-1234-1234-1234-123456789012", + "GPU-11111111-1234-1234-1234-123456789013", + "GPU-22222222-1234-1234-1234-123456789014", + "GPU-33333333-1234-1234-1234-123456789015", + "GPU-44444444-1234-1234-1234-123456789016", + "GPU-55555555-1234-1234-1234-123456789017", + "GPU-66666666-1234-1234-1234-123456789018", } -// GPUCores is a list of number of cores for the devices returned by the mock, should be the same length as GPUUUIDs -var GPUCores = []int{DefaultGpuCores, 20, 30} +// GPUCores is a list of number of cores for the devices returned by the mock, +// should be the same length as GPUUUIDs. If not, GetBasicNvmlMock will panic. +var GPUCores = []int{DefaultGpuCores, 20, 30, 40, 50, 60, 70} // DefaultGpuUUID is the UUID for the default device returned by the mock var DefaultGpuUUID = GPUUUIDs[0] @@ -47,6 +63,11 @@ func GetDeviceMock(deviceIdx int) *nvmlmock.Device { // GetBasicNvmlMock returns a mock of the nvml.Interface with a single device with 10 cores, // useful for basic tests that need only the basic interaction with NVML to be working. func GetBasicNvmlMock() *nvmlmock.Interface { + if len(GPUUUIDs) != len(GPUCores) { + // Make it really easy to spot errors if we change any of the arrays. + panic("GPUUUIDs and GPUCores must have the same length, please fix it") + } + return &nvmlmock.Interface{ DeviceGetCountFunc: func() (int, nvml.Return) { return len(GPUUUIDs), nvml.SUCCESS @@ -59,3 +80,49 @@ func GetBasicNvmlMock() *nvmlmock.Interface { }, } } + +// GetWorkloadMetaMock returns a mock of the workloadmeta.Component. +func GetWorkloadMetaMock(t *testing.T) workloadmetamock.Mock { + return fxutil.Test[workloadmetamock.Mock](t, fx.Options( + core.MockBundle(), + workloadmetafxmock.MockModule(workloadmeta.NewParams()), + )) +} + +// RequireDevicesEqual checks that the two devices are equal by comparing their UUIDs, which gives a better +// output than using require.Equal on the devices themselves +func RequireDevicesEqual(t *testing.T, expected, actual nvml.Device, msgAndArgs ...interface{}) { + extraFmt := "" + if len(msgAndArgs) > 0 { + extraFmt = fmt.Sprintf(msgAndArgs[0].(string), msgAndArgs[1:]...) + ": " + } + + expectedUUID, ret := expected.GetUUID() + require.Equal(t, ret, nvml.SUCCESS, "%s%scannot retrieve UUID for expected device %v%s", extraFmt, expected) + + actualUUID, ret := actual.GetUUID() + require.Equal(t, ret, nvml.SUCCESS, "%scannot retrieve UUID for actual device %v%s", extraFmt, actual) + + require.Equal(t, expectedUUID, actualUUID, "%sUUIDs do not match", extraFmt) +} + +// RequireDeviceListsEqual checks that the two device lists are equal by comparing their UUIDs, which gives a better +// output than using require.ElementsMatch on the lists themselves +func RequireDeviceListsEqual(t *testing.T, expected, actual []nvml.Device, msgAndArgs ...interface{}) { + extraFmt := "" + if len(msgAndArgs) > 0 { + extraFmt = fmt.Sprintf(msgAndArgs[0].(string), msgAndArgs[1:]...) + ": " + } + + require.Len(t, actual, len(expected), "%sdevice lists have different lengths", extraFmt) + + for i := range expected { + expectedUUID, ret := expected[i].GetUUID() + require.Equal(t, ret, nvml.SUCCESS, "%scannot retrieve UUID for expected device index %d", extraFmt, i) + + actualUUID, ret := actual[i].GetUUID() + require.Equal(t, ret, nvml.SUCCESS, "%scannot retrieve UUID for actual device index %d", extraFmt, i) + + require.Equal(t, expectedUUID, actualUUID, "%sUUIDs do not match for element %d", extraFmt, i) + } +} From e6ab5c07c265543c31b4893891870433bd8f17f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9lian=20Raimbault?= <161456554+CelianR@users.noreply.github.com> Date: Wed, 18 Dec 2024 08:29:40 -0500 Subject: [PATCH 298/303] Add ci metrics origins (#31996) --- tasks/libs/common/datadog_api.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tasks/libs/common/datadog_api.py b/tasks/libs/common/datadog_api.py index 55b888678b768..7b8b9df7f6a8a 100644 --- a/tasks/libs/common/datadog_api.py +++ b/tasks/libs/common/datadog_api.py @@ -16,8 +16,12 @@ def create_metric(metric_type, metric_name, timestamp, value, tags, unit=None, m unit = unit or unset metadata = unset - if metric_origin: - metadata = MetricMetadata(origin=MetricOrigin(**metric_origin)) + origin_metadata = metric_origin or { + "origin_product": 10, # Agent + "origin_sub_product": 54, # Agent CI + "origin_product_detail": 64, # Gitlab + } + metadata = MetricMetadata(origin=MetricOrigin(**origin_metadata)) return MetricSeries( metric=metric_name, From f5e9ae44cee33c5260a9f1c1afa493ddc236958b Mon Sep 17 00:00:00 2001 From: Adel Haj Hassan <41540817+adel121@users.noreply.github.com> Date: Wed, 18 Dec 2024 14:36:15 +0100 Subject: [PATCH 299/303] quit leader election if context was cancelled (#32331) --- .../apiserver/leaderelection/leaderelection.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/pkg/util/kubernetes/apiserver/leaderelection/leaderelection.go b/pkg/util/kubernetes/apiserver/leaderelection/leaderelection.go index 45ea62c6e2d26..79e8a89895beb 100644 --- a/pkg/util/kubernetes/apiserver/leaderelection/leaderelection.go +++ b/pkg/util/kubernetes/apiserver/leaderelection/leaderelection.go @@ -228,9 +228,15 @@ func (le *LeaderEngine) EnsureLeaderElectionRuns() error { func (le *LeaderEngine) runLeaderElection() { for { - log.Infof("Starting leader election process for %q...", le.HolderIdentity) - le.leaderElector.Run(le.ctx) - log.Info("Leader election lost") + select { + case <-le.ctx.Done(): + log.Infof("Quitting leader election process: context was cancelled") + return + default: + log.Infof("Starting leader election process for %q...", le.HolderIdentity) + le.leaderElector.Run(le.ctx) + log.Info("Leader election lost") + } } } From 188825c6b2364e4cff5e180a2163af3ef7bd164e Mon Sep 17 00:00:00 2001 From: Vincent Whitchurch Date: Wed, 18 Dec 2024 14:38:50 +0100 Subject: [PATCH 300/303] usm: Include PathId in debug traced program list (#32329) --- pkg/network/usm/utils/debugger.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/network/usm/utils/debugger.go b/pkg/network/usm/utils/debugger.go index 4da685bf2fbc9..8094b2e02c6c3 100644 --- a/pkg/network/usm/utils/debugger.go +++ b/pkg/network/usm/utils/debugger.go @@ -31,6 +31,7 @@ type Attacher interface { type TracedProgram struct { ProgramType string FilePath string + PathID PathIdentifier PIDs []uint32 } @@ -131,6 +132,7 @@ func (d *tlsDebugger) GetTracedPrograms(moduleName string) []TracedProgram { program.ProgramType = programType program.FilePath = registration.sampleFilePath + program.PathID = pathID } registry.m.Unlock() From b6fd306a800e50d2813dc74d4bf6912483aac554 Mon Sep 17 00:00:00 2001 From: Sylvain Afchain Date: Wed, 18 Dec 2024 15:27:44 +0100 Subject: [PATCH 301/303] [CWS] move cgroup context in linux specific serializer (#32338) --- docs/cloud-workload-security/backend_linux.md | 8 +- .../backend_linux.schema.json | 6 +- pkg/security/serializers/serializers_base.go | 10 -- .../serializers_base_linux_easyjson.go | 110 ++----------- pkg/security/serializers/serializers_linux.go | 10 ++ .../serializers/serializers_linux_easyjson.go | 146 +++++++++++++----- 6 files changed, 135 insertions(+), 155 deletions(-) diff --git a/docs/cloud-workload-security/backend_linux.md b/docs/cloud-workload-security/backend_linux.md index 7b0794f82fc9d..e4e1af8c22c37 100644 --- a/docs/cloud-workload-security/backend_linux.md +++ b/docs/cloud-workload-security/backend_linux.md @@ -1718,9 +1718,6 @@ CSM Threats event for Linux systems have the following JSON schema: "container": { "$ref": "#/$defs/ContainerContext" }, - "cgroup": { - "$ref": "#/$defs/CGroupContext" - }, "network": { "$ref": "#/$defs/NetworkContext" }, @@ -1730,6 +1727,9 @@ CSM Threats event for Linux systems have the following JSON schema: "security_profile": { "$ref": "#/$defs/SecurityProfileContext" }, + "cgroup": { + "$ref": "#/$defs/CGroupContext" + }, "selinux": { "$ref": "#/$defs/SELinuxEvent" }, @@ -1802,10 +1802,10 @@ CSM Threats event for Linux systems have the following JSON schema: | `exit` | $ref | Please see [ExitEvent](#exitevent) | | `process` | $ref | Please see [ProcessContext](#processcontext) | | `container` | $ref | Please see [ContainerContext](#containercontext) | -| `cgroup` | $ref | Please see [CGroupContext](#cgroupcontext) | | `network` | $ref | Please see [NetworkContext](#networkcontext) | | `dd` | $ref | Please see [DDContext](#ddcontext) | | `security_profile` | $ref | Please see [SecurityProfileContext](#securityprofilecontext) | +| `cgroup` | $ref | Please see [CGroupContext](#cgroupcontext) | | `selinux` | $ref | Please see [SELinuxEvent](#selinuxevent) | | `bpf` | $ref | Please see [BPFEvent](#bpfevent) | | `mmap` | $ref | Please see [MMapEvent](#mmapevent) | diff --git a/docs/cloud-workload-security/backend_linux.schema.json b/docs/cloud-workload-security/backend_linux.schema.json index b6f9cddc6cbb7..b4aa6b761fbfb 100644 --- a/docs/cloud-workload-security/backend_linux.schema.json +++ b/docs/cloud-workload-security/backend_linux.schema.json @@ -1707,9 +1707,6 @@ "container": { "$ref": "#/$defs/ContainerContext" }, - "cgroup": { - "$ref": "#/$defs/CGroupContext" - }, "network": { "$ref": "#/$defs/NetworkContext" }, @@ -1719,6 +1716,9 @@ "security_profile": { "$ref": "#/$defs/SecurityProfileContext" }, + "cgroup": { + "$ref": "#/$defs/CGroupContext" + }, "selinux": { "$ref": "#/$defs/SELinuxEvent" }, diff --git a/pkg/security/serializers/serializers_base.go b/pkg/security/serializers/serializers_base.go index 32f84ace271f8..805e52f8c67cc 100644 --- a/pkg/security/serializers/serializers_base.go +++ b/pkg/security/serializers/serializers_base.go @@ -18,15 +18,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/scrubber" ) -// CGroupContextSerializer serializes a cgroup context to JSON -// easyjson:json -type CGroupContextSerializer struct { - // CGroup ID - ID string `json:"id,omitempty"` - // CGroup manager - Manager string `json:"manager,omitempty"` -} - // ContainerContextSerializer serializes a container context to JSON // easyjson:json type ContainerContextSerializer struct { @@ -213,7 +204,6 @@ type BaseEventSerializer struct { *ExitEventSerializer `json:"exit,omitempty"` *ProcessContextSerializer `json:"process,omitempty"` *ContainerContextSerializer `json:"container,omitempty"` - *CGroupContextSerializer `json:"cgroup,omitempty"` } // TLSContextSerializer defines a tls context serializer diff --git a/pkg/security/serializers/serializers_base_linux_easyjson.go b/pkg/security/serializers/serializers_base_linux_easyjson.go index 743795c140527..8502c05b45842 100644 --- a/pkg/security/serializers/serializers_base_linux_easyjson.go +++ b/pkg/security/serializers/serializers_base_linux_easyjson.go @@ -1777,72 +1777,7 @@ func (v ContainerContextSerializer) MarshalEasyJSON(w *jwriter.Writer) { func (v *ContainerContextSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers14(l, v) } -func easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers15(in *jlexer.Lexer, out *CGroupContextSerializer) { - isTopLevel := in.IsStart() - if in.IsNull() { - if isTopLevel { - in.Consumed() - } - in.Skip() - return - } - in.Delim('{') - for !in.IsDelim('}') { - key := in.UnsafeFieldName(false) - in.WantColon() - if in.IsNull() { - in.Skip() - in.WantComma() - continue - } - switch key { - case "id": - out.ID = string(in.String()) - case "manager": - out.Manager = string(in.String()) - default: - in.SkipRecursive() - } - in.WantComma() - } - in.Delim('}') - if isTopLevel { - in.Consumed() - } -} -func easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers15(out *jwriter.Writer, in CGroupContextSerializer) { - out.RawByte('{') - first := true - _ = first - if in.ID != "" { - const prefix string = ",\"id\":" - first = false - out.RawString(prefix[1:]) - out.String(string(in.ID)) - } - if in.Manager != "" { - const prefix string = ",\"manager\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } - out.String(string(in.Manager)) - } - out.RawByte('}') -} - -// MarshalEasyJSON supports easyjson.Marshaler interface -func (v CGroupContextSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers15(w, v) -} - -// UnmarshalEasyJSON supports easyjson.Unmarshaler interface -func (v *CGroupContextSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers15(l, v) -} -func easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers16(in *jlexer.Lexer, out *BaseEventSerializer) { +func easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers15(in *jlexer.Lexer, out *BaseEventSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -1855,7 +1790,6 @@ func easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers16( out.ExitEventSerializer = new(ExitEventSerializer) out.ProcessContextSerializer = new(ProcessContextSerializer) out.ContainerContextSerializer = new(ContainerContextSerializer) - out.CGroupContextSerializer = new(CGroupContextSerializer) in.Delim('{') for !in.IsDelim('}') { key := in.UnsafeFieldName(false) @@ -1912,16 +1846,6 @@ func easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers16( } (*out.ContainerContextSerializer).UnmarshalEasyJSON(in) } - case "cgroup": - if in.IsNull() { - in.Skip() - out.CGroupContextSerializer = nil - } else { - if out.CGroupContextSerializer == nil { - out.CGroupContextSerializer = new(CGroupContextSerializer) - } - (*out.CGroupContextSerializer).UnmarshalEasyJSON(in) - } default: in.SkipRecursive() } @@ -1932,7 +1856,7 @@ func easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers16( in.Consumed() } } -func easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers16(out *jwriter.Writer, in BaseEventSerializer) { +func easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers15(out *jwriter.Writer, in BaseEventSerializer) { out.RawByte('{') first := true _ = first @@ -1992,29 +1916,19 @@ func easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers16( } (*in.ContainerContextSerializer).MarshalEasyJSON(out) } - if in.CGroupContextSerializer != nil { - const prefix string = ",\"cgroup\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } - (*in.CGroupContextSerializer).MarshalEasyJSON(out) - } out.RawByte('}') } // MarshalEasyJSON supports easyjson.Marshaler interface func (v BaseEventSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers16(w, v) + easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers15(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *BaseEventSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers16(l, v) + easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers15(l, v) } -func easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers17(in *jlexer.Lexer, out *AWSSecurityCredentialsSerializer) { +func easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers16(in *jlexer.Lexer, out *AWSSecurityCredentialsSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -2053,7 +1967,7 @@ func easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers17( in.Consumed() } } -func easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers17(out *jwriter.Writer, in AWSSecurityCredentialsSerializer) { +func easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers16(out *jwriter.Writer, in AWSSecurityCredentialsSerializer) { out.RawByte('{') first := true _ = first @@ -2087,14 +2001,14 @@ func easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers17( // MarshalEasyJSON supports easyjson.Marshaler interface func (v AWSSecurityCredentialsSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers17(w, v) + easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers16(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *AWSSecurityCredentialsSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers17(l, v) + easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers16(l, v) } -func easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers18(in *jlexer.Lexer, out *AWSIMDSEventSerializer) { +func easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers17(in *jlexer.Lexer, out *AWSIMDSEventSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -2135,7 +2049,7 @@ func easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers18( in.Consumed() } } -func easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers18(out *jwriter.Writer, in AWSIMDSEventSerializer) { +func easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers17(out *jwriter.Writer, in AWSIMDSEventSerializer) { out.RawByte('{') first := true _ = first @@ -2154,10 +2068,10 @@ func easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers18( // MarshalEasyJSON supports easyjson.Marshaler interface func (v AWSIMDSEventSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers18(w, v) + easyjsonA1e47abeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers17(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *AWSIMDSEventSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers18(l, v) + easyjsonA1e47abeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers17(l, v) } diff --git a/pkg/security/serializers/serializers_linux.go b/pkg/security/serializers/serializers_linux.go index 69b1cf0bd225a..4f38767025b47 100644 --- a/pkg/security/serializers/serializers_linux.go +++ b/pkg/security/serializers/serializers_linux.go @@ -81,6 +81,15 @@ type FileSerializer struct { MountOrigin string `json:"mount_origin,omitempty"` } +// CGroupContextSerializer serializes a cgroup context to JSON +// easyjson:json +type CGroupContextSerializer struct { + // CGroup ID + ID string `json:"id,omitempty"` + // CGroup manager + Manager string `json:"manager,omitempty"` +} + // UserContextSerializer serializes a user context to JSON // easyjson:json type UserContextSerializer struct { @@ -622,6 +631,7 @@ type EventSerializer struct { *NetworkContextSerializer `json:"network,omitempty"` *DDContextSerializer `json:"dd,omitempty"` *SecurityProfileContextSerializer `json:"security_profile,omitempty"` + *CGroupContextSerializer `json:"cgroup,omitempty"` *SELinuxEventSerializer `json:"selinux,omitempty"` *BPFEventSerializer `json:"bpf,omitempty"` diff --git a/pkg/security/serializers/serializers_linux_easyjson.go b/pkg/security/serializers/serializers_linux_easyjson.go index ec264f2cb6de4..e61dfb697a062 100644 --- a/pkg/security/serializers/serializers_linux_easyjson.go +++ b/pkg/security/serializers/serializers_linux_easyjson.go @@ -3595,6 +3595,7 @@ func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers24( out.NetworkContextSerializer = new(NetworkContextSerializer) out.DDContextSerializer = new(DDContextSerializer) out.SecurityProfileContextSerializer = new(SecurityProfileContextSerializer) + out.CGroupContextSerializer = new(CGroupContextSerializer) out.SELinuxEventSerializer = new(SELinuxEventSerializer) out.BPFEventSerializer = new(BPFEventSerializer) out.MMapEventSerializer = new(MMapEventSerializer) @@ -3652,6 +3653,16 @@ func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers24( } (*out.SecurityProfileContextSerializer).UnmarshalEasyJSON(in) } + case "cgroup": + if in.IsNull() { + in.Skip() + out.CGroupContextSerializer = nil + } else { + if out.CGroupContextSerializer == nil { + out.CGroupContextSerializer = new(CGroupContextSerializer) + } + (*out.CGroupContextSerializer).UnmarshalEasyJSON(in) + } case "selinux": if in.IsNull() { in.Skip() @@ -3889,16 +3900,6 @@ func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers24( } (*out.ContainerContextSerializer).UnmarshalEasyJSON(in) } - case "cgroup": - if in.IsNull() { - in.Skip() - out.CGroupContextSerializer = nil - } else { - if out.CGroupContextSerializer == nil { - out.CGroupContextSerializer = new(CGroupContextSerializer) - } - (*out.CGroupContextSerializer).UnmarshalEasyJSON(in) - } default: in.SkipRecursive() } @@ -3939,6 +3940,16 @@ func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers24( } (*in.SecurityProfileContextSerializer).MarshalEasyJSON(out) } + if in.CGroupContextSerializer != nil { + const prefix string = ",\"cgroup\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + (*in.CGroupContextSerializer).MarshalEasyJSON(out) + } if in.SELinuxEventSerializer != nil { const prefix string = ",\"selinux\":" if first { @@ -4180,16 +4191,6 @@ func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers24( } (*in.ContainerContextSerializer).MarshalEasyJSON(out) } - if in.CGroupContextSerializer != nil { - const prefix string = ",\"cgroup\":" - if first { - first = false - out.RawString(prefix[1:]) - } else { - out.RawString(prefix) - } - (*in.CGroupContextSerializer).MarshalEasyJSON(out) - } out.RawByte('}') } @@ -4663,7 +4664,72 @@ func (v CapsetSerializer) MarshalEasyJSON(w *jwriter.Writer) { func (v *CapsetSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers28(l, v) } -func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers29(in *jlexer.Lexer, out *BindEventSerializer) { +func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers29(in *jlexer.Lexer, out *CGroupContextSerializer) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeFieldName(false) + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "id": + out.ID = string(in.String()) + case "manager": + out.Manager = string(in.String()) + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers29(out *jwriter.Writer, in CGroupContextSerializer) { + out.RawByte('{') + first := true + _ = first + if in.ID != "" { + const prefix string = ",\"id\":" + first = false + out.RawString(prefix[1:]) + out.String(string(in.ID)) + } + if in.Manager != "" { + const prefix string = ",\"manager\":" + if first { + first = false + out.RawString(prefix[1:]) + } else { + out.RawString(prefix) + } + out.String(string(in.Manager)) + } + out.RawByte('}') +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v CGroupContextSerializer) MarshalEasyJSON(w *jwriter.Writer) { + easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers29(w, v) +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *CGroupContextSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers29(l, v) +} +func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers30(in *jlexer.Lexer, out *BindEventSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -4696,7 +4762,7 @@ func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers29( in.Consumed() } } -func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers29(out *jwriter.Writer, in BindEventSerializer) { +func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers30(out *jwriter.Writer, in BindEventSerializer) { out.RawByte('{') first := true _ = first @@ -4715,14 +4781,14 @@ func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers29( // MarshalEasyJSON supports easyjson.Marshaler interface func (v BindEventSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers29(w, v) + easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers30(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *BindEventSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers29(l, v) + easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers30(l, v) } -func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers30(in *jlexer.Lexer, out *BPFProgramSerializer) { +func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers31(in *jlexer.Lexer, out *BPFProgramSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -4782,7 +4848,7 @@ func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers30( in.Consumed() } } -func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers30(out *jwriter.Writer, in BPFProgramSerializer) { +func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers31(out *jwriter.Writer, in BPFProgramSerializer) { out.RawByte('{') first := true _ = first @@ -4846,14 +4912,14 @@ func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers30( // MarshalEasyJSON supports easyjson.Marshaler interface func (v BPFProgramSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers30(w, v) + easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers31(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *BPFProgramSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers30(l, v) + easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers31(l, v) } -func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers31(in *jlexer.Lexer, out *BPFMapSerializer) { +func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers32(in *jlexer.Lexer, out *BPFMapSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -4886,7 +4952,7 @@ func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers31( in.Consumed() } } -func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers31(out *jwriter.Writer, in BPFMapSerializer) { +func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers32(out *jwriter.Writer, in BPFMapSerializer) { out.RawByte('{') first := true _ = first @@ -4911,14 +4977,14 @@ func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers31( // MarshalEasyJSON supports easyjson.Marshaler interface func (v BPFMapSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers31(w, v) + easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers32(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *BPFMapSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers31(l, v) + easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers32(l, v) } -func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers32(in *jlexer.Lexer, out *BPFEventSerializer) { +func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers33(in *jlexer.Lexer, out *BPFEventSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -4969,7 +5035,7 @@ func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers32( in.Consumed() } } -func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers32(out *jwriter.Writer, in BPFEventSerializer) { +func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers33(out *jwriter.Writer, in BPFEventSerializer) { out.RawByte('{') first := true _ = first @@ -4993,14 +5059,14 @@ func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers32( // MarshalEasyJSON supports easyjson.Marshaler interface func (v BPFEventSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers32(w, v) + easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers33(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *BPFEventSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers32(l, v) + easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers33(l, v) } -func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers33(in *jlexer.Lexer, out *AnomalyDetectionSyscallEventSerializer) { +func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers34(in *jlexer.Lexer, out *AnomalyDetectionSyscallEventSerializer) { isTopLevel := in.IsStart() if in.IsNull() { if isTopLevel { @@ -5031,7 +5097,7 @@ func easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers33( in.Consumed() } } -func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers33(out *jwriter.Writer, in AnomalyDetectionSyscallEventSerializer) { +func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers34(out *jwriter.Writer, in AnomalyDetectionSyscallEventSerializer) { out.RawByte('{') first := true _ = first @@ -5045,10 +5111,10 @@ func easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers33( // MarshalEasyJSON supports easyjson.Marshaler interface func (v AnomalyDetectionSyscallEventSerializer) MarshalEasyJSON(w *jwriter.Writer) { - easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers33(w, v) + easyjsonDdc0fdbeEncodeGithubComDataDogDatadogAgentPkgSecuritySerializers34(w, v) } // UnmarshalEasyJSON supports easyjson.Unmarshaler interface func (v *AnomalyDetectionSyscallEventSerializer) UnmarshalEasyJSON(l *jlexer.Lexer) { - easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers33(l, v) + easyjsonDdc0fdbeDecodeGithubComDataDogDatadogAgentPkgSecuritySerializers34(l, v) } From 0171d14c90075fd883544131731d5c1c9c05be35 Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Wed, 18 Dec 2024 15:31:57 +0100 Subject: [PATCH 302/303] feat(ci): Enable timestamp in logs (#32327) --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b2761698a9b16..95cb72a1c4df5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -276,6 +276,7 @@ variables: # Feature flags FF_SCRIPT_SECTIONS: 1 # Prevent multiline scripts log collapsing, see https://gitlab.com/gitlab-org/gitlab-runner/-/issues/3392 FF_KUBERNETES_HONOR_ENTRYPOINT: true # Honor the entrypoint in the Docker image when running Kubernetes jobs + FF_TIMESTAMPS: true # # Condition mixins for simplification of rules From 52f0517517169d661a94895a296c73b85424c86d Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Wed, 18 Dec 2024 15:36:54 +0100 Subject: [PATCH 303/303] Update path to trigger run of asc e2e tests (#32298) --- .gitlab-ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 95cb72a1c4df5..2038aa4649f91 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -842,7 +842,9 @@ workflow: - !reference [.on_e2e_main_release_or_rc] - changes: paths: - # TODO: Add paths that should trigger tests for ASC + - cmd/**/* + - pkg/**/* + - comp/**/* - test/new-e2e/tests/agent-shared-components/**/* compare_to: main # TODO: use a variable, when this is supported https://gitlab.com/gitlab-org/gitlab/-/issues/369916