From c969ae58c23938ef25e740cebf66fb60a1c91571 Mon Sep 17 00:00:00 2001 From: John McLear Date: Sat, 6 Feb 2021 19:53:52 +0000 Subject: [PATCH] stats: activePads & lastDisconnected stats --- src/node/handler/PadMessageHandler.js | 13 +++++++++++++ src/node/handler/SocketIORouter.js | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index 2a1f6385b..8c106c615 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -90,6 +90,19 @@ exports.handleConnect = (socket) => { // Initialize sessioninfos for this new session sessioninfos[socket.id] = {}; + + stats.gauge('activePads', () => { + const padIds = []; + for (const session of Object.keys(sessioninfos)) { + if(sessioninfos[session].padId) { + if(padIds.indexOf(sessioninfos[session].padId) === -1) { + padIds.push(sessioninfos[session].padId); + } + } + }; + return padIds.length; + }); + }; /** diff --git a/src/node/handler/SocketIORouter.js b/src/node/handler/SocketIORouter.js index 42d710a39..35325c072 100644 --- a/src/node/handler/SocketIORouter.js +++ b/src/node/handler/SocketIORouter.js @@ -22,6 +22,7 @@ const log4js = require('log4js'); const messageLogger = log4js.getLogger('message'); +const stats = require('../stats'); /** * Saves all components @@ -77,6 +78,11 @@ exports.setSocketIO = (_socket) => { }); client.on('disconnect', () => { + // store the lastDisconnect as a timestamp, this is useful if you want to know + // when the last user disconnected. If your activePads is 0 and totalUsers is 0 + // you can say, if there has been no active pads or active users for 10 minutes + // this instance can be brought out of a scaling cluster. + stats.gauge('lastDisconnect', () => Date.now()); // tell all components about this disconnect for (const i in components) { components[i].handleDisconnect(client);