@@ -480,15 +480,54 @@ func (c *metricDecoder) decodeBucketFunctionCall(v *ast.CallExpr) ([]float64, er
480
480
if functionImport .String () != c .kubeMetricsImportName {
481
481
return nil , newDecodeErrorf (v , errBuckets ), true
482
482
}
483
- firstArg , secondArg , thirdArg , err := decodeBucketArguments (v )
484
- if err != nil {
485
- return nil , err , true
486
- }
487
483
switch functionName {
488
484
case "LinearBuckets" :
485
+ firstArg , secondArg , thirdArg , err := decodeBucketArguments (v )
486
+ if err != nil {
487
+ return nil , err , true
488
+ }
489
489
return metrics .LinearBuckets (firstArg , secondArg , thirdArg ), nil , true
490
490
case "ExponentialBuckets" :
491
+ firstArg , secondArg , thirdArg , err := decodeBucketArguments (v )
492
+ if err != nil {
493
+ return nil , err , true
494
+ }
491
495
return metrics .ExponentialBuckets (firstArg , secondArg , thirdArg ), nil , true
496
+ case "MergeBuckets" :
497
+ merged := []float64 {}
498
+ for _ , arg := range v .Args {
499
+ switch argExpr := arg .(type ) {
500
+ case * ast.CompositeLit :
501
+ fs , err := decodeListOfFloats (argExpr , argExpr .Elts )
502
+ if err != nil {
503
+ return nil , err , true
504
+ }
505
+ merged = append (merged , fs ... )
506
+ case * ast.CallExpr :
507
+ se , ok = argExpr .Fun .(* ast.SelectorExpr )
508
+ if ok {
509
+ functionName := se .Sel .String ()
510
+ functionImport , ok := se .X .(* ast.Ident )
511
+ if ! ok {
512
+ return nil , newDecodeErrorf (v , errBuckets ), true
513
+ }
514
+ if functionImport .String () != c .kubeMetricsImportName {
515
+ return nil , newDecodeErrorf (v , errBuckets ), true
516
+ }
517
+ firstArg , secondArg , thirdArg , err := decodeBucketArguments (argExpr )
518
+ if err != nil {
519
+ return nil , err , true
520
+ }
521
+ switch functionName {
522
+ case "LinearBuckets" :
523
+ merged = append (merged , metrics .LinearBuckets (firstArg , secondArg , thirdArg )... )
524
+ case "ExponentialBuckets" :
525
+ merged = append (merged , metrics .LinearBuckets (firstArg , secondArg , thirdArg )... )
526
+ }
527
+ }
528
+ }
529
+ }
530
+ return merged , nil , true
492
531
}
493
532
return nil , nil , false
494
533
}
0 commit comments