mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Elasticsearch: Fix defaulting to time field if no field is specified in aggregation (#60238)
* Elasticsearch: Add test for using timeField from datasource when not specified in query * Add default to timefield * Merge fix
This commit is contained in:
parent
d3ef86bd90
commit
70e34e7f32
@ -67,6 +67,7 @@ func (e *timeSeriesQuery) processQuery(q *Query, ms *es.MultiSearchRequestBuilde
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
interval := e.intervalCalculator.Calculate(e.dataQueries[0].TimeRange, minInterval, q.MaxDataPoints)
|
interval := e.intervalCalculator.Calculate(e.dataQueries[0].TimeRange, minInterval, q.MaxDataPoints)
|
||||||
|
defaultTimeField := e.client.GetTimeField()
|
||||||
|
|
||||||
b := ms.Search(interval)
|
b := ms.Search(interval)
|
||||||
b.Size(0)
|
b.Size(0)
|
||||||
@ -109,7 +110,7 @@ func (e *timeSeriesQuery) processQuery(q *Query, ms *es.MultiSearchRequestBuilde
|
|||||||
bucketAgg.Settings = simplejson.NewFromAny(
|
bucketAgg.Settings = simplejson.NewFromAny(
|
||||||
bucketAgg.generateSettingsForDSL(),
|
bucketAgg.generateSettingsForDSL(),
|
||||||
)
|
)
|
||||||
_ = addDateHistogramAgg(aggBuilder, bucketAgg, from, to)
|
_ = addDateHistogramAgg(aggBuilder, bucketAgg, from, to, defaultTimeField)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -123,7 +124,7 @@ func (e *timeSeriesQuery) processQuery(q *Query, ms *es.MultiSearchRequestBuilde
|
|||||||
)
|
)
|
||||||
switch bucketAgg.Type {
|
switch bucketAgg.Type {
|
||||||
case dateHistType:
|
case dateHistType:
|
||||||
aggBuilder = addDateHistogramAgg(aggBuilder, bucketAgg, from, to)
|
aggBuilder = addDateHistogramAgg(aggBuilder, bucketAgg, from, to, defaultTimeField)
|
||||||
case histogramType:
|
case histogramType:
|
||||||
aggBuilder = addHistogramAgg(aggBuilder, bucketAgg)
|
aggBuilder = addHistogramAgg(aggBuilder, bucketAgg)
|
||||||
case filtersType:
|
case filtersType:
|
||||||
@ -255,8 +256,13 @@ func (bucketAgg BucketAgg) generateSettingsForDSL() map[string]interface{} {
|
|||||||
return bucketAgg.Settings.MustMap()
|
return bucketAgg.Settings.MustMap()
|
||||||
}
|
}
|
||||||
|
|
||||||
func addDateHistogramAgg(aggBuilder es.AggBuilder, bucketAgg *BucketAgg, timeFrom, timeTo int64) es.AggBuilder {
|
func addDateHistogramAgg(aggBuilder es.AggBuilder, bucketAgg *BucketAgg, timeFrom, timeTo int64, timeField string) es.AggBuilder {
|
||||||
aggBuilder.DateHistogram(bucketAgg.ID, bucketAgg.Field, func(a *es.DateHistogramAgg, b es.AggBuilder) {
|
// If no field is specified, use the time field
|
||||||
|
field := bucketAgg.Field
|
||||||
|
if field == "" {
|
||||||
|
field = timeField
|
||||||
|
}
|
||||||
|
aggBuilder.DateHistogram(bucketAgg.ID, field, func(a *es.DateHistogramAgg, b es.AggBuilder) {
|
||||||
a.FixedInterval = bucketAgg.Settings.Get("interval").MustString("auto")
|
a.FixedInterval = bucketAgg.Settings.Get("interval").MustString("auto")
|
||||||
a.MinDocCount = bucketAgg.Settings.Get("min_doc_count").MustInt(0)
|
a.MinDocCount = bucketAgg.Settings.Get("min_doc_count").MustInt(0)
|
||||||
a.ExtendedBounds = &es.ExtendedBounds{Min: timeFrom, Max: timeTo}
|
a.ExtendedBounds = &es.ExtendedBounds{Min: timeFrom, Max: timeTo}
|
||||||
|
@ -1714,10 +1714,9 @@ func TestSettingsCasting(t *testing.T) {
|
|||||||
}`, from, to, 15*time.Second)
|
}`, from, to, 15*time.Second)
|
||||||
|
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
// FIXME: This should be @timestamp, but Field is empty
|
sr := c.multisearchRequests[0].Requests[0]
|
||||||
// sr := c.multisearchRequests[0].Requests[0]
|
dateHistogramAgg := sr.Aggs[0].Aggregation.Aggregation.(*es.DateHistogramAgg)
|
||||||
// dateHistogramAgg := sr.Aggs[0].Aggregation.Aggregation.(*es.DateHistogramAgg)
|
assert.Equal(t, dateHistogramAgg.Field, "@timestamp")
|
||||||
// assert.Equal(t, dateHistogramAgg.Field, "@timestamp")
|
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Should use field from bucket agg when specified", func(t *testing.T) {
|
t.Run("Should use field from bucket agg when specified", func(t *testing.T) {
|
||||||
|
Loading…
Reference in New Issue
Block a user