feat(alerting): add timeserie aggregation functions

This commit is contained in:
bergquist
2016-05-27 14:59:13 +02:00
parent 205afd7212
commit abc1ae3956
4 changed files with 148 additions and 6 deletions
+39
View File
@@ -1,8 +1,47 @@
package models
import "math"
type TimeSeries struct {
Name string `json:"name"`
Points [][2]float64 `json:"points"`
Avg float64
Sum float64
Min float64
Max float64
Mean float64
}
type TimeSeriesSlice []*TimeSeries
func NewTimeSeries(name string, points [][2]float64) *TimeSeries {
ts := &TimeSeries{
Name: name,
Points: points,
}
ts.Min = points[0][0]
ts.Max = points[0][0]
for _, v := range points {
value := v[0]
if value > ts.Max {
ts.Max = value
}
if value < ts.Min {
ts.Min = value
}
ts.Sum += value
}
ts.Avg = ts.Sum / float64(len(points))
midPosition := int64(math.Floor(float64(len(points)) / float64(2)))
ts.Mean = points[midPosition][0]
return ts
}
+36
View File
@@ -0,0 +1,36 @@
package models
import (
. "github.com/smartystreets/goconvey/convey"
"testing"
)
func TestTimeSeries(t *testing.T) {
Convey("timeseries aggregation tests", t, func() {
ts := NewTimeSeries("test", [][2]float64{
{1, 0},
{2, 0},
{3, 0},
})
Convey("sum", func() {
So(ts.Sum, ShouldEqual, 6)
})
Convey("avg", func() {
So(ts.Avg, ShouldEqual, 2)
})
Convey("min", func() {
So(ts.Min, ShouldEqual, 1)
})
Convey("max", func() {
So(ts.Max, ShouldEqual, 3)
})
Convey("mean", func() {
So(ts.Mean, ShouldEqual, 2)
})
})
}