From 5879185ebc079536ddeef10aca18c2ca168e59fe Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 4 Nov 2015 17:43:43 -0500 Subject: [PATCH] single proc stats --- public/src/admin/general/dashboard.js | 4 +- src/analytics.js | 7 +-- src/socket.io/admin.js | 1 + src/socket.io/admin/rooms.js | 73 +++++++++++++++++++++++++++ src/socket.io/index.js | 27 ++++++---- src/socket.io/meta.js | 56 -------------------- 6 files changed, 97 insertions(+), 71 deletions(-) create mode 100644 src/socket.io/admin/rooms.js diff --git a/public/src/admin/general/dashboard.js b/public/src/admin/general/dashboard.js index cba6c3c7df..62280f2a79 100644 --- a/public/src/admin/general/dashboard.js +++ b/public/src/admin/general/dashboard.js @@ -22,7 +22,7 @@ define('admin/general/dashboard', ['semver'], function(semver) { Admin.init = function() { app.enterRoom('admin'); - socket.emit('meta.rooms.getAll', Admin.updateRoomUsage); + socket.emit('admin.rooms.getAll', Admin.updateRoomUsage); isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); @@ -439,7 +439,7 @@ define('admin/general/dashboard', ['semver'], function(semver) { intervals.rooms = setInterval(function() { if (app.isFocused && app.isConnected) { - socket.emit('meta.rooms.getAll', Admin.updateRoomUsage); + socket.emit('admin.rooms.getAll', Admin.updateRoomUsage); } }, realtime ? DEFAULTS.realtimeInterval : DEFAULTS.roomInterval); diff --git a/src/analytics.js b/src/analytics.js index 8ac91877c3..5d23937ad2 100644 --- a/src/analytics.js +++ b/src/analytics.js @@ -1,8 +1,7 @@ 'use strict'; -var cronJob = require('cron').CronJob, - db = require('./database'); - +var cronJob = require('cron').CronJob; +var db = require('./database'); (function(Analytics) { @@ -61,6 +60,8 @@ var cronJob = require('cron').CronJob, db.incrObjectFieldBy('global', 'uniqueIPCount', uniqueIPCount); uniqueIPCount = 0; } + + }; Analytics.getUnwrittenPageviews = function() { diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js index 9161eb819c..29a92dc274 100644 --- a/src/socket.io/admin.js +++ b/src/socket.io/admin.js @@ -28,6 +28,7 @@ var async = require('async'), tags: require('./admin/tags'), rewards: require('./admin/rewards'), navigation: require('./admin/navigation'), + rooms: require('./admin/rooms'), themes: {}, plugins: {}, widgets: {}, diff --git a/src/socket.io/admin/rooms.js b/src/socket.io/admin/rooms.js new file mode 100644 index 0000000000..51f55336a1 --- /dev/null +++ b/src/socket.io/admin/rooms.js @@ -0,0 +1,73 @@ +'use strict'; + + +var validator = require('validator'); +var topics = require('../../topics'); + +var SocketRooms = {}; + +SocketRooms.getAll = function(socket, data, callback) { + + var websockets = require('../index'); + var io = websockets.server; + if (!io) { + return; + } + + var roomClients = io.sockets.adapter.rooms; + var socketData = { + onlineGuestCount: websockets.getOnlineAnonCount(), + onlineRegisteredCount: websockets.getOnlineUserCount(), + socketCount: websockets.getSocketCount(), + users: { + categories: roomClients.categories ? Object.keys(roomClients.categories).length : 0, + recent: roomClients.recent_topics ? Object.keys(roomClients.recent_topics).length : 0, + unread: roomClients.unread_topics ? Object.keys(roomClients.unread_topics).length: 0, + popular: roomClients.popular_topics ? Object.keys(roomClients.popular_topics).length: 0, + topics: 0, + category: 0 + }, + topics: {} + }; + + var topTenTopics = [], + tid; + + for (var room in roomClients) { + if (roomClients.hasOwnProperty(room)) { + tid = room.match(/^topic_(\d+)/); + if (tid) { + var length = Object.keys(roomClients[room]).length; + socketData.users.topics += length; + + topTenTopics.push({tid: tid[1], count: length}); + } else if (room.match(/^category/)) { + socketData.users.category += Object.keys(roomClients[room]).length; + } + } + } + + topTenTopics = topTenTopics.sort(function(a, b) { + return b.count - a.count; + }).slice(0, 10); + + var topTenTids = topTenTopics.map(function(topic) { + return topic.tid; + }); + + topics.getTopicsFields(topTenTids, ['title'], function(err, titles) { + if (err) { + return callback(err); + } + topTenTopics.forEach(function(topic, index) { + socketData.topics[topic.tid] = { + value: topic.count || 0, + title: validator.escape(titles[index].title) + }; + }); + + callback(null, socketData); + }); +}; + +module.exports = SocketRooms; \ No newline at end of file diff --git a/src/socket.io/index.js b/src/socket.io/index.js index 17d46a5303..a0f65f66cc 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -217,25 +217,32 @@ Sockets.in = function(room) { }; Sockets.getSocketCount = function() { - return rooms.socketCount(); + if (!io) { + return 0; + } + return io.sockets.sockets.length; }; Sockets.getUserSocketCount = function(uid) { - return rooms.clients('uid_' + uid).length; + if (!io) { + return 0; + } + return io.sockets.adapter.rooms['uid_' + uid] ? Object.keys(io.sockets.adapter.rooms['uid_' + uid]).length : 0; }; Sockets.getOnlineUserCount = function() { - var count = 0; - Object.keys(rooms.roomClients()).forEach(function(roomName) { - if (roomName.startsWith('uid_')) { - ++ count; - } - }); - return count; + if (!io) { + return 0; + } + + return io.sockets.adapter.rooms.online_users ? Object.keys(io.sockets.adapter.rooms.online_users).length : 0; }; Sockets.getOnlineAnonCount = function () { - return rooms.clients('online_guests').length; + if (!io) { + return 0; + } + return io.sockets.adapter.rooms.online_guests ? Object.keys(io.sockets.adapter.rooms.online_guests).length : 0; }; Sockets.reqFromSocket = function(socket) { diff --git a/src/socket.io/meta.js b/src/socket.io/meta.js index a77d893d32..d35d4d01f2 100644 --- a/src/socket.io/meta.js +++ b/src/socket.io/meta.js @@ -82,62 +82,6 @@ function leaveCurrentRoom(socket) { } } -SocketMeta.rooms.getAll = function(socket, data, callback) { - var roomClients = rooms.roomClients(); - var socketData = { - onlineGuestCount: websockets.getOnlineAnonCount(), - onlineRegisteredCount: websockets.getOnlineUserCount(), - socketCount: websockets.getSocketCount(), - users: { - categories: roomClients.categories ? roomClients.categories.length : 0, - recent: roomClients.recent_topics ? roomClients.recent_topics.length : 0, - unread: roomClients.unread_topics ? roomClients.unread_topics.length: 0, - popular: roomClients.popular_topics ? roomClients.popular_topics.length: 0, - topics: 0, - category: 0 - }, - topics: {} - }; - - var topTenTopics = [], - tid; - - for (var room in roomClients) { - if (roomClients.hasOwnProperty(room)) { - tid = room.match(/^topic_(\d+)/); - if (tid) { - var length = roomClients[room].length; - socketData.users.topics += length; - - topTenTopics.push({tid: tid[1], count: length}); - } else if (room.match(/^category/)) { - socketData.users.category += roomClients[room].length; - } - } - } - - topTenTopics = topTenTopics.sort(function(a, b) { - return b.count - a.count; - }).slice(0, 10); - - var topTenTids = topTenTopics.map(function(topic) { - return topic.tid; - }); - topics.getTopicsFields(topTenTids, ['title'], function(err, titles) { - if (err) { - return callback(err); - } - topTenTopics.forEach(function(topic, index) { - socketData.topics[topic.tid] = { - value: topic.count || 0, - title: validator.escape(titles[index].title) - }; - }); - - callback(null, socketData); - }); - -}; module.exports = SocketMeta;