From 88d8f4f14b995be46b62c6dba86c1265d822055b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sat, 29 Jun 2024 19:43:46 -0500 Subject: [PATCH] feat: efficient pre-chunking --- scripts/averages.ts | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/scripts/averages.ts b/scripts/averages.ts index 44ecaa034..1e8d5fe4b 100644 --- a/scripts/averages.ts +++ b/scripts/averages.ts @@ -1,4 +1,4 @@ -import { times } from 'lodash'; +import { chunk, times } from 'lodash'; import { argv } from 'process'; import { Region, REGIONS } from '../src/constants/regions'; import { getAccountInfo } from '../src/core/blitz/getAccountInfo'; @@ -30,10 +30,19 @@ const PLAYER_IDS_PER_CALL = 100; const startTime = Date.now(); const production = argv.includes('--production'); const preDiscoveredIds = await fetchPreDiscoveredIds(!production); -const playerIds: Record = { - asia: preDiscoveredIds.filter((id) => idToRegion(id) === 'asia'), - com: preDiscoveredIds.filter((id) => idToRegion(id) === 'com'), - eu: preDiscoveredIds.filter((id) => idToRegion(id) === 'eu'), +const playerIds: Record = { + asia: chunk( + preDiscoveredIds.filter((id) => idToRegion(id) === 'asia'), + PLAYER_IDS_PER_CALL, + ), + com: chunk( + preDiscoveredIds.filter((id) => idToRegion(id) === 'com'), + PLAYER_IDS_PER_CALL, + ), + eu: chunk( + preDiscoveredIds.filter((id) => idToRegion(id) === 'eu'), + PLAYER_IDS_PER_CALL, + ), }; let regionIndex = 0; let checkedPlayers = 0; @@ -47,16 +56,14 @@ times(THREADS, async () => { while (availableRegions.length > 0 && startTime + RUN_TIME > Date.now()) { const region = availableRegions[regionIndex]; const regionIds = playerIds[region]; - const initialLength = regionIds.length; - const idIndex = Math.min( - Math.floor(initialLength * Math.random()), - initialLength - 2, + const [ids] = regionIds.splice( + Math.floor(Math.random() * regionIds.length), + 1, ); - const ids = playerIds[region].splice(idIndex, PLAYER_IDS_PER_CALL); - checkedPlayers += PLAYER_IDS_PER_CALL; const accountInfo = await getAccountInfo(region, ids, undefined, { fields: 'last_battle_time,statistics.all.battles', }); + checkedPlayers += ids.length; /** * Pass rates