mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 01:10:23 +08:00
chore(proxy): guard metrics retention cleanup
This commit is contained in:
@@ -908,7 +908,10 @@ export const MOCK_SYSTEM_CONFIGS = [
|
||||
{ key: 'cache_enabled', value: true, description: '是否启用缓存' },
|
||||
{ key: 'default_cache_ttl', value: 3600, description: '默认缓存 TTL(秒)' },
|
||||
{ key: 'fallback_enabled', value: true, description: '是否启用故障转移' },
|
||||
{ key: 'max_fallback_attempts', value: 3, description: '最大故障转移次数' }
|
||||
{ key: 'max_fallback_attempts', value: 3, description: '最大故障转移次数' },
|
||||
{ key: 'proxy_node_metrics_1m_retention_days', value: 30, description: '代理节点 1m 指标保留天数' },
|
||||
{ key: 'proxy_node_metrics_1h_retention_days', value: 180, description: '代理节点 1h 指标保留天数' },
|
||||
{ key: 'proxy_node_metrics_cleanup_batch_size', value: 5000, description: '代理节点指标每批次清理条数' }
|
||||
]
|
||||
|
||||
// ========== API 格式 ==========
|
||||
|
||||
@@ -102,6 +102,9 @@
|
||||
:audit-log-retention-days="systemConfig.audit_log_retention_days"
|
||||
:request-candidates-retention-days="systemConfig.request_candidates_retention_days"
|
||||
:request-candidates-cleanup-batch-size="systemConfig.request_candidates_cleanup_batch_size"
|
||||
:proxy-node-metrics-1m-retention-days="systemConfig.proxy_node_metrics_1m_retention_days"
|
||||
:proxy-node-metrics-1h-retention-days="systemConfig.proxy_node_metrics_1h_retention_days"
|
||||
:proxy-node-metrics-cleanup-batch-size="systemConfig.proxy_node_metrics_cleanup_batch_size"
|
||||
:loading="cleanupConfigLoading"
|
||||
:has-changes="hasCleanupConfigChanges"
|
||||
@save="saveCleanupConfig"
|
||||
@@ -114,6 +117,9 @@
|
||||
@update:audit-log-retention-days="systemConfig.audit_log_retention_days = $event"
|
||||
@update:request-candidates-retention-days="systemConfig.request_candidates_retention_days = $event"
|
||||
@update:request-candidates-cleanup-batch-size="systemConfig.request_candidates_cleanup_batch_size = $event"
|
||||
@update:proxy-node-metrics-1m-retention-days="systemConfig.proxy_node_metrics_1m_retention_days = $event"
|
||||
@update:proxy-node-metrics-1h-retention-days="systemConfig.proxy_node_metrics_1h_retention_days = $event"
|
||||
@update:proxy-node-metrics-cleanup-batch-size="systemConfig.proxy_node_metrics_cleanup_batch_size = $event"
|
||||
/>
|
||||
|
||||
<!-- 定时任务 -->
|
||||
|
||||
@@ -192,6 +192,72 @@
|
||||
独立控制候选记录大表清理节奏,不再跟随 Key 删除联动
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Label
|
||||
for="proxy-node-metrics-1m-retention-days"
|
||||
class="block text-sm font-medium"
|
||||
>
|
||||
代理 1m 指标保留天数
|
||||
</Label>
|
||||
<Input
|
||||
id="proxy-node-metrics-1m-retention-days"
|
||||
:model-value="proxyNodeMetrics1mRetentionDays"
|
||||
type="number"
|
||||
min="1"
|
||||
max="365"
|
||||
placeholder="30"
|
||||
class="mt-1"
|
||||
@update:model-value="$emit('update:proxyNodeMetrics1mRetentionDays', Number($event))"
|
||||
/>
|
||||
<p class="mt-1 text-xs text-muted-foreground">
|
||||
用于代理节点稳定性分钟级图表,后端最少保留 1 天
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Label
|
||||
for="proxy-node-metrics-1h-retention-days"
|
||||
class="block text-sm font-medium"
|
||||
>
|
||||
代理 1h 指标保留天数
|
||||
</Label>
|
||||
<Input
|
||||
id="proxy-node-metrics-1h-retention-days"
|
||||
:model-value="proxyNodeMetrics1hRetentionDays"
|
||||
type="number"
|
||||
min="1"
|
||||
max="1095"
|
||||
placeholder="180"
|
||||
class="mt-1"
|
||||
@update:model-value="$emit('update:proxyNodeMetrics1hRetentionDays', Number($event))"
|
||||
/>
|
||||
<p class="mt-1 text-xs text-muted-foreground">
|
||||
小时级聚合用于长期趋势,不能短于 1m 指标保留天数
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Label
|
||||
for="proxy-node-metrics-cleanup-batch-size"
|
||||
class="block text-sm font-medium"
|
||||
>
|
||||
代理指标清理批次
|
||||
</Label>
|
||||
<Input
|
||||
id="proxy-node-metrics-cleanup-batch-size"
|
||||
:model-value="proxyNodeMetricsCleanupBatchSize"
|
||||
type="number"
|
||||
min="1"
|
||||
max="50000"
|
||||
placeholder="5000"
|
||||
class="mt-1"
|
||||
@update:model-value="$emit('update:proxyNodeMetricsCleanupBatchSize', Number($event))"
|
||||
/>
|
||||
<p class="mt-1 text-xs text-muted-foreground">
|
||||
独立限制 proxy_node_metrics 表的单批删除数量
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 清理策略说明 -->
|
||||
@@ -206,6 +272,7 @@
|
||||
<p>4. <strong>归档删除</strong>: 超过保留期限后完全删除记录</p>
|
||||
<p>5. <strong>候选记录</strong>: 独立按保留天数清理 request_candidates 审计记录,不再跟随 Key 删除联动</p>
|
||||
<p>6. <strong>审计日志</strong>: 独立清理,记录用户登录、操作等安全事件</p>
|
||||
<p>7. <strong>代理指标</strong>: 仅保留 1m/1h 聚合桶,清理任务按批次删除过期桶</p>
|
||||
</div>
|
||||
</div>
|
||||
</CardSection>
|
||||
@@ -228,6 +295,9 @@ defineProps<{
|
||||
auditLogRetentionDays: number
|
||||
requestCandidatesRetentionDays: number
|
||||
requestCandidatesCleanupBatchSize: number
|
||||
proxyNodeMetrics1mRetentionDays: number
|
||||
proxyNodeMetrics1hRetentionDays: number
|
||||
proxyNodeMetricsCleanupBatchSize: number
|
||||
loading: boolean
|
||||
hasChanges: boolean
|
||||
}>()
|
||||
@@ -243,5 +313,8 @@ defineEmits<{
|
||||
'update:auditLogRetentionDays': [value: number]
|
||||
'update:requestCandidatesRetentionDays': [value: number]
|
||||
'update:requestCandidatesCleanupBatchSize': [value: number]
|
||||
'update:proxyNodeMetrics1mRetentionDays': [value: number]
|
||||
'update:proxyNodeMetrics1hRetentionDays': [value: number]
|
||||
'update:proxyNodeMetricsCleanupBatchSize': [value: number]
|
||||
}>()
|
||||
</script>
|
||||
|
||||
@@ -34,6 +34,9 @@ export interface SystemConfig {
|
||||
audit_log_retention_days: number
|
||||
request_candidates_retention_days: number
|
||||
request_candidates_cleanup_batch_size: number
|
||||
proxy_node_metrics_1m_retention_days: number
|
||||
proxy_node_metrics_1h_retention_days: number
|
||||
proxy_node_metrics_cleanup_batch_size: number
|
||||
// 定时任务
|
||||
enable_provider_checkin: boolean
|
||||
provider_checkin_time: string
|
||||
@@ -70,6 +73,9 @@ const CONFIG_KEYS = [
|
||||
'audit_log_retention_days',
|
||||
'request_candidates_retention_days',
|
||||
'request_candidates_cleanup_batch_size',
|
||||
'proxy_node_metrics_1m_retention_days',
|
||||
'proxy_node_metrics_1h_retention_days',
|
||||
'proxy_node_metrics_cleanup_batch_size',
|
||||
// 定时任务
|
||||
'enable_provider_checkin',
|
||||
'provider_checkin_time',
|
||||
@@ -107,6 +113,9 @@ function createDefaultConfig(): SystemConfig {
|
||||
audit_log_retention_days: 30,
|
||||
request_candidates_retention_days: 30,
|
||||
request_candidates_cleanup_batch_size: 5000,
|
||||
proxy_node_metrics_1m_retention_days: 30,
|
||||
proxy_node_metrics_1h_retention_days: 180,
|
||||
proxy_node_metrics_cleanup_batch_size: 5000,
|
||||
// 定时任务
|
||||
enable_provider_checkin: true,
|
||||
provider_checkin_time: '01:05',
|
||||
@@ -181,7 +190,13 @@ export function useSystemConfig() {
|
||||
systemConfig.value.request_candidates_retention_days !==
|
||||
originalConfig.value.request_candidates_retention_days ||
|
||||
systemConfig.value.request_candidates_cleanup_batch_size !==
|
||||
originalConfig.value.request_candidates_cleanup_batch_size
|
||||
originalConfig.value.request_candidates_cleanup_batch_size ||
|
||||
systemConfig.value.proxy_node_metrics_1m_retention_days !==
|
||||
originalConfig.value.proxy_node_metrics_1m_retention_days ||
|
||||
systemConfig.value.proxy_node_metrics_1h_retention_days !==
|
||||
originalConfig.value.proxy_node_metrics_1h_retention_days ||
|
||||
systemConfig.value.proxy_node_metrics_cleanup_batch_size !==
|
||||
originalConfig.value.proxy_node_metrics_cleanup_batch_size
|
||||
)
|
||||
})
|
||||
|
||||
@@ -441,6 +456,21 @@ export function useSystemConfig() {
|
||||
value: systemConfig.value.request_candidates_cleanup_batch_size,
|
||||
description: '请求候选记录每批次清理条数',
|
||||
},
|
||||
{
|
||||
key: 'proxy_node_metrics_1m_retention_days',
|
||||
value: systemConfig.value.proxy_node_metrics_1m_retention_days,
|
||||
description: '代理节点 1m 指标保留天数',
|
||||
},
|
||||
{
|
||||
key: 'proxy_node_metrics_1h_retention_days',
|
||||
value: systemConfig.value.proxy_node_metrics_1h_retention_days,
|
||||
description: '代理节点 1h 指标保留天数',
|
||||
},
|
||||
{
|
||||
key: 'proxy_node_metrics_cleanup_batch_size',
|
||||
value: systemConfig.value.proxy_node_metrics_cleanup_batch_size,
|
||||
description: '代理节点指标每批次清理条数',
|
||||
},
|
||||
]
|
||||
|
||||
await Promise.all(
|
||||
@@ -462,6 +492,12 @@ export function useSystemConfig() {
|
||||
systemConfig.value.request_candidates_retention_days
|
||||
originalConfig.value.request_candidates_cleanup_batch_size =
|
||||
systemConfig.value.request_candidates_cleanup_batch_size
|
||||
originalConfig.value.proxy_node_metrics_1m_retention_days =
|
||||
systemConfig.value.proxy_node_metrics_1m_retention_days
|
||||
originalConfig.value.proxy_node_metrics_1h_retention_days =
|
||||
systemConfig.value.proxy_node_metrics_1h_retention_days
|
||||
originalConfig.value.proxy_node_metrics_cleanup_batch_size =
|
||||
systemConfig.value.proxy_node_metrics_cleanup_batch_size
|
||||
}
|
||||
success('请求记录清理配置已保存')
|
||||
} catch (err) {
|
||||
|
||||
Reference in New Issue
Block a user