From fea36b1ca9c3635c0b6bc955ce0834ad60ca9a0a Mon Sep 17 00:00:00 2001 From: hkfires <10558748+hkfires@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:55:57 +0800 Subject: [PATCH] refactor: centralize usage stats and refine api key cache --- app.js | 5 +++-- src/core/connection.js | 34 +--------------------------------- src/modules/api-keys.js | 6 +++--- src/modules/usage.js | 13 ++++++++----- 4 files changed, 15 insertions(+), 43 deletions(-) diff --git a/app.js b/app.js index 9894649..fc240fe 100644 --- a/app.js +++ b/app.js @@ -24,7 +24,8 @@ import { MIN_AUTH_FILES_PAGE_SIZE, MAX_AUTH_FILES_PAGE_SIZE, OAUTH_CARD_IDS, - STORAGE_KEY_AUTH_FILES_PAGE_SIZE + STORAGE_KEY_AUTH_FILES_PAGE_SIZE, + NOTIFICATION_DURATION_MS } from './src/utils/constants.js'; // 核心服务导入 @@ -514,7 +515,7 @@ class CLIProxyManager { setTimeout(() => { notification.classList.remove('show'); - }, 3000); + }, NOTIFICATION_DURATION_MS); } // 密钥可见性切换 diff --git a/src/core/connection.js b/src/core/connection.js index 2426f14..902cc86 100644 --- a/src/core/connection.js +++ b/src/core/connection.js @@ -297,38 +297,7 @@ export const connectionModule = { const response = await this.makeRequest('/usage'); usageData = response?.usage || null; if (usageData) { - // 从usage数据中提取keyStats - const sourceStats = {}; - const apis = usageData.apis || {}; - - Object.values(apis).forEach(apiEntry => { - const models = apiEntry.models || {}; - - Object.values(models).forEach(modelEntry => { - const details = modelEntry.details || []; - - details.forEach(detail => { - const source = detail.source; - if (!source) return; - - if (!sourceStats[source]) { - sourceStats[source] = { - success: 0, - failure: 0 - }; - } - - const isFailed = detail.failed === true; - if (isFailed) { - sourceStats[source].failure += 1; - } else { - sourceStats[source].success += 1; - } - }); - }); - }); - - keyStats = sourceStats; + keyStats = await this.getKeyStats(usageData); } } catch (error) { console.warn('获取usage统计失败:', error); @@ -438,4 +407,3 @@ export const connectionModule = { } } }; - diff --git a/src/modules/api-keys.js b/src/modules/api-keys.js index 3b172a6..e5c0bb4 100644 --- a/src/modules/api-keys.js +++ b/src/modules/api-keys.js @@ -271,7 +271,7 @@ export const apiKeysModule = { body: JSON.stringify(currentKeys) }); - this.clearCache(); // 清除缓存 + this.clearCache('api-keys'); // 仅清除 api-keys 段缓存 this.closeModal(); this.loadApiKeys(); this.showNotification(i18n.t('notification.api_key_added'), 'success'); @@ -315,7 +315,7 @@ export const apiKeysModule = { body: JSON.stringify({ index, value: newKey }) }); - this.clearCache(); // 清除缓存 + this.clearCache('api-keys'); // 仅清除 api-keys 段缓存 this.closeModal(); this.loadApiKeys(); this.showNotification(i18n.t('notification.api_key_updated'), 'success'); @@ -330,7 +330,7 @@ export const apiKeysModule = { try { await this.makeRequest(`/api-keys?index=${index}`, { method: 'DELETE' }); - this.clearCache(); // 清除缓存 + this.clearCache('api-keys'); // 仅清除 api-keys 段缓存 this.loadApiKeys(); this.showNotification(i18n.t('notification.api_key_deleted'), 'success'); } catch (error) { diff --git a/src/modules/usage.js b/src/modules/usage.js index 4920972..27d4fd2 100644 --- a/src/modules/usage.js +++ b/src/modules/usage.js @@ -1,9 +1,12 @@ // 获取API密钥的统计信息 -export async function getKeyStats() { +export async function getKeyStats(usageData = null) { try { - const response = await this.makeRequest('/usage'); - const usage = response?.usage || null; - + let usage = usageData; + if (!usage) { + const response = await this.makeRequest('/usage'); + usage = response?.usage || null; + } + if (!usage) { return {}; } @@ -20,7 +23,7 @@ export async function getKeyStats() { details.forEach(detail => { const source = detail.source; if (!source) return; - + if (!sourceStats[source]) { sourceStats[source] = { success: 0,