Revert "app/vmselect/promql: remove metric name after applying clamp_min and clamp_max functions in order to be consistent with Prometheus"

This reverts commit bb61a4769b.

Reason for revert: the previous behavior for VictoriaMetrics is easier to understand and use by users -
functions, which don't change the meaning of the time series shouldn't drop metric name.

Now the following functions do not drop metric name:

* clamp_min
* clamp_max

Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/674
This commit is contained in:
Aliaksandr Valialkin 2020-10-12 11:36:47 +03:00
parent f7d28bddbf
commit a94825b169
2 changed files with 12 additions and 1 deletions

View file

@ -636,6 +636,7 @@ func TestExecSuccess(t *testing.T) {
Values: []float64{1000, 1200, 1400, 1400, 1400, 1400}, Values: []float64{1000, 1200, 1400, 1400, 1400, 1400},
Timestamps: timestampsExpected, Timestamps: timestampsExpected,
} }
r.MetricName.MetricGroup = []byte("foobar")
resultExpected := []netstorage.Result{r} resultExpected := []netstorage.Result{r}
f(q, resultExpected) f(q, resultExpected)
}) })
@ -647,6 +648,7 @@ func TestExecSuccess(t *testing.T) {
Values: []float64{1000, 1200, 1400, 1400, 1400, 1400}, Values: []float64{1000, 1200, 1400, 1400, 1400, 1400},
Timestamps: timestampsExpected, Timestamps: timestampsExpected,
} }
r.MetricName.MetricGroup = []byte("foobar")
resultExpected := []netstorage.Result{r} resultExpected := []netstorage.Result{r}
f(q, resultExpected) f(q, resultExpected)
}) })

View file

@ -17,6 +17,11 @@ import (
"github.com/valyala/histogram" "github.com/valyala/histogram"
) )
var transformFuncsKeepMetricGroup = map[string]bool{
"clamp_max": true,
"clamp_min": true,
}
var transformFuncs = map[string]transformFunc{ var transformFuncs = map[string]transformFunc{
// Standard promql funcs // Standard promql funcs
// See funcs accepting instant-vector on https://prometheus.io/docs/prometheus/latest/querying/functions/ . // See funcs accepting instant-vector on https://prometheus.io/docs/prometheus/latest/querying/functions/ .
@ -125,8 +130,12 @@ func newTransformFuncOneArg(tf func(v float64) float64) transformFunc {
} }
func doTransformValues(arg []*timeseries, tf func(values []float64), fe *metricsql.FuncExpr) ([]*timeseries, error) { func doTransformValues(arg []*timeseries, tf func(values []float64), fe *metricsql.FuncExpr) ([]*timeseries, error) {
name := strings.ToLower(fe.Name)
keepMetricGroup := transformFuncsKeepMetricGroup[name]
for _, ts := range arg { for _, ts := range arg {
ts.MetricName.ResetMetricGroup() if !keepMetricGroup {
ts.MetricName.ResetMetricGroup()
}
tf(ts.Values) tf(ts.Values)
} }
return arg, nil return arg, nil