Files
grafana/public/app/plugins/datasource/parca/datasource.ts
T
Lev Zakharov 8138ca34a4 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>
2024-02-20 12:58:47 +00:00

44 lines
1.4 KiB
TypeScript

import { Observable, of } from 'rxjs';
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>,
private readonly templateSrv: TemplateSrv = getTemplateSrv()
) {
super(instanceSettings);
}
query(request: DataQueryRequest<Query>): Observable<DataQueryResponse> {
if (!request.targets.every((q) => q.profileTypeId)) {
// When changing data source in explore, firs query can be sent without filled in profileTypeId
return of({ data: [] });
}
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');
}
async getLabelNames(): Promise<string[]> {
return await super.getResource('labelNames');
}
async getLabelValues(labelName: string): Promise<string[]> {
return await super.getResource('labelValues', { label: labelName });
}
}