From 49c87348b5723d220cf6e52eab5dc7f74a542cb2 Mon Sep 17 00:00:00 2001 From: Julius Volz Date: Tue, 22 Jan 2013 01:49:00 +0100 Subject: [PATCH] Implement per-second rate behavior for rate(). --- rules/ast/functions.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/rules/ast/functions.go b/rules/ast/functions.go index 2445ee962e..5c14ae4d44 100644 --- a/rules/ast/functions.go +++ b/rules/ast/functions.go @@ -98,7 +98,16 @@ func deltaImpl(timestamp *time.Time, args []Node) interface{} { // === rate(node *MatrixNode) === func rateImpl(timestamp *time.Time, args []Node) interface{} { args = append(args, &ScalarLiteral{value: 1}) - return deltaImpl(timestamp, args) + vector := deltaImpl(timestamp, args).(Vector) + + // TODO: could be other type of MatrixNode in the future (right now, only + // MatrixLiteral exists). Find a better way of getting the duration of a + // matrix, such as looking at the samples themselves. + interval := args[0].(*MatrixLiteral).interval + for _, sample := range vector { + sample.Value /= model.SampleValue(interval / time.Second) + } + return vector } // === sampleVectorImpl() ===