Commit e33d1870 by Carl Bergquist Committed by GitHub

Merge pull request #12287 from bergquist/fix_12286

Influxdb: add mode functions
parents f0254c20 c63533f0
...@@ -31,6 +31,7 @@ func init() { ...@@ -31,6 +31,7 @@ func init() {
renders["mean"] = QueryDefinition{Renderer: functionRenderer} renders["mean"] = QueryDefinition{Renderer: functionRenderer}
renders["median"] = QueryDefinition{Renderer: functionRenderer} renders["median"] = QueryDefinition{Renderer: functionRenderer}
renders["sum"] = QueryDefinition{Renderer: functionRenderer} renders["sum"] = QueryDefinition{Renderer: functionRenderer}
renders["mode"] = QueryDefinition{Renderer: functionRenderer}
renders["holt_winters"] = QueryDefinition{ renders["holt_winters"] = QueryDefinition{
Renderer: functionRenderer, Renderer: functionRenderer,
......
...@@ -4,85 +4,39 @@ import ( ...@@ -4,85 +4,39 @@ import (
"testing" "testing"
"github.com/grafana/grafana/pkg/tsdb" "github.com/grafana/grafana/pkg/tsdb"
. "github.com/smartystreets/goconvey/convey"
) )
func TestInfluxdbQueryPart(t *testing.T) { func TestInfluxdbQueryPart(t *testing.T) {
Convey("Influxdb query parts", t, func() { tcs := []struct {
mode string
queryContext := &tsdb.TsdbQuery{TimeRange: tsdb.NewTimeRange("5m", "now")} input string
query := &Query{} params []string
expected string
Convey("render field ", func() { }{
part, err := NewQueryPart("field", []string{"value"}) {mode: "field", params: []string{"value"}, input: "value", expected: `"value"`},
So(err, ShouldBeNil) {mode: "derivative", params: []string{"10s"}, input: "mean(value)", expected: `derivative(mean(value), 10s)`},
{mode: "bottom", params: []string{"3"}, input: "value", expected: `bottom(value, 3)`},
res := part.Render(query, queryContext, "value") {mode: "time", params: []string{"$interval"}, input: "", expected: `time($interval)`},
So(res, ShouldEqual, `"value"`) {mode: "time", params: []string{"auto"}, input: "", expected: `time($__interval)`},
}) {mode: "spread", params: []string{}, input: "value", expected: `spread(value)`},
{mode: "math", params: []string{"/ 100"}, input: "mean(value)", expected: `mean(value) / 100`},
Convey("render nested part", func() { {mode: "alias", params: []string{"test"}, input: "mean(value)", expected: `mean(value) AS "test"`},
part, err := NewQueryPart("derivative", []string{"10s"}) {mode: "count", params: []string{}, input: "distinct(value)", expected: `count(distinct(value))`},
So(err, ShouldBeNil) {mode: "mode", params: []string{}, input: "value", expected: `mode(value)`},
}
res := part.Render(query, queryContext, "mean(value)")
So(res, ShouldEqual, "derivative(mean(value), 10s)") queryContext := &tsdb.TsdbQuery{TimeRange: tsdb.NewTimeRange("5m", "now")}
}) query := &Query{}
Convey("render bottom", func() { for _, tc := range tcs {
part, err := NewQueryPart("bottom", []string{"3"}) part, err := NewQueryPart(tc.mode, tc.params)
So(err, ShouldBeNil) if err != nil {
t.Errorf("Expected NewQueryPart to not return an error. error: %v", err)
res := part.Render(query, queryContext, "value") }
So(res, ShouldEqual, "bottom(value, 3)")
}) res := part.Render(query, queryContext, tc.input)
if res != tc.expected {
Convey("render time with $interval", func() { t.Errorf("expected %v to render into %s", tc, tc.expected)
part, err := NewQueryPart("time", []string{"$interval"}) }
So(err, ShouldBeNil) }
res := part.Render(query, queryContext, "")
So(res, ShouldEqual, "time($interval)")
})
Convey("render time with auto", func() {
part, err := NewQueryPart("time", []string{"auto"})
So(err, ShouldBeNil)
res := part.Render(query, queryContext, "")
So(res, ShouldEqual, "time($__interval)")
})
Convey("render spread", func() {
part, err := NewQueryPart("spread", []string{})
So(err, ShouldBeNil)
res := part.Render(query, queryContext, "value")
So(res, ShouldEqual, `spread(value)`)
})
Convey("render suffix", func() {
part, err := NewQueryPart("math", []string{"/ 100"})
So(err, ShouldBeNil)
res := part.Render(query, queryContext, "mean(value)")
So(res, ShouldEqual, "mean(value) / 100")
})
Convey("render alias", func() {
part, err := NewQueryPart("alias", []string{"test"})
So(err, ShouldBeNil)
res := part.Render(query, queryContext, "mean(value)")
So(res, ShouldEqual, `mean(value) AS "test"`)
})
Convey("render count distinct", func() {
part, err := NewQueryPart("count", []string{})
So(err, ShouldBeNil)
res := part.Render(query, queryContext, "distinct(value)")
So(res, ShouldEqual, `count(distinct(value))`)
})
})
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment