mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
DataSourceApi: convert interface to abstract class (#16979)
* DataSourceApi as class * add diff signature * Prometheus: moved directUrl to jsonData
This commit is contained in:
committed by
Torkel Ödegaard
parent
5573d28582
commit
1d7bb2a763
@@ -2,11 +2,13 @@ import { stackdriverUnitMappings } from './constants';
|
||||
import appEvents from 'app/core/app_events';
|
||||
import _ from 'lodash';
|
||||
import StackdriverMetricFindQuery from './StackdriverMetricFindQuery';
|
||||
import { StackdriverQuery, MetricDescriptor } from './types';
|
||||
import { DataSourceApi, DataQueryRequest } from '@grafana/ui/src/types';
|
||||
import { StackdriverQuery, MetricDescriptor, StackdriverOptions } from './types';
|
||||
import { DataSourceApi, DataQueryRequest, DataSourceInstanceSettings, ScopedVars } from '@grafana/ui/src/types';
|
||||
import { BackendSrv } from 'app/core/services/backend_srv';
|
||||
import { TemplateSrv } from 'app/features/templating/template_srv';
|
||||
import { TimeSrv } from 'app/features/dashboard/services/TimeSrv';
|
||||
|
||||
export default class StackdriverDatasource implements DataSourceApi<StackdriverQuery> {
|
||||
id: number;
|
||||
export default class StackdriverDatasource extends DataSourceApi<StackdriverQuery, StackdriverOptions> {
|
||||
url: string;
|
||||
baseUrl: string;
|
||||
projectName: string;
|
||||
@@ -15,10 +17,15 @@ export default class StackdriverDatasource implements DataSourceApi<StackdriverQ
|
||||
metricTypes: any[];
|
||||
|
||||
/** @ngInject */
|
||||
constructor(instanceSettings, private backendSrv, private templateSrv, private timeSrv) {
|
||||
constructor(
|
||||
instanceSettings: DataSourceInstanceSettings<StackdriverOptions>,
|
||||
private backendSrv: BackendSrv,
|
||||
private templateSrv: TemplateSrv,
|
||||
private timeSrv: TimeSrv
|
||||
) {
|
||||
super(instanceSettings);
|
||||
this.baseUrl = `/stackdriver/`;
|
||||
this.url = instanceSettings.url;
|
||||
this.id = instanceSettings.id;
|
||||
this.projectName = instanceSettings.jsonData.defaultProject || '';
|
||||
this.authenticationType = instanceSettings.jsonData.authenticationType || 'jwt';
|
||||
this.metricTypes = [];
|
||||
@@ -62,7 +69,7 @@ export default class StackdriverDatasource implements DataSourceApi<StackdriverQ
|
||||
}
|
||||
}
|
||||
|
||||
interpolateFilters(filters: string[], scopedVars: object) {
|
||||
interpolateFilters(filters: string[], scopedVars: ScopedVars) {
|
||||
return (filters || []).map(f => {
|
||||
return this.templateSrv.replace(f, scopedVars || {}, 'regex');
|
||||
});
|
||||
|
||||
@@ -3,26 +3,30 @@ import { metricDescriptors } from './testData';
|
||||
import { TemplateSrv } from 'app/features/templating/template_srv';
|
||||
import { CustomVariable } from 'app/features/templating/all';
|
||||
import { toUtc } from '@grafana/ui/src/utils/moment_wrapper';
|
||||
import { DataSourceInstanceSettings } from '@grafana/ui';
|
||||
import { StackdriverOptions } from '../types';
|
||||
import { BackendSrv } from 'app/core/services/backend_srv';
|
||||
import { TimeSrv } from 'app/features/dashboard/services/TimeSrv';
|
||||
|
||||
describe('StackdriverDataSource', () => {
|
||||
const instanceSettings = {
|
||||
const instanceSettings = ({
|
||||
jsonData: {
|
||||
defaultProject: 'testproject',
|
||||
},
|
||||
};
|
||||
} as unknown) as DataSourceInstanceSettings<StackdriverOptions>;
|
||||
const templateSrv = new TemplateSrv();
|
||||
const timeSrv = {};
|
||||
const timeSrv = {} as TimeSrv;
|
||||
|
||||
describe('when performing testDataSource', () => {
|
||||
describe('and call to stackdriver api succeeds', () => {
|
||||
let ds;
|
||||
let result;
|
||||
beforeEach(async () => {
|
||||
const backendSrv = {
|
||||
const backendSrv = ({
|
||||
async datasourceRequest() {
|
||||
return Promise.resolve({ status: 200 });
|
||||
},
|
||||
};
|
||||
} as unknown) as BackendSrv;
|
||||
ds = new StackdriverDataSource(instanceSettings, backendSrv, templateSrv, timeSrv);
|
||||
result = await ds.testDatasource();
|
||||
});
|
||||
@@ -35,9 +39,9 @@ describe('StackdriverDataSource', () => {
|
||||
let ds;
|
||||
let result;
|
||||
beforeEach(async () => {
|
||||
const backendSrv = {
|
||||
const backendSrv = ({
|
||||
datasourceRequest: async () => Promise.resolve({ status: 200, data: metricDescriptors }),
|
||||
};
|
||||
} as unknown) as BackendSrv;
|
||||
ds = new StackdriverDataSource(instanceSettings, backendSrv, templateSrv, timeSrv);
|
||||
result = await ds.testDatasource();
|
||||
});
|
||||
@@ -50,7 +54,7 @@ describe('StackdriverDataSource', () => {
|
||||
let ds;
|
||||
let result;
|
||||
beforeEach(async () => {
|
||||
const backendSrv = {
|
||||
const backendSrv = ({
|
||||
datasourceRequest: async () =>
|
||||
Promise.reject({
|
||||
statusText: 'Bad Request',
|
||||
@@ -58,7 +62,7 @@ describe('StackdriverDataSource', () => {
|
||||
error: { code: 400, message: 'Field interval.endTime had an invalid value' },
|
||||
},
|
||||
}),
|
||||
};
|
||||
} as unknown) as BackendSrv;
|
||||
ds = new StackdriverDataSource(instanceSettings, backendSrv, templateSrv, timeSrv);
|
||||
result = await ds.testDatasource();
|
||||
});
|
||||
@@ -103,9 +107,9 @@ describe('StackdriverDataSource', () => {
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
const backendSrv = {
|
||||
const backendSrv = ({
|
||||
datasourceRequest: async () => Promise.resolve({ status: 200, data: response }),
|
||||
};
|
||||
} as unknown) as BackendSrv;
|
||||
ds = new StackdriverDataSource(instanceSettings, backendSrv, templateSrv, timeSrv);
|
||||
});
|
||||
|
||||
@@ -122,7 +126,7 @@ describe('StackdriverDataSource', () => {
|
||||
let ds;
|
||||
let result;
|
||||
beforeEach(async () => {
|
||||
const backendSrv = {
|
||||
const backendSrv = ({
|
||||
async datasourceRequest() {
|
||||
return Promise.resolve({
|
||||
data: {
|
||||
@@ -139,7 +143,7 @@ describe('StackdriverDataSource', () => {
|
||||
},
|
||||
});
|
||||
},
|
||||
};
|
||||
} as unknown) as BackendSrv;
|
||||
ds = new StackdriverDataSource(instanceSettings, backendSrv, templateSrv, timeSrv);
|
||||
result = await ds.getMetricTypes();
|
||||
});
|
||||
@@ -155,12 +159,14 @@ describe('StackdriverDataSource', () => {
|
||||
});
|
||||
});
|
||||
|
||||
const noopBackendSrv = ({} as unknown) as BackendSrv;
|
||||
|
||||
describe('when interpolating a template variable for the filter', () => {
|
||||
let interpolated;
|
||||
describe('and is single value variable', () => {
|
||||
beforeEach(() => {
|
||||
const filterTemplateSrv = initTemplateSrv('filtervalue1');
|
||||
const ds = new StackdriverDataSource(instanceSettings, {}, filterTemplateSrv, timeSrv);
|
||||
const ds = new StackdriverDataSource(instanceSettings, noopBackendSrv, filterTemplateSrv, timeSrv);
|
||||
interpolated = ds.interpolateFilters(['resource.label.zone', '=~', '${test}'], {});
|
||||
});
|
||||
|
||||
@@ -173,7 +179,7 @@ describe('StackdriverDataSource', () => {
|
||||
describe('and is multi value variable', () => {
|
||||
beforeEach(() => {
|
||||
const filterTemplateSrv = initTemplateSrv(['filtervalue1', 'filtervalue2'], true);
|
||||
const ds = new StackdriverDataSource(instanceSettings, {}, filterTemplateSrv, timeSrv);
|
||||
const ds = new StackdriverDataSource(instanceSettings, noopBackendSrv, filterTemplateSrv, timeSrv);
|
||||
interpolated = ds.interpolateFilters(['resource.label.zone', '=~', '[[test]]'], {});
|
||||
});
|
||||
|
||||
@@ -189,7 +195,7 @@ describe('StackdriverDataSource', () => {
|
||||
describe('and is single value variable', () => {
|
||||
beforeEach(() => {
|
||||
const groupByTemplateSrv = initTemplateSrv('groupby1');
|
||||
const ds = new StackdriverDataSource(instanceSettings, {}, groupByTemplateSrv, timeSrv);
|
||||
const ds = new StackdriverDataSource(instanceSettings, noopBackendSrv, groupByTemplateSrv, timeSrv);
|
||||
interpolated = ds.interpolateGroupBys(['[[test]]'], {});
|
||||
});
|
||||
|
||||
@@ -202,7 +208,7 @@ describe('StackdriverDataSource', () => {
|
||||
describe('and is multi value variable', () => {
|
||||
beforeEach(() => {
|
||||
const groupByTemplateSrv = initTemplateSrv(['groupby1', 'groupby2'], true);
|
||||
const ds = new StackdriverDataSource(instanceSettings, {}, groupByTemplateSrv, timeSrv);
|
||||
const ds = new StackdriverDataSource(instanceSettings, noopBackendSrv, groupByTemplateSrv, timeSrv);
|
||||
interpolated = ds.interpolateGroupBys(['[[test]]'], {});
|
||||
});
|
||||
|
||||
@@ -217,7 +223,7 @@ describe('StackdriverDataSource', () => {
|
||||
describe('unit parsing', () => {
|
||||
let ds, res;
|
||||
beforeEach(() => {
|
||||
ds = new StackdriverDataSource(instanceSettings, {}, templateSrv, timeSrv);
|
||||
ds = new StackdriverDataSource(instanceSettings, noopBackendSrv, templateSrv, timeSrv);
|
||||
});
|
||||
describe('when theres only one target', () => {
|
||||
describe('and the stackdriver unit doesnt have a corresponding grafana unit', () => {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { DataQuery } from '@grafana/ui/src/types';
|
||||
import { DataQuery, DataSourceJsonData } from '@grafana/ui/src/types';
|
||||
|
||||
export enum MetricFindQueryTypes {
|
||||
Services = 'services',
|
||||
@@ -40,6 +40,11 @@ export interface StackdriverQuery extends DataQuery {
|
||||
view?: string;
|
||||
}
|
||||
|
||||
export interface StackdriverOptions extends DataSourceJsonData {
|
||||
defaultProject?: string;
|
||||
authenticationType?: string;
|
||||
}
|
||||
|
||||
export interface AnnotationTarget {
|
||||
defaultProject: string;
|
||||
metricType: string;
|
||||
|
||||
Reference in New Issue
Block a user