feat(agent v0.1.6): métriques réseau enrichies + hardware dmidecode
- Nouveaux types payload: NetworkInterface, HardwareInfo - Config: slow_daily_time (HH:MM), network_info, hardware_info - Module network_info: interfaces locales, type ETH/WIFI, speed, MAC, WoL, iperf3 - Module hardware: dmidecode (carte mère, CPU, slots RAM, type/vitesse) - Scheduler: collecte au démarrage + 1×/jour à l'heure configurée - install.sh: ajout iperf3, dmidecode dans paquets Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -72,6 +72,27 @@ fn main() {
|
||||
let mut first_medium = true;
|
||||
let mut first_slow = true;
|
||||
|
||||
// Scheduler métriques lentes (startup + 1×/jour à l'heure configurée)
|
||||
let slow_time: (u32, u32) = {
|
||||
let parts: Vec<&str> = cfg.metrics.slow_daily_time.splitn(2, ':').collect();
|
||||
let h = parts.first().and_then(|s| s.parse().ok()).unwrap_or(3u32);
|
||||
let m = parts.get(1).and_then(|s| s.parse().ok()).unwrap_or(0u32);
|
||||
(h, m)
|
||||
};
|
||||
let mut slow_daily_done = false;
|
||||
let mut slow_last_yday = metrics::network_info::current_yday().wrapping_sub(1);
|
||||
|
||||
// Collecte immédiate au démarrage
|
||||
let mut startup_net: Option<Vec<payload::NetworkInterface>> = None;
|
||||
let mut startup_hw: Option<payload::HardwareInfo> = None;
|
||||
if cfg.metrics.network_info.udp || cfg.metrics.network_info.mqtt {
|
||||
let ni = metrics::network_info::collect(&cfg.server.ip);
|
||||
if !ni.is_empty() { startup_net = Some(ni); }
|
||||
}
|
||||
if cfg.metrics.hardware_info.udp || cfg.metrics.hardware_info.mqtt {
|
||||
startup_hw = metrics::hardware::collect();
|
||||
}
|
||||
|
||||
while RUNNING.load(Ordering::Relaxed) {
|
||||
let now = Instant::now();
|
||||
|
||||
@@ -82,11 +103,35 @@ fn main() {
|
||||
sys.refresh_cpu_usage();
|
||||
sys.refresh_memory();
|
||||
|
||||
// Métriques lentes quotidiennes
|
||||
let cur_yday = metrics::network_info::current_yday();
|
||||
if cur_yday != slow_last_yday {
|
||||
slow_last_yday = cur_yday;
|
||||
slow_daily_done = false;
|
||||
}
|
||||
let mut daily_net: Option<Vec<payload::NetworkInterface>> = None;
|
||||
let mut daily_hw: Option<payload::HardwareInfo> = None;
|
||||
if !slow_daily_done {
|
||||
let (ch, cm) = metrics::network_info::current_hhmm();
|
||||
if ch == slow_time.0 && cm == slow_time.1 {
|
||||
slow_daily_done = true;
|
||||
if cfg.metrics.network_info.udp || cfg.metrics.network_info.mqtt {
|
||||
let ni = metrics::network_info::collect(&cfg.server.ip);
|
||||
if !ni.is_empty() { daily_net = Some(ni); }
|
||||
}
|
||||
if cfg.metrics.hardware_info.udp || cfg.metrics.hardware_info.mqtt {
|
||||
daily_hw = metrics::hardware::collect();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let mut m = payload::AgentMetrics {
|
||||
hostname: hostname.clone(),
|
||||
ip: ip.clone(),
|
||||
status: "online".to_string(),
|
||||
version: env!("CARGO_PKG_VERSION").to_string(),
|
||||
network_info: daily_net.or_else(|| startup_net.take()),
|
||||
hardware_info: daily_hw.or_else(|| startup_hw.take()),
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user