mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -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 { Observable, of } from 'rxjs';
|
||||||
|
|
||||||
import { DataQueryRequest, DataQueryResponse, DataSourceInstanceSettings } from '@grafana/data';
|
import { DataQueryRequest, DataQueryResponse, DataSourceInstanceSettings, ScopedVars } from '@grafana/data';
|
||||||
import { DataSourceWithBackend } from '@grafana/runtime';
|
import { DataSourceWithBackend, getTemplateSrv, TemplateSrv } from '@grafana/runtime';
|
||||||
|
|
||||||
import { ParcaDataSourceOptions, Query, ProfileTypeMessage } from './types';
|
import { ParcaDataSourceOptions, Query, ProfileTypeMessage } from './types';
|
||||||
|
|
||||||
export class ParcaDataSource extends DataSourceWithBackend<Query, ParcaDataSourceOptions> {
|
export class ParcaDataSource extends DataSourceWithBackend<Query, ParcaDataSourceOptions> {
|
||||||
constructor(instanceSettings: DataSourceInstanceSettings<ParcaDataSourceOptions>) {
|
constructor(
|
||||||
|
instanceSettings: DataSourceInstanceSettings<ParcaDataSourceOptions>,
|
||||||
|
private readonly templateSrv: TemplateSrv = getTemplateSrv()
|
||||||
|
) {
|
||||||
super(instanceSettings);
|
super(instanceSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -19,6 +22,13 @@ export class ParcaDataSource extends DataSourceWithBackend<Query, ParcaDataSourc
|
|||||||
return super.query(request);
|
return super.query(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
applyTemplateVariables(query: Query, scopedVars: ScopedVars): Query {
|
||||||
|
return {
|
||||||
|
...query,
|
||||||
|
labelSelector: this.templateSrv.replace(query.labelSelector ?? '', scopedVars),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
async getProfileTypes(): Promise<ProfileTypeMessage[]> {
|
async getProfileTypes(): Promise<ProfileTypeMessage[]> {
|
||||||
return await super.getResource('profileTypes');
|
return await super.getResource('profileTypes');
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user