Files
grafana/pkg/services/alerting/conditions/reducer.go
T
2016-08-10 14:06:17 +02:00

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}
}