src/tools/disks/smart.rs: try to get correct wearout for ATA devices
This commit is contained in:
parent
059b7a252e
commit
484e761dab
|
@ -102,6 +102,7 @@ pub fn get_smart_data(
|
||||||
|
|
||||||
// ATA devices
|
// ATA devices
|
||||||
if let Some(list) = output["ata_smart_attributes"]["table"].as_array() {
|
if let Some(list) = output["ata_smart_attributes"]["table"].as_array() {
|
||||||
|
let wearout_id = lookup_vendor_wearout_id(disk);
|
||||||
for item in list {
|
for item in list {
|
||||||
let id = match item["id"].as_u64() {
|
let id = match item["id"].as_u64() {
|
||||||
Some(id) => id,
|
Some(id) => id,
|
||||||
|
@ -138,6 +139,10 @@ pub fn get_smart_data(
|
||||||
None => continue, // skip attributes without threshold entry
|
None => continue, // skip attributes without threshold entry
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if id == wearout_id {
|
||||||
|
wearout = Some(normalized);
|
||||||
|
}
|
||||||
|
|
||||||
attributes.push(SmartAttribute {
|
attributes.push(SmartAttribute {
|
||||||
name,
|
name,
|
||||||
value: raw_value,
|
value: raw_value,
|
||||||
|
@ -184,3 +189,34 @@ pub fn get_smart_data(
|
||||||
|
|
||||||
Ok(SmartData { status, wearout, attributes })
|
Ok(SmartData { status, wearout, attributes })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn lookup_vendor_wearout_id(disk: &super::Disk) -> u64 {
|
||||||
|
|
||||||
|
static VENDOR_MAP: &[(&str, u64)] = &[
|
||||||
|
("kingston", 231),
|
||||||
|
("samsung", 177),
|
||||||
|
("intel", 233),
|
||||||
|
("sandisk", 233),
|
||||||
|
("crucial", 202),
|
||||||
|
];
|
||||||
|
|
||||||
|
let result = 233; // default
|
||||||
|
let model = match disk.model() {
|
||||||
|
Some(model) => {
|
||||||
|
if let Some(model) = model.to_str() {
|
||||||
|
model.to_lowercase()
|
||||||
|
} else {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None => return result,
|
||||||
|
};
|
||||||
|
|
||||||
|
for (vendor, attr_id) in VENDOR_MAP {
|
||||||
|
if model.contains(vendor) {
|
||||||
|
return *attr_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue