mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
fix: label_values
w/ empty filters in prom datasource variable query (#78242)
* fix: handle empty filters in prometheus datasource variable query function `label_values`
This commit is contained in:
parent
2f2ce3edbb
commit
efdfa29fe2
@ -104,6 +104,30 @@ describe('PrometheusMetricFindQuery', () => {
|
||||
});
|
||||
});
|
||||
|
||||
const emptyFilters = ['{}', '{ }', ' { } ', ' {} '];
|
||||
|
||||
emptyFilters.forEach((emptyFilter) => {
|
||||
const queryString = `label_values(${emptyFilter}, resource)`;
|
||||
it(`Empty filter, query, ${queryString} should just generate label search query`, async () => {
|
||||
const query = setupMetricFindQuery({
|
||||
query: queryString,
|
||||
response: {
|
||||
data: ['value1', 'value2', 'value3'],
|
||||
},
|
||||
});
|
||||
const results = await query.process(raw);
|
||||
|
||||
expect(results).toHaveLength(3);
|
||||
expect(fetchMock).toHaveBeenCalledTimes(1);
|
||||
expect(fetchMock).toHaveBeenCalledWith({
|
||||
method: 'GET',
|
||||
url: `/api/datasources/uid/ABCDEF/resources/api/v1/label/resource/values?start=${raw.from.unix()}&end=${raw.to.unix()}`,
|
||||
hideFromInspector: true,
|
||||
headers: {},
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// <LegacyPrometheus>
|
||||
it('label_values(metric, resource) should generate series query with correct time', async () => {
|
||||
const query = setupMetricFindQuery({
|
||||
|
@ -48,10 +48,13 @@ export default class PrometheusMetricFindQuery {
|
||||
|
||||
const labelValuesQuery = this.query.match(labelValuesRegex);
|
||||
if (labelValuesQuery) {
|
||||
if (labelValuesQuery[1]) {
|
||||
return this.labelValuesQuery(labelValuesQuery[2], labelValuesQuery[1]);
|
||||
const filter = labelValuesQuery[1];
|
||||
const label = labelValuesQuery[2];
|
||||
if (isFilterDefined(filter)) {
|
||||
return this.labelValuesQuery(label, filter);
|
||||
} else {
|
||||
return this.labelValuesQuery(labelValuesQuery[2]);
|
||||
// Exclude the filter part of the expression because it is blank or empty
|
||||
return this.labelValuesQuery(label);
|
||||
}
|
||||
}
|
||||
|
||||
@ -192,3 +195,8 @@ export default class PrometheusMetricFindQuery {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function isFilterDefined(filter: string) {
|
||||
// We consider blank strings or the empty filter {} as an undefined filter
|
||||
return filter && filter.split(' ').join('') !== '{}';
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user