# 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/<název>`, `/var/lib/swap/<název>`; 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).
