diff --git a/src/providers/provider-pool-manager.js b/src/providers/provider-pool-manager.js index beee214..967d589 100644 --- a/src/providers/provider-pool-manager.js +++ b/src/providers/provider-pool-manager.js @@ -1759,7 +1759,17 @@ export class ProviderPoolManager { this._log('info', '[ScheduledHealthCheck] Starting scheduled health checks on all providers...'); + // Get selected provider types, if empty/undefined then check all + const selectedProviderTypes = scheduledConfig?.providerTypes; + const checkAllTypes = !selectedProviderTypes || selectedProviderTypes.length === 0; + for (const providerType in this.providerStatus) { + // Filter by selected provider types if specified + if (!checkAllTypes && !selectedProviderTypes.includes(providerType)) { + this._log('debug', `[ScheduledHealthCheck] Skipping provider type ${providerType}: not in selected types`); + continue; + } + for (const provider of this.providerStatus[providerType]) { // Skip manually disabled providers if (provider.config.isDisabled === true) { diff --git a/static/app/config-manager.js b/static/app/config-manager.js index 712cdc0..9c16a00 100644 --- a/static/app/config-manager.js +++ b/static/app/config-manager.js @@ -251,6 +251,21 @@ async function loadConfiguration() { if (scheduledHealthCheckIntervalEl) scheduledHealthCheckIntervalEl.value = 600000; } + // 加载定时健康检查的供应商选择 + const scheduledHealthCheckProvidersEl = document.getElementById('scheduledHealthCheckProviders'); + if (scheduledHealthCheckProvidersEl) { + const enabledProviders = data.SCHEDULED_HEALTH_CHECK?.providerTypes || []; + const tags = scheduledHealthCheckProvidersEl.querySelectorAll('.provider-tag'); + tags.forEach(tag => { + const value = tag.getAttribute('data-value'); + if (enabledProviders.includes(value)) { + tag.classList.add('selected'); + } else { + tag.classList.remove('selected'); + } + }); + } + // 定时健康检查间隔快捷按钮(防止重复绑定) const intervalQuickBtns = document.querySelectorAll('#scheduledHealthCheckInterval + .quick-select-btns button'); intervalQuickBtns.forEach(btn => { @@ -377,10 +392,17 @@ async function saveConfiguration() { } // 定时健康检查配置 + const scheduledHealthCheckProvidersEl = document.getElementById('scheduledHealthCheckProviders'); + const scheduledHealthCheckProviderTypes = scheduledHealthCheckProvidersEl + ? Array.from(scheduledHealthCheckProvidersEl.querySelectorAll('.provider-tag.selected')) + .map(tag => tag.getAttribute('data-value')) + : []; + config.SCHEDULED_HEALTH_CHECK = { enabled: document.getElementById('scheduledHealthCheckEnabled')?.checked !== false, startupRun: document.getElementById('scheduledHealthCheckStartupRun')?.checked !== false, - interval: parseInt(document.getElementById('scheduledHealthCheckInterval')?.value || 600000) + interval: parseInt(document.getElementById('scheduledHealthCheckInterval')?.value || 600000), + providerTypes: scheduledHealthCheckProviderTypes }; try { diff --git a/static/app/i18n.js b/static/app/i18n.js index 5080210..b5e1c3a 100644 --- a/static/app/i18n.js +++ b/static/app/i18n.js @@ -348,6 +348,8 @@ const translations = { 'config.healthCheck.startupRun': '启动时运行', 'config.healthCheck.interval': '检查间隔', 'config.healthCheck.intervalNote': '单位毫秒,最小60000ms(1分钟),最大3600000ms(1小时),可手动输入或点击快捷按钮', + 'config.healthCheck.providerTypes': '定时检查的供应商', + 'config.healthCheck.providerTypesNote': '选择需要进行定时健康检查的供应商类型,留空则检查所有供应商', 'config.log.title': '日志设置', 'config.log.enabled': '启用日志', 'config.log.outputMode': '日志输出模式', diff --git a/static/components/section-config.html b/static/components/section-config.html index 37d1eee..7bb35ea 100644 --- a/static/components/section-config.html +++ b/static/components/section-config.html @@ -259,6 +259,52 @@ 单位毫秒,最小60000ms(1分钟),最大3600000ms(1小时) +
+ +
+ + + + + + + + + + +
+ 选择需要进行定时健康检查的供应商类型 +