From bca8e121095664ffe80bdfb3ef4159c2260526e4 Mon Sep 17 00:00:00 2001 From: Ara Pulido Date: Tue, 21 Feb 2023 12:20:56 +0100 Subject: [PATCH] Check for response object before returning the generic error Signed-off-by: Ara Pulido --- pkg/scalers/datadog_scaler.go | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/pkg/scalers/datadog_scaler.go b/pkg/scalers/datadog_scaler.go index 364eb516ac0..e021bfa7cc9 100644 --- a/pkg/scalers/datadog_scaler.go +++ b/pkg/scalers/datadog_scaler.go @@ -286,19 +286,26 @@ func (s *datadogScaler) getQueryResult(ctx context.Context) (float64, error) { timeWindowTo := time.Now().Unix() - int64(s.metadata.timeWindowOffset) timeWindowFrom := timeWindowTo - int64(s.metadata.age) resp, r, err := s.apiClient.MetricsApi.QueryMetrics(ctx, timeWindowFrom, timeWindowTo, s.metadata.query) //nolint:bodyclose - if err != nil { - return -1, fmt.Errorf("error when retrieving Datadog metrics: %w", err) - } - if r.StatusCode == 429 { - rateLimit := r.Header.Get("X-Ratelimit-Limit") - rateLimitReset := r.Header.Get("X-Ratelimit-Reset") + if r != nil { + if r.StatusCode == 429 { + rateLimit := r.Header.Get("X-Ratelimit-Limit") + rateLimitReset := r.Header.Get("X-Ratelimit-Reset") + rateLimitPeriod := r.Header.Get("X-Ratelimit-Period") + + return -1, fmt.Errorf("your Datadog account reached the %s queries per %s seconds rate limit, next limit reset will happen in %s seconds", rateLimit, rateLimitPeriod, rateLimitReset) + } - return -1, fmt.Errorf("your Datadog account reached the %s queries per hour rate limit, next limit reset will happen in %s seconds", rateLimit, rateLimitReset) + if r.StatusCode != 200 { + if err != nil { + return -1, fmt.Errorf("error when retrieving Datadog metrics: %w", err) + } + return -1, fmt.Errorf("error when retrieving Datadog metrics") + } } - if r.StatusCode != 200 { - return -1, fmt.Errorf("error when retrieving Datadog metrics") + if err != nil { + return -1, fmt.Errorf("error when retrieving Datadog metrics: %w", err) } if resp.GetStatus() == "error" {