From 9c55500cc0e262a669ca70aa300ea5c2e523869f Mon Sep 17 00:00:00 2001 From: Andrej Ocenas Date: Thu, 13 Feb 2020 16:00:01 +0100 Subject: [PATCH] Elastic: Replace range as number not string (#22173) --- .../elasticsearch/datasource.test.ts | 53 ++++++++++++++++++- .../datasource/elasticsearch/datasource.ts | 8 ++- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/public/app/plugins/datasource/elasticsearch/datasource.test.ts b/public/app/plugins/datasource/elasticsearch/datasource.test.ts index b2dad0c81e2..c3ff6d9f7b3 100644 --- a/public/app/plugins/datasource/elasticsearch/datasource.test.ts +++ b/public/app/plugins/datasource/elasticsearch/datasource.test.ts @@ -1,5 +1,5 @@ import angular from 'angular'; -import { dateMath, Field } from '@grafana/data'; +import { CoreApp, DataQueryRequest, dateMath, Field } from '@grafana/data'; import _ from 'lodash'; import { ElasticDatasource } from './datasource'; import { toUtc, dateTime } from '@grafana/data'; @@ -7,7 +7,7 @@ import { backendSrv } from 'app/core/services/backend_srv'; // will use the vers import { TimeSrv } from 'app/features/dashboard/services/TimeSrv'; import { TemplateSrv } from 'app/features/templating/template_srv'; import { DataSourceInstanceSettings } from '@grafana/data'; -import { ElasticsearchOptions } from './types'; +import { ElasticsearchOptions, ElasticsearchQuery } from './types'; jest.mock('@grafana/runtime', () => ({ ...jest.requireActual('@grafana/runtime'), @@ -613,8 +613,57 @@ describe('ElasticDatasource', function(this: any) { expect(body['aggs']['1']['terms'].size).not.toBe(0); }); }); + + describe('query', () => { + it('should replace range as integer not string', () => { + const dataSource = new ElasticDatasource( + { + url: 'http://es.com', + database: '[asd-]YYYY.MM.DD', + jsonData: { + interval: 'Daily', + esVersion: 2, + timeField: '@time', + }, + } as DataSourceInstanceSettings, + templateSrv as TemplateSrv, + timeSrv as TimeSrv + ); + (dataSource as any).post = jest.fn(() => Promise.resolve({ responses: [] })); + dataSource.query(createElasticQuery()); + + const query = ((dataSource as any).post as jest.Mock).mock.calls[0][1]; + expect(typeof JSON.parse(query.split('\n')[1]).query.bool.filter[0].range['@time'].gte).toBe('number'); + }); + }); }); +const createElasticQuery = (): DataQueryRequest => { + return { + requestId: '', + dashboardId: 0, + interval: '', + panelId: 0, + scopedVars: {}, + timezone: '', + app: CoreApp.Dashboard, + startTime: 0, + range: { + from: dateTime([2015, 4, 30, 10]), + to: dateTime([2015, 5, 1, 10]), + } as any, + targets: [ + { + refId: '', + isLogsQuery: false, + bucketAggs: [{ type: 'date_histogram', field: '@timestamp', id: '2' }], + metrics: [{ type: 'count', id: '' }], + query: 'test', + }, + ], + }; +}; + const logsResponse = { data: { responses: [ diff --git a/public/app/plugins/datasource/elasticsearch/datasource.ts b/public/app/plugins/datasource/elasticsearch/datasource.ts index ea18b7c59ba..3c61c458426 100644 --- a/public/app/plugins/datasource/elasticsearch/datasource.ts +++ b/public/app/plugins/datasource/elasticsearch/datasource.ts @@ -368,8 +368,12 @@ export class ElasticDatasource extends DataSourceApi