001project_wildgrowth/backend/scripts/check-task-status.ts

123 lines
3.8 KiB
TypeScript
Raw Permalink Normal View History

2026-02-11 15:26:03 +08:00
/**
*
*
*
* 使
* npx ts-node scripts/check-task-status.ts [taskId]
* taskId
*/
import { PrismaClient } from '@prisma/client';
import dotenv from 'dotenv';
dotenv.config();
const prisma = new PrismaClient();
async function checkTaskStatus(taskId?: string) {
try {
if (taskId) {
// 查询指定任务
const task = await prisma.courseGenerationTask.findUnique({
where: { id: taskId },
include: {
course: {
select: {
id: true,
title: true,
status: true,
},
},
user: {
select: {
id: true,
phone: true,
nickname: true,
},
},
},
});
if (!task) {
console.log(`❌ 任务不存在: ${taskId}`);
return;
}
console.log('\n=== 任务详情 ===');
console.log(`任务ID: ${task.id}`);
console.log(`课程ID: ${task.courseId}`);
console.log(`课程标题: ${task.course.title}`);
console.log(`用户ID: ${task.userId}`);
console.log(`用户: ${task.user.nickname || task.user.phone || 'N/A'}`);
console.log(`状态: ${task.status}`);
console.log(`进度: ${task.progress}%`);
console.log(`当前步骤: ${task.currentStep || 'N/A'}`);
console.log(`错误信息: ${task.errorMessage || 'N/A'}`);
console.log(`来源类型: ${task.sourceType || 'N/A'}`);
console.log(`导师类型: ${task.persona || 'N/A'}`);
console.log(`创建时间: ${task.createdAt}`);
console.log(`更新时间: ${task.updatedAt}`);
console.log(`运行时长: ${Math.floor((Date.now() - task.createdAt.getTime()) / 1000 / 60)} 分钟`);
if (task.status !== 'completed' && task.status !== 'failed') {
const minutesSinceUpdate = Math.floor((Date.now() - task.updatedAt.getTime()) / 1000 / 60);
if (minutesSinceUpdate > 5) {
console.log(`⚠️ 警告: 任务已 ${minutesSinceUpdate} 分钟未更新,可能已卡住`);
}
}
} else {
// 查询所有进行中的任务
const tasks = await prisma.courseGenerationTask.findMany({
where: {
status: {
notIn: ['completed', 'failed'],
},
},
include: {
course: {
select: {
id: true,
title: true,
},
},
},
orderBy: {
createdAt: 'desc',
},
});
if (tasks.length === 0) {
console.log('✅ 没有进行中的任务');
return;
}
console.log(`\n=== 进行中的任务 (共 ${tasks.length} 个) ===\n`);
for (const task of tasks) {
const minutesSinceUpdate = Math.floor((Date.now() - task.updatedAt.getTime()) / 1000 / 60);
const minutesSinceCreate = Math.floor((Date.now() - task.createdAt.getTime()) / 1000 / 60);
console.log(`任务ID: ${task.id}`);
console.log(`课程: ${task.course.title} (${task.courseId})`);
console.log(`状态: ${task.status} | 进度: ${task.progress}%`);
console.log(`创建时间: ${task.createdAt} (${minutesSinceCreate} 分钟前)`);
console.log(`更新时间: ${task.updatedAt} (${minutesSinceUpdate} 分钟前)`);
if (minutesSinceUpdate > 5) {
console.log(`⚠️ 警告: 已 ${minutesSinceUpdate} 分钟未更新,可能已卡住`);
}
console.log('---');
}
}
} catch (error: any) {
console.error('❌ 查询失败:', error.message);
} finally {
await prisma.$disconnect();
}
}
// 从命令行参数获取 taskId
const taskId = process.argv[2];
checkTaskStatus(taskId);