import si from "systeminformation"; import type { SystemResult } from "@/lib/types/system-result"; const CACHE_MS = 1_000; let lastSample: { data: SystemResult; ts: number } | null = null; let inFlight: Promise | null = null; function pickDisk(disks: si.Systeminformation.FsSizeData[]): si.Systeminformation.FsSizeData | undefined { return disks.find((disk) => disk.mount === "/") ?? disks.sort((a, b) => b.size - a.size)[0]; } async function sample(): Promise { const [load, mem, disks, net] = await Promise.all([ si.currentLoad(), si.mem(), si.fsSize(), si.networkStats(), ]); const disk = pickDisk(disks); const primaryNet = net[0]; return { cpuPercent: load.currentLoad, memUsedBytes: mem.active, memTotalBytes: mem.total, diskUsedBytes: disk?.used ?? 0, diskTotalBytes: disk?.size ?? 0, netRxBytesPerSec: primaryNet?.rx_sec ?? 0, netTxBytesPerSec: primaryNet?.tx_sec ?? 0, }; } export async function collectSystem(): Promise { const now = Date.now(); if (lastSample && now - lastSample.ts < CACHE_MS) { return lastSample.data; } if (inFlight) return inFlight; inFlight = sample() .then((data) => { lastSample = { data, ts: Date.now() }; return data; }) .finally(() => { inFlight = null; }); return inFlight; }