From 8e052688634c46b119935735ac5879a382d8650d Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 19 Mar 2025 10:49:41 -0700 Subject: [PATCH] add region to worker metrics --- src/core/configuration/Config.ts | 1 + src/core/configuration/DefaultConfig.ts | 6 ++++++ src/server/WorkerMetrics.ts | 13 ++++++++++--- tests/util/TestServerConfig.ts | 3 +++ update.sh | 1 + 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/core/configuration/Config.ts b/src/core/configuration/Config.ts index 634c1b3b8..dad9064bf 100644 --- a/src/core/configuration/Config.ts +++ b/src/core/configuration/Config.ts @@ -98,6 +98,7 @@ 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 0c33cbc83..a071f8875 100644 --- a/src/core/configuration/DefaultConfig.ts +++ b/src/core/configuration/DefaultConfig.ts @@ -23,6 +23,12 @@ import { pastelTheme } from "./PastelTheme"; import { pastelThemeDark } from "./PastelThemeDark"; export abstract class DefaultServerConfig implements ServerConfig { + 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/WorkerMetrics.ts b/src/server/WorkerMetrics.ts index b17596bc7..5b8925001 100644 --- a/src/server/WorkerMetrics.ts +++ b/src/server/WorkerMetrics.ts @@ -1,5 +1,9 @@ import promClient from "prom-client"; import { GameManager } from "./GameManager"; +import { getServerConfigFromServer } from "../core/configuration/Config"; + +const config = getServerConfigFromServer(); +const region = config.region(); // Initialize the Prometheus registry const register = new promClient.Registry(); @@ -11,18 +15,21 @@ promClient.collectDefaultMetrics({ register }); const activeGamesGauge = new promClient.Gauge({ name: "openfont_active_games_count", help: "Number of active games on this worker", + labelNames: ["region"], registers: [register], }); const connectedClientsGauge = new promClient.Gauge({ name: "openfont_connected_clients_count", help: "Number of connected clients on this worker", + labelNames: ["region"], registers: [register], }); const memoryUsageGauge = new promClient.Gauge({ name: "openfont_memory_usage_bytes", help: "Current memory usage of the worker process in bytes", + labelNames: ["region"], registers: [register], }); @@ -35,11 +42,11 @@ export const metrics = { // Function to update game-related metrics updateGameMetrics: (gameManager: GameManager) => { - activeGamesGauge.set(gameManager.activeGames()); - connectedClientsGauge.set(gameManager.activeClients()); + activeGamesGauge.set({ region: region }, gameManager.activeGames()); + connectedClientsGauge.set({ region: region }, gameManager.activeClients()); // Update memory usage metrics const memoryUsage = process.memoryUsage(); - memoryUsageGauge.set(memoryUsage.heapUsed); + memoryUsageGauge.set({ region: region }, memoryUsage.heapUsed); }, }; diff --git a/tests/util/TestServerConfig.ts b/tests/util/TestServerConfig.ts index fabfd4eb1..3d075e0c7 100644 --- a/tests/util/TestServerConfig.ts +++ b/tests/util/TestServerConfig.ts @@ -3,6 +3,9 @@ import { GameMapType } from "../../src/core/game/Game"; import { GameID } from "../../src/core/Schemas"; export class TestServerConfig implements ServerConfig { + region(): string { + return "test"; + } turnIntervalMs(): number { throw new Error("Method not implemented."); } diff --git a/update.sh b/update.sh index 31a97666f..02b866526 100755 --- a/update.sh +++ b/update.sh @@ -86,6 +86,7 @@ docker run -d -p 80:80 -p 127.0.0.1:9090:9090 \ --log-opt max-size=10m \ --log-opt max-file=3 \ --env GAME_ENV=${ENV} \ + --env REGION=${REGION} \ --env-file /root/.env \ --name ${CONTAINER_NAME} \ $FULL_IMAGE_NAME