From 4410950c761970d640af00f245fdba859f8795b0 Mon Sep 17 00:00:00 2001 From: gennyble Date: Fri, 4 Apr 2025 01:45:07 -0500 Subject: rip out module system --- stats_module/Cargo.toml | 13 -------- stats_module/src/lib.rs | 85 ------------------------------------------------- 2 files changed, 98 deletions(-) delete mode 100644 stats_module/Cargo.toml delete mode 100644 stats_module/src/lib.rs (limited to 'stats_module') diff --git a/stats_module/Cargo.toml b/stats_module/Cargo.toml deleted file mode 100644 index 95b6d41..0000000 --- a/stats_module/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "stats_module" -version = "0.1.0" -edition = "2024" - -[lib] -name = "stats" -crate-type = ["cdylib"] - -[dependencies] -rusqlite = { version = "0.34.0", features = ["bundled", "time"] } -time = "0.3.40" -smalldog = { path = "../smalldog" } diff --git a/stats_module/src/lib.rs b/stats_module/src/lib.rs deleted file mode 100644 index ba9d199..0000000 --- a/stats_module/src/lib.rs +++ /dev/null @@ -1,85 +0,0 @@ -use rusqlite::{Connection, params}; -use smalldog::{Request, Response, ffi}; -use time::{Duration, OffsetDateTime}; - -#[unsafe(no_mangle)] -extern "C" fn cgi_handle(req: *const ffi::ModuleRequest) -> *const ffi::ModuleResponse { - let mut response = Response::new(); - let mut body = String::new(); - - let request = Request::from_mod_request(req); - let db = if let Some(path) = request.header("CORGI_STATS_DB") { - if let Ok(db) = Connection::open(path) { - db - } else { - return make_error(500, "failed to open database"); - } - } else { - return make_error(500, "could not open stats database"); - }; - - let now = OffsetDateTime::now_utc(); - let fifteen_ago = now - Duration::minutes(15); - - let query = "SELECT count(requests.id) AS request_count, agents.agent FROM requests \ - INNER JOIN agents ON requests.agent_id = agents.id \ - WHERE requests.timestamp > ?1 \ - GROUP BY requests.agent_id;"; - - let mut prepared = db.prepare(query).unwrap(); - let mut agents: Vec<(usize, String)> = prepared - .query_map(params![fifteen_ago], |row| Ok((row.get(0)?, row.get(1)?))) - .unwrap() - .map(|r| r.unwrap()) - .collect(); - - agents.sort_by(|a, b| a.0.cmp(&b.0).reverse()); - - let highest_five_query = "SELECT count(requests.id) AS request_count, agents.agent FROM requests \ - INNER JOIN agents ON requests.agent_id = agents.id \ - GROUP BY requests.agent_id \ - ORDER BY request_count DESC LIMIT 10;"; - let mut prepared = db.prepare(highest_five_query).unwrap(); - let highest_five: Vec<(usize, String)> = prepared - .query_map(params![], |row| Ok((row.get(0)?, row.get(1)?))) - .unwrap() - .map(|r| r.unwrap()) - .collect(); - let sum_highest_five = highest_five.iter().fold(0, |acc, (count, _)| acc + count); - - body.push_str("

In the last fifteen minutes:

");
-	body.push_str("total | req/m | agent\n");
-	for (count, agent) in &agents {
-		body.push_str(&format!(
-			"{count:<5} | {:<5.1} | {agent}\n",
-			*count as f32 / 15.0
-		));
-	}
-	body.push_str("

"); - - body.push_str("

Highest ten all time requesters:

");
-	body.push_str("  total  | %of10 | agent\n");
-	for (count, agent) in highest_five {
-		body.push_str(&format!(
-			" {count:<7} | {:<5.1} | {agent}\n",
-			(count as f32 / sum_highest_five as f32) * 100.0
-		));
-	}
-	body.push_str("

"); - - response.body(body.into_bytes()).header(c"Content-Type", c"text/html"); - response.into_mod_response(200) -} - -fn make_error>(code: u16, msg: S) -> *const ffi::ModuleResponse { - let mut response = Response::new(); - response.header(c"Content-Length", c"text/html"); - response.body(msg.as_ref().as_bytes().to_vec()); - - response.into_mod_response(code) -} - -#[unsafe(no_mangle)] -extern "C" fn cgi_cleanup(response: *const ffi::ModuleResponse) { - Response::cleanup(response); -} -- cgit 1.4.1-3-g733a5