diff --git a/app/scheduler/scheduled_tasks.py b/app/scheduler/scheduled_tasks.py index de2413e..7639a42 100644 --- a/app/scheduler/scheduled_tasks.py +++ b/app/scheduler/scheduled_tasks.py @@ -1,4 +1,3 @@ - from apscheduler.schedulers.asyncio import AsyncIOScheduler from app.config.config import settings @@ -6,9 +5,9 @@ from app.domain.gemini_models import GeminiContent, GeminiRequest from app.log.logger import Logger from app.service.chat.gemini_chat_service import GeminiChatService from app.service.error_log.error_log_service import delete_old_error_logs +from app.service.files.files_service import get_files_service from app.service.key.key_manager import get_key_manager_instance from app.service.request_log.request_log_service import delete_old_request_logs_task -from app.service.files.files_service import get_files_service from app.utils.helpers import redact_key_for_logging logger = Logger.setup_logger("scheduler") @@ -106,15 +105,16 @@ async def cleanup_expired_files(): try: files_service = await get_files_service() deleted_count = await files_service.cleanup_expired_files() - + if deleted_count > 0: logger.info(f"Successfully cleaned up {deleted_count} expired files.") else: logger.info("No expired files to clean up.") - + except Exception as e: logger.error( - f"An error occurred during the scheduled file cleanup: {str(e)}", exc_info=True + f"An error occurred during the scheduled file cleanup: {str(e)}", + exc_info=True, ) @@ -122,44 +122,45 @@ def setup_scheduler(): """设置并启动 APScheduler""" scheduler = AsyncIOScheduler(timezone=str(settings.TIMEZONE)) # 从配置读取时区 # 添加检查失败密钥的定时任务 - scheduler.add_job( - check_failed_keys, - "interval", - hours=settings.CHECK_INTERVAL_HOURS, - id="check_failed_keys_job", - name="Check Failed API Keys", - ) - logger.info( - f"Key check job scheduled to run every {settings.CHECK_INTERVAL_HOURS} hour(s)." - ) + if settings.CHECK_INTERVAL_HOURS != 0: + scheduler.add_job( + check_failed_keys, + "interval", + hours=settings.CHECK_INTERVAL_HOURS, + id="check_failed_keys_job", + name="Check Failed API Keys", + ) + logger.info( + f"Key check job scheduled to run every {settings.CHECK_INTERVAL_HOURS} hour(s)." + ) - # 新增:添加自动删除错误日志的定时任务,每天凌晨3点执行 + # 新增:添加自动删除错误日志的定时任务,每天凌晨0点执行 scheduler.add_job( delete_old_error_logs, "cron", - hour=3, + hour=0, minute=0, id="delete_old_error_logs_job", name="Delete Old Error Logs", ) logger.info("Auto-delete error logs job scheduled to run daily at 3:00 AM.") - # 新增:添加自动删除请求日志的定时任务,每天凌晨3点05分执行 + # 新增:添加自动删除请求日志的定时任务,每天凌晨0点执行 scheduler.add_job( delete_old_request_logs_task, "cron", - hour=3, - minute=5, + hour=0, + minute=0, id="delete_old_request_logs_job", name="Delete Old Request Logs", ) logger.info( f"Auto-delete request logs job scheduled to run daily at 3:05 AM, if enabled and AUTO_DELETE_REQUEST_LOGS_DAYS is set to {settings.AUTO_DELETE_REQUEST_LOGS_DAYS} days." ) - + # 新增:添加文件过期清理的定时任务,每小时执行一次 - if getattr(settings, 'FILES_CLEANUP_ENABLED', True): - cleanup_interval = getattr(settings, 'FILES_CLEANUP_INTERVAL_HOURS', 1) + if getattr(settings, "FILES_CLEANUP_ENABLED", True): + cleanup_interval = getattr(settings, "FILES_CLEANUP_INTERVAL_HOURS", 1) scheduler.add_job( cleanup_expired_files, "interval", diff --git a/app/service/error_log/error_log_service.py b/app/service/error_log/error_log_service.py index 8707b5d..2e1288c 100644 --- a/app/service/error_log/error_log_service.py +++ b/app/service/error_log/error_log_service.py @@ -1,4 +1,4 @@ -from datetime import datetime, timedelta, timezone +from datetime import datetime, timedelta from typing import Any, Dict, List, Optional from sqlalchemy import delete, func, select @@ -28,7 +28,7 @@ async def delete_old_error_logs(): ) return - cutoff_date = datetime.now(timezone.utc) - timedelta(days=days_to_keep) + cutoff_date = datetime.now() - timedelta(days=days_to_keep) logger.info( f"Attempting to delete error logs older than {days_to_keep} days (before {cutoff_date.strftime('%Y-%m-%d %H:%M:%S %Z')})." diff --git a/app/service/request_log/request_log_service.py b/app/service/request_log/request_log_service.py index 2356173..0e2997e 100644 --- a/app/service/request_log/request_log_service.py +++ b/app/service/request_log/request_log_service.py @@ -2,12 +2,12 @@ Service for request log operations. """ -from datetime import datetime, timedelta, timezone +from datetime import datetime, timedelta from sqlalchemy import delete -from app.database.connection import database from app.config.config import settings +from app.database.connection import database from app.database.models import RequestLog from app.log.logger import get_request_log_logger @@ -30,7 +30,7 @@ async def delete_old_request_logs_task(): ) try: - cutoff_date = datetime.now(timezone.utc) - timedelta(days=days_to_keep) + cutoff_date = datetime.now() - timedelta(days=days_to_keep) query = delete(RequestLog).where(RequestLog.request_time < cutoff_date) diff --git a/app/static/js/config_editor.js b/app/static/js/config_editor.js index 93b5678..45a58bd 100644 --- a/app/static/js/config_editor.js +++ b/app/static/js/config_editor.js @@ -104,6 +104,24 @@ document.addEventListener("DOMContentLoaded", function () { }); } + // 检查间隔小时数输入控制 + const checkIntervalInput = document.getElementById("CHECK_INTERVAL_HOURS"); + if (checkIntervalInput) { + checkIntervalInput.addEventListener("input", function () { + let value = parseFloat(this.value); + if (isNaN(value) || value < 0) { + this.value = 0; + } + }); + + checkIntervalInput.addEventListener("change", function () { + let value = parseFloat(this.value); + if (isNaN(value) || value < 0) { + this.value = 0; + } + }); + } + // Toggle switch events const toggleSwitches = document.querySelectorAll(".toggle-switch"); toggleSwitches.forEach((toggleSwitch) => { diff --git a/app/templates/config_editor.html b/app/templates/config_editor.html index 5d067fe..bfbd7ef 100644 --- a/app/templates/config_editor.html +++ b/app/templates/config_editor.html @@ -1416,25 +1416,31 @@ endblock %} {% block head_extra_styles %} -
- -
- +
+
+ class="font-semibold text-gray-700" + >启用代码执行工具 +
+ + +
+
+
+ + 启用代码执行工具与大多数工具调用冲突,不建议开启
@@ -2007,25 +2013,31 @@ endblock %} {% block head_extra_styles %} -
- -
- +
+
+ class="font-semibold text-gray-700" + >启用流式输出优化 +
+ + +
+
+
+ + 开启流式优化会在一定程度上减速返回,不建议开启
@@ -2185,31 +2197,18 @@ endblock %} {% block head_extra_styles %} for="CHECK_INTERVAL_HOURS" class="block font-semibold mb-2 text-gray-700" >检查间隔(小时) - +
- -
- - -