diff --git a/.betterer.results b/.betterer.results index 1863e5b5e31..92ed8d6ab44 100644 --- a/.betterer.results +++ b/.betterer.results @@ -4367,8 +4367,6 @@ exports[`no gf-form usage`] = { [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], - [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] ], "packages/grafana-prometheus/src/querybuilder/components/PromQueryCodeEditor.tsx:5381": [ diff --git a/packages/grafana-data/src/types/featureToggles.gen.ts b/packages/grafana-data/src/types/featureToggles.gen.ts index 57074b39883..6f4e2728c5a 100644 --- a/packages/grafana-data/src/types/featureToggles.gen.ts +++ b/packages/grafana-data/src/types/featureToggles.gen.ts @@ -321,10 +321,6 @@ export interface FeatureToggles { */ cachingOptimizeSerializationMemoryUsage?: boolean; /** - * Enables search for metric names in Code Mode, to improve performance when working with an enormous number of metric names - */ - prometheusCodeModeMetricNamesSearch?: boolean; - /** * Add cumulative and window functions to the add field from calculation transformation * @default true */ diff --git a/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/completions.test.ts b/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/completions.test.ts index 7219a53505a..4484c347952 100644 --- a/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/completions.test.ts +++ b/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/completions.test.ts @@ -11,9 +11,6 @@ import type { Situation } from './situation'; const history: string[] = ['previous_metric_name_1', 'previous_metric_name_2', 'previous_metric_name_3']; const dataProviderSettings = { languageProvider: { - datasource: { - metricNamesAutocompleteSuggestionLimit: DEFAULT_COMPLETION_LIMIT, - }, queryLabelKeys: jest.fn(), queryLabelValues: jest.fn(), retrieveLabelKeys: jest.fn(), @@ -31,9 +28,6 @@ const metrics = { beforeEach(() => { dataProvider = new DataProvider(dataProviderSettings); - jest.replaceProperty(config, 'featureToggles', { - prometheusCodeModeMetricNamesSearch: true, - }); }); afterEach(() => { @@ -220,30 +214,6 @@ describe.each(metricNameCompletionSituations)('metric name completions in situat expect(completions.length).toBeLessThanOrEqual(expectedCompletionsCount); }); - it('should enable autocomplete suggestions update when the number of metric names is greater than the limit', async () => { - const situation: Situation = { - type: situationType, - }; - - // Do not cross the metrics names threshold - jest.spyOn(dataProvider, 'getAllMetricNames').mockReturnValueOnce(metrics.atLimit); - dataProvider.monacoSettings.setInputInRange('name_1'); - await getCompletions(situation, dataProvider, timeRange); - expect(dataProvider.monacoSettings.suggestionsIncomplete).toBe(false); - - // Cross the metric names threshold, without text input - jest.spyOn(dataProvider, 'queryMetricNames').mockResolvedValue(metrics.beyondLimit); - dataProvider.monacoSettings.setInputInRange(''); - await getCompletions(situation, dataProvider, timeRange); - expect(dataProvider.monacoSettings.suggestionsIncomplete).toBe(true); - - // Cross the metric names threshold, with text input - jest.spyOn(dataProvider, 'getAllMetricNames').mockReturnValueOnce(metrics.beyondLimit); - dataProvider.monacoSettings.setInputInRange('name_1'); - await getCompletions(situation, dataProvider, timeRange); - expect(dataProvider.monacoSettings.suggestionsIncomplete).toBe(true); - }); - it('should handle complex queries efficiently', async () => { const situation: Situation = { type: situationType, diff --git a/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/completions.ts b/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/completions.ts index 2a463548bfe..6fb7a8eace2 100644 --- a/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/completions.ts +++ b/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/completions.ts @@ -72,24 +72,6 @@ async function getAllMetricNamesCompletions( ): Promise { let metricNames = await dataProvider.queryMetricNames(timeRange, searchTerm); - if ( - config.featureToggles.prometheusCodeModeMetricNamesSearch && - metricNames.length > dataProvider.metricNamesSuggestionLimit - ) { - const { monacoSettings } = dataProvider; - monacoSettings.enableAutocompleteSuggestionsUpdate(); - - if (monacoSettings.inputInRange) { - metricNames = filterMetricNames({ - metricNames, - inputText: monacoSettings.inputInRange, - limit: dataProvider.metricNamesSuggestionLimit, - }); - } else { - metricNames = metricNames.slice(0, dataProvider.metricNamesSuggestionLimit); - } - } - return dataProvider.metricNamesToMetrics(metricNames).map((metric) => ({ type: 'METRIC_NAME', label: metric.name, diff --git a/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/data_provider.ts b/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/data_provider.ts index 8be8851f75a..c90dd6de724 100644 --- a/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/data_provider.ts +++ b/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/data_provider.ts @@ -40,7 +40,6 @@ export class DataProvider { readonly languageProvider: PrometheusLanguageProviderInterface; readonly historyProvider: Array>; - readonly metricNamesSuggestionLimit: number = DEFAULT_COMPLETION_LIMIT; readonly queryLabelKeys: typeof this.languageProvider.queryLabelKeys; readonly queryLabelValues: typeof this.languageProvider.queryLabelValues; /** @@ -50,13 +49,11 @@ export class DataProvider { * This is useful with fuzzy searching items to provide as Monaco autocomplete suggestions. */ private inputInRange: string; - private suggestionsIncomplete: boolean; constructor(params: DataProviderParams) { this.languageProvider = params.languageProvider; this.historyProvider = params.historyProvider; this.inputInRange = ''; - this.suggestionsIncomplete = false; this.queryLabelKeys = this.languageProvider.queryLabelKeys.bind(this.languageProvider); this.queryLabelValues = this.languageProvider.queryLabelValues.bind(this.languageProvider); @@ -111,33 +108,14 @@ export class DataProvider { return result; } - private enableAutocompleteSuggestionsUpdate(): void { - this.suggestionsIncomplete = true; - dispatchEvent( - new CustomEvent(CODE_MODE_SUGGESTIONS_INCOMPLETE_EVENT, { - detail: { limit: this.metricNamesSuggestionLimit, datasourceUid: this.languageProvider.datasource.uid }, - }) - ); - } - private setInputInRange(textInput: string): void { this.inputInRange = textInput; } get monacoSettings() { return { - /** - * Enable autocomplete suggestions update on every input change. - * - * @remarks - * If fuzzy search is used in `getCompletions` to trim down results to improve performance, - * we need to instruct Monaco to update the completions on every input change, so that the - * completions reflect the current input. - */ - enableAutocompleteSuggestionsUpdate: this.enableAutocompleteSuggestionsUpdate.bind(this), inputInRange: this.inputInRange, setInputInRange: this.setInputInRange.bind(this), - suggestionsIncomplete: this.suggestionsIncomplete, }; } } diff --git a/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/monaco-completion-provider.test.ts b/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/monaco-completion-provider.test.ts index e4d122d8a18..ee1980b62d5 100644 --- a/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/monaco-completion-provider.test.ts +++ b/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/monaco-completion-provider.test.ts @@ -349,19 +349,5 @@ describe('monaco-completion-provider', () => { expect(dataProvider.monacoSettings.setInputInRange).toHaveBeenCalled(); }); - - it('should return incomplete status from data provider', async () => { - dataProvider.monacoSettings.suggestionsIncomplete = true; - mockGetCompletions.mockResolvedValue([]); - - const model = createMockModel('test'); - const position = createMockPosition(4); - - const { provider } = getCompletionProvider(monaco, dataProvider, timeRange); - - const result = await (provider.provideCompletionItems as Function)(model, position); - - expect(result?.incomplete).toBe(true); - }); }); }); diff --git a/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/monaco-completion-provider.ts b/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/monaco-completion-provider.ts index e156d5119dc..737d329a6f3 100644 --- a/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/monaco-completion-provider.ts +++ b/packages/grafana-prometheus/src/components/monaco-query-field/monaco-completion-provider/monaco-completion-provider.ts @@ -146,7 +146,7 @@ export function getCompletionProvider( : undefined, })); - return { suggestions, incomplete: dataProvider.monacoSettings.suggestionsIncomplete }; + return { suggestions }; }); }; diff --git a/packages/grafana-prometheus/src/configuration/PromSettings.test.tsx b/packages/grafana-prometheus/src/configuration/PromSettings.test.tsx index ab6303d5c3a..8b69a009fcf 100644 --- a/packages/grafana-prometheus/src/configuration/PromSettings.test.tsx +++ b/packages/grafana-prometheus/src/configuration/PromSettings.test.tsx @@ -1,22 +1,13 @@ // Core Grafana history https://github.com/grafana/grafana/blob/v11.0.0-preview/public/app/plugins/datasource/prometheus/configuration/PromSettings.test.tsx -import { render, screen, fireEvent } from '@testing-library/react'; +import { render, screen } from '@testing-library/react'; import { SyntheticEvent } from 'react'; import { SelectableValue } from '@grafana/data'; -import { selectors } from '@grafana/e2e-selectors'; -import { config } from '@grafana/runtime'; -import { countError } from '../constants'; import { createDefaultConfigOptions } from '../test/mocks/datasource'; import { getValueFromEventItem, PromSettings } from './PromSettings'; -beforeEach(() => { - jest.replaceProperty(config, 'featureToggles', { - prometheusCodeModeMetricNamesSearch: true, - }); -}); - describe('PromSettings', () => { describe('getValueFromEventItem', () => { describe('when called with undefined', () => { @@ -72,47 +63,6 @@ describe('PromSettings', () => { render( {}} options={options} />); expect(screen.getByText('GET')).toBeInTheDocument(); }); - it('should show a valid metric name count if codeModeMetricNamesSuggestionLimit is configured correctly', () => { - const options = defaultProps; - - const { getByTestId, queryByText } = render( {}} options={options} />); - const input = getByTestId( - selectors.components.DataSource.Prometheus.configPage.codeModeMetricNamesSuggestionLimit - ); - - // Non-negative integer - fireEvent.change(input, { target: { value: '3000' } }); - fireEvent.blur(input); - expect(queryByText(countError)).not.toBeInTheDocument(); - - // Non-negative integer with scientific notation - fireEvent.change(input, { target: { value: '1e5' } }); - fireEvent.blur(input); - expect(queryByText(countError)).not.toBeInTheDocument(); - - // Non-negative integer with decimal scientific notation - fireEvent.change(input, { target: { value: '1.4e4' } }); - fireEvent.blur(input); - expect(queryByText(countError)).not.toBeInTheDocument(); - }); - it('should show the expected error when an invalid value is provided for codeModeMetricNamesSuggestionLimit', () => { - const options = defaultProps; - - const { getByTestId, queryByText } = render( {}} options={options} />); - const input = getByTestId( - selectors.components.DataSource.Prometheus.configPage.codeModeMetricNamesSuggestionLimit - ); - - // No negative values - fireEvent.change(input, { target: { value: '-50' } }); - fireEvent.blur(input); - expect(queryByText(countError)).toBeInTheDocument(); - - // No negative values with scientific notation - fireEvent.change(input, { target: { value: '-5e5' } }); - fireEvent.blur(input); - expect(queryByText(countError)).toBeInTheDocument(); - }); it('should have a series endpoint configuration element', () => { const options = defaultProps; diff --git a/packages/grafana-prometheus/src/configuration/PromSettings.tsx b/packages/grafana-prometheus/src/configuration/PromSettings.tsx index 789275e0814..48f7c00e46f 100644 --- a/packages/grafana-prometheus/src/configuration/PromSettings.tsx +++ b/packages/grafana-prometheus/src/configuration/PromSettings.tsx @@ -11,11 +11,9 @@ import { import { selectors } from '@grafana/e2e-selectors'; import { Trans, t } from '@grafana/i18n'; import { ConfigSubSection } from '@grafana/plugin-ui'; -import { config } from '@grafana/runtime'; import { InlineField, Input, Select, Switch, TextLink, useTheme2 } from '@grafana/ui'; import { - countError, DEFAULT_SERIES_LIMIT, DURATION_REGEX, durationError, @@ -23,7 +21,6 @@ import { NON_NEGATIVE_INTEGER_REGEX, PROM_CONFIG_LABEL_WIDTH, seriesLimitError, - SUGGESTIONS_LIMIT, } from '../constants'; import { QueryEditorMode } from '../querybuilder/shared/types'; import { defaultPrometheusQueryOverlapWindow } from '../querycache/QueryCache'; @@ -55,10 +52,6 @@ type ValidDuration = { incrementalQueryOverlapWindow: string; }; -type ValidCount = { - codeModeMetricNamesSuggestionLimit: string; -}; - const prometheusFlavorSelectItems: PrometheusSelectItemsType = [ { value: PromApplication.Prometheus, label: PromApplication.Prometheus }, { value: PromApplication.Cortex, label: PromApplication.Cortex }, @@ -99,10 +92,6 @@ export const PromSettings = (props: Props) => { incrementalQueryOverlapWindow: '', }); - const [validCount, updateValidCount] = useState({ - codeModeMetricNamesSuggestionLimit: '', - }); - const [seriesLimit, setSeriesLimit] = useState( optionsWithDefaults.jsonData.seriesLimit?.toString() || `${DEFAULT_SERIES_LIMIT}` ); @@ -400,58 +389,6 @@ export const PromSettings = (props: Props) => { - {config.featureToggles.prometheusCodeModeMetricNamesSearch && ( -
-
- - - The maximum number of metric names that may appear as autocomplete suggestions in the query - editor's Code mode. - - - } - interactive={true} - disabled={optionsWithDefaults.readOnly} - > - <> - - updateValidCount({ - ...validCount, - codeModeMetricNamesSuggestionLimit: e.currentTarget.value, - }) - } - data-testid={ - selectors.components.DataSource.Prometheus.configPage.codeModeMetricNamesSuggestionLimit - } - /> - {validateInput( - validCount.codeModeMetricNamesSuggestionLimit, - NON_NEGATIVE_INTEGER_REGEX, - countError - )} - - -
-
- )} -
{{interval}} and <4>{{rateInterval}} variables." }, - "prom-query-code-editor-autocomplete-info": { - "autocomplete-suggestions-limited": "Autocomplete suggestions limited", - "tooltip-autocomplete-suggestions-limited": "The number of metric names exceeds the autocomplete limit. Only the {{autocompleteLimit}}-most relevant metrics are displayed. You can adjust the threshold in the data source settings." - }, "prom-query-editor-selector": { "body-syntax-error": "There is a syntax error, or the query structure cannot be visualized when switching to the builder mode. Parts of the query may be lost.", "confirmText-continue": "Continue", diff --git a/packages/grafana-prometheus/src/querybuilder/components/PromQueryCodeEditorAutocompleteInfo.test.tsx b/packages/grafana-prometheus/src/querybuilder/components/PromQueryCodeEditorAutocompleteInfo.test.tsx deleted file mode 100644 index 5a76b9bd2f4..00000000000 --- a/packages/grafana-prometheus/src/querybuilder/components/PromQueryCodeEditorAutocompleteInfo.test.tsx +++ /dev/null @@ -1,148 +0,0 @@ -import { render, screen, fireEvent, createEvent } from '@testing-library/react'; -import { cloneDeep, defaultsDeep } from 'lodash'; - -import { PluginMeta, PluginType } from '@grafana/data'; -import { selectors } from '@grafana/e2e-selectors'; -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 { PrometheusLanguageProviderInterface } from '../../language_provider'; -import { EmptyLanguageProviderMock } from '../../language_provider.mock'; -import { PromQuery } from '../../types'; -import { QueryEditorMode } from '../shared/types'; - -import { PromQueryEditorSelector } from './PromQueryEditorSelector'; - -beforeEach(() => { - jest.replaceProperty(config, 'featureToggles', { - prometheusCodeModeMetricNamesSearch: true, - }); -}); - -// We need to mock this because it seems jest has problem importing monaco in tests -jest.mock('../../components/monaco-query-field/MonacoQueryFieldWrapper', () => { - return { - MonacoQueryFieldWrapper: () => { - return 'MonacoQueryFieldWrapper'; - }, - }; -}); - -jest.mock('@grafana/runtime', () => { - return { - ...jest.requireActual('@grafana/runtime'), - reportInteraction: jest.fn(), - }; -}); - -const defaultQuery = { - refId: 'A', - expr: 'metric{label1="foo", label2="bar"}', -}; - -const defaultMeta: PluginMeta = { - id: '', - name: '', - type: PluginType.datasource, - info: { - author: { - name: 'tester', - }, - description: 'testing', - links: [], - logos: { - large: '', - small: '', - }, - screenshots: [], - updated: '', - version: '', - }, - module: '', - baseUrl: '', -}; - -const getDefaultDatasource = (jsonDataOverrides = {}) => - new PrometheusDatasource( - { - id: 1, - uid: 'myDataSourceUid', - type: 'prometheus', - name: 'prom-test', - access: 'proxy', - url: '', - jsonData: jsonDataOverrides, - meta: defaultMeta, - readOnly: false, - }, - undefined, - new EmptyLanguageProviderMock() as unknown as PrometheusLanguageProviderInterface - ); - -const defaultProps = { - datasource: getDefaultDatasource(), - query: defaultQuery, - onRunQuery: () => {}, - onChange: () => {}, -}; - -const autocompleteInfoSelector = selectors.components.DataSource.Prometheus.queryEditor.code.metricsCountInfo; - -describe('PromQueryEditorSelector', () => { - it('does not show autocomplete info when the code editor first displays', async () => { - const { queryByTestId } = renderWithCodeMode(); - expect(await screen.findByText('MonacoQueryFieldWrapper')).toBeInTheDocument(); - expect(queryByTestId(autocompleteInfoSelector)).not.toBeInTheDocument(); - }); - - it('shows autocomplete info when the expected event fires', async () => { - const { findByTestId } = renderWithCodeMode(); - fireEvent( - window, - createEvent( - CODE_MODE_SUGGESTIONS_INCOMPLETE_EVENT, - window, - { - detail: { limit: 100, datasourceUid: 'myDataSourceUid' }, - }, - { EventType: 'CustomEvent' } - ) - ); - expect(await screen.findByText('MonacoQueryFieldWrapper')).toBeInTheDocument(); - const autocompleteInfo = await findByTestId(autocompleteInfoSelector); - expect(autocompleteInfo).toBeInTheDocument(); - }); - - it('does not show autocomplete info when the triggering event refers to a different data source', async () => { - const { queryByTestId } = renderWithCodeMode(); - fireEvent( - window, - createEvent( - CODE_MODE_SUGGESTIONS_INCOMPLETE_EVENT, - window, - { - detail: { limit: 100, datasourceUid: 'theWrongUid' }, - }, - { EventType: 'CustomEvent' } - ) - ); - expect(await screen.findByText('MonacoQueryFieldWrapper')).toBeInTheDocument(); - const autocompleteInfo = await queryByTestId(autocompleteInfoSelector); - expect(autocompleteInfo).not.toBeInTheDocument(); - }); -}); - -function renderWithCodeMode() { - return renderWithProps({ editorMode: QueryEditorMode.Code, expr: 'my_metric' }); -} - -function renderWithProps(overrides?: Partial, componentProps: Partial = {}) { - const query = defaultsDeep(overrides ?? {}, cloneDeep(defaultQuery)); - const onChange = jest.fn(); - - const allProps = { ...defaultProps, ...componentProps }; - const stuff = render(); - return { onChange, ...stuff }; -} diff --git a/packages/grafana-prometheus/src/querybuilder/components/PromQueryCodeEditorAutocompleteInfo.tsx b/packages/grafana-prometheus/src/querybuilder/components/PromQueryCodeEditorAutocompleteInfo.tsx deleted file mode 100644 index a6408eda5b6..00000000000 --- a/packages/grafana-prometheus/src/querybuilder/components/PromQueryCodeEditorAutocompleteInfo.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import { useState, useEffect, useCallback } from 'react'; - -import { selectors } from '@grafana/e2e-selectors'; -import { Trans, t } from '@grafana/i18n'; -import { config } from '@grafana/runtime'; -import { IconButton, Text, Stack } from '@grafana/ui'; - -import { - CODE_MODE_SUGGESTIONS_INCOMPLETE_EVENT, - isSuggestionsIncompleteEvent, -} from '../../components/monaco-query-field/monaco-completion-provider/data_provider'; -import { PromQueryEditorProps } from '../../components/types'; -import { QueryEditorMode } from '../shared/types'; - -interface Props { - datasourceUid: PromQueryEditorProps['datasource']['uid']; - editorMode: QueryEditorMode; -} - -export function PromQueryCodeEditorAutocompleteInfo(props: Readonly) { - const [autocompleteLimit, setAutocompleteLimit] = useState('n'); - const [autocompleteLimitExceeded, setAutocompleteLimitExceeded] = useState(false); - const handleSuggestionsIncompleteEvent = useCallback( - (e: Event) => { - if (!isSuggestionsIncompleteEvent(e)) { - return; - } - - if (e.detail.datasourceUid === props.datasourceUid) { - setAutocompleteLimitExceeded(true); - setAutocompleteLimit(e.detail.limit.toString()); - } - }, - [props.datasourceUid] - ); - - useEffect(() => { - window.addEventListener(CODE_MODE_SUGGESTIONS_INCOMPLETE_EVENT, handleSuggestionsIncompleteEvent); - - return () => { - window.removeEventListener(CODE_MODE_SUGGESTIONS_INCOMPLETE_EVENT, handleSuggestionsIncompleteEvent); - }; - }, [handleSuggestionsIncompleteEvent]); - - const showCodeModeAutocompleteDisclaimer = (): boolean => { - return ( - Boolean(config.featureToggles.prometheusCodeModeMetricNamesSearch) && - props.editorMode === QueryEditorMode.Code && - autocompleteLimitExceeded - ); - }; - - if (!showCodeModeAutocompleteDisclaimer()) { - return null; - } - - return ( -
- - - - Autocomplete suggestions limited - - - - -
- ); -} diff --git a/packages/grafana-prometheus/src/querybuilder/components/PromQueryEditorSelector.tsx b/packages/grafana-prometheus/src/querybuilder/components/PromQueryEditorSelector.tsx index adf3afebf28..8250bd91a68 100644 --- a/packages/grafana-prometheus/src/querybuilder/components/PromQueryEditorSelector.tsx +++ b/packages/grafana-prometheus/src/querybuilder/components/PromQueryEditorSelector.tsx @@ -22,7 +22,6 @@ import { changeEditorMode, getQueryWithDefaults } from '../state'; import { PromQueryBuilderContainer } from './PromQueryBuilderContainer'; import { PromQueryBuilderOptions } from './PromQueryBuilderOptions'; import { PromQueryCodeEditor } from './PromQueryCodeEditor'; -import { PromQueryCodeEditorAutocompleteInfo } from './PromQueryCodeEditorAutocompleteInfo'; type Props = PromQueryEditorProps; @@ -148,7 +147,6 @@ export const PromQueryEditorSelector = memo((props) => { Run queries )} -
diff --git a/packages/grafana-prometheus/src/types.ts b/packages/grafana-prometheus/src/types.ts index 98730018bf3..1c08812f335 100644 --- a/packages/grafana-prometheus/src/types.ts +++ b/packages/grafana-prometheus/src/types.ts @@ -49,7 +49,6 @@ export interface PromOptions extends DataSourceJsonData { allowAsRecordingRulesTarget?: boolean; sigV4Auth?: boolean; oauthPassThru?: boolean; - codeModeMetricNamesSuggestionLimit?: number; seriesEndpoint?: boolean; seriesLimit?: number; } diff --git a/pkg/services/featuremgmt/registry.go b/pkg/services/featuremgmt/registry.go index 98d62a694b3..12ce841bc6c 100644 --- a/pkg/services/featuremgmt/registry.go +++ b/pkg/services/featuremgmt/registry.go @@ -533,13 +533,6 @@ var ( Owner: grafanaOperatorExperienceSquad, FrontendOnly: false, }, - { - Name: "prometheusCodeModeMetricNamesSearch", - Description: "Enables search for metric names in Code Mode, to improve performance when working with an enormous number of metric names", - FrontendOnly: true, - Stage: FeatureStageExperimental, - Owner: grafanaOSSBigTent, - }, { Name: "addFieldFromCalculationStatFunctions", Description: "Add cumulative and window functions to the add field from calculation transformation", diff --git a/pkg/services/featuremgmt/toggles_gen.csv b/pkg/services/featuremgmt/toggles_gen.csv index 57d6e71b9c4..d85904abe30 100644 --- a/pkg/services/featuremgmt/toggles_gen.csv +++ b/pkg/services/featuremgmt/toggles_gen.csv @@ -70,7 +70,6 @@ queryServiceFromUI,experimental,@grafana/grafana-datasources-core-services,false queryServiceFromExplore,experimental,@grafana/grafana-datasources-core-services,false,false,true cloudWatchBatchQueries,preview,@grafana/aws-datasources,false,false,false cachingOptimizeSerializationMemoryUsage,experimental,@grafana/grafana-operator-experience-squad,false,false,false -prometheusCodeModeMetricNamesSearch,experimental,@grafana/oss-big-tent,false,false,true addFieldFromCalculationStatFunctions,GA,@grafana/dataviz-squad,false,false,true alertmanagerRemoteSecondary,experimental,@grafana/alerting-squad,false,false,false alertingProvenanceLockWrites,experimental,@grafana/alerting-squad,false,false,false diff --git a/pkg/services/featuremgmt/toggles_gen.go b/pkg/services/featuremgmt/toggles_gen.go index 0e05467e88d..8c27ec80304 100644 --- a/pkg/services/featuremgmt/toggles_gen.go +++ b/pkg/services/featuremgmt/toggles_gen.go @@ -291,10 +291,6 @@ const ( // If enabled, the caching backend gradually serializes query responses for the cache, comparing against the configured `[caching]max_value_mb` value as it goes. This can can help prevent Grafana from running out of memory while attempting to cache very large query responses. FlagCachingOptimizeSerializationMemoryUsage = "cachingOptimizeSerializationMemoryUsage" - // FlagPrometheusCodeModeMetricNamesSearch - // Enables search for metric names in Code Mode, to improve performance when working with an enormous number of metric names - FlagPrometheusCodeModeMetricNamesSearch = "prometheusCodeModeMetricNamesSearch" - // FlagAddFieldFromCalculationStatFunctions // Add cumulative and window functions to the add field from calculation transformation FlagAddFieldFromCalculationStatFunctions = "addFieldFromCalculationStatFunctions" diff --git a/pkg/services/featuremgmt/toggles_gen.json b/pkg/services/featuremgmt/toggles_gen.json index 6a87d837a21..fe8d08ae951 100644 --- a/pkg/services/featuremgmt/toggles_gen.json +++ b/pkg/services/featuremgmt/toggles_gen.json @@ -2602,7 +2602,8 @@ "metadata": { "name": "prometheusCodeModeMetricNamesSearch", "resourceVersion": "1753448760331", - "creationTimestamp": "2024-04-04T20:38:23Z" + "creationTimestamp": "2024-04-04T20:38:23Z", + "deletionTimestamp": "2025-08-01T07:53:50Z" }, "spec": { "description": "Enables search for metric names in Code Mode, to improve performance when working with an enormous number of metric names",