Prometheus: Reinstate variable interpolation for getTagKeys() and getTagValues() (#107171)

add interpolation to prom getTagKeys() and getTagValues()
pull/107173/head
Domas 2 days ago committed by GitHub
parent 4e19bc515e
commit 6e28464981
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 35
      packages/grafana-prometheus/src/language_provider.test.ts
  2. 11
      packages/grafana-prometheus/src/language_provider.ts

@ -825,6 +825,21 @@ describe('PrometheusLanguageProvider with feature toggle', () => {
expect(result).toEqual(['label1', 'label2']); 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 () => { it('should delegate to resource client queryLabelValues', async () => {
const provider = new PrometheusLanguageProvider(defaultDatasource); const provider = new PrometheusLanguageProvider(defaultDatasource);
const resourceClientSpy = jest const resourceClientSpy = jest
@ -836,6 +851,26 @@ describe('PrometheusLanguageProvider with feature toggle', () => {
expect(resourceClientSpy).toHaveBeenCalledWith(timeRange, 'job', '{job="grafana"}', undefined); expect(resourceClientSpy).toHaveBeenCalledWith(timeRange, 'job', '{job="grafana"}', undefined);
expect(result).toEqual(['value1', 'value2']); 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', () => { describe('retrieveMethods', () => {

@ -682,7 +682,8 @@ export class PrometheusLanguageProvider extends PromQlLanguageProvider implement
* @returns {Promise<string[]>} Array of matching label key names, sorted alphabetically * @returns {Promise<string[]>} Array of matching label key names, sorted alphabetically
*/ */
public queryLabelKeys = async (timeRange: TimeRange, match?: string, limit?: number): Promise<string[]> => { 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, match?: string,
limit?: number limit?: number
): Promise<string[]> => { ): 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
);
}; };
} }

Loading…
Cancel
Save