mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
Add stddev_over_time and stdvar_over_time.
This commit is contained in:
parent
6f19e418e1
commit
1edd6875f5
|
@ -478,6 +478,34 @@ func funcSumOverTime(ev *evaluator, args Expressions) model.Value {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// === stddev_over_time(matrix model.ValMatrix) Vector ===
|
||||||
|
func funcStddevOverTime(ev *evaluator, args Expressions) model.Value {
|
||||||
|
return aggrOverTime(ev, args, func(values []model.SamplePair) model.SampleValue {
|
||||||
|
var sum, squaredSum, count model.SampleValue
|
||||||
|
for _, v := range values {
|
||||||
|
sum += v.Value
|
||||||
|
squaredSum += v.Value * v.Value
|
||||||
|
count += 1
|
||||||
|
}
|
||||||
|
avg := sum / count
|
||||||
|
return model.SampleValue(math.Sqrt(float64(squaredSum/count - avg*avg)))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// === stdvar_over_time(matrix model.ValMatrix) Vector ===
|
||||||
|
func funcStdvarOverTime(ev *evaluator, args Expressions) model.Value {
|
||||||
|
return aggrOverTime(ev, args, func(values []model.SamplePair) model.SampleValue {
|
||||||
|
var sum, squaredSum, count model.SampleValue
|
||||||
|
for _, v := range values {
|
||||||
|
sum += v.Value
|
||||||
|
squaredSum += v.Value * v.Value
|
||||||
|
count += 1
|
||||||
|
}
|
||||||
|
avg := sum / count
|
||||||
|
return squaredSum/count - avg*avg
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// === abs(vector model.ValVector) Vector ===
|
// === abs(vector model.ValVector) Vector ===
|
||||||
func funcAbs(ev *evaluator, args Expressions) model.Value {
|
func funcAbs(ev *evaluator, args Expressions) model.Value {
|
||||||
vector := ev.evalVector(args[0])
|
vector := ev.evalVector(args[0])
|
||||||
|
@ -988,6 +1016,18 @@ var functions = map[string]*Function{
|
||||||
ReturnType: model.ValVector,
|
ReturnType: model.ValVector,
|
||||||
Call: funcSqrt,
|
Call: funcSqrt,
|
||||||
},
|
},
|
||||||
|
"stddev_over_time": {
|
||||||
|
Name: "stddev_over_time",
|
||||||
|
ArgTypes: []model.ValueType{model.ValMatrix},
|
||||||
|
ReturnType: model.ValVector,
|
||||||
|
Call: funcStddevOverTime,
|
||||||
|
},
|
||||||
|
"stdvar_over_time": {
|
||||||
|
Name: "stdvar_over_time",
|
||||||
|
ArgTypes: []model.ValueType{model.ValMatrix},
|
||||||
|
ReturnType: model.ValVector,
|
||||||
|
Call: funcStdvarOverTime,
|
||||||
|
},
|
||||||
"sum_over_time": {
|
"sum_over_time": {
|
||||||
Name: "sum_over_time",
|
Name: "sum_over_time",
|
||||||
ArgTypes: []model.ValueType{model.ValMatrix},
|
ArgTypes: []model.ValueType{model.ValMatrix},
|
||||||
|
|
12
promql/testdata/functions.test
vendored
12
promql/testdata/functions.test
vendored
|
@ -275,3 +275,15 @@ eval instant at 8000s holt_winters(http_requests[1m], 0.01, 0.1)
|
||||||
{job="api-server", instance="1", group="production"} -16000
|
{job="api-server", instance="1", group="production"} -16000
|
||||||
{job="api-server", instance="0", group="canary"} 24000
|
{job="api-server", instance="0", group="canary"} 24000
|
||||||
{job="api-server", instance="1", group="canary"} -32000
|
{job="api-server", instance="1", group="canary"} -32000
|
||||||
|
|
||||||
|
|
||||||
|
# Tests for stddev_over_time and stdvar_over_time.
|
||||||
|
clear
|
||||||
|
load 10s
|
||||||
|
metric 0 8 8 2 3
|
||||||
|
|
||||||
|
eval instant at 1m stdvar_over_time(metric[1m])
|
||||||
|
{} 10.56
|
||||||
|
|
||||||
|
eval instant at 1m stddev_over_time(metric[1m])
|
||||||
|
{} 3.249615
|
||||||
|
|
Loading…
Reference in a new issue