Просмотр исходного кода

Merge pull request #15215 from thatsparesh/13324-mssql-pass-timerange-for-template-variable-queries

mssql: pass timerange for template variable queries
Marcus Efraimsson 6 лет назад
Родитель
Сommit
bd48408e2d

+ 9 - 4
public/app/plugins/datasource/mssql/datasource.ts

@@ -8,7 +8,7 @@ export class MssqlDatasource {
   interval: string;
 
   /** @ngInject */
-  constructor(instanceSettings, private backendSrv, private $q, private templateSrv) {
+  constructor(instanceSettings, private backendSrv, private $q, private templateSrv, private timeSrv) {
     this.name = instanceSettings.name;
     this.id = instanceSettings.id;
     this.responseParser = new ResponseParser(this.$q);
@@ -107,13 +107,18 @@ export class MssqlDatasource {
       format: 'table',
     };
 
+    const range = this.timeSrv.timeRange();
+    const data = {
+      queries: [interpolatedQuery],
+      from: range.from.valueOf().toString(),
+      to: range.to.valueOf().toString(),
+    };
+
     return this.backendSrv
       .datasourceRequest({
         url: '/api/tsdb/query',
         method: 'POST',
-        data: {
-          queries: [interpolatedQuery],
-        },
+        data: data,
       })
       .then(data => this.responseParser.parseMetricFindQueryResult(refId, data));
   }

+ 46 - 2
public/app/plugins/datasource/mssql/specs/datasource.test.ts

@@ -1,6 +1,6 @@
 import moment from 'moment';
 import { MssqlDatasource } from '../datasource';
-import { TemplateSrvStub } from 'test/specs/helpers';
+import { TemplateSrvStub, TimeSrvStub } from 'test/specs/helpers';
 import { CustomVariable } from 'app/features/templating/custom_variable';
 import q from 'q';
 
@@ -8,13 +8,14 @@ describe('MSSQLDatasource', () => {
   const ctx: any = {
     backendSrv: {},
     templateSrv: new TemplateSrvStub(),
+    timeSrv: new TimeSrvStub(),
   };
 
   beforeEach(() => {
     ctx.$q = q;
     ctx.instanceSettings = { name: 'mssql' };
 
-    ctx.ds = new MssqlDatasource(ctx.instanceSettings, ctx.backendSrv, ctx.$q, ctx.templateSrv);
+    ctx.ds = new MssqlDatasource(ctx.instanceSettings, ctx.backendSrv, ctx.$q, ctx.templateSrv, ctx.timeSrv);
   });
 
   describe('When performing annotationQuery', () => {
@@ -188,6 +189,49 @@ describe('MSSQLDatasource', () => {
     });
   });
 
+  describe('When performing metricFindQuery', () => {
+    let results;
+    const query = 'select * from atable';
+    const response = {
+      results: {
+        tempvar: {
+          meta: {
+            rowCount: 1,
+          },
+          refId: 'tempvar',
+          tables: [
+            {
+              columns: [{ text: 'title' }],
+              rows: [['aTitle']],
+            },
+          ],
+        },
+      },
+    };
+    const time = {
+      from: moment(1521545610656),
+      to: moment(1521546251185)
+    };
+
+    beforeEach(() => {
+      ctx.timeSrv.setTime(time);
+
+      ctx.backendSrv.datasourceRequest = options => {
+        results = options.data;
+        return ctx.$q.when({ data: response, status: 200 });
+      };
+
+      return ctx.ds.metricFindQuery(query);
+    });
+
+    it('should pass timerange to datasourceRequest', () => {
+      expect(results.from).toBe(time.from.valueOf().toString());
+      expect(results.to).toBe(time.to.valueOf().toString());
+      expect(results.queries.length).toBe(1);
+      expect(results.queries[0].rawSql).toBe(query);
+    });
+  });
+
   describe('When interpolating variables', () => {
     beforeEach(() => {
       ctx.variable = new CustomVariable({}, {});

+ 1 - 1
public/test/specs/helpers.ts

@@ -143,7 +143,7 @@ export function DashboardViewStateStub(this: any) {
 }
 
 export function TimeSrvStub(this: any) {
-  this.init = sinon.spy();
+  this.init = () => {};
   this.time = { from: 'now-1h', to: 'now' };
   this.timeRange = function(parse) {
     if (parse === false) {