From 95c1a4a936e5a0672da201731089f0edcaa13121 Mon Sep 17 00:00:00 2001 From: bergquist Date: Wed, 10 Aug 2016 14:06:17 +0200 Subject: [PATCH] feat(alerting): implement more simple reducers --- pkg/services/alerting/conditions/reducer.go | 23 +++++++++++++++++ .../alerting/conditions/reducer_test.go | 25 +++++++++++++++++-- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/pkg/services/alerting/conditions/reducer.go b/pkg/services/alerting/conditions/reducer.go index d75d1ff9167..92ba268b13a 100644 --- a/pkg/services/alerting/conditions/reducer.go +++ b/pkg/services/alerting/conditions/reducer.go @@ -19,6 +19,29 @@ func (s *SimpleReducer) Reduce(series *tsdb.TimeSeries) float64 { 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 diff --git a/pkg/services/alerting/conditions/reducer_test.go b/pkg/services/alerting/conditions/reducer_test.go index c6f0509bbc2..ed3c89fbbdd 100644 --- a/pkg/services/alerting/conditions/reducer_test.go +++ b/pkg/services/alerting/conditions/reducer_test.go @@ -8,11 +8,32 @@ import ( ) func TestSimpleReducer(t *testing.T) { - Convey("Test simple reducer", t, func() { - Convey("can calculate avg of time serie", func() { + Convey("Test simple reducer by calculating", t, func() { + Convey("avg", func() { result := testReducer("avg", 1, 2, 3) So(result, ShouldEqual, float64(2)) }) + + Convey("sum", func() { + result := testReducer("sum", 1, 2, 3) + So(result, ShouldEqual, float64(6)) + }) + + Convey("min", func() { + result := testReducer("min", 3, 2, 1) + So(result, ShouldEqual, float64(1)) + }) + + Convey("max", func() { + result := testReducer("max", 1, 2, 3) + So(result, ShouldEqual, float64(3)) + }) + + Convey("mean odd numbers", func() { + result := testReducer("mean", 1, 2, 3000) + So(result, ShouldEqual, float64(2)) + }) + }) }