fix: user stats again x4

This commit is contained in:
Feng Yue
2025-08-13 23:40:38 +08:00
parent 1ba55401f9
commit c413fddec0
3 changed files with 43 additions and 37 deletions

View File

@@ -137,24 +137,43 @@ router.get('/api-keys', authenticateUser, async (req, res) => {
try { try {
const apiKeys = await apiKeyService.getUserApiKeys(req.user.id) const apiKeys = await apiKeyService.getUserApiKeys(req.user.id)
// 移除敏感信息 // 移除敏感信息并格式化usage数据
const safeApiKeys = apiKeys.map((key) => ({ const safeApiKeys = apiKeys.map((key) => {
id: key.id, // Flatten usage structure for frontend compatibility
name: key.name, let flatUsage = {
description: key.description, requests: 0,
tokenLimit: key.tokenLimit, inputTokens: 0,
isActive: key.isActive, outputTokens: 0,
createdAt: key.createdAt, totalCost: 0
lastUsedAt: key.lastUsedAt, }
expiresAt: key.expiresAt,
usage: key.usage, if (key.usage && key.usage.total) {
dailyCost: key.dailyCost, flatUsage = {
dailyCostLimit: key.dailyCostLimit, requests: key.usage.total.requests || 0,
// 不返回实际的key值只返回前缀和后几位 inputTokens: key.usage.total.inputTokens || 0,
keyPreview: key.key outputTokens: key.usage.total.outputTokens || 0,
? `${key.key.substring(0, 8)}...${key.key.substring(key.key.length - 4)}` totalCost: key.totalCost || 0
: null }
})) }
return {
id: key.id,
name: key.name,
description: key.description,
tokenLimit: key.tokenLimit,
isActive: key.isActive,
createdAt: key.createdAt,
lastUsedAt: key.lastUsedAt,
expiresAt: key.expiresAt,
usage: flatUsage,
dailyCost: key.dailyCost,
dailyCostLimit: key.dailyCostLimit,
// 不返回实际的key值只返回前缀和后几位
keyPreview: key.key
? `${key.key.substring(0, 8)}...${key.key.substring(key.key.length - 4)}`
: null
}
})
res.json({ res.json({
success: true, success: true,

View File

@@ -500,16 +500,6 @@ class ApiKeyService {
const dailyCost = (await redis.getDailyCost(key.id)) || 0 const dailyCost = (await redis.getDailyCost(key.id)) || 0
const costStats = await redis.getCostStats(key.id) const costStats = await redis.getCostStats(key.id)
logger.debug(`🔍 getUserApiKeys: Key ${key.id} (${key.name}) usage:`, {
keyId: key.id,
keyName: key.name,
userId: key.userId,
rawUsage: usage,
dailyCost,
costStats,
lastUsedAt: key.lastUsedAt
})
userKeysWithUsage.push({ userKeysWithUsage.push({
id: key.id, id: key.id,
name: key.name, name: key.name,
@@ -673,11 +663,12 @@ class ApiKeyService {
// 汇总所有API Key的统计数据 // 汇总所有API Key的统计数据
for (const keyId of keyIds) { for (const keyId of keyIds) {
const keyStats = await redis.getUsageStats(keyId) const keyStats = await redis.getUsageStats(keyId)
if (keyStats) { const costStats = await redis.getCostStats(keyId)
stats.totalRequests += keyStats.requests || 0 if (keyStats && keyStats.total) {
stats.totalInputTokens += keyStats.inputTokens || 0 stats.totalRequests += keyStats.total.requests || 0
stats.totalOutputTokens += keyStats.outputTokens || 0 stats.totalInputTokens += keyStats.total.inputTokens || 0
stats.totalCost += keyStats.totalCost || 0 stats.totalOutputTokens += keyStats.total.outputTokens || 0
stats.totalCost += costStats?.total || 0
} }
} }

View File

@@ -150,10 +150,6 @@ class UserService {
} }
for (const apiKey of userApiKeys) { for (const apiKey of userApiKeys) {
logger.debug(`🔍 Processing API key ${apiKey.id} (${apiKey.name}) for user ${userId}:`, {
hasUsage: !!apiKey.usage,
usage: apiKey.usage
})
if (apiKey.usage && apiKey.usage.total) { if (apiKey.usage && apiKey.usage.total) {
totalUsage.requests += apiKey.usage.total.requests || 0 totalUsage.requests += apiKey.usage.total.requests || 0
totalUsage.inputTokens += apiKey.usage.total.inputTokens || 0 totalUsage.inputTokens += apiKey.usage.total.inputTokens || 0