about summary refs log tree commit diff
path: root/stats/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'stats/src/main.rs')
-rw-r--r--stats/src/main.rs29
1 files changed, 11 insertions, 18 deletions
diff --git a/stats/src/main.rs b/stats/src/main.rs
index 7e3f922..5b83bdd 100644
--- a/stats/src/main.rs
+++ b/stats/src/main.rs
@@ -3,18 +3,16 @@ use std::{io::Write, time::Instant};
 use rusqlite::{Connection, params};
 use time::{Duration, OffsetDateTime};
 
-// Thank you, cat, for optimizing my query
-const TOP_TEN_ALL_TIME: &str = "\
-	SELECT reqs.cnt, agents.agent 
-		FROM agents 
-		JOIN (
-			SELECT count(id) as cnt, agent_id 
-			FROM requests
-			GROUP BY agent_id
-		) reqs 
-		ON reqs.agent_id=agents.id
-		ORDER BY reqs.cnt DESC LIMIT 10;
-";
+const TOP_TEN_ALL_TIME: &str =
+	"SELECT request_count, agent FROM agents ORDER BY request_count DESC LIMIT 10;";
+
+const LAST_FIFTEEN_MINUTES: &str = "\
+	SELECT count(ephemeral_requests.request_id) as request_count, agents.agent
+	FROM ephemeral_requests
+	INNER JOIN requests ON ephemeral_requests.request_id = requests.id
+	INNER JOIN agents ON requests.agent_id = agents.id
+	WHERE ephemeral_requests.timestamp > ?1
+	GROUP BY requests.agent_id;";
 
 const STYLE: &'static str = include_str!("style.css");
 const FAVICON: &'static [u8] = include_bytes!("favicon.gif");
@@ -48,13 +46,8 @@ fn main() {
 	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 start = Instant::now();
-	let mut prepared = db.prepare(query).unwrap();
+	let mut prepared = db.prepare(LAST_FIFTEEN_MINUTES).unwrap();
 	let mut agents: Vec<(usize, String)> = prepared
 		.query_map(params![fifteen_ago], |row| Ok((row.get(0)?, row.get(1)?)))
 		.unwrap()