app/vmselect/promql: adjust value returned by linearRegression to the end of time range like Prometheus does

Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/71
This commit is contained in:
Aliaksandr Valialkin 2019-06-24 22:27:17 +03:00
parent 90e72c2a42
commit 4bb738ddd9
2 changed files with 6 additions and 4 deletions

View file

@ -403,6 +403,8 @@ func linearRegression(rfa *rollupFuncArg) (float64, float64) {
}
k := (n*tvSum - tSum*vSum) / (n*ttSum - tSum*tSum)
v := (vSum - k*tSum) / n
// Adjust v to the last timestamp on the given time range.
v += k * (float64(timestamps[len(timestamps)-1]-tFirst) * 1e-3)
return v, k
}

View file

@ -143,10 +143,10 @@ func TestRollupPredictLinear(t *testing.T) {
testRollupFunc(t, "predict_linear", args, &me, vExpected)
}
f(0e-3, 63.739757761102624)
f(50e-3, 50.39682764539959)
f(100e-3, 37.053897529696556)
f(200e-3, 10.368037298290488)
f(0e-3, 30.382432471845043)
f(50e-3, 17.03950235614201)
f(100e-3, 3.696572240438975)
f(200e-3, -22.989287990967092)
}
func TestRollupHoltWinters(t *testing.T) {