about summary refs log tree commit diff
path: root/stats_module
diff options
context:
space:
mode:
authorgennyble <gen@nyble.dev>2025-04-04 01:45:07 -0500
committergennyble <gen@nyble.dev>2025-04-04 01:45:07 -0500
commit4410950c761970d640af00f245fdba859f8795b0 (patch)
treeae2ced50c1ea96f01eed51e1ee0394473475da81 /stats_module
parent31d650e75acfd447cf6c58d29ca4d6ad1010a65c (diff)
downloadcorgi-4410950c761970d640af00f245fdba859f8795b0.tar.gz
corgi-4410950c761970d640af00f245fdba859f8795b0.zip
rip out module system
Diffstat (limited to 'stats_module')
-rw-r--r--stats_module/Cargo.toml13
-rw-r--r--stats_module/src/lib.rs85
2 files changed, 0 insertions, 98 deletions
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("<p>In the last fifteen minutes:<br/><code><pre>");
-	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("</pre></code></p>");
-
-	body.push_str("<p>Highest ten all time requesters:<br/><code><pre>");
-	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("</pre></code></p>");
-
-	response.body(body.into_bytes()).header(c"Content-Type", c"text/html");
-	response.into_mod_response(200)
-}
-
-fn make_error<S: AsRef<str>>(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);
-}