diff --git a/public/src/forum/admin/index.js b/public/src/forum/admin/index.js
index 1870884328..7c9f6db3bd 100644
--- a/public/src/forum/admin/index.js
+++ b/public/src/forum/admin/index.js
@@ -35,6 +35,17 @@ define(function() {
$('.restart').on('click', function() {
socket.emit('admin.restart');
});
+
+ socket.emit('admin.getVisitorCount', function(err, data) {
+ if(err) {
+ return app.alertError(err.message);
+ }
+
+ var uniqueVisitors = $('#unique-visitors');
+ for(var key in data) {
+ uniqueVisitors.find('#' + key).text(data[key]);
+ }
+ });
};
Admin.updateRoomUsage = function(err, data) {
diff --git a/public/templates/admin/index.tpl b/public/templates/admin/index.tpl
index 2d548c459c..3fac2b0917 100644
--- a/public/templates/admin/index.tpl
+++ b/public/templates/admin/index.tpl
@@ -36,4 +36,29 @@
+
\ No newline at end of file
diff --git a/src/routes/api.js b/src/routes/api.js
index d7e4419b22..134964d185 100644
--- a/src/routes/api.js
+++ b/src/routes/api.js
@@ -30,8 +30,7 @@ var path = require('path'),
user.updateLastOnlineTime(req.user.uid);
}
- // Log IP address
- db.sortedSetAdd('ip:recent', +new Date(), req.ip || 'Unknown');
+ db.sortedSetAdd('ip:recent', Date.now(), req.ip || 'Unknown');
next();
});
diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js
index 3d5fd87726..316d77a347 100644
--- a/src/socket.io/admin.js
+++ b/src/socket.io/admin.js
@@ -9,6 +9,7 @@ var groups = require('../groups'),
categories = require('../categories'),
CategoryTools = require('../categoryTools'),
logger = require('../logger'),
+ db = require('../database'),
admin = {
user: require('../admin/user'),
categories: require('../admin/categories')
@@ -35,6 +36,30 @@ SocketAdmin.restart = function(socket, data, callback) {
meta.restart();
};
+
+SocketAdmin.getVisitorCount = function(socket, data, callback) {
+ var terms = {
+ day: 86400000,
+ week: 604800000,
+ month: 2592000000
+ };
+ var now = Date.now();
+ async.parallel({
+ day: function(next) {
+ db.sortedSetCount('ip:recent', now - terms.day, now, next);
+ },
+ week: function(next) {
+ db.sortedSetCount('ip:recent', now - terms.week, now, next);
+ },
+ month: function(next) {
+ db.sortedSetCount('ip:recent', now - terms.month, now, next);
+ },
+ alltime: function(next) {
+ db.sortedSetCount('ip:recent', 0, now, next);
+ }
+ }, callback);
+}
+
/* Topics */
SocketAdmin.topics = {};