diff --git a/rules/ast/functions.go b/rules/ast/functions.go index da3a9c765..2f541d7df 100644 --- a/rules/ast/functions.go +++ b/rules/ast/functions.go @@ -16,6 +16,7 @@ package ast import ( "errors" "fmt" + "math" "sort" "time" @@ -255,6 +256,15 @@ func sampleVectorImpl(timestamp time.Time, view *viewAdapter, args []Node) inter } } +// === scalar(node *VectorNode) Scalar === +func scalarImpl(timestamp time.Time, view *viewAdapter, args []Node) interface{} { + v := args[0].(VectorNode).Eval(timestamp, view) + if len(v) != 1 { + return clientmodel.SampleValue(math.NaN()) + } + return clientmodel.SampleValue(v[0].Value) +} + var functions = map[string]*Function{ "delta": { name: "delta", @@ -274,6 +284,12 @@ var functions = map[string]*Function{ returnType: VECTOR, callFn: sampleVectorImpl, }, + "scalar": { + name: "scalar", + argTypes: []ExprType{VECTOR}, + returnType: SCALAR, + callFn: scalarImpl, + }, "sort": { name: "sort", argTypes: []ExprType{VECTOR},