src / systemUtilities.ts
import { logger } from "./logger";
import { SystemInfo, NetworkInterfaceInfo } from "./types";
import * as os from "os";
import * as fs from "fs";
let _cachedSystemInfo: SystemInfo | null = null;
export function getSystemInfo(): SystemInfo {
if (_cachedSystemInfo) return _cachedSystemInfo;
const totalMem = os.totalmem();
const freeMem = os.freemem();
_cachedSystemInfo = {
platform: os.platform(),
arch: os.arch(),
hostname: os.hostname(),
cpuCount: os.cpus().length,
totalMemory: totalMem,
freeMemory: freeMem,
memoryPercent: ((totalMem - freeMem) / totalMem) * 100,
loadAvg: {
load1: os.loadavg()[0],
load5: os.loadavg()[1],
load15: os.loadavg()[2],
},
uptime: os.uptime(),
tempDir: os.tmpdir(),
homeDir: os.homedir(),
cpus: os.cpus().map((cpu) => ({
model: cpu.model,
speed: cpu.speed,
usage: 0, // Placeholder — requires system-level API
})),
};
return _cachedSystemInfo;
}
export function clearSystemInfoCache(): void {
_cachedSystemInfo = null;
}
export function getNetworkInterfaces(): NetworkInterfaceInfo[] {
const rawIfaces = os.networkInterfaces();
const result: NetworkInterfaceInfo[] = [];
for (const [name, entries] of Object.entries(rawIfaces)) {
if (!entries) continue;
for (const iface of entries) {
if (!iface) continue;
result.push({
name: name,
family: iface.family as "IPv4" | "IPv6",
address: iface.address,
netmask: iface.netmask || "",
mac: iface.mac,
internal: iface.internal,
cidr: (iface as any).cidr,
});
}
}
return result;
}
src / systemUtilities.ts
import { logger } from "./logger";
import { SystemInfo, NetworkInterfaceInfo } from "./types";
import * as os from "os";
import * as fs from "fs";
let _cachedSystemInfo: SystemInfo | null = null;
export function getSystemInfo(): SystemInfo {
if (_cachedSystemInfo) return _cachedSystemInfo;
const totalMem = os.totalmem();
const freeMem = os.freemem();
_cachedSystemInfo = {
platform: os.platform(),
arch: os.arch(),
hostname: os.hostname(),
cpuCount: os.cpus().length,
totalMemory: totalMem,
freeMemory: freeMem,
memoryPercent: ((totalMem - freeMem) / totalMem) * 100,
loadAvg: {
load1: os.loadavg()[0],
load5: os.loadavg()[1],
load15: os.loadavg()[2],
},
uptime: os.uptime(),
tempDir: os.tmpdir(),
homeDir: os.homedir(),
cpus: os.cpus().map((cpu) => ({
model: cpu.model,
speed: cpu.speed,
usage: 0, // Placeholder — requires system-level API
})),
};
return _cachedSystemInfo;
}
export function clearSystemInfoCache(): void {
_cachedSystemInfo = null;
}
export function getNetworkInterfaces(): NetworkInterfaceInfo[] {
const rawIfaces = os.networkInterfaces();
const result: NetworkInterfaceInfo[] = [];
for (const [name, entries] of Object.entries(rawIfaces)) {
if (!entries) continue;
for (const iface of entries) {
if (!iface) continue;
result.push({
name: name,
family: iface.family as "IPv4" | "IPv6",
address: iface.address,
netmask: iface.netmask || "",
mac: iface.mac,
internal: iface.internal,
cidr: (iface as any).cidr,
});
}
}
return result;
}