Files
OpenFrontIO/src/server/WorkerMetrics.ts
T
2025-03-31 13:09:27 -07:00

53 lines
1.6 KiB
TypeScript

import promClient from "prom-client";
import { getServerConfigFromServer } from "../core/configuration/ConfigLoader";
import { GameManager } from "./GameManager";
const config = getServerConfigFromServer();
const region = config.region();
// Initialize the Prometheus registry
const register = new promClient.Registry();
// Enable default Node.js metrics collection
promClient.collectDefaultMetrics({ register });
// Add worker-specific metrics
const activeGamesGauge = new promClient.Gauge({
name: "openfront_active_games_count",
help: "Number of active games on this worker",
labelNames: ["region"],
registers: [register],
});
const connectedClientsGauge = new promClient.Gauge({
name: "openfront_connected_clients_count",
help: "Number of connected clients on this worker",
labelNames: ["region"],
registers: [register],
});
const memoryUsageGauge = new promClient.Gauge({
name: "openfront_memory_usage_bytes",
help: "Current memory usage of the worker process in bytes",
labelNames: ["region"],
registers: [register],
});
// Export the metrics for use in the worker
export const metrics = {
register,
activeGamesGauge,
connectedClientsGauge,
memoryUsageGauge,
// Function to update game-related metrics
updateGameMetrics: (gameManager: GameManager) => {
activeGamesGauge.set({ region: region }, gameManager.activeGames());
connectedClientsGauge.set({ region: region }, gameManager.activeClients());
// Update memory usage metrics
const memoryUsage = process.memoryUsage();
memoryUsageGauge.set({ region: region }, memoryUsage.heapUsed);
},
};