From b5bda0ba6b9b9cb2b69210f0e584904df37cf219 Mon Sep 17 00:00:00 2001 From: Liliya Belaus <59583867+liliyadd@users.noreply.github.com> Date: Wed, 1 May 2024 16:27:09 -0400 Subject: [PATCH] [APM Onboarding] Use creation timestamp and UID of DatadogAgent as env vars for APM Telemetry KPIs (#1157) * Use UUID and timestamp generated during DatadogAgent installation * Fix unit tests * Use util functions (cherry picked from commit 77d0df81d9c8ec57d1ed62606288eaa4a2c46db0) --- apis/datadoghq/v1alpha1/test/new.go | 20 +++++++++++++------ controllers/datadogagent/agent_test.go | 4 ++-- controllers/datadogagent/clusteragent_test.go | 4 ++-- .../datadogagent/component/agent/default.go | 5 +++-- .../component/clusteragent/default.go | 5 ++--- controllers/datadogagent/component/utils.go | 10 ---------- pkg/controller/utils/shared_utils.go | 11 ++++++++++ 7 files changed, 34 insertions(+), 25 deletions(-) diff --git a/apis/datadoghq/v1alpha1/test/new.go b/apis/datadoghq/v1alpha1/test/new.go index 9f7635384..750098fb8 100644 --- a/apis/datadoghq/v1alpha1/test/new.go +++ b/apis/datadoghq/v1alpha1/test/new.go @@ -7,11 +7,13 @@ package test import ( "fmt" + "strconv" "time" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" apicommon "github.com/DataDog/datadog-operator/apis/datadoghq/common" commonv1 "github.com/DataDog/datadog-operator/apis/datadoghq/common/v1" @@ -20,6 +22,7 @@ import ( "github.com/DataDog/datadog-operator/controllers/datadogagent/component" "github.com/DataDog/datadog-operator/pkg/controller/utils/comparison" "github.com/DataDog/datadog-operator/pkg/defaulting" + "github.com/google/uuid" edsdatadoghqv1alpha1 "github.com/DataDog/extendeddaemonset/api/v1alpha1" apiregistrationv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" @@ -30,6 +33,9 @@ var ( apiVersion = fmt.Sprintf("%s/%s", datadoghqv1alpha1.GroupVersion.Group, datadoghqv1alpha1.GroupVersion.Version) pullPolicy = corev1.PullIfNotPresent defaultImage = defaulting.GetLatestAgentImage() + // AgentInstallTime records the Agent install time + AgentInstallTime = metav1.NewTime(time.Now()) + AgentInstallId = types.UID(uuid.New().String()) ) // NewDatadogAgentOptions set of option for the DatadogAgent creation @@ -108,10 +114,12 @@ func NewDefaultedDatadogAgent(ns, name string, options *NewDatadogAgentOptions) APIVersion: apiVersion, }, ObjectMeta: metav1.ObjectMeta{ - Namespace: ns, - Name: name, - Labels: map[string]string{}, - Finalizers: []string{"finalizer.agent.datadoghq.com"}, + Namespace: ns, + Name: name, + Labels: map[string]string{}, + Finalizers: []string{"finalizer.agent.datadoghq.com"}, + CreationTimestamp: AgentInstallTime, + UID: AgentInstallId, }, } ad.Spec = datadoghqv1alpha1.DatadogAgentSpec{ @@ -310,11 +318,11 @@ func NewDefaultedDatadogAgent(ns, name string, options *NewDatadogAgentOptions) ad.Spec.Agent.Apm.Env = []corev1.EnvVar{ { Name: apicommon.DDAPMInstrumentationInstallId, - Value: component.AgentInstallId, + Value: string(ad.GetUID()), }, { Name: apicommon.DDAPMInstrumentationInstallTime, - Value: component.AgentInstallTime, + Value: strconv.FormatInt(ad.GetCreationTimestamp().Unix(), 10), }, { Name: apicommon.DDAPMInstrumentationInstallType, diff --git a/controllers/datadogagent/agent_test.go b/controllers/datadogagent/agent_test.go index 69759e019..366aa7b1b 100644 --- a/controllers/datadogagent/agent_test.go +++ b/controllers/datadogagent/agent_test.go @@ -948,7 +948,7 @@ func defaultAPMContainerEnvVars() []corev1.EnvVar { }, { Name: "DD_INSTRUMENTATION_INSTALL_TIME", - Value: component.AgentInstallTime, + Value: strconv.FormatInt(test.AgentInstallTime.Unix(), 10), }, { Name: "DD_INSTRUMENTATION_INSTALL_TYPE", @@ -956,7 +956,7 @@ func defaultAPMContainerEnvVars() []corev1.EnvVar { }, { Name: "DD_INSTRUMENTATION_INSTALL_ID", - Value: component.AgentInstallId, + Value: string(test.AgentInstallId), }, } } diff --git a/controllers/datadogagent/clusteragent_test.go b/controllers/datadogagent/clusteragent_test.go index 82bbc0a55..8c541d7ad 100644 --- a/controllers/datadogagent/clusteragent_test.go +++ b/controllers/datadogagent/clusteragent_test.go @@ -208,7 +208,7 @@ func clusterAgentDefaultEnvVars() []corev1.EnvVar { }, { Name: "DD_INSTRUMENTATION_INSTALL_TIME", - Value: component.AgentInstallTime, + Value: strconv.FormatInt(test.AgentInstallTime.Time.Unix(), 10), }, { Name: "DD_INSTRUMENTATION_INSTALL_TYPE", @@ -216,7 +216,7 @@ func clusterAgentDefaultEnvVars() []corev1.EnvVar { }, { Name: "DD_INSTRUMENTATION_INSTALL_ID", - Value: component.AgentInstallId, + Value: string(test.AgentInstallId), }, } } diff --git a/controllers/datadogagent/component/agent/default.go b/controllers/datadogagent/component/agent/default.go index 8add0de75..75dc3ea2a 100644 --- a/controllers/datadogagent/component/agent/default.go +++ b/controllers/datadogagent/component/agent/default.go @@ -18,6 +18,7 @@ import ( "github.com/DataDog/datadog-operator/controllers/datadogagent/component" componentdca "github.com/DataDog/datadog-operator/controllers/datadogagent/component/clusteragent" "github.com/DataDog/datadog-operator/controllers/datadogagent/feature" + "github.com/DataDog/datadog-operator/pkg/controller/utils" "github.com/DataDog/datadog-operator/pkg/defaulting" appsv1 "k8s.io/api/apps/v1" @@ -311,11 +312,11 @@ func envVarsForTraceAgent(dda metav1.Object) []corev1.EnvVar { envs := []corev1.EnvVar{ { Name: apicommon.DDAPMInstrumentationInstallId, - Value: component.AgentInstallId, + Value: utils.GetDatadogAgentResourceUID(dda), }, { Name: apicommon.DDAPMInstrumentationInstallTime, - Value: component.AgentInstallTime, + Value: utils.GetDatadogAgentResourceCreationTime(dda), }, { Name: apicommon.DDAPMInstrumentationInstallType, diff --git a/controllers/datadogagent/component/clusteragent/default.go b/controllers/datadogagent/component/clusteragent/default.go index d3f5fe4c9..0a4631c93 100644 --- a/controllers/datadogagent/component/clusteragent/default.go +++ b/controllers/datadogagent/component/clusteragent/default.go @@ -28,7 +28,6 @@ import ( // NewDefaultClusterAgentDeployment return a new default cluster-agent deployment func NewDefaultClusterAgentDeployment(dda metav1.Object) *appsv1.Deployment { deployment := component.NewDeployment(dda, apicommon.DefaultClusterAgentResourceSuffix, GetClusterAgentName(dda), GetClusterAgentVersion(dda), nil) - podTemplate := NewDefaultClusterAgentPodTemplateSpec(dda) for key, val := range deployment.GetLabels() { podTemplate.Labels[key] = val @@ -147,11 +146,11 @@ func defaultEnvVars(dda metav1.Object) []corev1.EnvVar { }, { Name: apicommon.DDAPMInstrumentationInstallId, - Value: component.AgentInstallId, + Value: utils.GetDatadogAgentResourceUID(dda), }, { Name: apicommon.DDAPMInstrumentationInstallTime, - Value: component.AgentInstallTime, + Value: utils.GetDatadogAgentResourceCreationTime(dda), }, { Name: apicommon.DDAPMInstrumentationInstallType, diff --git a/controllers/datadogagent/component/utils.go b/controllers/datadogagent/component/utils.go index 50083311b..2e9653a6d 100644 --- a/controllers/datadogagent/component/utils.go +++ b/controllers/datadogagent/component/utils.go @@ -9,7 +9,6 @@ import ( "fmt" "strconv" "strings" - "time" corev1 "k8s.io/api/core/v1" netv1 "k8s.io/api/networking/v1" @@ -17,8 +16,6 @@ import ( "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/version" - "github.com/google/uuid" - apicommon "github.com/DataDog/datadog-operator/apis/datadoghq/common" commonv1 "github.com/DataDog/datadog-operator/apis/datadoghq/common/v1" "github.com/DataDog/datadog-operator/apis/datadoghq/v2alpha1" @@ -34,13 +31,6 @@ const ( DefaultAgentInstallType = "k8s_manual" ) -var ( - // AgentInstallTime records the Agent install time - AgentInstallTime = strconv.FormatInt(time.Now().Unix(), 10) - - AgentInstallId = uuid.NewString() -) - // GetVolumeForConfig return the volume that contains the agent config func GetVolumeForConfig() corev1.Volume { return corev1.Volume{ diff --git a/pkg/controller/utils/shared_utils.go b/pkg/controller/utils/shared_utils.go index 15d938420..09fbbac2e 100644 --- a/pkg/controller/utils/shared_utils.go +++ b/pkg/controller/utils/shared_utils.go @@ -7,6 +7,7 @@ package utils import ( "fmt" + "strconv" "sigs.k8s.io/controller-runtime/pkg/reconcile" @@ -32,3 +33,13 @@ func GetDatadogAgentResourceNamespace(dda metav1.Object) string { func GetDatadogTokenResourceName(dda metav1.Object) string { return fmt.Sprintf("%stoken", dda.GetName()) } + +// GetDatadogAgentResourceNamespace returns the UID of the Datadog Agent Resource +func GetDatadogAgentResourceUID(dda metav1.Object) string { + return string(dda.GetUID()) +} + +// GetDatadogAgentResourceCreationTime returns the creation timestamp of the Datadog Agent Resource +func GetDatadogAgentResourceCreationTime(dda metav1.Object) string { + return strconv.FormatInt(dda.GetCreationTimestamp().Unix(), 10) +}