mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 19:31:44 +00:00
add support for parsing buckets from variables of prom.Linear and prom.Expo helpers
Change-Id: I61bb46dcbdc02d506da563bc7973430ecef8c364
This commit is contained in:
parent
79b4f1e77a
commit
be3e5cb313
@ -404,13 +404,19 @@ func (c *metricDecoder) decodeBuckets(expr ast.Expr) ([]float64, error) {
|
|||||||
case *ast.Ident:
|
case *ast.Ident:
|
||||||
variableExpr, found := c.variables[v.Name]
|
variableExpr, found := c.variables[v.Name]
|
||||||
if !found {
|
if !found {
|
||||||
return nil, fmt.Errorf("couldn't find variable for bucket")
|
return nil, newDecodeErrorf(v, "couldn't find variable for bucket")
|
||||||
}
|
}
|
||||||
v2, ok := variableExpr.(*ast.CompositeLit)
|
switch v2 := variableExpr.(type) {
|
||||||
if !ok {
|
case *ast.CompositeLit:
|
||||||
return nil, fmt.Errorf("couldn't find variable for bucket")
|
return decodeListOfFloats(v2, v2.Elts)
|
||||||
|
case *ast.CallExpr:
|
||||||
|
float64s, err2, done := c.decodeBucketFunctionCall(v2)
|
||||||
|
if done {
|
||||||
|
return float64s, err2
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return nil, newDecodeErrorf(v, "couldn't find variable for bucket")
|
||||||
}
|
}
|
||||||
return decodeListOfFloats(v2, v2.Elts)
|
|
||||||
|
|
||||||
case *ast.CompositeLit:
|
case *ast.CompositeLit:
|
||||||
return decodeListOfFloats(v, v.Elts)
|
return decodeListOfFloats(v, v.Elts)
|
||||||
@ -421,32 +427,40 @@ func (c *metricDecoder) decodeBuckets(expr ast.Expr) ([]float64, error) {
|
|||||||
return metrics.DefBuckets, nil
|
return metrics.DefBuckets, nil
|
||||||
}
|
}
|
||||||
case *ast.CallExpr:
|
case *ast.CallExpr:
|
||||||
se, ok := v.Fun.(*ast.SelectorExpr)
|
float64s, err2, done := c.decodeBucketFunctionCall(v)
|
||||||
if !ok {
|
if done {
|
||||||
return nil, newDecodeErrorf(v, errBuckets)
|
return float64s, err2
|
||||||
}
|
|
||||||
functionName := se.Sel.String()
|
|
||||||
functionImport, ok := se.X.(*ast.Ident)
|
|
||||||
if !ok {
|
|
||||||
return nil, newDecodeErrorf(v, errBuckets)
|
|
||||||
}
|
|
||||||
if functionImport.String() != c.kubeMetricsImportName {
|
|
||||||
return nil, newDecodeErrorf(v, errBuckets)
|
|
||||||
}
|
|
||||||
firstArg, secondArg, thirdArg, err := decodeBucketArguments(v)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
switch functionName {
|
|
||||||
case "LinearBuckets":
|
|
||||||
return metrics.LinearBuckets(firstArg, secondArg, thirdArg), nil
|
|
||||||
case "ExponentialBuckets":
|
|
||||||
return metrics.ExponentialBuckets(firstArg, secondArg, thirdArg), nil
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, newDecodeErrorf(expr, errBuckets)
|
return nil, newDecodeErrorf(expr, errBuckets)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *metricDecoder) decodeBucketFunctionCall(v *ast.CallExpr) ([]float64, error, bool) {
|
||||||
|
se, ok := v.Fun.(*ast.SelectorExpr)
|
||||||
|
if !ok {
|
||||||
|
return nil, newDecodeErrorf(v, errBuckets), true
|
||||||
|
}
|
||||||
|
functionName := se.Sel.String()
|
||||||
|
functionImport, ok := se.X.(*ast.Ident)
|
||||||
|
if !ok {
|
||||||
|
return nil, newDecodeErrorf(v, errBuckets), true
|
||||||
|
}
|
||||||
|
if functionImport.String() != c.kubeMetricsImportName {
|
||||||
|
return nil, newDecodeErrorf(v, errBuckets), true
|
||||||
|
}
|
||||||
|
firstArg, secondArg, thirdArg, err := decodeBucketArguments(v)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err, true
|
||||||
|
}
|
||||||
|
switch functionName {
|
||||||
|
case "LinearBuckets":
|
||||||
|
return metrics.LinearBuckets(firstArg, secondArg, thirdArg), nil, true
|
||||||
|
case "ExponentialBuckets":
|
||||||
|
return metrics.ExponentialBuckets(firstArg, secondArg, thirdArg), nil, true
|
||||||
|
}
|
||||||
|
return nil, nil, false
|
||||||
|
}
|
||||||
|
|
||||||
func (c *metricDecoder) decodeObjectives(expr ast.Expr) (map[float64]float64, error) {
|
func (c *metricDecoder) decodeObjectives(expr ast.Expr) (map[float64]float64, error) {
|
||||||
switch v := expr.(type) {
|
switch v := expr.(type) {
|
||||||
case *ast.CompositeLit:
|
case *ast.CompositeLit:
|
||||||
|
Loading…
Reference in New Issue
Block a user