Loki: Fix fetching of label names if no previous equality operator (#82582)

This commit is contained in:
Sven Grossmann 2024-02-15 16:28:05 +01:00 committed by GitHub
parent 1eebd2a4de
commit 7ec97f4ad8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 25 additions and 1 deletions

View File

@ -107,6 +107,27 @@ describe('LokiQueryBuilder', () => {
expect(props.datasource.languageProvider.fetchSeriesLabels).not.toBeCalled();
});
it('uses fetchLabels preselected label have regex equality matcher with match everything value (.*)', async () => {
const props = createDefaultProps();
props.datasource.getDataSamples = jest.fn().mockResolvedValue([]);
props.datasource.languageProvider.fetchSeriesLabels = jest.fn();
props.datasource.languageProvider.fetchLabels = jest.fn().mockReturnValue(['a', 'b']);
const query: LokiVisualQuery = {
labels: [
{ op: '=~', label: 'cluster', value: '.*' },
{ op: '=', label: 'job', value: 'grafana' },
],
operations: [],
};
render(<LokiQueryBuilder {...props} query={query} />);
const labels = screen.getByText(/Label filters/);
const selects = getAllByRole(getSelectParent(labels)!, 'combobox');
await userEvent.click(selects[3]);
expect(props.datasource.languageProvider.fetchLabels).toBeCalledWith({ timeRange: mockTimeRange });
expect(props.datasource.languageProvider.fetchSeriesLabels).not.toBeCalled();
});
it('uses fetchSeriesLabels preselected label have regex equality matcher', async () => {
const props = createDefaultProps();
props.datasource.getDataSamples = jest.fn().mockResolvedValue([]);

View File

@ -58,7 +58,10 @@ export const LokiQueryBuilder = React.memo<Props>(
const onGetLabelNames = async (forLabel: Partial<QueryBuilderLabelFilter>): Promise<string[]> => {
const labelsToConsider = query.labels.filter((x) => x !== forLabel);
if (labelsToConsider.length === 0) {
const hasEqualityOperation = labelsToConsider.find(
(filter) => filter.op === '=' || (filter.op === '=~' && new RegExp(filter.value).test('') === false)
);
if (labelsToConsider.length === 0 || !hasEqualityOperation) {
return await datasource.languageProvider.fetchLabels({ timeRange });
}