From 46c324045e80135cb691b0acfeac9c020111effb Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Thu, 27 Feb 2025 00:05:50 +0100 Subject: [PATCH] chore: run gopls modernize tool --- cmd/agent/common/autodiscovery.go | 8 ++----- .../run/internal/clcrunnerapi/v1/clcrunner.go | 5 ++--- .../cloudservice/appservice.go | 5 ++--- cmd/serverless-init/tag/tag.go | 5 ++--- cmd/trace-agent/test/testsuite/traces_test.go | 3 ++- .../autodiscovery/autodiscoveryimpl/stats.go | 5 ++--- .../autodiscovery/autodiscoveryimpl/store.go | 5 ++--- .../autodiscoveryimpl/templatecache.go | 3 ++- comp/core/autodiscovery/listeners/common.go | 5 ++--- .../core/autodiscovery/listeners/container.go | 5 ++--- .../autodiscovery/providers/config_reader.go | 8 ++----- comp/core/autodiscovery/providers/consul.go | 8 ++----- .../core/autodiscovery/providers/container.go | 9 +++----- .../autodiscovery/providers/remote_config.go | 5 ++--- comp/core/secrets/secretsimpl/secrets.go | 13 +++--------- .../settings/settingsimpl/settingsimpl.go | 5 ++--- .../statusimpl/common_header_provider.go | 4 +--- comp/core/status/statusimpl/status_test.go | 9 +++----- comp/core/tagger/api/getlist.go | 10 +++------ .../tagger/collectors/workloadmeta_extract.go | 16 ++++---------- comp/core/tagger/taglist/taglist.go | 5 ++--- comp/core/tagger/tagstore/entity_tags.go | 3 ++- .../kubernetes_resource_parsers/utils_test.go | 5 ++--- comp/core/workloadmeta/impl/cached_entity.go | 5 ++--- comp/core/workloadmeta/impl/store.go | 3 ++- comp/dogstatsd/listeners/udp_test.go | 3 ++- comp/dogstatsd/pidmap/pidmapimpl/state.go | 5 ++--- comp/dogstatsd/server/blocklist.go | 3 ++- .../internal/retry/on_disk_retry_queue.go | 3 ++- .../resolver/domain_resolver.go | 7 +++---- .../inventoryagentimpl/inventoryagent.go | 9 +++----- .../inventorychecksimpl/inventorychecks.go | 9 +++----- .../inventoryotelimpl/inventoryotel.go | 5 ++--- comp/netflow/goflowlib/metric.go | 12 +++++------ comp/netflow/portrollup/portrollup.go | 12 ++++------- .../rdnsquerier/impl/rdnsquerier_testutils.go | 8 +++---- .../formatter/formatterimpl/formatter.go | 9 +++----- comp/trace/agent/impl/agent.go | 5 +---- pkg/aggregator/demultiplexer.go | 16 +++----------- pkg/aggregator/host_tag_provider.go | 3 ++- pkg/aggregator/internal/tags/store.go | 5 ++--- pkg/aggregator/mocksender/asserts.go | 8 +++---- .../autoscaling/custommetrics/provider.go | 5 +---- .../workload/model/pod_autoscaler.go | 5 +---- pkg/collector/check/stats/stats.go | 14 ++++--------- pkg/collector/check/stats/util.go | 7 +------ .../cluster/ksm/kubernetes_state.go | 9 ++++---- .../ksm/kubernetes_state_label_joins.go | 10 +++------ .../ksm/kubernetes_state_transformers.go | 7 ++++--- .../kubernetesapiserver/events_common.go | 7 +++---- .../kubelet/provider/prometheus/provider.go | 13 +++++------- .../cisco-sdwan/report/metrics.go | 5 ++--- pkg/collector/corechecks/oracle/statements.go | 5 ++--- .../language/reader/reader.go | 5 +---- .../servicediscovery/usm/service.go | 6 ++---- .../corechecks/snmp/internal/common/utils.go | 5 +---- .../snmp/internal/fetch/fetch_column.go | 11 ++++------ .../snmp/internal/fetch/fetch_scalar.go | 14 ++++++------- .../snmp/internal/profile/profile_resolver.go | 7 +++---- .../snmp/internal/valuestore/values.go | 5 ++--- .../corechecks/system/disk/disk/disk.go | 8 ++----- pkg/collector/runner/tracker/tracker.go | 5 ++--- pkg/collector/scheduler.go | 12 +++++------ pkg/collector/stats.go | 9 +++----- pkg/compliance/aptconfig/aptconfig.go | 5 ++--- pkg/compliance/data.go | 8 ++----- pkg/compliance/dbconfig/loader.go | 9 +++----- .../tools/k8s_types_generator/main.go | 9 ++------ pkg/config/legacy/converter.go | 10 ++++----- pkg/config/model/config_overrides.go | 6 +++--- pkg/config/nodetreemodel/helpers.go | 5 +---- pkg/config/nodetreemodel/struct_node.go | 8 ++----- pkg/config/remote/api/http.go | 5 ++--- pkg/config/remote/client/client.go | 21 ++++--------------- pkg/config/remote/service/service.go | 13 +++++------- pkg/ebpf/ksyms.go | 3 ++- pkg/flare/clusteragent/cluster_checks.go | 8 ++----- pkg/fleet/installer/setup/common/config.go | 5 ++--- .../auto_multiline_detection/pattern_table.go | 3 ++- .../auto_multiline_detection/tokenizer.go | 10 ++------- pkg/logs/launchers/file/launcher.go | 3 ++- pkg/logs/launchers/listener/tcp.go | 3 ++- pkg/logs/service/services.go | 5 +++-- pkg/logs/sources/sources.go | 11 +++++----- pkg/network/encoding/marshal/format.go | 8 +++---- pkg/network/go/binversion/buildinfo.go | 10 ++------- pkg/network/netlink/circuit_breaker.go | 8 +------ pkg/process/checks/chunking_test.go | 5 +---- pkg/process/checks/process_discovery_check.go | 5 +---- pkg/process/checks/process_nix.go | 7 +------ .../metadata/workloadmeta/extractor.go | 5 ++--- pkg/process/runner/submitter.go | 13 +++--------- pkg/security/config/config.go | 13 ++++-------- pkg/security/generators/accessors/doc/doc.go | 5 ++--- .../syscall_table_generator.go | 8 ++----- pkg/security/secl/compiler/eval/operators.go | 21 +++++-------------- pkg/security/secl/compiler/eval/rule.go | 5 +---- pkg/security/secl/model/consts_common.go | 5 ++--- pkg/security/secl/rules/ruleset.go | 6 ++---- pkg/security/seclog/logger.go | 11 +++++----- .../invocationlifecycle/lifecycle.go | 5 ++--- pkg/serverless/tags/tags.go | 13 ++++-------- .../trace/inferredspan/inferred_span.go | 5 ++--- pkg/tagset/composite_tags.go | 21 +++++++------------ pkg/tagset/hash_generator.go | 10 ++------- pkg/tagset/hashed_tags_pvt.go | 10 ++++++--- pkg/trace/agent/agent.go | 5 +---- pkg/trace/sampler/coresampler.go | 5 +---- pkg/trace/stats/span_concentrator.go | 7 +------ pkg/trace/testutil/generate.go | 5 +---- pkg/trace/writer/sender.go | 5 ++--- pkg/util/cache/basic_cache.go | 5 ++--- pkg/util/cloudproviders/gce/gce_tags.go | 8 ++----- pkg/util/containers/metadata/metadata.go | 9 +++----- pkg/util/ec2/ec2_tags.go | 7 +++---- pkg/util/fxutil/test.go | 3 ++- pkg/util/hostname/validate/validate.go | 8 ++----- pkg/util/kubernetes/apiserver/apiserver.go | 5 ++--- .../apiserver/controllers/hpa_controller.go | 6 ++---- .../apiserver/controllers/wpa_controller.go | 6 ++---- pkg/util/kubernetes/autoscalers/processor.go | 8 +++---- pkg/util/port/portlist/netstat_darwin.go | 5 +---- test/fakeintake/aggregator/common.go | 8 +++---- 123 files changed, 310 insertions(+), 597 deletions(-) diff --git a/cmd/agent/common/autodiscovery.go b/cmd/agent/common/autodiscovery.go index 67a220b7067507..8d7a8ce17e6815 100644 --- a/cmd/agent/common/autodiscovery.go +++ b/cmd/agent/common/autodiscovery.go @@ -10,6 +10,7 @@ import ( "errors" "fmt" "path/filepath" + "slices" "time" "go.uber.org/atomic" @@ -277,12 +278,7 @@ func waitForConfigsFromAD(ctx context.Context, } else { // match configs with names in checkNames match = func(cfg integration.Config) bool { - for _, checkName := range checkNames { - if cfg.Name == checkName { - return true - } - } - return false + return slices.Contains(checkNames, cfg.Name) } } diff --git a/cmd/agent/subcommands/run/internal/clcrunnerapi/v1/clcrunner.go b/cmd/agent/subcommands/run/internal/clcrunnerapi/v1/clcrunner.go index 6b23cc4256ee5c..1cf524b4a6bdea 100644 --- a/cmd/agent/subcommands/run/internal/clcrunnerapi/v1/clcrunner.go +++ b/cmd/agent/subcommands/run/internal/clcrunnerapi/v1/clcrunner.go @@ -10,6 +10,7 @@ package v1 import ( "encoding/json" + "maps" "net/http" "github.com/gorilla/mux" @@ -67,9 +68,7 @@ func getCLCRunnerStats(w http.ResponseWriter, _ *http.Request, ac autodiscovery. func flattenCLCStats(stats status.CLCChecks) map[string]status.CLCStats { flatened := make(map[string]status.CLCStats) for _, checks := range stats.Checks { - for checkID, checkStats := range checks { - flatened[checkID] = checkStats - } + maps.Copy(flatened, checks) } return flatened diff --git a/cmd/serverless-init/cloudservice/appservice.go b/cmd/serverless-init/cloudservice/appservice.go index df9a35099de525..003bd058874d9d 100644 --- a/cmd/serverless-init/cloudservice/appservice.go +++ b/cmd/serverless-init/cloudservice/appservice.go @@ -7,6 +7,7 @@ package cloudservice import ( + "maps" "os" "github.com/DataDog/datadog-agent/pkg/trace/traceutil" @@ -38,9 +39,7 @@ func (a *AppService) GetTags() map[string]string { "_dd.origin": a.GetOrigin(), } - for key, value := range traceutil.GetAppServicesTags() { - tags[key] = value - } + maps.Copy(tags, traceutil.GetAppServicesTags()) return tags } diff --git a/cmd/serverless-init/tag/tag.go b/cmd/serverless-init/tag/tag.go index 538e0b5dfb8b64..cd668f9a6d9605 100644 --- a/cmd/serverless-init/tag/tag.go +++ b/cmd/serverless-init/tag/tag.go @@ -7,6 +7,7 @@ package tag import ( + "maps" "os" "strings" @@ -52,9 +53,7 @@ func GetBaseTagsMapWithMetadata(metadata map[string]string, versionMode string) } } - for key, value := range metadata { - tagsMap[key] = value - } + maps.Copy(tagsMap, metadata) tagsMap[versionMode] = tags.GetExtensionVersion() tagsMap[tags.ComputeStatsKey] = tags.ComputeStatsValue diff --git a/cmd/trace-agent/test/testsuite/traces_test.go b/cmd/trace-agent/test/testsuite/traces_test.go index 93790de58b6efd..c0feb469bad898 100644 --- a/cmd/trace-agent/test/testsuite/traces_test.go +++ b/cmd/trace-agent/test/testsuite/traces_test.go @@ -6,6 +6,7 @@ package testsuite import ( + "slices" "strings" "testing" "time" @@ -97,7 +98,7 @@ func TestTraces(t *testing.T) { t.Fatal(err) } waitForTrace(t, &r, func(v *pb.AgentPayload) { - payloadsEqual(t, append(p[:2], p[3:]...), v) + payloadsEqual(t, slices.Delete(p, 2, 3), v) }) }) diff --git a/comp/core/autodiscovery/autodiscoveryimpl/stats.go b/comp/core/autodiscovery/autodiscoveryimpl/stats.go index d8b31175ece2c5..8833859ae6650e 100644 --- a/comp/core/autodiscovery/autodiscoveryimpl/stats.go +++ b/comp/core/autodiscovery/autodiscoveryimpl/stats.go @@ -7,6 +7,7 @@ package autodiscoveryimpl import ( "expvar" + "maps" "sync" "github.com/mohae/deepcopy" @@ -63,9 +64,7 @@ func (es *acErrorStats) getConfigErrors() map[string]string { defer es.m.RUnlock() configCopy := make(map[string]string) - for k, v := range es.config { - configCopy[k] = v - } + maps.Copy(configCopy, es.config) return configCopy } diff --git a/comp/core/autodiscovery/autodiscoveryimpl/store.go b/comp/core/autodiscovery/autodiscoveryimpl/store.go index 96e2b4f8ec3f11..878ded23c3c6f5 100644 --- a/comp/core/autodiscovery/autodiscoveryimpl/store.go +++ b/comp/core/autodiscovery/autodiscoveryimpl/store.go @@ -6,6 +6,7 @@ package autodiscoveryimpl import ( + "maps" "sync" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" @@ -157,9 +158,7 @@ func (s *store) setIDsOfChecksWithSecrets(checkIDs map[checkid.ID]checkid.ID) { s.m.Lock() defer s.m.Unlock() - for idWithResolvedSecrets, idWithEncryptedSecrets := range checkIDs { - s.idsOfChecksWithSecrets[idWithResolvedSecrets] = idWithEncryptedSecrets - } + maps.Copy(s.idsOfChecksWithSecrets, checkIDs) } func (s *store) getIDOfCheckWithEncryptedSecrets(idCheckWithResolvedSecrets checkid.ID) checkid.ID { diff --git a/comp/core/autodiscovery/autodiscoveryimpl/templatecache.go b/comp/core/autodiscovery/autodiscoveryimpl/templatecache.go index 668500fcfea97e..23d88d51c171e7 100644 --- a/comp/core/autodiscovery/autodiscoveryimpl/templatecache.go +++ b/comp/core/autodiscovery/autodiscoveryimpl/templatecache.go @@ -7,6 +7,7 @@ package autodiscoveryimpl import ( "fmt" + "slices" "strings" "sync" @@ -111,7 +112,7 @@ func (cache *templateCache) del(tpl integration.Config) error { } else { for i, digest := range digests { if digest == d { - cache.adIDToDigests[id] = append(digests[:i], digests[i+1:]...) + cache.adIDToDigests[id] = slices.Delete(digests, i, i+1) break } } diff --git a/comp/core/autodiscovery/listeners/common.go b/comp/core/autodiscovery/listeners/common.go index 6326397f9cf675..23865cbebf8d02 100644 --- a/comp/core/autodiscovery/listeners/common.go +++ b/comp/core/autodiscovery/listeners/common.go @@ -11,6 +11,7 @@ package listeners import ( "fmt" "hash/fnv" + "maps" "strconv" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/common/types" @@ -116,9 +117,7 @@ func getPrometheusIncludeAnnotations() types.PrometheusAnnotations { log.Errorf("Couldn't init check configuration: %v", err) continue } - for k, v := range check.AD.GetIncludeAnnotations() { - annotations[k] = v - } + maps.Copy(annotations, check.AD.GetIncludeAnnotations()) } return annotations } diff --git a/comp/core/autodiscovery/listeners/container.go b/comp/core/autodiscovery/listeners/container.go index 46bb7db2b2d5d0..4a571f88203001 100644 --- a/comp/core/autodiscovery/listeners/container.go +++ b/comp/core/autodiscovery/listeners/container.go @@ -9,6 +9,7 @@ package listeners import ( "errors" + "maps" "sort" "strings" "time" @@ -151,9 +152,7 @@ func (l *ContainerListener) createContainerService(entity workloadmeta.Entity) { } hosts := make(map[string]string) - for host, ip := range container.NetworkIPs { - hosts[host] = ip - } + maps.Copy(hosts, container.NetworkIPs) if rancherIP, ok := docker.FindRancherIPInLabels(container.Labels); ok { hosts["rancher"] = rancherIP diff --git a/comp/core/autodiscovery/providers/config_reader.go b/comp/core/autodiscovery/providers/config_reader.go index f048953469884f..c7e551bed0956f 100644 --- a/comp/core/autodiscovery/providers/config_reader.go +++ b/comp/core/autodiscovery/providers/config_reader.go @@ -10,6 +10,7 @@ import ( "fmt" "os" "path/filepath" + "slices" "strings" "sync" "time" @@ -454,12 +455,7 @@ func GetIntegrationConfigFromFile(name, fpath string) (integration.Config, error } func containsString(slice []string, str string) bool { - for _, s := range slice { - if s == str { - return true - } - } - return false + return slices.Contains(slice, str) } // ResetReader is only for unit tests diff --git a/comp/core/autodiscovery/providers/consul.go b/comp/core/autodiscovery/providers/consul.go index a6b3816f7aba10..fcd68384c08788 100644 --- a/comp/core/autodiscovery/providers/consul.go +++ b/comp/core/autodiscovery/providers/consul.go @@ -12,6 +12,7 @@ import ( "fmt" "math" "net/url" + "slices" "sort" "strings" @@ -287,12 +288,7 @@ func (p *ConsulConfigProvider) getJSONValue(ctx context.Context, key string) ([] func isTemplateField(key string) bool { tplKeys := []string{instancePath, checkNamePath, initConfigPath} - for _, tpl := range tplKeys { - if key == tpl { - return true - } - } - return false + return slices.Contains(tplKeys, key) } // GetConfigErrors is not implemented for the ConsulConfigProvider diff --git a/comp/core/autodiscovery/providers/container.go b/comp/core/autodiscovery/providers/container.go index 846d967682b60c..ed8e8efe365dcf 100644 --- a/comp/core/autodiscovery/providers/container.go +++ b/comp/core/autodiscovery/providers/container.go @@ -10,6 +10,7 @@ package providers import ( "context" "fmt" + "maps" "strings" "sync" @@ -113,9 +114,7 @@ func (k *ContainerConfigProvider) processEvents(evBundle workloadmeta.EventBundl } configsToUnschedule := make(map[string]integration.Config) - for digest, config := range configCache { - configsToUnschedule[digest] = config - } + maps.Copy(configsToUnschedule, configCache) for _, config := range configs { digest := config.Digest() @@ -282,9 +281,7 @@ func (k *ContainerConfigProvider) GetConfigErrors() map[string]ErrorMsgSet { errors := make(map[string]ErrorMsgSet, len(k.configErrors)) - for entity, errset := range k.configErrors { - errors[entity] = errset - } + maps.Copy(errors, k.configErrors) return errors } diff --git a/comp/core/autodiscovery/providers/remote_config.go b/comp/core/autodiscovery/providers/remote_config.go index 24b00bbd68b335..7ab76d50d4dd4e 100644 --- a/comp/core/autodiscovery/providers/remote_config.go +++ b/comp/core/autodiscovery/providers/remote_config.go @@ -9,6 +9,7 @@ import ( "context" "encoding/json" "fmt" + "maps" "regexp" "strings" "sync" @@ -83,9 +84,7 @@ func (rc *RemoteConfigProvider) GetConfigErrors() map[string]ErrorMsgSet { errors := make(map[string]ErrorMsgSet, len(rc.configErrors)) - for entity, errset := range rc.configErrors { - errors[entity] = errset - } + maps.Copy(errors, rc.configErrors) return errors } diff --git a/comp/core/secrets/secretsimpl/secrets.go b/comp/core/secrets/secretsimpl/secrets.go index 0088213ac3d75d..3b12be54ade48b 100644 --- a/comp/core/secrets/secretsimpl/secrets.go +++ b/comp/core/secrets/secretsimpl/secrets.go @@ -13,6 +13,7 @@ import ( "encoding/json" "fmt" "io" + stdmaps "maps" "net/http" "path/filepath" "regexp" @@ -405,13 +406,7 @@ func (r *secretResolver) matchesAllowlist(handle string) bool { if !allowlistEnabled { return true } - for _, secretCtx := range r.origin[handle] { - if secretMatchesAllowlist(secretCtx) { - return true - } - } - // the handle does not appear for a setting that is in the allowlist - return false + return slices.ContainsFunc(r.origin[handle], secretMatchesAllowlist) } // for all secrets returned by the backend command, notify subscribers (if allowlist lets them), @@ -451,9 +446,7 @@ func (r *secretResolver) processSecretResponse(secretResponse map[string]string, handleInfoList = append(handleInfoList, handleInfo{Name: handle, Places: places}) } // add results to the cache - for handle, secretValue := range secretResponse { - r.cache[handle] = secretValue - } + stdmaps.Copy(r.cache, secretResponse) // return info about the handles sorted by their name sort.Slice(handleInfoList, func(i, j int) bool { return handleInfoList[i].Name < handleInfoList[j].Name diff --git a/comp/core/settings/settingsimpl/settingsimpl.go b/comp/core/settings/settingsimpl/settingsimpl.go index 669e22149a3791..a4f1b8126c9449 100644 --- a/comp/core/settings/settingsimpl/settingsimpl.go +++ b/comp/core/settings/settingsimpl/settingsimpl.go @@ -8,6 +8,7 @@ package settingsimpl import ( "html" + "maps" "net/http" "sync" @@ -63,9 +64,7 @@ func (s *settingsRegistry) RuntimeSettings() map[string]settings.RuntimeSetting s.rwMutex.RLock() defer s.rwMutex.RUnlock() settingsCopy := map[string]settings.RuntimeSetting{} - for k, v := range s.settings { - settingsCopy[k] = v - } + maps.Copy(settingsCopy, s.settings) return settingsCopy } diff --git a/comp/core/status/statusimpl/common_header_provider.go b/comp/core/status/statusimpl/common_header_provider.go index 4c6a0643f0be3b..c38c1f1259b508 100644 --- a/comp/core/status/statusimpl/common_header_provider.go +++ b/comp/core/status/statusimpl/common_header_provider.go @@ -46,9 +46,7 @@ func (h *headerProvider) Name() string { } func (h *headerProvider) JSON(_ bool, stats map[string]interface{}) error { - for k, v := range h.data() { - stats[k] = v - } + maps.Copy(stats, h.data()) return nil } diff --git a/comp/core/status/statusimpl/status_test.go b/comp/core/status/statusimpl/status_test.go index ac1009220e498a..569237e942163c 100644 --- a/comp/core/status/statusimpl/status_test.go +++ b/comp/core/status/statusimpl/status_test.go @@ -9,6 +9,7 @@ import ( "encoding/json" "fmt" "io" + "maps" "os" "runtime" "strings" @@ -50,9 +51,7 @@ func (m mockProvider) JSON(_ bool, stats map[string]interface{}) error { return fmt.Errorf("JSON error") } - for key, value := range m.data { - stats[key] = value - } + maps.Copy(stats, m.data) return nil } @@ -97,9 +96,7 @@ func (m mockHeaderProvider) JSON(_ bool, stats map[string]interface{}) error { return fmt.Errorf("JSON error") } - for key, value := range m.data { - stats[key] = value - } + maps.Copy(stats, m.data) return nil } diff --git a/comp/core/tagger/api/getlist.go b/comp/core/tagger/api/getlist.go index 36cc6fa6b71af1..849b9d10af4c43 100644 --- a/comp/core/tagger/api/getlist.go +++ b/comp/core/tagger/api/getlist.go @@ -10,7 +10,7 @@ import ( "encoding/json" "fmt" "io" - "sort" + "slices" "strings" "github.com/fatih/color" @@ -54,9 +54,7 @@ func printTaggerEntities(w io.Writer, tr *types.TaggerListResponse) { } // sort sources for deterministic output - sort.Slice(sources, func(i, j int) bool { - return sources[i] < sources[j] - }) + slices.Sort(sources) for _, source := range sources { fmt.Fprintf(w, "== Source %s =\n=", source) @@ -65,9 +63,7 @@ func printTaggerEntities(w io.Writer, tr *types.TaggerListResponse) { // sort tags for easy comparison tags := tagItem.Tags[source] - sort.Slice(tags, func(i, j int) bool { - return tags[i] < tags[j] - }) + slices.Sort(tags) for i, tag := range tags { tagInfo := strings.Split(tag, ":") diff --git a/comp/core/tagger/collectors/workloadmeta_extract.go b/comp/core/tagger/collectors/workloadmeta_extract.go index 282089acfa228c..9884990cbd83cb 100644 --- a/comp/core/tagger/collectors/workloadmeta_extract.go +++ b/comp/core/tagger/collectors/workloadmeta_extract.go @@ -9,6 +9,7 @@ import ( "encoding/json" "errors" "fmt" + "slices" "strconv" "strings" @@ -369,18 +370,9 @@ func (c *WorkloadMetaCollector) extractTagsFromPodEntity(pod *workloadmeta.Kuber tagList.AddLow(tags.KubeAutoscalerKind, "datadogpodautoscaler") } - kubeServiceDisabled := false - for _, disabledTag := range pkgconfigsetup.Datadog().GetStringSlice("kubernetes_ad_tags_disabled") { - if disabledTag == "kube_service" { - kubeServiceDisabled = true - break - } - } - for _, disabledTag := range strings.Split(pod.Annotations["tags.datadoghq.com/disable"], ",") { - if disabledTag == "kube_service" { - kubeServiceDisabled = true - break - } + kubeServiceDisabled := slices.Contains(pkgconfigsetup.Datadog().GetStringSlice("kubernetes_ad_tags_disabled"), "kube_service") + if slices.Contains(strings.Split(pod.Annotations["tags.datadoghq.com/disable"], ","), "kube_service") { + kubeServiceDisabled = true } if !kubeServiceDisabled { for _, svc := range pod.KubeServices { diff --git a/comp/core/tagger/taglist/taglist.go b/comp/core/tagger/taglist/taglist.go index 9a2bf1196e083b..72924245ac33e6 100644 --- a/comp/core/tagger/taglist/taglist.go +++ b/comp/core/tagger/taglist/taglist.go @@ -8,6 +8,7 @@ package taglist import ( "fmt" + "maps" "strings" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" @@ -117,8 +118,6 @@ func (l *TagList) Copy() *TagList { func deepCopyMap(in map[string]bool) map[string]bool { out := make(map[string]bool, len(in)) - for key, value := range in { - out[key] = value - } + maps.Copy(out, in) return out } diff --git a/comp/core/tagger/tagstore/entity_tags.go b/comp/core/tagger/tagstore/entity_tags.go index ed62d45849109d..84edddd8d601e8 100644 --- a/comp/core/tagger/tagstore/entity_tags.go +++ b/comp/core/tagger/tagstore/entity_tags.go @@ -7,6 +7,7 @@ package tagstore import ( "maps" + "slices" "sort" "strings" "time" @@ -227,7 +228,7 @@ func (e *EntityTagsWithMultipleSources) tagsBySource() map[string][]string { tagsBySource := make(map[string][]string) for source, tags := range e.sourceTags { - allTags := append([]string{}, tags.lowCardTags...) + allTags := slices.Clone(tags.lowCardTags) allTags = append(allTags, tags.orchestratorCardTags...) allTags = append(allTags, tags.highCardTags...) tagsBySource[source] = allTags diff --git a/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/utils_test.go b/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/utils_test.go index 6b24f9b7f955a8..d336079aa3ac38 100644 --- a/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/utils_test.go +++ b/comp/core/workloadmeta/collectors/util/kubernetes_resource_parsers/utils_test.go @@ -8,6 +8,7 @@ package kubernetesresourceparsers import ( + "maps" "reflect" "testing" @@ -75,8 +76,6 @@ func Test_filterMapStringKey(t *testing.T) { func copyMap(in map[string]string) map[string]string { out := make(map[string]string, len(in)) - for key, value := range in { - out[key] = value - } + maps.Copy(out, in) return out } diff --git a/comp/core/workloadmeta/impl/cached_entity.go b/comp/core/workloadmeta/impl/cached_entity.go index 6e27a2cd2844d2..61d8bdf51fc06b 100644 --- a/comp/core/workloadmeta/impl/cached_entity.go +++ b/comp/core/workloadmeta/impl/cached_entity.go @@ -6,6 +6,7 @@ package workloadmetaimpl import ( + "maps" "reflect" "sort" @@ -105,9 +106,7 @@ func (e *cachedEntity) copy() *cachedEntity { copy(newEntity.sortedSources, e.sortedSources) - for source, entity := range e.sources { - newEntity.sources[source] = entity - } + maps.Copy(newEntity.sources, e.sources) return newEntity } diff --git a/comp/core/workloadmeta/impl/store.go b/comp/core/workloadmeta/impl/store.go index b6288f36f453a6..778e1621520f77 100644 --- a/comp/core/workloadmeta/impl/store.go +++ b/comp/core/workloadmeta/impl/store.go @@ -8,6 +8,7 @@ package workloadmetaimpl import ( "context" "fmt" + "slices" "sort" "strconv" "time" @@ -178,7 +179,7 @@ func (w *workloadmeta) Unsubscribe(ch chan wmdef.EventBundle) { for i, sub := range w.subscribers { if sub.ch == ch { - w.subscribers = append(w.subscribers[:i], w.subscribers[i+1:]...) + w.subscribers = slices.Delete(w.subscribers, i, i+1) telemetry.Subscribers.Dec() close(ch) return diff --git a/comp/dogstatsd/listeners/udp_test.go b/comp/dogstatsd/listeners/udp_test.go index 329e1d6c28261d..861e009b83adc7 100644 --- a/comp/dogstatsd/listeners/udp_test.go +++ b/comp/dogstatsd/listeners/udp_test.go @@ -10,6 +10,7 @@ import ( "errors" "fmt" "net" + "slices" "strconv" "testing" "time" @@ -216,7 +217,7 @@ func getLocalIP() string { } func defaultMConn(addr net.Addr, bs ...[]byte) *udpMock { - return &udpMock{bufferList: append([][]byte{}, bs...), address: addr} + return &udpMock{bufferList: slices.Clone(bs), address: addr} } type udpMock struct { diff --git a/comp/dogstatsd/pidmap/pidmapimpl/state.go b/comp/dogstatsd/pidmap/pidmapimpl/state.go index a67eab737caf7e..f7c4dbf1308b23 100644 --- a/comp/dogstatsd/pidmap/pidmapimpl/state.go +++ b/comp/dogstatsd/pidmap/pidmapimpl/state.go @@ -8,6 +8,7 @@ package pidmapimpl import ( "errors" + "maps" "sync" "go.uber.org/fx" @@ -41,9 +42,7 @@ func (s *state) SetPidMap(m map[int32]string) { defer s.mux.Unlock() s.pidMap = pidContainerMap{} - for pid, containerID := range m { - s.pidMap[pid] = containerID - } + maps.Copy(s.pidMap, m) } // ContainerIDForPID returns the matching container id for a pid, or an error if not found. diff --git a/comp/dogstatsd/server/blocklist.go b/comp/dogstatsd/server/blocklist.go index 72340a2a885840..074120d74517b8 100644 --- a/comp/dogstatsd/server/blocklist.go +++ b/comp/dogstatsd/server/blocklist.go @@ -6,6 +6,7 @@ package server import ( + "slices" "sort" "strings" ) @@ -16,7 +17,7 @@ type blocklist struct { } func newBlocklist(data []string, matchPrefix bool) blocklist { - data = append([]string{}, data...) + data = slices.Clone(data) sort.Strings(data) if matchPrefix && len(data) > 0 { diff --git a/comp/forwarder/defaultforwarder/internal/retry/on_disk_retry_queue.go b/comp/forwarder/defaultforwarder/internal/retry/on_disk_retry_queue.go index 04c2eb4ee610af..79f819ba91e5cb 100644 --- a/comp/forwarder/defaultforwarder/internal/retry/on_disk_retry_queue.go +++ b/comp/forwarder/defaultforwarder/internal/retry/on_disk_retry_queue.go @@ -10,6 +10,7 @@ import ( "os" "path" "path/filepath" + "slices" "sort" "time" @@ -198,7 +199,7 @@ func (s *onDiskRetryQueue) removeFileAt(index int) error { // Remove the file from s.filenames also in case of error to not // fail on the next call. - s.filenames = append(s.filenames[:index], s.filenames[index+1:]...) + s.filenames = slices.Delete(s.filenames, index, index+1) size, err := filesystem.GetFileSize(filename) if err != nil { diff --git a/comp/forwarder/defaultforwarder/resolver/domain_resolver.go b/comp/forwarder/defaultforwarder/resolver/domain_resolver.go index 7966eb23013de3..281c1392ab2e14 100644 --- a/comp/forwarder/defaultforwarder/resolver/domain_resolver.go +++ b/comp/forwarder/defaultforwarder/resolver/domain_resolver.go @@ -9,6 +9,7 @@ package resolver import ( + "slices" "sync" "github.com/DataDog/datadog-agent/comp/forwarder/defaultforwarder/endpoints" @@ -197,10 +198,8 @@ func (r *MultiDomainResolver) RegisterAlternateDestination(domain string, forwar dType: dType, } r.overrides[forwarderName] = d - for _, alternateDomain := range r.alternateDomainList { - if alternateDomain == domain { - return - } + if slices.Contains(r.alternateDomainList, domain) { + return } r.alternateDomainList = append(r.alternateDomainList, domain) } diff --git a/comp/metadata/inventoryagent/inventoryagentimpl/inventoryagent.go b/comp/metadata/inventoryagent/inventoryagentimpl/inventoryagent.go index 570caf4e9699b8..f9d5f58352cb2e 100644 --- a/comp/metadata/inventoryagent/inventoryagentimpl/inventoryagent.go +++ b/comp/metadata/inventoryagent/inventoryagentimpl/inventoryagent.go @@ -10,6 +10,7 @@ import ( "context" "encoding/json" "fmt" + "maps" "net/http" "reflect" "strings" @@ -461,9 +462,7 @@ func (ia *inventoryagent) getPayload() marshaler.JSONMarshaler { // Create a static copy of agentMetadata for the payload data := make(agentMetadata) - for k, v := range ia.data { - data[k] = v - } + maps.Copy(data, ia.data) ia.getConfigs(data) @@ -481,8 +480,6 @@ func (ia *inventoryagent) Get() map[string]interface{} { defer ia.m.Unlock() data := map[string]interface{}{} - for k, v := range ia.data { - data[k] = v - } + maps.Copy(data, ia.data) return data } diff --git a/comp/metadata/inventorychecks/inventorychecksimpl/inventorychecks.go b/comp/metadata/inventorychecks/inventorychecksimpl/inventorychecks.go index e3da9ab20fd74a..ceaff39ec6b216 100644 --- a/comp/metadata/inventorychecks/inventorychecksimpl/inventorychecks.go +++ b/comp/metadata/inventorychecks/inventorychecksimpl/inventorychecks.go @@ -11,6 +11,7 @@ import ( "encoding/json" "expvar" "fmt" + "maps" "net/http" "reflect" "sync" @@ -184,9 +185,7 @@ func (ic *inventorychecksImpl) GetInstanceMetadata(instanceID string) map[string res := map[string]interface{}{} if instance, found := ic.data[instanceID]; found { - for name, value := range instance.metadata { - res[name] = value - } + maps.Copy(res, instance.metadata) } return res } @@ -211,9 +210,7 @@ func (ic *inventorychecksImpl) getPayload(withConfigs bool) marshaler.JSONMarsha cm := check.GetMetadata(c, withConfigs) if checkData, found := ic.data[string(c.ID())]; found { - for key, val := range checkData.metadata { - cm[key] = val - } + maps.Copy(cm, checkData.metadata) } checkName := c.String() diff --git a/comp/metadata/inventoryotel/inventoryotelimpl/inventoryotel.go b/comp/metadata/inventoryotel/inventoryotelimpl/inventoryotel.go index 1612697ca8c268..e1ed7e1399f0c4 100644 --- a/comp/metadata/inventoryotel/inventoryotelimpl/inventoryotel.go +++ b/comp/metadata/inventoryotel/inventoryotelimpl/inventoryotel.go @@ -12,6 +12,7 @@ import ( "encoding/json" "fmt" "io" + "maps" "net/http" "net/url" "path" @@ -269,8 +270,6 @@ func (i *inventoryotel) Get() otelMetadata { defer i.m.Unlock() data := otelMetadata{} - for k, v := range i.data { - data[k] = v - } + maps.Copy(data, i.data) return data } diff --git a/comp/netflow/goflowlib/metric.go b/comp/netflow/goflowlib/metric.go index 82b53d878639ba..6d4eff38b5c0d8 100644 --- a/comp/netflow/goflowlib/metric.go +++ b/comp/netflow/goflowlib/metric.go @@ -7,8 +7,11 @@ package goflowlib import ( "fmt" - "github.com/DataDog/datadog-agent/pkg/metrics" + "slices" + promClient "github.com/prometheus/client_model/go" + + "github.com/DataDog/datadog-agent/pkg/metrics" ) type remapperType func(string) string @@ -22,12 +25,7 @@ type mappedMetric struct { } func (m mappedMetric) isAllowedTagKey(tagKey string) bool { - for _, allowedTagKey := range m.allowedTagKeys { - if tagKey == allowedTagKey { - return true - } - } - return false + return slices.Contains(m.allowedTagKeys, tagKey) } var collectorTypeMapper = map[string]string{ diff --git a/comp/netflow/portrollup/portrollup.go b/comp/netflow/portrollup/portrollup.go index 7556594d7b6458..50db4e35270db8 100644 --- a/comp/netflow/portrollup/portrollup.go +++ b/comp/netflow/portrollup/portrollup.go @@ -10,6 +10,7 @@ package portrollup import ( + "slices" "sync" "github.com/DataDog/datadog-agent/comp/netflow/common" @@ -140,10 +141,7 @@ func (prs *EndpointPairPortRollupStore) IsEphemeralFromKeys(srcToDestKey string, destToSourcePortCount := len(prs.curStore[destToSrcKey]) prs.storeMu.RUnlock() - portCount := sourceToDestPortCount - if destToSourcePortCount > sourceToDestPortCount { - portCount = destToSourcePortCount - } + portCount := max(destToSourcePortCount, sourceToDestPortCount) if portCount < prs.portRollupThreshold { return NoEphemeralPort @@ -209,10 +207,8 @@ func buildStoreKey(sourceAddr []byte, destAddr []byte, endpointT endpointType, p } func appendPort(ports []uint16, newPort uint16) []uint16 { - for _, port := range ports { - if port == newPort { - return ports - } + if slices.Contains(ports, newPort) { + return ports } return append(ports, newPort) } diff --git a/comp/rdnsquerier/impl/rdnsquerier_testutils.go b/comp/rdnsquerier/impl/rdnsquerier_testutils.go index d1b43364ac2247..f577febdb9e823 100644 --- a/comp/rdnsquerier/impl/rdnsquerier_testutils.go +++ b/comp/rdnsquerier/impl/rdnsquerier_testutils.go @@ -9,12 +9,14 @@ package rdnsquerierimpl import ( "context" + "maps" "testing" "time" - "github.com/DataDog/datadog-agent/pkg/util/fxutil" "go.uber.org/fx" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/comp/core/config" @@ -143,9 +145,7 @@ func (ts *testState) makeExpectedTelemetry(checkTelemetry map[string]float64) ma "cache_expired": 0.0, "cache_max_size_exceeded": 0.0, } - for name, value := range checkTelemetry { - et[name] = value - } + maps.Copy(et, checkTelemetry) return et } diff --git a/comp/snmptraps/formatter/formatterimpl/formatter.go b/comp/snmptraps/formatter/formatterimpl/formatter.go index df73ce58816808..58bee7ae5b930d 100644 --- a/comp/snmptraps/formatter/formatterimpl/formatter.go +++ b/comp/snmptraps/formatter/formatterimpl/formatter.go @@ -9,6 +9,7 @@ package formatterimpl import ( "encoding/json" "fmt" + "maps" "strings" "github.com/gosnmp/gosnmp" @@ -143,9 +144,7 @@ func (f JSONFormatter) formatV1Trap(packet *packet.SnmpPacket) map[string]interf f.sender.Count(telemetryVarsNotEnriched, float64(enrichmentFailed), "", tags) } data["variables"] = parsedVariables - for key, value := range enrichedValues { - data[key] = value - } + maps.Copy(data, enrichedValues) return data } @@ -194,9 +193,7 @@ func (f JSONFormatter) formatTrap(packet *packet.SnmpPacket) (map[string]interfa f.sender.Count(telemetryVarsNotEnriched, float64(enrichmentFailed), "", tags) } data["variables"] = parsedVariables - for key, value := range enrichedValues { - data[key] = value - } + maps.Copy(data, enrichedValues) return data, nil } diff --git a/comp/trace/agent/impl/agent.go b/comp/trace/agent/impl/agent.go index 8d890896a524f1..6b956ab6059088 100644 --- a/comp/trace/agent/impl/agent.go +++ b/comp/trace/agent/impl/agent.go @@ -162,10 +162,7 @@ func prepGoRuntime(tracecfg *tracecfg.AgentConfig) { if mp, ok := os.LookupEnv("GOMAXPROCS"); ok { log.Infof("GOMAXPROCS manually set to %v", mp) } else if tracecfg.MaxCPU > 0 { - allowedCores := int(tracecfg.MaxCPU) - if allowedCores < 1 { - allowedCores = 1 - } + allowedCores := max(int(tracecfg.MaxCPU), 1) if allowedCores < runtime.GOMAXPROCS(0) { log.Infof("apm_config.max_cpu is less than current GOMAXPROCS. Setting GOMAXPROCS to (%v) %d\n", allowedCores, allowedCores) runtime.GOMAXPROCS(int(allowedCores)) diff --git a/pkg/aggregator/demultiplexer.go b/pkg/aggregator/demultiplexer.go index 7990ce4973e379..518b2efe5976d1 100644 --- a/pkg/aggregator/demultiplexer.go +++ b/pkg/aggregator/demultiplexer.go @@ -177,11 +177,7 @@ func getDogStatsDWorkerAndPipelineCount(vCPUs int) (int, int) { // - one per aggregation pipeline (time sampler) // - the rest for workers // But we want at minimum 2 workers. - dsdWorkerCount = vCPUs - 1 - pipelineCount - - if dsdWorkerCount < 2 { - dsdWorkerCount = 2 - } + dsdWorkerCount = max(vCPUs-1-pipelineCount, 2) } else if autoAdjustStrategy == AutoAdjustStrategyMaxThroughput { // we will auto-adjust the pipeline and workers count to maximize throughput // @@ -197,10 +193,7 @@ func getDogStatsDWorkerAndPipelineCount(vCPUs int) (int, int) { // - half the amount of vCPUS - 1 for the amount of pipeline routines // - this last routine for the listener routine - dsdWorkerCount = vCPUs / 2 - if dsdWorkerCount < 2 { // minimum 2 workers - dsdWorkerCount = 2 - } + dsdWorkerCount = max(vCPUs/2, 2) pipelineCount = dsdWorkerCount - 1 if pipelineCount <= 0 { // minimum 1 pipeline @@ -219,10 +212,7 @@ func getDogStatsDWorkerAndPipelineCount(vCPUs int) (int, int) { // This also has the benefit of increasing compression efficiency by having // similarly tagged metrics flushed together. - dsdWorkerCount = vCPUs / 2 - if dsdWorkerCount < 2 { - dsdWorkerCount = 2 - } + dsdWorkerCount = max(vCPUs/2, 2) pipelineCount = pkgconfigsetup.Datadog().GetInt("dogstatsd_pipeline_count") if pipelineCount <= 0 { // guard against configuration mistakes diff --git a/pkg/aggregator/host_tag_provider.go b/pkg/aggregator/host_tag_provider.go index 4158756977cc90..a1f5b44e368596 100644 --- a/pkg/aggregator/host_tag_provider.go +++ b/pkg/aggregator/host_tag_provider.go @@ -8,6 +8,7 @@ package aggregator import ( "context" + "slices" "sync" hostMetadataUtils "github.com/DataDog/datadog-agent/comp/metadata/host/hostimpl/hosttags" @@ -34,7 +35,7 @@ func newHostTagProviderWithClock(clock clock.Clock) *HostTagProvider { duration := pkgconfigsetup.Datadog().GetDuration("expected_tags_duration") log.Debugf("Adding host tags to metrics for %v", duration) if pkgconfigsetup.Datadog().GetDuration("expected_tags_duration") > 0 { - p.hostTags = append([]string{}, hostMetadataUtils.Get(context.TODO(), false, pkgconfigsetup.Datadog()).System...) + p.hostTags = slices.Clone(hostMetadataUtils.Get(context.TODO(), false, pkgconfigsetup.Datadog()).System) expectedTagsDeadline := pkgconfigsetup.StartTime.Add(duration) clock.AfterFunc(expectedTagsDeadline.Sub(clock.Now()), func() { p.Lock() diff --git a/pkg/aggregator/internal/tags/store.go b/pkg/aggregator/internal/tags/store.go index a99de61d4d4c4e..19a844c2fbbe67 100644 --- a/pkg/aggregator/internal/tags/store.go +++ b/pkg/aggregator/internal/tags/store.go @@ -8,6 +8,7 @@ package tags import ( "fmt" + "maps" "math/bits" "go.uber.org/atomic" @@ -131,9 +132,7 @@ func (tc *Store) Shrink() { if len(tc.tagsByKey) < tc.cap/2 { //nolint:revive // TODO(AML) Fix revive linter new := make(map[ckey.TagsKey]*Entry, len(tc.tagsByKey)) - for k, v := range tc.tagsByKey { - new[k] = v - } + maps.Copy(new, tc.tagsByKey) tc.cap = len(new) tc.tagsByKey = new } diff --git a/pkg/aggregator/mocksender/asserts.go b/pkg/aggregator/mocksender/asserts.go index 4405c8cc10e6a1..2b1f32a4fb230c 100644 --- a/pkg/aggregator/mocksender/asserts.go +++ b/pkg/aggregator/mocksender/asserts.go @@ -9,6 +9,7 @@ package mocksender import ( + "slices" "testing" "time" @@ -157,11 +158,8 @@ func eventLike(expectedEvent, actualEvent event.Event) bool { func expectedInActual(expected, actual []string) bool { expectedCount := 0 for _, e := range expected { - for _, a := range actual { - if e == a { - expectedCount++ - break - } + if slices.Contains(actual, e) { + expectedCount++ } } return len(expected) == expectedCount diff --git a/pkg/clusteragent/autoscaling/custommetrics/provider.go b/pkg/clusteragent/autoscaling/custommetrics/provider.go index 5d50c7960e00d0..42999a82280d2b 100644 --- a/pkg/clusteragent/autoscaling/custommetrics/provider.go +++ b/pkg/clusteragent/autoscaling/custommetrics/provider.go @@ -116,10 +116,7 @@ func (p *datadogProvider) externalMetricsSetter(ctx context.Context) { if p.isServing { currentBackoff = externalMetricsBaseBackoff } else { - currentBackoff = currentBackoff * 2 - if currentBackoff > externalMetricsMaxBackoff { - currentBackoff = externalMetricsMaxBackoff - } + currentBackoff = min(currentBackoff*2, externalMetricsMaxBackoff) log.Infof("Retrying externalMetricsSetter with backoff %.0f seconds", currentBackoff.Seconds()) } time.Sleep(currentBackoff) diff --git a/pkg/clusteragent/autoscaling/workload/model/pod_autoscaler.go b/pkg/clusteragent/autoscaling/workload/model/pod_autoscaler.go index 551836e8ec56de..c6078f32903ace 100644 --- a/pkg/clusteragent/autoscaling/workload/model/pod_autoscaler.go +++ b/pkg/clusteragent/autoscaling/workload/model/pod_autoscaler.go @@ -480,10 +480,7 @@ func (p *PodAutoscalerInternal) BuildStatus(currentTime metav1.Time, currentStat } if lenActions := len(p.horizontalLastActions); lenActions > 0 { - firstIndex := lenActions - statusRetainedActions - if firstIndex < 0 { - firstIndex = 0 - } + firstIndex := max(lenActions-statusRetainedActions, 0) status.Horizontal.LastActions = slices.Clone(p.horizontalLastActions[firstIndex:lenActions]) } diff --git a/pkg/collector/check/stats/stats.go b/pkg/collector/check/stats/stats.go index fc7ff45b2bd975..eb552147142854 100644 --- a/pkg/collector/check/stats/stats.go +++ b/pkg/collector/check/stats/stats.go @@ -7,6 +7,7 @@ package stats import ( + "maps" "sync" "time" @@ -89,9 +90,7 @@ func NewSenderStats() SenderStats { func (s SenderStats) Copy() (result SenderStats) { result = s result.EventPlatformEvents = make(map[string]int64, len(s.EventPlatformEvents)) - for k, v := range s.EventPlatformEvents { - result.EventPlatformEvents[k] = v - } + maps.Copy(result.EventPlatformEvents, s.EventPlatformEvents) return result } @@ -192,10 +191,7 @@ func (cs *Stats) Add(t time.Duration, err error, warnings []error, metricStats S tlmExecutionTime.Set(float64(tms), cs.CheckName, cs.CheckLoader) } var totalExecutionTime int64 - ringSize := cs.TotalRuns - if ringSize > uint64(len(cs.ExecutionTimes)) { - ringSize = uint64(len(cs.ExecutionTimes)) - } + ringSize := min(cs.TotalRuns, uint64(len(cs.ExecutionTimes))) for i := uint64(0); i < ringSize; i++ { totalExecutionTime += cs.ExecutionTimes[i] } @@ -305,8 +301,6 @@ func TranslateEventPlatformEventTypes(aggregatorStats interface{}) (interface{}, result := make(map[string]interface{}) result["EventPlatformEvents"] = translateEventTypes(aggStats.EventPlatformEvents) result["EventPlatformEventsErrors"] = translateEventTypes(aggStats.EventPlatformEventsErrors) - for k, v := range aggStats.Other { - result[k] = v - } + maps.Copy(result, aggStats.Other) return result, nil } diff --git a/pkg/collector/check/stats/util.go b/pkg/collector/check/stats/util.go index 1939670814697a..49f1a86163cca5 100644 --- a/pkg/collector/check/stats/util.go +++ b/pkg/collector/check/stats/util.go @@ -15,12 +15,7 @@ func calculateCheckDelay(now time.Time, prevRunStats *Stats, execTime time.Durat previousCheckStartDate := prevRunStats.UpdateTimestamp - (prevRunStats.LastExecutionTime / 1e3) currentCheckStartDate := now.Unix() - int64(execTime.Seconds()) - delay := currentCheckStartDate - previousCheckStartDate - int64(prevRunStats.Interval.Seconds()) - - // delay can be negative if a check recovers from delay - if delay < 0 { - delay = 0 - } + delay := max(currentCheckStartDate-previousCheckStartDate-int64(prevRunStats.Interval.Seconds()), 0) return delay } diff --git a/pkg/collector/corechecks/cluster/ksm/kubernetes_state.go b/pkg/collector/corechecks/cluster/ksm/kubernetes_state.go index 9c57ef54293d01..27aae615056d7a 100644 --- a/pkg/collector/corechecks/cluster/ksm/kubernetes_state.go +++ b/pkg/collector/corechecks/cluster/ksm/kubernetes_state.go @@ -13,6 +13,7 @@ import ( "fmt" "maps" "regexp" + "slices" "strings" "time" @@ -257,11 +258,9 @@ func (jc *JoinsConfigWithoutLabelsMapping) setupGetAllLabels() { return } - for _, l := range jc.LabelsToGet { - if l == "*" { - jc.GetAllLabels = true - return - } + if slices.Contains(jc.LabelsToGet, "*") { + jc.GetAllLabels = true + return } } diff --git a/pkg/collector/corechecks/cluster/ksm/kubernetes_state_label_joins.go b/pkg/collector/corechecks/cluster/ksm/kubernetes_state_label_joins.go index 34c5890662c9dc..dde9a433e92c25 100644 --- a/pkg/collector/corechecks/cluster/ksm/kubernetes_state_label_joins.go +++ b/pkg/collector/corechecks/cluster/ksm/kubernetes_state_label_joins.go @@ -8,6 +8,8 @@ package ksm import ( + "slices" + ksmstore "github.com/DataDog/datadog-agent/pkg/kubestatemetrics/store" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -154,13 +156,7 @@ func (lj *labelJoiner) insertMetric(metric ksmstore.DDMetric, config *joinsConfi } for labelName, labelValue := range metric.Labels { - isALabelToMatch := false - for _, labelToMatch := range config.labelsToMatch { - if labelName == labelToMatch { - isALabelToMatch = true - break - } - } + isALabelToMatch := slices.Contains(config.labelsToMatch, labelName) if !isALabelToMatch { current.labelsToAdd = append(current.labelsToAdd, label{labelName, labelValue}) } diff --git a/pkg/collector/corechecks/cluster/ksm/kubernetes_state_transformers.go b/pkg/collector/corechecks/cluster/ksm/kubernetes_state_transformers.go index 8b8be97d79c5e0..c6e63fc8e59cab 100644 --- a/pkg/collector/corechecks/cluster/ksm/kubernetes_state_transformers.go +++ b/pkg/collector/corechecks/cluster/ksm/kubernetes_state_transformers.go @@ -10,6 +10,7 @@ package ksm import ( "fmt" "regexp" + "slices" "strings" "time" @@ -357,7 +358,7 @@ func cronJobLastScheduleTransformer(s sender.Sender, _ string, metric ksmstore.D func jobCompleteTransformer(s sender.Sender, _ string, metric ksmstore.DDMetric, hostname string, tags []string, _ time.Time) { for i, tag := range tags { if tag == "condition:true" { - tags = append(tags[:i], tags[i+1:]...) + tags = slices.Delete(tags, i, i+1) break } } @@ -381,7 +382,7 @@ func jobDurationTransformer(s sender.Sender, _ string, metric ksmstore.DDMetric, func jobFailedTransformer(s sender.Sender, _ string, metric ksmstore.DDMetric, hostname string, tags []string, _ time.Time) { for i, tag := range tags { if tag == "condition:true" { - tags = append(tags[:i], tags[i+1:]...) + tags = slices.Delete(tags, i, i+1) break } } @@ -422,7 +423,7 @@ func validateJob(val float64, tags []string) ([]string, bool) { for i, tag := range tags { if strings.HasPrefix(tag, "reason:") { if v := strings.TrimPrefix(tag, "reason:"); !validJobFailureReason(v) { - tags = append(tags[:i], tags[i+1:]...) + tags = slices.Delete(tags, i, i+1) continue } } diff --git a/pkg/collector/corechecks/cluster/kubernetesapiserver/events_common.go b/pkg/collector/corechecks/cluster/kubernetesapiserver/events_common.go index ac98dd379a60cf..59c32851a09edf 100644 --- a/pkg/collector/corechecks/cluster/kubernetesapiserver/events_common.go +++ b/pkg/collector/corechecks/cluster/kubernetesapiserver/events_common.go @@ -10,6 +10,7 @@ package kubernetesapiserver import ( "context" "fmt" + "slices" "strings" "time" @@ -446,10 +447,8 @@ func shouldCollect(ev *v1.Event, collectedTypes []collectedEventType) bool { return true } - for _, r := range f.Reasons { - if ev.Reason == r { - return true - } + if slices.Contains(f.Reasons, ev.Reason) { + return true } } diff --git a/pkg/collector/corechecks/containers/kubelet/provider/prometheus/provider.go b/pkg/collector/corechecks/containers/kubelet/provider/prometheus/provider.go index fbca9eed1c7530..29b1c285a8179e 100644 --- a/pkg/collector/corechecks/containers/kubelet/provider/prometheus/provider.go +++ b/pkg/collector/corechecks/containers/kubelet/provider/prometheus/provider.go @@ -12,8 +12,10 @@ package prometheus import ( "context" "fmt" + "maps" "math" "regexp" + "slices" "strconv" "strings" @@ -98,9 +100,7 @@ func NewProvider(config *common.KubeletConfig, transformers Transformers, scrape wildcardMetrics = append(wildcardMetrics, val) } case map[string]string: - for k1, v1 := range val { - metricMappings[k1] = v1 - } + maps.Copy(metricMappings, val) case map[interface{}]interface{}: for k1, v1 := range val { if _, ok := k1.(string); !ok { @@ -315,11 +315,8 @@ func (p *Provider) MetricTags(metric *model.Sample) []string { continue } - for i := range p.Config.ExcludeLabels { - if string(lName) == p.Config.ExcludeLabels[i] { - shouldExclude = true - break - } + if slices.Contains(p.Config.ExcludeLabels, string(lName)) { + shouldExclude = true } if shouldExclude { continue diff --git a/pkg/collector/corechecks/network-devices/cisco-sdwan/report/metrics.go b/pkg/collector/corechecks/network-devices/cisco-sdwan/report/metrics.go index 360d0586aa28fd..b02baa38196670 100644 --- a/pkg/collector/corechecks/network-devices/cisco-sdwan/report/metrics.go +++ b/pkg/collector/corechecks/network-devices/cisco-sdwan/report/metrics.go @@ -8,6 +8,7 @@ package report import ( "fmt" + "maps" "strconv" "strings" "time" @@ -345,9 +346,7 @@ func setNewSentTimestamp(newTimestamps map[string]float64, key string, ts float6 } func (ms *SDWanSender) updateTimestamps(newTimestamps map[string]float64) { - for key, ts := range newTimestamps { - ms.lastTimeSent[key] = ts - } + maps.Copy(ms.lastTimeSent, newTimestamps) } func (ms *SDWanSender) expireTimeSent() { diff --git a/pkg/collector/corechecks/oracle/statements.go b/pkg/collector/corechecks/oracle/statements.go index 18fb8dd1b79f59..c145850e7d5c9c 100644 --- a/pkg/collector/corechecks/oracle/statements.go +++ b/pkg/collector/corechecks/oracle/statements.go @@ -11,6 +11,7 @@ import ( "database/sql" "encoding/json" "fmt" + "maps" "strconv" "strings" "time" @@ -331,9 +332,7 @@ type PlanRows struct { func (c *Check) copyToPreviousMap(newMap map[StatementMetricsKeyDB]StatementMetricsMonotonicCountDB) { c.statementMetricsMonotonicCountsPrevious = make(map[StatementMetricsKeyDB]StatementMetricsMonotonicCountDB) - for k, v := range newMap { - c.statementMetricsMonotonicCountsPrevious[k] = v - } + maps.Copy(c.statementMetricsMonotonicCountsPrevious, newMap) } func handlePredicate(predicateType string, dbValue sql.NullString, payloadValue *string, statement StatementMetricsDB, c *Check, o *obfuscate.Obfuscator) { diff --git a/pkg/collector/corechecks/servicediscovery/language/reader/reader.go b/pkg/collector/corechecks/servicediscovery/language/reader/reader.go index 64919fa6ac2549..42641bb8e6a828 100644 --- a/pkg/collector/corechecks/servicediscovery/language/reader/reader.go +++ b/pkg/collector/corechecks/servicediscovery/language/reader/reader.go @@ -19,10 +19,7 @@ const stringReaderBufferSize = 1024 * 10 // It returns -1 if toFind is not present in r. // It returns an error if reading from r other than io.EOF returns an error. func Index(r io.Reader, toFind string) (int, error) { - bufLen := stringReaderBufferSize - if len(toFind) > bufLen { - bufLen = len(toFind) - } + bufLen := max(len(toFind), stringReaderBufferSize) buf := make([]byte, bufLen) bytesToFind := []byte(toFind) total := 0 diff --git a/pkg/collector/corechecks/servicediscovery/usm/service.go b/pkg/collector/corechecks/servicediscovery/usm/service.go index 1a147f801e5869..9d98d7e55eea68 100644 --- a/pkg/collector/corechecks/servicediscovery/usm/service.go +++ b/pkg/collector/corechecks/servicediscovery/usm/service.go @@ -247,10 +247,8 @@ var executableDetectors = map[string]detectorCreatorFn{ func serviceNameInjected(envs envs.Variables) bool { if env, ok := envs.Get("DD_INJECTION_ENABLED"); ok { values := strings.Split(env, ",") - for _, v := range values { - if v == "service_name" { - return true - } + if slices.Contains(values, "service_name") { + return true } } return false diff --git a/pkg/collector/corechecks/snmp/internal/common/utils.go b/pkg/collector/corechecks/snmp/internal/common/utils.go index 2d5e2d768fda29..62c243fbdc73c8 100644 --- a/pkg/collector/corechecks/snmp/internal/common/utils.go +++ b/pkg/collector/corechecks/snmp/internal/common/utils.go @@ -18,10 +18,7 @@ func CreateStringBatches(elements []string, size int) ([][]string, error) { } for i := 0; i < len(elements); i += size { - j := i + size - if j > len(elements) { - j = len(elements) - } + j := min(i+size, len(elements)) batch := elements[i:j] batches = append(batches, batch) } diff --git a/pkg/collector/corechecks/snmp/internal/fetch/fetch_column.go b/pkg/collector/corechecks/snmp/internal/fetch/fetch_column.go index 92984f14ba3317..6d785d79ce1411 100644 --- a/pkg/collector/corechecks/snmp/internal/fetch/fetch_column.go +++ b/pkg/collector/corechecks/snmp/internal/fetch/fetch_column.go @@ -7,17 +7,16 @@ package fetch import ( "fmt" + "maps" "sort" "github.com/gosnmp/gosnmp" - "github.com/DataDog/datadog-agent/pkg/util/log" - - "github.com/DataDog/datadog-agent/pkg/snmp/gosnmplib" - "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/common" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/session" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/valuestore" + "github.com/DataDog/datadog-agent/pkg/snmp/gosnmplib" + "github.com/DataDog/datadog-agent/pkg/util/log" ) func fetchColumnOidsWithBatching(sess session.Session, oids []string, oidBatchSize int, bulkMaxRepetitions uint32, fetchStrategy columnFetchStrategy) (valuestore.ColumnResultValuesType, error) { @@ -39,9 +38,7 @@ func fetchColumnOidsWithBatching(sess session.Session, oids []string, oidBatchSi retValues[columnOid] = instanceOids continue } - for oid, value := range instanceOids { - retValues[columnOid][oid] = value - } + maps.Copy(retValues[columnOid], instanceOids) } } return retValues, nil diff --git a/pkg/collector/corechecks/snmp/internal/fetch/fetch_scalar.go b/pkg/collector/corechecks/snmp/internal/fetch/fetch_scalar.go index d7b219ad72c534..da3347c63bace3 100644 --- a/pkg/collector/corechecks/snmp/internal/fetch/fetch_scalar.go +++ b/pkg/collector/corechecks/snmp/internal/fetch/fetch_scalar.go @@ -7,18 +7,18 @@ package fetch import ( "fmt" + "maps" + "slices" "sort" "strings" "github.com/gosnmp/gosnmp" - "github.com/DataDog/datadog-agent/pkg/util/log" - - "github.com/DataDog/datadog-agent/pkg/snmp/gosnmplib" - "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/common" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/session" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/valuestore" + "github.com/DataDog/datadog-agent/pkg/snmp/gosnmplib" + "github.com/DataDog/datadog-agent/pkg/util/log" ) func fetchScalarOidsWithBatching(sess session.Session, oids []string, oidBatchSize int) (valuestore.ScalarResultValuesType, error) { @@ -34,9 +34,7 @@ func fetchScalarOidsWithBatching(sess session.Session, oids []string, oidBatchSi if err != nil { return nil, fmt.Errorf("failed to fetch scalar oids: %s", err.Error()) } - for k, v := range results { - retValues[k] = v - } + maps.Copy(retValues, results) } return retValues, nil } @@ -99,7 +97,7 @@ func doFetchScalarOids(session session.Session, oids []string) (*gosnmp.SnmpPack if (zeroBaseIndex < 0) || (zeroBaseIndex > len(oids)-1) { return nil, fmt.Errorf("invalid ErrorIndex `%d` when fetching oids `%v`", scalarOids.ErrorIndex, oids) } - oids = append(oids[:zeroBaseIndex], oids[zeroBaseIndex+1:]...) + oids = slices.Delete(oids, zeroBaseIndex, zeroBaseIndex+1) if len(oids) == 0 { // If all oids are not found, return an empty packet with no variable and no error return &gosnmp.SnmpPacket{}, nil diff --git a/pkg/collector/corechecks/snmp/internal/profile/profile_resolver.go b/pkg/collector/corechecks/snmp/internal/profile/profile_resolver.go index cbbd980f93bfc3..5619cfae17fe1a 100644 --- a/pkg/collector/corechecks/snmp/internal/profile/profile_resolver.go +++ b/pkg/collector/corechecks/snmp/internal/profile/profile_resolver.go @@ -8,6 +8,7 @@ package profile import ( "expvar" "fmt" + "slices" "strings" "github.com/DataDog/datadog-agent/pkg/networkdevice/profile/profiledefinition" @@ -81,10 +82,8 @@ func recursivelyExpandBaseProfiles(parentExtend string, definition *profiledefin } baseDefinition = &profile.Definition } - for _, extend := range extendsHistory { - if extend == extendEntry { - return fmt.Errorf("cyclic profile extend detected, `%s` has already been extended, extendsHistory=`%v`", extendEntry, extendsHistory) - } + if slices.Contains(extendsHistory, extendEntry) { + return fmt.Errorf("cyclic profile extend detected, `%s` has already been extended, extendsHistory=`%v`", extendEntry, extendsHistory) } mergeProfileDefinition(definition, baseDefinition) diff --git a/pkg/collector/corechecks/snmp/internal/valuestore/values.go b/pkg/collector/corechecks/snmp/internal/valuestore/values.go index 45dc45df2d8aa5..dd82b9e4439767 100644 --- a/pkg/collector/corechecks/snmp/internal/valuestore/values.go +++ b/pkg/collector/corechecks/snmp/internal/valuestore/values.go @@ -8,6 +8,7 @@ package valuestore import ( "encoding/json" "fmt" + "maps" "sort" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -51,9 +52,7 @@ func (v *ResultValueStore) GetColumnValues(oid string) (map[string]ResultValue, return nil, fmt.Errorf("value for Column OID `%s` not found in results", oid) } retValues := make(map[string]ResultValue, len(values)) - for index, value := range values { - retValues[index] = value - } + maps.Copy(retValues, values) return retValues, nil } diff --git a/pkg/collector/corechecks/system/disk/disk/disk.go b/pkg/collector/corechecks/system/disk/disk/disk.go index fdbb4eaecea224..b43a7460a011ce 100644 --- a/pkg/collector/corechecks/system/disk/disk/disk.go +++ b/pkg/collector/corechecks/system/disk/disk/disk.go @@ -9,6 +9,7 @@ package disk import ( "regexp" + "slices" "strings" yaml "gopkg.in/yaml.v2" @@ -153,12 +154,7 @@ func (c *Check) instanceConfigure(data integration.Data) error { } func stringSliceContain(slice []string, x string) bool { - for _, e := range slice { - if e == x { - return true - } - } - return false + return slices.Contains(slice, x) } func (c *Check) applyDeviceTags(device, mountpoint string, tags []string) []string { diff --git a/pkg/collector/runner/tracker/tracker.go b/pkg/collector/runner/tracker/tracker.go index 7ce5eac14d90a5..0c4f5113bae227 100644 --- a/pkg/collector/runner/tracker/tracker.go +++ b/pkg/collector/runner/tracker/tracker.go @@ -7,6 +7,7 @@ package tracker import ( + "maps" "sync" "github.com/DataDog/datadog-agent/pkg/collector/check" @@ -78,9 +79,7 @@ func (t *RunningChecksTracker) RunningChecks() map[checkid.ID]check.Check { defer t.accessLock.RUnlock() clone := make(map[checkid.ID]check.Check) - for key, val := range t.runningChecks { - clone[key] = val - } + maps.Copy(clone, t.runningChecks) return clone } diff --git a/pkg/collector/scheduler.go b/pkg/collector/scheduler.go index d9a38aa3d395a9..559dafdce77b2d 100644 --- a/pkg/collector/scheduler.go +++ b/pkg/collector/scheduler.go @@ -9,11 +9,13 @@ package collector import ( "expvar" "fmt" + "slices" "strings" "sync" "golang.org/x/text/cases" "golang.org/x/text/language" + yaml "gopkg.in/yaml.v2" "github.com/DataDog/datadog-agent/comp/collector/collector" "github.com/DataDog/datadog-agent/comp/core/autodiscovery/integration" @@ -26,8 +28,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/containers" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/option" - - yaml "gopkg.in/yaml.v2" ) var ( @@ -145,11 +145,9 @@ func (s *CheckScheduler) Stop() {} // addLoader adds a new Loader that AutoConfig can use to load a check. func (s *CheckScheduler) addLoader(loader check.Loader) { - for _, l := range s.loaders { - if l == loader { - log.Warnf("Loader %s was already added, skipping...", loader) - return - } + if slices.Contains(s.loaders, loader) { + log.Warnf("Loader %s was already added, skipping...", loader) + return } s.loaders = append(s.loaders, loader) } diff --git a/pkg/collector/stats.go b/pkg/collector/stats.go index b128a2c18ed3c8..d5c93c167f7c3a 100644 --- a/pkg/collector/stats.go +++ b/pkg/collector/stats.go @@ -6,6 +6,7 @@ package collector import ( + "maps" "sync" checkid "github.com/DataDog/datadog-agent/pkg/collector/check/id" @@ -50,9 +51,7 @@ func (ce *collectorErrors) getLoaderErrors() map[string]map[string]string { for check, loaderErrors := range ce.loader { errorsCopy[check] = make(map[string]string) - for loader, loaderError := range loaderErrors { - errorsCopy[check][loader] = loaderError - } + maps.Copy(errorsCopy[check], loaderErrors) } return errorsCopy @@ -70,9 +69,7 @@ func (ce *collectorErrors) getRunErrors() map[checkid.ID]string { defer ce.m.RUnlock() runCopy := make(map[checkid.ID]string) - for k, v := range ce.run { - runCopy[k] = v - } + maps.Copy(runCopy, ce.run) return runCopy } diff --git a/pkg/compliance/aptconfig/aptconfig.go b/pkg/compliance/aptconfig/aptconfig.go index 79b6cdeb210411..5ffa4beb95ec20 100644 --- a/pkg/compliance/aptconfig/aptconfig.go +++ b/pkg/compliance/aptconfig/aptconfig.go @@ -11,6 +11,7 @@ import ( "context" "io" "io/fs" + "maps" "os" "path/filepath" "sort" @@ -52,9 +53,7 @@ func LoadConfiguration(_ context.Context, hostroot string) (string, interface{}) data, err := readFileLimit(path) if err == nil { conf := parseAPTConfiguration(data) - for k, v := range conf { - aptConfs[k] = v - } + maps.Copy(aptConfs, conf) } } diff --git a/pkg/compliance/data.go b/pkg/compliance/data.go index 847075ae49e79c..c0b2a2e2af3f15 100644 --- a/pkg/compliance/data.go +++ b/pkg/compliance/data.go @@ -11,6 +11,7 @@ import ( "fmt" "os" "path/filepath" + "slices" "sort" "strings" "time" @@ -386,12 +387,7 @@ func (r *Rule) IsXCCDF() bool { // HasScope tests if the rule has the given scope. func (r *Rule) HasScope(scope RuleScope) bool { - for _, s := range r.Scopes { - if s == scope { - return true - } - } - return false + return slices.Contains(r.Scopes, scope) } // Valid is a validation check required for InputSpec to be executed. diff --git a/pkg/compliance/dbconfig/loader.go b/pkg/compliance/dbconfig/loader.go index d70f673a070eeb..e6795627a58560 100644 --- a/pkg/compliance/dbconfig/loader.go +++ b/pkg/compliance/dbconfig/loader.go @@ -12,6 +12,7 @@ import ( "bytes" "context" "io" + "maps" "os" "path/filepath" "strings" @@ -338,9 +339,7 @@ func parsePGConfig(hostroot, configPath string, includeDepth int) (map[string]in } included, ok := parsePGConfig(hostroot, includedPath, includeDepth+1) if ok { - for k, v := range included { - config[k] = v - } + maps.Copy(config, included) } } else if key == "include_dir" { includedPath := val @@ -353,9 +352,7 @@ func parsePGConfig(hostroot, configPath string, includeDepth int) (map[string]in includedFile := relPath(hostroot, match) included, ok := parsePGConfig(hostroot, includedFile, includeDepth+1) if ok { - for k, v := range included { - config[k] = v - } + maps.Copy(config, included) } } } else { diff --git a/pkg/compliance/tools/k8s_types_generator/main.go b/pkg/compliance/tools/k8s_types_generator/main.go index 4c4adbde55730b..24a746a17c7cfd 100644 --- a/pkg/compliance/tools/k8s_types_generator/main.go +++ b/pkg/compliance/tools/k8s_types_generator/main.go @@ -267,7 +267,7 @@ func checkForKnownFlags(allKomponents []*komponent, knownFlags []string) { for _, conf := range komponent.confs { i := slices.Index(knownFlagsClone, "--"+conf.flagName) if i >= 0 { - knownFlagsClone = append(knownFlagsClone[:i], knownFlagsClone[i+1:]...) + knownFlagsClone = slices.Delete(knownFlagsClone, i, i+1) } } } @@ -896,10 +896,5 @@ func download(url, dist string) error { } func isKnownFlag(flag string) bool { - for _, cisFlag := range knownFlags { - if "--"+flag == cisFlag { - return true - } - } - return false + return slices.Contains(knownFlags, "--"+flag) } diff --git a/pkg/config/legacy/converter.go b/pkg/config/legacy/converter.go index f64ca2eb1f19fe..59da03d96605d0 100644 --- a/pkg/config/legacy/converter.go +++ b/pkg/config/legacy/converter.go @@ -10,6 +10,7 @@ import ( "encoding/csv" "fmt" "net/url" + "slices" "strconv" "strings" @@ -393,12 +394,9 @@ func buildHistogramAggregates(agentConfig Config) []string { for _, res := range result { found := false - for _, val := range validValues { - if res == val { - histogramBuild = append(histogramBuild, res) - found = true - break - } + if slices.Contains(validValues, res) { + histogramBuild = append(histogramBuild, res) + found = true } if !found { // print the value skipped because invalid value diff --git a/pkg/config/model/config_overrides.go b/pkg/config/model/config_overrides.go index 93670a2521c2fb..18dbc31b516735 100644 --- a/pkg/config/model/config_overrides.go +++ b/pkg/config/model/config_overrides.go @@ -5,6 +5,8 @@ package model +import "maps" + var ( overrideVars = make(map[string]interface{}) overrideFuncs = make([]func(Config), 0) @@ -31,9 +33,7 @@ func AddOverride(name string, value interface{}) { // overriding config variables. // This method must be called before Load() to be effective. func AddOverrides(vars map[string]interface{}) { - for k, v := range vars { - overrideVars[k] = v - } + maps.Copy(overrideVars, vars) } // ApplyOverrideFuncs calls overrideFuncs diff --git a/pkg/config/nodetreemodel/helpers.go b/pkg/config/nodetreemodel/helpers.go index 9cbb3beb8e2d19..79ec11b61a1d46 100644 --- a/pkg/config/nodetreemodel/helpers.go +++ b/pkg/config/nodetreemodel/helpers.go @@ -63,10 +63,7 @@ func parseSizeInBytes(sizeStr string) uint { } } - size := cast.ToInt(sizeStr) - if size < 0 { - size = 0 - } + size := max(cast.ToInt(sizeStr), 0) return safeMul(uint(size), multiplier) } diff --git a/pkg/config/nodetreemodel/struct_node.go b/pkg/config/nodetreemodel/struct_node.go index 0fc5c6939e6dc1..7fb282f12f6477 100644 --- a/pkg/config/nodetreemodel/struct_node.go +++ b/pkg/config/nodetreemodel/struct_node.go @@ -8,6 +8,7 @@ package nodetreemodel import ( "fmt" "reflect" + "slices" "strings" "unicode" "unicode/utf8" @@ -38,12 +39,7 @@ func (n *structNodeImpl) GetChild(key string) (Node, error) { func (n *structNodeImpl) HasChild(name string) bool { names := n.ChildrenKeys() - for _, n := range names { - if n == name { - return true - } - } - return false + return slices.Contains(names, name) } func (n *structNodeImpl) Merge(InnerNode) error { diff --git a/pkg/config/remote/api/http.go b/pkg/config/remote/api/http.go index 375ee14ce555bc..2510b2ef332ac4 100644 --- a/pkg/config/remote/api/http.go +++ b/pkg/config/remote/api/http.go @@ -11,6 +11,7 @@ import ( "context" "fmt" "io" + "maps" "net/http" "net/url" "sync" @@ -240,9 +241,7 @@ func (c *HTTPClient) UpdatePARJWT(jwt string) { func (c *HTTPClient) addHeaders(req *http.Request) { c.headerLock.RLock() - for k, v := range c.header { - req.Header[k] = v - } + maps.Copy(req.Header, c.header) c.headerLock.RUnlock() } diff --git a/pkg/config/remote/client/client.go b/pkg/config/remote/client/client.go index f54229491ef0e6..7752d9845ce761 100644 --- a/pkg/config/remote/client/client.go +++ b/pkg/config/remote/client/client.go @@ -12,18 +12,17 @@ import ( "crypto/rand" "encoding/hex" "fmt" + "slices" "sync" "time" + "github.com/pkg/errors" "go.uber.org/atomic" - "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" - "github.com/pkg/errors" - "github.com/DataDog/datadog-agent/pkg/config/remote/meta" pbgo "github.com/DataDog/datadog-agent/pkg/proto/pbgo/core" "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" @@ -331,13 +330,7 @@ func (c *Client) SubscribeAll(product string, listener Listener) { defer c.m.Unlock() // Make sure the product belongs to the list of requested product - knownProduct := false - for _, p := range c.products { - if p == product { - knownProduct = true - break - } - } + knownProduct := slices.Contains(c.products, product) if !knownProduct { c.products = append(c.products, product) } @@ -502,13 +495,7 @@ func (c *Client) update() error { } func containsProduct(products []string, product string) bool { - for _, p := range products { - if product == p { - return true - } - } - - return false + return slices.Contains(products, product) } func (c *Client) applyUpdate(pbUpdate *pbgo.ClientGetConfigsResponse) ([]string, error) { diff --git a/pkg/config/remote/service/service.go b/pkg/config/remote/service/service.go index 33d5cd4b67ee5b..ec818b4fba2441 100644 --- a/pkg/config/remote/service/service.go +++ b/pkg/config/remote/service/service.go @@ -17,29 +17,28 @@ import ( "errors" "expvar" "fmt" + "maps" "net/url" "path" "strconv" "sync" "time" - "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" - "github.com/DataDog/go-tuf/data" tufutil "github.com/DataDog/go-tuf/util" "github.com/benbjohnson/clock" "github.com/secure-systems-lab/go-securesystemslib/cjson" + "go.etcd.io/bbolt" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" - - "go.etcd.io/bbolt" + "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" "github.com/DataDog/datadog-agent/pkg/config/model" "github.com/DataDog/datadog-agent/pkg/config/remote/api" rdata "github.com/DataDog/datadog-agent/pkg/config/remote/data" "github.com/DataDog/datadog-agent/pkg/config/remote/uptane" pbgo "github.com/DataDog/datadog-agent/pkg/proto/pbgo/core" + "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" "github.com/DataDog/datadog-agent/pkg/util/backoff" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -903,9 +902,7 @@ func (s *CoreAgentService) ConfigGetState() (*pbgo.GetStateConfigResponse, error response.DirectorState[metaName] = &pbgo.FileMetaState{Version: metaState.Version, Hash: metaState.Hash} } - for targetName, targetHash := range state.TargetFilenames { - response.TargetFilenames[targetName] = targetHash - } + maps.Copy(response.TargetFilenames, state.TargetFilenames) return response, nil } diff --git a/pkg/ebpf/ksyms.go b/pkg/ebpf/ksyms.go index 6b0e0217b6ea8d..1829ee6c471b8d 100644 --- a/pkg/ebpf/ksyms.go +++ b/pkg/ebpf/ksyms.go @@ -12,6 +12,7 @@ import ( "fmt" "io" "os" + "slices" "sort" "strconv" "sync" @@ -135,7 +136,7 @@ func findKernelFuncs(ksymsReader io.Reader, writeKsym func(string, uint64), chec } writeKsym(string(check[idx]), s) - check = append(check[:idx], check[idx+1:]...) + check = slices.Delete(check, idx, idx+1) } } if err := scanner.Err(); err != nil { diff --git a/pkg/flare/clusteragent/cluster_checks.go b/pkg/flare/clusteragent/cluster_checks.go index 641df234484666..3f9d24732cfde7 100644 --- a/pkg/flare/clusteragent/cluster_checks.go +++ b/pkg/flare/clusteragent/cluster_checks.go @@ -9,6 +9,7 @@ import ( "encoding/json" "fmt" "io" + "slices" "sort" "text/tabwriter" @@ -154,10 +155,5 @@ func GetEndpointsChecks(w io.Writer, checkName string) error { } func endpointschecksEnabled() bool { - for _, provider := range pkgconfigsetup.Datadog().GetStringSlice("extra_config_providers") { - if provider == names.KubeEndpointsRegisterName { - return true - } - } - return false + return slices.Contains(pkgconfigsetup.Datadog().GetStringSlice("extra_config_providers"), names.KubeEndpointsRegisterName) } diff --git a/pkg/fleet/installer/setup/common/config.go b/pkg/fleet/installer/setup/common/config.go index 9bd7afc2f449a9..273f7ab598021e 100644 --- a/pkg/fleet/installer/setup/common/config.go +++ b/pkg/fleet/installer/setup/common/config.go @@ -7,6 +7,7 @@ package common import ( "fmt" + "maps" "os" "path/filepath" @@ -251,9 +252,7 @@ func mergeConfig(base interface{}, override interface{}) (interface{}, error) { func mergeMap(base, override map[string]interface{}) (map[string]interface{}, error) { merged := make(map[string]interface{}) - for k, v := range base { - merged[k] = v - } + maps.Copy(merged, base) for k := range override { v, err := mergeConfig(base[k], override[k]) if err != nil { diff --git a/pkg/logs/internal/decoder/auto_multiline_detection/pattern_table.go b/pkg/logs/internal/decoder/auto_multiline_detection/pattern_table.go index b5056214e28659..ef23f925376f54 100644 --- a/pkg/logs/internal/decoder/auto_multiline_detection/pattern_table.go +++ b/pkg/logs/internal/decoder/auto_multiline_detection/pattern_table.go @@ -8,6 +8,7 @@ package automultilinedetection import ( "fmt" + "slices" "sync" "github.com/DataDog/datadog-agent/pkg/logs/internal/decoder/auto_multiline_detection/tokens" @@ -121,7 +122,7 @@ func (p *PatternTable) evictLRU() { mini = i } } - p.table = append(p.table[:mini], p.table[mini+1:]...) + p.table = slices.Delete(p.table, mini, mini+1) } // DumpTable returns a slice of DiagnosticRow structs that represent the current state of the table. diff --git a/pkg/logs/internal/decoder/auto_multiline_detection/tokenizer.go b/pkg/logs/internal/decoder/auto_multiline_detection/tokenizer.go index 8274e00f8507ed..bf740d938a31aa 100644 --- a/pkg/logs/internal/decoder/auto_multiline_detection/tokenizer.go +++ b/pkg/logs/internal/decoder/auto_multiline_detection/tokenizer.go @@ -40,10 +40,7 @@ func NewTokenizer(maxEvalBytes int) *Tokenizer { // ProcessAndContinue enriches the message context with tokens. // This implements the Heuristic interface - this heuristic does not stop processing. func (t *Tokenizer) ProcessAndContinue(context *messageContext) bool { - maxBytes := len(context.rawMessage) - if maxBytes > t.maxEvalBytes { - maxBytes = t.maxEvalBytes - } + maxBytes := min(len(context.rawMessage), t.maxEvalBytes) tokens, indicies := t.tokenize(context.rawMessage[:maxBytes]) context.tokens = tokens context.tokenIndicies = indicies @@ -324,10 +321,7 @@ func tokensToString(tokens []tokens.Token) string { // used for comparison. This function is optimized to exit early if the match is impossible // without having to compare all of the tokens. func isMatch(seqA []tokens.Token, seqB []tokens.Token, thresh float64) bool { - count := len(seqA) - if len(seqB) < count { - count = len(seqB) - } + count := min(len(seqB), len(seqA)) if count == 0 { return len(seqA) == len(seqB) diff --git a/pkg/logs/launchers/file/launcher.go b/pkg/logs/launchers/file/launcher.go index 56ff9044571500..ffa3b5e9c77d69 100644 --- a/pkg/logs/launchers/file/launcher.go +++ b/pkg/logs/launchers/file/launcher.go @@ -8,6 +8,7 @@ package file import ( "regexp" + "slices" "time" tagger "github.com/DataDog/datadog-agent/comp/core/tagger/def" @@ -258,7 +259,7 @@ func (s *Launcher) removeSource(source *sources.LogSource) { for i, src := range s.activeSources { if src == source { // no need to stop the tailer here, it will be stopped in the next iteration of scan. - s.activeSources = append(s.activeSources[:i], s.activeSources[i+1:]...) + s.activeSources = slices.Delete(s.activeSources, i, i+1) break } } diff --git a/pkg/logs/launchers/listener/tcp.go b/pkg/logs/launchers/listener/tcp.go index 9b7e61dad7c29b..2c468b76be0341 100644 --- a/pkg/logs/launchers/listener/tcp.go +++ b/pkg/logs/launchers/listener/tcp.go @@ -8,6 +8,7 @@ package listener import ( "fmt" "net" + "slices" "sync" "time" @@ -160,7 +161,7 @@ func (l *TCPListener) stopTailer(tailer *tailer.Tailer) { if t == tailer { // Only stop the tailer if it has not already been stopped tailer.Stop() - l.tailers = append(l.tailers[:i], l.tailers[i+1:]...) + l.tailers = slices.Delete(l.tailers, i, i+1) break } } diff --git a/pkg/logs/service/services.go b/pkg/logs/service/services.go index ae8450c4167ca4..c4675dd7440283 100644 --- a/pkg/logs/service/services.go +++ b/pkg/logs/service/services.go @@ -6,6 +6,7 @@ package service import ( + "slices" "sync" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -73,7 +74,7 @@ func (s *Services) GetAddedServicesForType(serviceType string) chan *Service { added := make(chan *Service) s.addedPerType[serviceType] = append(s.addedPerType[serviceType], added) - existingServices := append([]*Service{}, s.services...) // clone for goroutine + existingServices := slices.Clone(s.services) // clone for goroutine go func() { for _, svc := range existingServices { if svc.Type == serviceType { @@ -106,7 +107,7 @@ func (s *Services) GetAllAddedServices() chan *Service { added := make(chan *Service) s.allAdded = append(s.allAdded, added) - existingServices := append([]*Service{}, s.services...) // clone for goroutine + existingServices := slices.Clone(s.services) // clone for goroutine go func() { for _, svc := range existingServices { added <- svc diff --git a/pkg/logs/sources/sources.go b/pkg/logs/sources/sources.go index e6f5918c68e5f9..5b24cd7297880f 100644 --- a/pkg/logs/sources/sources.go +++ b/pkg/logs/sources/sources.go @@ -6,6 +6,7 @@ package sources import ( + "slices" "sync" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -74,7 +75,7 @@ func (s *LogSources) RemoveSource(source *LogSource) { var sourceFound bool for i, src := range s.sources { if src == source { - s.sources = append(s.sources[:i], s.sources[i+1:]...) + s.sources = slices.Delete(s.sources, i, i+1) sourceFound = true break } @@ -108,7 +109,7 @@ func (s *LogSources) SubscribeAll() (added chan *LogSource, removed chan *LogSou s.added = append(s.added, added) s.removed = append(s.removed, removed) - existingSources := append([]*LogSource{}, s.sources...) // clone for goroutine + existingSources := slices.Clone(s.sources) // clone for goroutine go func() { for _, source := range existingSources { added <- source @@ -140,7 +141,7 @@ func (s *LogSources) SubscribeForType(sourceType string) (added chan *LogSource, } s.removedByType[sourceType] = append(s.removedByType[sourceType], removed) - existingSources := append([]*LogSource{}, s.sources...) // clone for goroutine + existingSources := slices.Clone(s.sources) // clone for goroutine go func() { for _, source := range existingSources { if source.Config.Type == sourceType { @@ -168,7 +169,7 @@ func (s *LogSources) GetAddedForType(sourceType string) chan *LogSource { stream := make(chan *LogSource) s.addedByType[sourceType] = append(s.addedByType[sourceType], stream) - existingSources := append([]*LogSource{}, s.sources...) // clone for goroutine + existingSources := slices.Clone(s.sources) // clone for goroutine go func() { for _, source := range existingSources { if source.Config.Type == sourceType { @@ -187,6 +188,6 @@ func (s *LogSources) GetSources() []*LogSource { s.mu.Lock() defer s.mu.Unlock() - clone := append([]*LogSource{}, s.sources...) + clone := slices.Clone(s.sources) return clone } diff --git a/pkg/network/encoding/marshal/format.go b/pkg/network/encoding/marshal/format.go index 3e95a4a2c00b6a..1e756cafee9c96 100644 --- a/pkg/network/encoding/marshal/format.go +++ b/pkg/network/encoding/marshal/format.go @@ -6,11 +6,11 @@ package marshal import ( + "maps" "math" - "github.com/twmb/murmur3" - model "github.com/DataDog/agent-payload/v5/process" + "github.com/twmb/murmur3" "github.com/DataDog/datadog-agent/pkg/network" "github.com/DataDog/datadog-agent/pkg/process/util" @@ -42,9 +42,7 @@ func mergeDynamicTags(dynamicTags ...map[string]struct{}) (out map[string]struct out = tags continue } - for k, v := range tags { - out[k] = v - } + maps.Copy(out, tags) } return } diff --git a/pkg/network/go/binversion/buildinfo.go b/pkg/network/go/binversion/buildinfo.go index e95fd862ffec5c..b21a48ba1aaebd 100644 --- a/pkg/network/go/binversion/buildinfo.go +++ b/pkg/network/go/binversion/buildinfo.go @@ -182,10 +182,7 @@ type elfExe struct { func (x *elfExe) ReadData(addr, size uint64) ([]byte, error) { for _, prog := range x.f.Progs { if prog.Vaddr <= addr && addr <= prog.Vaddr+prog.Filesz-1 { - n := prog.Vaddr + prog.Filesz - addr - if n > size { - n = size - } + n := min(prog.Vaddr+prog.Filesz-addr, size) data := make([]byte, n) _, err := prog.ReadAt(data, int64(addr-prog.Vaddr)) if err != nil { @@ -202,10 +199,7 @@ func (x *elfExe) ReadData(addr, size uint64) ([]byte, error) { func (x *elfExe) ReadDataWithPool(addr uint64, data []byte) error { for _, prog := range x.f.Progs { if prog.Vaddr <= addr && addr <= prog.Vaddr+prog.Filesz-1 { - expectedSizeToRead := prog.Vaddr + prog.Filesz - addr - if expectedSizeToRead > uint64(len(data)) { - expectedSizeToRead = uint64(len(data)) - } + expectedSizeToRead := min(prog.Vaddr+prog.Filesz-addr, uint64(len(data))) readSize, err := prog.ReadAt(data, int64(addr-prog.Vaddr)) // If there is an error, and the error is not "EOF" caused due to the fact we tried to read too much, // then report an error. diff --git a/pkg/network/netlink/circuit_breaker.go b/pkg/network/netlink/circuit_breaker.go index 8cd62122c25d73..ac771c60f6e48d 100644 --- a/pkg/network/netlink/circuit_breaker.go +++ b/pkg/network/netlink/circuit_breaker.go @@ -114,13 +114,7 @@ func (c *CircuitBreaker) update(now time.Time) { } lastUpdate := c.lastUpdate.Load() - deltaInSec := float64(now.UnixNano()-lastUpdate) / float64(time.Second.Nanoseconds()) - - // This is to avoid a divide by 0 panic or a spurious spike due - // to a reset followed immediately by an update call - if deltaInSec < 1.0 { - deltaInSec = 1.0 - } + deltaInSec := max(float64(now.UnixNano()-lastUpdate)/float64(time.Second.Nanoseconds()), 1.0) // Calculate the event rate (EWMA) eventCount := c.eventCount.Swap(0) diff --git a/pkg/process/checks/chunking_test.go b/pkg/process/checks/chunking_test.go index 04b141ac00d824..05d90d95dda8fb 100644 --- a/pkg/process/checks/chunking_test.go +++ b/pkg/process/checks/chunking_test.go @@ -310,10 +310,7 @@ func TestWeightProcess(t *testing.T) { expectedWeight := len(serialized) assert.Equal(t, expectedWeight, p.Size()) - allowedDelta := int(float64(actualWeight) * allowedPctDelta / 100.) - if allowedDelta < allowedMinDelta { - allowedDelta = allowedMinDelta - } + allowedDelta := max(int(float64(actualWeight)*allowedPctDelta/100.), allowedMinDelta) withinLimits := expectedWeight-allowedDelta <= actualWeight && actualWeight <= expectedWeight+allowedDelta assert.True( diff --git a/pkg/process/checks/process_discovery_check.go b/pkg/process/checks/process_discovery_check.go index 967d29dc8f62a5..533ee389a2a7ec 100644 --- a/pkg/process/checks/process_discovery_check.go +++ b/pkg/process/checks/process_discovery_check.go @@ -160,10 +160,7 @@ func chunkProcessDiscoveries(procs []*model.ProcessDiscovery, size int) [][]*mod chunks := make([][]*model.ProcessDiscovery, 0, chunkCount) for i := 0; i < len(procs); i += size { - end := i + size - if end > len(procs) { - end = len(procs) - } + end := min(i+size, len(procs)) chunks = append(chunks, procs[i:end]) } diff --git a/pkg/process/checks/process_nix.go b/pkg/process/checks/process_nix.go index 1fd0bc4d894523..74cca4fe851979 100644 --- a/pkg/process/checks/process_nix.go +++ b/pkg/process/checks/process_nix.go @@ -78,12 +78,7 @@ func calculatePct(deltaProc, deltaTime, numCPU float64) float32 { // Calculates utilization split across all CPUs. A busy-loop process // on a 2-CPU-core system would be reported as 50% instead of 100%. - overalPct := (deltaProc / deltaTime) * 100 - - // Sometimes we get values that don't make sense, so we clamp to 100% - if overalPct > 100 { - overalPct = 100 - } + overalPct := min((deltaProc/deltaTime)*100, 100) // In order to emulate top we multiply utilization by # of CPUs so a busy loop would be 100%. pct := overalPct * numCPU diff --git a/pkg/process/metadata/workloadmeta/extractor.go b/pkg/process/metadata/workloadmeta/extractor.go index 25db230e57263f..f32ed0d3887bd6 100644 --- a/pkg/process/metadata/workloadmeta/extractor.go +++ b/pkg/process/metadata/workloadmeta/extractor.go @@ -7,6 +7,7 @@ package workloadmeta import ( + "maps" "runtime" "strconv" "sync" @@ -218,9 +219,7 @@ func (w *WorkloadMetaExtractor) GetAllProcessEntities() (map[string]*ProcessEnti // Store pointers in map to avoid duplicating ProcessEntity data snapshot := make(map[string]*ProcessEntity) - for id, proc := range w.cache { - snapshot[id] = proc - } + maps.Copy(snapshot, w.cache) return snapshot, w.cacheVersion } diff --git a/pkg/process/runner/submitter.go b/pkg/process/runner/submitter.go index f4fd31c1cd92c9..06974cbcb386b4 100644 --- a/pkg/process/runner/submitter.go +++ b/pkg/process/runner/submitter.go @@ -10,13 +10,13 @@ import ( "hash/fnv" "net/http" "os" + "slices" "strconv" "sync" "time" - "github.com/benbjohnson/clock" - model "github.com/DataDog/agent-payload/v5/process" + "github.com/benbjohnson/clock" "github.com/DataDog/datadog-agent/comp/core/config" log "github.com/DataDog/datadog-agent/comp/core/log/def" @@ -27,7 +27,6 @@ import ( "github.com/DataDog/datadog-agent/comp/forwarder/defaultforwarder/transaction" "github.com/DataDog/datadog-agent/comp/process/forwarders" "github.com/DataDog/datadog-agent/comp/process/types" - pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" "github.com/DataDog/datadog-agent/pkg/process/checks" "github.com/DataDog/datadog-agent/pkg/process/runner/endpoint" @@ -463,13 +462,7 @@ func (s *CheckSubmitter) getRequestID(start time.Time, chunkIndex int) string { } func (s *CheckSubmitter) shouldDropPayload(check string) bool { - for _, d := range s.dropCheckPayloads { - if d == check { - return true - } - } - - return false + return slices.Contains(s.dropCheckPayloads, check) } func (s *CheckSubmitter) heartbeat(heartbeatTicker *clock.Ticker) { diff --git a/pkg/security/config/config.go b/pkg/security/config/config.go index bc325dc5b865e3..b0e5c6f7d9a503 100644 --- a/pkg/security/config/config.go +++ b/pkg/security/config/config.go @@ -11,6 +11,7 @@ import ( "fmt" "math" "net" + "slices" "strings" "time" @@ -392,10 +393,7 @@ func NewRuntimeSecurityConfig() (*RuntimeSecurityConfig, error) { ActivityDumpAutoSuppressionEnabled: pkgconfigsetup.SystemProbe().GetBool("runtime_security_config.activity_dump.auto_suppression.enabled"), // activity dump dynamic fields ActivityDumpMaxDumpSize: func() int { - mds := pkgconfigsetup.SystemProbe().GetInt("runtime_security_config.activity_dump.max_dump_size") - if mds < ADMinMaxDumSize { - mds = ADMinMaxDumSize - } + mds := max(pkgconfigsetup.SystemProbe().GetInt("runtime_security_config.activity_dump.max_dump_size"), ADMinMaxDumSize) return mds * (1 << 10) }, @@ -559,11 +557,8 @@ func (c *RuntimeSecurityConfig) sanitize() error { // sanitizeRuntimeSecurityConfigActivityDump ensures that runtime_security_config.activity_dump is properly configured func (c *RuntimeSecurityConfig) sanitizeRuntimeSecurityConfigActivityDump() error { var execFound bool - for _, evtType := range c.ActivityDumpTracedEventTypes { - if evtType == model.ExecEventType { - execFound = true - break - } + if slices.Contains(c.ActivityDumpTracedEventTypes, model.ExecEventType) { + execFound = true } if !execFound { c.ActivityDumpTracedEventTypes = append(c.ActivityDumpTracedEventTypes, model.ExecEventType) diff --git a/pkg/security/generators/accessors/doc/doc.go b/pkg/security/generators/accessors/doc/doc.go index 74443c799e51a4..3e04d5f820f17a 100644 --- a/pkg/security/generators/accessors/doc/doc.go +++ b/pkg/security/generators/accessors/doc/doc.go @@ -13,6 +13,7 @@ import ( "os" "path/filepath" "regexp" + "slices" "sort" "strings" @@ -193,9 +194,7 @@ func GenerateDocJSON(module *common.Module, seclModelPath, outputPath string) er property := &properties[i] if propertyDoc, exists := cachedDocumentation[property.PropertyKey]; exists { property.DocLink = propertyDoc.Link - sort.Slice(propertyDoc.Prefixes, func(i, j int) bool { - return propertyDoc.Prefixes[i] < propertyDoc.Prefixes[j] - }) + slices.Sort(propertyDoc.Prefixes) } } diff --git a/pkg/security/generators/syscall_table_generator/syscall_table_generator.go b/pkg/security/generators/syscall_table_generator/syscall_table_generator.go index 4100efa4e3614b..d607b9a24914ca 100644 --- a/pkg/security/generators/syscall_table_generator/syscall_table_generator.go +++ b/pkg/security/generators/syscall_table_generator/syscall_table_generator.go @@ -17,6 +17,7 @@ import ( "os/exec" "path" "regexp" + "slices" "strconv" "strings" "text/template" @@ -243,10 +244,5 @@ func generateStringer(inputPath, outputPath string) error { } func containsStringSlice(slice []string, value string) bool { - for _, current := range slice { - if current == value { - return true - } - } - return false + return slices.Contains(slice, value) } diff --git a/pkg/security/secl/compiler/eval/operators.go b/pkg/security/secl/compiler/eval/operators.go index 9fd97b9a98177f..58309342456441 100644 --- a/pkg/security/secl/compiler/eval/operators.go +++ b/pkg/security/secl/compiler/eval/operators.go @@ -8,6 +8,7 @@ package eval import ( "net" + "slices" "strings" ) @@ -624,12 +625,7 @@ func StringArrayMatches(a *StringArrayEvaluator, b *StringValuesEvaluator, state } arrayOp := func(a []string, b *StringValues) bool { - for _, as := range a { - if b.Matches(as) { - return true - } - } - return false + return slices.ContainsFunc(a, b.Matches) } if a.EvalFnc != nil && b.EvalFnc != nil { @@ -697,10 +693,8 @@ func IntArrayMatches(a *IntArrayEvaluator, b *IntArrayEvaluator, state *State) ( arrayOp := func(a []int, b []int) bool { for _, va := range a { - for _, vb := range b { - if va == vb { - return true - } + if slices.Contains(b, va) { + return true } } return false @@ -776,12 +770,7 @@ func ArrayBoolContains(a *BoolEvaluator, b *BoolArrayEvaluator, state *State) (* } arrayOp := func(a bool, b []bool) bool { - for _, v := range b { - if v == a { - return true - } - } - return false + return slices.Contains(b, a) } if a.EvalFnc != nil && b.EvalFnc != nil { ea, eb := a.EvalFnc, b.EvalFnc diff --git a/pkg/security/secl/compiler/eval/rule.go b/pkg/security/secl/compiler/eval/rule.go index 096eae4c9e0219..7a956558377c2c 100644 --- a/pkg/security/secl/compiler/eval/rule.go +++ b/pkg/security/secl/compiler/eval/rule.go @@ -244,10 +244,7 @@ func NewRuleEvaluator(rule *ast.Rule, model Model, opts *Opts) (*RuleEvaluator, // eval with each possible value of the registers evalBool.EvalFnc = func(ctx *Context) bool { - size := lenEval.Eval(ctx).(int) - if size > maxRegisterIteration { - size = maxRegisterIteration - } + size := min(lenEval.Eval(ctx).(int), maxRegisterIteration) for i := 0; i != size; i++ { ctx.Registers[regID] = i diff --git a/pkg/security/secl/model/consts_common.go b/pkg/security/secl/model/consts_common.go index 1b3f9f9309bb2f..92f8ae335e0321 100644 --- a/pkg/security/secl/model/consts_common.go +++ b/pkg/security/secl/model/consts_common.go @@ -9,6 +9,7 @@ package model import ( "crypto/sha256" "fmt" + "maps" "sync" "syscall" @@ -442,9 +443,7 @@ func initExitCauseConstants() { } func initBoolConstants() { - for k, v := range BooleanConstants { - seclConstants[k] = v - } + maps.Copy(seclConstants, BooleanConstants) } func initSSLVersionConstants() { diff --git a/pkg/security/secl/rules/ruleset.go b/pkg/security/secl/rules/ruleset.go index e5f9c5b82e3f74..d30811326eecc7 100644 --- a/pkg/security/secl/rules/ruleset.go +++ b/pkg/security/secl/rules/ruleset.go @@ -310,10 +310,8 @@ func (rs *RuleSet) AddRule(parsingContext *ast.ParsingContext, pRule *PolicyRule return "", nil } - for _, id := range rs.opts.ReservedRuleIDs { - if id == pRule.Def.ID { - return "", &ErrRuleLoad{Rule: pRule, Err: ErrInternalIDConflict} - } + if slices.Contains(rs.opts.ReservedRuleIDs, pRule.Def.ID) { + return "", &ErrRuleLoad{Rule: pRule, Err: ErrInternalIDConflict} } if _, exists := rs.rules[pRule.Def.ID]; exists { diff --git a/pkg/security/seclog/logger.go b/pkg/security/seclog/logger.go index c6f2aff1a24f7c..a7d22f9e254b13 100644 --- a/pkg/security/seclog/logger.go +++ b/pkg/security/seclog/logger.go @@ -10,6 +10,7 @@ import ( "fmt" "regexp" "runtime" + "slices" "strings" "sync" @@ -72,13 +73,11 @@ func (l *PatternLogger) trace(tag fmt.Stringer, format string, params ...interfa if len(stag) != 0 { l.RLock() - for _, t := range l.tags { - if t == stag { - l.RUnlock() - log.TraceStackDepth(depth, fmt.Sprintf(format, params...)) + if slices.Contains(l.tags, stag) { + l.RUnlock() + log.TraceStackDepth(depth, fmt.Sprintf(format, params...)) - return - } + return } l.RUnlock() } diff --git a/pkg/serverless/invocationlifecycle/lifecycle.go b/pkg/serverless/invocationlifecycle/lifecycle.go index fec26be6d0de11..2457d016ffcc37 100644 --- a/pkg/serverless/invocationlifecycle/lifecycle.go +++ b/pkg/serverless/invocationlifecycle/lifecycle.go @@ -7,6 +7,7 @@ package invocationlifecycle import ( "bytes" + "maps" "os" "strings" "time" @@ -364,9 +365,7 @@ func (lp *LifecycleProcessor) newRequest(lambdaPayloadString []byte, startTime t } func (lp *LifecycleProcessor) addTags(tagSet map[string]string) { - for k, v := range tagSet { - lp.requestHandler.triggerTags[k] = v - } + maps.Copy(lp.requestHandler.triggerTags, tagSet) } func (lp *LifecycleProcessor) addTag(key string, value string) { diff --git a/pkg/serverless/tags/tags.go b/pkg/serverless/tags/tags.go index a8dcd21abe39f9..c9d1ec3609e2af 100644 --- a/pkg/serverless/tags/tags.go +++ b/pkg/serverless/tags/tags.go @@ -8,6 +8,7 @@ package tags import ( "fmt" + "maps" "os" "regexp" "strings" @@ -147,12 +148,8 @@ func MapToArray(tagsMap map[string]string) []string { func MergeWithOverwrite(tags map[string]string, overwritingTags map[string]string) map[string]string { merged := make(map[string]string) - for k, v := range tags { - merged[k] = v - } - for k, v := range overwritingTags { - merged[k] = v - } + maps.Copy(merged, tags) + maps.Copy(merged, overwritingTags) return merged } @@ -169,9 +166,7 @@ func BuildTracerTags(tags map[string]string) map[string]string { func buildTags(tags map[string]string, tagsToSkip []string) map[string]string { tagsMap := make(map[string]string) - for k, v := range tags { - tagsMap[k] = v - } + maps.Copy(tagsMap, tags) for _, blackListKey := range tagsToSkip { delete(tagsMap, blackListKey) } diff --git a/pkg/serverless/trace/inferredspan/inferred_span.go b/pkg/serverless/trace/inferredspan/inferred_span.go index 9f4fc89862e768..d9793ac2924c87 100644 --- a/pkg/serverless/trace/inferredspan/inferred_span.go +++ b/pkg/serverless/trace/inferredspan/inferred_span.go @@ -7,6 +7,7 @@ package inferredspan import ( "crypto/rand" + "maps" "math" "math/big" "os" @@ -71,9 +72,7 @@ func FilterFunctionTags(input map[string]string) map[string]string { } output := make(map[string]string) - for k, v := range input { - output[k] = v - } + maps.Copy(output, input) // filter out DD_TAGS & DD_EXTRA_TAGS ddTags := configUtils.GetConfiguredTags(pkgconfigsetup.Datadog(), false) diff --git a/pkg/tagset/composite_tags.go b/pkg/tagset/composite_tags.go index 2254c985e77288..796bcc238b46a3 100644 --- a/pkg/tagset/composite_tags.go +++ b/pkg/tagset/composite_tags.go @@ -7,6 +7,7 @@ package tagset import ( "encoding/json" + "slices" "strings" ) @@ -48,7 +49,7 @@ func CombineCompositeTagsAndSlice(compositeTags CompositeTags, tags []string) Co } // Copy tags in case `CombineCompositeTagsAndSlice` is called twice with the same first argument. // For example see TestCompositeTagsCombineCompositeTagsAndSlice. - newTags := append(append([]string{}, compositeTags.tags2...), tags...) + newTags := slices.Concat(compositeTags.tags2, tags) return NewCompositeTags(compositeTags.tags1, newTags) } @@ -90,18 +91,10 @@ func (t CompositeTags) ForEachErr(callback func(tag string) error) error { // Find returns whether `callback` returns true for a tag func (t CompositeTags) Find(callback func(tag string) bool) bool { - for _, t := range t.tags1 { - if callback(t) { - return true - } - } - for _, t := range t.tags2 { - if callback(t) { - return true - } + if slices.ContainsFunc(t.tags1, callback) { + return true } - - return false + return slices.ContainsFunc(t.tags2, callback) } // Len returns the length of the tags @@ -122,7 +115,7 @@ func (t CompositeTags) Join(separator string) string { // MarshalJSON serializes a Payload to JSON func (t CompositeTags) MarshalJSON() ([]byte, error) { - tags := append([]string{}, t.tags1...) + tags := slices.Clone(t.tags1) return json.Marshal(append(tags, t.tags2...)) } @@ -140,5 +133,5 @@ func (t CompositeTags) UnsafeToReadOnlySliceString() []string { if len(t.tags2) == 0 { return t.tags1 } - return append(append([]string{}, t.tags1...), t.tags2...) + return slices.Concat(t.tags1, t.tags2) } diff --git a/pkg/tagset/hash_generator.go b/pkg/tagset/hash_generator.go index 52daef4d2470a9..efea317a73a1f6 100644 --- a/pkg/tagset/hash_generator.go +++ b/pkg/tagset/hash_generator.go @@ -77,10 +77,7 @@ func (g *HashGenerator) Hash(tb *HashingTagsAccumulator) uint64 { // for smaller tag sets, initialize only a portion of the array. when len(tags) is // close to a power of two, size one up to keep hashset load low. - size := 1 << bits.Len(uint(len(tags)+len(tags)/8)) - if size > hashSetSize { - size = hashSetSize - } + size := min(1< hashSetSize { - size = hashSetSize - } + size := min(1< 1 { - newRate = 1 - } + newRate := min(rate*ratio, 1) s.rates[sig] = newRate } s.muRates.Unlock() diff --git a/pkg/trace/stats/span_concentrator.go b/pkg/trace/stats/span_concentrator.go index 8800b931a926a2..a41297981723f2 100644 --- a/pkg/trace/stats/span_concentrator.go +++ b/pkg/trace/stats/span_concentrator.go @@ -176,12 +176,7 @@ func (sc *SpanConcentrator) addSpan(s *StatSpan, aggKey PayloadAggregationKey, c sc.mu.Lock() defer sc.mu.Unlock() end := s.start + s.duration - btime := end - end%sc.bsize - - // If too far in the past, count in the oldest-allowed time bucket instead. - if btime < sc.oldestTs { - btime = sc.oldestTs - } + btime := max(end-end%sc.bsize, sc.oldestTs) b, ok := sc.buckets[btime] if !ok { diff --git a/pkg/trace/testutil/generate.go b/pkg/trace/testutil/generate.go index e7f1d575625b82..9003422e0574c6 100644 --- a/pkg/trace/testutil/generate.go +++ b/pkg/trace/testutil/generate.go @@ -125,10 +125,7 @@ func GenerateSpan(c *SpanConfig) *pb.Span { if nmetrics > len(spanMetrics) { nmetrics = len(spanMetrics) } - nmeta := ntags - nmetrics - if nmeta > len(metas) { - nmeta = len(metas) - } + nmeta := min(ntags-nmetrics, len(metas)) for i := 0; i < nmeta; i++ { for k := range metas { if _, ok := s.Meta[k]; ok { diff --git a/pkg/trace/writer/sender.go b/pkg/trace/writer/sender.go index 74d81667ce4f04..2a1ea5ae00c919 100644 --- a/pkg/trace/writer/sender.go +++ b/pkg/trace/writer/sender.go @@ -11,6 +11,7 @@ import ( "errors" "fmt" "io" + "maps" "math" "math/rand" "net/http" @@ -458,9 +459,7 @@ func newPayload(headers map[string]string) *payload { func (p *payload) clone() *payload { headers := make(map[string]string, len(p.headers)) - for k, v := range p.headers { - headers[k] = v - } + maps.Copy(headers, p.headers) clone := newPayload(headers) if _, err := clone.body.ReadFrom(bytes.NewBuffer(p.body.Bytes())); err != nil { log.Errorf("Error cloning writer payload: %v", err) diff --git a/pkg/util/cache/basic_cache.go b/pkg/util/cache/basic_cache.go index 3b83954b48f30f..e6b5433d5b4fba 100644 --- a/pkg/util/cache/basic_cache.go +++ b/pkg/util/cache/basic_cache.go @@ -6,6 +6,7 @@ package cache import ( + "maps" "sync" "time" ) @@ -75,9 +76,7 @@ func (b *BasicCache) Items() map[string]interface{} { b.m.RLock() defer b.m.RUnlock() - for k, v := range b.cache { - items[k] = v - } + maps.Copy(items, b.cache) return items } diff --git a/pkg/util/cloudproviders/gce/gce_tags.go b/pkg/util/cloudproviders/gce/gce_tags.go index 9440ba6ccc21bf..badcb7538a5786 100644 --- a/pkg/util/cloudproviders/gce/gce_tags.go +++ b/pkg/util/cloudproviders/gce/gce_tags.go @@ -9,6 +9,7 @@ import ( "context" "encoding/json" "fmt" + "slices" "strings" pkgconfigsetup "github.com/DataDog/datadog-agent/pkg/config/setup" @@ -113,10 +114,5 @@ func GetTags(ctx context.Context) ([]string, error) { func isAttributeExcluded(attr string) bool { excludedAttributes := pkgconfigsetup.Datadog().GetStringSlice("exclude_gce_tags") - for _, excluded := range excludedAttributes { - if attr == excluded { - return true - } - } - return false + return slices.Contains(excludedAttributes, attr) } diff --git a/pkg/util/containers/metadata/metadata.go b/pkg/util/containers/metadata/metadata.go index fd6742280ba895..06953dcc48ef53 100644 --- a/pkg/util/containers/metadata/metadata.go +++ b/pkg/util/containers/metadata/metadata.go @@ -7,6 +7,7 @@ package containers import ( + "maps" "sync" "time" @@ -43,9 +44,7 @@ func Get(timeout time.Duration) map[string]string { return } mutex.Lock() - for k, v := range meta { - containerMeta[k] = v - } + maps.Copy(containerMeta, meta) mutex.Unlock() }(provider, getMeta) } @@ -62,9 +61,7 @@ func Get(timeout time.Duration) map[string]string { // in this case the map might be incomplete so return a copy to avoid race incompleteMeta := make(map[string]string) mutex.Lock() - for k, v := range containerMeta { - incompleteMeta[k] = v - } + maps.Copy(incompleteMeta, containerMeta) mutex.Unlock() return incompleteMeta } diff --git a/pkg/util/ec2/ec2_tags.go b/pkg/util/ec2/ec2_tags.go index ab8c682b0287c7..24c1b7dda53189 100644 --- a/pkg/util/ec2/ec2_tags.go +++ b/pkg/util/ec2/ec2_tags.go @@ -11,6 +11,7 @@ import ( "context" "encoding/json" "fmt" + "slices" "strings" "time" @@ -32,10 +33,8 @@ var ( func isTagExcluded(tag string) bool { if excludedTags := pkgconfigsetup.Datadog().GetStringSlice("exclude_ec2_tags"); excludedTags != nil { - for _, excludedTag := range excludedTags { - if tag == excludedTag { - return true - } + if slices.Contains(excludedTags, tag) { + return true } } return false diff --git a/pkg/util/fxutil/test.go b/pkg/util/fxutil/test.go index 4ba94db3faeed4..829c5990817a9e 100644 --- a/pkg/util/fxutil/test.go +++ b/pkg/util/fxutil/test.go @@ -10,6 +10,7 @@ package fxutil import ( "context" "reflect" + "slices" "testing" "github.com/spf13/cobra" @@ -181,7 +182,7 @@ func TestOneShotSubcommand( for _, c := range subcommands { cmd.AddCommand(c) } - cmd.SetArgs(append([]string{}, commandline...)) + cmd.SetArgs(slices.Clone(commandline)) require.NoError(t, cmd.Execute()) require.True(t, oneShotRan, "fxutil.OneShot wasn't called") diff --git a/pkg/util/hostname/validate/validate.go b/pkg/util/hostname/validate/validate.go index 1e52cdfd12cb6e..10e3c7af6949fa 100644 --- a/pkg/util/hostname/validate/validate.go +++ b/pkg/util/hostname/validate/validate.go @@ -9,6 +9,7 @@ package validate import ( "fmt" "regexp" + "slices" "strings" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -46,10 +47,5 @@ func ValidHostname(hostname string) error { // check whether the name is in the list of local hostnames func isLocal(name string) bool { name = strings.ToLower(name) - for _, val := range localhostIdentifiers { - if val == name { - return true - } - } - return false + return slices.Contains(localhostIdentifiers, name) } diff --git a/pkg/util/kubernetes/apiserver/apiserver.go b/pkg/util/kubernetes/apiserver/apiserver.go index e967a87735fb2f..4192a0f7eb90ed 100644 --- a/pkg/util/kubernetes/apiserver/apiserver.go +++ b/pkg/util/kubernetes/apiserver/apiserver.go @@ -12,6 +12,7 @@ import ( "context" "errors" "fmt" + "maps" "net/http" "net/url" "sync" @@ -660,9 +661,7 @@ func convertmetadataMapperBundleToAPI(input *MetadataMapperBundle) *apiv1.Metada if input == nil { return output } - for key, val := range input.Services { - output.Services[key] = val - } + maps.Copy(output.Services, input.Services) return output } diff --git a/pkg/util/kubernetes/apiserver/controllers/hpa_controller.go b/pkg/util/kubernetes/apiserver/controllers/hpa_controller.go index 6a39108ef854f1..77a59127e2ee4a 100644 --- a/pkg/util/kubernetes/apiserver/controllers/hpa_controller.go +++ b/pkg/util/kubernetes/apiserver/controllers/hpa_controller.go @@ -8,6 +8,7 @@ package controllers import ( + "maps" "sync" "time" @@ -171,10 +172,7 @@ func (h *autoscalersController) syncHPA(key interface{}) error { } newMetrics := h.hpaProc.ProcessEMList(emList) h.toStore.m.Lock() - for metric, value := range newMetrics { - // We should only insert placeholders in the local cache. - h.toStore.data[metric] = value - } + maps.Copy(h.toStore.data, newMetrics) h.toStore.m.Unlock() log.Tracef("Local batch cache of Ref is %v", h.toStore.data) } diff --git a/pkg/util/kubernetes/apiserver/controllers/wpa_controller.go b/pkg/util/kubernetes/apiserver/controllers/wpa_controller.go index 197ca2af7fa09d..9b7e7716de2292 100644 --- a/pkg/util/kubernetes/apiserver/controllers/wpa_controller.go +++ b/pkg/util/kubernetes/apiserver/controllers/wpa_controller.go @@ -9,6 +9,7 @@ package controllers import ( "context" + "maps" "math" "time" @@ -218,10 +219,7 @@ func (h *autoscalersController) syncWPA(key interface{}) error { } newMetrics := h.hpaProc.ProcessEMList(emList) h.toStore.m.Lock() - for metric, value := range newMetrics { - // We should only insert placeholders in the local cache. - h.toStore.data[metric] = value - } + maps.Copy(h.toStore.data, newMetrics) h.toStore.m.Unlock() log.Tracef("Local batch cache of WPA is %v", h.toStore.data) diff --git a/pkg/util/kubernetes/autoscalers/processor.go b/pkg/util/kubernetes/autoscalers/processor.go index f3e99520f5b253..2cfe2452ea1e67 100644 --- a/pkg/util/kubernetes/autoscalers/processor.go +++ b/pkg/util/kubernetes/autoscalers/processor.go @@ -9,6 +9,7 @@ package autoscalers import ( "fmt" + "maps" "math" "net/url" "sort" @@ -16,9 +17,8 @@ import ( "sync" "time" - "golang.org/x/sync/errgroup" - "github.com/DataDog/watermarkpodautoscaler/apis/datadoghq/v1alpha1" + "golang.org/x/sync/errgroup" datadogclientcomp "github.com/DataDog/datadog-agent/comp/autoscaling/datadogclient/def" "github.com/DataDog/datadog-agent/pkg/clusteragent/autoscaling/custommetrics" @@ -212,9 +212,7 @@ func (p *Processor) QueryExternalMetric(queries []string, timeWindow time.Durati responses[q] = Point{Error: err} } } else { - for k, v := range resp { - responses[k] = v - } + maps.Copy(responses, resp) } return nil }) diff --git a/pkg/util/port/portlist/netstat_darwin.go b/pkg/util/port/portlist/netstat_darwin.go index 7542980776b172..c70dfd21a4e900 100644 --- a/pkg/util/port/portlist/netstat_darwin.go +++ b/pkg/util/port/portlist/netstat_darwin.go @@ -36,10 +36,7 @@ func parsePort(s mem.RO) int { // a.b.c.d.1234 or [a:b:c:d].1234 i2 := mem.LastIndexByte(s, '.') - i := i1 - if i2 > i { - i = i2 - } + i := max(i2, i1) if i < 0 { // no match; weird return -1 diff --git a/test/fakeintake/aggregator/common.go b/test/fakeintake/aggregator/common.go index f0da7db68027e4..0038f3ac036df4 100644 --- a/test/fakeintake/aggregator/common.go +++ b/test/fakeintake/aggregator/common.go @@ -13,6 +13,7 @@ import ( "flag" "fmt" "io" + "maps" "os" "path/filepath" "reflect" @@ -22,8 +23,9 @@ import ( "sync" "time" - "github.com/DataDog/datadog-agent/test/fakeintake/api" "github.com/DataDog/zstd" + + "github.com/DataDog/datadog-agent/test/fakeintake/api" ) var generateFixture = flag.Bool("generate", false, "generate fixture") @@ -192,9 +194,7 @@ func (agg *Aggregator[P]) replace(payloadsByName map[string][]P) { agg.mutex.Lock() defer agg.mutex.Unlock() agg.unsafeReset() - for name, payloads := range payloadsByName { - agg.payloadsByName[name] = payloads - } + maps.Copy(agg.payloadsByName, payloadsByName) } // FilterByTags return the payloads that match all the tags