From 2186acd9c6cdc9e5a7f1cd5587cbe90d066e2a02 Mon Sep 17 00:00:00 2001 From: ycabrer <43866176+ycabrer@users.noreply.github.com> Date: Wed, 8 Apr 2020 05:06:51 -0600 Subject: [PATCH] Filter returned metrics from api server based on queried name (#732) Signed-off-by: ycabrer <43866176+ycabrer@users.noreply.github.com> Signed-off-by: Amith Ganesh --- pkg/provider/provider.go | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/pkg/provider/provider.go b/pkg/provider/provider.go index 8b5e235b675..cc6a6fbf7cf 100644 --- a/pkg/provider/provider.go +++ b/pkg/provider/provider.go @@ -3,6 +3,7 @@ package provider import ( "context" "fmt" + "strings" kedav1alpha1 "github.com/kedacore/keda/pkg/apis/keda/v1alpha1" "github.com/kedacore/keda/pkg/handler" @@ -83,16 +84,27 @@ func (p *KedaProvider) GetExternalMetric(namespace string, metricSelector labels } for _, scaler := range scalers { - metrics, err := scaler.GetMetrics(context.TODO(), info.Metric, metricSelector) - if err != nil { - logger.Error(err, "error getting metric for scaler", "ScaledObject.Namespace", scaledObject.Namespace, "ScaledObject.Name", scaledObject.Name, "Scaler", scaler) - } else { - matchingMetrics = append(matchingMetrics, metrics...) + metricSpecs := scaler.GetMetricSpecForScaling() + + for _, metricSpec := range metricSpecs { + // Filter only the desired metric + if strings.EqualFold(metricSpec.External.MetricName, info.Metric) { + metrics, err := scaler.GetMetrics(context.TODO(), info.Metric, metricSelector) + if err != nil { + logger.Error(err, "error getting metric for scaler", "ScaledObject.Namespace", scaledObject.Namespace, "ScaledObject.Name", scaledObject.Name, "Scaler", scaler) + } else { + matchingMetrics = append(matchingMetrics, metrics...) + } + } } scaler.Close() } + if len(matchingMetrics) <= 0 { + return nil, fmt.Errorf("No matching metrics found for " + info.Metric) + } + return &external_metrics.ExternalMetricValueList{ Items: matchingMetrics, }, nil