first commit
This commit is contained in:
		
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -14,3 +14,8 @@ Cargo.lock
 | 
			
		||||
# MSVC Windows builds of rustc generate these, which store debugging information
 | 
			
		||||
*.pdb
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Added by cargo
 | 
			
		||||
 | 
			
		||||
/target
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								Cargo.toml
									
									
									
									
									
										Normal file
									
								
							@@ -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"
 | 
			
		||||
							
								
								
									
										77
									
								
								src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								src/main.rs
									
									
									
									
									
										Normal file
									
								
							@@ -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::<AlwaysReady>::default();
 | 
			
		||||
    watcher.start_server(addr.parse()?).await;
 | 
			
		||||
 | 
			
		||||
    // CPU
 | 
			
		||||
    {
 | 
			
		||||
        spawn(async move {
 | 
			
		||||
            let interval = Duration::from_secs(interval_secs);
 | 
			
		||||
 | 
			
		||||
            let cpu_gauge = Gauge::<f64, AtomicU64>::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::<f64, AtomicU64>::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::<f64, AtomicU64>::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(())
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								start.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								start.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
cargo r -r &
 | 
			
		||||
sleep 1
 | 
			
		||||
echo "Monitor started"
 | 
			
		||||
		Reference in New Issue
	
	Block a user