Add stddev_over_time and stdvar_over_time.

This commit is contained in:
Brian Brazil 2016-07-16 00:34:44 +01:00
parent 6f19e418e1
commit 1edd6875f5
2 changed files with 52 additions and 0 deletions

View File

@ -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 ===
func funcAbs(ev *evaluator, args Expressions) model.Value {
vector := ev.evalVector(args[0])
@ -988,6 +1016,18 @@ var functions = map[string]*Function{
ReturnType: model.ValVector,
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": {
Name: "sum_over_time",
ArgTypes: []model.ValueType{model.ValMatrix},

View File

@ -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="0", group="canary"} 24000
{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