mirror of
https://github.com/ClusterCockpit/cc-metric-collector.git
synced 2024-11-10 12:37:25 +01:00
Use generic function to compute minimum
This commit is contained in:
parent
89c93185d4
commit
ec86a83a27
@ -3,7 +3,6 @@ package metricAggregator
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
|
||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
@ -45,55 +44,36 @@ func sumfunc(args interface{}) (interface{}, error) {
|
|||||||
return 0.0, err
|
return 0.0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func minAnyType[T float64 | float32 | int | int32 | int64](values []T) (interface{}, error) {
|
||||||
|
fmt.Println(values)
|
||||||
|
if len(values) == 0 {
|
||||||
|
return 0.0, errors.New("min function requires at least one argument")
|
||||||
|
}
|
||||||
|
var minimum T = values[0]
|
||||||
|
for _, value := range values {
|
||||||
|
if value < minimum {
|
||||||
|
minimum = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return minimum, nil
|
||||||
|
}
|
||||||
|
|
||||||
// Get the minimum value
|
// Get the minimum value
|
||||||
func minfunc(args interface{}) (interface{}, error) {
|
func minfunc(args interface{}) (interface{}, error) {
|
||||||
var err error = nil
|
|
||||||
switch values := args.(type) {
|
switch values := args.(type) {
|
||||||
case []float64:
|
case []float64:
|
||||||
var s float64 = math.MaxFloat64
|
return minAnyType(values)
|
||||||
for _, x := range values {
|
|
||||||
if x < s {
|
|
||||||
s = x
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return s, nil
|
|
||||||
case []float32:
|
case []float32:
|
||||||
var s float32 = math.MaxFloat32
|
return minAnyType(values)
|
||||||
for _, x := range values {
|
|
||||||
if x < s {
|
|
||||||
s = x
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return s, nil
|
|
||||||
case []int:
|
case []int:
|
||||||
var s int = int(math.MaxInt32)
|
return minAnyType(values)
|
||||||
for _, x := range values {
|
|
||||||
if x < s {
|
|
||||||
s = x
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return s, nil
|
|
||||||
case []int64:
|
case []int64:
|
||||||
var s int64 = math.MaxInt64
|
return minAnyType(values)
|
||||||
for _, x := range values {
|
|
||||||
if x < s {
|
|
||||||
s = x
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return s, nil
|
|
||||||
case []int32:
|
case []int32:
|
||||||
var s int32 = math.MaxInt32
|
return minAnyType(values)
|
||||||
for _, x := range values {
|
|
||||||
if x < s {
|
|
||||||
s = x
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return s, nil
|
|
||||||
default:
|
default:
|
||||||
err = errors.New("function 'min' only on list of values (float64, float32, int, int32, int64)")
|
return 0.0, errors.New("function 'min' only on list of values (float64, float32, int, int32, int64)")
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0.0, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the average or mean value
|
// Get the average or mean value
|
||||||
|
Loading…
Reference in New Issue
Block a user