mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
feat(influxdb): add real support for time ranges
This commit is contained in:
@@ -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 {
|
||||||
|
@@ -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 {
|
||||||
|
@@ -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")
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user