diff --git a/src/db/MongoDB.js b/src/db/MongoDB.js index 88c963e..e679114 100644 --- a/src/db/MongoDB.js +++ b/src/db/MongoDB.js @@ -4,6 +4,7 @@ const { nanoid } = require('nanoid'); const languages = require('../config/langages'); const configs = require('../config/config'); const utils = require('../utils'); +const prom = require('../socket/prom') const baseCode = [ {uuid: utils.uuid(Math.random().toString(), 10), content: 'def main(text: str) -> None:'}, @@ -216,6 +217,7 @@ class MongoDB { case 'new-line': results = await this.newLine(documentLink, data.previous, data.id, data.content); if (!results) success = false; + prom.total_new_lines.inc(); break; case 'delete-line': results = await this.deleteLine(documentLink, data.id); diff --git a/src/routes/index.js b/src/routes/index.js index c3ba8e3..97fc64a 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -33,6 +33,8 @@ const router = express.Router(); const hook = config.DISCORD_WEBHOOK ? new discordWebhook.Webhook(config.DISCORD_WEBHOOK) : null; +const prom = require('../socket/prom'); + const client = require('prom-client'); const qr_scans = new client.Counter({ @@ -65,6 +67,7 @@ router.post('/create_document', async (req, res, next) => { const language = 'python'; let documentId = await db.createDocument(language); if (documentId) { + prom.total_new_documents.inc(); res.redirect(`/editor/${documentId}`); } else { diff --git a/src/socket/prom.js b/src/socket/prom.js index 5bfa659..ecc0fa3 100644 --- a/src/socket/prom.js +++ b/src/socket/prom.js @@ -21,4 +21,47 @@ const total_packets = new client.Counter({ help: 'total_packets', }); -module.exports = { timestamp_uptime, connexions, connected, total_packets }; +const total_packets_size = new client.Counter({ + name: 'total_packets_size', + help: 'total_packets_size', +}); + +const total_new_documents = new client.Counter({ + name: 'total_new_documents', + help: 'total_new_documents', +}); + +const total_new_lines = new client.Counter({ + name: 'total_new_lines', + help: 'total_new_lines', +}); + +const active_rooms = new client.Gauge({ + name: 'active_rooms', + help: 'active_rooms', +}); + +const unique_connected = new client.Gauge({ + name: 'unique_connected', + help: 'unique_connected', +}); + +/* +const unique_connexions = new client.Counter({ + name: 'unique_connexions', + help: 'unique_connexions', +}); +*/ + +module.exports = { + timestamp_uptime, + connexions, + connected, + total_packets, + total_packets_size, + total_new_documents, + total_new_lines, + active_rooms, + unique_connected, + //unique_connexions, +}; diff --git a/src/socket/socket.js b/src/socket/socket.js index 4839098..487bfa3 100644 --- a/src/socket/socket.js +++ b/src/socket/socket.js @@ -58,7 +58,6 @@ module.exports = function (wss) { socket.on('message', async data => { - prom.total_packets.inc(); data = JSON.parse(data); if(!('uuid' in data)) data['uuid'] = 'None'; switch (data.event) { @@ -139,6 +138,8 @@ module.exports = function (wss) { } } + prom.total_packets.inc(); + prom.total_packets_size.inc(data.toString().length * 16); }); socket.on('pong', () => { @@ -171,6 +172,14 @@ module.exports = function (wss) { setInterval(() => { prom.connected.set(wss.clients.size); + const unique_list = []; + wss.clients.forEach(function(x){ + if(!unique_list.includes(x._socket.address().address)){ + unique_list.push(x._socket.address().address); + } + }); + prom.unique_connected.set(unique_list.length); + prom.active_rooms.set(Object.keys(rooms).length); }, 5000); // delete old documents