remove argh dep
This commit is contained in:
Generated
-94
@@ -2,43 +2,10 @@
|
||||
# It is not intended for manual editing.
|
||||
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]]
|
||||
name = "hmon"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"argh",
|
||||
"json",
|
||||
]
|
||||
|
||||
@@ -47,64 +14,3 @@ name = "json"
|
||||
version = "0.12.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
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,10 +3,7 @@ name = "hmon"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
argh = "0.1.13"
|
||||
json = "0.12.4"
|
||||
|
||||
[profile.release]
|
||||
|
||||
+72
-40
@@ -1,55 +1,89 @@
|
||||
use core::panic;
|
||||
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() {
|
||||
let args = argh::from_env::<Cli>();
|
||||
if args.query == "cpu" {
|
||||
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);
|
||||
let Some(args) = CliArgs::from_env() else {
|
||||
eprintln!("{}", HELP);
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
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);
|
||||
match args.query {
|
||||
HmonCmd::Cpu => {
|
||||
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);
|
||||
},
|
||||
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.
|
||||
#[derive(argh::FromArgs)]
|
||||
struct Cli {
|
||||
/// query type, either "cpu" or "gpu"
|
||||
#[argh(positional)]
|
||||
query: String,
|
||||
enum HmonCmd {
|
||||
Cpu,
|
||||
Gpu,
|
||||
}
|
||||
|
||||
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 {
|
||||
match number {
|
||||
JsonValue::Number(_) => {
|
||||
match number.as_f64() {
|
||||
Some(x) => x as i64,
|
||||
None => -1,
|
||||
}
|
||||
}
|
||||
JsonValue::Number(_) => match number.as_f64() {
|
||||
Some(x) => x as i64,
|
||||
None => -1,
|
||||
},
|
||||
_ => -2,
|
||||
}
|
||||
}
|
||||
|
||||
fn str_to_int_value(number: Option<String>) -> i64 {
|
||||
match number {
|
||||
Some(x) => {
|
||||
match x.trim().parse::<i64>() {
|
||||
Ok(y) => y,
|
||||
Err(y) => panic!("{}", y),
|
||||
}
|
||||
}
|
||||
Some(x) => match x.trim().parse::<i64>() {
|
||||
Ok(y) => y,
|
||||
Err(y) => panic!("{}", y),
|
||||
},
|
||||
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 {
|
||||
let string_command_result = get_string_command_result(command);
|
||||
match string_command_result {
|
||||
Some(x) => {
|
||||
match json::parse(x.as_str()) {
|
||||
Ok(x) => x,
|
||||
Err(_) => JsonValue::new_object(),
|
||||
}
|
||||
}
|
||||
Some(x) => match json::parse(x.as_str()) {
|
||||
Ok(x) => x,
|
||||
Err(_) => JsonValue::new_object(),
|
||||
},
|
||||
None => JsonValue::new_object(),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user