Skip to content

Commit f4e0a92

Browse files
committed
feat(influxdb): choose highest interval value
1 parent 4144eac commit f4e0a92

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

pkg/tsdb/influxdb/query_part.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package influxdb
33
import (
44
"fmt"
55
"strings"
6+
"time"
67

78
"github.com/grafana/grafana/pkg/tsdb"
89
)
@@ -92,12 +93,27 @@ func fieldRenderer(query *Query, queryContext *tsdb.QueryContext, part *QueryPar
9293
return fmt.Sprintf(`"%s"`, part.Params[0])
9394
}
9495

96+
func getDefinedInterval(query *Query, queryContext *tsdb.QueryContext) string {
97+
setInterval := strings.Replace(strings.Replace(query.Interval, "<", "", 1), ">", "", 1)
98+
defaultInterval := tsdb.CalculateInterval(queryContext.TimeRange)
99+
100+
if strings.Contains(query.Interval, ">") {
101+
parsedDefaultInterval, err := time.ParseDuration(defaultInterval)
102+
parsedSetInterval, err2 := time.ParseDuration(setInterval)
103+
104+
if err == nil && err2 == nil && parsedDefaultInterval > parsedSetInterval {
105+
return defaultInterval
106+
}
107+
}
108+
109+
return setInterval
110+
}
111+
95112
func functionRenderer(query *Query, queryContext *tsdb.QueryContext, part *QueryPart, innerExpr string) string {
96-
for i, v := range part.Params {
97-
if v == "$interval" {
113+
for i, param := range part.Params {
114+
if param == "$interval" {
98115
if query.Interval != "" {
99-
interval := strings.Replace(strings.Replace(query.Interval, "<", "", 1), ">", "", 1)
100-
part.Params[i] = interval
116+
part.Params[i] = getDefinedInterval(query, queryContext)
101117
} else {
102118
part.Params[i] = tsdb.CalculateInterval(queryContext.TimeRange)
103119
}

pkg/tsdb/influxdb/query_part_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,27 @@ func TestInfluxdbQueryPart(t *testing.T) {
4545
So(res, ShouldEqual, "time(200ms)")
4646
})
4747

48+
Convey("render time interval >10s", func() {
49+
part, err := NewQueryPart("time", []string{"$interval"})
50+
So(err, ShouldBeNil)
51+
52+
query.Interval = ">10s"
53+
54+
res := part.Render(query, queryContext, "")
55+
So(res, ShouldEqual, "time(10s)")
56+
})
57+
58+
Convey("render time interval >1s and higher interval calculation", func() {
59+
part, err := NewQueryPart("time", []string{"$interval"})
60+
queryContext := &tsdb.QueryContext{TimeRange: tsdb.NewTimeRange("1y", "now")}
61+
So(err, ShouldBeNil)
62+
63+
query.Interval = ">1s"
64+
65+
res := part.Render(query, queryContext, "")
66+
So(res, ShouldEqual, "time(168h)")
67+
})
68+
4869
Convey("render spread", func() {
4970
part, err := NewQueryPart("spread", []string{})
5071
So(err, ShouldBeNil)

0 commit comments

Comments
 (0)