diff --git a/public/app/plugins/datasource/elasticsearch/datasource.ts b/public/app/plugins/datasource/elasticsearch/datasource.ts index c2f2364d49d..3781a9048a6 100644 --- a/public/app/plugins/datasource/elasticsearch/datasource.ts +++ b/public/app/plugins/datasource/elasticsearch/datasource.ts @@ -254,6 +254,10 @@ export class ElasticDatasource { continue; } + if (target.alias) { + target.alias = this.templateSrv.replace(target.alias, options.scopedVars, 'lucene'); + } + const queryString = this.templateSrv.replace(target.query || '*', options.scopedVars, 'lucene'); const queryObj = this.queryBuilder.build(target, adhocFilters, queryString); const esQuery = angular.toJson(queryObj); diff --git a/public/app/plugins/datasource/elasticsearch/specs/datasource.test.ts b/public/app/plugins/datasource/elasticsearch/specs/datasource.test.ts index 4be0c35852c..0480fcb52e8 100644 --- a/public/app/plugins/datasource/elasticsearch/specs/datasource.test.ts +++ b/public/app/plugins/datasource/elasticsearch/specs/datasource.test.ts @@ -16,7 +16,13 @@ describe('ElasticDatasource', function(this: any) { }; const templateSrv = { - replace: jest.fn(text => text), + replace: jest.fn(text => { + if (text.startsWith("$")) { + return `resolvedVariable`; + } else { + return text; + } + }), getAdhocFilters: jest.fn(() => []), }; @@ -67,7 +73,7 @@ describe('ElasticDatasource', function(this: any) { }); describe('When issuing metric query with interval pattern', () => { - let requestOptions, parts, header; + let requestOptions, parts, header, query; beforeEach(() => { createDatasource({ @@ -81,19 +87,22 @@ describe('ElasticDatasource', function(this: any) { return Promise.resolve({ data: { responses: [] } }); }); - ctx.ds.query({ + query = { range: { from: moment.utc([2015, 4, 30, 10]), to: moment.utc([2015, 5, 1, 10]), }, targets: [ { + alias: "$varAlias", bucketAggs: [], metrics: [{ type: 'raw_document' }], query: 'escape\\:test', }, ], - }); + }; + + ctx.ds.query(query); parts = requestOptions.data.split('\n'); header = angular.fromJson(parts[0]); @@ -103,6 +112,10 @@ describe('ElasticDatasource', function(this: any) { expect(header.index).toEqual(['asd-2015.05.30', 'asd-2015.05.31', 'asd-2015.06.01']); }); + it('should resolve the alias variable', () => { + expect(query.targets[0].alias).toEqual('resolvedVariable'); + }); + it('should json escape lucene query', () => { const body = angular.fromJson(parts[1]); expect(body.query.bool.filter[1].query_string.query).toBe('escape\\:test');