# 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. ### Priorita swapu - **Efektivní** priorita = sloupec Priority v `/proc/swaps`; **uložená** = `pri=` v `/etc/fstab` (bez `pri=` = automatická). Záporná čísla přiděluje jádro v automatickém režimu (`-2`, `-3`, …); UI je zobrazí jako „automatická“, nikdy je nenabízí jako vstup. - Dialog „Nastavení priority SWAP“: režim Automatická / Vlastní (0–32767, rozsah `SWAP_FLAG_PREFER` swapon(2)), aktuální a uložená priorita, volba Hned / Jen uložit a u swapu bez záznamu ve fstab volba „Uložit i pro restart“. Tabulka ukazuje pořadí (1. = přednostně, další = záloha, stejná priorita = střídání) a rozdíl uloženo/aktivní. - Uložení: existující záznam se upraví na místě (ostatní volby, spec UUID=/LABEL=/PARTUUID=/cesta, dump/pass a komentář zůstanou, ostatní řádky beze změny), automatická odebere jen `pri=`; záznam se hledá podle kanonické identity (findfs, readlink -f). Více záznamů pro jeden swap → `FSTAB_AMBIGUOUS`, nic se nemění. Každá změna má jedinečnou zálohu `/etc/fstab.chj-backup-<čas>-<náhodné>` (posledních 10). - Okamžité uplatnění: jádro neumí změnit prioritu aktivního swapu, proto swapoff + swapon jen tohoto swapu (nikdy `swapoff -a`), předem kontrola paměti; při riziku `SWAPOFF_UNSAFE` se nic nezmění a UI nabídne jen uložení pro příští aktivaci/restart. Selže-li swapon, swap se znovu aktivuje s původní prioritou a fstab se vrátí ze zálohy. Restart CH-J nikdy neprovádí. - Aktivace, změna velikosti a „Použít po restartu“ posílají `keep`: použije se `pri=` z fstab, jinak explicitní běžící priorita, jinak automatická – uživatelská priorita se tak neztratí. - 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).
Fonte publicada
Transferir fonte ZIP
CH-J Server Manager
Navegue por diretórios e arquivos para uma versão específica do aplicativo.
CH-J / Server Manager
377 arquivos
core-20261019T111616Z-160a00bfcddc
Adicionado: · Construído:
1
# chj.system-monitor – metriky, paměť a virtuální paměť3
Plugin čte metriky přes existující SSH relaci Core. Linux a Windows mají oddělené backendy; platforma se určuje4
z `uname -s`, jinak z Windows registru / `Win32_OperatingSystem` (`src/main/sessions/platformDetect.js`).5
Neznámý systém vrací `METRICS_PLATFORM_UNSUPPORTED`, nikdy se neposílá skript pro jiný OS.7
## Metriky8
- Linux: pevný POSIX příkaz v `src/main/sessions/sessionManager.js` (`/proc`, `df`, `ip`), detail paměti9
`parseLinuxMemoryDetail`. Použitá RAM = MemTotal − MemFree − Buffers − Cached − SReclaimable (bez dvojího počítání).10
- Windows: `src/main/sessions/windowsMetrics.js` – PowerShell skript přes stdin (bootstrap `-EncodedCommand`),11
funguje s výchozím shellem cmd.exe i PowerShell. CPU z rozdílu dvou vzorků raw čítačů, load average se12
nepředstírá (místo něj fronta procesoru). Paměť jako nepřekrývající se seznamy (používaná, upravená, pohotovostní,13
volná); commit limit není velikost pagefile. Pokud ovladač síťové karty nehlásí bajty, zobrazí se pakety a důvod.14
- NGINX inspekce a vzdálený editor jsou na Windows odmítnuty kódem `FEATURE_PLATFORM_UNSUPPORTED`.16
## Latence (terminál)17
- ICMP: 3 pakety lokálním `ping` (bez shellu, bez root) na adresu použitou SSH, medián, ztráta, důvod18
(timeout/unreachable/denied). Blokované ICMP neznamená nedostupný server.19
- SSH odezva: 3 postupné vzorky přes SSH transport (keepalive request), záložně `exit 0`; další měření až 10 s20
po dokončení předchozího, zastaví se při odpojení. ICMP a SSH se měří nezávisle.22
## Virtuální paměť23
- Oddíl „Paměť a virtuální paměť“ ukazuje rozpad RAM, historii RAM/swap, swap oblasti nebo pagefile.24
Čtení metrik nepotřebuje sudo; správa vyžaduje oprávnění `system.memory.manage`.25
- Linux (`src/main/system/remoteSwap.sh`, root nebo sudo): vytvoření, aktivace, bezpečná deaktivace, změna velikosti,26
priority, persistence (fstab se zálohou `/etc/fstab.chj-backup-*`) a smazání swap souborů jen v `/swapfile*`,27
`/swap/<název>`, `/var/lib/swap/<název>`; velikost 64 MiB–64 GiB. Souborové systémy ext2/3/4, XFS, Btrfs28
(mkswapfile/NOCOW), F2FS. Swapoff se odmítne, pokud by data nebylo kam přesunout (MemAvailable minus rezerva29
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.31
### Priorita swapu33
- **Efektivní** priorita = sloupec Priority v `/proc/swaps`; **uložená** = `pri=` v `/etc/fstab` (bez `pri=` = automatická). Záporná čísla přiděluje jádro v automatickém režimu (`-2`, `-3`, …); UI je zobrazí jako „automatická“, nikdy je nenabízí jako vstup.34
- Dialog „Nastavení priority SWAP“: režim Automatická / Vlastní (0–32767, rozsah `SWAP_FLAG_PREFER` swapon(2)), aktuální a uložená priorita, volba Hned / Jen uložit a u swapu bez záznamu ve fstab volba „Uložit i pro restart“. Tabulka ukazuje pořadí (1. = přednostně, další = záloha, stejná priorita = střídání) a rozdíl uloženo/aktivní.35
- Uložení: existující záznam se upraví na místě (ostatní volby, spec UUID=/LABEL=/PARTUUID=/cesta, dump/pass a komentář zůstanou, ostatní řádky beze změny), automatická odebere jen `pri=`; záznam se hledá podle kanonické identity (findfs, readlink -f). Více záznamů pro jeden swap → `FSTAB_AMBIGUOUS`, nic se nemění. Každá změna má jedinečnou zálohu `/etc/fstab.chj-backup-<čas>-<náhodné>` (posledních 10).36
- Okamžité uplatnění: jádro neumí změnit prioritu aktivního swapu, proto swapoff + swapon jen tohoto swapu (nikdy `swapoff -a`), předem kontrola paměti; při riziku `SWAPOFF_UNSAFE` se nic nezmění a UI nabídne jen uložení pro příští aktivaci/restart. Selže-li swapon, swap se znovu aktivuje s původní prioritou a fstab se vrátí ze zálohy. Restart CH-J nikdy neprovádí.37
- Aktivace, změna velikosti a „Použít po restartu“ posílají `keep`: použije se `pri=` z fstab, jinak explicitní běžící priorita, jinak automatická – uživatelská priorita se tak neztratí.39
- Windows (`src/main/system/windowsPagefile.ps1`, SSH relace se zvýšeným tokenem, UAC se neobchází): automatická40
správa, vlastní velikost (≥ 16 MB nebo velikost spravovaná systémem), přidání/odebrání pagefile na jednotce.41
Změny se projeví až po restartu; **CH-J Windows nikdy nerestartuje**. Před změnou se ukládá záloha, UI ukazuje42
stav „čeká na restart“ a varuje před odebráním posledního pagefile (commit limit, výpis paměti při pádu).44
## Testy45
- `npm test` – jednotkové testy (`test/sessionManager.test.js`, `test/latencyMonitor.test.js`, `test/remoteSwap.test.js`).46
- `test/linuxVmIntegration.test.js` – jen izolovaná Linux testovací VM (`CHJ_VM_HOST`, `CHJ_VM_FINGERPRINT`, `CHJ_VM_KEY`,47
`CHJ_VM_SUDO_PASSWORD` nebo `CHJ_VM_SUDO_PASSWORD_FILE` + `_LINE`); metriky, latence, swap i chj.users přes skutečné SSH.48
- `CHJ_USERS_INTEGRATION=1 CHJ_USERS_IMAGE=chj-users-it-debian node --test test/systemMonitorIntegration.test.js` –49
destruktivní testy swapu v jednorázovém privilegovaném kontejneru (`CHJ_SWAP_SECOND_FS=btrfs` pro Btrfs).50
- `test/systemMonitorWindowsIntegration.test.js` – jen izolovaný testovací Windows stroj (`CHJ_USERS_WINDOWS_*`);51
vrací původní nastavení pagefile.52
- `npx electron scripts/smokeSystemMonitorUi.js [adresář-snímků]` – UI smoke (Linux kontejner,53
`CHJ_SMOKE_WINDOWS=1` pro Windows VM).SHA-256
059ce6a51eff6a5476f5c82ed5b27a49578a95d26c6dc3e96991ecf6be16b9feCH-J Proprietary Software License 1.14 · A fonte é fornecida sob o CH-J Proprietary Software License 1.14. A sua disponibilidade não altera os termos licença nem concede direitos adicionais.
Ficheiro SHA-256
a9605c0870a223b6a8542bb0705edd51d8b04f3069582653417a8397fabcc09a