From 6c3ee2fbe8c1a747f888317139cabfa475da588c Mon Sep 17 00:00:00 2001 From: lukas-heiligenbrunner Date: Fri, 16 Dec 2022 16:06:50 +0100 Subject: [PATCH] parse output of smartctl --- lib/src/parser/mod.rs | 3 ++- lib/src/parser/smart_parser.rs | 39 ++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 lib/src/parser/smart_parser.rs diff --git a/lib/src/parser/mod.rs b/lib/src/parser/mod.rs index 31db31b..2741b6c 100644 --- a/lib/src/parser/mod.rs +++ b/lib/src/parser/mod.rs @@ -1,2 +1,3 @@ pub mod mdstat_parser; -pub mod lsblk_parser; \ No newline at end of file +pub mod lsblk_parser; +mod smart_parser; diff --git a/lib/src/parser/smart_parser.rs b/lib/src/parser/smart_parser.rs new file mode 100644 index 0000000..5461278 --- /dev/null +++ b/lib/src/parser/smart_parser.rs @@ -0,0 +1,39 @@ +use std::process::Command; +use rocket::serde::json::serde_json; + +use rocket::serde::{Deserialize}; + +#[derive(Deserialize)] +#[serde(crate = "rocket::serde")] +struct DiskInfo { + model_family: String, + model_name: String, + serial_number: String, + rotation_rate: u32, +} + +fn get_disk_info(diskpath: &str) -> Option { + let mut cmd = Command::new("smartctl"); + cmd.arg("-i") + .arg("-json") + .arg(diskpath); + let output = match cmd.output() { + Ok(output) => output, + Err(err) => { + println!("error while getting smart info: {}", err); + return None; + } + }; + + let rawsmart = output.stdout; + + let info: DiskInfo = match serde_json::from_slice(&rawsmart) { + Ok(info) => info, + Err(err) => { + println!("{}", err); + return None; + } + }; + + Some(info) +}