From ed173663656f5b22320888ead1a066b4f54e35ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Fri, 28 Jun 2024 20:08:50 -0500 Subject: [PATCH] feat: add cron --- .github/workflows/cd-averages.yml | 4 +-- bun.lockb | Bin 385249 -> 385249 bytes scripts/averages.ts | 38 +++++++++++++---------- src/core/blitzkit/commitAssets.ts | 2 -- src/core/blitzkit/commitMultipleFiles.ts | 1 - src/core/protobuf/decode.ts | 6 ++++ src/core/protobuf/encode.ts | 6 ++++ src/core/protobuf/encodeToBase64.ts | 6 ++++ src/core/protobuf/lookup.ts | 10 ++++++ src/protos/blitzkit.proto | 35 +++++++++++++++++++++ 10 files changed, 87 insertions(+), 21 deletions(-) create mode 100644 src/core/protobuf/decode.ts create mode 100644 src/core/protobuf/encode.ts create mode 100644 src/core/protobuf/encodeToBase64.ts create mode 100644 src/core/protobuf/lookup.ts create mode 100644 src/protos/blitzkit.proto diff --git a/.github/workflows/cd-averages.yml b/.github/workflows/cd-averages.yml index dea3e9c9b..eb5e36002 100644 --- a/.github/workflows/cd-averages.yml +++ b/.github/workflows/cd-averages.yml @@ -2,8 +2,8 @@ name: CD Averages on: workflow_dispatch: - # schedule: - # - cron: '0 12 * * 0' + schedule: + - cron: '0 0 * * 2' concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/bun.lockb b/bun.lockb index 4ea53cfd8fc762e81d6b9106bad5a3fa7bfaaef7..bf9fad3c2618bfec5aaa4df31d84f3f34a91423e 100644 GIT binary patch delta 33 pcmaEOQ2gOR@rD-07N#xCE8ns+#u@1u>KV3gc+0$f!&?@^&j9m24nzO| delta 33 mcmaEOQ2gOR@rD-07N#xCE8ns+F@Qn)hPTYyH@syr{0so$Jq-5% diff --git a/scripts/averages.ts b/scripts/averages.ts index 40ea2904b..7dcf32463 100644 --- a/scripts/averages.ts +++ b/scripts/averages.ts @@ -11,7 +11,9 @@ import { AverageDefinitionsEntrySubPartial, } from '../src/core/blitzkit/averageDefinitions'; import { averageDefinitionsAllStatsKeys } from '../src/core/blitzkit/averageDefinitions/constants'; +import { commitAssets } from '../src/core/blitzkit/commitAssets'; import { fetchPreDiscoveredIds } from '../src/core/blitzkit/fetchPreDiscoveredIds'; +import { encodeToBase64 } from '../src/core/protobuf/encodeToBase64'; interface DataPoint { x: number; @@ -21,7 +23,7 @@ interface DataPoint { const MAX_ACTIVITY_TIME = 1000 * 60 * 60 * 24 * 120; const MIN_BATTLES = 5000; -const RUN_TIME = 1000 * 60; +const RUN_TIME = 1000 * 60 * 60 * 5.9; const THREADS = 10; const PLAYER_IDS_PER_CALL = 100; @@ -39,7 +41,8 @@ const regionalIndices: Record = { eu: 0, }; let regionIndex = 0; -let playerCount = 0; +let checkedPlayers = 0; +let includedPlayers = 0; const availableRegions = [...REGIONS]; const tankIds: number[] = []; const tanksSorted: Record = {}; @@ -50,6 +53,7 @@ times(THREADS, async () => { const region = availableRegions[regionIndex]; const idIndex = regionalIndices[region]; const ids = playerIds[region].slice(idIndex, idIndex + PLAYER_IDS_PER_CALL); + checkedPlayers += PLAYER_IDS_PER_CALL; const accountInfo = await getAccountInfo(region, ids, undefined, { fields: 'last_battle_time,statistics.all.battles', }); @@ -70,7 +74,7 @@ times(THREADS, async () => { info.statistics.all.battles > MIN_BATTLES ); }); - playerCount += filteredIds.length; + includedPlayers += filteredIds.length; const players = await Promise.all( filteredIds.map((id) => getTankStats(region, id)), ); @@ -109,7 +113,7 @@ times(THREADS, async () => { async function postWork() { console.log( - `Generating statistics based off ${playerCount} players and ${tankIds.length} tanks...`, + `Generating statistics based off ${includedPlayers.toLocaleString()} players (${checkedPlayers.toLocaleString()} checked in total) and ${tankIds.length} tanks...`, ); const averages: AverageDefinitions = {}; @@ -157,21 +161,23 @@ async function postWork() { entry.mu[key] = mu; entry.sigma[key] = sigma; - entry.r[key] = r; + entry.r[key] = isNaN(r) ? 0 : r; }); averages[id] = entry as AverageDefinitionsEntry; }); - // commitAssets( - // 'averages', - // [ - // { - // path: 'definitions/averages.cdon.lz4', - // content: superCompress(averages), - // encoding: 'base64', - // }, - // ], - // production, - // ); + commitAssets( + 'averages', + [ + { + path: 'definitions/averages.pb', + content: await encodeToBase64('blitzkit.AverageDefinitions', { + averages, + }), + encoding: 'base64', + }, + ], + production, + ); } diff --git a/src/core/blitzkit/commitAssets.ts b/src/core/blitzkit/commitAssets.ts index d00446a28..a769a0799 100644 --- a/src/core/blitzkit/commitAssets.ts +++ b/src/core/blitzkit/commitAssets.ts @@ -5,7 +5,6 @@ export async function commitAssets( message: string, changes: FileChange[], production: boolean, - verbose = true, ) { console.log(`Committing ${message}...`); @@ -17,6 +16,5 @@ export async function commitAssets( production ? 'main' : 'dev', `${message} - ${new Date().toDateString()}`, changes, - verbose, ); } diff --git a/src/core/blitzkit/commitMultipleFiles.ts b/src/core/blitzkit/commitMultipleFiles.ts index 0b75f6cf8..36f561149 100644 --- a/src/core/blitzkit/commitMultipleFiles.ts +++ b/src/core/blitzkit/commitMultipleFiles.ts @@ -14,7 +14,6 @@ export default async function commitMultipleFiles( branch: string, message: string, changes: FileChange[], - verbose = false, ) { const latestCommitSha = ( await octokit.git.getRef({ diff --git a/src/core/protobuf/decode.ts b/src/core/protobuf/decode.ts new file mode 100644 index 000000000..42c5749fb --- /dev/null +++ b/src/core/protobuf/decode.ts @@ -0,0 +1,6 @@ +import { lookup } from './lookup'; + +export async function decode(proto: string, data: Uint8Array) { + const Message = await lookup(proto); + return Message.decode(data).toJSON(); +} diff --git a/src/core/protobuf/encode.ts b/src/core/protobuf/encode.ts new file mode 100644 index 000000000..a7c3034c6 --- /dev/null +++ b/src/core/protobuf/encode.ts @@ -0,0 +1,6 @@ +import { lookup } from './lookup'; + +export async function encode(proto: string, data: any) { + const Message = await lookup(proto); + return Message.encode(Message.create(data)).finish(); +} diff --git a/src/core/protobuf/encodeToBase64.ts b/src/core/protobuf/encodeToBase64.ts new file mode 100644 index 000000000..86a35166f --- /dev/null +++ b/src/core/protobuf/encodeToBase64.ts @@ -0,0 +1,6 @@ +import { encode } from './encode'; + +export async function encodeToBase64(proto: string, data: any) { + const array = await encode(proto, data); + return Buffer.from(array).toString('base64'); +} diff --git a/src/core/protobuf/lookup.ts b/src/core/protobuf/lookup.ts new file mode 100644 index 000000000..d9c6418b6 --- /dev/null +++ b/src/core/protobuf/lookup.ts @@ -0,0 +1,10 @@ +import { Root } from 'protobufjs'; + +export async function lookup(proto: string) { + const root = await new Root().load( + `src/protos/${proto.split('.')[0]}.proto`, + { keepCase: true }, + ); + + return root.lookupType(proto); +} diff --git a/src/protos/blitzkit.proto b/src/protos/blitzkit.proto new file mode 100644 index 000000000..99cb35b6f --- /dev/null +++ b/src/protos/blitzkit.proto @@ -0,0 +1,35 @@ +syntax = "proto3"; + +package blitzkit; + +message AverageDefinitions { + map averages = 1; +} + +message Tank { + uint32 samples = 1; + AverageDefinitionsAllStats mu = 2; + AverageDefinitionsAllStats sigma = 3; + AverageDefinitionsAllStats r = 4; +} + +message AverageDefinitionsAllStats { + float battles = 1; + float capture_points = 2; + float damage_dealt = 3; + float damage_received = 4; + float dropped_capture_points = 5; + float frags = 6; + float frags8p = 7; + float hits = 8; + float losses = 9; + float max_frags = 10; + float max_xp = 11; + float shots = 12; + float spotted = 13; + float survived_battles = 14; + float win_and_survived = 15; + float wins = 16; + float xp = 17; + float battle_life_time = 18; +} \ No newline at end of file