UNPKG

@colyseus/monitor

Version:

Web Monitoring Panel for Colyseus

69 lines (68 loc) 2.19 kB
// src-backend/api.ts import { matchMaker } from "@colyseus/core"; import express from "express"; import osUtils from "node-os-utils"; var UNAVAILABLE_ROOM_ERROR = "@colyseus/monitor: room $roomId is not available anymore."; function getAPI(opts) { const api = express.Router(); api.get("/", async (req, res) => { try { const rooms = await matchMaker.query({}); const columns = opts.columns || ["roomId", "name", "clients", "maxClients", "locked", "elapsedTime"]; if (!opts.columns && rooms[0] && rooms[0].publicAddress !== void 0) { columns.push("publicAddress"); } let connections = 0; res.json({ columns, rooms: rooms.map((room) => { const data = JSON.parse(JSON.stringify(room)); connections += room.clients; data.locked = room.locked || false; data.private = room.private; data.maxClients = `${room.maxClients}`; data.elapsedTime = Date.now() - new Date(room.createdAt).getTime(); return data; }), connections, cpu: await osUtils.cpu.usage(), memory: await osUtils.mem.used() }); } catch (e) { const message = e.message; console.error(message); res.status(500); res.json({ message }); } }); api.get("/room", async (req, res) => { const roomId = req.query.roomId; try { const inspectData = await matchMaker.remoteRoomCall(roomId, "getInspectData"); res.json(inspectData); } catch (e) { const message = UNAVAILABLE_ROOM_ERROR.replace("$roomId", roomId); console.error(message); res.status(500); res.json({ message }); } }); api.get("/room/call", async (req, res) => { const roomId = req.query.roomId; const method = req.query.method; const args = JSON.parse(req.query.args); try { const data = await matchMaker.remoteRoomCall(roomId, method, args); res.json(data); } catch (e) { const message = UNAVAILABLE_ROOM_ERROR.replace("$roomId", roomId); console.error(message); res.status(500); res.json({ message }); } }); return api; } export { getAPI };