feat(influxdb): add real support for time ranges

This commit is contained in:
bergquist
2016-10-07 11:23:37 +02:00
parent e36f9fa795
commit 0633e2c03f
3 changed files with 28 additions and 5 deletions

View File

@@ -1,5 +1,7 @@
package influxdb package influxdb
import "github.com/grafana/grafana/pkg/tsdb"
type Query struct { type Query struct {
Measurement string Measurement string
Policy string Policy string
@@ -8,7 +10,8 @@ type Query struct {
GroupBy []*QueryPart GroupBy []*QueryPart
Selects []*Select Selects []*Select
Interval string Interval string
TimeRange tsdb.TimeRange
} }
type Tag struct { type Tag struct {

View File

@@ -40,9 +40,14 @@ func (*QueryBuilder) Build(query *Query, queryContext *tsdb.QueryContext) (strin
} }
func renderTimeFilter(query *Query) string { func renderTimeFilter(query *Query) string {
//res += "$timeFilter" from := "now() - " + query.TimeRange.From
//res += "time > now() -" + strings.Replace(queryContext.TimeRange.From, "now", "", 1) to := ""
return "time > now() - 5m"
if query.TimeRange.To != "now" && query.TimeRange.To != "" {
to = " and time < now() - " + strings.Replace(query.TimeRange.To, "now-", "", 1)
}
return fmt.Sprintf("time > %s%s", from, to)
} }
func renderSelectors(query *Query) string { func renderSelectors(query *Query) string {

View File

@@ -8,6 +8,7 @@ import (
) )
func TestInfluxdbQueryBuilder(t *testing.T) { func TestInfluxdbQueryBuilder(t *testing.T) {
Convey("Influxdb query builder", t, func() { Convey("Influxdb query builder", t, func() {
builder := QueryBuilder{} builder := QueryBuilder{}
@@ -31,6 +32,7 @@ func TestInfluxdbQueryBuilder(t *testing.T) {
Policy: "policy", Policy: "policy",
GroupBy: []*QueryPart{groupBy1, groupBy2}, GroupBy: []*QueryPart{groupBy1, groupBy2},
Interval: "10s", Interval: "10s",
TimeRange: tsdb.TimeRange{From: "5m"},
} }
rawQuery, err := builder.Build(query, queryContext) rawQuery, err := builder.Build(query, queryContext)
@@ -45,11 +47,24 @@ func TestInfluxdbQueryBuilder(t *testing.T) {
GroupBy: []*QueryPart{groupBy1}, GroupBy: []*QueryPart{groupBy1},
Tags: []*Tag{tag1, tag2}, Tags: []*Tag{tag1, tag2},
Interval: "5s", Interval: "5s",
TimeRange: tsdb.TimeRange{From: "1h", To: "now-1m"},
} }
rawQuery, err := builder.Build(query, queryContext) rawQuery, err := builder.Build(query, queryContext)
So(err, ShouldBeNil) So(err, ShouldBeNil)
So(rawQuery, ShouldEqual, `SELECT mean("value") FROM "cpu" WHERE "hostname" = 'server1' OR "hostname" = 'server2' AND time > now() - 5m GROUP BY time(10s)`) So(rawQuery, ShouldEqual, `SELECT mean("value") FROM "cpu" WHERE "hostname" = 'server1' OR "hostname" = 'server2' AND time > now() - 1h and time < now() - 1m GROUP BY time(10s)`)
})
Convey("can render time range", func() {
Convey("render from: 2h to now-1h", func() {
query := Query{TimeRange: tsdb.TimeRange{From: "2h", To: "now-1h"}}
So(renderTimeFilter(&query), ShouldEqual, "time > now() - 2h and time < now() - 1h")
})
Convey("render from: 10m", func() {
query := Query{TimeRange: tsdb.TimeRange{From: "10m"}}
So(renderTimeFilter(&query), ShouldEqual, "time > now() - 10m")
})
}) })
}) })
} }