Skip to content

Commit

Permalink
Using float value > 0 as the activation criterium (#47)
Browse files Browse the repository at this point in the history
Signed-off-by: Jirka Kremser <[email protected]>
  • Loading branch information
jkremser authored Jan 13, 2025
1 parent 9e3eafb commit ffb181d
Showing 1 changed file with 28 additions and 35 deletions.
63 changes: 28 additions & 35 deletions scaler/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ package scaler

import (
"context"
"errors"
"fmt"
"math"
"time"
Expand Down Expand Up @@ -61,27 +60,18 @@ func (e *impl) Ping(context.Context, *emptypb.Empty) (*emptypb.Empty, error) {
}

func (e *impl) IsActive(
ctx context.Context,
_ context.Context,
sor *externalscaler.ScaledObjectRef,
) (*externalscaler.IsActiveResponse, error) {
lggr := e.lggr.WithName("IsActive")

gmr, err := e.GetMetrics(ctx, &externalscaler.GetMetricsRequest{
ScaledObjectRef: sor,
})
value, err := e.getMetric(sor)
if err != nil {
lggr.Error(err, "GetMetrics failed", "scaledObjectRef", sor.String())
return nil, err
}

metricValues := gmr.GetMetricValues()
if err := errors.New("len(metricValues) != 1"); len(metricValues) != 1 {
lggr.Error(err, "invalid GetMetricsResponse", "scaledObjectRef", sor.String(), "getMetricsResponse", gmr.String())
lggr.Error(err, "getMetric failed", "scaledObjectRef", sor.String())
return nil, err
}
metricValue := metricValues[0].GetMetricValue()
active := metricValue > 0

active := value > 0
return &externalscaler.IsActiveResponse{Result: active}, nil
}

Expand Down Expand Up @@ -154,41 +144,44 @@ func (e *impl) GetMetricSpec(
}

func (e *impl) GetMetrics(
ctx context.Context,
_ context.Context,
metricRequest *externalscaler.GetMetricsRequest,
) (*externalscaler.GetMetricsResponse, error) {
lggr := e.lggr.WithName("GetMetrics")
sor := metricRequest.ScaledObjectRef

//namespacedName := k8s.NamespacedNameFromScaledObjectRef(sor)
//metricName := namespacedName.Name

scalerMetadata := sor.GetScalerMetadata()
metricName, labels, agg, err := util.GetMetricQuery(lggr, scalerMetadata, e.metricParser)
value, err := e.getMetric(sor)
if err != nil {
return nil, err
}

opOverTime := util.GetOperationOvertTime(lggr, scalerMetadata)
value, found, err := e.metricStore.Get(metricName, labels, opOverTime, agg)
lggr.Info("got metric value: ", "name", metricName, "labels", labels, "value", value, "found", found, "error", err)
if !found {
return nil, fmt.Errorf("not found")
}
if err != nil {
return nil, err
}
value = util.ClampValue(lggr, value, scalerMetadata)
e.metricsExporter.SetMetricValueClamped(string(metricName), fmt.Sprint(labels), string(opOverTime), string(agg), sor.GetName(), sor.GetNamespace(), value)

res := &externalscaler.GetMetricsResponse{
MetricValues: []*externalscaler.MetricValue{
{
MetricName: metricRequest.GetMetricName(),
MetricValue: int64(math.Round(value)),
MetricValue: int64(math.Ceil(value)),
},
},
}

return res, nil
}

func (e *impl) getMetric(sor *externalscaler.ScaledObjectRef) (float64, error) {
lggr := e.lggr.WithName("getMetric")
metricName, labels, agg, err := util.GetMetricQuery(lggr, sor.GetScalerMetadata(), e.metricParser)
if err != nil {
return -1, err
}

opOverTime := util.GetOperationOvertTime(lggr, sor.GetScalerMetadata())
value, found, err := e.metricStore.Get(metricName, labels, opOverTime, agg)
lggr.Info("got metric value: ", "name", metricName, "labels", labels, "value", value, "found", found, "error", err)
if !found {
return -1, fmt.Errorf("not found")
}
if err != nil {
return -1, err
}
value = util.ClampValue(lggr, value, sor.GetScalerMetadata())
e.metricsExporter.SetMetricValueClamped(string(metricName), fmt.Sprint(labels), string(opOverTime), string(agg), sor.GetName(), sor.GetNamespace(), value)
return value, nil
}

0 comments on commit ffb181d

Please sign in to comment.