|
|
@@ -8,6 +8,9 @@ import { useServerStore } from './server';
|
|
|
import request from '@/api/request';
|
|
|
|
|
|
export const useTaskQueueStore = defineStore('taskQueue', () => {
|
|
|
+ // 最多保留200条任务,超过删除最旧的已完成/失败/取消任务
|
|
|
+ const MAX_TASKS = 200;
|
|
|
+
|
|
|
// 状态
|
|
|
const tasks = ref<Task[]>([]);
|
|
|
const isDialogVisible = ref(false);
|
|
|
@@ -537,26 +540,40 @@ export const useTaskQueueStore = defineStore('taskQueue', () => {
|
|
|
rebuildTaskIndex();
|
|
|
}
|
|
|
|
|
|
- // 自动清理老旧任务(保留最近100个已完成任务)
|
|
|
+ // 自动清理老旧任务(限制总任务数不超过 MAX_TASKS)
|
|
|
function autoCleanupTasks() {
|
|
|
- const completedTasks = tasks.value.filter(t =>
|
|
|
+ if (tasks.value.length <= MAX_TASKS) return;
|
|
|
+
|
|
|
+ // 分离活跃任务和已完成/失败/取消的任务
|
|
|
+ const activeTasks = tasks.value.filter(t =>
|
|
|
+ t.status === 'pending' || t.status === 'running'
|
|
|
+ );
|
|
|
+ const oldTasks = tasks.value.filter(t =>
|
|
|
t.status === 'completed' || t.status === 'failed' || t.status === 'cancelled'
|
|
|
);
|
|
|
-
|
|
|
- // 如果已完成任务超过100个,只保留最新的100个
|
|
|
- if (completedTasks.length > 100) {
|
|
|
- const sortedCompleted = completedTasks.sort((a, b) =>
|
|
|
- new Date(b.createdAt || 0).getTime() - new Date(a.createdAt || 0).getTime()
|
|
|
- );
|
|
|
-
|
|
|
- const toKeep = sortedCompleted.slice(0, 100);
|
|
|
- const activeTasks = tasks.value.filter(t =>
|
|
|
- t.status === 'pending' || t.status === 'running'
|
|
|
- );
|
|
|
-
|
|
|
- tasks.value = [...activeTasks, ...toKeep];
|
|
|
- console.log(`[TaskQueue] Cleaned up ${completedTasks.length - 100} old completed tasks`);
|
|
|
+
|
|
|
+ // 如果活跃任务已经超过限制,保留所有活跃任务
|
|
|
+ if (activeTasks.length >= MAX_TASKS) {
|
|
|
+ tasks.value = activeTasks.slice(0, MAX_TASKS);
|
|
|
+ console.log(`[TaskQueue] Active tasks exceed limit, trimmed to ${MAX_TASKS}`);
|
|
|
+ return;
|
|
|
}
|
|
|
+
|
|
|
+ // 计算需要保留多少个已完成任务
|
|
|
+ const slotsForCompleted = MAX_TASKS - activeTasks.length;
|
|
|
+
|
|
|
+ // 按时间排序(最新的在前)
|
|
|
+ const sortedOldTasks = oldTasks.sort((a, b) =>
|
|
|
+ new Date(b.createdAt || 0).getTime() - new Date(a.createdAt || 0).getTime()
|
|
|
+ );
|
|
|
+
|
|
|
+ // 合并:所有活跃任务 + 最新的一部分已完成任务
|
|
|
+ tasks.value = [
|
|
|
+ ...activeTasks,
|
|
|
+ ...sortedOldTasks.slice(0, slotsForCompleted)
|
|
|
+ ];
|
|
|
+
|
|
|
+ console.log(`[TaskQueue] Task queue trimmed from ${tasks.value.length + (tasks.value.length - MAX_TASKS)} to ${MAX_TASKS}`);
|
|
|
}
|
|
|
|
|
|
return {
|