transformer.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package alerting
  2. import (
  3. "fmt"
  4. "math"
  5. "github.com/grafana/grafana/pkg/tsdb"
  6. )
  7. type Transformer interface {
  8. Transform(timeserie *tsdb.TimeSeries) (float64, error)
  9. }
  10. type AggregationTransformer struct {
  11. Method string
  12. }
  13. func (at *AggregationTransformer) Transform(timeserie *tsdb.TimeSeries) (float64, error) {
  14. if at.Method == "avg" {
  15. sum := float64(0)
  16. for _, point := range timeserie.Points {
  17. sum += point[0]
  18. }
  19. return sum / float64(len(timeserie.Points)), nil
  20. }
  21. //"sum": func(series *tsdb.TimeSeries) float64 {
  22. if at.Method == "sum" {
  23. sum := float64(0)
  24. for _, v := range timeserie.Points {
  25. sum += v[0]
  26. }
  27. return sum, nil
  28. }
  29. //"min": func(series *tsdb.TimeSeries) float64 {
  30. if at.Method == "min" {
  31. min := timeserie.Points[0][0]
  32. for _, v := range timeserie.Points {
  33. if v[0] < min {
  34. min = v[0]
  35. }
  36. }
  37. return min, nil
  38. }
  39. //"max": func(series *tsdb.TimeSeries) float64 {
  40. if at.Method == "max" {
  41. max := timeserie.Points[0][0]
  42. for _, v := range timeserie.Points {
  43. if v[0] > max {
  44. max = v[0]
  45. }
  46. }
  47. return max, nil
  48. }
  49. //"mean": func(series *tsdb.TimeSeries) float64 {
  50. if at.Method == "mean" {
  51. midPosition := int64(math.Floor(float64(len(timeserie.Points)) / float64(2)))
  52. return timeserie.Points[midPosition][0], nil
  53. }
  54. return float64(0), fmt.Errorf("Missing method")
  55. }