diff options
author | mat <27899617+mat-1@users.noreply.github.com> | 2021-02-28 16:55:40 -0600 |
---|---|---|
committer | mat <27899617+mat-1@users.noreply.github.com> | 2021-02-28 16:55:40 -0600 |
commit | f5a8a08022e5748cf8c582bf2486520e27d73f06 (patch) | |
tree | 075c7d338eb98c51b0c5a4c645f26a083f23e5f4 /src/database.ts | |
parent | d9d557a095d09f0d4e643ee6b59a28520a003b20 (diff) | |
download | skyblock-api-f5a8a08022e5748cf8c582bf2486520e27d73f06.tar.gz skyblock-api-f5a8a08022e5748cf8c582bf2486520e27d73f06.tar.bz2 skyblock-api-f5a8a08022e5748cf8c582bf2486520e27d73f06.zip |
Make leaderboard stuff use less memory
Diffstat (limited to 'src/database.ts')
-rw-r--r-- | src/database.ts | 20 |
1 files changed, 2 insertions, 18 deletions
diff --git a/src/database.ts b/src/database.ts index afbcf08..83360c3 100644 --- a/src/database.ts +++ b/src/database.ts @@ -8,7 +8,7 @@ import { Collection, Db, MongoClient } from 'mongodb' import NodeCache from 'node-cache' import { CleanMember } from './cleaners/skyblock/member' import { CleanPlayer } from './cleaners/player' -import { shuffle } from './util' +import { shuffle, sleep } from './util' import { CleanFullProfile } from './cleaners/skyblock/profile' import { categorizeStat, StatCategory } from './cleaners/skyblock/stats' @@ -31,7 +31,6 @@ interface LeaderboardItem { } const cachedRawLeaderboards: Map<string, DatabaseLeaderboardItem[]> = new Map() -const cachedLeaderboards: Map<string, LeaderboardItem[]> = new Map() const leaderboardMax = 100 const reversedStats = [ @@ -133,9 +132,6 @@ async function fetchMemberLeaderboardRaw(name: string): Promise<DatabaseLeaderbo } export async function fetchMemberLeaderboard(name: string) { - if (cachedLeaderboards.has(name)) - return cachedLeaderboards.get(name) - const leaderboardRaw = await fetchMemberLeaderboardRaw(name) const fetchLeaderboardPlayer = async(item: DatabaseLeaderboardItem): Promise<LeaderboardItem> => { return { @@ -148,7 +144,6 @@ export async function fetchMemberLeaderboard(name: string) { promises.push(fetchLeaderboardPlayer(item)) } const leaderboard = await Promise.all(promises) - cachedLeaderboards.set(name, leaderboard) return leaderboard } @@ -198,18 +193,8 @@ export async function updateDatabaseMember(member: CleanMember, profile: CleanFu ) for (const [ attributeName, attributeValue ] of Object.entries(leaderboardAttributes)) { - const existingLeaderboard = await fetchMemberLeaderboard(attributeName) const existingRawLeaderboard = await fetchMemberLeaderboardRaw(attributeName) const leaderboardReverse = isLeaderboardReversed(attributeName) - const newLeaderboard = existingLeaderboard - // remove the player from the leaderboard, if they're there - .filter(value => value.player.uuid !== member.uuid) - .concat([{ - player: await cached.fetchPlayer(member.uuid), - value: attributeValue - }]) - .sort((a, b) => leaderboardReverse ? a.value - b.value : b.value - a.value) - .slice(0, 100) const newRawLeaderboard = existingRawLeaderboard // remove the player from the leaderboard, if they're there .filter(value => value.uuid !== member.uuid) @@ -220,7 +205,6 @@ export async function updateDatabaseMember(member: CleanMember, profile: CleanFu }]) .sort((a, b) => leaderboardReverse ? a.stats[attributeName] - b.stats[attributeName] : b.stats[attributeName] - a.stats[attributeName]) .slice(0, 100) - cachedLeaderboards.set(attributeName, newLeaderboard) cachedRawLeaderboards.set(attributeName, newRawLeaderboard) } } @@ -234,7 +218,7 @@ async function removeBadMemberLeaderboardAttributes() { // shuffle so if the application is restarting many times itll still be useful for (const leaderboard of shuffle(leaderboards)) { // wait 10 seconds so it doesnt use as much ram - await new Promise(resolve => setTimeout(resolve, 10000)) + await sleep(100000) const unsetValue = {} unsetValue[leaderboard] = '' |