fix(monitor): support victoria metrics bottom query (#22417)

This commit is contained in:
Zexi Li
2025-04-15 15:17:03 +08:00
committed by GitHub
parent 3df60efa85
commit 7b689a7de6
4 changed files with 18 additions and 6 deletions
+1 -1
View File
@@ -65,7 +65,7 @@ require (
github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74
github.com/vmihailenco/msgpack v4.0.4+incompatible
github.com/xuri/excelize/v2 v2.7.1
github.com/zexi/influxql-to-metricsql v0.1.0
github.com/zexi/influxql-to-metricsql v0.1.1
go.etcd.io/etcd/api/v3 v3.5.0
go.etcd.io/etcd/client/v3 v3.5.0
golang.org/x/crypto v0.19.0
+2
View File
@@ -794,6 +794,8 @@ github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPR
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
github.com/zexi/influxql-to-metricsql v0.1.0 h1:gSXhnYEu16fHNs5e1NSdNYceKdlKjMijTHEpnnMVYN4=
github.com/zexi/influxql-to-metricsql v0.1.0/go.mod h1:JlC5FY+6De9ZPxG47G5DOgva8P9X1VaKS4ExzCmhSCc=
github.com/zexi/influxql-to-metricsql v0.1.1 h1:dXnVzlxVLuo88zGkDca7erEnmvprGWjzsBcs8qIoQGQ=
github.com/zexi/influxql-to-metricsql v0.1.1/go.mod h1:JlC5FY+6De9ZPxG47G5DOgva8P9X1VaKS4ExzCmhSCc=
github.com/zexi/promql/v2 v2.12.1 h1:crHKpULdLLsBZ9b78Rg6qQkugzlk6BHeCj93tw/F5RU=
github.com/zexi/promql/v2 v2.12.1/go.mod h1:2UtzWZGmth95n2qdIZWpJ5yQ0cE5hEvz0dGsajI1Sqg=
go.etcd.io/etcd/api/v3 v3.5.0 h1:GsV3S+OfZEOCNXdtNkBSR7kgLobAa/SO6tCxRa0GAYw=
@@ -18,13 +18,14 @@ const UNION_RESULT_NAME = "__union_result__"
const (
CALL_TOP = "top"
CALL_BOTTOM = "bottom"
CALL_PERCENTILE = "percentile"
CALL_SUM = "sum"
CALL_MIN = "min"
CALL_MAX = "max"
)
var MUL_ARGS_AGGREGATOR MulArgsAggregator = []string{CALL_TOP, CALL_PERCENTILE}
var MUL_ARGS_AGGREGATOR MulArgsAggregator = []string{CALL_TOP, CALL_PERCENTILE, CALL_BOTTOM}
type MulArgsAggregator []string
@@ -269,7 +270,7 @@ func (m promQL) generateExpr(
shouldSkipAggr := func(opName string) bool {
switch opName {
case CALL_PERCENTILE, CALL_TOP, "last":
case CALL_PERCENTILE, CALL_TOP, CALL_BOTTOM, "last":
return true
}
return false
@@ -380,6 +381,15 @@ func getAggrExpr(ops []*AggrOperator, expr promql.Expr) promql.Expr {
promql.Expressions{
aggrOp.Args[0],
restExpr})
case CALL_BOTTOM:
expr = newAggrExprWithArgs("bottomk_avg",
[]promql.ValueType{
promql.ValueTypeString,
promql.ValueTypeMatrix,
}, promql.ValueTypeVector,
promql.Expressions{
aggrOp.Args[0],
restExpr})
case CALL_PERCENTILE:
expr = newAggrExprWithArgs("quantile_over_time",
[]promql.ValueType{
@@ -409,11 +419,11 @@ func getAggrOperator(op *influxql.Call) ([]*AggrOperator, error) {
return nil, errors.Errorf("not supported aggregator: %s with args: %#v", op.String(), op.Args)
}
aggOp := newAggrOperatorByName(op.Name)
if op.Name == CALL_TOP || op.Name == CALL_PERCENTILE {
if op.Name == CALL_TOP || op.Name == CALL_BOTTOM || op.Name == CALL_PERCENTILE {
numStr := op.Args[len(op.Args)-1].String()
num, err := strconv.Atoi(numStr)
if err != nil {
return nil, errors.Wrapf(err, "parse top aggregator: %s", op)
return nil, errors.Wrapf(err, "parse top/bottom aggregator: %s", op)
}
numFloat := float64(num)
if op.Name == CALL_PERCENTILE {
+1 -1
View File
@@ -1033,7 +1033,7 @@ github.com/xuri/nfp
# github.com/yusufpapurcu/wmi v1.2.2
## explicit; go 1.16
github.com/yusufpapurcu/wmi
# github.com/zexi/influxql-to-metricsql v0.1.0
# github.com/zexi/influxql-to-metricsql v0.1.1
## explicit; go 1.18
github.com/zexi/influxql-to-metricsql/converter
github.com/zexi/influxql-to-metricsql/converter/translator