# chj.system-monitor – metriky, paměť a virtuální paměť Plugin čte metriky přes existující SSH relaci Core. Linux a Windows mají oddělené backendy; platforma se určuje z `uname -s`, jinak z Windows registru / `Win32_OperatingSystem` (`src/main/sessions/platformDetect.js`). Neznámý systém vrací `METRICS_PLATFORM_UNSUPPORTED`, nikdy se neposílá skript pro jiný OS. ## Metriky - Linux: pevný POSIX příkaz v `src/main/sessions/sessionManager.js` (`/proc`, `df`, `ip`), detail paměti `parseLinuxMemoryDetail`. Použitá RAM = MemTotal − MemFree − Buffers − Cached − SReclaimable (bez dvojího počítání). - Windows: `src/main/sessions/windowsMetrics.js` – PowerShell skript přes stdin (bootstrap `-EncodedCommand`), funguje s výchozím shellem cmd.exe i PowerShell. CPU z rozdílu dvou vzorků raw čítačů, load average se nepředstírá (místo něj fronta procesoru). Paměť jako nepřekrývající se seznamy (používaná, upravená, pohotovostní, volná); commit limit není velikost pagefile. Pokud ovladač síťové karty nehlásí bajty, zobrazí se pakety a důvod. - NGINX inspekce a vzdálený editor jsou na Windows odmítnuty kódem `FEATURE_PLATFORM_UNSUPPORTED`. ## Latence (terminál) - ICMP: 3 pakety lokálním `ping` (bez shellu, bez root) na adresu použitou SSH, medián, ztráta, důvod (timeout/unreachable/denied). Blokované ICMP neznamená nedostupný server. - SSH odezva: 3 postupné vzorky přes SSH transport (keepalive request), záložně `exit 0`; další měření až 10 s po dokončení předchozího, zastaví se při odpojení. ICMP a SSH se měří nezávisle. ## Virtuální paměť - Oddíl „Paměť a virtuální paměť“ ukazuje rozpad RAM, historii RAM/swap, swap oblasti nebo pagefile. Čtení metrik nepotřebuje sudo; správa vyžaduje oprávnění `system.memory.manage`. - Linux (`src/main/system/remoteSwap.sh`, root nebo sudo): vytvoření, aktivace, bezpečná deaktivace, změna velikosti, priority, persistence (fstab se zálohou `/etc/fstab.chj-backup-*`) a smazání swap souborů jen v `/swapfile*`, `/swap/`, `/var/lib/swap/`; velikost 64 MiB–64 GiB. Souborové systémy ext2/3/4, XFS, Btrfs (mkswapfile/NOCOW), F2FS. Swapoff se odmítne, pokud by data nebylo kam přesunout (MemAvailable minus rezerva max(10 % RAM, 512 MiB), nejvýše 25 % RAM, plus volný jiný swap); nepoužitý swap lze vypnout vždy. Oddíly lze jen deaktivovat/přeprioritizovat, zram/zswap jen číst. - Windows (`src/main/system/windowsPagefile.ps1`, SSH relace se zvýšeným tokenem, UAC se neobchází): automatická správa, vlastní velikost (≥ 16 MB nebo velikost spravovaná systémem), přidání/odebrání pagefile na jednotce. Změny se projeví až po restartu; **CH-J Windows nikdy nerestartuje**. Před změnou se ukládá záloha, UI ukazuje stav „čeká na restart“ a varuje před odebráním posledního pagefile (commit limit, výpis paměti při pádu). ## Testy - `npm test` – jednotkové testy (`test/sessionManager.test.js`, `test/latencyMonitor.test.js`, `test/remoteSwap.test.js`). - `test/linuxVmIntegration.test.js` – jen izolovaná Linux testovací VM (`CHJ_VM_HOST`, `CHJ_VM_FINGERPRINT`, `CHJ_VM_KEY`, `CHJ_VM_SUDO_PASSWORD` nebo `CHJ_VM_SUDO_PASSWORD_FILE` + `_LINE`); metriky, latence, swap i chj.users přes skutečné SSH. - `CHJ_USERS_INTEGRATION=1 CHJ_USERS_IMAGE=chj-users-it-debian node --test test/systemMonitorIntegration.test.js` – destruktivní testy swapu v jednorázovém privilegovaném kontejneru (`CHJ_SWAP_SECOND_FS=btrfs` pro Btrfs). - `test/systemMonitorWindowsIntegration.test.js` – jen izolovaný testovací Windows stroj (`CHJ_USERS_WINDOWS_*`); vrací původní nastavení pagefile. - `npx electron scripts/smokeSystemMonitorUi.js [adresář-snímků]` – UI smoke (Linux kontejner, `CHJ_SMOKE_WINDOWS=1` pro Windows VM).