From 387fdcdef8f26b7af5525a2559973579cd79ebce Mon Sep 17 00:00:00 2001 From: evanpelle Date: Tue, 17 Dec 2024 14:46:29 -0800 Subject: [PATCH] update archive error handling --- TODO.txt | 2 +- src/server/Archive.ts | 45 +++++++++++++++++++++++++++++++++++++------ 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/TODO.txt b/TODO.txt index 6432690b0..73b48e769 100644 --- a/TODO.txt +++ b/TODO.txt @@ -240,7 +240,7 @@ * better emojis 🏳️🤦‍♂️🖕☮️🫡😡😈🤡 DONE 12/13/2024 * store ips in bigquery table DONE 12/14/2024 * better error logging in server DONE 12/16/2024 -* store and archive player cookies +* store and archive player cookies DONE 12/17/2024 * make ips less precise * send client logs back to server * seperate server config from client config diff --git a/src/server/Archive.ts b/src/server/Archive.ts index 7889b8e62..ab404ef27 100644 --- a/src/server/Archive.ts +++ b/src/server/Archive.ts @@ -5,7 +5,6 @@ import { BigQuery } from '@google-cloud/bigquery'; const storage = new Storage(); const bigquery = new BigQuery(); - export async function archive(gameRecord: GameRecord) { try { // Save metadata to BigQuery @@ -27,19 +26,21 @@ export async function archive(gameRecord: GameRecord) { })), }; - await bigquery + const [apiResponse] = await bigquery .dataset('game_archive') .table('game_results') .insert([row]); console.log(`wrote game metadata to BigQuery: ${gameRecord.id}`); + if (gameRecord.turns.length > 0) { - // Players may see this so make sure to clear PII. + // Players may see this so make sure to clear PII gameRecord.players.forEach(p => { p.ip = "REDACTED" p.persistentID = "REDACTED" - }) - console.log(`writing game ${gameRecord.id} to gcs`) + }); + + console.log(`writing game ${gameRecord.id} to gcs`); const bucket = storage.bucket("openfront-games"); const file = bucket.file(gameRecord.id); await file.save(JSON.stringify(GameRecordSchema.parse(gameRecord)), { @@ -47,6 +48,38 @@ export async function archive(gameRecord: GameRecord) { }); } } catch (error) { - console.error(`error archiving game record: ${error}`) + try { + console.error(`Error archiving game ${gameRecord.id}:`); + + if (Array.isArray(error?.errors)) { + // Handle BigQuery insertion errors which come as an array + error.errors.forEach((err, index) => { + console.error(`${gameRecord.id}: Archive Error ${index + 1}:`, { + reason: err.reason, + message: err.message, + location: err.location, + debugInfo: err.debugInfo + }); + }); + } else if (error?.code) { + // Handle Google Cloud Storage errors which typically have error codes + console.error(`${gameRecord.id}: Archive: Storage error:`, { + code: error.code, + message: error.message, + stack: error.stack, + details: error.errors + }); + } else { + // Handle generic errors + console.error(`${gameRecord.id}: Archive: Unexpected error:`, { + message: error?.message || error, + stack: error?.stack, + name: error?.name, + ...(error && typeof error === 'object' ? error : {}) + }); + } + } catch (error) { + console.log(`error handling archive error: ${error}`) + } } } \ No newline at end of file