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

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

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

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

Loading…
Cancel
Save