diff --git a/app/runtime/config.py b/app/runtime/config.py index 9305ca3a4..6287dde96 100644 --- a/app/runtime/config.py +++ b/app/runtime/config.py @@ -194,6 +194,8 @@ class ConfigModel(BaseModel): DATA_CLEANUP_SITE_USERDATA_DAYS: int = 180 # 整理历史表保留天数,0为不清理 DATA_CLEANUP_TRANSFER_HISTORY_DAYS: int = 365 * 3 + # 下载失败冷却记录保留天数,0为不清理 + DATA_CLEANUP_DOWNLOAD_FAILURE_DAYS: int = 7 # ==================== 缓存配置 ==================== # 缓存类型,支持 cachetools 和 redis,默认使用 cachetools diff --git a/app/scheduler.py b/app/scheduler.py index 21123c7d8..342b1950c 100644 --- a/app/scheduler.py +++ b/app/scheduler.py @@ -31,6 +31,7 @@ from app.runtime.extensions.plugin_manager import PluginManager from app.db import SessionFactory from app.db.oper.agenttask import AgentTaskOper from app.db.models.downloadhistory import DownloadHistory, DownloadFiles +from app.db.models.downloadfailure import DownloadFailure from app.db.models.message import Message as MessageModel from app.db.models.siteuserdata import SiteUserData from app.db.models.transferhistory import TransferHistory @@ -180,6 +181,9 @@ class SchedulerChain(ChainBase): transfer_history_days = self._normalize_retention_days( settings.DATA_CLEANUP_TRANSFER_HISTORY_DAYS ) + download_failure_days = self._normalize_retention_days( + settings.DATA_CLEANUP_DOWNLOAD_FAILURE_DAYS + ) message_cutoff = ( started_at - timedelta(days=message_days) @@ -193,6 +197,9 @@ class SchedulerChain(ChainBase): transfer_history_cutoff = ( started_at - timedelta(days=transfer_history_days) ).strftime("%Y-%m-%d") + download_failure_cutoff = ( + started_at - timedelta(days=download_failure_days) + ).strftime("%Y-%m-%d %H:%M:%S") return [ { @@ -244,6 +251,16 @@ class SchedulerChain(ChainBase): limit=batch_size, ), }, + { + "name": "downloadfailure", + "retention_days": download_failure_days, + "cutoff": download_failure_cutoff, + "handler": lambda db: DownloadFailure.delete_expired( + db=db, + before_time=download_failure_cutoff, + limit=batch_size, + ), + }, ] @staticmethod