From a2574ac068e0d6adec9727901784d5ac1cfbc749 Mon Sep 17 00:00:00 2001 From: Kim Christensen Date: Fri, 13 Jul 2018 13:24:56 +0200 Subject: [PATCH 1/3] Support timeFilter in templating for InfluxDB After support for queries in template variables was added to InfluxDB, it can be necessary to added dymanic time constraints. This can now be done changing the variable refresh to "On Time Range Changed" for InfluxDB --- public/app/plugins/datasource/influxdb/datasource.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/public/app/plugins/datasource/influxdb/datasource.ts b/public/app/plugins/datasource/influxdb/datasource.ts index f971ac2f649..b9f2b2e03fb 100644 --- a/public/app/plugins/datasource/influxdb/datasource.ts +++ b/public/app/plugins/datasource/influxdb/datasource.ts @@ -187,6 +187,11 @@ export default class InfluxDatasource { return this.$q.when({ results: [] }); } + if (options && options.range) { + var timeFilter = this.getTimeFilter({ rangeRaw: options.range }); + query = query.replace('$timeFilter', timeFilter); + } + return this._influxRequest('GET', '/query', { q: query, epoch: 'ms' }, options); } From dd81f4381de8e663c17e12595b33b46020c153cf Mon Sep 17 00:00:00 2001 From: Kim Christensen Date: Sat, 21 Jul 2018 02:13:41 +0200 Subject: [PATCH 2/3] Add unit test for InfluxDB datasource --- .../influxdb/specs/datasource.jest.ts | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 public/app/plugins/datasource/influxdb/specs/datasource.jest.ts diff --git a/public/app/plugins/datasource/influxdb/specs/datasource.jest.ts b/public/app/plugins/datasource/influxdb/specs/datasource.jest.ts new file mode 100644 index 00000000000..6ccbf843dd5 --- /dev/null +++ b/public/app/plugins/datasource/influxdb/specs/datasource.jest.ts @@ -0,0 +1,53 @@ +import InfluxDatasource from '../datasource'; +import $q from 'q'; +import { TemplateSrvStub } from 'test/specs/helpers'; + +describe('InfluxDataSource', () => { + let ctx: any = { + backendSrv: {}, + $q: $q, + templateSrv: new TemplateSrvStub(), + instanceSettings: { url: 'url', name: 'influxDb', jsonData: {} }, + }; + + beforeEach(function() { + ctx.instanceSettings.url = '/api/datasources/proxy/1'; + ctx.ds = new InfluxDatasource(ctx.instanceSettings, ctx.$q, ctx.backendSrv, ctx.templateSrv); + }); + + describe('When issuing metricFindQuery', () => { + let query = 'SELECT max(value) FROM measurement WHERE $timeFilter'; + let queryOptions: any = { + range: { + from: '2018-01-01 00:00:00', + to: '2018-01-02 00:00:00', + }, + }; + let requestQuery; + + beforeEach(async () => { + ctx.backendSrv.datasourceRequest = function(req) { + requestQuery = req.params.q; + return ctx.$q.when({ + results: [ + { + series: [ + { + name: 'measurement', + columns: ['max'], + values: [[1]], + }, + ], + }, + ], + }); + }; + + await ctx.ds.metricFindQuery(query, queryOptions).then(function(_) {}); + }); + + it('should replace $timefilter', () => { + expect(requestQuery).toMatch('time >= 1514761200000ms and time <= 1514847600000ms'); + }); + }); +}); From 8c52e2cd5703632b568225c87f311cc27b604e54 Mon Sep 17 00:00:00 2001 From: Kim Christensen Date: Mon, 23 Jul 2018 10:05:46 +0200 Subject: [PATCH 3/3] Fix timezone issues in test --- .../plugins/datasource/influxdb/specs/datasource.jest.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/app/plugins/datasource/influxdb/specs/datasource.jest.ts b/public/app/plugins/datasource/influxdb/specs/datasource.jest.ts index 6ccbf843dd5..10974cdad97 100644 --- a/public/app/plugins/datasource/influxdb/specs/datasource.jest.ts +++ b/public/app/plugins/datasource/influxdb/specs/datasource.jest.ts @@ -19,8 +19,8 @@ describe('InfluxDataSource', () => { let query = 'SELECT max(value) FROM measurement WHERE $timeFilter'; let queryOptions: any = { range: { - from: '2018-01-01 00:00:00', - to: '2018-01-02 00:00:00', + from: '2018-01-01T00:00:00Z', + to: '2018-01-02T00:00:00Z', }, }; let requestQuery; @@ -47,7 +47,7 @@ describe('InfluxDataSource', () => { }); it('should replace $timefilter', () => { - expect(requestQuery).toMatch('time >= 1514761200000ms and time <= 1514847600000ms'); + expect(requestQuery).toMatch('time >= 1514764800000ms and time <= 1514851200000ms'); }); }); });