mirror of https://github.com/grafana/grafana
parent
7224ea5229
commit
7c3dbe2a38
@ -1,49 +1,15 @@ |
||||
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 { |
||||
//Todo: This should be made safer :)
|
||||
|
||||
ts := &TimeSeries{ |
||||
return &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 |
||||
} |
||||
|
@ -1,36 +0,0 @@ |
||||
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) |
||||
}) |
||||
}) |
||||
} |
Loading…
Reference in new issue