diff --git a/Cargo.toml b/Cargo.toml index 3024328..b8e46b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,3 +10,4 @@ dotenv-parser = "0.1.3" regex = "1.7.1" serde = {version = "1.0.154", features = ["derive"]} serde_json = "1.0.94" +time-hms = "0.3.0" diff --git a/src/lib.rs b/src/lib.rs index fbd0349..acd1cf0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,29 +1,69 @@ -use std::fs::read_to_string; use dotenv_parser::parse_dotenv; +use std::{fs::read_to_string, collections::HashMap}; pub fn get_os() -> String { let os_release = read_to_string("/etc/os-release").unwrap(); let parsed = parse_dotenv(&os_release).unwrap(); - parsed.get("PRETTY_NAME").unwrap().clone().trim().to_string() + parsed + .get("PRETTY_NAME") + .unwrap() + .clone() + .trim() + .to_string() } pub fn get_cpu() { - let binding = std::process::Command::new("lscpu").output().expect("lscpu failed"); + let binding = std::process::Command::new("lscpu") + .output() + .expect("lscpu failed"); let lscpu = String::from_utf8_lossy(&binding.stdout); println!("{}", &lscpu) } pub fn get_arch() -> String { - let binding = std::process::Command::new("uname").arg("-m").output().expect("uname failed"); + let binding = std::process::Command::new("uname") + .arg("-m") + .output() + .expect("uname failed"); let arch = String::from_utf8_lossy(&binding.stdout); arch.to_string().trim().to_string() } pub fn get_kernel_ver() -> String { - let binding = std::process::Command::new("uname").arg("-r").output().expect("uname failed"); + let binding = std::process::Command::new("uname") + .arg("-r") + .output() + .expect("uname failed"); let ver = String::from_utf8_lossy(&binding.stdout); ver.to_string().trim().to_string() } + +pub fn get_uptime() -> time_hms::TimeHms { + time_hms::TimeHms::new( + read_to_string("/proc/uptime") + .expect("couldn't read uptime file") + .split(' ') + .collect::>()[0] + .split('.') + .collect::>()[0] + .parse() + .expect("couldnt parse number from uptime str"), + ) +} + +pub fn get_ram() { + let meminfo = read_to_string("/proc/meminfo").expect("couldnt read meminfo file"); + + let mut parsed: HashMap = HashMap::new(); + + for line in meminfo.lines() { + let mut l = line.split(": ").collect::>(); + let name = l.drain(0..1).collect::>()[0]; + let li = l.join(": "); + parsed.insert(name.to_string(), li.trim().to_string()); + } + println!("{:?}", parsed.get("MemAvailable").unwrap()) +} diff --git a/src/main.rs b/src/main.rs index a9bb270..1b707ce 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,15 @@ fn main() { let os = get_os(); let arch = get_arch(); let kernel = get_kernel_ver(); + let uptime = get_uptime(); + let ram = get_ram(); - println!("OS Name: {os}\nArchitecture: {arch}\nKernel Version: {kernel}"); + // ram + // storage + // cpu name/usage + // gpu name/usage (not sure, might need external packages) + // packages/package manager(s) + // user/hostname + + println!("OS Name: {os}\nArchitecture: {arch}\nKernel Version: {kernel}\nUptime: {}:{}:{}", uptime.h(), uptime.m(), uptime.s()); }