diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index 1ec04c9882c86..b6b53ce106c8c 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -189,6 +189,8 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'xpack.apm.featureFlags.migrationToFleetAvailable (any)', 'xpack.apm.featureFlags.sourcemapApiAvailable (any)', 'xpack.apm.featureFlags.storageExplorerAvailable (any)', + 'xpack.apm.serverless.enabled (any)', // It's a boolean (any because schema.conditional) + 'xpack.observability_onboarding.serverless.enabled (any)', // It's a boolean (any because schema.conditional) 'xpack.cases.files.allowedMimeTypes (array)', 'xpack.cases.files.maxSize (number)', 'xpack.cases.markdownPlugins.lens (boolean)', diff --git a/x-pack/plugins/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx b/x-pack/plugins/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx index 78ad49f465ed4..0719f2dbd720d 100644 --- a/x-pack/plugins/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx +++ b/x-pack/plugins/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx @@ -80,6 +80,7 @@ const mockConfig: ConfigSchema = { sourcemapApiAvailable: true, storageExplorerAvailable: true, }, + serverless: { enabled: false }, }; const urlService = new UrlService({ diff --git a/x-pack/plugins/apm/public/index.ts b/x-pack/plugins/apm/public/index.ts index b6aa22dab272a..446bb61f181b6 100644 --- a/x-pack/plugins/apm/public/index.ts +++ b/x-pack/plugins/apm/public/index.ts @@ -25,6 +25,9 @@ export interface ConfigSchema { sourcemapApiAvailable: boolean; storageExplorerAvailable: boolean; }; + serverless: { + enabled: boolean; + }; } export const plugin: PluginInitializer = ( diff --git a/x-pack/plugins/apm/public/plugin.ts b/x-pack/plugins/apm/public/plugin.ts index 0941eda344188..14cdca7897d32 100644 --- a/x-pack/plugins/apm/public/plugin.ts +++ b/x-pack/plugins/apm/public/plugin.ts @@ -11,6 +11,7 @@ import { map } from 'rxjs/operators'; import { UsageCollectionStart } from '@kbn/usage-collection-plugin/public'; import { AppMountParameters, + AppNavLinkStatus, CoreSetup, CoreStart, DEFAULT_APP_CATEGORIES, @@ -321,6 +322,7 @@ export class ApmPlugin implements Plugin { appRoute: '/app/apm', icon: 'plugins/apm/public/icon.svg', category: DEFAULT_APP_CATEGORIES.observability, + navLinkStatus: AppNavLinkStatus.visible, deepLinks: [ { id: 'service-groups-list', @@ -331,13 +333,26 @@ export class ApmPlugin implements Plugin { id: 'services', title: servicesTitle, path: '/services', + navLinkStatus: config.serverless.enabled + ? AppNavLinkStatus.visible + : AppNavLinkStatus.default, + }, + { + id: 'traces', + title: tracesTitle, + path: '/traces', + navLinkStatus: config.serverless.enabled + ? AppNavLinkStatus.visible + : AppNavLinkStatus.default, }, - { id: 'traces', title: tracesTitle, path: '/traces' }, { id: 'service-map', title: serviceMapTitle, path: '/service-map' }, { id: 'dependencies', title: dependenciesTitle, path: '/dependencies/inventory', + navLinkStatus: config.serverless.enabled + ? AppNavLinkStatus.visible + : AppNavLinkStatus.default, }, { id: 'settings', title: apmSettingsTitle, path: '/settings' }, { diff --git a/x-pack/plugins/apm/server/index.ts b/x-pack/plugins/apm/server/index.ts index 904febf3324b1..f79c83683a36b 100644 --- a/x-pack/plugins/apm/server/index.ts +++ b/x-pack/plugins/apm/server/index.ts @@ -89,6 +89,15 @@ const configSchema = schema.object({ sourcemapApiAvailable: disabledOnServerless, storageExplorerAvailable: disabledOnServerless, }), + serverless: schema.object({ + enabled: schema.conditional( + schema.contextRef('serverless'), + true, + schema.literal(true), + schema.never(), + { defaultValue: schema.contextRef('serverless') } + ), + }), }); // plugin config @@ -150,6 +159,7 @@ export const config: PluginConfigDescriptor = { managedServiceUrl: true, serverlessOnboarding: true, featureFlags: true, + serverless: true, }, schema: configSchema, }; diff --git a/x-pack/plugins/observability_onboarding/public/plugin.ts b/x-pack/plugins/observability_onboarding/public/plugin.ts index c5cccb972c1f8..a4b9c01a509d5 100644 --- a/x-pack/plugins/observability_onboarding/public/plugin.ts +++ b/x-pack/plugins/observability_onboarding/public/plugin.ts @@ -54,6 +54,7 @@ export class ObservabilityOnboardingPlugin ) { const { ui: { enabled: isObservabilityOnboardingUiEnabled }, + serverless: { enabled: isServerlessEnabled }, } = this.ctx.config.get(); const pluginSetupDeps = plugins; @@ -62,7 +63,9 @@ export class ObservabilityOnboardingPlugin // and go to /app/observabilityOnboarding if (isObservabilityOnboardingUiEnabled) { core.application.register({ - navLinkStatus: AppNavLinkStatus.hidden, + navLinkStatus: isServerlessEnabled + ? AppNavLinkStatus.visible + : AppNavLinkStatus.hidden, id: 'observabilityOnboarding', title: 'Observability Onboarding', order: 8500, diff --git a/x-pack/plugins/observability_onboarding/server/index.ts b/x-pack/plugins/observability_onboarding/server/index.ts index 7b3881866aeac..922c8142998a2 100644 --- a/x-pack/plugins/observability_onboarding/server/index.ts +++ b/x-pack/plugins/observability_onboarding/server/index.ts @@ -16,6 +16,15 @@ const configSchema = schema.object({ ui: schema.object({ enabled: schema.boolean({ defaultValue: true }), }), + serverless: schema.object({ + enabled: schema.conditional( + schema.contextRef('serverless'), + true, + schema.literal(true), + schema.never(), + { defaultValue: schema.contextRef('serverless') } + ), + }), }); export type ObservabilityOnboardingConfig = TypeOf; @@ -24,6 +33,7 @@ export type ObservabilityOnboardingConfig = TypeOf; export const config: PluginConfigDescriptor = { exposeToBrowser: { ui: true, + serverless: true, }, schema: configSchema, }; diff --git a/x-pack/plugins/serverless_observability/public/components/side_navigation/index.tsx b/x-pack/plugins/serverless_observability/public/components/side_navigation/index.tsx index 0cd61be6e9526..23987f7d86e95 100644 --- a/x-pack/plugins/serverless_observability/public/components/side_navigation/index.tsx +++ b/x-pack/plugins/serverless_observability/public/components/side_navigation/index.tsx @@ -28,14 +28,22 @@ const navigationTree: NavigationTreeDefinition = { breadcrumbStatus: 'hidden', children: [ { - id: 'services-infra', + id: 'discover-dashboard-viz', children: [ - { link: 'apm:services' }, { - title: i18n.translate('xpack.serverlessObservability.nav.infrastructure', { - defaultMessage: 'Infrastructure', + link: 'discover', + }, + { + title: i18n.translate('xpack.serverlessObservability.nav.dashboards', { + defaultMessage: 'Dashboards', + }), + link: 'dashboards', + }, + { + title: i18n.translate('xpack.serverlessObservability.nav.visualizations', { + defaultMessage: 'Visualizations', }), - link: 'metrics:inventory', + link: 'visualize', }, ], }, @@ -54,32 +62,21 @@ const navigationTree: NavigationTreeDefinition = { ], }, { - id: 'signals', - title: 'Signals', + id: 'apm', + title: 'APM', children: [ + { link: 'apm:services' }, { link: 'apm:traces', }, { - title: i18n.translate('xpack.serverlessObservability.nav.signalsLogs', { + title: i18n.translate('xpack.serverlessObservability.nav.logs', { defaultMessage: 'Logs', }), link: 'logs:stream', }, - ], - }, - { - id: 'toolbox', - title: 'Toolbox', - children: [ - { - title: i18n.translate('xpack.serverlessObservability.nav.toolBoxVisualization', { - defaultMessage: 'Visualization', - }), - link: 'visualize', - }, { - link: 'dashboards', + link: 'apm:dependencies', }, ], }, @@ -97,14 +94,6 @@ const navigationTree: NavigationTreeDefinition = { }, ], }, - { - type: 'navGroup', - ...getPresets('analytics'), - }, - { - type: 'navGroup', - ...getPresets('ml'), - }, ], footer: [ {