diff --git a/src/backend/app/controllers/task_controller.py b/src/backend/app/controllers/task_controller.py index 4741991..0a30e7e 100644 --- a/src/backend/app/controllers/task_controller.py +++ b/src/backend/app/controllers/task_controller.py @@ -15,6 +15,10 @@ from app.database import ( from app.services.task_service import TaskService from app.services.image_service import ImageService +import os +import glob +from config.algorithm_config import AlgorithmConfig + task_bp = Blueprint('task', __name__) @@ -65,6 +69,33 @@ def get_task_status(task_id, current_user_id): return jsonify(status), 200 +@task_bp.route('//logs', methods=['GET']) +@int_jwt_required +def get_task_logs(task_id, current_user_id): + """获取任务日志""" + task = Task.query.get(task_id) + if not TaskService.ensure_task_owner(task, current_user_id): + return TaskService.json_error('任务不存在或无权限', 404) + + log_dir = AlgorithmConfig.LOGS_DIR + # 匹配模式:*task_{task_id}_*.log + pattern = os.path.join(log_dir, f'*task_{task_id}_*.log') + log_files = glob.glob(pattern) + + if not log_files: + return jsonify({'logs': '暂无日志'}), 200 + + # 如果有多个,取修改时间最新的一个 + latest_log = max(log_files, key=os.path.getmtime) + + try: + with open(latest_log, 'r', encoding='utf-8') as f: + content = f.read() + return jsonify({'logs': content}), 200 + except Exception as e: + return TaskService.json_error(f'读取日志失败: {str(e)}', 500) + + @task_bp.route('//cancel', methods=['POST']) @int_jwt_required def cancel_task(task_id, current_user_id):