Files
Loki/rust/loki-rs/tests/sysinfo.rs
T
MichaelandClaude Opus 5.5 dc6a001581 Lot 4 : mesures système et diagnostics de stockage portés en Rust
Le module sysinfo de loki-rs reprend, à l'identique, ce dont les routes
/api/ram, /api/vram et le bandeau de /api/status ont besoin côté Go.

La RAM se lit dans /proc/meminfo (MemTotal moins MemAvailable, en Mo) ;
hors Linux la façade rend (0, 0) et l'interface masque le bloc. Les jauges
GPU interrogent nvidia-smi, bornées à dix secondes, et passent par un cache
partagé : deux secondes de validité, une minute quand le binaire est
introuvable, et un verrou tenu pendant la requête pour que les onglets
simultanés attendent la même lecture au lieu d'en lancer chacun une. La
structure GpuStat sérialise name, used, total, util et temp, les noms que
handleVram envoie déjà.

L'alerte « /data n'est PAS un volume monté » et le conseil fuse.shfs
d'Unraid gardent leurs textes, leur règle du montage le plus long et leur
cache d'une minute. Les dossiers de modèles venant de la base, le conseil
reçoit leur lecture en fermeture asynchrone, appelée seulement quand le
cache expire.

Les tests Go de sys_storagefuse_test.go et la partie cache de
web_vram_test.go sont portés un pour un ; le test hors conteneur, qui
touche à l'environnement, vit seul dans tests/sysinfo.rs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 17:48:18 +02:00

32 lines
1.2 KiB
Rust

//! Port de `TestStorageFuseHintOutsideContainer` (sys_storagefuse_test.go),
//! étendu à `dataVolumeWarning` qui suit la même règle. Il modifie
//! l'environnement du processus : il vit seul dans ce binaire de test.
use loki_rs::sysinfo::{data_volume_warning, storage_fuse_hint};
#[tokio::test]
async fn hors_conteneur_aucun_conseil() {
let jamais = || async { panic!("dossiers de modèles lus hors conteneur") };
// SAFETY : seul test de ce binaire, aucun autre fil ne lit l'environnement.
unsafe { std::env::set_var("LOKI_CONTAINER", "") };
let s = storage_fuse_hint(jamais).await;
assert_eq!(s, "", "hors conteneur, aucun conseil attendu");
assert_eq!(
data_volume_warning(),
"",
"hors conteneur, aucune alerte attendue"
);
if !cfg!(target_os = "linux") {
// SAFETY : idem.
unsafe { std::env::set_var("LOKI_CONTAINER", "1") };
let s = storage_fuse_hint(jamais).await;
assert_eq!(s, "", "hors Linux, aucun conseil attendu");
// Hors Linux, /proc/self/mountinfo n'existe pas : rien à signaler.
assert_eq!(
data_volume_warning(),
"",
"hors Linux, aucune alerte attendue"
);
}
}