From e75c303b89bc21d9e775738e1a3cc44f25aafa96 Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Fri, 28 Feb 2014 17:19:42 -0500 Subject: [PATCH] added unique visitor count to admin dashboard --- public/src/forum/admin/index.js | 11 +++++++++++ public/templates/admin/index.tpl | 25 +++++++++++++++++++++++++ src/routes/api.js | 3 +-- src/socket.io/admin.js | 25 +++++++++++++++++++++++++ 4 files changed, 62 insertions(+), 2 deletions(-) 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 @@ +
+
+
Unique Visitors
+
+
+
+
+
Day
+
+
+
+
Week
+
+
+
+
Month
+
+
+
+
All Time
+
+
+
+
+
\ 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 = {};