From c30222cf9a5f173f30e5b6193714401dc0e3569f Mon Sep 17 00:00:00 2001 From: Ilion Beyst Date: Mon, 25 Jul 2022 22:26:58 +0200 Subject: [PATCH] limit amount of matches used by ranker --- planetwars-server/src/db/matches.rs | 7 +++++-- planetwars-server/src/modules/ranking.rs | 4 +++- planetwars-server/src/routes/matches.rs | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/planetwars-server/src/db/matches.rs b/planetwars-server/src/db/matches.rs index 39b7d9b..061e2ea 100644 --- a/planetwars-server/src/db/matches.rs +++ b/planetwars-server/src/db/matches.rs @@ -87,9 +87,12 @@ pub struct MatchData { pub match_players: Vec, } -pub fn list_matches(conn: &PgConnection) -> QueryResult> { +pub fn list_matches(amount: i64, conn: &PgConnection) -> QueryResult> { conn.transaction(|| { - let matches = matches::table.get_results::(conn)?; + let matches = matches::table + .order_by(matches::created_at.desc()) + .limit(amount) + .get_results::(conn)?; let match_players = MatchPlayer::belonging_to(&matches) .left_join( diff --git a/planetwars-server/src/modules/ranking.rs b/planetwars-server/src/modules/ranking.rs index d508d6c..cb699fe 100644 --- a/planetwars-server/src/modules/ranking.rs +++ b/planetwars-server/src/modules/ranking.rs @@ -11,7 +11,9 @@ use std::sync::Arc; use std::time::{Duration, Instant}; use tokio; +// TODO: put these in a config const RANKER_INTERVAL: u64 = 60; +const RANKER_NUM_MATCHES: i64 = 10_000; pub async fn run_ranker(config: Arc, db_pool: DbPool) { // TODO: make this configurable @@ -80,7 +82,7 @@ struct MatchStats { } fn fetch_match_stats(db_conn: &PgConnection) -> QueryResult> { - let matches = db::matches::list_matches(db_conn)?; + let matches = db::matches::list_matches(RANKER_NUM_MATCHES, db_conn)?; let mut match_stats = HashMap::<(i32, i32), MatchStats>::new(); for m in matches { diff --git a/planetwars-server/src/routes/matches.rs b/planetwars-server/src/routes/matches.rs index a980daa..58ca478 100644 --- a/planetwars-server/src/routes/matches.rs +++ b/planetwars-server/src/routes/matches.rs @@ -24,7 +24,7 @@ pub struct ApiMatchPlayer { } pub async fn list_matches(conn: DatabaseConnection) -> Result>, StatusCode> { - matches::list_matches(&conn) + matches::list_matches(100, &conn) .map_err(|_| StatusCode::BAD_REQUEST) .map(|matches| Json(matches.into_iter().map(match_data_to_api).collect())) }