mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-08-28 19:47:49 +08:00
feat(settings): expose data retention controls
This commit is contained in:
@@ -2317,6 +2317,19 @@ export default {
|
||||
dataCleanupSiteUserDataDaysHint: 'Unit: days. Set to 0 to skip cleanup for the site user data table',
|
||||
dataCleanupTransferHistoryDays: 'Transfer History Retention Days',
|
||||
dataCleanupTransferHistoryDaysHint: 'Unit: days. Set to 0 to skip cleanup for the transfer history table',
|
||||
dataCleanupDownloadFailureDays: 'Download Failure Retention Days',
|
||||
dataCleanupDownloadFailureDaysHint: 'Unit: days. Set to 0 to keep all download failure cooldown records',
|
||||
dataCleanupSubscribeHistoryDays: 'Subscription History Retention Days',
|
||||
dataCleanupSubscribeHistoryDaysHint: 'Unit: days. Set to 0 to keep all completed subscription history',
|
||||
dataCleanupAgentChatDays: 'Agent Chat Retention Days',
|
||||
dataCleanupAgentChatDaysHint:
|
||||
'Unit: days. Set to 0 to keep all chats. Chats referenced by scheduled tasks are preserved',
|
||||
dataCleanupAgentTaskRunDays: 'Agent Task Run Retention Days',
|
||||
dataCleanupAgentTaskRunDaysHint: 'Unit: days. Set to 0 to keep all runs. Running and latest runs are preserved',
|
||||
dataCleanupOutboxCompletedDays: 'Completed Outbox Retention Days',
|
||||
dataCleanupOutboxCompletedDaysHint: 'Unit: days. Set to 0 to keep all successfully delivered durable events',
|
||||
dataCleanupOutboxDeadDays: 'Dead Outbox Retention Days',
|
||||
dataCleanupOutboxDeadDaysHint: 'Unit: days. Set to 0 to keep all durable events that exhausted their retries',
|
||||
downloadFilesCleanupNotice:
|
||||
'The download files table has no independent timestamp field. Its orphan record cleanup follows the retention period of download history.',
|
||||
pluginAutoReload: 'Plugin Hot Reload',
|
||||
|
||||
@@ -2283,6 +2283,18 @@ export default {
|
||||
dataCleanupSiteUserDataDaysHint: '单位:天,0 表示不清理站点用户数据表',
|
||||
dataCleanupTransferHistoryDays: '整理历史表保留天数',
|
||||
dataCleanupTransferHistoryDaysHint: '单位:天,0 表示不清理整理历史表',
|
||||
dataCleanupDownloadFailureDays: '下载失败记录保留天数',
|
||||
dataCleanupDownloadFailureDaysHint: '单位:天,0 表示不清理下载失败冷却记录',
|
||||
dataCleanupSubscribeHistoryDays: '订阅历史表保留天数',
|
||||
dataCleanupSubscribeHistoryDaysHint: '单位:天,0 表示保留全部已完成订阅历史',
|
||||
dataCleanupAgentChatDays: 'Agent 会话历史保留天数',
|
||||
dataCleanupAgentChatDaysHint: '单位:天,0 表示保留全部会话;定时任务引用的会话不会清理',
|
||||
dataCleanupAgentTaskRunDays: 'Agent 任务运行历史保留天数',
|
||||
dataCleanupAgentTaskRunDaysHint: '单位:天,0 表示保留全部运行历史;运行中和最后一次运行不会清理',
|
||||
dataCleanupOutboxCompletedDays: 'Outbox 已完成记录保留天数',
|
||||
dataCleanupOutboxCompletedDaysHint: '单位:天,0 表示不清理已成功投递的可靠事件记录',
|
||||
dataCleanupOutboxDeadDays: 'Outbox 死信记录保留天数',
|
||||
dataCleanupOutboxDeadDaysHint: '单位:天,0 表示不清理重试耗尽的可靠事件记录',
|
||||
downloadFilesCleanupNotice: '下载文件表没有独立时间字段,会跟随下载历史表的保留周期清理其孤儿记录。',
|
||||
pluginAutoReload: '插件热加载',
|
||||
pluginAutoReloadHint: '修改插件文件后自动重新加载,开发插件时使用',
|
||||
|
||||
@@ -2282,6 +2282,18 @@ export default {
|
||||
dataCleanupSiteUserDataDaysHint: '單位:天,0 表示不清理站點用戶數據表',
|
||||
dataCleanupTransferHistoryDays: '整理歷史表保留天數',
|
||||
dataCleanupTransferHistoryDaysHint: '單位:天,0 表示不清理整理歷史表',
|
||||
dataCleanupDownloadFailureDays: '下載失敗記錄保留天數',
|
||||
dataCleanupDownloadFailureDaysHint: '單位:天,0 表示不清理下載失敗冷卻記錄',
|
||||
dataCleanupSubscribeHistoryDays: '訂閱歷史表保留天數',
|
||||
dataCleanupSubscribeHistoryDaysHint: '單位:天,0 表示保留全部已完成訂閱歷史',
|
||||
dataCleanupAgentChatDays: 'Agent 會話歷史保留天數',
|
||||
dataCleanupAgentChatDaysHint: '單位:天,0 表示保留全部會話;定時任務引用的會話不會清理',
|
||||
dataCleanupAgentTaskRunDays: 'Agent 任務運行歷史保留天數',
|
||||
dataCleanupAgentTaskRunDaysHint: '單位:天,0 表示保留全部運行歷史;運行中和最後一次運行不會清理',
|
||||
dataCleanupOutboxCompletedDays: 'Outbox 已完成記錄保留天數',
|
||||
dataCleanupOutboxCompletedDaysHint: '單位:天,0 表示不清理已成功投遞的可靠事件記錄',
|
||||
dataCleanupOutboxDeadDays: 'Outbox 死信記錄保留天數',
|
||||
dataCleanupOutboxDeadDaysHint: '單位:天,0 表示不清理重試耗盡的可靠事件記錄',
|
||||
downloadFilesCleanupNotice: '下載文件表沒有獨立時間欄位,會跟隨下載歷史表的保留週期清理其孤兒記錄。',
|
||||
pluginAutoReload: '插件熱加載',
|
||||
pluginAutoReloadHint: '修改插件文件後自動重新加載,開發插件時使用',
|
||||
|
||||
@@ -101,6 +101,12 @@ const SystemSettings = ref<any>({
|
||||
DATA_CLEANUP_DOWNLOAD_HISTORY_DAYS: 180,
|
||||
DATA_CLEANUP_SITE_USERDATA_DAYS: 180,
|
||||
DATA_CLEANUP_TRANSFER_HISTORY_DAYS: 365 * 3,
|
||||
DATA_CLEANUP_DOWNLOAD_FAILURE_DAYS: 7,
|
||||
DATA_CLEANUP_SUBSCRIBE_HISTORY_DAYS: 365 * 3,
|
||||
DATA_CLEANUP_AGENT_CHAT_DAYS: 180,
|
||||
DATA_CLEANUP_AGENT_TASK_RUN_DAYS: 180,
|
||||
DATA_CLEANUP_OUTBOX_COMPLETED_DAYS: 30,
|
||||
DATA_CLEANUP_OUTBOX_DEAD_DAYS: 90,
|
||||
// 本地数据库备份策略同时适用于 SQLite 与 PostgreSQL。
|
||||
DB_BACKUP_ENABLE: false,
|
||||
DB_BACKUP_CRON: '0 3 * * *',
|
||||
@@ -2695,6 +2701,84 @@ watch(currentLlmSnapshotKey, (snapshotKey, previousSnapshotKey) => {
|
||||
prepend-inner-icon="mdi-swap-horizontal"
|
||||
/>
|
||||
</VCol>
|
||||
<VCol cols="12" md="6">
|
||||
<VTextField
|
||||
v-model.number="SystemSettings.Advanced.DATA_CLEANUP_DOWNLOAD_FAILURE_DAYS"
|
||||
:label="t('setting.system.dataCleanupDownloadFailureDays')"
|
||||
:hint="t('setting.system.dataCleanupDownloadFailureDaysHint')"
|
||||
persistent-hint
|
||||
min="0"
|
||||
type="number"
|
||||
:suffix="t('setting.system.day')"
|
||||
:rules="dataCleanupFieldRules"
|
||||
prepend-inner-icon="mdi-alert-circle-outline"
|
||||
/>
|
||||
</VCol>
|
||||
<VCol cols="12" md="6">
|
||||
<VTextField
|
||||
v-model.number="SystemSettings.Advanced.DATA_CLEANUP_SUBSCRIBE_HISTORY_DAYS"
|
||||
:label="t('setting.system.dataCleanupSubscribeHistoryDays')"
|
||||
:hint="t('setting.system.dataCleanupSubscribeHistoryDaysHint')"
|
||||
persistent-hint
|
||||
min="0"
|
||||
type="number"
|
||||
:suffix="t('setting.system.day')"
|
||||
:rules="dataCleanupFieldRules"
|
||||
prepend-inner-icon="mdi-calendar-check-outline"
|
||||
/>
|
||||
</VCol>
|
||||
<VCol cols="12" md="6">
|
||||
<VTextField
|
||||
v-model.number="SystemSettings.Advanced.DATA_CLEANUP_AGENT_CHAT_DAYS"
|
||||
:label="t('setting.system.dataCleanupAgentChatDays')"
|
||||
:hint="t('setting.system.dataCleanupAgentChatDaysHint')"
|
||||
persistent-hint
|
||||
min="0"
|
||||
type="number"
|
||||
:suffix="t('setting.system.day')"
|
||||
:rules="dataCleanupFieldRules"
|
||||
prepend-inner-icon="mdi-message-text-clock-outline"
|
||||
/>
|
||||
</VCol>
|
||||
<VCol cols="12" md="6">
|
||||
<VTextField
|
||||
v-model.number="SystemSettings.Advanced.DATA_CLEANUP_AGENT_TASK_RUN_DAYS"
|
||||
:label="t('setting.system.dataCleanupAgentTaskRunDays')"
|
||||
:hint="t('setting.system.dataCleanupAgentTaskRunDaysHint')"
|
||||
persistent-hint
|
||||
min="0"
|
||||
type="number"
|
||||
:suffix="t('setting.system.day')"
|
||||
:rules="dataCleanupFieldRules"
|
||||
prepend-inner-icon="mdi-robot-outline"
|
||||
/>
|
||||
</VCol>
|
||||
<VCol cols="12" md="6">
|
||||
<VTextField
|
||||
v-model.number="SystemSettings.Advanced.DATA_CLEANUP_OUTBOX_COMPLETED_DAYS"
|
||||
:label="t('setting.system.dataCleanupOutboxCompletedDays')"
|
||||
:hint="t('setting.system.dataCleanupOutboxCompletedDaysHint')"
|
||||
persistent-hint
|
||||
min="0"
|
||||
type="number"
|
||||
:suffix="t('setting.system.day')"
|
||||
:rules="dataCleanupFieldRules"
|
||||
prepend-inner-icon="mdi-check-circle-outline"
|
||||
/>
|
||||
</VCol>
|
||||
<VCol cols="12" md="6">
|
||||
<VTextField
|
||||
v-model.number="SystemSettings.Advanced.DATA_CLEANUP_OUTBOX_DEAD_DAYS"
|
||||
:label="t('setting.system.dataCleanupOutboxDeadDays')"
|
||||
:hint="t('setting.system.dataCleanupOutboxDeadDaysHint')"
|
||||
persistent-hint
|
||||
min="0"
|
||||
type="number"
|
||||
:suffix="t('setting.system.day')"
|
||||
:rules="dataCleanupFieldRules"
|
||||
prepend-inner-icon="mdi-alert-octagon-outline"
|
||||
/>
|
||||
</VCol>
|
||||
</template>
|
||||
</VRow>
|
||||
</div>
|
||||
|
||||
@@ -1111,6 +1111,12 @@ describe('AccountSettingSystem', () => {
|
||||
await fireEvent.update(dialog.getByLabelText('下载历史表保留天数'), '30')
|
||||
await fireEvent.update(dialog.getByLabelText('站点数据表保留天数'), '60')
|
||||
await fireEvent.update(dialog.getByLabelText('整理历史表保留天数'), '90')
|
||||
await fireEvent.update(dialog.getByLabelText('下载失败记录保留天数'), '7')
|
||||
await fireEvent.update(dialog.getByLabelText('订阅历史表保留天数'), '365')
|
||||
await fireEvent.update(dialog.getByLabelText('Agent 会话历史保留天数'), '120')
|
||||
await fireEvent.update(dialog.getByLabelText('Agent 任务运行历史保留天数'), '60')
|
||||
await fireEvent.update(dialog.getByLabelText('Outbox 已完成记录保留天数'), '14')
|
||||
await fireEvent.update(dialog.getByLabelText('Outbox 死信记录保留天数'), '45')
|
||||
|
||||
await user.click(dialog.getByRole('tab', { name: '日志' }))
|
||||
await selectOption('日志等级', 'ERROR - 错误')
|
||||
@@ -1124,8 +1130,14 @@ describe('AccountSettingSystem', () => {
|
||||
expect(findPost('system/env')?.[1]).toEqual(
|
||||
expect.objectContaining({
|
||||
DATA_CLEANUP_DOWNLOAD_HISTORY_DAYS: 30,
|
||||
DATA_CLEANUP_DOWNLOAD_FAILURE_DAYS: 7,
|
||||
DATA_CLEANUP_SUBSCRIBE_HISTORY_DAYS: 365,
|
||||
DATA_CLEANUP_AGENT_CHAT_DAYS: 120,
|
||||
DATA_CLEANUP_AGENT_TASK_RUN_DAYS: 60,
|
||||
DATA_CLEANUP_ENABLE: true,
|
||||
DATA_CLEANUP_MESSAGE_DAYS: 0,
|
||||
DATA_CLEANUP_OUTBOX_COMPLETED_DAYS: 14,
|
||||
DATA_CLEANUP_OUTBOX_DEAD_DAYS: 45,
|
||||
DATA_CLEANUP_SITE_USERDATA_DAYS: 60,
|
||||
DATA_CLEANUP_TRANSFER_HISTORY_DAYS: 90,
|
||||
DEBUG: true,
|
||||
|
||||
Reference in New Issue
Block a user