import GLib from "gi://GLib" import { createPoll } from "ags/time" function readProc(path: string): string | null { try { const [ok, contents] = GLib.file_get_contents(path) if (ok && contents) return new TextDecoder().decode(contents) } catch {} return null } let prevIdle = 0 let prevTotal = 0 function getCpuUsage(): string { const content = readProc("/proc/stat") if (!content) return "?" const line = content.split("\n")[0] // "cpu user nice system idle ..." const parts = line.split(/\s+/).slice(1).map(Number) const idle = parts[3] + parts[4] // idle + iowait const total = parts.reduce((a, b) => a + b, 0) const dIdle = idle - prevIdle const dTotal = total - prevTotal prevIdle = idle prevTotal = total if (dTotal === 0) return "0" return `${Math.round(((dTotal - dIdle) / dTotal) * 100)}` } function getRamUsage(): string { const content = readProc("/proc/meminfo") if (!content) return "?" const lines = content.split("\n") let total = 0, available = 0 for (const line of lines) { if (line.startsWith("MemTotal:")) total = parseInt(line.split(/\s+/)[1]) if (line.startsWith("MemAvailable:")) available = parseInt(line.split(/\s+/)[1]) if (total && available) break } if (!total) return "?" return `${Math.round(((total - available) / total) * 100)}` } export default function SystemStats() { const cpu = createPoll("0", 3000, () => getCpuUsage()) const ram = createPoll("0", 5000, () => getRamUsage()) return ( ) }