From 2acfbdb7688b2f3ca92024a8d12806f84e0448f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=A4ggmark?= Date: Tue, 28 Jan 2020 09:41:19 +0100 Subject: [PATCH] Annotations: Fixes this.templateSrv.replace is not a function error for Grafana datasource (#21778) --- .../plugins/datasource/grafana/datasource.ts | 18 +++++++++++++----- .../grafana/specs/datasource.test.ts | 17 ++++++++--------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/public/app/plugins/datasource/grafana/datasource.ts b/public/app/plugins/datasource/grafana/datasource.ts index 81ef99d96dc..de4dcea644e 100644 --- a/public/app/plugins/datasource/grafana/datasource.ts +++ b/public/app/plugins/datasource/grafana/datasource.ts @@ -1,10 +1,14 @@ import _ from 'lodash'; -import { TemplateSrv } from 'app/features/templating/template_srv'; import { getBackendSrv } from '@grafana/runtime'; +import { DataSourceApi, DataSourceInstanceSettings } from '@grafana/data'; -class GrafanaDatasource { +import templateSrv from 'app/features/templating/template_srv'; + +class GrafanaDatasource extends DataSourceApi { /** @ngInject */ - constructor(private templateSrv: TemplateSrv) {} + constructor(instanceSettings: DataSourceInstanceSettings) { + super(instanceSettings); + } query(options: any) { return getBackendSrv() @@ -33,7 +37,7 @@ class GrafanaDatasource { } metricFindQuery(options: any) { - return Promise.resolve({ data: [] }); + return Promise.resolve([]); } annotationQuery(options: any) { @@ -62,7 +66,7 @@ class GrafanaDatasource { const delimiter = '__delimiter__'; const tags = []; for (const t of params.tags) { - const renderedValues = this.templateSrv.replace(t, {}, (value: any) => { + const renderedValues = templateSrv.replace(t, {}, (value: any) => { if (typeof value === 'string') { return value; } @@ -78,6 +82,10 @@ class GrafanaDatasource { return getBackendSrv().get('/api/annotations', params); } + + testDatasource() { + return Promise.resolve(); + } } export { GrafanaDatasource }; diff --git a/public/app/plugins/datasource/grafana/specs/datasource.test.ts b/public/app/plugins/datasource/grafana/specs/datasource.test.ts index bb6dc2085e5..e4db1d9baec 100644 --- a/public/app/plugins/datasource/grafana/specs/datasource.test.ts +++ b/public/app/plugins/datasource/grafana/specs/datasource.test.ts @@ -1,4 +1,4 @@ -import { dateTime } from '@grafana/data'; +import { DataSourceInstanceSettings, dateTime } from '@grafana/data'; import { backendSrv } from 'app/core/services/backend_srv'; // will use the version in __mocks__ import { GrafanaDatasource } from '../datasource'; @@ -7,6 +7,12 @@ jest.mock('@grafana/runtime', () => ({ getBackendSrv: () => backendSrv, })); +jest.mock('app/features/templating/template_srv', () => ({ + replace: (val: string) => { + return val.replace('$var2', 'replaced__delimiter__replaced2').replace('$var', 'replaced'); + }, +})); + describe('grafana data source', () => { const getMock = jest.spyOn(backendSrv, 'get'); @@ -16,7 +22,6 @@ describe('grafana data source', () => { describe('when executing an annotations query', () => { let calledBackendSrvParams: any; - let templateSrvStub: any; let ds: GrafanaDatasource; beforeEach(() => { getMock.mockImplementation((url: string, options: any) => { @@ -24,13 +29,7 @@ describe('grafana data source', () => { return Promise.resolve([]); }); - templateSrvStub = { - replace: (val: string) => { - return val.replace('$var2', 'replaced__delimiter__replaced2').replace('$var', 'replaced'); - }, - }; - - ds = new GrafanaDatasource(templateSrvStub as any); + ds = new GrafanaDatasource({} as DataSourceInstanceSettings); }); describe('with tags that have template variables', () => {