diff --git a/public/app/plugins/datasource/elasticsearch/datasource.test.ts b/public/app/plugins/datasource/elasticsearch/datasource.test.ts index 4ac588e0fc7..84f58745445 100644 --- a/public/app/plugins/datasource/elasticsearch/datasource.test.ts +++ b/public/app/plugins/datasource/elasticsearch/datasource.test.ts @@ -864,6 +864,34 @@ describe('ElasticDatasource', function(this: any) { expect(typeof JSON.parse(query.split('\n')[1]).query.bool.filter[0].range['@time'].gte).toBe('number'); }); }); + + it('should correctly interpolate variables in query', () => { + const query = { + alias: '', + bucketAggs: [{ type: 'filters', settings: { filters: [{ query: '$var', label: '' }] }, id: '1' }], + metrics: [{ type: 'count', id: '1' }], + query: '$var', + }; + + const interpolatedQuery = ctx.ds.interpolateVariablesInQueries([query], {})[0]; + + expect(interpolatedQuery.query).toBe('resolvedVariable'); + expect(interpolatedQuery.bucketAggs[0].settings.filters[0].query).toBe('resolvedVariable'); + }); + + it('should correctly handle empty query strings', () => { + const query = { + alias: '', + bucketAggs: [{ type: 'filters', settings: { filters: [{ query: '', label: '' }] }, id: '1' }], + metrics: [{ type: 'count', id: '1' }], + query: '', + }; + + const interpolatedQuery = ctx.ds.interpolateVariablesInQueries([query], {})[0]; + + expect(interpolatedQuery.query).toBe('*'); + expect(interpolatedQuery.bucketAggs[0].settings.filters[0].query).toBe('*'); + }); }); describe('enhanceDataFrame', () => { diff --git a/public/app/plugins/datasource/elasticsearch/datasource.ts b/public/app/plugins/datasource/elasticsearch/datasource.ts index 3697892927d..520a06dafb2 100644 --- a/public/app/plugins/datasource/elasticsearch/datasource.ts +++ b/public/app/plugins/datasource/elasticsearch/datasource.ts @@ -308,6 +308,11 @@ export class ElasticDatasource extends DataSourceApi 0) { @@ -315,8 +320,16 @@ export class ElasticDatasource extends DataSourceApi): Promise { let payload = ''; - const targets = _.cloneDeep(options.targets); + const targets = this.interpolateVariablesInQueries(_.cloneDeep(options.targets), options.scopedVars); const sentTargets: ElasticsearchQuery[] = []; // add global adhoc filters to timeFilter @@ -374,25 +387,19 @@ export class ElasticDatasource extends DataSourceApi