mirror of https://github.com/grafana/grafana.git
Prometheus: Use PrometheusLanguageProviderInterface instead of legacy PromQlLanguageProvider (#105988)
* refactor language provider
* update tests
* more tests
* betterer and api endpoints
* copilot updates
* betterer
* remove default value
* prettier
* introduce new methods
* provide unit tests for labelValues
* update metadata fetch
* move all cache related stuff in caching.ts
* provide interface
* provide deprecation messages
* unit tests for new interface
* separation of concerns
* update tests
* fix unit test
* fix some types
* Revert "fix some types"
This reverts commit 7e64b93b5f.
* revert interface usage
* betterer
* use PrometheusLanguageProviderInterface in everywhere
* introduce resource clients and better refactoring
* prettier
* type fixes
* betterer
* no empty matcher for series calls
* better matchers
* import fixes
This commit is contained in:
parent
74e39dd996
commit
6d9475127c
|
|
@ -5,7 +5,7 @@ import { AnnotationQuery } from '@grafana/data';
|
|||
import { selectors } from '@grafana/e2e-selectors';
|
||||
|
||||
import { PrometheusDatasource } from '../datasource';
|
||||
import PromQlLanguageProvider from '../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../language_provider';
|
||||
import { EmptyLanguageProviderMock } from '../language_provider.mock';
|
||||
import { PromQuery } from '../types';
|
||||
|
||||
|
|
@ -47,7 +47,7 @@ describe('AnnotationQueryEditor', () => {
|
|||
};
|
||||
|
||||
function createMockDatasource() {
|
||||
const languageProvider = new EmptyLanguageProviderMock() as unknown as PromQlLanguageProvider;
|
||||
const languageProvider = new EmptyLanguageProviderMock() as unknown as PrometheusLanguageProviderInterface;
|
||||
const mockDatasource = {
|
||||
languageProvider,
|
||||
lookupsDisabled: false,
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ function setup(app: CoreApp): { onRunQuery: jest.Mock } {
|
|||
const dataSource = {
|
||||
getPrometheusTime: jest.fn((date, roundup) => 123),
|
||||
getQueryHints: jest.fn(() => []),
|
||||
getDebounceTimeInMilliseconds: jest.fn(() => 300),
|
||||
languageProvider: {
|
||||
start: () => Promise.resolve([]),
|
||||
syntax: () => {},
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import { dateTime, TimeRange } from '@grafana/data';
|
|||
import { selectors } from '@grafana/e2e-selectors';
|
||||
|
||||
import { PrometheusDatasource } from '../datasource';
|
||||
import PrometheusLanguageProvider from '../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../language_provider';
|
||||
import { migrateVariableEditorBackToVariableSupport } from '../migrations/variableMigration';
|
||||
import { selectOptionInTest } from '../test/helpers/selectOptionInTest';
|
||||
import { PromVariableQuery, PromVariableQueryType, StandardPromVariableQuery } from '../types';
|
||||
|
|
@ -143,8 +143,7 @@ describe('PromVariableQueryEditor', () => {
|
|||
metricsMetadata: {},
|
||||
getLabelValues: jest.fn().mockImplementation(() => ['that']),
|
||||
fetchLabelsWithMatch: jest.fn().mockImplementation(() => Promise.resolve({ those: 'those' })),
|
||||
} as Partial<PrometheusLanguageProvider> as PrometheusLanguageProvider,
|
||||
getDebounceTimeInMilliseconds: jest.fn(),
|
||||
} as Partial<PrometheusLanguageProviderInterface>,
|
||||
getTagKeys: jest
|
||||
.fn()
|
||||
.mockImplementation(() => Promise.resolve([{ text: 'this', value: 'this', label: 'this' }])),
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import { ReactNode } from 'react';
|
|||
|
||||
import { TimeRange } from '@grafana/data';
|
||||
|
||||
import PromQlLanguageProvider from '../../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../../language_provider';
|
||||
import { getMockTimeRange } from '../../test/__mocks__/datasource';
|
||||
|
||||
import { MetricsBrowserProvider, useMetricsBrowser } from './MetricsBrowserContext';
|
||||
|
|
@ -61,7 +61,7 @@ const setupLanguageProviderMock = () => {
|
|||
job: ['job1', 'job2'],
|
||||
instance: ['instance1', 'instance2'],
|
||||
}),
|
||||
} as unknown as PromQlLanguageProvider;
|
||||
} as unknown as PrometheusLanguageProviderInterface;
|
||||
|
||||
return { mockTimeRange, mockLanguageProvider };
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import { createContext, PropsWithChildren, useCallback, useContext, useMemo } fr
|
|||
|
||||
import { TimeRange } from '@grafana/data';
|
||||
|
||||
import PromQlLanguageProvider from '../../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../../language_provider';
|
||||
|
||||
import { buildSelector } from './selectorBuilder';
|
||||
import { Metric } from './types';
|
||||
|
|
@ -50,7 +50,7 @@ const MetricsBrowserContext = createContext<MetricsBrowserContextType | undefine
|
|||
|
||||
type MetricsBrowserProviderProps = {
|
||||
timeRange: TimeRange;
|
||||
languageProvider: PromQlLanguageProvider;
|
||||
languageProvider: PrometheusLanguageProviderInterface;
|
||||
onChange: (selector: string) => void;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import { act, renderHook, waitFor } from '@testing-library/react';
|
|||
|
||||
import { TimeRange, dateTime } from '@grafana/data';
|
||||
|
||||
import PromQlLanguageProvider from '../../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../../language_provider';
|
||||
import { getMockTimeRange } from '../../test/__mocks__/datasource';
|
||||
|
||||
import * as selectorBuilderModule from './selectorBuilder';
|
||||
|
|
@ -42,7 +42,7 @@ const setupMocks = () => {
|
|||
fetchSeriesValuesWithMatch: jest.fn(),
|
||||
fetchSeriesLabelsMatch: jest.fn(),
|
||||
fetchLabelsWithMatch: jest.fn(),
|
||||
} as unknown as PromQlLanguageProvider;
|
||||
} as unknown as PrometheusLanguageProviderInterface;
|
||||
|
||||
// Mock standard responses
|
||||
(mockLanguageProvider.fetchLabelValues as jest.Mock).mockResolvedValue(['metric1', 'metric2', 'metric3']);
|
||||
|
|
|
|||
|
|
@ -3,12 +3,12 @@ import { useDebounce } from 'react-use';
|
|||
|
||||
import { TimeRange } from '@grafana/data';
|
||||
|
||||
import PromQlLanguageProvider from '../../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../../language_provider';
|
||||
|
||||
import { buildSelector } from './selectorBuilder';
|
||||
import { DEFAULT_SERIES_LIMIT, EMPTY_SELECTOR, LAST_USED_LABELS_KEY, Metric, METRIC_LABEL } from './types';
|
||||
|
||||
export const useMetricsLabelsValues = (timeRange: TimeRange, languageProvider: PromQlLanguageProvider) => {
|
||||
export const useMetricsLabelsValues = (timeRange: TimeRange, languageProvider: PrometheusLanguageProviderInterface) => {
|
||||
const timeRangeRef = useRef<TimeRange>(timeRange);
|
||||
const lastSeriesLimitRef = useRef(DEFAULT_SERIES_LIMIT);
|
||||
const isInitializedRef = useRef(false);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
import { HistoryItem, TimeRange } from '@grafana/data';
|
||||
|
||||
import { PrometheusDatasource } from '../../datasource';
|
||||
import type PromQlLanguageProvider from '../../language_provider';
|
||||
import { type PrometheusLanguageProviderInterface } from '../../language_provider';
|
||||
import { PromQuery } from '../../types';
|
||||
|
||||
// we need to store this in a separate file,
|
||||
|
|
@ -11,7 +11,7 @@ import { PromQuery } from '../../types';
|
|||
// props as the sync-component.
|
||||
export type Props = {
|
||||
initialValue: string;
|
||||
languageProvider: PromQlLanguageProvider;
|
||||
languageProvider: PrometheusLanguageProviderInterface;
|
||||
history: Array<HistoryItem<PromQuery>>;
|
||||
placeholder: string;
|
||||
onRunQuery: (value: string) => void;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { HistoryItem } from '@grafana/data';
|
||||
import type { Monaco } from '@grafana/ui'; // used in TSDoc `@link` below
|
||||
|
||||
import PromQlLanguageProvider from '../../../language_provider';
|
||||
import { type PrometheusLanguageProviderInterface } from '../../../language_provider';
|
||||
import { PromQuery } from '../../../types';
|
||||
import { isValidLegacyName } from '../../../utf8_support';
|
||||
|
||||
|
|
@ -31,12 +31,12 @@ interface Metric {
|
|||
}
|
||||
|
||||
export interface DataProviderParams {
|
||||
languageProvider: PromQlLanguageProvider;
|
||||
languageProvider: PrometheusLanguageProviderInterface;
|
||||
historyProvider: Array<HistoryItem<PromQuery>>;
|
||||
}
|
||||
|
||||
export class DataProvider {
|
||||
readonly languageProvider: PromQlLanguageProvider;
|
||||
readonly languageProvider: PrometheusLanguageProviderInterface;
|
||||
readonly historyProvider: Array<HistoryItem<PromQuery>>;
|
||||
readonly getSeriesLabels: typeof this.languageProvider.getSeriesLabels;
|
||||
readonly getSeriesValues: typeof this.languageProvider.getSeriesValues;
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
import { renderHook } from '@testing-library/react';
|
||||
|
||||
import { PrometheusDatasource } from '../datasource';
|
||||
import PromQlLanguageProvider from '../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../language_provider';
|
||||
|
||||
import { useMetricsState } from './useMetricsState';
|
||||
|
||||
// Mock implementations
|
||||
const createMockLanguageProvider = (metrics: string[] = []): PromQlLanguageProvider =>
|
||||
const createMockLanguageProvider = (metrics: string[] = []): PrometheusLanguageProviderInterface =>
|
||||
({
|
||||
metrics,
|
||||
}) as unknown as PromQlLanguageProvider;
|
||||
}) as unknown as PrometheusLanguageProviderInterface;
|
||||
|
||||
const createMockDatasource = (lookupsDisabled = false): PrometheusDatasource =>
|
||||
({
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { useMemo } from 'react';
|
||||
|
||||
import { PrometheusDatasource } from '../datasource';
|
||||
import PromQlLanguageProvider from '../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../language_provider';
|
||||
|
||||
function getChooserText(metricsLookupDisabled: boolean, hasSyntax: boolean, hasMetrics: boolean) {
|
||||
if (metricsLookupDisabled) {
|
||||
|
|
@ -21,7 +21,7 @@ function getChooserText(metricsLookupDisabled: boolean, hasSyntax: boolean, hasM
|
|||
|
||||
export function useMetricsState(
|
||||
datasource: PrometheusDatasource,
|
||||
languageProvider: PromQlLanguageProvider,
|
||||
languageProvider: PrometheusLanguageProviderInterface,
|
||||
syntaxLoaded: boolean
|
||||
) {
|
||||
return useMemo(() => {
|
||||
|
|
|
|||
|
|
@ -2,12 +2,12 @@ import { renderHook } from '@testing-library/react';
|
|||
|
||||
import { DataFrame, dateTime, TimeRange } from '@grafana/data';
|
||||
|
||||
import PromQlLanguageProvider from '../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../language_provider';
|
||||
|
||||
import { usePromQueryFieldEffects } from './usePromQueryFieldEffects';
|
||||
|
||||
type TestProps = {
|
||||
languageProvider: PromQlLanguageProvider;
|
||||
languageProvider: PrometheusLanguageProviderInterface;
|
||||
range: TimeRange | undefined;
|
||||
series: DataFrame[];
|
||||
};
|
||||
|
|
@ -39,7 +39,7 @@ describe('usePromQueryFieldEffects', () => {
|
|||
loadLabelKeys: jest.fn(),
|
||||
loadLabelValues: jest.fn(),
|
||||
modifyQuery: jest.fn(),
|
||||
} as unknown as PromQlLanguageProvider;
|
||||
} as unknown as PrometheusLanguageProviderInterface;
|
||||
|
||||
const mockRange: TimeRange = {
|
||||
from: dateTime('2022-01-01T00:00:00Z'),
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@ import { MutableRefObject, useEffect, useRef } from 'react';
|
|||
|
||||
import { DataFrame, DateTime, TimeRange } from '@grafana/data';
|
||||
|
||||
import PromQlLanguageProvider from '../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../language_provider';
|
||||
import { roundMsToMin } from '../language_utils';
|
||||
|
||||
import { CancelablePromise } from './cancelable-promise';
|
||||
|
||||
export function usePromQueryFieldEffects(
|
||||
languageProvider: PromQlLanguageProvider,
|
||||
languageProvider: PrometheusLanguageProviderInterface,
|
||||
range: TimeRange | undefined,
|
||||
series: DataFrame[] | undefined,
|
||||
refreshMetrics: (languageProviderInitRef: MutableRefObject<CancelablePromise<unknown> | null>) => Promise<void>,
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import { config, getBackendSrv, setBackendSrv, TemplateSrv } from '@grafana/runt
|
|||
|
||||
import { extractRuleMappingFromGroups, PrometheusDatasource } from './datasource';
|
||||
import { prometheusRegularEscape, prometheusSpecialRegexEscape } from './escaping';
|
||||
import PromQlLanguageProvider from './language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from './language_provider';
|
||||
import {
|
||||
createDataRequest,
|
||||
createDefaultPromResponse,
|
||||
|
|
@ -1011,7 +1011,7 @@ describe('PrometheusDatasource2', () => {
|
|||
|
||||
ds.languageProvider = {
|
||||
histogramMetrics: ['tns_request_duration_seconds_bucket'],
|
||||
} as PromQlLanguageProvider;
|
||||
} as PrometheusLanguageProviderInterface;
|
||||
|
||||
const request = {
|
||||
targets: [targetA, targetB],
|
||||
|
|
|
|||
|
|
@ -44,13 +44,13 @@ import { addLabelToQuery } from './add_label_to_query';
|
|||
import { PrometheusAnnotationSupport } from './annotations';
|
||||
import { SUGGESTIONS_LIMIT } from './constants';
|
||||
import { prometheusRegularEscape, prometheusSpecialRegexEscape } from './escaping';
|
||||
import PrometheusLanguageProvider, { exportToAbstractQuery, importFromAbstractQuery } from './language_provider';
|
||||
import {
|
||||
expandRecordingRules,
|
||||
getClientCacheDurationInMinutes,
|
||||
getPrometheusTime,
|
||||
getRangeSnapInterval,
|
||||
} from './language_utils';
|
||||
exportToAbstractQuery,
|
||||
importFromAbstractQuery,
|
||||
PrometheusLanguageProvider,
|
||||
PrometheusLanguageProviderInterface,
|
||||
} from './language_provider';
|
||||
import { expandRecordingRules, getPrometheusTime, getRangeSnapInterval } from './language_utils';
|
||||
import { PrometheusMetricFindQuery } from './metric_find_query';
|
||||
import { getQueryHints } from './query_hints';
|
||||
import { promQueryModeller } from './querybuilder/shared/modeller_instance';
|
||||
|
|
@ -95,7 +95,7 @@ export class PrometheusDatasource
|
|||
withCredentials: boolean;
|
||||
interval: string;
|
||||
httpMethod: string;
|
||||
languageProvider: PrometheusLanguageProvider;
|
||||
languageProvider: PrometheusLanguageProviderInterface;
|
||||
exemplarTraceIdDestinations: ExemplarTraceIdDestination[] | undefined;
|
||||
lookupsDisabled: boolean;
|
||||
customQueryParameters: URLSearchParams;
|
||||
|
|
@ -112,7 +112,7 @@ export class PrometheusDatasource
|
|||
constructor(
|
||||
instanceSettings: DataSourceInstanceSettings<PromOptions>,
|
||||
private readonly templateSrv: TemplateSrv = getTemplateSrv(),
|
||||
languageProvider?: PrometheusLanguageProvider
|
||||
languageProvider?: PrometheusLanguageProviderInterface
|
||||
) {
|
||||
super(instanceSettings);
|
||||
|
||||
|
|
@ -864,32 +864,6 @@ export class PrometheusDatasource
|
|||
return range.raw.from.includes('now') || range.raw.to.includes('now');
|
||||
}
|
||||
|
||||
getDebounceTimeInMilliseconds(): number {
|
||||
switch (this.cacheLevel) {
|
||||
case PrometheusCacheLevel.Medium:
|
||||
return 600;
|
||||
case PrometheusCacheLevel.High:
|
||||
return 1200;
|
||||
default:
|
||||
return 350;
|
||||
}
|
||||
}
|
||||
|
||||
getDaysToCacheMetadata(): number {
|
||||
switch (this.cacheLevel) {
|
||||
case PrometheusCacheLevel.Medium:
|
||||
return 7;
|
||||
case PrometheusCacheLevel.High:
|
||||
return 30;
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
getCacheDurationInMinutes(): number {
|
||||
return getClientCacheDurationInMinutes(this.cacheLevel);
|
||||
}
|
||||
|
||||
getDefaultQuery(app: CoreApp): PromQuery {
|
||||
const defaults = {
|
||||
refId: 'A',
|
||||
|
|
|
|||
|
|
@ -82,6 +82,8 @@ export {
|
|||
} from './types';
|
||||
export { PrometheusVariableSupport } from './variables';
|
||||
|
||||
export type { PrometheusLanguageProviderInterface } from './language_provider';
|
||||
|
||||
// For Metrics Drilldown
|
||||
export { default as PromQlLanguageProvider } from './language_provider';
|
||||
export { getPrometheusTime } from './language_utils';
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ import {
|
|||
} from '@grafana/data';
|
||||
|
||||
import { addLabelToQuery } from './add_label_to_query';
|
||||
import { getCacheDurationInMinutes } from './caching';
|
||||
import { SUGGESTIONS_LIMIT, PROMETHEUS_QUERY_BUILDER_MAX_RESULTS } from './constants';
|
||||
import { PrometheusCacheLevel, PromMetricsMetadata, PromMetricsMetadataItem, RecordingRuleIdentifier } from './types';
|
||||
|
||||
|
|
@ -464,16 +465,15 @@ export function getRangeSnapInterval(
|
|||
}
|
||||
// Otherwise round down to the nearest nth minute for the start time
|
||||
const startTime = getPrometheusTime(range.from, false);
|
||||
// const startTimeQuantizedSeconds = roundSecToLastMin(startTime, getClientCacheDurationInMinutes(cacheLevel)) * 60;
|
||||
const startTimeQuantizedSeconds = incrRoundDn(startTime, getClientCacheDurationInMinutes(cacheLevel) * 60);
|
||||
const startTimeQuantizedSeconds = incrRoundDn(startTime, getCacheDurationInMinutes(cacheLevel) * 60);
|
||||
|
||||
// And round up to the nearest nth minute for the end time
|
||||
const endTime = getPrometheusTime(range.to, true);
|
||||
const endTimeQuantizedSeconds = roundSecToNextMin(endTime, getClientCacheDurationInMinutes(cacheLevel)) * 60;
|
||||
const endTimeQuantizedSeconds = roundSecToNextMin(endTime, getCacheDurationInMinutes(cacheLevel)) * 60;
|
||||
|
||||
// If the interval was too short, we could have rounded both start and end to the same time, if so let's add one step to the end
|
||||
if (startTimeQuantizedSeconds === endTimeQuantizedSeconds) {
|
||||
const endTimePlusOneStep = endTimeQuantizedSeconds + getClientCacheDurationInMinutes(cacheLevel) * 60;
|
||||
const endTimePlusOneStep = endTimeQuantizedSeconds + getCacheDurationInMinutes(cacheLevel) * 60;
|
||||
return { start: startTimeQuantizedSeconds.toString(), end: endTimePlusOneStep.toString() };
|
||||
}
|
||||
|
||||
|
|
@ -483,17 +483,6 @@ export function getRangeSnapInterval(
|
|||
return { start, end };
|
||||
}
|
||||
|
||||
export function getClientCacheDurationInMinutes(cacheLevel: PrometheusCacheLevel) {
|
||||
switch (cacheLevel) {
|
||||
case PrometheusCacheLevel.Medium:
|
||||
return 10;
|
||||
case PrometheusCacheLevel.High:
|
||||
return 60;
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
export function getPrometheusTime(date: string | DateTime, roundUp: boolean) {
|
||||
if (typeof date === 'string') {
|
||||
date = dateMath.parse(date, roundUp)!;
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@ const createMockDatasource = () => {
|
|||
getVariables: jest.fn().mockReturnValue(['$var1', '$var2']),
|
||||
interpolateString: jest.fn((str) => str),
|
||||
hasLabelsMatchAPISupport: jest.fn().mockReturnValue(true),
|
||||
getDebounceTimeInMilliseconds: jest.fn().mockReturnValue(300),
|
||||
lookupsDisabled: false,
|
||||
languageProvider: {
|
||||
fetchLabels: jest.fn().mockResolvedValue({}),
|
||||
|
|
@ -126,7 +125,7 @@ describe('MetricsLabelsSection', () => {
|
|||
// Check that LabelFilters was called with correct props
|
||||
expect(LabelFilters).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
debounceDuration: 300,
|
||||
debounceDuration: 350,
|
||||
labelsFilters: defaultQuery.labels,
|
||||
variableEditor: undefined,
|
||||
}),
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import { useCallback } from 'react';
|
|||
|
||||
import { SelectableValue, TimeRange } from '@grafana/data';
|
||||
|
||||
import { getDebounceTimeInMilliseconds } from '../../caching';
|
||||
import { PrometheusDatasource } from '../../datasource';
|
||||
import { truncateResult } from '../../language_utils';
|
||||
import { PromMetricsMetadata } from '../../types';
|
||||
|
|
@ -210,7 +211,7 @@ export function MetricsLabelsSection({
|
|||
variableEditor={variableEditor}
|
||||
/>
|
||||
<LabelFilters
|
||||
debounceDuration={datasource.getDebounceTimeInMilliseconds()}
|
||||
debounceDuration={getDebounceTimeInMilliseconds(datasource.cacheLevel)}
|
||||
getLabelValuesAutofillSuggestions={getLabelValuesAutocompleteSuggestions}
|
||||
labelsFilters={query.labels}
|
||||
onChange={onChangeLabels}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import {
|
|||
import { TemplateSrv } from '@grafana/runtime';
|
||||
|
||||
import { PrometheusDatasource } from '../../datasource';
|
||||
import PromQlLanguageProvider from '../../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../../language_provider';
|
||||
import { EmptyLanguageProviderMock } from '../../language_provider.mock';
|
||||
import * as queryHints from '../../query_hints';
|
||||
import { PromApplication, PromOptions } from '../../types';
|
||||
|
|
@ -338,7 +338,7 @@ describe('PromQueryBuilder', () => {
|
|||
});
|
||||
|
||||
function createDatasource(options?: Partial<DataSourceInstanceSettings<PromOptions>>) {
|
||||
const languageProvider = new EmptyLanguageProviderMock() as unknown as PromQlLanguageProvider;
|
||||
const languageProvider = new EmptyLanguageProviderMock() as unknown as PrometheusLanguageProviderInterface;
|
||||
const datasource = new PrometheusDatasource(
|
||||
{
|
||||
url: '',
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import userEvent from '@testing-library/user-event';
|
|||
import { DataSourceInstanceSettings, DataSourcePluginMeta } from '@grafana/data';
|
||||
|
||||
import { PrometheusDatasource } from '../../datasource';
|
||||
import PromQlLanguageProvider from '../../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../../language_provider';
|
||||
import { EmptyLanguageProviderMock } from '../../language_provider.mock';
|
||||
import { PromQuery } from '../../types';
|
||||
import { getOperationParamId } from '../shared/param_utils';
|
||||
|
|
@ -40,7 +40,7 @@ describe('PromQueryBuilderContainer', () => {
|
|||
});
|
||||
|
||||
function setup(queryOverrides: Partial<PromQuery> = {}) {
|
||||
const languageProvider = new EmptyLanguageProviderMock() as unknown as PromQlLanguageProvider;
|
||||
const languageProvider = new EmptyLanguageProviderMock() as unknown as PrometheusLanguageProviderInterface;
|
||||
const datasource = new PrometheusDatasource(
|
||||
{
|
||||
url: '',
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import { render, screen } from '@testing-library/react';
|
|||
import { DataSourceInstanceSettings, DataSourcePluginMeta } from '@grafana/data';
|
||||
|
||||
import { PrometheusDatasource } from '../../datasource';
|
||||
import PromQlLanguageProvider from '../../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../../language_provider';
|
||||
import { EmptyLanguageProviderMock } from '../../language_provider.mock';
|
||||
|
||||
import { EXPLAIN_LABEL_FILTER_CONTENT } from './PromQueryBuilderExplained';
|
||||
|
|
@ -16,7 +16,7 @@ jest.mock('../../components/monaco-query-field/MonacoQueryFieldWrapper', () => {
|
|||
});
|
||||
|
||||
function createDatasource() {
|
||||
const languageProvider = new EmptyLanguageProviderMock() as unknown as PromQlLanguageProvider;
|
||||
const languageProvider = new EmptyLanguageProviderMock() as unknown as PrometheusLanguageProviderInterface;
|
||||
const datasource = new PrometheusDatasource(
|
||||
{
|
||||
url: '',
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import { config } from '@grafana/runtime';
|
|||
import { CODE_MODE_SUGGESTIONS_INCOMPLETE_EVENT } from '../../components/monaco-query-field/monaco-completion-provider/data_provider';
|
||||
import { PromQueryEditorProps } from '../../components/types';
|
||||
import { PrometheusDatasource } from '../../datasource';
|
||||
import PromQlLanguageProvider from '../../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../../language_provider';
|
||||
import { EmptyLanguageProviderMock } from '../../language_provider.mock';
|
||||
import { PromQuery } from '../../types';
|
||||
import { QueryEditorMode } from '../shared/types';
|
||||
|
|
@ -78,7 +78,7 @@ const getDefaultDatasource = (jsonDataOverrides = {}) =>
|
|||
readOnly: false,
|
||||
},
|
||||
undefined,
|
||||
new EmptyLanguageProviderMock() as unknown as PromQlLanguageProvider
|
||||
new EmptyLanguageProviderMock() as unknown as PrometheusLanguageProviderInterface
|
||||
);
|
||||
|
||||
const defaultProps = {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import { CoreApp, PluginMeta, PluginType } from '@grafana/data';
|
|||
|
||||
import { PromQueryEditorProps } from '../../components/types';
|
||||
import { PrometheusDatasource } from '../../datasource';
|
||||
import PromQlLanguageProvider from '../../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../../language_provider';
|
||||
import { EmptyLanguageProviderMock } from '../../language_provider.mock';
|
||||
import { PromQuery } from '../../types';
|
||||
import { QueryEditorMode } from '../shared/types';
|
||||
|
|
@ -72,7 +72,7 @@ const getDefaultDatasource = (jsonDataOverrides = {}) =>
|
|||
readOnly: false,
|
||||
},
|
||||
undefined,
|
||||
new EmptyLanguageProviderMock() as unknown as PromQlLanguageProvider
|
||||
new EmptyLanguageProviderMock() as unknown as PrometheusLanguageProviderInterface
|
||||
);
|
||||
|
||||
const defaultProps = {
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import userEvent from '@testing-library/user-event';
|
|||
import { DataSourceInstanceSettings, DataSourcePluginMeta } from '@grafana/data';
|
||||
|
||||
import { PrometheusDatasource } from '../../../datasource';
|
||||
import PromQlLanguageProvider from '../../../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../../../language_provider';
|
||||
import { EmptyLanguageProviderMock } from '../../../language_provider.mock';
|
||||
import { PromOptions } from '../../../types';
|
||||
import { PromVisualQuery } from '../../types';
|
||||
|
|
@ -243,7 +243,7 @@ const listOfMetrics: string[] = [
|
|||
];
|
||||
|
||||
function createDatasource(withLabels?: boolean) {
|
||||
const languageProvider = new EmptyLanguageProviderMock() as unknown as PromQlLanguageProvider;
|
||||
const languageProvider = new EmptyLanguageProviderMock() as unknown as PrometheusLanguageProviderInterface;
|
||||
|
||||
// display different results if their are labels selected in the PromVisualQuery
|
||||
if (withLabels) {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ import {
|
|||
useTheme2,
|
||||
} from '@grafana/ui';
|
||||
|
||||
import { getDebounceTimeInMilliseconds } from '../../../caching';
|
||||
|
||||
import { AdditionalSettings } from './AdditionalSettings';
|
||||
import { FeedbackLink } from './FeedbackLink';
|
||||
import { ResultsTable } from './ResultsTable';
|
||||
|
|
@ -106,7 +108,7 @@ export const MetricsModal = (props: MetricsModalProps) => {
|
|||
isLoading: false,
|
||||
})
|
||||
);
|
||||
}, datasource.getDebounceTimeInMilliseconds()),
|
||||
}, getDebounceTimeInMilliseconds(datasource.cacheLevel)),
|
||||
[datasource, query]
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import userEvent from '@testing-library/user-event';
|
|||
import { DataSourceApi, DataSourceInstanceSettings } from '@grafana/data';
|
||||
|
||||
import { PrometheusDatasource } from '../../datasource';
|
||||
import PromQlLanguageProvider from '../../language_provider';
|
||||
import { PrometheusLanguageProviderInterface } from '../../language_provider';
|
||||
import { EmptyLanguageProviderMock } from '../../language_provider.mock';
|
||||
import { getMockTimeRange } from '../../test/__mocks__/datasource';
|
||||
import { PromOptions } from '../../types';
|
||||
|
|
@ -65,7 +65,7 @@ describe('OperationList', () => {
|
|||
});
|
||||
|
||||
function setup(query: PromVisualQuery = defaultQuery) {
|
||||
const languageProvider = new EmptyLanguageProviderMock() as unknown as PromQlLanguageProvider;
|
||||
const languageProvider = new EmptyLanguageProviderMock() as unknown as PrometheusLanguageProviderInterface;
|
||||
const props = {
|
||||
datasource: new PrometheusDatasource(
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue