mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
fix(querier): use most specific timerange available (#90540)
* fix(querier): use most specific timerange available * return zero values
This commit is contained in:
parent
9b7e9d992b
commit
283280f329
@ -70,14 +70,6 @@ func (p *queryParser) parseRequest(ctx context.Context, input *query.QueryDataRe
|
|||||||
RefIDTypes: make(map[string]string, len(input.Queries)),
|
RefIDTypes: make(map[string]string, len(input.Queries)),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure a valid time range
|
|
||||||
if input.From == "" {
|
|
||||||
input.From = "now-6h"
|
|
||||||
}
|
|
||||||
if input.To == "" {
|
|
||||||
input.To = "now"
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, q := range input.Queries {
|
for _, q := range input.Queries {
|
||||||
_, found := queryRefIDs[q.RefID]
|
_, found := queryRefIDs[q.RefID]
|
||||||
if found {
|
if found {
|
||||||
@ -123,7 +115,7 @@ func (p *queryParser) parseRequest(ctx context.Context, input *query.QueryDataRe
|
|||||||
PluginId: ds.Type,
|
PluginId: ds.Type,
|
||||||
UID: ds.UID,
|
UID: ds.UID,
|
||||||
Request: &data.QueryDataRequest{
|
Request: &data.QueryDataRequest{
|
||||||
TimeRange: input.TimeRange,
|
TimeRange: getTimeRangeForQuery(&input.TimeRange, q.TimeRange),
|
||||||
Debug: input.Debug,
|
Debug: input.Debug,
|
||||||
// no queries
|
// no queries
|
||||||
},
|
},
|
||||||
@ -189,6 +181,19 @@ func (p *queryParser) parseRequest(ctx context.Context, input *query.QueryDataRe
|
|||||||
return rsp, nil
|
return rsp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getTimeRangeForQuery(parentTimerange, queryTimerange *data.TimeRange) data.TimeRange {
|
||||||
|
if queryTimerange != nil && queryTimerange.From != "" && queryTimerange.To != "" {
|
||||||
|
return *queryTimerange
|
||||||
|
}
|
||||||
|
if parentTimerange != nil && parentTimerange.To != "" && parentTimerange.From != "" {
|
||||||
|
return *parentTimerange
|
||||||
|
}
|
||||||
|
return data.TimeRange{
|
||||||
|
From: "0",
|
||||||
|
To: "0",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (p *queryParser) getValidDataSourceRef(ctx context.Context, ds *data.DataSourceRef, id int64) (*data.DataSourceRef, error) {
|
func (p *queryParser) getValidDataSourceRef(ctx context.Context, ds *data.DataSourceRef, id int64) (*data.DataSourceRef, error) {
|
||||||
if ds == nil {
|
if ds == nil {
|
||||||
if id == 0 {
|
if id == 0 {
|
||||||
|
@ -45,7 +45,7 @@ func TestQuerySplitting(t *testing.T) {
|
|||||||
require.Empty(t, split.Requests)
|
require.Empty(t, split.Requests)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("applies default time range", func(t *testing.T) {
|
t.Run("applies zero time range if time range is missing", func(t *testing.T) {
|
||||||
split, err := parser.parseRequest(ctx, &query.QueryDataRequest{
|
split, err := parser.parseRequest(ctx, &query.QueryDataRequest{
|
||||||
QueryDataRequest: data.QueryDataRequest{
|
QueryDataRequest: data.QueryDataRequest{
|
||||||
TimeRange: data.TimeRange{}, // missing
|
TimeRange: data.TimeRange{}, // missing
|
||||||
@ -62,10 +62,61 @@ func TestQuerySplitting(t *testing.T) {
|
|||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, split.Requests, 1)
|
require.Len(t, split.Requests, 1)
|
||||||
require.Equal(t, "now-6h", split.Requests[0].Request.From)
|
require.Equal(t, "0", split.Requests[0].Request.From)
|
||||||
|
require.Equal(t, "0", split.Requests[0].Request.To)
|
||||||
|
})
|
||||||
|
t.Run("applies query time range if present", func(t *testing.T) {
|
||||||
|
split, err := parser.parseRequest(ctx, &query.QueryDataRequest{
|
||||||
|
QueryDataRequest: data.QueryDataRequest{
|
||||||
|
TimeRange: data.TimeRange{}, // missing
|
||||||
|
Queries: []data.DataQuery{{
|
||||||
|
CommonQueryProperties: data.CommonQueryProperties{
|
||||||
|
RefID: "A",
|
||||||
|
Datasource: &data.DataSourceRef{
|
||||||
|
Type: "x",
|
||||||
|
UID: "abc",
|
||||||
|
},
|
||||||
|
TimeRange: &data.TimeRange{
|
||||||
|
From: "now-1d",
|
||||||
|
To: "now",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Len(t, split.Requests, 1)
|
||||||
|
require.Equal(t, "now-1d", split.Requests[0].Request.From)
|
||||||
require.Equal(t, "now", split.Requests[0].Request.To)
|
require.Equal(t, "now", split.Requests[0].Request.To)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("applies query time range if all time ranges are present", func(t *testing.T) {
|
||||||
|
split, err := parser.parseRequest(ctx, &query.QueryDataRequest{
|
||||||
|
QueryDataRequest: data.QueryDataRequest{
|
||||||
|
TimeRange: data.TimeRange{
|
||||||
|
From: "now-1h",
|
||||||
|
To: "now",
|
||||||
|
},
|
||||||
|
Queries: []data.DataQuery{{
|
||||||
|
CommonQueryProperties: data.CommonQueryProperties{
|
||||||
|
RefID: "A",
|
||||||
|
Datasource: &data.DataSourceRef{
|
||||||
|
Type: "x",
|
||||||
|
UID: "abc",
|
||||||
|
},
|
||||||
|
TimeRange: &data.TimeRange{
|
||||||
|
From: "now-1d",
|
||||||
|
To: "now",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Len(t, split.Requests, 1)
|
||||||
|
require.Equal(t, "now-1d", split.Requests[0].Request.From)
|
||||||
|
require.Equal(t, "now", split.Requests[0].Request.To)
|
||||||
|
})
|
||||||
t.Run("verify tests", func(t *testing.T) {
|
t.Run("verify tests", func(t *testing.T) {
|
||||||
files, err := os.ReadDir("testdata")
|
files, err := os.ReadDir("testdata")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
Loading…
Reference in New Issue
Block a user