diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-11-18 13:20:04 +0100 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-11-18 13:20:04 +0100 |
commit | 0e354b4c8bc631e68ca238b2d065872454cab072 (patch) | |
tree | 9a052d40e0f283200c639e326e6fc9634c70ea35 | |
parent | 3bb1acb0be09a46c095a3b250208d24248c64c47 (diff) |
add per-process cpu monitoring endpoint
-rw-r--r-- | src/main.rs | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs index bb62131..3b5ad3c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,8 @@ use std::fs::{self, File, OpenOptions}; use std::io::{self, BufReader, Write}; use actix_web::{ - dev::ServiceRequest, http::header::ContentType, web, App, HttpResponse, HttpServer, + dev::ServiceRequest, http::header::ContentType, rt::time::sleep, web, App, HttpResponse, + HttpServer, }; use actix_web_httpauth::extractors::basic::{BasicAuth, Config}; use actix_web_httpauth::extractors::AuthenticationError; @@ -182,6 +183,30 @@ async fn handle_data_write(info: web::Query<DataRequest>, data: web::Bytes) -> H } } +async fn handle_stats_top() -> HttpResponse { + println!("monitor stats"); + + let mut s = System::new_all(); + + for process in s.processes().values() { + process.cpu_usage(); + } + + sleep(<System as SystemExt>::MINIMUM_CPU_UPDATE_INTERVAL).await; + s.refresh_all(); + + let out = s + .processes() + .values() + .map(|process| format!("{} {}%", process.name(), process.cpu_usage())) + .reduce(|acc, line| acc + &line + "<br>") + .unwrap_or(String::new()); + + HttpResponse::Ok() + .content_type(ContentType::html()) + .body(out) +} + #[actix_web::main] async fn main() -> io::Result<()> { match start().await { @@ -213,6 +238,7 @@ async fn start() -> Result<()> { .service(web::resource("/switch").to(handle_switch)) .service(web::resource("/data/read").to(handle_data_read)) .service(web::resource("/data/write").to(handle_data_write)) + .service(web::resource("/stats/top").to(handle_stats_top)) }) .bind_rustls("[::]:8443", config)? .run() |