feat(ide): 添加运行ID以支持运行实例追踪

master
钟良源 3 months ago
parent fec2dd2af9
commit 6faa206b8a

@ -21,7 +21,8 @@ import {
updateIsRunning, updateIsRunning,
updateEventListOld, updateEventListOld,
addRuntimeLog, addRuntimeLog,
clearRuntimeLogs clearRuntimeLogs,
updateRuntimeId
} from '@/store/ideContainer'; } from '@/store/ideContainer';
import { import {
validateAllNodes, validateAllNodes,
@ -166,11 +167,11 @@ export const useFlowCallbacks = (
// 查找源节点的dataOuts中对应的数据 // 查找源节点的dataOuts中对应的数据
const sourceDataOut = (sourceParams.dataOuts || []).find((dataOut: any) => const sourceDataOut = (sourceParams.dataOuts || []).find((dataOut: any) =>
dataOut.name === params.sourceHandle || dataOut.id === params.sourceHandle); dataOut.name === params.sourceHandle || dataOut.id === params.sourceHandle);
// 查找目标节点的dataIns中对应的数据 // 查找目标节点的dataIns中对应的数据
const targetDataIn = (targetParams.dataIns || []).find((dataIn: any) => const targetDataIn = (targetParams.dataIns || []).find((dataIn: any) =>
dataIn.name === params.targetHandle || dataIn.id === params.targetHandle); dataIn.name === params.targetHandle || dataIn.id === params.targetHandle);
// 验证数据类型是否一致 // 验证数据类型是否一致
if (sourceDataOut && targetDataIn && sourceDataOut.dataType !== targetDataIn.dataType) { if (sourceDataOut && targetDataIn && sourceDataOut.dataType !== targetDataIn.dataType) {
console.warn('数据类型不匹配,源节点数据类型:', sourceDataOut.dataType, '目标节点数据类型:', targetDataIn.dataType); console.warn('数据类型不匹配,源节点数据类型:', sourceDataOut.dataType, '目标节点数据类型:', targetDataIn.dataType);
@ -1307,36 +1308,45 @@ export const useFlowCallbacks = (
}, [nodes, edges, initialData?.appId]); }, [nodes, edges, initialData?.appId]);
// 运行处理函数 // 运行处理函数
const handleRun = useCallback(async (running: boolean) => { const handleRun = useCallback(async (running: boolean) => {
const { currentAppData, socketId } = store.getState().ideContainer; const { currentAppData, socketId, appRuntimeData } = store.getState().ideContainer;
if (running) { if (running) {
// 启动运行 // 启动运行
const params = { const params = {
appId: currentAppData.id, appId: currentAppData.id,
socketId socketId
}; };
runMainFlow(params); const res: any = await runMainFlow(params);
if (res.code === 200) {
// 设置运行状态为true // 设置运行状态为true
dispatch(updateIsRunning(true)); dispatch(updateIsRunning(true));
// 重置节点状态 // 重置节点状态
dispatch(resetNodeStatus()); dispatch(resetNodeStatus());
// 开始运行时动画 // 更新运行ID
setEdges((eds) => eds.map(edge => ({ dispatch(updateRuntimeId(res.data));
...edge,
data: { // 开始运行时动画
...edge.data, setEdges((eds) => eds.map(edge => ({
isRunning: true, ...edge,
animationProgress: 0 data: {
} ...edge.data,
}))); isRunning: true,
animationProgress: 0
}
})));
}
else {
Message.error(res.message);
}
} }
else { else {
// 设置运行状态为false // 设置运行状态为false
dispatch(updateIsRunning(false)); dispatch(updateIsRunning(false));
stopApp(currentAppData.id); await stopApp(appRuntimeData[currentAppData.id].runId);
// 更新运行ID
dispatch(updateRuntimeId(''));
// 停止运行 // 停止运行
setEdges((eds) => eds.map(edge => ({ setEdges((eds) => eds.map(edge => ({

@ -20,6 +20,7 @@ interface IDEContainerState {
nodeStatusMap: Record<string, string>; nodeStatusMap: Record<string, string>;
isRunning: boolean; isRunning: boolean;
logs: any[]; logs: any[];
runId: string;
}>; }>;
} }
@ -38,7 +39,7 @@ const initialState: IDEContainerState = {
socketId: '', // 工程的socketId socketId: '', // 工程的socketId
nodeStatusMap: {}, // 初始化节点状态映射 nodeStatusMap: {}, // 初始化节点状态映射
isRunning: false, // 默认未运行 isRunning: false, // 默认未运行
appRuntimeData: {}, // 按应用ID隔离的应用运行状态和日志数据 appRuntimeData: {} // 按应用ID隔离的应用运行状态和日志数据
}; };
// 创建切片 // 创建切片
@ -85,11 +86,12 @@ const ideContainerSlice = createSlice({
// 如果是运行时更新,不记录到历史记录中 // 如果是运行时更新,不记录到历史记录中
if (actionType !== 'RUNTIME_UPDATE') { if (actionType !== 'RUNTIME_UPDATE') {
state.nodeStatusMap[nodeId] = status; state.nodeStatusMap[nodeId] = status;
} else { }
else {
// 对于运行时更新,我们仍然更新状态但标记为运行时状态 // 对于运行时更新,我们仍然更新状态但标记为运行时状态
state.nodeStatusMap[nodeId] = status; state.nodeStatusMap[nodeId] = status;
} }
// 同时更新当前应用的节点状态 // 同时更新当前应用的节点状态
const appId = state.currentAppData?.id; const appId = state.currentAppData?.id;
if (appId) { if (appId) {
@ -97,7 +99,8 @@ const ideContainerSlice = createSlice({
state.appRuntimeData[appId] = { state.appRuntimeData[appId] = {
nodeStatusMap: {}, nodeStatusMap: {},
isRunning: false, isRunning: false,
logs: [] logs: [],
runId: ''
}; };
} }
state.appRuntimeData[appId].nodeStatusMap[nodeId] = status; state.appRuntimeData[appId].nodeStatusMap[nodeId] = status;
@ -106,7 +109,7 @@ const ideContainerSlice = createSlice({
// 重置节点状态 // 重置节点状态
resetNodeStatus: (state) => { resetNodeStatus: (state) => {
state.nodeStatusMap = {}; state.nodeStatusMap = {};
// 同时重置当前应用的节点状态 // 同时重置当前应用的节点状态
const appId = state.currentAppData?.id; const appId = state.currentAppData?.id;
if (appId && state.appRuntimeData[appId]) { if (appId && state.appRuntimeData[appId]) {
@ -116,7 +119,7 @@ const ideContainerSlice = createSlice({
// 更新运行状态 // 更新运行状态
updateIsRunning: (state, { payload }) => { updateIsRunning: (state, { payload }) => {
state.isRunning = payload; state.isRunning = payload;
// 同时更新当前应用的运行状态 // 同时更新当前应用的运行状态
const appId = state.currentAppData?.id; const appId = state.currentAppData?.id;
if (appId) { if (appId) {
@ -124,12 +127,26 @@ const ideContainerSlice = createSlice({
state.appRuntimeData[appId] = { state.appRuntimeData[appId] = {
nodeStatusMap: {}, nodeStatusMap: {},
isRunning: false, isRunning: false,
logs: [] logs: [],
runId: ''
}; };
} }
state.appRuntimeData[appId].isRunning = payload; state.appRuntimeData[appId].isRunning = payload;
} }
}, },
// 添加运行id
updateRuntimeId: (state, { payload }) => {
const appId = state.currentAppData?.id;
if (!state.appRuntimeData[appId]) {
state.appRuntimeData[appId] = {
nodeStatusMap: {},
isRunning: false,
logs: [],
runId: ''
};
}
state.appRuntimeData[appId].runId = payload;
},
// 添加运行日志 // 添加运行日志
addRuntimeLog: (state, { payload }) => { addRuntimeLog: (state, { payload }) => {
const { log, appId } = payload; const { log, appId } = payload;
@ -137,7 +154,8 @@ const ideContainerSlice = createSlice({
state.appRuntimeData[appId] = { state.appRuntimeData[appId] = {
nodeStatusMap: {}, nodeStatusMap: {},
isRunning: false, isRunning: false,
logs: [] logs: [],
runId: ''
}; };
} }
state.appRuntimeData[appId].logs.push(log); state.appRuntimeData[appId].logs.push(log);
@ -168,6 +186,7 @@ export const {
updateNodeStatus, updateNodeStatus,
resetNodeStatus, resetNodeStatus,
updateIsRunning, updateIsRunning,
updateRuntimeId,
addRuntimeLog, addRuntimeLog,
clearRuntimeLogs clearRuntimeLogs
} = ideContainerSlice.actions; } = ideContainerSlice.actions;

Loading…
Cancel
Save