diff --git a/.gitignore b/.gitignore index 3ca43ae..193d30e 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,8 @@ Cargo.lock # MSVC Windows builds of rustc generate these, which store debugging information *.pdb + + +# Added by cargo + +/target diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..ad6dbca --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "mtemp-monitor" +version = "0.1.0" +edition = "2021" + +[dependencies] +tokio = { version = "1.35.1", features = ["full"]} +kagiyama = "0.3.0" +mtemp = { git = "https://git.midefos.com/midefos/mtemp.git", branch = "main" } +anyhow = "1.0.79" diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..401fb8e --- /dev/null +++ b/src/main.rs @@ -0,0 +1,77 @@ +use anyhow::Result; +use kagiyama::prometheus::metrics::gauge::Gauge; +use kagiyama::{AlwaysReady, Watcher}; +use mtemp::Mtemp; +use std::env; +use std::sync::atomic::AtomicU64; +use tokio::spawn; +use tokio::time::sleep; +use tokio::time::Duration; + +#[tokio::main] +async fn main() -> Result<()> { + let interval_secs: u64 = env::var("MTEMP_INTERVAL") + .unwrap_or_else(|_| "1".to_string()) + .parse()?; + let port = env::var("MTEMP_PORT").unwrap_or_else(|_| "9090".to_string()); + + let addr = format!("127.0.0.1:{}", port); + let mut watcher = Watcher::::default(); + watcher.start_server(addr.parse()?).await; + + // CPU + { + spawn(async move { + let interval = Duration::from_secs(interval_secs); + + let cpu_gauge = Gauge::::default(); + { + let mut registry = watcher.metrics_registry(); + registry.register( + "cpu_temp", + "Shows the temperature of the CPU in degrees C", + cpu_gauge.clone(), + ); + } + + let gpu_gauge = Gauge::::default(); + { + let mut registry = watcher.metrics_registry(); + registry.register( + "gpu_temp", + "Shows the temperature of the GPU in degrees C", + gpu_gauge.clone(), + ); + } + + let disk_gauge = Gauge::::default(); + { + let mut registry = watcher.metrics_registry(); + registry.register( + "disk_temp", + "Shows the temperature of the disk in degrees C", + disk_gauge.clone(), + ); + } + + loop { + sleep(interval).await; + if let Some(cpu) = Mtemp::cpu() { + cpu_gauge.set(cpu); + } + if let Some(gpu) = Mtemp::gpu() { + gpu_gauge.set(gpu); + } + if let Some(disk) = Mtemp::disk() { + disk_gauge.set(disk); + } + } + }); + } + + println!("interval set every {} seconds", interval_secs); + println!("listening on {}", addr); + tokio::signal::ctrl_c().await.unwrap(); + + Ok(()) +} diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..52f2179 --- /dev/null +++ b/start.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +cargo r -r & +sleep 1 +echo "Monitor started" diff --git a/stop.sh b/stop.sh new file mode 100644 index 0000000..50718e8 --- /dev/null +++ b/stop.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +pkill mtemp-monitor +sleep 1 +echo "Monitor stopped"