From d18908bb686ac370be28ef6f24582fa7b7107b8d Mon Sep 17 00:00:00 2001 From: Scott Anderson <662325+scottanderson@users.noreply.github.com> Date: Tue, 8 Jul 2025 15:45:27 -0400 Subject: [PATCH] Add domain, subdomain to GameRecord (#1370) ## Description: Add domain, subdomain to GameRecord. ## Please complete the following: - [x] I have added screenshots for all UI updates - [x] I process any text displayed to the user through translateText() and I've added it to the en.json file - [x] I have added relevant tests to the test directory - [x] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced - [x] I understand that submitting code with bugs that could have been caught through manual testing blocks releases and new features for all contributors Co-authored-by: evanpelle --- src/client/ClientGameRunner.ts | 3 ++- src/client/LocalServer.ts | 1 + src/core/Schemas.ts | 2 ++ src/core/Util.ts | 8 +++++++- src/core/configuration/Config.ts | 1 - src/core/configuration/DefaultConfig.ts | 6 ------ src/server/Archive.ts | 4 +++- src/server/GameServer.ts | 1 + tests/util/TestServerConfig.ts | 3 --- 9 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/client/ClientGameRunner.ts b/src/client/ClientGameRunner.ts index ebee81856..bcddbf86e 100644 --- a/src/client/ClientGameRunner.ts +++ b/src/client/ClientGameRunner.ts @@ -119,7 +119,7 @@ export function joinLobby( }; } -export async function createClientGame( +async function createClientGame( lobbyConfig: LobbyConfig, eventBus: EventBus, transport: Transport, @@ -224,6 +224,7 @@ export class ClientGameRunner { startTime(), Date.now(), update.winner, + this.lobby.serverConfig, ); endGame(record); } diff --git a/src/client/LocalServer.ts b/src/client/LocalServer.ts index 2adbdda3e..6d4cd8805 100644 --- a/src/client/LocalServer.ts +++ b/src/client/LocalServer.ts @@ -199,6 +199,7 @@ export class LocalServer { this.startedAt, Date.now(), this.winner?.winner, + this.lobbyConfig.serverConfig, ); if (!saveFullGame) { // Clear turns because beacon only supports up to 64kb diff --git a/src/core/Schemas.ts b/src/core/Schemas.ts index 1f94f4179..c062929fa 100644 --- a/src/core/Schemas.ts +++ b/src/core/Schemas.ts @@ -526,6 +526,8 @@ export const AnalyticsRecordSchema = z.object({ info: GameEndInfoSchema, version: z.literal("v0.0.2"), gitCommit: GitCommitSchema, + subdomain: z.string(), + domain: z.string(), }); export type AnalyticsRecord = z.infer; diff --git a/src/core/Util.ts b/src/core/Util.ts index d78f7091d..b83bbe894 100644 --- a/src/core/Util.ts +++ b/src/core/Util.ts @@ -12,6 +12,7 @@ import { Winner, } from "./Schemas"; +import { ServerConfig } from "./configuration/Config"; import { BOT_NAME_PREFIXES, BOT_NAME_SUFFIXES, @@ -192,10 +193,13 @@ export function createGameRecord( start: number, end: number, winner: Winner, + serverConfig: ServerConfig, ): GameRecord { const duration = Math.floor((end - start) / 1000); const version = "v0.0.2"; - const gitCommit = process.env.GIT_COMMIT ?? "unknown"; + const gitCommit = serverConfig.gitCommit(); + const subdomain = serverConfig.subdomain(); + const domain = serverConfig.domain(); const num_turns = allTurns.length; const turns = allTurns.filter( (t) => t.intents.length !== 0 || t.hash !== undefined, @@ -213,6 +217,8 @@ export function createGameRecord( }, version, gitCommit, + subdomain, + domain, turns, }; return record; diff --git a/src/core/configuration/Config.ts b/src/core/configuration/Config.ts index 0daf4d89f..f9b3d3bcb 100644 --- a/src/core/configuration/Config.ts +++ b/src/core/configuration/Config.ts @@ -39,7 +39,6 @@ export interface ServerConfig { workerPort(gameID: GameID): number; workerPortByIndex(workerID: number): number; env(): GameEnv; - region(): string; adminToken(): string; adminHeader(): string; // Only available on the server diff --git a/src/core/configuration/DefaultConfig.ts b/src/core/configuration/DefaultConfig.ts index 1eab712c5..a7fcf4a54 100644 --- a/src/core/configuration/DefaultConfig.ts +++ b/src/core/configuration/DefaultConfig.ts @@ -130,12 +130,6 @@ export abstract class DefaultServerConfig implements ServerConfig { otelPassword(): string { return process.env.OTEL_PASSWORD ?? ""; } - region(): string { - if (this.env() === GameEnv.Dev) { - return "dev"; - } - return process.env.REGION ?? ""; - } gitCommit(): string { return process.env.GIT_COMMIT ?? ""; } diff --git a/src/server/Archive.ts b/src/server/Archive.ts index d3b702660..e9d4cdd55 100644 --- a/src/server/Archive.ts +++ b/src/server/Archive.ts @@ -47,11 +47,13 @@ export async function archive(gameRecord: GameRecord) { async function archiveAnalyticsToR2(gameRecord: GameRecord) { // Create analytics data object - const { info, version, gitCommit } = gameRecord; + const { info, version, gitCommit, subdomain, domain } = gameRecord; const analyticsData: AnalyticsRecord = { info, version, gitCommit, + subdomain, + domain, }; try { diff --git a/src/server/GameServer.ts b/src/server/GameServer.ts index eda377740..73ccbd97c 100644 --- a/src/server/GameServer.ts +++ b/src/server/GameServer.ts @@ -628,6 +628,7 @@ export class GameServer { this._startTime ?? 0, Date.now(), this.winner?.winner, + this.config, ), ); } diff --git a/tests/util/TestServerConfig.ts b/tests/util/TestServerConfig.ts index 4858ddafb..5db2c4ca4 100644 --- a/tests/util/TestServerConfig.ts +++ b/tests/util/TestServerConfig.ts @@ -46,9 +46,6 @@ export class TestServerConfig implements ServerConfig { otelPassword(): string { throw new Error("Method not implemented."); } - region(): string { - return "test"; - } turnIntervalMs(): number { throw new Error("Method not implemented."); }