| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package alerting
- import (
- "fmt"
- "math"
- "github.com/grafana/grafana/pkg/tsdb"
- )
- type Transformer interface {
- Transform(timeserie *tsdb.TimeSeries) (float64, error)
- }
- type AggregationTransformer struct {
- Method string
- }
- func (at *AggregationTransformer) Transform(timeserie *tsdb.TimeSeries) (float64, error) {
- if at.Method == "avg" {
- sum := float64(0)
- for _, point := range timeserie.Points {
- sum += point[0]
- }
- return sum / float64(len(timeserie.Points)), nil
- }
- //"sum": func(series *tsdb.TimeSeries) float64 {
- if at.Method == "sum" {
- sum := float64(0)
- for _, v := range timeserie.Points {
- sum += v[0]
- }
- return sum, nil
- }
- //"min": func(series *tsdb.TimeSeries) float64 {
- if at.Method == "min" {
- min := timeserie.Points[0][0]
- for _, v := range timeserie.Points {
- if v[0] < min {
- min = v[0]
- }
- }
- return min, nil
- }
- //"max": func(series *tsdb.TimeSeries) float64 {
- if at.Method == "max" {
- max := timeserie.Points[0][0]
- for _, v := range timeserie.Points {
- if v[0] > max {
- max = v[0]
- }
- }
- return max, nil
- }
- //"mean": func(series *tsdb.TimeSeries) float64 {
- if at.Method == "mean" {
- midPosition := int64(math.Floor(float64(len(timeserie.Points)) / float64(2)))
- return timeserie.Points[midPosition][0], nil
- }
- return float64(0), fmt.Errorf("Missing method")
- }
|