feat(agent): métriques CPU, RAM, réseau, uptime

Implémentation complète des 4 modules sysinfo 0.30 (sans default-features).
- cpu: moyenne sur tous les cœurs via refresh_cpu_usage()
- memory: used/free/total via System
- network: total_received/total_transmitted via Networks
- uptime: System::uptime() statique
10 tests unitaires passent.
This commit is contained in:
Gilles Soulier
2026-05-22 11:34:30 +02:00
parent c473ed9dfa
commit 22212460fc
4 changed files with 74 additions and 7 deletions
+25 -2
View File
@@ -1,3 +1,26 @@
pub fn get(_sys: &sysinfo::System) -> f32 {
0.0
use sysinfo::System;
pub fn get(sys: &System) -> f32 {
let cpus = sys.cpus();
if cpus.is_empty() {
return 0.0;
}
let total: f32 = cpus.iter().map(|c| c.cpu_usage()).sum();
total / cpus.len() as f32
}
#[cfg(test)]
mod tests {
use super::*;
use sysinfo::System;
#[test]
fn test_cpu_in_range() {
let mut sys = System::new();
sys.refresh_cpu_usage();
std::thread::sleep(std::time::Duration::from_millis(200));
sys.refresh_cpu_usage();
let val = get(&sys);
assert!(val >= 0.0 && val <= 100.0, "CPU hors plage : {}", val);
}
}
+19 -2
View File
@@ -1,3 +1,20 @@
pub fn get(_sys: &sysinfo::System) -> (u64, u64, u64) {
(0, 0, 0)
use sysinfo::System;
pub fn get(sys: &System) -> (u64, u64, u64) {
(sys.used_memory(), sys.free_memory(), sys.total_memory())
}
#[cfg(test)]
mod tests {
use super::*;
use sysinfo::System;
#[test]
fn test_memory_coherent() {
let mut sys = System::new();
sys.refresh_memory();
let (used, free, total) = get(&sys);
assert!(total > 0, "Total mémoire nul");
assert!(used + free <= total + 1024 * 1024, "used + free > total");
}
}
+20 -2
View File
@@ -1,5 +1,23 @@
use sysinfo::Networks;
pub fn get(_nets: &Networks) -> (u64, u64) {
(0, 0)
pub fn get(networks: &Networks) -> (u64, u64) {
let rx: u64 = networks.iter().map(|(_, n)| n.total_received()).sum();
let tx: u64 = networks.iter().map(|(_, n)| n.total_transmitted()).sum();
(rx, tx)
}
#[cfg(test)]
mod tests {
use super::*;
use sysinfo::Networks;
#[test]
fn test_network_values_non_negative() {
let mut nets = Networks::new_with_refreshed_list();
nets.refresh();
let (rx, tx) = get(&nets);
// Les compteurs cumulatifs sont toujours >= 0 (u64)
let _ = rx;
let _ = tx;
}
}
+10 -1
View File
@@ -1,3 +1,12 @@
pub fn get() -> u64 {
0
sysinfo::System::uptime()
}
#[cfg(test)]
mod tests {
#[test]
fn test_uptime_positif() {
let up = super::get();
assert!(up > 0, "uptime nul ou négatif");
}
}