remove argh dep

This commit is contained in:
2026-07-06 15:16:16 +05:30
parent a38753393f
commit 39f2f134bb
3 changed files with 72 additions and 137 deletions
Generated
-94
View File
@@ -2,43 +2,10 @@
# It is not intended for manual editing. # It is not intended for manual editing.
version = 4 version = 4
[[package]]
name = "argh"
version = "0.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34ff18325c8a36b82f992e533ece1ec9f9a9db446bd1c14d4f936bac88fcd240"
dependencies = [
"argh_derive",
"argh_shared",
"rust-fuzzy-search",
]
[[package]]
name = "argh_derive"
version = "0.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adb7b2b83a50d329d5d8ccc620f5c7064028828538bdf5646acd60dc1f767803"
dependencies = [
"argh_shared",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "argh_shared"
version = "0.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a464143cc82dedcdc3928737445362466b7674b5db4e2eb8e869846d6d84f4f6"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "hmon" name = "hmon"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"argh",
"json", "json",
] ]
@@ -47,64 +14,3 @@ name = "json"
version = "0.12.4" version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "078e285eafdfb6c4b434e0d31e8cfcb5115b651496faca5749b88fafd4f23bfd" checksum = "078e285eafdfb6c4b434e0d31e8cfcb5115b651496faca5749b88fafd4f23bfd"
[[package]]
name = "proc-macro2"
version = "1.0.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
dependencies = [
"proc-macro2",
]
[[package]]
name = "rust-fuzzy-search"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a157657054ffe556d8858504af8a672a054a6e0bd9e8ee531059100c0fa11bb2"
[[package]]
name = "serde"
version = "1.0.164"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.164"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "syn"
version = "2.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "unicode-ident"
version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
-3
View File
@@ -3,10 +3,7 @@ name = "hmon"
version = "0.1.0" version = "0.1.0"
edition = "2024" edition = "2024"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
argh = "0.1.13"
json = "0.12.4" json = "0.12.4"
[profile.release] [profile.release]
+72 -40
View File
@@ -1,55 +1,89 @@
use core::panic; use core::panic;
use json::JsonValue; use json::JsonValue;
use std::process::Command; use std::{env, process::Command};
const HELP: &str = r#"Usage: hmon <query>
query:
cpu Get CPU temperature
gpu Get GPU temperature
"#;
fn main() { fn main() {
let args = argh::from_env::<Cli>(); let Some(args) = CliArgs::from_env() else {
if args.query == "cpu" { eprintln!("{}", HELP);
let sensors = get_json_command_result(Command::new("sensors").arg("-j"));
let cpu_temp = &sensors["k10temp-pci-00c3"]["Tctl"]["temp1_input"];
let cpu_temp = json_to_int_value(cpu_temp);
println!("{}", cpu_temp);
return; return;
} };
let gpu_temp = get_string_command_result( match args.query {
Command::new("nvidia-smi") HmonCmd::Cpu => {
.arg("--query-gpu=temperature.gpu") let sensors = get_json_command_result(Command::new("sensors").arg("-j"));
.arg("--format=csv,noheader"), let cpu_temp = &sensors["k10temp-pci-00c3"]["Tctl"]["temp1_input"];
); let cpu_temp = json_to_int_value(cpu_temp);
let gpu_temp = str_to_int_value(gpu_temp); println!("{}", cpu_temp);
},
println!("{}", gpu_temp); HmonCmd::Gpu => {
let gpu_temp = get_string_command_result(
Command::new("nvidia-smi")
.arg("--query-gpu=temperature.gpu")
.arg("--format=csv,noheader"),
);
let gpu_temp = str_to_int_value(gpu_temp);
println!("{}", gpu_temp);
}
};
} }
/// Command line interface for querying system temperatures. enum HmonCmd {
#[derive(argh::FromArgs)] Cpu,
struct Cli { Gpu,
/// query type, either "cpu" or "gpu" }
#[argh(positional)]
query: String, struct CliArgs {
query: HmonCmd,
}
impl CliArgs {
fn from_env() -> Option<Self> {
let mut args = env::args();
if let None = args.next() {
panic!("Program was invoked in an unexpected way");
};
if let Some(query) = args.next() {
let query = match query.as_str() {
"cpu" => Some(HmonCmd::Cpu),
"gpu" => Some(HmonCmd::Gpu),
_ => None,
};
let Some(query) = query else {
return None;
};
return Some(Self { query });
};
None
}
} }
fn json_to_int_value(number: &JsonValue) -> i64 { fn json_to_int_value(number: &JsonValue) -> i64 {
match number { match number {
JsonValue::Number(_) => { JsonValue::Number(_) => match number.as_f64() {
match number.as_f64() { Some(x) => x as i64,
Some(x) => x as i64, None => -1,
None => -1, },
}
}
_ => -2, _ => -2,
} }
} }
fn str_to_int_value(number: Option<String>) -> i64 { fn str_to_int_value(number: Option<String>) -> i64 {
match number { match number {
Some(x) => { Some(x) => match x.trim().parse::<i64>() {
match x.trim().parse::<i64>() { Ok(y) => y,
Ok(y) => y, Err(y) => panic!("{}", y),
Err(y) => panic!("{}", y), },
}
}
None => -1, None => -1,
} }
} }
@@ -71,12 +105,10 @@ fn get_string_command_result(command: &mut Command) -> Option<String> {
fn get_json_command_result(command: &mut Command) -> JsonValue { fn get_json_command_result(command: &mut Command) -> JsonValue {
let string_command_result = get_string_command_result(command); let string_command_result = get_string_command_result(command);
match string_command_result { match string_command_result {
Some(x) => { Some(x) => match json::parse(x.as_str()) {
match json::parse(x.as_str()) { Ok(x) => x,
Ok(x) => x, Err(_) => JsonValue::new_object(),
Err(_) => JsonValue::new_object(), },
}
}
None => JsonValue::new_object(), None => JsonValue::new_object(),
} }
} }