fix(smart v0.1.8): NVMe — contrôleur correct + flag -a pour attributs complets
- /sys/block expose nvme0n1 (namespace), mais smartctl a besoin du contrôleur nvme0 → déduplication via HashSet pour éviter les doublons nvme0n1/nvme0 - smartctl -j → smartctl -a -j pour inclure nvme_smart_health_information_log (sans -a, le log de santé NVMe n'est pas dans la sortie JSON) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "nanometrics-agent"
|
||||
version = "0.1.7"
|
||||
version = "0.1.8"
|
||||
edition = "2021"
|
||||
|
||||
[lib]
|
||||
|
||||
@@ -89,15 +89,29 @@ pub fn collect() -> Option<Vec<crate::payload::SmartMetrics>> {
|
||||
.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::<std::collections::HashSet<_>>()
|
||||
.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) {
|
||||
|
||||
Reference in New Issue
Block a user