diff --git a/src/components/logs-viewer/xterm-viewer.tsx b/src/components/logs-viewer/xterm-viewer.tsx index cea7e1c4..ac3cfbd9 100644 --- a/src/components/logs-viewer/xterm-viewer.tsx +++ b/src/components/logs-viewer/xterm-viewer.tsx @@ -95,7 +95,7 @@ const LogsViewer: React.FC = forwardRef((props, ref) => { const createChunkConnection = async () => { chunkRequedtRef.current?.current?.cancel?.(); - chunkRequedtRef.current = setChunkRequest({ + chunkRequedtRef.current = await setChunkRequest({ url, params: { ...props.params, diff --git a/src/hooks/use-chunk-request.ts b/src/hooks/use-chunk-request.ts index 57fab24a..3fa7ea2c 100644 --- a/src/hooks/use-chunk-request.ts +++ b/src/hooks/use-chunk-request.ts @@ -166,11 +166,11 @@ const useSetChunkRequest = () => { return axiosToken.current; }; - const setChunkRequest = (config: RequestConfig) => { + const setChunkRequest = async (config: RequestConfig) => { requestConfig.current = { ...particalConfig, ...config }; retryCount.current = totalCount; clearTimeout(timer.current); - axiosChunkRequest(requestConfig.current); + await axiosChunkRequest(requestConfig.current); return axiosToken; }; diff --git a/src/hooks/use-table-fetch.ts b/src/hooks/use-table-fetch.ts index 6ab059cf..9911bc31 100644 --- a/src/hooks/use-table-fetch.ts +++ b/src/hooks/use-table-fetch.ts @@ -117,7 +117,7 @@ export default function useTableFetch( try { const query = _.omit(params || queryParams, ['page', 'perPage']); - chunkRequedtRef.current = setChunkRequest({ + chunkRequedtRef.current = await setChunkRequest({ url: `${API}?${qs.stringify(_.pickBy(query, (val: any) => !!val))}`, handler: updateHandler }); diff --git a/src/hooks/use-watch-list.ts b/src/hooks/use-watch-list.ts index dc62e8c3..c57b7a59 100644 --- a/src/hooks/use-watch-list.ts +++ b/src/hooks/use-watch-list.ts @@ -30,7 +30,7 @@ export default function useWatchList>(API: string) { const createWatchChunkRequest = useMemoizedFn(async () => { chunkRequestRef.current?.current?.cancel?.(); try { - chunkRequestRef.current = setChunkRequest({ + chunkRequestRef.current = await setChunkRequest({ url: `${watchAPI}`, params: {}, handler: updateWatchDataListHandler diff --git a/src/pages/cluster-management/components/add-worker/add-worker-step.tsx b/src/pages/cluster-management/components/add-worker/add-worker-step.tsx index 1178343d..393b6527 100644 --- a/src/pages/cluster-management/components/add-worker/add-worker-step.tsx +++ b/src/pages/cluster-management/components/add-worker/add-worker-step.tsx @@ -64,17 +64,11 @@ const AddWorkerSteps: React.FC = (props) => { const [collapseKey, setCollapseKey] = React.useState>( new Set([stepList[0]]) ); - const startWatchRef = React.useRef(false); const { update, summary, register } = useSummaryStatus(); - const { addedCount, createModelsChunkRequest } = useAddWorkerMessage({ - startWatch: startWatchRef - }); + const { addedCount, createModelsChunkRequest } = useAddWorkerMessage(); const onToggle = (open: boolean, key: string) => { setCollapseKey(open ? new Set([key]) : new Set()); - if (key === StepNamesMap.RunCommand && open) { - startWatchRef.current = true; - } }; const handleOnClusterChange = (value: number, row?: any) => { diff --git a/src/pages/cluster-management/components/add-worker/index.tsx b/src/pages/cluster-management/components/add-worker/index.tsx index 717fe797..99f3c967 100644 --- a/src/pages/cluster-management/components/add-worker/index.tsx +++ b/src/pages/cluster-management/components/add-worker/index.tsx @@ -58,10 +58,7 @@ const AddWorker: React.FC = (props) => { stepList = [] } = props || {}; const intl = useIntl(); - const startWatchRef = React.useRef(false); - const { addedCount, createModelsChunkRequest } = useAddWorkerMessage({ - startWatch: startWatchRef - }); + const { addedCount, createModelsChunkRequest } = useAddWorkerMessage(); const firstLoad = React.useRef(true); const [registrationInfo, setRegistrationInfo] = React.useState<{ token: string; @@ -83,7 +80,6 @@ const AddWorker: React.FC = (props) => { ...data, cluster_id: value }); - startWatchRef.current = true; } catch (error) { firstLoad.current = false; } diff --git a/src/pages/cluster-management/hooks/use-add-worker-message.ts b/src/pages/cluster-management/hooks/use-add-worker-message.ts index d32ebc73..86d7b233 100644 --- a/src/pages/cluster-management/hooks/use-add-worker-message.ts +++ b/src/pages/cluster-management/hooks/use-add-worker-message.ts @@ -1,15 +1,15 @@ import useSetChunkRequest from '@/hooks/use-chunk-request'; import useUpdateChunkedList from '@/hooks/use-update-chunk-list'; import _ from 'lodash'; -import { useRef, useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; import { WORKERS_API } from '../../resources/apis'; -export default function useAddWorkerMessage(params: { - startWatch?: React.RefObject; -}) { +export default function useAddWorkerMessage() { const chunkRequestRef = useRef(null); const newItemsRef = useRef([]); const [addedCount, setAddedCount] = useState(0); + const startWatchRef = useRef(false); + const timerRef = useRef(null); const showAddWorkerMessage = () => { if (newItemsRef.current.length > 0) { @@ -23,7 +23,7 @@ export default function useAddWorkerMessage(params: { events: ['CREATE', 'INSERT'], dataList: [], onCreate: (newItems: any) => { - if (params.startWatch?.current) { + if (startWatchRef.current) { newItemsRef.current = newItemsRef.current.concat(newItems); console.log('newItemsRef.current:', newItemsRef.current); showAddWorkerMessage(); @@ -37,18 +37,38 @@ export default function useAddWorkerMessage(params: { }); }; + const resetAddedCount = () => { + setAddedCount(0); + newItemsRef.current = []; + startWatchRef.current = false; + clearTimeout(timerRef.current); + }; + const createModelsChunkRequest = async () => { chunkRequestRef.current?.current?.cancel?.(); + resetAddedCount(); try { - chunkRequestRef.current = setChunkRequest({ + chunkRequestRef.current = await setChunkRequest({ url: WORKERS_API, handler: updateHandler }); + timerRef.current = setTimeout(() => { + startWatchRef.current = true; + }, 1000); } catch (error) { // ignore } }; + useEffect(() => { + return () => { + chunkRequestRef.current?.current?.cancel?.(); + startWatchRef.current = false; + newItemsRef.current = []; + clearTimeout(timerRef.current); + }; + }, []); + return { addedCount, createModelsChunkRequest diff --git a/src/pages/dashboard/hooks/use-add-resource.tsx b/src/pages/dashboard/hooks/use-add-resource.tsx index 18c3e84d..430396ff 100644 --- a/src/pages/dashboard/hooks/use-add-resource.tsx +++ b/src/pages/dashboard/hooks/use-add-resource.tsx @@ -1,8 +1,11 @@ +import { clusterSessionAtom } from '@/atoms/clusters'; import IconFont from '@/components/icon-font'; import ScrollerModal from '@/components/scroller-modal/index'; +import { PageAction } from '@/config'; import useClusterList from '@/pages/cluster-management/hooks/use-cluster-list'; import { useIntl, useNavigate } from '@umijs/max'; import { Button } from 'antd'; +import { useAtom } from 'jotai'; import { useMemo, useState } from 'react'; import styled from 'styled-components'; @@ -53,6 +56,7 @@ const Content = styled.div` export default function useAddResource() { const intl = useIntl(); const navigate = useNavigate(); + const [, setClusterSession] = useAtom(clusterSessionAtom); const { fetchAll, clusterList, workerList, clustersAtom, workersAtom } = useClusterList(); @@ -87,7 +91,27 @@ export default function useAddResource() { return isNoResource && !hiddenModal; }, [isNoResource, hiddenModal]); - const handleCreate = () => {}; + const handleCreate = () => { + if (clusterList.length === 0) { + setClusterSession({ + firstAddWorker: false, + firstAddCluster: true + }); + + navigate( + `/cluster-management/clusters/create?action=${PageAction.CREATE}` + ); + return; + } + + if (workerList.length === 0) { + setClusterSession({ + firstAddWorker: true, + firstAddCluster: false + }); + navigate(`/cluster-management/clusters/list`); + } + }; const handleCancel = () => { setHiddenModal(true); diff --git a/src/pages/llmodels/components/view-logs-modal.tsx b/src/pages/llmodels/components/view-logs-modal.tsx index 5393ae82..e26b99f3 100644 --- a/src/pages/llmodels/components/view-logs-modal.tsx +++ b/src/pages/llmodels/components/view-logs-modal.tsx @@ -72,9 +72,11 @@ const ViewLogsModal: React.FC = (props) => { if (!props.id) return; if (open) { requestRef.current?.current?.cancel?.(); - requestRef.current = setChunkRequest({ + setChunkRequest({ url: `${MODELS_API}/${props.modelId}/instances`, handler: updateHandler + }).then((res) => { + requestRef.current = res; }); } else { logsViewerRef.current?.abort(); diff --git a/src/pages/llmodels/index.tsx b/src/pages/llmodels/index.tsx index b19c4068..7071aefd 100644 --- a/src/pages/llmodels/index.tsx +++ b/src/pages/llmodels/index.tsx @@ -201,7 +201,7 @@ const Models: React.FC = () => { search: search, categories: categories }; - chunkRequedtRef.current = setChunkRequest({ + chunkRequedtRef.current = await setChunkRequest({ url: `${MODELS_API}?${qs.stringify(_.pickBy(query, (val: any) => !!val))}`, handler: updateHandler });