From f5fe1c4f2918561d70a56d196aaf1b13c97a2bf1 Mon Sep 17 00:00:00 2001 From: Ilion Beyst Date: Sat, 17 Sep 2022 11:55:17 +0200 Subject: initial version of structured log display --- web/pw-server/src/lib/log_parser.ts | 55 +++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 web/pw-server/src/lib/log_parser.ts (limited to 'web/pw-server/src/lib/log_parser.ts') diff --git a/web/pw-server/src/lib/log_parser.ts b/web/pw-server/src/lib/log_parser.ts new file mode 100644 index 0000000..77c459f --- /dev/null +++ b/web/pw-server/src/lib/log_parser.ts @@ -0,0 +1,55 @@ +export type PlayerLog = PlayerLogTurn[]; + +export type PlayerLogTurn = { + action?: PlayerAction; + stderr: string[]; +}; + +type PlayerAction = BadCommand; + +type BadCommand = { + type: "bad_command"; + command: string; + error: string; +}; + +function createEmptyLogTurn(): PlayerLogTurn { + return { + stderr: [], + }; +} + +export function parsePlayerLog(playerId: number, logText: string): PlayerLog { + const logLines = logText.split("\n").slice(0, -1); + + const playerLog: PlayerLog = []; + + let turn = null; + + logLines.forEach((logLine) => { + const logMessage = JSON.parse(logLine); + + if (logMessage["type"] === "gamestate") { + if (turn) { + playerLog.push(turn); + turn = createEmptyLogTurn(); + } + } else if (logMessage["player_id"] === playerId) { + if (!turn) { + // older match logs don't have an initial game state due to a bug. + turn = createEmptyLogTurn(); + } + switch (logMessage["type"]) { + case "stderr": { + let msg = logMessage["message"]; + turn.stderr.push(msg); + } + case "bad_command": { + turn.action = logMessage; + } + } + } + }); + + return playerLog; +} -- cgit v1.2.3