aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlion Beyst <ilion.beyst@gmail.com>2022-07-25 22:26:58 +0200
committerIlion Beyst <ilion.beyst@gmail.com>2022-07-25 22:26:58 +0200
commitc30222cf9a5f173f30e5b6193714401dc0e3569f (patch)
tree457a3461a3e2203a8aefaf0b3432a97c22e84101
parent67276bd0bbac15fe087edafd59d164c686509b35 (diff)
downloadplanetwars.dev-c30222cf9a5f173f30e5b6193714401dc0e3569f.tar.xz
planetwars.dev-c30222cf9a5f173f30e5b6193714401dc0e3569f.zip
limit amount of matches used by ranker
-rw-r--r--planetwars-server/src/db/matches.rs7
-rw-r--r--planetwars-server/src/modules/ranking.rs4
-rw-r--r--planetwars-server/src/routes/matches.rs2
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<MatchPlayer>,
}
-pub fn list_matches(conn: &PgConnection) -> QueryResult<Vec<FullMatchData>> {
+pub fn list_matches(amount: i64, conn: &PgConnection) -> QueryResult<Vec<FullMatchData>> {
conn.transaction(|| {
- let matches = matches::table.get_results::<MatchBase>(conn)?;
+ let matches = matches::table
+ .order_by(matches::created_at.desc())
+ .limit(amount)
+ .get_results::<MatchBase>(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<GlobalConfig>, db_pool: DbPool) {
// TODO: make this configurable
@@ -80,7 +82,7 @@ struct MatchStats {
}
fn fetch_match_stats(db_conn: &PgConnection) -> QueryResult<HashMap<(i32, i32), MatchStats>> {
- 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<Json<Vec<ApiMatch>>, 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()))
}