Skip to content

Commit 0633e2c

Browse files
committed
feat(influxdb): add real support for time ranges
1 parent e36f9fa commit 0633e2c

File tree

3 files changed

+28
-5
lines changed

3 files changed

+28
-5
lines changed

pkg/tsdb/influxdb/models.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package influxdb
22

3+
import "github.com/grafana/grafana/pkg/tsdb"
4+
35
type Query struct {
46
Measurement string
57
Policy string
@@ -8,7 +10,8 @@ type Query struct {
810
GroupBy []*QueryPart
911
Selects []*Select
1012

11-
Interval string
13+
Interval string
14+
TimeRange tsdb.TimeRange
1215
}
1316

1417
type Tag struct {

pkg/tsdb/influxdb/query_builder.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,14 @@ func (*QueryBuilder) Build(query *Query, queryContext *tsdb.QueryContext) (strin
4040
}
4141

4242
func renderTimeFilter(query *Query) string {
43-
//res += "$timeFilter"
44-
//res += "time > now() -" + strings.Replace(queryContext.TimeRange.From, "now", "", 1)
45-
return "time > now() - 5m"
43+
from := "now() - " + query.TimeRange.From
44+
to := ""
45+
46+
if query.TimeRange.To != "now" && query.TimeRange.To != "" {
47+
to = " and time < now() - " + strings.Replace(query.TimeRange.To, "now-", "", 1)
48+
}
49+
50+
return fmt.Sprintf("time > %s%s", from, to)
4651
}
4752

4853
func renderSelectors(query *Query) string {

pkg/tsdb/influxdb/query_builder_test.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
)
99

1010
func TestInfluxdbQueryBuilder(t *testing.T) {
11+
1112
Convey("Influxdb query builder", t, func() {
1213
builder := QueryBuilder{}
1314

@@ -31,6 +32,7 @@ func TestInfluxdbQueryBuilder(t *testing.T) {
3132
Policy: "policy",
3233
GroupBy: []*QueryPart{groupBy1, groupBy2},
3334
Interval: "10s",
35+
TimeRange: tsdb.TimeRange{From: "5m"},
3436
}
3537

3638
rawQuery, err := builder.Build(query, queryContext)
@@ -45,11 +47,24 @@ func TestInfluxdbQueryBuilder(t *testing.T) {
4547
GroupBy: []*QueryPart{groupBy1},
4648
Tags: []*Tag{tag1, tag2},
4749
Interval: "5s",
50+
TimeRange: tsdb.TimeRange{From: "1h", To: "now-1m"},
4851
}
4952

5053
rawQuery, err := builder.Build(query, queryContext)
5154
So(err, ShouldBeNil)
52-
So(rawQuery, ShouldEqual, `SELECT mean("value") FROM "cpu" WHERE "hostname" = 'server1' OR "hostname" = 'server2' AND time > now() - 5m GROUP BY time(10s)`)
55+
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)`)
56+
})
57+
58+
Convey("can render time range", func() {
59+
Convey("render from: 2h to now-1h", func() {
60+
query := Query{TimeRange: tsdb.TimeRange{From: "2h", To: "now-1h"}}
61+
So(renderTimeFilter(&query), ShouldEqual, "time > now() - 2h and time < now() - 1h")
62+
})
63+
64+
Convey("render from: 10m", func() {
65+
query := Query{TimeRange: tsdb.TimeRange{From: "10m"}}
66+
So(renderTimeFilter(&query), ShouldEqual, "time > now() - 10m")
67+
})
5368
})
5469
})
5570
}

0 commit comments

Comments
 (0)