Skip to content

Commit

Permalink
Creating a shared component for the Risk Engine's countdown text (ela…
Browse files Browse the repository at this point in the history
…stic#203212)

## Summary

The countdown text for the Risk Engine did not update without a page
refresh.

![Screenshot 2024-12-05 at 2 50
43 PM](https://github.com/user-attachments/assets/9f8ea7ce-1a5d-4c56-8198-199acc75fb49)

This pull request includes changes to the `use_risk_engine_status.ts`
and `schedule_risk_engine_callout.tsx` files to enhance the
functionality and code quality. The most important changes include the
addition of a countdown timer, refactoring of existing code, and
improvements to the import statements.

Enhancements and new functionality:

* Added `useRiskEngineCountdownTime` hook to provide a countdown timer
for the risk engine status.

Refactoring and code quality improvements:

* Refactored the `ScheduleRiskEngineCallout` component to use the new
`useRiskEngineCountdownTime` hook, simplifying the code by creating a
shared hook and removing the `useMemo` logic for countdown text.
* Improved import statements by adding `useMemo` and `moment` in
`use_risk_engine_status.ts` and removing unused imports in
`schedule_risk_engine_callout.tsx`.


### Checklist

Check the PR satisfies following conditions. 


Reviewers should verify this PR satisfies this list as well.

- [x] [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
- [ ] If a plugin configuration key changed, check if it needs to be
allowlisted in the cloud and added to the [docker
list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)
- [ ] This was checked for breaking HTTP API changes, and any breaking
changes have been approved by the breaking-change committee. The
`release_note:breaking` label should be applied in these situations.
- [ ] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
- [ ] The PR description includes the appropriate Release Notes section,
and the correct `release_note:*` label is applied per the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
  • Loading branch information
abhishekbhatia1710 authored Dec 17, 2024
1 parent 1c78729 commit 5c260a4
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import type { UseQueryOptions } from '@tanstack/react-query';
import { useQuery, useQueryClient } from '@tanstack/react-query';
import { useCallback } from 'react';
import moment from 'moment';
import { i18n } from '@kbn/i18n';
import type { RiskEngineStatusResponse } from '../../../../common/api/entity_analytics/risk_engine/engine_status_route.gen';
import { RiskEngineStatusEnum } from '../../../../common/api/entity_analytics/risk_engine/engine_status_route.gen';
import { useEntityAnalyticsRoutes } from '../api';
Expand Down Expand Up @@ -38,6 +40,22 @@ export const useIsNewRiskScoreModuleInstalled = (): RiskScoreModuleStatus => {
return { isLoading: false, installed: !!riskEngineStatus?.isNewRiskScoreModuleInstalled };
};

export const useRiskEngineCountdownTime = (
riskEngineStatus: RiskEngineStatus | undefined
): string => {
const { status, runAt } = riskEngineStatus?.risk_engine_task_status || {};
const isRunning = status === 'running' || (!!runAt && new Date(runAt) < new Date());

return isRunning
? i18n.translate(
'xpack.securitySolution.entityAnalytics.assetCriticalityResultStep.riskEngine.nowRunningMessage',
{
defaultMessage: 'Now running',
}
)
: moment(runAt).fromNow(true);
};

export interface RiskEngineStatus extends RiskEngineStatusResponse {
isUpdateAvailable: boolean;
isNewRiskScoreModuleInstalled: boolean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,17 @@ import {
EuiText,
EuiFlexItem,
} from '@elastic/eui';
import React, { useCallback, useMemo } from 'react';
import React, { useCallback } from 'react';
import { FormattedMessage } from '@kbn/i18n-react';

import { i18n } from '@kbn/i18n';
import { RiskEngineStatusEnum } from '../../../../../common/api/entity_analytics';
import { useAppToasts } from '../../../../common/hooks/use_app_toasts';
import { formatTimeFromNow } from '../helpers';
import { useScheduleNowRiskEngineMutation } from '../../../api/hooks/use_schedule_now_risk_engine_mutation';
import { useRiskEngineStatus } from '../../../api/hooks/use_risk_engine_status';
import {
useRiskEngineStatus,
useRiskEngineCountdownTime,
} from '../../../api/hooks/use_risk_engine_status';

const TEN_SECONDS = 10000;

Expand All @@ -29,7 +31,7 @@ export const ScheduleRiskEngineCallout: React.FC = () => {
refetchInterval: TEN_SECONDS,
structuralSharing: false, // Force the component to rerender after every Risk Engine Status API call
});

const isRunning = riskEngineStatus?.risk_engine_task_status?.status === 'running';
const { addSuccess, addError } = useAppToasts();
const { isLoading: isLoadingRiskEngineSchedule, mutate: scheduleRiskEngineMutation } =
useScheduleNowRiskEngineMutation({
Expand All @@ -53,25 +55,7 @@ export const ScheduleRiskEngineCallout: React.FC = () => {
}),
});

const { status, runAt } = riskEngineStatus?.risk_engine_task_status || {};

const isRunning = useMemo(
() => status === 'running' || (!!runAt && new Date(runAt) < new Date()),
[runAt, status]
);

const countDownText = useMemo(
() =>
isRunning
? i18n.translate(
'xpack.securitySolution.entityAnalytics.assetCriticalityResultStep.riskEngine.nowRunningMessage',
{
defaultMessage: 'Now running',
}
)
: formatTimeFromNow(riskEngineStatus?.risk_engine_task_status?.runAt),
[isRunning, riskEngineStatus?.risk_engine_task_status?.runAt]
);
const countDownText = useRiskEngineCountdownTime(riskEngineStatus);

const scheduleRiskEngine = useCallback(() => {
scheduleRiskEngineMutation();
Expand Down

0 comments on commit 5c260a4

Please sign in to comment.