about summary refs log tree commit diff
path: root/stats_module
diff options
context:
space:
mode:
authorgennyble <gen@nyble.dev>2025-03-28 07:33:56 -0500
committergennyble <gen@nyble.dev>2025-03-28 07:33:56 -0500
commitb8d65256e1e9ed48ea6032905fef06b3ff5cc899 (patch)
treed4cb5c5b3139d487bf0c6424ef5b2b766506883c /stats_module
parent67e333107e4ea69180a9a2ec6f38fdace2082698 (diff)
downloadcorgi-b8d65256e1e9ed48ea6032905fef06b3ff5cc899.tar.gz
corgi-b8d65256e1e9ed48ea6032905fef06b3ff5cc899.zip
add highest five requesters all time
Diffstat (limited to 'stats_module')
-rw-r--r--stats_module/src/lib.rs20
1 files changed, 19 insertions, 1 deletions
diff --git a/stats_module/src/lib.rs b/stats_module/src/lib.rs
index a56d22d..5f026fb 100644
--- a/stats_module/src/lib.rs
+++ b/stats_module/src/lib.rs
@@ -31,6 +31,17 @@ extern "C" fn cgi_handle(req: *const ModuleRequest) -> *const ModuleResponse {
 
 	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 5;";
+	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();
+
 	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 {
@@ -40,8 +51,15 @@ extern "C" fn cgi_handle(req: *const ModuleRequest) -> *const ModuleResponse {
 		));
 	}
 	body.push_str("</pre></code></p>");
-	response.body(body.into_bytes());
 
+	body.push_str("<p>Highest five all time requests:<br/><code><pre>");
+	body.push_str("  total  | agent\n");
+	for (count, agent) in highest_five {
+		body.push_str(&format!(" {count:<7} | {agent}\n"));
+	}
+	body.push_str("</pre></code></p>");
+
+	response.body(body.into_bytes());
 	response.into_mod_response(200)
 }