mirror of
https://github.com/grafana/grafana.git
synced 2025-02-11 08:05:43 -06:00
Parca: Apply template variables for labelSelector in query (#82910)
* Parca: Apply template variables for labelSelector in query * Remove unused imports --------- Co-authored-by: Joey Tawadrous <joey.tawadrous@grafana.com>
This commit is contained in:
parent
5e65820bee
commit
8138ca34a4
71
public/app/plugins/datasource/parca/datasource.test.ts
Normal file
71
public/app/plugins/datasource/parca/datasource.test.ts
Normal file
@ -0,0 +1,71 @@
|
||||
import { DataSourceInstanceSettings, PluginMetaInfo, PluginType } from '@grafana/data';
|
||||
import { getTemplateSrv } from '@grafana/runtime';
|
||||
|
||||
import { defaultParcaQueryType } from './dataquery.gen';
|
||||
import { ParcaDataSource } from './datasource';
|
||||
import { Query } from './types';
|
||||
|
||||
jest.mock('@grafana/runtime', () => {
|
||||
const actual = jest.requireActual('@grafana/runtime');
|
||||
return {
|
||||
...actual,
|
||||
getTemplateSrv: () => {
|
||||
return {
|
||||
replace: (query: string): string => {
|
||||
return query.replace(/\$var/g, 'interpolated');
|
||||
},
|
||||
};
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
describe('Parca data source', () => {
|
||||
let ds: ParcaDataSource;
|
||||
beforeEach(() => {
|
||||
ds = new ParcaDataSource(defaultSettings);
|
||||
});
|
||||
|
||||
describe('applyTemplateVariables', () => {
|
||||
const templateSrv = getTemplateSrv();
|
||||
|
||||
it('should not update labelSelector if there are no template variables', () => {
|
||||
ds = new ParcaDataSource(defaultSettings, templateSrv);
|
||||
const query = ds.applyTemplateVariables(defaultQuery({ labelSelector: `no var` }), {});
|
||||
expect(query).toMatchObject({ labelSelector: `no var` });
|
||||
});
|
||||
|
||||
it('should update labelSelector if there are template variables', () => {
|
||||
ds = new ParcaDataSource(defaultSettings, templateSrv);
|
||||
const query = ds.applyTemplateVariables(defaultQuery({ labelSelector: `{$var="$var"}` }), {});
|
||||
expect(query).toMatchObject({ labelSelector: `{interpolated="interpolated"}` });
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const defaultSettings: DataSourceInstanceSettings = {
|
||||
id: 0,
|
||||
uid: 'parca',
|
||||
type: 'profiling',
|
||||
name: 'parca',
|
||||
access: 'proxy',
|
||||
meta: {
|
||||
id: 'parca',
|
||||
name: 'parca',
|
||||
type: PluginType.datasource,
|
||||
info: {} as PluginMetaInfo,
|
||||
module: '',
|
||||
baseUrl: '',
|
||||
},
|
||||
jsonData: {},
|
||||
readOnly: false,
|
||||
};
|
||||
|
||||
const defaultQuery = (query: Partial<Query>): Query => {
|
||||
return {
|
||||
refId: 'x',
|
||||
labelSelector: '',
|
||||
profileTypeId: '',
|
||||
queryType: defaultParcaQueryType,
|
||||
...query,
|
||||
};
|
||||
};
|
@ -1,12 +1,15 @@
|
||||
import { Observable, of } from 'rxjs';
|
||||
|
||||
import { DataQueryRequest, DataQueryResponse, DataSourceInstanceSettings } from '@grafana/data';
|
||||
import { DataSourceWithBackend } from '@grafana/runtime';
|
||||
import { DataQueryRequest, DataQueryResponse, DataSourceInstanceSettings, ScopedVars } from '@grafana/data';
|
||||
import { DataSourceWithBackend, getTemplateSrv, TemplateSrv } from '@grafana/runtime';
|
||||
|
||||
import { ParcaDataSourceOptions, Query, ProfileTypeMessage } from './types';
|
||||
|
||||
export class ParcaDataSource extends DataSourceWithBackend<Query, ParcaDataSourceOptions> {
|
||||
constructor(instanceSettings: DataSourceInstanceSettings<ParcaDataSourceOptions>) {
|
||||
constructor(
|
||||
instanceSettings: DataSourceInstanceSettings<ParcaDataSourceOptions>,
|
||||
private readonly templateSrv: TemplateSrv = getTemplateSrv()
|
||||
) {
|
||||
super(instanceSettings);
|
||||
}
|
||||
|
||||
@ -19,6 +22,13 @@ export class ParcaDataSource extends DataSourceWithBackend<Query, ParcaDataSourc
|
||||
return super.query(request);
|
||||
}
|
||||
|
||||
applyTemplateVariables(query: Query, scopedVars: ScopedVars): Query {
|
||||
return {
|
||||
...query,
|
||||
labelSelector: this.templateSrv.replace(query.labelSelector ?? '', scopedVars),
|
||||
};
|
||||
}
|
||||
|
||||
async getProfileTypes(): Promise<ProfileTypeMessage[]> {
|
||||
return await super.getResource('profileTypes');
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user