mirror of
https://hubproxy.babadafafafafa.cn/https://github.com/yunionio/cloudpods.git
synced 2026-09-20 08:03:53 +08:00
feat(monitor): update influxql-to-metricsql@v0.0.7 to support percentile aggregator (#20836)
This commit is contained in:
2
go.mod
2
go.mod
@@ -70,7 +70,7 @@ require (
|
||||
github.com/vishvananda/netns v0.0.5-0.20240412164733-9469873f4601
|
||||
github.com/vmihailenco/msgpack v4.0.4+incompatible
|
||||
github.com/xuri/excelize/v2 v2.7.1
|
||||
github.com/zexi/influxql-to-metricsql v0.0.6
|
||||
github.com/zexi/influxql-to-metricsql v0.0.7
|
||||
go.etcd.io/etcd/api/v3 v3.5.0
|
||||
go.etcd.io/etcd/client/v3 v3.5.0
|
||||
golang.org/x/crypto v0.8.0
|
||||
|
||||
2
go.sum
2
go.sum
@@ -840,6 +840,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.0.6 h1:E16T4oqgjIJtSNVvhGGHnw+pmY3yGz2iRsmmmSVuOpY=
|
||||
github.com/zexi/influxql-to-metricsql v0.0.6/go.mod h1:PyRRM+3Zrzzig6J4okYLeSv+/d+5GaL5ccBaUKQABNs=
|
||||
github.com/zexi/influxql-to-metricsql v0.0.7 h1:t2Kp6neknnOnszNl3mLteK4dSmXWglfI1JYUtRWTmyQ=
|
||||
github.com/zexi/influxql-to-metricsql v0.0.7/go.mod h1:PyRRM+3Zrzzig6J4okYLeSv+/d+5GaL5ccBaUKQABNs=
|
||||
go.etcd.io/etcd/api/v3 v3.5.0 h1:GsV3S+OfZEOCNXdtNkBSR7kgLobAa/SO6tCxRa0GAYw=
|
||||
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.0 h1:2aQv6F436YnN7I4VbI8PPYrBhu+SmrTaADcf8Mi/6PU=
|
||||
|
||||
44
vendor/github.com/zexi/influxql-to-metricsql/converter/translator/promql.go
generated
vendored
44
vendor/github.com/zexi/influxql-to-metricsql/converter/translator/promql.go
generated
vendored
@@ -17,9 +17,23 @@ import (
|
||||
const UNION_RESULT_NAME = "__union_result__"
|
||||
|
||||
const (
|
||||
CALL_TOP = "top"
|
||||
CALL_TOP = "top"
|
||||
CALL_PERCENTILE = "percentile"
|
||||
)
|
||||
|
||||
var MUL_ARGS_AGGREGATOR MulArgsAggregator = []string{CALL_TOP, CALL_PERCENTILE}
|
||||
|
||||
type MulArgsAggregator []string
|
||||
|
||||
func (m MulArgsAggregator) Has(aggr string) bool {
|
||||
for _, a := range m {
|
||||
if a == aggr {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
type promQL struct {
|
||||
groupByWildcard bool
|
||||
timeRange *influxql.TimeRange
|
||||
@@ -331,6 +345,15 @@ func getAggrExpr(ops []*AggrOperator, expr promql.Expr) promql.Expr {
|
||||
promql.Expressions{
|
||||
aggrOp.Args[0],
|
||||
restExpr})
|
||||
case CALL_PERCENTILE:
|
||||
expr = newAggrExprWithArgs("quantile_over_time",
|
||||
[]promql.ValueType{
|
||||
promql.ValueTypeString,
|
||||
promql.ValueTypeMatrix,
|
||||
}, promql.ValueTypeVector,
|
||||
promql.Expressions{
|
||||
aggrOp.Args[0],
|
||||
restExpr})
|
||||
}
|
||||
return expr
|
||||
}
|
||||
@@ -347,18 +370,25 @@ func newAggrOperatorByName(name string) *AggrOperator {
|
||||
}
|
||||
|
||||
func getAggrOperator(op *influxql.Call) ([]*AggrOperator, error) {
|
||||
if len(op.Args) != 1 && op.Name != CALL_TOP {
|
||||
if len(op.Args) != 1 && !MUL_ARGS_AGGREGATOR.Has(op.Name) {
|
||||
return nil, errors.Errorf("not supported aggregator: %s with args: %#v", op.String(), op.Args)
|
||||
}
|
||||
aggOp := newAggrOperatorByName(op.Name)
|
||||
if op.Name == CALL_TOP {
|
||||
topNumStr := op.Args[len(op.Args)-1].String()
|
||||
topNum, err := strconv.Atoi(topNumStr)
|
||||
if op.Name == CALL_TOP || 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)
|
||||
}
|
||||
numFloat := float64(num)
|
||||
if op.Name == CALL_PERCENTILE {
|
||||
if numFloat > 100 {
|
||||
return nil, errors.Errorf("percentile %f is large than 100", numFloat)
|
||||
}
|
||||
numFloat = numFloat / 100
|
||||
}
|
||||
aggOp.Args = promql.Expressions{
|
||||
&promql.NumberLiteral{Val: float64(topNum)},
|
||||
&promql.NumberLiteral{Val: numFloat},
|
||||
}
|
||||
}
|
||||
ret := []*AggrOperator{aggOp}
|
||||
@@ -418,7 +448,7 @@ var (
|
||||
)
|
||||
|
||||
func getCallVariable(c *influxql.Call) (string, error) {
|
||||
if len(c.Args) != 1 && c.Name != CALL_TOP {
|
||||
if len(c.Args) != 1 && !MUL_ARGS_AGGREGATOR.Has(c.Name) {
|
||||
return "", errors.Errorf("length of call %q args %#v != 1", c.Name, c.Args)
|
||||
}
|
||||
switch args := c.Args[0].(type) {
|
||||
|
||||
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
@@ -1174,7 +1174,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.0.6
|
||||
# github.com/zexi/influxql-to-metricsql v0.0.7
|
||||
## explicit; go 1.18
|
||||
github.com/zexi/influxql-to-metricsql/converter
|
||||
github.com/zexi/influxql-to-metricsql/converter/translator
|
||||
|
||||
Reference in New Issue
Block a user