diff --git a/src/gameplay/game.ts b/src/gameplay/game.ts index 65c42b9ee..9acbf4239 100644 --- a/src/gameplay/game.ts +++ b/src/gameplay/game.ts @@ -32,7 +32,10 @@ import { millisToStr } from '../util/time'; import shuffleArray from '../util/shuffleArray'; import { Anonymizer } from './anonymizer'; import { sendReplyToCommand } from '../sockets/sockets'; -import { gamesPlayedMetric } from '../metrics/gameMetrics'; +import { + gamesPlayedMetric, + getGameMetricRoomType, +} from '../metrics/gameMetrics'; export const WAITING = 'Waiting'; export const MIN_PLAYERS = 5; @@ -527,7 +530,6 @@ class Game extends Room { this.pickNum = 1; this.missionHistory = []; - console.log(this.ranked); let str = ''; if (this.ranked === true) { str = 'This game is ranked.'; @@ -1255,7 +1257,10 @@ class Game extends Room { } // From this point on, no more game moves can be made. Game is finished. - gamesPlayedMetric.inc(1, { status: 'finished' }); + gamesPlayedMetric.inc(1, { + status: 'finished', + room_type: getGameMetricRoomType(this), + }); // Clean up from here. for (let i = 0; i < this.allSockets.length; i++) { @@ -2077,7 +2082,10 @@ class Game extends Room { } if (this.voidGameTracker.playerVoted(socket.request.user.username)) { - gamesPlayedMetric.inc(1, { status: 'voided' }); + gamesPlayedMetric.inc(1, { + status: 'voided', + room_type: getGameMetricRoomType(this), + }); this.changePhase(Phase.Voided); this.sendText(`Game has been voided.`, 'server-text'); diff --git a/src/gameplay/roomTypes.ts b/src/gameplay/roomTypes.ts index ba4ea4f80..31244bd9b 100644 --- a/src/gameplay/roomTypes.ts +++ b/src/gameplay/roomTypes.ts @@ -2,15 +2,3 @@ export enum RoomCreationType { QUEUE = 'QUEUE', CUSTOM_ROOM = 'CUSTOM_ROOM', } - -export function strToRoomCreationType(typeString: string): RoomCreationType { - switch (typeString) { - case RoomCreationType.QUEUE: - return RoomCreationType.QUEUE; - case RoomCreationType.CUSTOM_ROOM: - return RoomCreationType.CUSTOM_ROOM; - default: - console.warn(`Invalid roomCreationType string. Got ${typeString}`); - return RoomCreationType.CUSTOM_ROOM; - } -} diff --git a/src/metrics/gameMetrics.ts b/src/metrics/gameMetrics.ts index 0beada4c6..79cf97bfb 100644 --- a/src/metrics/gameMetrics.ts +++ b/src/metrics/gameMetrics.ts @@ -1,9 +1,30 @@ import { PromMetricCounter } from '../clients/victoriaMetrics/promMetricCounter'; +import Game from '../gameplay/game'; +import { RoomCreationType } from '../gameplay/roomTypes'; + +enum GameMetricRoomType { + MATCHMAKING = 'matchmaking', + PUBLIC = 'public', + PRIVATE = 'private', +} export const gamesPlayedMetric = new PromMetricCounter({ name: 'games_played_total', help: 'Total number of games played.', labelOptions: { status: new Set(['finished', 'voided']), + room_type: new Set(Object.values(GameMetricRoomType)), }, }); + +export function getGameMetricRoomType(game: Game): GameMetricRoomType { + if (game.roomCreationType == RoomCreationType.QUEUE) { + return GameMetricRoomType.MATCHMAKING; + } else if (game.joinPassword) { + return GameMetricRoomType.PRIVATE; + } else if (!game.joinPassword) { + return GameMetricRoomType.PUBLIC; + } else { + throw new Error('Undefined game room type.'); + } +} diff --git a/src/sockets/sockets.ts b/src/sockets/sockets.ts index a90074661..6300be2a2 100644 --- a/src/sockets/sockets.ts +++ b/src/sockets/sockets.ts @@ -1443,7 +1443,6 @@ function newRoom(dataObj) { roomConfig, dataObj.muteSpectators, dataObj.disableVoteHistory, - RoomCreationType.CUSTOM_ROOM, () => new Date(), );