mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 17:59:23 -04:00
[SecuritySolutions] Fix Entity Analytics dashboard fires many risk_score/index_status requests (#179510)
## Summary The Entity Analytics Dashboard page called the `/risk_score/index_status` API many times, which led to a very long loading time. I wrapped all API calls inside `useEntityAnalyticsRoute` with `useMemo` to quick-fix the multiple unnecessary HTTP calls. ### Checklist Delete any items that are not applicable to this PR. - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed
This commit is contained in:
parent
9106bf7244
commit
e290d2c1ab
1 changed files with 133 additions and 130 deletions
|
@ -5,6 +5,7 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { useMemo } from 'react';
|
||||
import type { AssetCriticalityRecord } from '../../../common/api/entity_analytics/asset_criticality';
|
||||
import type { RiskScoreEntity } from '../../../common/search_strategy';
|
||||
import {
|
||||
|
@ -36,150 +37,152 @@ import { useKibana } from '../../common/lib/kibana/kibana_react';
|
|||
export const useEntityAnalyticsRoutes = () => {
|
||||
const http = useKibana().services.http;
|
||||
|
||||
/**
|
||||
* Fetches preview risks scores
|
||||
*/
|
||||
const fetchRiskScorePreview = ({
|
||||
signal,
|
||||
params,
|
||||
}: {
|
||||
signal?: AbortSignal;
|
||||
params: RiskScorePreviewRequestSchema;
|
||||
}) =>
|
||||
http.fetch<CalculateScoresResponse>(RISK_SCORE_PREVIEW_URL, {
|
||||
version: '1',
|
||||
method: 'POST',
|
||||
body: JSON.stringify(params),
|
||||
return useMemo(() => {
|
||||
/**
|
||||
* Fetches preview risks scores
|
||||
*/
|
||||
const fetchRiskScorePreview = ({
|
||||
signal,
|
||||
});
|
||||
params,
|
||||
}: {
|
||||
signal?: AbortSignal;
|
||||
params: RiskScorePreviewRequestSchema;
|
||||
}) =>
|
||||
http.fetch<CalculateScoresResponse>(RISK_SCORE_PREVIEW_URL, {
|
||||
version: '1',
|
||||
method: 'POST',
|
||||
body: JSON.stringify(params),
|
||||
signal,
|
||||
});
|
||||
|
||||
/**
|
||||
* Fetches risks engine status
|
||||
*/
|
||||
const fetchRiskEngineStatus = ({ signal }: { signal?: AbortSignal }) =>
|
||||
http.fetch<GetRiskEngineStatusResponse>(RISK_ENGINE_STATUS_URL, {
|
||||
version: '1',
|
||||
method: 'GET',
|
||||
signal,
|
||||
});
|
||||
/**
|
||||
* Fetches risks engine status
|
||||
*/
|
||||
const fetchRiskEngineStatus = ({ signal }: { signal?: AbortSignal }) =>
|
||||
http.fetch<GetRiskEngineStatusResponse>(RISK_ENGINE_STATUS_URL, {
|
||||
version: '1',
|
||||
method: 'GET',
|
||||
signal,
|
||||
});
|
||||
|
||||
/**
|
||||
* Init risk score engine
|
||||
*/
|
||||
const initRiskEngine = () =>
|
||||
http.fetch<InitRiskEngineResponse>(RISK_ENGINE_INIT_URL, {
|
||||
version: '1',
|
||||
method: 'POST',
|
||||
});
|
||||
/**
|
||||
* Init risk score engine
|
||||
*/
|
||||
const initRiskEngine = () =>
|
||||
http.fetch<InitRiskEngineResponse>(RISK_ENGINE_INIT_URL, {
|
||||
version: '1',
|
||||
method: 'POST',
|
||||
});
|
||||
|
||||
/**
|
||||
* Enable risk score engine
|
||||
*/
|
||||
const enableRiskEngine = () =>
|
||||
http.fetch<EnableRiskEngineResponse>(RISK_ENGINE_ENABLE_URL, {
|
||||
version: '1',
|
||||
method: 'POST',
|
||||
});
|
||||
/**
|
||||
* Enable risk score engine
|
||||
*/
|
||||
const enableRiskEngine = () =>
|
||||
http.fetch<EnableRiskEngineResponse>(RISK_ENGINE_ENABLE_URL, {
|
||||
version: '1',
|
||||
method: 'POST',
|
||||
});
|
||||
|
||||
/**
|
||||
* Disable risk score engine
|
||||
*/
|
||||
const disableRiskEngine = () =>
|
||||
http.fetch<DisableRiskEngineResponse>(RISK_ENGINE_DISABLE_URL, {
|
||||
version: '1',
|
||||
method: 'POST',
|
||||
});
|
||||
/**
|
||||
* Disable risk score engine
|
||||
*/
|
||||
const disableRiskEngine = () =>
|
||||
http.fetch<DisableRiskEngineResponse>(RISK_ENGINE_DISABLE_URL, {
|
||||
version: '1',
|
||||
method: 'POST',
|
||||
});
|
||||
|
||||
/**
|
||||
* Get risk engine privileges
|
||||
*/
|
||||
const fetchRiskEnginePrivileges = () =>
|
||||
http.fetch<EntityAnalyticsPrivileges>(RISK_ENGINE_PRIVILEGES_URL, {
|
||||
version: '1',
|
||||
method: 'GET',
|
||||
});
|
||||
/**
|
||||
* Get risk engine privileges
|
||||
*/
|
||||
const fetchRiskEnginePrivileges = () =>
|
||||
http.fetch<EntityAnalyticsPrivileges>(RISK_ENGINE_PRIVILEGES_URL, {
|
||||
version: '1',
|
||||
method: 'GET',
|
||||
});
|
||||
|
||||
/**
|
||||
* Get asset criticality privileges
|
||||
*/
|
||||
const fetchAssetCriticalityPrivileges = () =>
|
||||
http.fetch<EntityAnalyticsPrivileges>(ASSET_CRITICALITY_PRIVILEGES_URL, {
|
||||
version: '1',
|
||||
method: 'GET',
|
||||
});
|
||||
/**
|
||||
* Get asset criticality privileges
|
||||
*/
|
||||
const fetchAssetCriticalityPrivileges = () =>
|
||||
http.fetch<EntityAnalyticsPrivileges>(ASSET_CRITICALITY_PRIVILEGES_URL, {
|
||||
version: '1',
|
||||
method: 'GET',
|
||||
});
|
||||
|
||||
/**
|
||||
* Create asset criticality
|
||||
*/
|
||||
const createAssetCriticality = async (
|
||||
params: Pick<AssetCriticality, 'idField' | 'idValue' | 'criticalityLevel'>
|
||||
): Promise<AssetCriticalityRecord> =>
|
||||
http.fetch<AssetCriticalityRecord>(ASSET_CRITICALITY_URL, {
|
||||
version: '1',
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
id_value: params.idValue,
|
||||
id_field: params.idField,
|
||||
criticality_level: params.criticalityLevel,
|
||||
}),
|
||||
});
|
||||
/**
|
||||
* Create asset criticality
|
||||
*/
|
||||
const createAssetCriticality = async (
|
||||
params: Pick<AssetCriticality, 'idField' | 'idValue' | 'criticalityLevel'>
|
||||
): Promise<AssetCriticalityRecord> =>
|
||||
http.fetch<AssetCriticalityRecord>(ASSET_CRITICALITY_URL, {
|
||||
version: '1',
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
id_value: params.idValue,
|
||||
id_field: params.idField,
|
||||
criticality_level: params.criticalityLevel,
|
||||
}),
|
||||
});
|
||||
|
||||
/**
|
||||
* Get asset criticality
|
||||
*/
|
||||
const fetchAssetCriticality = async (
|
||||
params: Pick<AssetCriticality, 'idField' | 'idValue'>
|
||||
): Promise<AssetCriticalityRecord> => {
|
||||
return http.fetch<AssetCriticalityRecord>(ASSET_CRITICALITY_URL, {
|
||||
version: '1',
|
||||
method: 'GET',
|
||||
query: { id_value: params.idValue, id_field: params.idField },
|
||||
});
|
||||
};
|
||||
|
||||
const getRiskScoreIndexStatus = ({
|
||||
query,
|
||||
signal,
|
||||
}: {
|
||||
query: {
|
||||
indexName: string;
|
||||
entity: RiskScoreEntity;
|
||||
/**
|
||||
* Get asset criticality
|
||||
*/
|
||||
const fetchAssetCriticality = async (
|
||||
params: Pick<AssetCriticality, 'idField' | 'idValue'>
|
||||
): Promise<AssetCriticalityRecord> => {
|
||||
return http.fetch<AssetCriticalityRecord>(ASSET_CRITICALITY_URL, {
|
||||
version: '1',
|
||||
method: 'GET',
|
||||
query: { id_value: params.idValue, id_field: params.idField },
|
||||
});
|
||||
};
|
||||
signal?: AbortSignal;
|
||||
}): Promise<{
|
||||
isDeprecated: boolean;
|
||||
isEnabled: boolean;
|
||||
}> =>
|
||||
http.fetch<{ isDeprecated: boolean; isEnabled: boolean }>(RISK_SCORE_INDEX_STATUS_API_URL, {
|
||||
version: '1',
|
||||
method: 'GET',
|
||||
|
||||
const getRiskScoreIndexStatus = ({
|
||||
query,
|
||||
asSystemRequest: true,
|
||||
signal,
|
||||
});
|
||||
}: {
|
||||
query: {
|
||||
indexName: string;
|
||||
entity: RiskScoreEntity;
|
||||
};
|
||||
signal?: AbortSignal;
|
||||
}): Promise<{
|
||||
isDeprecated: boolean;
|
||||
isEnabled: boolean;
|
||||
}> =>
|
||||
http.fetch<{ isDeprecated: boolean; isEnabled: boolean }>(RISK_SCORE_INDEX_STATUS_API_URL, {
|
||||
version: '1',
|
||||
method: 'GET',
|
||||
query,
|
||||
asSystemRequest: true,
|
||||
signal,
|
||||
});
|
||||
|
||||
/**
|
||||
* Fetches risk engine settings
|
||||
*/
|
||||
const fetchRiskEngineSettings = () =>
|
||||
http.fetch<RiskEngineSettingsResponse>(RISK_ENGINE_SETTINGS_URL, {
|
||||
version: '1',
|
||||
method: 'GET',
|
||||
});
|
||||
/**
|
||||
* Fetches risk engine settings
|
||||
*/
|
||||
const fetchRiskEngineSettings = () =>
|
||||
http.fetch<RiskEngineSettingsResponse>(RISK_ENGINE_SETTINGS_URL, {
|
||||
version: '1',
|
||||
method: 'GET',
|
||||
});
|
||||
|
||||
return {
|
||||
fetchRiskScorePreview,
|
||||
fetchRiskEngineStatus,
|
||||
initRiskEngine,
|
||||
enableRiskEngine,
|
||||
disableRiskEngine,
|
||||
fetchRiskEnginePrivileges,
|
||||
fetchAssetCriticalityPrivileges,
|
||||
createAssetCriticality,
|
||||
fetchAssetCriticality,
|
||||
getRiskScoreIndexStatus,
|
||||
fetchRiskEngineSettings,
|
||||
};
|
||||
return {
|
||||
fetchRiskScorePreview,
|
||||
fetchRiskEngineStatus,
|
||||
initRiskEngine,
|
||||
enableRiskEngine,
|
||||
disableRiskEngine,
|
||||
fetchRiskEnginePrivileges,
|
||||
fetchAssetCriticalityPrivileges,
|
||||
createAssetCriticality,
|
||||
fetchAssetCriticality,
|
||||
getRiskScoreIndexStatus,
|
||||
fetchRiskEngineSettings,
|
||||
};
|
||||
}, [http]);
|
||||
};
|
||||
|
||||
export type AssetCriticality = SnakeToCamelCase<AssetCriticalityRecord>;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue