diff --git a/libs/domains/environments/data-access/src/lib/domains-environments-data-access.ts b/libs/domains/environments/data-access/src/lib/domains-environments-data-access.ts index 05db8f3f683..64aaea685f4 100644 --- a/libs/domains/environments/data-access/src/lib/domains-environments-data-access.ts +++ b/libs/domains/environments/data-access/src/lib/domains-environments-data-access.ts @@ -62,15 +62,6 @@ export const environments = createQueryKeys('environments', { ) }, }), - // TODO [To update once rust-backed will be deployed]: To remove - // NOTE: Value is set by WebSocket - checkRunningStatusClosed: (clusterId: string) => ({ - queryKey: [clusterId], - queryFn() { - // eslint-disable-next-line @typescript-eslint/no-empty-function - return new Promise<{ clusterId: string; reason: string }>(() => {}) - }, - }), details: ({ environmentId }: { environmentId: string }) => ({ queryKey: [environmentId], async queryFn() { diff --git a/libs/domains/environments/feature/src/lib/environment-list/environment-list.tsx b/libs/domains/environments/feature/src/lib/environment-list/environment-list.tsx index 6dc51ee01a3..b0b73c8709d 100644 --- a/libs/domains/environments/feature/src/lib/environment-list/environment-list.tsx +++ b/libs/domains/environments/feature/src/lib/environment-list/environment-list.tsx @@ -40,7 +40,6 @@ import { twMerge, upperCaseFirstLetter } from '@qovery/shared/util-js' import { CreateCloneEnvironmentModal } from '../create-clone-environment-modal/create-clone-environment-modal' import { EnvironmentActionToolbar } from '../environment-action-toolbar/environment-action-toolbar' import { EnvironmentMode } from '../environment-mode/environment-mode' -import { useCheckRunningStatusClosed } from '../hooks/use-check-running-status-closed/use-check-running-status-closed' import { useEnvironments } from '../hooks/use-environments/use-environments' import { EnvironmentListSkeleton } from './environment-list-skeleton' @@ -88,30 +87,6 @@ function EnvironmentStatusCell({ runningStatus?: RunningState value?: string }) { - const { data: checkRunningStatusClosed } = useCheckRunningStatusClosed({ - clusterId: environment.cluster_id, - }) - // TODO [To update once rust-backed will be deployed]: To remove - if (checkRunningStatusClosed) { - return ( - - e.stopPropagation()} - className="gap-2 whitespace-nowrap text-sm" - size="md" - color="neutral" - variant="outline" - radius="full" - > - - Status unavailable - - - ) - } - return ( diff --git a/libs/domains/environments/feature/src/lib/environment-state-chip/environment-state-chip.tsx b/libs/domains/environments/feature/src/lib/environment-state-chip/environment-state-chip.tsx index 130d3a95b81..dfc85074bbb 100644 --- a/libs/domains/environments/feature/src/lib/environment-state-chip/environment-state-chip.tsx +++ b/libs/domains/environments/feature/src/lib/environment-state-chip/environment-state-chip.tsx @@ -1,7 +1,5 @@ import { Skeleton, StatusChip, type StatusChipProps } from '@qovery/shared/ui' -import { useCheckRunningStatusClosed } from '../hooks/use-check-running-status-closed/use-check-running-status-closed' import { useDeploymentStatus } from '../hooks/use-deployment-status/use-deployment-status' -import { useEnvironment } from '../hooks/use-environment/use-environment' import { useRunningStatus } from '../hooks/use-running-status/use-running-status' /** @@ -45,17 +43,7 @@ function DeploymentStateChip({ environmentId, mode, ...props }: DeploymentStateC type RunningStateChipProps = Omit function RunningStateChip({ environmentId, ...props }: RunningStateChipProps) { - const { data: environment } = useEnvironment({ environmentId }) const { data: runningStatus } = useRunningStatus({ environmentId }) - const { data: checkRunningStatusClosed } = useCheckRunningStatusClosed({ - clusterId: environment?.cluster_id ?? '', - }) - - // TODO [To update once rust-backed will be deployed]: To remove - if (checkRunningStatusClosed) { - return - } - return ( diff --git a/libs/domains/environments/feature/src/lib/hooks/use-check-running-status-closed/use-check-running-status-closed.ts b/libs/domains/environments/feature/src/lib/hooks/use-check-running-status-closed/use-check-running-status-closed.ts deleted file mode 100644 index 1628578a62c..00000000000 --- a/libs/domains/environments/feature/src/lib/hooks/use-check-running-status-closed/use-check-running-status-closed.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { useQuery } from '@tanstack/react-query' -import { queries } from '@qovery/state/util-queries' - -export interface UseCheckRunningStatusClosedProps { - clusterId: string -} - -export function useCheckRunningStatusClosed({ clusterId }: UseCheckRunningStatusClosedProps) { - return useQuery({ - ...queries.environments.checkRunningStatusClosed(clusterId), - refetchOnMount: false, - refetchOnWindowFocus: false, - refetchOnReconnect: false, - staleTime: Infinity, - }) -} - -export default useCheckRunningStatusClosed diff --git a/libs/domains/services/data-access/src/lib/domains-services-data-access.ts b/libs/domains/services/data-access/src/lib/domains-services-data-access.ts index afc5f92374e..9a6f60320d8 100644 --- a/libs/domains/services/data-access/src/lib/domains-services-data-access.ts +++ b/libs/domains/services/data-access/src/lib/domains-services-data-access.ts @@ -224,15 +224,6 @@ export const services = createQueryKeys('services', { return new Promise(() => {}) }, }), - // TODO [To update once rust-backed will be deployed]: To remove - checkRunningStatusClosed: (clusterId: string, environmentId: string) => ({ - queryKey: [clusterId, environmentId], - // NOTE: Value is set by WebSocket - queryFn() { - // eslint-disable-next-line @typescript-eslint/no-empty-function - return new Promise<{ clusterId: string; environmentId: string; reason: string }>(() => {}) - }, - }), metrics: (environmentId: string, serviceId: string) => ({ queryKey: [environmentId, serviceId], // NOTE: Value is set by WebSocket diff --git a/libs/domains/services/feature/src/lib/hooks/use-check-running-status-closed/use-check-running-status-closed.ts b/libs/domains/services/feature/src/lib/hooks/use-check-running-status-closed/use-check-running-status-closed.ts deleted file mode 100644 index 962c7be16e1..00000000000 --- a/libs/domains/services/feature/src/lib/hooks/use-check-running-status-closed/use-check-running-status-closed.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { useQuery } from '@tanstack/react-query' -import { queries } from '@qovery/state/util-queries' - -export interface UseCheckRunningStatusClosedProps { - clusterId: string - environmentId: string -} - -export function useCheckRunningStatusClosed({ clusterId, environmentId }: UseCheckRunningStatusClosedProps) { - return useQuery({ - ...queries.services.checkRunningStatusClosed(clusterId, environmentId), - refetchOnMount: false, - refetchOnWindowFocus: false, - refetchOnReconnect: false, - staleTime: Infinity, - }) -} - -export default useCheckRunningStatusClosed diff --git a/libs/domains/services/feature/src/lib/service-list/service-list.tsx b/libs/domains/services/feature/src/lib/service-list/service-list.tsx index fc6a8f5cbb7..753b8c3ff40 100644 --- a/libs/domains/services/feature/src/lib/service-list/service-list.tsx +++ b/libs/domains/services/feature/src/lib/service-list/service-list.tsx @@ -40,7 +40,6 @@ import { import { APPLICATION_GENERAL_URL, APPLICATION_URL, - CLUSTER_URL, DATABASE_GENERAL_URL, DATABASE_URL, DEPLOYMENT_LOGS_VERSION_URL, @@ -74,7 +73,6 @@ import { twMerge, upperCaseFirstLetter, } from '@qovery/shared/util-js' -import { useCheckRunningStatusClosed } from '../hooks/use-check-running-status-closed/use-check-running-status-closed' import { useListDeploymentStages } from '../hooks/use-list-deployment-stages/use-list-deployment-stages' import { useServices } from '../hooks/use-services/use-services' import { LastCommit } from '../last-commit/last-commit' @@ -334,10 +332,6 @@ export function ServiceList({ environment, className, ...props }: ServiceListPro } = environment const { data: services = [], isLoading: isServicesLoading } = useServices({ environmentId }) const { data: deploymentStages } = useListDeploymentStages({ environmentId }) - const { data: checkRunningStatusClosed } = useCheckRunningStatusClosed({ - clusterId, - environmentId, - }) const [sorting, setSorting] = useState([]) const [rowSelection, setRowSelection] = useState({}) const navigate = useNavigate() @@ -495,27 +489,6 @@ export function ServiceList({ environment, className, ...props }: ServiceListPro .with(undefined, () => info.getValue()) .exhaustive() - // TODO [To update once rust-backed will be deployed]: Remove this workaround - if (checkRunningStatusClosed) { - return ( - - e.stopPropagation()} - className="gap-2 whitespace-nowrap text-sm" - size="md" - color="neutral" - variant="outline" - radius="full" - > - - Status unavailable - - - ) - } - const serviceStatus = match(service) .with({ serviceType: 'DATABASE', mode: 'MANAGED' }, (s) => s.deploymentStatus?.state) .otherwise((s) => s.runningStatus?.state) @@ -779,7 +752,7 @@ export function ServiceList({ environment, className, ...props }: ServiceListPro }, }), ], - [columnHelper, organizationId, projectId, environmentId, navigate, checkRunningStatusClosed, environment] + [columnHelper, organizationId, projectId, environmentId, environment] ) const table = useReactTable({ diff --git a/libs/shared/util-web-sockets/src/lib/use-status-web-sockets/use-status-web-sockets.ts b/libs/shared/util-web-sockets/src/lib/use-status-web-sockets/use-status-web-sockets.ts index 7c6521317d3..d5f28f72a32 100644 --- a/libs/shared/util-web-sockets/src/lib/use-status-web-sockets/use-status-web-sockets.ts +++ b/libs/shared/util-web-sockets/src/lib/use-status-web-sockets/use-status-web-sockets.ts @@ -1,3 +1,4 @@ +import equal from 'fast-deep-equal' import { type EnvironmentStatus, type EnvironmentStatusesWithStages } from 'qovery-typescript-axios' import { type ApplicationStatusDto, @@ -89,14 +90,13 @@ export function useStatusWebSockets({ enabled: Boolean(organizationId) && Boolean(clusterId) && Boolean(projectId), onMessage(queryClient, message: ServiceStatusDto) { for (const env of message.environments) { - // TODO [To update once rust-backed will be deployed]: check against current value and update it only if it has changed (to avoid too many re-render) - queryClient.setQueryData(queries.environments.runningStatus(env.id).queryKey, () => ({ - state: env.state, - })) - // // NOTE: we have to force this reset change because of the way the socket works. - // // You can have information about an service (eg. if it's stopping) - // TODO [To update once rust-backed will be deployed]: Remove reset cache strategy - queryClient.resetQueries([...queries.services.runningStatus._def, env.id]) + // Setting the environment status only if it has changed + const currentEnvironmentStatus = queryClient.getQueryData(queries.environments.runningStatus(env.id).queryKey) + const newEnvironmentStatus = { state: env.state } + if (!equal(newEnvironmentStatus, currentEnvironmentStatus)) { + queryClient.setQueryData(queries.environments.runningStatus(env.id).queryKey, () => newEnvironmentStatus) + } + const services: (ApplicationStatusDto | DatabaseStatusDto | TerraformStatusDto)[] = [ ...env.applications, ...env.containers, @@ -106,30 +106,16 @@ export function useStatusWebSockets({ ...env.terraform, ] for (const serviceRunningStatus of services) { - // TODO [To update once rust-backed will be deployed]: check against current value and update it only if it has changed (to avoid too many re-render) - queryClient.setQueryData( - queries.services.runningStatus(env.id, serviceRunningStatus.id).queryKey, - () => serviceRunningStatus + // Setting the service status only if it has changed + const currentServiceStatus = queryClient.getQueryData( + queries.services.runningStatus(env.id, serviceRunningStatus.id).queryKey ) - } - } - }, - onClose(queryClient, event: CloseEvent) { - // NOTE: API returns a string for the reason, which allows us to know if the status is available or not - // clusterId is required everywhere and environmentId is necessary for the service list - const isNotFound = event.reason.includes('NotFound') || event.reason.includes('not found') - if (isNotFound && clusterId) { - if (environmentId) { - queryClient.setQueryData(queries.services.checkRunningStatusClosed(clusterId, environmentId).queryKey, { - clusterId, - environmentId, - reason: event.reason, - }) - } else { - queryClient.setQueryData(queries.environments.checkRunningStatusClosed(clusterId).queryKey, { - clusterId, - reason: event.reason, - }) + if (!equal(serviceRunningStatus, currentServiceStatus)) { + queryClient.setQueryData( + queries.services.runningStatus(env.id, serviceRunningStatus.id).queryKey, + () => serviceRunningStatus + ) + } } } },