Skip to content

Commit

Permalink
fix player tracking?
Browse files Browse the repository at this point in the history
  • Loading branch information
RealFascinated committed Feb 24, 2025
1 parent ba34a26 commit c1bb781
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 37 deletions.
2 changes: 1 addition & 1 deletion projects/backend/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ export const app = new Elysia();
app.use(
cron({
name: "player-statistics-tracker-cron",
// pattern: "*/2 * * * *", // Every 5 minutes
// pattern: "*/1 * * * *", // Every 5 minutes
pattern: "59 23 * * *", // Every day at 23:59
timezone: "Europe/London", // UTC time
protect: true,
Expand Down
52 changes: 17 additions & 35 deletions projects/backend/src/service/player.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -378,11 +378,11 @@ export class PlayerService {
return;
}

if (playerToken && foundPlayer.inactive !== playerToken.inactive) {
foundPlayer.inactive = playerToken.inactive;
if (player && foundPlayer.inactive !== player.inactive) {
foundPlayer.inactive = player.inactive;
await foundPlayer.save();
}

if (player.inactive) {
Logger.info(`Player "${foundPlayer.id}" is inactive on ScoreSaber`);
return;
Expand Down Expand Up @@ -687,27 +687,23 @@ export class PlayerService {

/**
* Updates the player statistics for all players.
*
* This will first get the top 2000 players and then force track the top 1000
* players, it will then get the leftover players (not in the top 2500) and
* track them individually.
*/
public static async updatePlayerStatistics() {
// Pages to search for players in (total players / players per page)
const pages = Math.ceil(5000 / 50);
const pages = 20; // top 1000 players

const trackTime = new Date();
const toTrack: PlayerDocument[] = await PlayerModel.find({});
let toTrack: PlayerDocument[] = await PlayerModel.find({});
const players: ScoreSaberPlayerToken[] = [];

const dateNow = new Date();

// loop through pages to fetch the top players
Logger.info(`Fetching ${pages} pages of players from ScoreSaber...`);
console.log(`Fetching ${pages} pages of players from ScoreSaber...`);
for (let i = 0; i < pages; i++) {
// Check the first 50 pages
const pageNumber = i + 1;
console.log(`Fetching page ${pageNumber}...`);
const page = await scoresaberService.lookupPlayers(pageNumber);
if (page === undefined) {
Logger.warn(`Failed to fetch players on page ${pageNumber}, skipping page...`);
console.log(`Failed to fetch players on page ${pageNumber}, skipping page...`);
continue;
}
for (const player of page.players) {
Expand All @@ -716,36 +712,22 @@ export class PlayerService {
}

for (const player of players) {
// Only track players <= 1000 rank or if they need to be tracked
const shouldTrack = player.rank <= 1000 || toTrack.map(p => p.id).includes(player.id);
if (!shouldTrack) {
continue;
}

const foundPlayer = await PlayerService.getPlayer(player.id, true, player);
await PlayerService.trackScoreSaberPlayer(foundPlayer, trackTime, player);
await PlayerService.trackScoreSaberPlayer(foundPlayer, dateNow, player);
}

// Only track leftover players that we are tracking and that
// haven't already been tracked by the loop above
const leftoverPlayers: PlayerDocument[] = [];
for (const trackedPlayer of toTrack) {
const isInFetchedPlayers = players.some(p => p.id === trackedPlayer.id);
if (!isInFetchedPlayers) {
leftoverPlayers.push(trackedPlayer);
}
}
// remove all players that have been tracked
toTrack = toTrack.filter(player => !players.map(player => player.id).includes(player.id));

Logger.info(`Tracking ${leftoverPlayers.length} leftover player statistics...`);
for (const player of leftoverPlayers) {
console.log(`Tracking ${toTrack.length} player statistics...`);
for (const player of toTrack) {
if (player.inactive) {
Logger.info(`Skipping inactive player, ${player.id}`);
continue;
}
await PlayerService.trackScoreSaberPlayer(player, trackTime);
await PlayerService.trackScoreSaberPlayer(player, dateNow);
}

Logger.info("Finished tracking player statistics.");
console.log("Finished tracking player statistics.");
}

/**
Expand Down
2 changes: 1 addition & 1 deletion projects/common/src/minio-buckets.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { isProduction } from "./utils/utils";

export enum MinioBucket {
BeatLeaderReplays = "beatleader-replays",
BeatLeaderReplays = "ssr-beatleader-replays",
}

/**
Expand Down

0 comments on commit c1bb781

Please sign in to comment.