From cec97ff3aef644939e0eb01f907cafc9e71c009c Mon Sep 17 00:00:00 2001 From: hex2077 Date: Mon, 8 Sep 2025 00:59:09 +0800 Subject: [PATCH] =?UTF-8?q?refactor(provider-pool):=20=E5=B0=86=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E5=AF=B9=E8=B1=A1=E7=BB=9F=E4=B8=80=E8=BD=AC=E6=8D=A2?= =?UTF-8?q?=E4=B8=BAISO=E5=AD=97=E7=AC=A6=E4=B8=B2=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改ProviderPoolManager中日期处理逻辑,将所有Date对象统一转换为ISO字符串格式存储,确保数据一致性并简化序列化过程。 --- src/provider-pool-manager.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/provider-pool-manager.js b/src/provider-pool-manager.js index 57309c0..318e22e 100644 --- a/src/provider-pool-manager.js +++ b/src/provider-pool-manager.js @@ -30,9 +30,12 @@ export class ProviderPoolManager { providerConfig.usageCount = providerConfig.usageCount !== undefined ? providerConfig.usageCount : 0; providerConfig.errorCount = providerConfig.errorCount !== undefined ? providerConfig.errorCount : 0; if (providerConfig.lastErrorTime && typeof providerConfig.lastErrorTime === 'string') { - providerConfig.lastErrorTime = new Date(providerConfig.lastErrorTime); + // Keep as string (ISOString) + providerConfig.lastErrorTime = providerConfig.lastErrorTime; } else if (providerConfig.lastErrorTime === undefined) { providerConfig.lastErrorTime = null; + } else if (providerConfig.lastErrorTime instanceof Date) { + providerConfig.lastErrorTime = providerConfig.lastErrorTime.toISOString(); } this.providerStatus[providerType].push({ @@ -75,7 +78,7 @@ export class ProviderPoolManager { } if (selected) { - selected.config.lastUsed = new Date(); + selected.config.lastUsed = new Date().toISOString(); selected.config.usageCount++; // Increment usage count console.log(`[ProviderPoolManager] Selected provider for ${providerType} (round-robin): ${JSON.stringify(selected.config)}`); @@ -97,7 +100,7 @@ export class ProviderPoolManager { const provider = pool.find(p => p.uuid === providerConfig.uuid); if (provider) { provider.config.errorCount++; - provider.config.lastErrorTime = new Date(); // Update last error time in config + provider.config.lastErrorTime = new Date().toISOString(); // Update last error time in config if (provider.config.errorCount >= this.maxErrorCount) { provider.config.isHealthy = false; @@ -142,7 +145,7 @@ export class ProviderPoolManager { // Only attempt to health check unhealthy providers after a certain interval if (!providerStatus.config.isHealthy && providerStatus.config.lastErrorTime && - (now.getTime() - providerStatus.config.lastErrorTime.getTime() < this.healthCheckInterval)) { + (now.getTime() - new Date(providerStatus.config.lastErrorTime).getTime() < this.healthCheckInterval)) { console.log(`[ProviderPoolManager] Skipping health check for ${JSON.stringify(providerConfig)} (${providerType}). Last error too recent.`); continue; } @@ -260,6 +263,7 @@ export class ProviderPoolManager { if (this.providerStatus[providerTypeToUpdate]) { currentPools[providerTypeToUpdate] = this.providerStatus[providerTypeToUpdate].map(p => { + // Convert Date objects to ISOString if they exist if (p.config.lastUsed instanceof Date) { p.config.lastUsed = p.config.lastUsed.toISOString(); }