diff --git a/pkg/services/alerting/conditions/reducer.go b/pkg/services/alerting/conditions/reducer.go index a982fa63d33..5fbaeb18326 100644 --- a/pkg/services/alerting/conditions/reducer.go +++ b/pkg/services/alerting/conditions/reducer.go @@ -62,6 +62,13 @@ func (s *SimpleReducer) Reduce(series *tsdb.TimeSeries) null.Float { case "count": value = float64(len(series.Points)) allNull = false + case "last": + for _, point := range series.Points { + if point[0].Valid { + value = point[0].Float64 + allNull = false + } + } } if allNull { diff --git a/pkg/services/alerting/conditions/reducer_test.go b/pkg/services/alerting/conditions/reducer_test.go index 198a52b746a..dfd229e1374 100644 --- a/pkg/services/alerting/conditions/reducer_test.go +++ b/pkg/services/alerting/conditions/reducer_test.go @@ -35,6 +35,12 @@ func TestSimpleReducer(t *testing.T) { result := testReducer("count", 1, 2, 3000) So(result, ShouldEqual, float64(3)) }) + + Convey("last", func() { + result := testReducer("last", 1, 2, 3000) + So(result, ShouldEqual, float64(3000)) + }) + }) } diff --git a/public/app/features/alerting/alert_def.ts b/public/app/features/alerting/alert_def.ts index aaddb9e425f..8ee1981f3d8 100644 --- a/public/app/features/alerting/alert_def.ts +++ b/public/app/features/alerting/alert_def.ts @@ -34,6 +34,7 @@ var reducerTypes = [ {text: 'max()', value: 'max'}, {text: 'sum()' , value: 'sum'}, {text: 'count()', value: 'count'}, + {text: 'last()', value: 'last'}, ]; var noDataModes = [