Loki Autocomplete: Suggest only possible labels for unwrap (#61411)

* feat(loki-autocomplete): filter valid labels for unwrap autocomplete suggestions

* refactor(unwrap): reuse new function in builder
This commit is contained in:
Matias Chomicki
2023-01-16 13:07:02 +01:00
committed by GitHub
parent 7e51eac740
commit 7e505ea49c
8 changed files with 86 additions and 36 deletions

View File

@@ -6,7 +6,11 @@ import { TypeaheadInput } from '@grafana/ui';
import LanguageProvider, { LokiHistoryItem } from './LanguageProvider';
import { LokiDatasource } from './datasource';
import { createLokiDatasource, createMetadataRequest } from './mocks';
import { extractLogParserFromDataFrame, extractLabelKeysFromDataFrame } from './responseUtils';
import {
extractLogParserFromDataFrame,
extractLabelKeysFromDataFrame,
extractUnwrapLabelKeysFromDataFrame,
} from './responseUtils';
import { LokiQueryType } from './types';
jest.mock('./responseUtils');
@@ -304,11 +308,13 @@ describe('Query imports', () => {
let datasource: LokiDatasource, languageProvider: LanguageProvider;
const extractLogParserFromDataFrameMock = jest.mocked(extractLogParserFromDataFrame);
const extractedLabelKeys = ['extracted', 'label'];
const unwrapLabelKeys = ['unwrap', 'labels'];
beforeEach(() => {
datasource = createLokiDatasource();
languageProvider = new LanguageProvider(datasource);
jest.mocked(extractLabelKeysFromDataFrame).mockReturnValue(extractedLabelKeys);
jest.mocked(extractUnwrapLabelKeysFromDataFrame).mockReturnValue(unwrapLabelKeys);
});
it('identifies selectors with JSON parser data', async () => {
@@ -317,6 +323,7 @@ describe('Query imports', () => {
expect(await languageProvider.getParserAndLabelKeys('{place="luna"}')).toEqual({
extractedLabelKeys,
unwrapLabelKeys,
hasJSON: true,
hasLogfmt: false,
});
@@ -328,6 +335,7 @@ describe('Query imports', () => {
expect(await languageProvider.getParserAndLabelKeys('{place="luna"}')).toEqual({
extractedLabelKeys,
unwrapLabelKeys,
hasJSON: false,
hasLogfmt: true,
});
@@ -339,6 +347,7 @@ describe('Query imports', () => {
expect(await languageProvider.getParserAndLabelKeys('{place="luna"}')).toEqual({
extractedLabelKeys: [],
unwrapLabelKeys: [],
hasJSON: false,
hasLogfmt: false,
});