diff --git a/pkg/controller/utils/datadog/metrics_forwarder.go b/pkg/controller/utils/datadog/metrics_forwarder.go index 035b1c7dc..4d1e0ad9a 100644 --- a/pkg/controller/utils/datadog/metrics_forwarder.go +++ b/pkg/controller/utils/datadog/metrics_forwarder.go @@ -49,6 +49,7 @@ const ( reconcileMetricFormat = "%s.reconcile.success" reconcileErrTagFormat = "reconcile_err:%s" datadogOperatorSourceType = "datadog_operator" + defaultBaseUrl = "https://api.datadoghq.com" ) var ( @@ -81,6 +82,7 @@ type metricsForwarder struct { delegator delegatedAPI decryptor secrets.Decryptor creds sync.Map + baseUrl string sync.Mutex status *datadoghqv1alpha1.DatadogAgentCondition } @@ -108,6 +110,7 @@ func newMetricsForwarder(k8sClient client.Client, decryptor secrets.Decryptor, o lastReconcileErr: errInitValue, decryptor: decryptor, creds: sync.Map{}, + baseURL: defaultBaseUrl, logger: log.WithValues("CustomResource.Namespace", obj.GetNamespace(), "CustomResource.Name", obj.GetName()), } } @@ -200,6 +203,8 @@ func (mf *metricsForwarder) connectToDatadogAPI() (bool, error) { } mf.logger.Info("Getting Datadog credentials") apiKey, appKey, err := mf.getCredentials(dda) + mf.logger.Info("Getting Datadog Site") + mf.baseUrl = getBaseUrl(dda) defer mf.updateStatusIfNeeded(err) if err != nil { mf.logger.Error(err, "cannot get Datadog credentials, will retry later...") @@ -350,6 +355,7 @@ func (mf *metricsForwarder) validateCreds(apiKey, appKey string) (*api.Client, e // delegatedValidateCreds is separated from validateCreds to facilitate mocking the Datadog API func (mf *metricsForwarder) delegatedValidateCreds(apiKey, appKey string) (*api.Client, error) { datadogClient := api.NewClient(apiKey, appKey) + datadogClient.SetBaseUrl(mf.baseUrl) valid, err := datadogClient.Validate() if err != nil { return nil, fmt.Errorf("cannot validate datadog credentials: %v", err) @@ -653,3 +659,16 @@ func (mf *metricsForwarder) isErrChanFull() bool { func (mf *metricsForwarder) isEventChanFull() bool { return len(mf.eventChan) == cap(mf.eventChan) } + +func getBaseUrl(dda *datadoghqv1alpha1.DatadogAgent) string { + if dda.Spec.Agent.Config.DDUrl != nil { + return dda.Spec.Agent.Config.DDUrl + } + else if dda.Spec.Site != nil { + if dda.Spec.Site == "EU" { + return "https://api.datadoghq.eu" + } else { + return "https://api.datadoghq.com" + } + } +}