[APM] Remove labs (#222177)

This commit is contained in:
Sergi Romeu 2025-06-04 10:03:40 +02:00 committed by GitHub
parent fad9a9231e
commit 8ccc4859b3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 5 additions and 344 deletions

View file

@ -325,9 +325,6 @@ $$$apm-aws-price$$$`observability:apmAWSLambdaPriceFactor`
$$$apm-aws-request$$$`observability:apmAWSLambdaRequestCostPerMillion`
: Set the AWS Lambda cost per million requests.
$$$observability-apm-labs$$$`observability:apmLabsButton`
: Enable or disable the APM Labs buttona quick way to enable and disable technical preview features in APM.
$$$observability-enable-progressive-loading$$$`observability:apmProgressiveLoading`
: When enabled, uses progressive loading of some APM views. Data may be requested with a lower sampling rate first, with lower accuracy but faster response times, while the unsampled data loads in the background.

View file

@ -107,9 +107,8 @@ export const OBSERVABILITY_APM_AWS_LAMBDA_REQUEST_COST_PER_MILLION_ID =
'observability:apmAWSLambdaRequestCostPerMillion';
export const OBSERVABILITY_APM_DEFAULT_SERVICE_ENVIRONMENT_ID =
'observability:apmDefaultServiceEnvironment';
export const OBSERVABILITY_APM_LABS_BUTTON_ID = 'observability:apmLabsButton';
export const OBSERVABILITY_APM_PROGRESSIVE_LOADING_ID = 'observability:apmProgressiveLoading';
export const OBSERVABILITY_APM_SERVICE_GROUP_MAX_NUMBER_OF_SERVCIE_ID =
export const OBSERVABILITY_APM_SERVICE_GROUP_MAX_NUMBER_OF_SERVICE_ID =
'observability:apmServiceGroupMaxNumberOfServices';
export const OBSERVABILITY_ENABLE_COMPARISON_BY_DEFAULT_ID =
'observability:enableComparisonByDefault';

View file

@ -14,9 +14,8 @@ export const OBSERVABILITY_PROJECT_SETTINGS = [
settings.ML_ANOMALY_DETECTION_RESULTS_TIME_DEFAULTS_ID,
settings.OBSERVABILITY_ENABLE_COMPARISON_BY_DEFAULT_ID,
settings.OBSERVABILITY_APM_DEFAULT_SERVICE_ENVIRONMENT_ID,
settings.OBSERVABILITY_APM_SERVICE_GROUP_MAX_NUMBER_OF_SERVCIE_ID,
settings.OBSERVABILITY_APM_SERVICE_GROUP_MAX_NUMBER_OF_SERVICE_ID,
settings.OBSERVABILITY_ENABLE_INSPECT_ES_QUERIES_ID,
settings.OBSERVABILITY_APM_LABS_BUTTON_ID,
settings.OBSERVABILITY_APM_AWS_LAMBDA_PRICE_FACTOR_ID,
settings.OBSERVABILITY_APM_AWS_LAMBDA_REQUEST_COST_PER_MILLION_ID,
settings.OBSERVABILITY_APM_PROGRESSIVE_LOADING_ID,

View file

@ -567,10 +567,6 @@ export const stackManagementSchema: MakeSchemaFrom<UsageStats> = {
type: 'keyword',
_meta: { description: 'Default value of the setting was changed.' },
},
'observability:apmLabsButton': {
type: 'boolean',
_meta: { description: 'Non-default value of setting.' },
},
'observability:apmProgressiveLoading': {
type: 'keyword',
_meta: { description: 'Non-default value of setting.' },

View file

@ -149,7 +149,6 @@ export interface UsageStats {
isDefaultIndexMigrated: boolean;
'observability:syntheticsThrottlingEnabled': boolean;
'observability:enableLegacyUptimeApp': boolean;
'observability:apmLabsButton': boolean;
'observability:apmProgressiveLoading': string;
'observability:apmServiceGroupMaxNumberOfServices': number;
'observability:entityCentricExperience': boolean;

View file

@ -11409,12 +11409,6 @@
"description": "Default value of the setting was changed."
}
},
"observability:apmLabsButton": {
"type": "boolean",
"_meta": {
"description": "Non-default value of setting."
}
},
"observability:apmProgressiveLoading": {
"type": "keyword",
"_meta": {

View file

@ -11426,12 +11426,6 @@
"xpack.apm.jvmsTable.threadCountColumnLabel": "Nombre de threads max",
"xpack.apm.keyValueFilterList.actionFilterLabel": "Filtrer par valeur",
"xpack.apm.kueryBar.placeholder": "Rechercher {event, select, transaction {des transactions} metric {des indicateurs} error {des erreurs} other {des transactions, des erreurs et des indicateurs} } (p. ex. {queryExample})",
"xpack.apm.labs": "Ateliers",
"xpack.apm.labs.cancel": "Annuler",
"xpack.apm.labs.description": "Essayez les fonctionnalités APM qui sont en version d'évaluation technique et en cours de progression.",
"xpack.apm.labs.feedbackButtonLabel": "Dites-nous ce que vous pensez !",
"xpack.apm.labs.noPermissionTooltipLabel": "Votre rôle d'utilisateur ne dispose pas des autorisations nécessaires pour modifier ces paramètres",
"xpack.apm.labs.reload": "Recharger pour appliquer les modifications",
"xpack.apm.latencyCorrelations.licenseCheckText": "Pour utiliser les corrélations de latence, vous devez disposer d'une licence Elastic Platinum. Elle vous permettra de découvrir quels champs sont corrélés à de faibles performances.",
"xpack.apm.license.button": "Commencer l'essai",
"xpack.apm.license.title": "Commencer un essai gratuit de 30 jours",
@ -31802,8 +31796,6 @@
"xpack.observability.apmEnableTableSearchBar": "Recherche de tableau instantanée",
"xpack.observability.apmEnableTableSearchBarDescription": "{betaLabel} Permet une recherche plus rapide dans les tableaux APM en ajoutant une barre de recherche pratique avec filtrage en temps réel. Disponible pour les tableaux suivants : Transactions et erreurs",
"xpack.observability.apmEnableTransactionProfiling": "Activer Universal Profiling sur la vue Transactions",
"xpack.observability.apmLabs": "Activer le bouton Ateliers dans APM",
"xpack.observability.apmLabsDescription": "Cet indicateur détermine si l'utilisateur a accès au bouton Ateliers, moyen rapide d'activer et de désactiver les fonctionnalités de la version d'évaluation technique dans APM.",
"xpack.observability.apmProgressiveLoading": "Utiliser le chargement progressif des vues APM sélectionnées",
"xpack.observability.apmProgressiveLoadingDescription": "S'il faut charger les données de façon progressive pour les vues APM. Les données peuvent être demandées d'abord avec un taux d'échantillonnage inférieur, avec une précision plus faible mais des temps de réponse plus rapides, pendant que les données non échantillonnées se chargent en arrière-plan",
"xpack.observability.apmProgressiveLoadingQualityHigh": "Taux d'échantillonnage élevé (plus lent, plus précis)",

View file

@ -11410,12 +11410,6 @@
"xpack.apm.jvmsTable.threadCountColumnLabel": "最大スレッド数",
"xpack.apm.keyValueFilterList.actionFilterLabel": "値でフィルタリング",
"xpack.apm.kueryBar.placeholder": "{event, select, transaction {トランザクション} metric {メトリック} error {エラー} other {トランザクション、エラー、メトリック} }を検索(例:{queryExample}",
"xpack.apm.labs": "ラボ",
"xpack.apm.labs.cancel": "キャンセル",
"xpack.apm.labs.description": "現在テクニカルプレビュー中のAPM機能をお試しください。",
"xpack.apm.labs.feedbackButtonLabel": "ご意見をお聞かせください。",
"xpack.apm.labs.noPermissionTooltipLabel": "ユーザーロールには、これらの設定を修正する権限がありません。",
"xpack.apm.labs.reload": "変更を適用するには、再読み込みしてください",
"xpack.apm.latencyCorrelations.licenseCheckText": "遅延の相関関係を使用するには、Elastic Platinumライセンスのサブスクリプションが必要です。使用すると、パフォーマンスの低下に関連しているフィールドを検出できます。",
"xpack.apm.license.button": "トライアルを開始",
"xpack.apm.license.title": "無料の 30 日トライアルを開始",
@ -31779,8 +31773,6 @@
"xpack.observability.apmEnableTableSearchBar": "インスタントテーブル検索",
"xpack.observability.apmEnableTableSearchBarDescription": "{betaLabel}簡単な検索バーとライブフィルタリングを追加して、APMテーブルでの検索を高速化できます。次のテーブルで使用可能ですトランザクションとエラー",
"xpack.observability.apmEnableTransactionProfiling": "トランザクションビューでユニバーサルプロファイリングを有効化",
"xpack.observability.apmLabs": "APMでラボボタンを有効にする",
"xpack.observability.apmLabsDescription": "このフラグはビューアーでラボボタンを使用できるかどうかを決定します。APMでテクニカルプレビュー中の機能を有効および無効にするための簡単な方法です。",
"xpack.observability.apmProgressiveLoading": "選択したAPMビューのプログレッシブ読み込みを使用",
"xpack.observability.apmProgressiveLoadingDescription": "APMビューでデータのプログレッシブ読み込みを行うかどうか。サンプリングされていないデータをバックグラウンドで読み込みながら、最初は低いサンプリングレート、低い精度、高速の応答時間でデータを要求できます",
"xpack.observability.apmProgressiveLoadingQualityHigh": "高サンプリングレート(低速、最も精度が高い)",

View file

@ -11434,13 +11434,6 @@
"xpack.apm.jvmsTable.threadCountColumnLabel": "线程计数最大值",
"xpack.apm.keyValueFilterList.actionFilterLabel": "按值筛选",
"xpack.apm.kueryBar.placeholder": "搜索{event, select, transaction {事务} metric {指标} error {错误} other {事务、错误和指标} }(例如 {queryExample}",
"xpack.apm.labs": "实验",
"xpack.apm.labs.cancel": "取消",
"xpack.apm.labs.description": "试用正处于技术预览状态和开发中的 APM 功能。",
"xpack.apm.labs.feedbackButtonLabel": "告诉我们您的看法!",
"xpack.apm.labs.noPermissionTooltipLabel": "您的用户角色无权修改这些设置",
"xpack.apm.labs.reload": "重新加载以应用更改",
"xpack.apm.latencyCorrelations.licenseCheckText": "要使用延迟相关性,必须订阅 Elastic 白金级许可证。使用相关性,将能够发现哪些字段与性能差相关。",
"xpack.apm.license.button": "开始试用",
"xpack.apm.license.title": "开始为期 30 天的免费试用",
"xpack.apm.logErrorRate": "日志错误率",
@ -31834,8 +31827,6 @@
"xpack.observability.apmEnableTableSearchBar": "即时表搜索",
"xpack.observability.apmEnableTableSearchBarDescription": "{betaLabel} 通过添加一个具有实时筛选功能的便捷搜索栏,在 APM 表中实现更快的搜索。适用于以下表:事务和错误",
"xpack.observability.apmEnableTransactionProfiling": "在事务视图上启用 Universal Profiling",
"xpack.observability.apmLabs": "在 APM 中启用“实验”按钮",
"xpack.observability.apmLabsDescription": "此标志决定查看者是否有权访问用于在 APM 中快速启用和禁用技术预览功能的“实验”按钮。",
"xpack.observability.apmProgressiveLoading": "使用渐进方式加载选定 APM 视图",
"xpack.observability.apmProgressiveLoadingDescription": "是否以渐进方式为 APM 视图加载数据。可以先以较低的采样速率请求数据,这样的准确性较低,但响应时间更快,同时在后台加载未采样数据",
"xpack.observability.apmProgressiveLoadingQualityHigh": "高采样速率(更慢,最准确)",

View file

@ -9,7 +9,6 @@ import { EuiSpacer } from '@elastic/eui';
import { withSuspense } from '@kbn/shared-ux-utility';
import { i18n } from '@kbn/i18n';
import {
apmLabsButton,
apmServiceGroupMaxNumberOfServices,
defaultApmServiceEnvironment,
enableComparisonByDefault,
@ -20,6 +19,7 @@ import {
apmEnableTransactionProfiling,
apmEnableServiceInventoryTableSearchBar,
apmEnableServiceMapApiV2,
apmProgressiveLoading,
} from '@kbn/observability-plugin/common';
import { isEmpty } from 'lodash';
import React from 'react';
@ -43,7 +43,7 @@ const SETTINGS_KEYS = [
defaultApmServiceEnvironment,
apmServiceGroupMaxNumberOfServices,
enableInspectEsQueries,
apmLabsButton,
apmProgressiveLoading,
apmAWSLambdaPriceFactor,
apmAWSLambdaRequestCostPerMillion,
apmEnableTableSearchBar,

View file

@ -6,7 +6,6 @@
*/
import { EuiHeaderLink, EuiHeaderLinks, EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
import { apmLabsButton } from '@kbn/observability-plugin/common';
import { i18n } from '@kbn/i18n';
import React from 'react';
import { getAlertingCapabilities } from '../../../alerting/utils/get_alerting_capabilities';
@ -15,7 +14,6 @@ import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plug
import { AlertingPopoverAndFlyout } from './alerting_popover_flyout';
import { AnomalyDetectionSetupLink } from './anomaly_detection_setup_link';
import { InspectorHeaderLink } from './inspector_header_link';
import { Labs } from './labs';
import { AddDataContextMenu } from './add_data_context_menu';
import { useEntityCentricExperienceSetting } from '../../../../hooks/use_entity_centric_experience_setting';
@ -43,11 +41,8 @@ export function ApmHeaderActionMenu() {
return basePath.prepend(path);
}
const isLabsButtonEnabled = core.uiSettings.get<boolean>(apmLabsButton, false);
return (
<EuiHeaderLinks gutterSize="xs">
{isLabsButtonEnabled && <Labs />}
{featureFlags.storageExplorerAvailable && (
<EuiHeaderLink
color="text"

View file

@ -1,40 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { EuiButtonEmpty } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import React, { useEffect, useState } from 'react';
import { useUiTracker } from '@kbn/observability-shared-plugin/public';
import { LabsFlyout } from './labs_flyout';
export function Labs() {
const [isOpen, setIsOpen] = useState(false);
const trackApmEvent = useUiTracker({ app: 'apm' });
useEffect(() => {
if (isOpen) {
trackApmEvent({ metric: 'labs_open' });
}
}, [isOpen, trackApmEvent]);
function toggleFlyoutVisibility() {
setIsOpen((state) => !state);
}
return (
<>
<EuiButtonEmpty
data-test-subj="apmLabsLabsButton"
color="text"
onClick={toggleFlyoutVisibility}
>
{i18n.translate('xpack.apm.labs', { defaultMessage: 'Labs' })}
</EuiButtonEmpty>
{isOpen && <LabsFlyout onClose={toggleFlyoutVisibility} />}
</>
);
}

View file

@ -1,208 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import {
EuiButton,
EuiButtonEmpty,
EuiFlexGroup,
EuiFlexItem,
EuiFlyout,
EuiFlyoutBody,
EuiFlyoutFooter,
EuiFlyoutHeader,
EuiHorizontalRule,
EuiIcon,
EuiSkeletonText,
EuiSpacer,
EuiText,
EuiTitle,
EuiToolTip,
} from '@elastic/eui';
import { withSuspense } from '@kbn/shared-ux-utility';
import { i18n } from '@kbn/i18n';
import React from 'react';
import { useEditableSettings, useUiTracker } from '@kbn/observability-shared-plugin/public';
import { FieldRowProvider } from '@kbn/management-settings-components-field-row';
import type { ValueValidation } from '@kbn/core-ui-settings-browser/src/types';
import { useApmPluginContext } from '../../../../../context/apm_plugin/use_apm_plugin_context';
import { useFetcher, isPending } from '../../../../../hooks/use_fetcher';
const LazyFieldRow = React.lazy(async () => ({
default: (await import('@kbn/management-settings-components-field-row')).FieldRow,
}));
const FieldRow = withSuspense(LazyFieldRow);
interface Props {
onClose: () => void;
}
export function LabsFlyout({ onClose }: Props) {
const trackApmEvent = useUiTracker({ app: 'apm' });
const { docLinks, notifications, application } = useApmPluginContext().core;
const canSave =
application.capabilities.advancedSettings.save &&
(application.capabilities.apm['settings:save'] as boolean);
const { data, status } = useFetcher(
(callApmApi) => callApmApi('GET /internal/apm/settings/labs'),
[]
);
const labsItems = data?.labsItems || [];
const { fields, handleFieldChange, unsavedChanges, saveAll, isSaving, cleanUnsavedChanges } =
useEditableSettings(labsItems);
async function handleSave() {
try {
const reloadPage = Object.keys(unsavedChanges).some((key) => {
return fields[key].requiresPageReload;
});
await saveAll();
trackApmEvent({ metric: 'labs_save' });
if (reloadPage) {
window.location.reload();
} else {
onClose();
}
} catch (e) {
const error = e as Error;
notifications.toasts.addDanger({
title: i18n.translate('xpack.apm.apmSettings.save.error', {
defaultMessage: 'An error occurred while saving the settings',
}),
text: error.message,
});
}
}
function handelCancel() {
cleanUnsavedChanges();
onClose();
}
const isLoading = isPending(status);
// We don't validate the user input on these settings
const settingsValidationResponse: ValueValidation = {
successfulValidation: true,
valid: true,
};
return (
<EuiFlyout onClose={onClose}>
<EuiFlyoutHeader hasBorder>
<EuiFlexGroup gutterSize="s" alignItems="center">
<EuiFlexItem grow={false}>
<EuiIcon type="beaker" size="l" />
</EuiFlexItem>
<EuiFlexItem grow={false}>
<EuiTitle>
<h2>
{i18n.translate('xpack.apm.labs', {
defaultMessage: 'Labs',
})}
</h2>
</EuiTitle>
</EuiFlexItem>
</EuiFlexGroup>
<EuiSpacer size="s" />
<EuiFlexGroup gutterSize="s" alignItems="center" justifyContent="spaceBetween">
<EuiFlexItem grow={false}>
<EuiText>
{i18n.translate('xpack.apm.labs.description', {
defaultMessage:
'Try out the APM features that are under technical preview and in progress.',
})}
</EuiText>
</EuiFlexItem>
<EuiFlexItem grow={false}>
<EuiButton
data-test-subj="labsFeedbackButton"
href="https://ela.st/feedback-apm-labs"
target="_blank"
color="warning"
iconType="editorComment"
>
{i18n.translate('xpack.apm.labs.feedbackButtonLabel', {
defaultMessage: 'Tell us what you think!',
})}
</EuiButton>
</EuiFlexItem>
</EuiFlexGroup>
</EuiFlyoutHeader>
{isLoading ? (
<EuiSkeletonText lines={3} />
) : (
<>
<EuiFlyoutBody>
{labsItems.map((settingKey) => {
const field = fields[settingKey];
return (
<>
<FieldRowProvider
{...{
links: docLinks.links.management,
showDanger: (message: string) => notifications.toasts.addDanger(message),
validateChange: async () => settingsValidationResponse,
}}
>
<FieldRow
field={field}
isSavingEnabled={canSave}
onFieldChange={handleFieldChange}
unsavedChange={unsavedChanges[settingKey]}
/>
</FieldRowProvider>
<EuiHorizontalRule />
</>
);
})}
</EuiFlyoutBody>
<EuiFlyoutFooter>
<EuiFlexGroup justifyContent="spaceBetween">
<EuiFlexItem grow={false}>
<EuiButtonEmpty data-test-subj="apmLabsFlyoutCancelButton" onClick={handelCancel}>
{i18n.translate('xpack.apm.labs.cancel', {
defaultMessage: 'Cancel',
})}
</EuiButtonEmpty>
</EuiFlexItem>
<EuiFlexItem grow={false}>
<EuiToolTip
content={
!canSave &&
i18n.translate('xpack.apm.labs.noPermissionTooltipLabel', {
defaultMessage:
"Your user role doesn't have permissions to modify these settings",
})
}
>
<EuiButton
data-test-subj="apmLabsFlyoutReloadToApplyChangesButton"
fill
isLoading={isSaving}
onClick={handleSave}
isDisabled={!canSave}
>
{i18n.translate('xpack.apm.labs.reload', {
defaultMessage: 'Reload to apply changes',
})}
</EuiButton>
</EuiToolTip>
</EuiFlexItem>
</EuiFlexGroup>
</EuiFlyoutFooter>
</>
)}
</EuiFlyout>
);
}

View file

@ -35,7 +35,6 @@ import { serviceMapRouteRepository } from '../service_map/route';
import { agentConfigurationRouteRepository } from '../settings/agent_configuration/route';
import { anomalyDetectionRouteRepository } from '../settings/anomaly_detection/route';
import { customLinkRouteRepository } from '../settings/custom_link/route';
import { labsRouteRepository } from '../settings/labs/route';
import { sourceMapsRouteRepository } from '../source_maps/route';
import { spanLinksRouteRepository } from '../span_links/route';
import { storageExplorerRouteRepository } from '../storage_explorer/route';
@ -79,7 +78,6 @@ function getTypedGlobalApmServerRouteRepository() {
...infrastructureRouteRepository,
...debugTelemetryRoute,
...timeRangeMetadataRoute,
...labsRouteRepository,
...agentExplorerRouteRepository,
...mobileRouteRepository,
...diagnosticsRepository,

View file

@ -1,22 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import { uiSettings } from '@kbn/observability-plugin/server';
import { createApmServerRoute } from '../../apm_routes/create_apm_server_route';
const getLabsRoute = createApmServerRoute({
endpoint: 'GET /internal/apm/settings/labs',
security: { authz: { requiredPrivileges: ['apm'] } },
handler: async (): Promise<{ labsItems: string[] }> => {
const labsItems = Object.entries(uiSettings)
.filter(([key, value]): boolean | undefined => value.showInLabs)
.map(([key]): string => key);
return { labsItems };
},
});
export const labsRouteRepository = getLabsRoute;

View file

@ -27,7 +27,6 @@ export {
defaultApmServiceEnvironment,
apmProgressiveLoading,
apmServiceGroupMaxNumberOfServices,
apmLabsButton,
apmEnableTableSearchBar,
entityCentricExperience,
apmAWSLambdaPriceFactor,

View file

@ -12,7 +12,6 @@ export const defaultApmServiceEnvironment = 'observability:apmDefaultServiceEnvi
export const apmProgressiveLoading = 'observability:apmProgressiveLoading';
export const apmServiceGroupMaxNumberOfServices =
'observability:apmServiceGroupMaxNumberOfServices';
export const apmLabsButton = 'observability:apmLabsButton';
export const apmEnableTableSearchBar = 'observability:apmEnableTableSearchBar';
export const entityCentricExperience = 'observability:entityCentricExperience';
export const apmEnableServiceInventoryTableSearchBar =

View file

@ -16,7 +16,6 @@ import {
defaultApmServiceEnvironment,
apmProgressiveLoading,
apmServiceGroupMaxNumberOfServices,
apmLabsButton,
apmEnableTableSearchBar,
entityCentricExperience,
apmAWSLambdaPriceFactor,
@ -46,12 +45,10 @@ const technicalPreviewLabel = i18n.translate(
{ defaultMessage: 'technical preview' }
);
type UiSettings = UiSettingsParams<boolean | number | string | object> & { showInLabs?: boolean };
/**
* uiSettings definitions for Observability.
*/
export const uiSettings: Record<string, UiSettings> = {
export const uiSettings: Record<string, UiSettingsParams<boolean | number | string | object>> = {
[enableInspectEsQueries]: {
category: [observabilityFeatureId],
name: i18n.translate('xpack.observability.enableInspectEsQueriesExperimentName', {
@ -154,7 +151,6 @@ export const uiSettings: Record<string, UiSettings> = {
}
),
},
showInLabs: true,
solution: 'oblt',
},
[apmServiceGroupMaxNumberOfServices]: {
@ -169,21 +165,6 @@ export const uiSettings: Record<string, UiSettings> = {
schema: schema.number({ min: 1 }),
solution: 'oblt',
},
[apmLabsButton]: {
category: [observabilityFeatureId],
name: i18n.translate('xpack.observability.apmLabs', {
defaultMessage: 'Enable labs button in APM',
}),
description: i18n.translate('xpack.observability.apmLabsDescription', {
defaultMessage:
'This flag determines if the viewer has access to the Labs button, a quick way to enable and disable technical preview features in APM.',
}),
schema: schema.boolean(),
value: false,
requiresPageReload: true,
type: 'boolean',
solution: 'oblt',
},
[apmEnableTableSearchBar]: {
category: [observabilityFeatureId],
name: i18n.translate('xpack.observability.apmEnableTableSearchBar', {