Spaces:
Sleeping
Sleeping
link0518
commited on
Commit
·
6fdc899
1
Parent(s):
5b1e8d4
修复api次数统计
Browse files- client/src/pages/Dashboard.jsx +5 -3
- src/admin/monitor.js +25 -0
- src/admin/routes.js +11 -1
client/src/pages/Dashboard.jsx
CHANGED
|
@@ -20,17 +20,19 @@ export default function Dashboard() {
|
|
| 20 |
const fetchData = async () => {
|
| 21 |
try {
|
| 22 |
const headers = { 'X-Admin-Token': token };
|
| 23 |
-
const [keysRes, tokensRes, keyStatsRes, tokenStatsRes] = await Promise.all([
|
| 24 |
fetch('/admin/keys', { headers }),
|
| 25 |
fetch('/admin/tokens', { headers }),
|
| 26 |
fetch('/admin/keys/stats', { headers }),
|
| 27 |
-
fetch('/admin/tokens/stats', { headers })
|
|
|
|
| 28 |
]);
|
| 29 |
|
| 30 |
const keys = await keysRes.json();
|
| 31 |
const tokens = await tokensRes.json();
|
| 32 |
const keyStats = await keyStatsRes.json();
|
| 33 |
const tokenStats = await tokenStatsRes.json();
|
|
|
|
| 34 |
|
| 35 |
setStats({
|
| 36 |
keys: keys.length,
|
|
@@ -38,7 +40,7 @@ export default function Dashboard() {
|
|
| 38 |
keyRequests: keyStats.totalRequests || 0,
|
| 39 |
tokenEnabled: tokenStats.enabled || 0,
|
| 40 |
tokenDisabled: tokenStats.disabled || 0,
|
| 41 |
-
todayRequests: 0
|
| 42 |
});
|
| 43 |
} catch (error) {
|
| 44 |
console.error('Failed to fetch dashboard data', error);
|
|
|
|
| 20 |
const fetchData = async () => {
|
| 21 |
try {
|
| 22 |
const headers = { 'X-Admin-Token': token };
|
| 23 |
+
const [keysRes, tokensRes, keyStatsRes, tokenStatsRes, todayReqRes] = await Promise.all([
|
| 24 |
fetch('/admin/keys', { headers }),
|
| 25 |
fetch('/admin/tokens', { headers }),
|
| 26 |
fetch('/admin/keys/stats', { headers }),
|
| 27 |
+
fetch('/admin/tokens/stats', { headers }),
|
| 28 |
+
fetch('/admin/today-requests', { headers })
|
| 29 |
]);
|
| 30 |
|
| 31 |
const keys = await keysRes.json();
|
| 32 |
const tokens = await tokensRes.json();
|
| 33 |
const keyStats = await keyStatsRes.json();
|
| 34 |
const tokenStats = await tokenStatsRes.json();
|
| 35 |
+
const todayReq = await todayReqRes.json();
|
| 36 |
|
| 37 |
setStats({
|
| 38 |
keys: keys.length,
|
|
|
|
| 40 |
keyRequests: keyStats.totalRequests || 0,
|
| 41 |
tokenEnabled: tokenStats.enabled || 0,
|
| 42 |
tokenDisabled: tokenStats.disabled || 0,
|
| 43 |
+
todayRequests: todayReq.todayRequests || 0
|
| 44 |
});
|
| 45 |
} catch (error) {
|
| 46 |
console.error('Failed to fetch dashboard data', error);
|
src/admin/monitor.js
CHANGED
|
@@ -4,9 +4,34 @@ import idleManager from '../utils/idle_manager.js';
|
|
| 4 |
const startTime = Date.now();
|
| 5 |
let requestCount = 0;
|
| 6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
// 增加请求计数
|
| 8 |
export function incrementRequestCount() {
|
| 9 |
requestCount++;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
}
|
| 11 |
|
| 12 |
// 获取系统状态
|
|
|
|
| 4 |
const startTime = Date.now();
|
| 5 |
let requestCount = 0;
|
| 6 |
|
| 7 |
+
// 今日请求统计
|
| 8 |
+
let todayDate = new Date().toISOString().split('T')[0]; // YYYY-MM-DD
|
| 9 |
+
let todayRequestCount = 0;
|
| 10 |
+
|
| 11 |
// 增加请求计数
|
| 12 |
export function incrementRequestCount() {
|
| 13 |
requestCount++;
|
| 14 |
+
|
| 15 |
+
// 检查日期是否变化
|
| 16 |
+
const currentDate = new Date().toISOString().split('T')[0];
|
| 17 |
+
if (currentDate !== todayDate) {
|
| 18 |
+
// 日期变化,重置今日计数
|
| 19 |
+
todayDate = currentDate;
|
| 20 |
+
todayRequestCount = 0;
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
todayRequestCount++;
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
// 获取今日请求数
|
| 27 |
+
export function getTodayRequestCount() {
|
| 28 |
+
// 再次检查日期,防止跨日后首次调用返回旧数据
|
| 29 |
+
const currentDate = new Date().toISOString().split('T')[0];
|
| 30 |
+
if (currentDate !== todayDate) {
|
| 31 |
+
todayDate = currentDate;
|
| 32 |
+
todayRequestCount = 0;
|
| 33 |
+
}
|
| 34 |
+
return todayRequestCount;
|
| 35 |
}
|
| 36 |
|
| 37 |
// 获取系统状态
|
src/admin/routes.js
CHANGED
|
@@ -3,7 +3,7 @@ import multer from 'multer';
|
|
| 3 |
import archiver from 'archiver';
|
| 4 |
import { createKey, loadKeys, deleteKey, updateKeyRateLimit, getKeyStats } from './key_manager.js';
|
| 5 |
import { getRecentLogs, clearLogs, addLog } from './log_manager.js';
|
| 6 |
-
import { getSystemStatus, incrementRequestCount } from './monitor.js';
|
| 7 |
import { loadAccounts, deleteAccount, toggleAccount, triggerLogin, getAccountStats, addTokenFromCallback, getAccountName, importTokens } from './token_admin.js';
|
| 8 |
import { createSession, validateSession, destroySession, verifyPassword, adminAuth } from './session.js';
|
| 9 |
import { loadSettings, saveSettings } from './settings_manager.js';
|
|
@@ -154,6 +154,16 @@ router.get('/status', async (req, res) => {
|
|
| 154 |
}
|
| 155 |
});
|
| 156 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 157 |
// Token 管理路由
|
| 158 |
|
| 159 |
// 获取所有账号
|
|
|
|
| 3 |
import archiver from 'archiver';
|
| 4 |
import { createKey, loadKeys, deleteKey, updateKeyRateLimit, getKeyStats } from './key_manager.js';
|
| 5 |
import { getRecentLogs, clearLogs, addLog } from './log_manager.js';
|
| 6 |
+
import { getSystemStatus, incrementRequestCount, getTodayRequestCount } from './monitor.js';
|
| 7 |
import { loadAccounts, deleteAccount, toggleAccount, triggerLogin, getAccountStats, addTokenFromCallback, getAccountName, importTokens } from './token_admin.js';
|
| 8 |
import { createSession, validateSession, destroySession, verifyPassword, adminAuth } from './session.js';
|
| 9 |
import { loadSettings, saveSettings } from './settings_manager.js';
|
|
|
|
| 154 |
}
|
| 155 |
});
|
| 156 |
|
| 157 |
+
// 获取今日请求统计
|
| 158 |
+
router.get('/today-requests', async (req, res) => {
|
| 159 |
+
try {
|
| 160 |
+
const todayRequests = getTodayRequestCount();
|
| 161 |
+
res.json({ todayRequests });
|
| 162 |
+
} catch (error) {
|
| 163 |
+
res.status(500).json({ error: error.message });
|
| 164 |
+
}
|
| 165 |
+
});
|
| 166 |
+
|
| 167 |
// Token 管理路由
|
| 168 |
|
| 169 |
// 获取所有账号
|