feat: 优化仪表盘数据展示和用户体验

- 优化实时TPM显示格式,添加智能单位(K/M)
- 折线图tooltip添加token数单位格式化
- API Keys使用趋势图增加USD金额计算和显示
- 实现鼠标悬浮时数据倒序展示,前3名添加🥇🥈🥉标识
- 后端API添加费用计算支持
- 删除测试脚本,保持代码整洁

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
shaw
2025-07-30 15:07:05 +08:00
parent 21461863af
commit 321be986a6
4 changed files with 102 additions and 84 deletions

View File

@@ -1,69 +0,0 @@
const redis = require('../src/models/redis');
const logger = require('../src/utils/logger');
async function testRealtimeMetrics() {
try {
// 连接Redis
await redis.connect();
// 获取当前时间戳
const now = new Date();
const currentMinute = Math.floor(now.getTime() / 60000);
console.log('=== 时间戳测试 ===');
console.log('当前时间:', now.toISOString());
console.log('当前分钟时间戳:', currentMinute);
console.log('');
// 检查最近5分钟的键
console.log('=== 检查Redis键 ===');
const client = redis.getClient();
for (let i = 0; i < 5; i++) {
const minuteKey = `system:metrics:minute:${currentMinute - i}`;
const exists = await client.exists(minuteKey);
const data = await client.hgetall(minuteKey);
console.log(`键: ${minuteKey}`);
console.log(` 存在: ${exists ? '是' : '否'}`);
if (exists && data) {
console.log(` 数据: requests=${data.requests}, totalTokens=${data.totalTokens}`);
}
console.log('');
}
// 调用getRealtimeSystemMetrics
console.log('=== 调用 getRealtimeSystemMetrics ===');
const metrics = await redis.getRealtimeSystemMetrics();
console.log('结果:', JSON.stringify(metrics, null, 2));
// 列出所有system:metrics:minute:*键
console.log('\n=== 所有系统指标键 ===');
const allKeys = await client.keys('system:metrics:minute:*');
console.log('找到的键数量:', allKeys.length);
if (allKeys.length > 0) {
// 排序并显示最新的10个
allKeys.sort((a, b) => {
const aNum = parseInt(a.split(':').pop());
const bNum = parseInt(b.split(':').pop());
return bNum - aNum;
});
console.log('最新的10个键:');
for (let i = 0; i < Math.min(10, allKeys.length); i++) {
const key = allKeys[i];
const timestamp = parseInt(key.split(':').pop());
const timeDiff = currentMinute - timestamp;
console.log(` ${key} (${timeDiff}分钟前)`);
}
}
} catch (error) {
console.error('测试失败:', error);
} finally {
await redis.disconnect();
process.exit(0);
}
}
// 运行测试
testRealtimeMetrics();