mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Elasticsearch: Added support for calendar_interval in ES date histogram queries (#75459)
* Introduce support for calendar intervals in ES date histogram queries * Add missing undef type check for ES calendar interval query support
This commit is contained in:
@@ -899,6 +899,25 @@ describe('ElasticQueryBuilder', () => {
|
||||
expect(query.aggs['2'].date_histogram.interval).toBeUndefined();
|
||||
expect(query.aggs['2'].date_histogram.fixed_interval).toBe('1d');
|
||||
});
|
||||
|
||||
it('should use calendar_interval', () => {
|
||||
const query = builder.build({
|
||||
refId: 'A',
|
||||
metrics: [{ type: 'count', id: '1' }],
|
||||
timeField: '@timestamp',
|
||||
bucketAggs: [
|
||||
{
|
||||
type: 'date_histogram',
|
||||
id: '2',
|
||||
field: '@time',
|
||||
settings: { min_doc_count: '1', interval: '1w' },
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
expect(query.aggs['2'].date_histogram.interval).toBeUndefined();
|
||||
expect(query.aggs['2'].date_histogram.calendar_interval).toBe('1w');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -100,6 +100,7 @@ export class ElasticQueryBuilder {
|
||||
getDateHistogramAgg(aggDef: DateHistogram) {
|
||||
const esAgg: any = {};
|
||||
const settings = aggDef.settings || {};
|
||||
const calendarIntervals: string[] = ['1w', '1M', '1q', '1y'];
|
||||
|
||||
esAgg.field = aggDef.field || this.timeField;
|
||||
esAgg.min_doc_count = settings.min_doc_count || 0;
|
||||
@@ -115,7 +116,11 @@ export class ElasticQueryBuilder {
|
||||
|
||||
const interval = settings.interval === 'auto' ? '${__interval_ms}ms' : settings.interval;
|
||||
|
||||
esAgg.fixed_interval = interval;
|
||||
if (interval !== undefined && calendarIntervals.includes(interval)) {
|
||||
esAgg.calendar_interval = interval;
|
||||
} else {
|
||||
esAgg.fixed_interval = interval;
|
||||
}
|
||||
|
||||
return esAgg;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user