mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* loki: switch to a monaco-based query field, step 1 (#46291) * loki: use monaco-logql (#46318) * loki: use monaco-logql * updated monaco-logql * fix all the tests (#46327) * loki: recommend parser (#46362) * loki: recommend parser * additional improvements * more improvements * type and lint fixes * more improvements * trigger autocomplete on focus * rename * loki: more smart features (#46414) * loki: more smart features * loki: updated syntax-highlight version * better explanation (#46443) * better explanation * improved help-text Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> * Fix label * feat(loki-monaco-editor): add monaco-logql as a dependency * feat(loki-monaco-editor): add back range function removed during merge * feat(loki-monaco-editor): sync imports with recent changes * feat(loki-monaco-editor): add missing lang provider functions * feat(loki-monaco-editor): fix imports * feat(loki-monaco-editor): display monaco editor by default Temporarily * Chore: remove commented code * Chore: minor refactor to NeverCaseError * Chore: minor code cleanups * feat(loki-monaco-editor): add history implementation Will see how it behaves and base the history slicing on tangible feedback * feat(loki-monaco-editor): turn completion data provider into a class * Chore: fix missing imports * feat(loki-monaco-editor): refactor data provider methods Move complexity scattered everywhere to the provider * Chore: clean up redundant code * Chore: minor comments cleanup * Chore: simplify override services * Chore: rename callback * feat(loki-monaco-editor): use query hints implementation to parse expression * feat(loki-monaco-editor): improve function name * Chore: remove superfluous variable in favor of destructuring * Chore: remove unused imports * Chore: make method async * feat(loki-monaco-editor): fix deprecations and errors in situation * feat(loki-monaco-editor): comment failing test case * Chore: remove comment from test * Chore: remove duplicated completion item * Chore: fix linting issues * Chore: update language provider test * Chore: update datasource test * feat(loki-monaco-editor): create feature flag * feat(loki-monaco-editor): place the editor under a feature flag * Chore: add completion unit test * Chore: add completion data provider test * Chore: remove unwanted export * Chore: remove unused export * Chore(loki-query-field): destructure all props * chore(loki-completions): remove odd string * fix(loki-completions): remove rate_interval Not supported * fix(loki-completions): remove line filters for after pipe case We shouldn't offer line filters if we are after first pipe. * refactor(loki-datasource): update default parameter * fix(loki-syntax): remove outdated documentation * Update capitalization in pkg/services/featuremgmt/registry.go Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> * refactor(situation): use node types instead of names * Chore: comment line filters pending implementation It's breaking the build due to a linting error. * Chore: update feature flag test after capitalization change * Revert "fix(loki-completions): remove line filters for after pipe case" This reverts commit3d003ca4bc. * Revert "Chore: comment line filters pending implementation" This reverts commit84bfe76a6a. Co-authored-by: Gábor Farkas <gabor.farkas@gmail.com> Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> Co-authored-by: Ivana Huckova <ivana.huckova@gmail.com>
102 lines
2.8 KiB
TypeScript
102 lines
2.8 KiB
TypeScript
import { DataSourceInstanceSettings, DataSourceSettings, PluginType, toUtc } from '@grafana/data';
|
|
import { TemplateSrv } from '@grafana/runtime';
|
|
|
|
import { getMockDataSource } from '../../../features/datasources/__mocks__';
|
|
|
|
import { LokiDatasource } from './datasource';
|
|
import { LokiOptions } from './types';
|
|
|
|
export function createDefaultConfigOptions(): DataSourceSettings<LokiOptions> {
|
|
return getMockDataSource<LokiOptions>({
|
|
jsonData: { maxLines: '531' },
|
|
});
|
|
}
|
|
|
|
const rawRange = {
|
|
from: toUtc('2018-04-25 10:00'),
|
|
to: toUtc('2018-04-25 11:00'),
|
|
};
|
|
|
|
const defaultTimeSrvMock = {
|
|
timeRange: jest.fn().mockReturnValue({
|
|
from: rawRange.from,
|
|
to: rawRange.to,
|
|
raw: rawRange,
|
|
}),
|
|
};
|
|
|
|
const defaultTemplateSrvMock = {
|
|
replace: (input: string) => input,
|
|
};
|
|
|
|
export function createLokiDatasource(
|
|
templateSrvMock: Partial<TemplateSrv> = defaultTemplateSrvMock,
|
|
settings: Partial<DataSourceInstanceSettings<LokiOptions>> = {},
|
|
timeSrvStub = defaultTimeSrvMock
|
|
): LokiDatasource {
|
|
const customSettings: DataSourceInstanceSettings<LokiOptions> = {
|
|
url: 'myloggingurl',
|
|
id: 0,
|
|
uid: '',
|
|
type: '',
|
|
name: '',
|
|
meta: {
|
|
id: 'id',
|
|
name: 'name',
|
|
type: PluginType.datasource,
|
|
module: '',
|
|
baseUrl: '',
|
|
info: {
|
|
author: {
|
|
name: 'Test',
|
|
},
|
|
description: '',
|
|
links: [],
|
|
logos: {
|
|
large: '',
|
|
small: '',
|
|
},
|
|
screenshots: [],
|
|
updated: '',
|
|
version: '',
|
|
},
|
|
},
|
|
readOnly: false,
|
|
jsonData: {
|
|
maxLines: '20',
|
|
},
|
|
access: 'direct',
|
|
...settings,
|
|
};
|
|
|
|
// @ts-expect-error
|
|
return new LokiDatasource(customSettings, templateSrvMock, timeSrvStub);
|
|
}
|
|
|
|
export function createMetadataRequest(
|
|
labelsAndValues: Record<string, string[]>,
|
|
series?: Record<string, Array<Record<string, string>>>
|
|
) {
|
|
// added % to allow urlencoded labelKeys. Note, that this is not confirm with Loki, as loki does not allow specialcharacters in labelKeys, but needed for tests.
|
|
const lokiLabelsAndValuesEndpointRegex = /^label\/([%\w]*)\/values/;
|
|
const lokiSeriesEndpointRegex = /^series/;
|
|
const lokiLabelsEndpoint = 'labels';
|
|
const labels = Object.keys(labelsAndValues);
|
|
|
|
return async function metadataRequestMock(url: string, params?: Record<string, string | number>) {
|
|
if (url === lokiLabelsEndpoint) {
|
|
return labels;
|
|
} else {
|
|
const labelsMatch = url.match(lokiLabelsAndValuesEndpointRegex);
|
|
const seriesMatch = url.match(lokiSeriesEndpointRegex);
|
|
if (labelsMatch) {
|
|
return labelsAndValues[labelsMatch[1]] || [];
|
|
} else if (seriesMatch && series && params) {
|
|
return series[params['match[]']] || [];
|
|
} else {
|
|
throw new Error(`Unexpected url error, ${url}`);
|
|
}
|
|
}
|
|
};
|
|
}
|