134 lines
3.0 KiB
JavaScript
134 lines
3.0 KiB
JavaScript
const os = require("os");
|
|
const path = require("path");
|
|
|
|
// 格式化字节数为人类可读的单位
|
|
function formatBytes(bytes) {
|
|
const size = {
|
|
GB: 1024 * 1024 * 1024,
|
|
MB: 1024 * 1024,
|
|
KB: 1024,
|
|
B: 1,
|
|
};
|
|
for (const key in size) {
|
|
if (bytes >= size[key]) return `${bytes / size[key]} ${key}`;
|
|
}
|
|
}
|
|
|
|
// 工具函数:统一处理路径分隔符为正斜杠
|
|
const formatPath = (pathStr) => {
|
|
return pathStr.replace(/\\/g, "/"); // 单个反斜杠替换为正斜杠
|
|
};
|
|
|
|
// 1. 操作系统基本信息
|
|
const getSystemInfo = () => {
|
|
return {
|
|
osType: os.type(),
|
|
osPlatform: os.platform(),
|
|
osVersion: os.release(),
|
|
osName: os.version(),
|
|
arch: os.arch(),
|
|
hostname: os.hostname(),
|
|
systemStartTime: new Date(os.uptime() * 1000).toLocaleDateString(),
|
|
systemRunningTime: `${Math.floor(os.uptime() / 3600)}小时 ${
|
|
Math.floor(os.uptime() % 3600) / 60
|
|
}分钟`,
|
|
};
|
|
};
|
|
|
|
// 2. CPU信息
|
|
const getCPUInfo = () => {
|
|
const cpus = os.cpus();
|
|
return {
|
|
number: cpus.length,
|
|
model: cpus[0].model,
|
|
speed: cpus[0].speed + "MHz",
|
|
};
|
|
};
|
|
|
|
// 3. 内存信息
|
|
const getMemoryInfo = () => {
|
|
return {
|
|
total: formatBytes(os.totalmem()),
|
|
freeMemory: formatBytes(os.freemem()),
|
|
useMemory: formatBytes(os.totalmem() - os.freemem()),
|
|
useRate: `${Math.round((1 - os.freemem() / os.totalmem()) * 100)}%`,
|
|
};
|
|
};
|
|
|
|
// 4. 用户信息
|
|
const getUserInfo = () => {
|
|
const userInfo = os.userInfo();
|
|
return {
|
|
userName: userInfo.username,
|
|
uid: userInfo.uid,
|
|
gid: userInfo.gid,
|
|
homeDir: formatPath(userInfo.homedir),
|
|
shell: userInfo.shell || "unknown",
|
|
};
|
|
};
|
|
|
|
// 5. 目录信息
|
|
const getDirInfo = () => {
|
|
return {
|
|
homeDir: formatPath(os.homedir()),
|
|
tmpDir: formatPath(os.tmpdir()),
|
|
};
|
|
};
|
|
|
|
// 6. 负载信息 (仅 Unix 系统有效)
|
|
const getDutyInfo = () => {
|
|
const loadavg = os.loadavg();
|
|
return {
|
|
min1: loadavg[0].toFixed(2),
|
|
min5: loadavg[1].toFixed(2),
|
|
min15: loadavg[2].toFixed(2),
|
|
};
|
|
};
|
|
|
|
// 7. 网络接口信息
|
|
const getNetworkInterfaceInfo = () => {
|
|
const networkInterfaces = os.networkInterfaces();
|
|
const data = [];
|
|
for (const [interfaceName, interfaceInfo] of Object.entries(
|
|
networkInterfaces
|
|
)) {
|
|
let item;
|
|
interfaceInfo.forEach((info) => {
|
|
item = {
|
|
name: interfaceName,
|
|
family: info.family,
|
|
ip: info.address,
|
|
mac: info.mac,
|
|
localAddress: info.internal ? true : false,
|
|
netmask: info.netmask,
|
|
gateway: info.gateway,
|
|
};
|
|
});
|
|
data.push(item);
|
|
}
|
|
return data;
|
|
};
|
|
|
|
const getAll = () => {
|
|
return {
|
|
SystemInfo: getSystemInfo(),
|
|
CPUInfo: getCPUInfo(),
|
|
MemoryInfo: getMemoryInfo(),
|
|
UserInfo: getUserInfo(),
|
|
DirInfo: getDirInfo(),
|
|
DutyInfo: getDutyInfo(),
|
|
NetworkInterfaceInfo: getNetworkInterfaceInfo(),
|
|
};
|
|
};
|
|
|
|
module.exports = {
|
|
getSystemInfo,
|
|
getCPUInfo,
|
|
getMemoryInfo,
|
|
getUserInfo,
|
|
getDirInfo,
|
|
getDutyInfo,
|
|
getNetworkInterfaceInfo,
|
|
getAll,
|
|
};
|