diff --git a/src/routes/admin.js b/src/routes/admin.js index 57753a4d..cd79b76f 100644 --- a/src/routes/admin.js +++ b/src/routes/admin.js @@ -2107,6 +2107,8 @@ router.get('/claude-accounts', authenticateAdmin, async (req, res) => { router.get('/claude-accounts/usage', authenticateAdmin, async (req, res) => { try { const accounts = await redis.getAllClaudeAccounts() + const now = Date.now() + const usageCacheTtlMs = 300 * 1000 // 批量并发获取所有活跃 OAuth 账户的 Usage const usagePromises = accounts.map(async (account) => { @@ -2121,6 +2123,19 @@ router.get('/claude-accounts/usage', authenticateAdmin, async (req, res) => { account.accessToken && account.status === 'active' ) { + // 若快照在 300 秒内更新,直接使用缓存避免频繁请求 + const cachedUsage = claudeAccountService.buildClaudeUsageSnapshot(account) + const lastUpdatedAt = account.claudeUsageUpdatedAt + ? new Date(account.claudeUsageUpdatedAt).getTime() + : 0 + const isCacheFresh = cachedUsage && lastUpdatedAt && now - lastUpdatedAt < usageCacheTtlMs + if (isCacheFresh) { + return { + accountId: account.id, + claudeUsage: cachedUsage + } + } + try { const usageData = await claudeAccountService.fetchOAuthUsage(account.id) if (usageData) {