Prometheus: Reinstate variable interpolation for getTagKeys() and getTagValues() (#107171)
add interpolation to prom getTagKeys() and getTagValues()
This commit is contained in:
@@ -825,6 +825,21 @@ describe('PrometheusLanguageProvider with feature toggle', () => {
|
||||
expect(result).toEqual(['label1', 'label2']);
|
||||
});
|
||||
|
||||
it('queryLabelKeys should interpolate variables', async () => {
|
||||
const provider = new PrometheusLanguageProvider({
|
||||
...defaultDatasource,
|
||||
interpolateString: (string: string) => string.replace(/\$/g, 'interpolated_'),
|
||||
} as PrometheusDatasource);
|
||||
const resourceClientSpy = jest
|
||||
.spyOn(provider['resourceClient'], 'queryLabelKeys')
|
||||
.mockResolvedValue(['label1', 'label2']);
|
||||
|
||||
const result = await provider.queryLabelKeys(timeRange, '{job="$job"}');
|
||||
|
||||
expect(resourceClientSpy).toHaveBeenCalledWith(timeRange, '{job="interpolated_job"}', undefined);
|
||||
expect(result).toEqual(['label1', 'label2']);
|
||||
});
|
||||
|
||||
it('should delegate to resource client queryLabelValues', async () => {
|
||||
const provider = new PrometheusLanguageProvider(defaultDatasource);
|
||||
const resourceClientSpy = jest
|
||||
@@ -836,6 +851,26 @@ describe('PrometheusLanguageProvider with feature toggle', () => {
|
||||
expect(resourceClientSpy).toHaveBeenCalledWith(timeRange, 'job', '{job="grafana"}', undefined);
|
||||
expect(result).toEqual(['value1', 'value2']);
|
||||
});
|
||||
|
||||
it('queryLabelValues should interpolate variables', async () => {
|
||||
const provider = new PrometheusLanguageProvider({
|
||||
...defaultDatasource,
|
||||
interpolateString: (string: string) => string.replace(/\$/g, 'interpolated_'),
|
||||
} as PrometheusDatasource);
|
||||
const resourceClientSpy = jest
|
||||
.spyOn(provider['resourceClient'], 'queryLabelValues')
|
||||
.mockResolvedValue(['label1', 'label2']);
|
||||
|
||||
const result = await provider.queryLabelValues(timeRange, '$label', '{job="$job"}');
|
||||
|
||||
expect(resourceClientSpy).toHaveBeenCalledWith(
|
||||
timeRange,
|
||||
'interpolated_label',
|
||||
'{job="interpolated_job"}',
|
||||
undefined
|
||||
);
|
||||
expect(result).toEqual(['label1', 'label2']);
|
||||
});
|
||||
});
|
||||
|
||||
describe('retrieveMethods', () => {
|
||||
|
||||
@@ -682,7 +682,8 @@ export class PrometheusLanguageProvider extends PromQlLanguageProvider implement
|
||||
* @returns {Promise<string[]>} Array of matching label key names, sorted alphabetically
|
||||
*/
|
||||
public queryLabelKeys = async (timeRange: TimeRange, match?: string, limit?: number): Promise<string[]> => {
|
||||
return await this.resourceClient.queryLabelKeys(timeRange, match, limit);
|
||||
const interpolatedMatch = match ? this.datasource.interpolateString(match) : match;
|
||||
return await this.resourceClient.queryLabelKeys(timeRange, interpolatedMatch, limit);
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -716,7 +717,13 @@ export class PrometheusLanguageProvider extends PromQlLanguageProvider implement
|
||||
match?: string,
|
||||
limit?: number
|
||||
): Promise<string[]> => {
|
||||
return await this.resourceClient.queryLabelValues(timeRange, labelKey, match, limit);
|
||||
const interpolatedMatch = match ? this.datasource.interpolateString(match) : match;
|
||||
return await this.resourceClient.queryLabelValues(
|
||||
timeRange,
|
||||
this.datasource.interpolateString(labelKey),
|
||||
interpolatedMatch,
|
||||
limit
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user