mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
feat(influxdb): choose highest interval value
This commit is contained in:
@@ -3,6 +3,7 @@ package influxdb
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana/pkg/tsdb"
|
||||
)
|
||||
@@ -92,12 +93,27 @@ func fieldRenderer(query *Query, queryContext *tsdb.QueryContext, part *QueryPar
|
||||
return fmt.Sprintf(`"%s"`, part.Params[0])
|
||||
}
|
||||
|
||||
func getDefinedInterval(query *Query, queryContext *tsdb.QueryContext) string {
|
||||
setInterval := strings.Replace(strings.Replace(query.Interval, "<", "", 1), ">", "", 1)
|
||||
defaultInterval := tsdb.CalculateInterval(queryContext.TimeRange)
|
||||
|
||||
if strings.Contains(query.Interval, ">") {
|
||||
parsedDefaultInterval, err := time.ParseDuration(defaultInterval)
|
||||
parsedSetInterval, err2 := time.ParseDuration(setInterval)
|
||||
|
||||
if err == nil && err2 == nil && parsedDefaultInterval > parsedSetInterval {
|
||||
return defaultInterval
|
||||
}
|
||||
}
|
||||
|
||||
return setInterval
|
||||
}
|
||||
|
||||
func functionRenderer(query *Query, queryContext *tsdb.QueryContext, part *QueryPart, innerExpr string) string {
|
||||
for i, v := range part.Params {
|
||||
if v == "$interval" {
|
||||
for i, param := range part.Params {
|
||||
if param == "$interval" {
|
||||
if query.Interval != "" {
|
||||
interval := strings.Replace(strings.Replace(query.Interval, "<", "", 1), ">", "", 1)
|
||||
part.Params[i] = interval
|
||||
part.Params[i] = getDefinedInterval(query, queryContext)
|
||||
} else {
|
||||
part.Params[i] = tsdb.CalculateInterval(queryContext.TimeRange)
|
||||
}
|
||||
|
@@ -45,6 +45,27 @@ func TestInfluxdbQueryPart(t *testing.T) {
|
||||
So(res, ShouldEqual, "time(200ms)")
|
||||
})
|
||||
|
||||
Convey("render time interval >10s", func() {
|
||||
part, err := NewQueryPart("time", []string{"$interval"})
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
query.Interval = ">10s"
|
||||
|
||||
res := part.Render(query, queryContext, "")
|
||||
So(res, ShouldEqual, "time(10s)")
|
||||
})
|
||||
|
||||
Convey("render time interval >1s and higher interval calculation", func() {
|
||||
part, err := NewQueryPart("time", []string{"$interval"})
|
||||
queryContext := &tsdb.QueryContext{TimeRange: tsdb.NewTimeRange("1y", "now")}
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
query.Interval = ">1s"
|
||||
|
||||
res := part.Render(query, queryContext, "")
|
||||
So(res, ShouldEqual, "time(168h)")
|
||||
})
|
||||
|
||||
Convey("render spread", func() {
|
||||
part, err := NewQueryPart("spread", []string{})
|
||||
So(err, ShouldBeNil)
|
||||
|
Reference in New Issue
Block a user