diff --git a/agent/Cargo.toml b/agent/Cargo.toml index 5971f78..f87de66 100644 --- a/agent/Cargo.toml +++ b/agent/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nanometrics-agent" -version = "0.1.7" +version = "0.1.8" edition = "2021" [lib] diff --git a/agent/src/metrics/smart.rs b/agent/src/metrics/smart.rs index d83f9ba..0adc2b2 100644 --- a/agent/src/metrics/smart.rs +++ b/agent/src/metrics/smart.rs @@ -89,15 +89,29 @@ pub fn collect() -> Option> { .flatten() .flatten() .map(|e| e.file_name().into_string().unwrap_or_default()) - .filter(|n| n.starts_with("sd") || n.starts_with("nvme")) - .map(|n| format!("/dev/{}", n)) + .filter_map(|n| { + if n.starts_with("sd") { + Some(format!("/dev/{}", n)) + } else if n.starts_with("nvme") && !n.contains('n') { + // /sys/block contient nvme0n1 (namespace) — on utilise le contrôleur nvme0 + Some(format!("/dev/{}", n)) + } else if n.starts_with("nvme") && n.contains('n') { + // Déduit le contrôleur depuis nvme0n1 → nvme0 + let ctrl = n.split('n').next()?; + Some(format!("/dev/{}", ctrl)) + } else { + None + } + }) + .collect::>() + .into_iter() .collect(); devs.sort(); let mut results = Vec::new(); for dev in &devs { let Ok(output) = std::process::Command::new("smartctl") - .args(["-j", dev]) + .args(["-a", "-j", dev]) .output() else { continue }; let json = String::from_utf8_lossy(&output.stdout); if let Ok(metrics) = parse_json(&json) { diff --git a/dist/nanometrics-agent-linux-amd64 b/dist/nanometrics-agent-linux-amd64 index dd4b378..23c5d20 100755 Binary files a/dist/nanometrics-agent-linux-amd64 and b/dist/nanometrics-agent-linux-amd64 differ diff --git a/dist/nanometrics-agent-linux-arm64 b/dist/nanometrics-agent-linux-arm64 index f47b9e8..d8c2d39 100755 Binary files a/dist/nanometrics-agent-linux-arm64 and b/dist/nanometrics-agent-linux-arm64 differ