Skip to content

Commit

Permalink
[Observability AI Assistant] Action menu item (elastic#163463)
Browse files Browse the repository at this point in the history
Co-authored-by: Coen Warmer <coen.warmer@gmail.com>
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Clint Andrew Hall <clint@clintandrewhall.com>
  • Loading branch information
4 people authored and benakansara committed Aug 14, 2023
1 parent 4064823 commit 917dd0a
Show file tree
Hide file tree
Showing 57 changed files with 556 additions and 276 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
import { apmLabsButton } from '@kbn/observability-plugin/common';
import { i18n } from '@kbn/i18n';
import React from 'react';
import { ObservabilityAIAssistantActionMenuItem } from '@kbn/observability-ai-assistant-plugin/public';
import { getAlertingCapabilities } from '../../../alerting/utils/get_alerting_capabilities';
import { getLegacyApmHref } from '../../../shared/links/apm/apm_link';
import { useApmPluginContext } from '../../../../context/apm_plugin/use_apm_plugin_context';
Expand Down Expand Up @@ -96,6 +97,7 @@ export function ApmHeaderActionMenu() {
})}
</EuiHeaderLink>
<InspectorHeaderLink />
<ObservabilityAIAssistantActionMenuItem />
</EuiHeaderLinks>
);
}
3 changes: 2 additions & 1 deletion x-pack/plugins/exploratory_view/kibana.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@
"security",
"share",
"triggersActionsUi",
"unifiedSearch"
"unifiedSearch",
"observabilityAIAssistant"
],
"optionalPlugins": ["discover", "embeddable", "home", "licensing", "spaces", "usageCollection"],
"requiredBundles": [
Expand Down
52 changes: 30 additions & 22 deletions x-pack/plugins/exploratory_view/public/application/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {
} from '@kbn/kibana-react-plugin/public';
import { Storage } from '@kbn/kibana-utils-plugin/public';
import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public';
import { ObservabilityAIAssistantProvider } from '@kbn/observability-ai-assistant-plugin/public';
import { PluginContext } from '../context/plugin_context';
import { routes } from '../routes';
import { ExploratoryViewPublicPluginsStart } from '../plugin';
Expand Down Expand Up @@ -70,34 +71,41 @@ export const renderApp = ({
const ApplicationUsageTrackingProvider =
usageCollection?.components.ApplicationUsageTrackingProvider ?? React.Fragment;

const aiAssistantService = plugins.observabilityAIAssistant;

ReactDOM.render(
<EuiErrorBoundary>
<ApplicationUsageTrackingProvider>
<KibanaThemeProvider theme$={theme$}>
<KibanaContextProvider
services={{
...core,
...plugins,
storage: new Storage(localStorage),
isDev,
}}
>
<PluginContext.Provider
value={{
appMountParameters,
<ObservabilityAIAssistantProvider value={aiAssistantService}>
<KibanaContextProvider
services={{
...core,
...plugins,
storage: new Storage(localStorage),
isDev,
}}
>
<Router history={history}>
<EuiThemeProvider darkMode={isDarkMode}>
<i18nCore.Context>
<RedirectAppLinks application={core.application} className={APP_WRAPPER_CLASS}>
<App />
</RedirectAppLinks>
</i18nCore.Context>
</EuiThemeProvider>
</Router>
</PluginContext.Provider>
</KibanaContextProvider>
<PluginContext.Provider
value={{
appMountParameters,
}}
>
<Router history={history}>
<EuiThemeProvider darkMode={isDarkMode}>
<i18nCore.Context>
<RedirectAppLinks
application={core.application}
className={APP_WRAPPER_CLASS}
>
<App />
</RedirectAppLinks>
</i18nCore.Context>
</EuiThemeProvider>
</Router>
</PluginContext.Provider>
</KibanaContextProvider>
</ObservabilityAIAssistantProvider>
</KibanaThemeProvider>
</ApplicationUsageTrackingProvider>
</EuiErrorBoundary>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ import React, { useState } from 'react';
import { EuiButton, EuiFlexGroup, EuiFlexItem } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import { LensEmbeddableInput, TypedLensByValueInput } from '@kbn/lens-plugin/public';
import {
ObservabilityAIAssistantActionMenuItem,
useObservabilityAIAssistantOptional,
} from '@kbn/observability-ai-assistant-plugin/public';
import { useKibana } from '@kbn/kibana-react-plugin/public';
import { EmbedAction } from '../../header/embed_action';
import { ObservabilityAppServices } from '../../../../../application/types';
Expand All @@ -29,6 +33,8 @@ export function ExpViewActionMenuContent({

const LensSaveModalComponent = lens.SaveModalComponent;

const service = useObservabilityAIAssistantOptional();

return (
<>
<EuiFlexGroup
Expand Down Expand Up @@ -93,6 +99,11 @@ export function ExpViewActionMenuContent({
})}
</EuiButton>
</EuiFlexItem>
{service?.isEnabled() ? (
<EuiFlexItem>
<ObservabilityAIAssistantActionMenuItem />
</EuiFlexItem>
) : null}
</EuiFlexGroup>

{isSaveOpen && lensAttributes && (
Expand Down
2 changes: 2 additions & 0 deletions x-pack/plugins/exploratory_view/public/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import { GuidedOnboardingPluginStart } from '@kbn/guided-onboarding-plugin/publi
import { SpacesPluginStart } from '@kbn/spaces-plugin/public';
import { LicensingPluginStart } from '@kbn/licensing-plugin/public';
import { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public';
import { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public';
import { getExploratoryViewEmbeddable } from './components/shared/exploratory_view/embeddable';
import { createExploratoryViewUrl } from './components/shared/exploratory_view/configurations/exploratory_view_url';
import getAppDataView from './utils/observability_data_views/get_app_data_view';
Expand Down Expand Up @@ -70,6 +71,7 @@ export interface ExploratoryViewPublicPluginsStart {
usageCollection: UsageCollectionSetup;
unifiedSearch: UnifiedSearchPublicPluginStart;
home?: HomePublicPluginStart;
observabilityAIAssistant: ObservabilityAIAssistantPluginStart;
}

export type ExploratoryViewPublicSetup = ReturnType<Plugin['setup']>;
Expand Down
3 changes: 2 additions & 1 deletion x-pack/plugins/exploratory_view/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@
"@kbn/shared-ux-router",
"@kbn/core-application-browser",
"@kbn/observability-shared-plugin",
"@kbn/core-ui-settings-browser-mocks"
"@kbn/core-ui-settings-browser-mocks",
"@kbn/observability-ai-assistant-plugin"
],
"exclude": ["target/**/*"]
}
2 changes: 2 additions & 0 deletions x-pack/plugins/infra/public/pages/logs/page_content.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import React, { useContext } from 'react';
import { Routes, Route } from '@kbn/shared-ux-router';
import { useKibana } from '@kbn/kibana-react-plugin/public';
import { HeaderMenuPortal, useLinkProps } from '@kbn/observability-shared-plugin/public';
import { ObservabilityAIAssistantActionMenuItem } from '@kbn/observability-ai-assistant-plugin/public';
import { LazyAlertDropdownWrapper } from '../../alerting/log_threshold';
import { HelpCenterContent } from '../../components/help_center_content';
import { useReadOnlyBadge } from '../../hooks/use_readonly_badge';
Expand Down Expand Up @@ -81,6 +82,7 @@ export const LogsPageContent: React.FunctionComponent = () => {
>
{ADD_DATA_LABEL}
</EuiHeaderLink>
<ObservabilityAIAssistantActionMenuItem />
</EuiHeaderLinks>
</HeaderMenuPortal>
)}
Expand Down
2 changes: 2 additions & 0 deletions x-pack/plugins/infra/public/pages/metrics/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { Routes, Route } from '@kbn/shared-ux-router';
import { EuiErrorBoundary, EuiHeaderLinks, EuiHeaderLink } from '@elastic/eui';
import { useKibana } from '@kbn/kibana-react-plugin/public';
import { HeaderMenuPortal, useLinkProps } from '@kbn/observability-shared-plugin/public';
import { ObservabilityAIAssistantActionMenuItem } from '@kbn/observability-ai-assistant-plugin/public';
import { MetricsSourceConfigurationProperties } from '../../../common/metrics_sources';
import { HelpCenterContent } from '../../components/help_center_content';
import { useReadOnlyBadge } from '../../hooks/use_readonly_badge';
Expand Down Expand Up @@ -89,6 +90,7 @@ export const InfrastructurePage = ({ match }: RouteComponentProps) => {
>
{ADD_DATA_LABEL}
</EuiHeaderLink>
<ObservabilityAIAssistantActionMenuItem />
</EuiHeaderLinks>
</HeaderMenuPortal>
)}
Expand Down
1 change: 1 addition & 0 deletions x-pack/plugins/observability/kibana.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"inspector",
"lens",
"observabilityShared",
"observabilityAIAssistant",
"ruleRegistry",
"triggersActionsUi",
"security",
Expand Down
55 changes: 29 additions & 26 deletions x-pack/plugins/observability/public/application/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {
} from '@kbn/kibana-react-plugin/public';
import { Storage } from '@kbn/kibana-utils-plugin/public';
import { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public';
import { ObservabilityAIAssistantProvider } from '@kbn/observability-ai-assistant-plugin/public';
import { HasDataContextProvider } from '../context/has_data_context/has_data_context';
import { PluginContext } from '../context/plugin_context/plugin_context';
import { ConfigSchema, ObservabilityPublicPluginsStart } from '../plugin';
Expand Down Expand Up @@ -100,32 +101,34 @@ export const renderApp = ({
kibanaVersion,
}}
>
<PluginContext.Provider
value={{
config,
appMountParameters,
observabilityRuleTypeRegistry,
ObservabilityPageTemplate,
}}
>
<Router history={history}>
<EuiThemeProvider darkMode={isDarkMode}>
<i18nCore.Context>
<RedirectAppLinks
application={core.application}
className={APP_WRAPPER_CLASS}
>
<QueryClientProvider client={queryClient}>
<HasDataContextProvider>
<App />
</HasDataContextProvider>
<HideableReactQueryDevTools />
</QueryClientProvider>
</RedirectAppLinks>
</i18nCore.Context>
</EuiThemeProvider>
</Router>
</PluginContext.Provider>
<ObservabilityAIAssistantProvider value={plugins.observabilityAIAssistant}>
<PluginContext.Provider
value={{
config,
appMountParameters,
observabilityRuleTypeRegistry,
ObservabilityPageTemplate,
}}
>
<Router history={history}>
<EuiThemeProvider darkMode={isDarkMode}>
<i18nCore.Context>
<RedirectAppLinks
application={core.application}
className={APP_WRAPPER_CLASS}
>
<QueryClientProvider client={queryClient}>
<HasDataContextProvider>
<App />
</HasDataContextProvider>
<HideableReactQueryDevTools />
</QueryClientProvider>
</RedirectAppLinks>
</i18nCore.Context>
</EuiThemeProvider>
</Router>
</PluginContext.Provider>
</ObservabilityAIAssistantProvider>
</KibanaContextProvider>
</CloudProvider>
</KibanaThemeProvider>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ const mockKibana = () => {
useKibanaMock.mockReturnValue({
services: {
...kibanaStartMock.startContract(),
theme: {},
cases: casesPluginMock.createStartContract(),
http: {
basePath: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import { getTimeZone } from '../../utils/get_time_zone';
import { isAlertDetailsEnabledPerApp } from '../../utils/is_alert_details_enabled';
import { observabilityFeatureId } from '../../../common';
import { paths } from '../../../common/locators/paths';
import { HeaderMenu } from '../overview/components/header_menu/header_menu';

interface AlertDetailsPathParams {
alertId: string;
Expand Down Expand Up @@ -137,6 +138,7 @@ export function AlertDetails() {
}}
data-test-subj="alertDetails"
>
<HeaderMenu />
<AlertSummary alertSummaryFields={summaryFields} />
<EuiSpacer size="l" />
{AlertDetailsAppSection && rule && (
Expand Down
2 changes: 2 additions & 0 deletions x-pack/plugins/observability/public/pages/alerts/alerts.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import { calculateTimeRangeBucketSize } from '../overview/helpers/calculate_buck
import { getAlertSummaryTimeRange } from '../../utils/alert_summary_widget';
import { observabilityAlertFeatureIds } from '../../../common/constants';
import { ALERTS_URL_STORAGE_KEY } from '../../../common/constants';
import { HeaderMenu } from '../overview/components/header_menu/header_menu';

const ALERTS_SEARCH_BAR_ID = 'alerts-search-bar-o11y';
const ALERTS_PER_PAGE = 50;
Expand Down Expand Up @@ -175,6 +176,7 @@ function InternalAlertsPage() {
rightSideItems: renderRuleStats(ruleStats, manageRulesHref, ruleStatsLoading),
}}
>
<HeaderMenu />
<EuiFlexGroup direction="column" gutterSize="m">
<EuiFlexItem>
<ObservabilityAlertSearchBar
Expand Down
2 changes: 2 additions & 0 deletions x-pack/plugins/observability/public/pages/cases/cases.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { useHasData } from '../../hooks/use_has_data';
import { Cases } from './components/cases';
import { LoadingObservability } from '../../components/loading_observability';
import { CaseFeatureNoPermissions } from './components/feature_no_permissions';
import { HeaderMenu } from '../overview/components/header_menu/header_menu';

export function CasesPage() {
const userCasesPermissions = useGetUserCasesPermissions();
Expand All @@ -26,6 +27,7 @@ export function CasesPage() {

return userCasesPermissions.read ? (
<ObservabilityPageTemplate isPageDataLoaded data-test-subj="o11yCasesPage">
<HeaderMenu />
<Cases permissions={userCasesPermissions} />
</ObservabilityPageTemplate>
) : (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
import { EuiHeaderLink, EuiHeaderLinks } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import React from 'react';
import {
ObservabilityAIAssistantActionMenuItem,
useObservabilityAIAssistantOptional,
} from '@kbn/observability-ai-assistant-plugin/public';
import { useKibana } from '../../../../utils/kibana_react';
import { usePluginContext } from '../../../../hooks/use_plugin_context';
import HeaderMenuPortal from './header_menu_portal';
Expand All @@ -18,6 +22,8 @@ export function HeaderMenu(): React.ReactElement | null {
appMountParameters: { setHeaderActionMenu },
} = usePluginContext();

const aiAssistant = useObservabilityAIAssistantOptional();

return (
<HeaderMenuPortal setHeaderActionMenu={setHeaderActionMenu} theme$={theme.theme$}>
<EuiHeaderLinks>
Expand All @@ -28,6 +34,7 @@ export function HeaderMenu(): React.ReactElement | null {
>
{addDataLinkText}
</EuiHeaderLink>
{aiAssistant?.isEnabled() ? <ObservabilityAIAssistantActionMenuItem /> : null}
</EuiHeaderLinks>
</HeaderMenuPortal>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import {
getDefaultAlertSummaryTimeRange,
} from '../../utils/alert_summary_widget';
import type { AlertStatus } from '../../../common/typings';
import { HeaderMenu } from '../overview/components/header_menu/header_menu';

export type TabId = typeof RULE_DETAILS_ALERTS_TAB | typeof RULE_DETAILS_EXECUTION_TAB;

Expand Down Expand Up @@ -217,6 +218,7 @@ export function RuleDetailsPage() {
],
}}
>
<HeaderMenu />
<EuiFlexGroup wrap gutterSize="m">
<EuiFlexItem style={{ minWidth: 350 }}>
<RuleStatusPanel
Expand Down
10 changes: 3 additions & 7 deletions x-pack/plugins/observability/public/pages/rules/rules.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@ jest.mock('@kbn/triggers-actions-ui-plugin/public', () => ({
}));

jest.spyOn(pluginContext, 'usePluginContext').mockImplementation(() => ({
appMountParameters: {} as AppMountParameters,
appMountParameters: {
setHeaderActionMenu: () => {},
} as unknown as AppMountParameters,
config: {
unsafe: {
slo: { enabled: false },
Expand All @@ -47,12 +49,6 @@ jest.spyOn(pluginContext, 'usePluginContext').mockImplementation(() => ({
compositeSlo: {
enabled: false,
},
aiAssistant: {
enabled: false,
feedback: {
enabled: false,
},
},
},
observabilityRuleTypeRegistry: createObservabilityRuleTypeRegistryMock(),
ObservabilityPageTemplate: KibanaPageTemplate,
Expand Down
Loading

0 comments on commit 917dd0a

Please sign in to comment.