info page

v1.18.x
barisusakli 9 years ago
parent b147f42f0a
commit 0b2f01b8bc

1
.gitignore vendored

@ -39,6 +39,7 @@ pidfile
## Directory-based project format:
.idea/
.vscode/
## File-based project format:
*.ipr

@ -2,24 +2,45 @@
var async = require('async');
var os = require('os');
var winston = require('winston');
var nconf = require('nconf');
var exec = require('child_process').exec;
var pubsub = require('../../pubsub');
var rooms = require('../../socket.io/admin/rooms');
var infoController = {};
var info = [];
infoController.get = function(req, res, next) {
info = [];
pubsub.publish('sync:node:info:start');
setTimeout(function() {
res.render('admin/development/info', {info: info, infoJSON: JSON.stringify(info, null, 4), host: os.hostname(), port: nconf.get('port')});
}, 100);
};
pubsub.on('sync:node:info:start', function() {
getNodeInfo(function(err, data) {
if (err) {
return winston.error(err);
}
pubsub.publish('sync:node:info:end', data);
});
});
pubsub.on('sync:node:info:end', function(data) {
info.push(data);
});
function getNodeInfo(callback) {
var data = {
process: {
port: nconf.get('port'),
pid: process.pid,
title: process.title,
arch: process.arch,
platform: process.platform,
version: process.version,
versions: process.versions,
memoryUsage: process.memoryUsage(),
uptime: process.uptime()
},
@ -28,19 +49,28 @@ infoController.get = function(req, res, next) {
type: os.type(),
platform: os.platform(),
arch: os.arch(),
release: os.release()
release: os.release(),
load: os.loadavg().map(function(load){ return load.toFixed(2); }).join(', ')
}
};
getGitInfo(function(err, gitInfo) {
async.parallel({
pubsub: function(next) {
pubsub.publish('sync:stats:start');
next();
},
gitInfo: function(next) {
getGitInfo(next);
}
}, function(err, results) {
if (err) {
return next(err);
return callback(err);
}
data.git = gitInfo;
res.render('admin/development/info', {info: JSON.stringify(data, null, 4), stats: JSON.stringify(rooms.getStats(), null, 4)});
data.git = results.gitInfo;
data.stats = rooms.stats[data.os.hostname + ':' + data.process.port];
callback(null, data);
});
};
}
function getGitInfo(callback) {
function get(cmd, callback) {

@ -13,10 +13,18 @@ var helpers = require('./helpers');
var usersController = {};
usersController.getOnlineUsers = function(req, res, next) {
usersController.getUsers('users:online', req.uid, req.query.page, function(err, userData) {
async.parallel({
users: function(next) {
usersController.getUsers('users:online', req.uid, req.query.page, next);
},
guests: function(next) {
require('../socket.io/admin/rooms').getTotalGuestCount(next);
}
}, function(err, results) {
if (err) {
return next(err);
}
var userData = results.users;
var hiddenCount = 0;
if (!userData.isAdminOrGlobalMod) {
userData.users = userData.users.filter(function(user) {
@ -27,7 +35,7 @@ usersController.getOnlineUsers = function(req, res, next) {
});
}
userData.anonymousUserCount = require('../socket.io').getOnlineAnonCount() + hiddenCount;
userData.anonymousUserCount = results.guests + hiddenCount;
render(req, res, userData, next);
});

@ -8,9 +8,13 @@ var validator = require('validator');
var topics = require('../../topics');
var pubsub = require('../../pubsub');
var SocketRooms = {};
var stats = {};
var totals = {};
var SocketRooms = {
stats: stats,
totals: totals
};
pubsub.on('sync:stats:start', function() {
getLocalStats(function(err, stats) {
@ -25,20 +29,42 @@ pubsub.on('sync:stats:end', function(data) {
stats[data.id] = data.stats;
});
SocketRooms.getTotalGuestCount = function(callback) {
var count = 0;
pubsub.once('sync:stats:guests', function() {
var io = require('../index').server;
var roomClients = io.sockets.adapter.rooms;
var guestCount = roomClients.online_guests ? roomClients.online_guests.length : 0;
pubsub.publish('sync:stats:guests:end', guestCount);
});
pubsub.on('sync:stats:guests:end', function(guestCount) {
count += guestCount;
});
pubsub.publish('sync:stats:guests');
setTimeout(function() {
pubsub.removeAllListeners('sync:stats:guests:end');
callback(null, count);
}, 100);
}
SocketRooms.getAll = function(socket, data, callback) {
pubsub.publish('sync:stats:start');
var totals = {
onlineGuestCount: 0,
onlineRegisteredCount: 0,
socketCount: 0,
users: {
categories: 0,
recent: 0,
unread: 0,
topics: 0,
category: 0
},
topics: {}
totals.onlineGuestCount = 0;
totals.onlineRegisteredCount = 0;
totals.socketCount = 0;
totals.topics = {};
totals.users = {
categories: 0,
recent: 0,
unread: 0,
topics: 0,
category: 0
};
for(var instance in stats) {
@ -88,22 +114,32 @@ SocketRooms.getAll = function(socket, data, callback) {
});
};
SocketRooms.getStats = function() {
return stats;
SocketRooms.getOnlineUserCount = function(io) {
if (!io) {
return 0;
}
var count = 0;
for (var key in io.sockets.adapter.rooms) {
if (io.sockets.adapter.rooms.hasOwnProperty(key) && key.startsWith('uid_')) {
++ count;
}
}
return count;
};
function getLocalStats(callback) {
var websockets = require('../index');
var io = websockets.server;
var io = require('../index').server;
if (!io) {
return callback();
}
var roomClients = io.sockets.adapter.rooms;
var socketData = {
onlineGuestCount: websockets.getOnlineAnonCount(),
onlineRegisteredCount: websockets.getOnlineUserCount(),
socketCount: websockets.getSocketCount(),
onlineGuestCount: roomClients.online_guests ? roomClients.online_guests.length : 0,
onlineRegisteredCount: SocketRooms.getOnlineUserCount(io),
socketCount: Object.keys(io.sockets.sockets).length,
users: {
categories: roomClients.categories ? roomClients.categories.length : 0,
recent: roomClients.recent_topics ? roomClients.recent_topics.length : 0,

@ -213,14 +213,6 @@ Sockets.in = function(room) {
return io.in(room);
};
Sockets.getSocketCount = function() {
if (!io) {
return 0;
}
return Object.keys(io.sockets.sockets).length;
};
Sockets.getUserSocketCount = function(uid) {
if (!io) {
return 0;
@ -230,27 +222,6 @@ Sockets.getUserSocketCount = function(uid) {
return room ? room.length : 0;
};
Sockets.getOnlineUserCount = function() {
if (!io) {
return 0;
}
var count = 0;
for (var key in io.sockets.adapter.rooms) {
if (io.sockets.adapter.rooms.hasOwnProperty(key) && key.startsWith('uid_')) {
++ count;
}
}
return count;
};
Sockets.getOnlineAnonCount = function () {
if (!io) {
return 0;
}
var room = io.sockets.adapter.rooms.online_guests;
return room ? room.length : 0;
};
Sockets.reqFromSocket = function(socket) {
var headers = socket.request.headers;
@ -268,33 +239,5 @@ Sockets.reqFromSocket = function(socket) {
};
};
Sockets.isUserOnline = function(uid) {
winston.warn('[deprecated] Sockets.isUserOnline');
return false;
};
Sockets.isUsersOnline = function(uids, callback) {
winston.warn('[deprecated] Sockets.isUsersOnline');
callback(null, uids.map(function() { return false; }));
};
Sockets.getUsersInRoom = function (uid, roomName, start, stop, callback) {
winston.warn('[deprecated] Sockets.getUsersInRoom');
callback(null, {
users: [],
room: roomName,
total: 0,
hidden: 0
});
return;
};
Sockets.getUidsInRoom = function(roomName, callback) {
winston.warn('[deprecated] Sockets.getUidsInRoom');
callback = callback || function() {};
callback(null, []);
};
/* Exporting */
module.exports = Sockets;

@ -217,10 +217,6 @@ SocketUser.setCategorySort = function(socket, sort, callback) {
}
};
SocketUser.getOnlineAnonCount = function(socket, data, callback) {
callback(null, module.parent.exports.getOnlineAnonCount());
};
SocketUser.getUnreadCount = function(socket, data, callback) {
if (!socket.uid) {
return callback(null, 0);

@ -1,24 +1,48 @@
<div class="info">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Info</h3>
<h3 class="panel-title">Info - You are on <strong>{host}:{port}</strong></h3>
</div>
<div class="panel-body">
<div class="highlight">
<pre>{info}</pre>
<table class="table table-striped">
<thead>
<tr>
<td>host</td>
<td>pid</td>
<td>nodejs</td>
<td>online</td>
<td>git</td>
<td>load</td>
<td>uptime</td>
</tr>
</thead>
<tbody>
<!-- BEGIN info -->
<tr>
<td>{info.os.hostname}:{info.process.port}</td>
<td>{info.process.pid}</td>
<td>{info.process.version}</td>
<td><span title="Registered">{info.stats.onlineRegisteredCount}</span> / <span title="Guest">{info.stats.onlineGuestCount}</span> / <span title="Sockets">{info.stats.socketCount}</span></td>
<td>{info.git.branch}@<a href="https://github.com/NodeBB/NodeBB/commit/{info.git.hash}" target="_blank">{info.git.hash}</a></td>
<td>{info.os.load}</td>
<td>{info.process.uptime}</td>
</tr>
<!-- END info -->
</tbody>
</table>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Stats</h3>
<h3 class="panel-title">Info</h3>
</div>
<div class="panel-body">
<div class="highlight">
<pre>{stats}</pre>
<pre>{infoJSON}</pre>
</div>
</div>
</div>

Loading…
Cancel
Save