Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import React, { useCallback, useEffect, useReducer } from 'react';
import React, { useCallback, useEffect, useMemo, useReducer } from 'react';
import {
EuiButtonEmpty,
EuiEmptyPrompt,
Expand Down Expand Up @@ -37,6 +37,8 @@ import { HeaderPage } from '../../common/components/header_page';
import { useEntityAnalyticsRoutes } from '../api/api';
import { usePrivilegedMonitoringEngineStatus } from '../api/hooks/use_privileged_monitoring_engine_status';
import { PrivilegedUserMonitoringManageDataSources } from '../components/privileged_user_monitoring_manage_data_sources';
import { EmptyPrompt } from '../../common/components/empty_prompt';
import { useDataView } from '../../data_view_manager/hooks/use_data_view';

type PageState =
| { type: 'fetchingEngineStatus' }
Expand Down Expand Up @@ -100,11 +102,26 @@ export const EntityAnalyticsPrivilegedUserMonitoringPage = () => {
const { initPrivilegedMonitoringEngine } = useEntityAnalyticsRoutes();
const [state, dispatch] = useReducer(reducer, initialState);

const { sourcererDataView: oldSourcererDataView } = useSourcererDataView();
const {
indicesExist: oldIndicesExist,
loading: oldIsSourcererLoading,
sourcererDataView: oldSourcererDataViewSpec,
} = useSourcererDataView();
const newDataViewPickerEnabled = useIsExperimentalFeatureEnabled('newDataViewPickerEnabled');
const { dataView, status } = useDataView();
const { dataViewSpec } = useDataViewSpec();

const sourcererDataView = newDataViewPickerEnabled ? dataViewSpec : oldSourcererDataView;
const isSourcererLoading = useMemo(
() => (newDataViewPickerEnabled ? status !== 'ready' : oldIsSourcererLoading),
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what if the status is error?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The page will load normally, but many functionalities won't work correctly.

I copied and pasted this from other pages. Most security solution pages have the same issue. Most of them have the some form of newDataViewPickerEnabled logic duplicated.

[newDataViewPickerEnabled, oldIsSourcererLoading, status]
);

const indicesExist = useMemo(
() => (newDataViewPickerEnabled ? !!dataView?.matchedIndices?.length : oldIndicesExist),
[dataView?.matchedIndices?.length, newDataViewPickerEnabled, oldIndicesExist]
);

const sourcererDataView = newDataViewPickerEnabled ? dataViewSpec : oldSourcererDataViewSpec;
const engineStatus = usePrivilegedMonitoringEngineStatus();
const initEngineCallBack = useCallback(
async (userCount: number) => {
Expand Down Expand Up @@ -163,6 +180,10 @@ export const EntityAnalyticsPrivilegedUserMonitoringPage = () => {
min-height: calc(100vh - 240px);
`;

if (!indicesExist) {
return <EmptyPrompt />;
}

return (
<>
{state.type === 'dashboard' && (
Expand All @@ -172,23 +193,24 @@ export const EntityAnalyticsPrivilegedUserMonitoringPage = () => {
)}

<SecuritySolutionPageWrapper>
{state.type === 'fetchingEngineStatus' && (
<>
<HeaderPage
title={
<FormattedMessage
id="xpack.securitySolution.entityAnalytics.privilegedUserMonitoring.dashboards.pageTitle"
defaultMessage="Privileged user monitoring"
/>
}
/>
<EuiFlexGroup alignItems="center" justifyContent="center" css={fullHeightCSS}>
<EuiFlexItem grow={false}>
<EuiLoadingLogo logo="logoSecurity" size="xl" />
</EuiFlexItem>
</EuiFlexGroup>
</>
)}
{state.type === 'fetchingEngineStatus' ||
(isSourcererLoading && (
<>
<HeaderPage
title={
<FormattedMessage
id="xpack.securitySolution.entityAnalytics.privilegedUserMonitoring.dashboards.pageTitle"
defaultMessage="Privileged user monitoring"
/>
}
/>
<EuiFlexGroup alignItems="center" justifyContent="center" css={fullHeightCSS}>
<EuiFlexItem grow={false}>
<EuiLoadingLogo logo="logoSecurity" size="xl" />
</EuiFlexItem>
</EuiFlexGroup>
</>
))}

{state.type === 'onboarding' && (
<>
Expand Down