|
|
|
@ -59,7 +59,7 @@ import ( |
|
|
|
|
type FunctionCall func(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) |
|
|
|
|
|
|
|
|
|
// === time() float64 ===
|
|
|
|
|
func funcTime(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcTime(_ []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return Vector{Sample{ |
|
|
|
|
F: float64(enh.Ts) / 1000, |
|
|
|
|
}}, nil |
|
|
|
@ -498,7 +498,7 @@ func filterFloats(v Vector) Vector { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === sort(node parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcSort(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcSort(vals []parser.Value, _ parser.Expressions, _ *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
// NaN should sort to the bottom, so take descending sort with NaN first and
|
|
|
|
|
// reverse it.
|
|
|
|
|
byValueSorter := vectorByReverseValueHeap(filterFloats(vals[0].(Vector))) |
|
|
|
@ -507,7 +507,7 @@ func funcSort(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === sortDesc(node parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcSortDesc(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcSortDesc(vals []parser.Value, _ parser.Expressions, _ *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
// NaN should sort to the bottom, so take ascending sort with NaN first and
|
|
|
|
|
// reverse it.
|
|
|
|
|
byValueSorter := vectorByValueHeap(filterFloats(vals[0].(Vector))) |
|
|
|
@ -516,7 +516,7 @@ func funcSortDesc(vals []parser.Value, args parser.Expressions, enh *EvalNodeHel |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === sort_by_label(vector parser.ValueTypeVector, label parser.ValueTypeString...) (Vector, Annotations) ===
|
|
|
|
|
func funcSortByLabel(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcSortByLabel(vals []parser.Value, args parser.Expressions, _ *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
lbls := stringSliceFromArgs(args[1:]) |
|
|
|
|
slices.SortFunc(vals[0].(Vector), func(a, b Sample) int { |
|
|
|
|
for _, label := range lbls { |
|
|
|
@ -542,7 +542,7 @@ func funcSortByLabel(vals []parser.Value, args parser.Expressions, enh *EvalNode |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === sort_by_label_desc(vector parser.ValueTypeVector, label parser.ValueTypeString...) (Vector, Annotations) ===
|
|
|
|
|
func funcSortByLabelDesc(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcSortByLabelDesc(vals []parser.Value, args parser.Expressions, _ *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
lbls := stringSliceFromArgs(args[1:]) |
|
|
|
|
slices.SortFunc(vals[0].(Vector), func(a, b Sample) int { |
|
|
|
|
for _, label := range lbls { |
|
|
|
@ -589,7 +589,7 @@ func clamp(vec Vector, minVal, maxVal float64, enh *EvalNodeHelper) (Vector, ann |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === clamp(Vector parser.ValueTypeVector, min, max Scalar) (Vector, Annotations) ===
|
|
|
|
|
func funcClamp(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcClamp(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
vec := vals[0].(Vector) |
|
|
|
|
minVal := vals[1].(Vector)[0].F |
|
|
|
|
maxVal := vals[2].(Vector)[0].F |
|
|
|
@ -597,14 +597,14 @@ func funcClamp(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === clamp_max(Vector parser.ValueTypeVector, max Scalar) (Vector, Annotations) ===
|
|
|
|
|
func funcClampMax(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcClampMax(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
vec := vals[0].(Vector) |
|
|
|
|
maxVal := vals[1].(Vector)[0].F |
|
|
|
|
return clamp(vec, math.Inf(-1), maxVal, enh) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === clamp_min(Vector parser.ValueTypeVector, min Scalar) (Vector, Annotations) ===
|
|
|
|
|
func funcClampMin(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcClampMin(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
vec := vals[0].(Vector) |
|
|
|
|
minVal := vals[1].(Vector)[0].F |
|
|
|
|
return clamp(vec, minVal, math.Inf(+1), enh) |
|
|
|
@ -641,7 +641,7 @@ func funcRound(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === Scalar(node parser.ValueTypeVector) Scalar ===
|
|
|
|
|
func funcScalar(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcScalar(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
var ( |
|
|
|
|
v = vals[0].(Vector) |
|
|
|
|
value float64 |
|
|
|
@ -766,14 +766,14 @@ func funcAvgOverTime(vals []parser.Value, args parser.Expressions, enh *EvalNode |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === count_over_time(Matrix parser.ValueTypeMatrix) (Vector, Notes) ===
|
|
|
|
|
func funcCountOverTime(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcCountOverTime(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return aggrOverTime(vals, enh, func(s Series) float64 { |
|
|
|
|
return float64(len(s.Floats) + len(s.Histograms)) |
|
|
|
|
}), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === last_over_time(Matrix parser.ValueTypeMatrix) (Vector, Notes) ===
|
|
|
|
|
func funcLastOverTime(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcLastOverTime(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
el := vals[0].(Matrix)[0] |
|
|
|
|
|
|
|
|
|
var f FPoint |
|
|
|
@ -998,13 +998,13 @@ func funcAbsent(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelpe |
|
|
|
|
// This function will return 1 if the matrix has at least one element.
|
|
|
|
|
// Due to engine optimization, this function is only called when this condition is true.
|
|
|
|
|
// Then, the engine post-processes the results to get the expected output.
|
|
|
|
|
func funcAbsentOverTime(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcAbsentOverTime(_ []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return append(enh.Out, Sample{F: 1}), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === present_over_time(Vector parser.ValueTypeMatrix) (Vector, Annotations) ===
|
|
|
|
|
func funcPresentOverTime(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return aggrOverTime(vals, enh, func(s Series) float64 { |
|
|
|
|
func funcPresentOverTime(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return aggrOverTime(vals, enh, func(_ Series) float64 { |
|
|
|
|
return 1 |
|
|
|
|
}), nil |
|
|
|
|
} |
|
|
|
@ -1026,126 +1026,126 @@ func simpleFunc(vals []parser.Value, enh *EvalNodeHelper, f func(float64) float6 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === abs(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcAbs(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcAbs(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Abs), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === ceil(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcCeil(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcCeil(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Ceil), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === floor(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcFloor(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcFloor(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Floor), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === exp(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcExp(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcExp(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Exp), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === sqrt(Vector VectorNode) (Vector, Annotations) ===
|
|
|
|
|
func funcSqrt(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcSqrt(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Sqrt), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === ln(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcLn(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcLn(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Log), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === log2(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcLog2(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcLog2(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Log2), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === log10(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcLog10(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcLog10(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Log10), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === sin(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcSin(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcSin(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Sin), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === cos(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcCos(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcCos(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Cos), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === tan(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcTan(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcTan(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Tan), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === asin(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcAsin(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcAsin(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Asin), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === acos(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcAcos(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcAcos(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Acos), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === atan(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcAtan(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcAtan(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Atan), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === sinh(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcSinh(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcSinh(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Sinh), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === cosh(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcCosh(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcCosh(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Cosh), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === tanh(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcTanh(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcTanh(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Tanh), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === asinh(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcAsinh(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcAsinh(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Asinh), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === acosh(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcAcosh(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcAcosh(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Acosh), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === atanh(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcAtanh(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcAtanh(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, math.Atanh), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === rad(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcRad(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcRad(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, func(v float64) float64 { |
|
|
|
|
return v * math.Pi / 180 |
|
|
|
|
}), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === deg(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcDeg(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcDeg(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, func(v float64) float64 { |
|
|
|
|
return v * 180 / math.Pi |
|
|
|
|
}), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === pi() Scalar ===
|
|
|
|
|
func funcPi(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcPi(_ []parser.Value, _ parser.Expressions, _ *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return Vector{Sample{F: math.Pi}}, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === sgn(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcSgn(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcSgn(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return simpleFunc(vals, enh, func(v float64) float64 { |
|
|
|
|
switch { |
|
|
|
|
case v < 0: |
|
|
|
@ -1159,7 +1159,7 @@ func funcSgn(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === timestamp(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcTimestamp(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcTimestamp(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
vec := vals[0].(Vector) |
|
|
|
|
for _, el := range vec { |
|
|
|
|
if !enh.enableDelayedNameRemoval { |
|
|
|
@ -1284,7 +1284,7 @@ func funcPredictLinear(vals []parser.Value, args parser.Expressions, enh *EvalNo |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === histogram_count(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcHistogramCount(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcHistogramCount(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
inVec := vals[0].(Vector) |
|
|
|
|
|
|
|
|
|
for _, sample := range inVec { |
|
|
|
@ -1305,7 +1305,7 @@ func funcHistogramCount(vals []parser.Value, args parser.Expressions, enh *EvalN |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === histogram_sum(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcHistogramSum(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcHistogramSum(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
inVec := vals[0].(Vector) |
|
|
|
|
|
|
|
|
|
for _, sample := range inVec { |
|
|
|
@ -1326,7 +1326,7 @@ func funcHistogramSum(vals []parser.Value, args parser.Expressions, enh *EvalNod |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === histogram_avg(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcHistogramAvg(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcHistogramAvg(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
inVec := vals[0].(Vector) |
|
|
|
|
|
|
|
|
|
for _, sample := range inVec { |
|
|
|
@ -1347,7 +1347,7 @@ func funcHistogramAvg(vals []parser.Value, args parser.Expressions, enh *EvalNod |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === histogram_stddev(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcHistogramStdDev(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcHistogramStdDev(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
inVec := vals[0].(Vector) |
|
|
|
|
|
|
|
|
|
for _, sample := range inVec { |
|
|
|
@ -1390,7 +1390,7 @@ func funcHistogramStdDev(vals []parser.Value, args parser.Expressions, enh *Eval |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === histogram_stdvar(Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcHistogramStdVar(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcHistogramStdVar(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
inVec := vals[0].(Vector) |
|
|
|
|
|
|
|
|
|
for _, sample := range inVec { |
|
|
|
@ -1433,7 +1433,7 @@ func funcHistogramStdVar(vals []parser.Value, args parser.Expressions, enh *Eval |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === histogram_fraction(lower, upper parser.ValueTypeScalar, Vector parser.ValueTypeVector) (Vector, Annotations) ===
|
|
|
|
|
func funcHistogramFraction(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcHistogramFraction(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
lower := vals[0].(Vector)[0].F |
|
|
|
|
upper := vals[1].(Vector)[0].F |
|
|
|
|
inVec := vals[2].(Vector) |
|
|
|
@ -1550,7 +1550,7 @@ func funcHistogramQuantile(vals []parser.Value, args parser.Expressions, enh *Ev |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === resets(Matrix parser.ValueTypeMatrix) (Vector, Annotations) ===
|
|
|
|
|
func funcResets(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcResets(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
floats := vals[0].(Matrix)[0].Floats |
|
|
|
|
histograms := vals[0].(Matrix)[0].Histograms |
|
|
|
|
resets := 0 |
|
|
|
@ -1595,7 +1595,7 @@ func funcResets(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelpe |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === changes(Matrix parser.ValueTypeMatrix) (Vector, Annotations) ===
|
|
|
|
|
func funcChanges(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcChanges(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
floats := vals[0].(Matrix)[0].Floats |
|
|
|
|
histograms := vals[0].(Matrix)[0].Histograms |
|
|
|
|
changes := 0 |
|
|
|
@ -1683,7 +1683,7 @@ func (ev *evaluator) evalLabelReplace(ctx context.Context, args parser.Expressio |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === Vector(s Scalar) (Vector, Annotations) ===
|
|
|
|
|
func funcVector(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcVector(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return append(enh.Out, |
|
|
|
|
Sample{ |
|
|
|
|
Metric: labels.Labels{}, |
|
|
|
@ -1765,56 +1765,56 @@ func dateWrapper(vals []parser.Value, enh *EvalNodeHelper, f func(time.Time) flo |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === days_in_month(v Vector) Scalar ===
|
|
|
|
|
func funcDaysInMonth(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcDaysInMonth(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return dateWrapper(vals, enh, func(t time.Time) float64 { |
|
|
|
|
return float64(32 - time.Date(t.Year(), t.Month(), 32, 0, 0, 0, 0, time.UTC).Day()) |
|
|
|
|
}), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === day_of_month(v Vector) Scalar ===
|
|
|
|
|
func funcDayOfMonth(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcDayOfMonth(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return dateWrapper(vals, enh, func(t time.Time) float64 { |
|
|
|
|
return float64(t.Day()) |
|
|
|
|
}), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === day_of_week(v Vector) Scalar ===
|
|
|
|
|
func funcDayOfWeek(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcDayOfWeek(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return dateWrapper(vals, enh, func(t time.Time) float64 { |
|
|
|
|
return float64(t.Weekday()) |
|
|
|
|
}), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === day_of_year(v Vector) Scalar ===
|
|
|
|
|
func funcDayOfYear(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcDayOfYear(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return dateWrapper(vals, enh, func(t time.Time) float64 { |
|
|
|
|
return float64(t.YearDay()) |
|
|
|
|
}), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === hour(v Vector) Scalar ===
|
|
|
|
|
func funcHour(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcHour(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return dateWrapper(vals, enh, func(t time.Time) float64 { |
|
|
|
|
return float64(t.Hour()) |
|
|
|
|
}), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === minute(v Vector) Scalar ===
|
|
|
|
|
func funcMinute(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcMinute(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return dateWrapper(vals, enh, func(t time.Time) float64 { |
|
|
|
|
return float64(t.Minute()) |
|
|
|
|
}), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === month(v Vector) Scalar ===
|
|
|
|
|
func funcMonth(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcMonth(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return dateWrapper(vals, enh, func(t time.Time) float64 { |
|
|
|
|
return float64(t.Month()) |
|
|
|
|
}), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// === year(v Vector) Scalar ===
|
|
|
|
|
func funcYear(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
func funcYear(vals []parser.Value, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) { |
|
|
|
|
return dateWrapper(vals, enh, func(t time.Time) float64 { |
|
|
|
|
return float64(t.Year()) |
|
|
|
|
}), nil |
|
|
|
|