53 lines
966 B
Go
53 lines
966 B
Go
package conditions
|
|
|
|
import "github.com/grafana/grafana/pkg/tsdb"
|
|
|
|
type QueryReducer interface {
|
|
Reduce(timeSeries *tsdb.TimeSeries) float64
|
|
}
|
|
|
|
type SimpleReducer struct {
|
|
Type string
|
|
}
|
|
|
|
func (s *SimpleReducer) Reduce(series *tsdb.TimeSeries) float64 {
|
|
var value float64 = 0
|
|
|
|
switch s.Type {
|
|
case "avg":
|
|
for _, point := range series.Points {
|
|
value += point[0]
|
|
}
|
|
value = value / float64(len(series.Points))
|
|
case "sum":
|
|
for _, point := range series.Points {
|
|
value += point[0]
|
|
}
|
|
case "min":
|
|
for i, point := range series.Points {
|
|
if i == 0 {
|
|
value = point[0]
|
|
}
|
|
|
|
if value > point[0] {
|
|
value = point[0]
|
|
}
|
|
}
|
|
case "max":
|
|
for _, point := range series.Points {
|
|
if value < point[0] {
|
|
value = point[0]
|
|
}
|
|
}
|
|
case "mean":
|
|
meanPosition := int64(len(series.Points) / 2)
|
|
value = series.Points[meanPosition][0]
|
|
}
|
|
|
|
return value
|
|
}
|
|
|
|
func NewSimpleReducer(typ string) *SimpleReducer {
|
|
return &SimpleReducer{Type: typ}
|
|
}
|