123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- import { DataSourceSettings } from '@grafana/data';
- import { createDatasourceSettings } from '../../../features/datasources/mocks';
- import { LokiDatasource } from './datasource';
- import { LokiOptions } from './types';
- interface Labels {
- [label: string]: string[];
- }
- interface Series {
- [label: string]: string;
- }
- interface SeriesForSelector {
- [selector: string]: Series[];
- }
- export function makeMockLokiDatasource(labelsAndValues: Labels, series?: SeriesForSelector): LokiDatasource {
- // 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 rangeMock = {
- start: 1560153109000,
- end: 1560163909000,
- };
- const labels = Object.keys(labelsAndValues);
- return {
- getTimeRangeParams: () => rangeMock,
- metadataRequest: (url: string, params?: { [key: string]: string }) => {
- 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}`);
- }
- }
- },
- interpolateString: (string: string) => string,
- } as any;
- }
- export function createDefaultConfigOptions(): DataSourceSettings<LokiOptions> {
- return createDatasourceSettings<LokiOptions>({
- maxLines: '531',
- });
- }
|