link0518
修复api次数统计
6fdc899
import os from 'os';
import idleManager from '../utils/idle_manager.js';
const startTime = Date.now();
let requestCount = 0;
// 今日请求统计
let todayDate = new Date().toISOString().split('T')[0]; // YYYY-MM-DD
let todayRequestCount = 0;
// 增加请求计数
export function incrementRequestCount() {
requestCount++;
// 检查日期是否变化
const currentDate = new Date().toISOString().split('T')[0];
if (currentDate !== todayDate) {
// 日期变化,重置今日计数
todayDate = currentDate;
todayRequestCount = 0;
}
todayRequestCount++;
}
// 获取今日请求数
export function getTodayRequestCount() {
// 再次检查日期,防止跨日后首次调用返回旧数据
const currentDate = new Date().toISOString().split('T')[0];
if (currentDate !== todayDate) {
todayDate = currentDate;
todayRequestCount = 0;
}
return todayRequestCount;
}
// 获取系统状态
export function getSystemStatus() {
const uptime = Date.now() - startTime;
const uptimeSeconds = Math.floor(uptime / 1000);
const hours = Math.floor(uptimeSeconds / 3600);
const minutes = Math.floor((uptimeSeconds % 3600) / 60);
const seconds = uptimeSeconds % 60;
const memUsage = process.memoryUsage();
const totalMem = os.totalmem();
const freeMem = os.freemem();
const usedMem = totalMem - freeMem;
// 获取空闲状态
const idleStatus = idleManager.getStatus();
return {
cpu: getCpuUsage(),
memory: formatBytes(memUsage.heapUsed) + ' / ' + formatBytes(memUsage.heapTotal),
uptime: `${hours}${minutes}${seconds}秒`,
requests: requestCount,
nodeVersion: process.version,
platform: `${os.platform()} ${os.arch()}`,
pid: process.pid,
systemMemory: formatBytes(usedMem) + ' / ' + formatBytes(totalMem),
idle: idleStatus.isIdle ? '空闲模式' : '活跃',
idleTime: idleStatus.idleTimeSeconds
};
}
// 获取 CPU 使用率(简化版本)
function getCpuUsage() {
const cpus = os.cpus();
let totalIdle = 0;
let totalTick = 0;
cpus.forEach(cpu => {
for (let type in cpu.times) {
totalTick += cpu.times[type];
}
totalIdle += cpu.times.idle;
});
const idle = totalIdle / cpus.length;
const total = totalTick / cpus.length;
const usage = 100 - ~~(100 * idle / total);
return usage;
}
// 格式化字节数
function formatBytes(bytes) {
if (bytes === 0) return '0 B';
const k = 1024;
const sizes = ['B', 'KB', 'MB', 'GB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];
}