feat: track login sessions for admin dashboard reporting

v1.18.x
Julian Lam 4 years ago
parent 020f0b8322
commit 9a9f366d3b

@ -2,6 +2,7 @@
"forum-traffic": "Forum Traffic",
"page-views": "Page Views",
"unique-visitors": "Unique Visitors",
"logins": "Logins",
"new-users": "New Users",
"posts": "Posts",
"topics": "Topics",

@ -117,14 +117,16 @@ async function getStats() {
const results = await Promise.all([
getStatsForSet('ip:recent', 'uniqueIPCount'),
getStatsForSet('sessions:recent', 'loginCount'),
getStatsForSet('users:joindate', 'userCount'),
getStatsForSet('posts:pid', 'postCount'),
getStatsForSet('topics:tid', 'topicCount'),
]);
results[0].name = '[[admin/dashboard:unique-visitors]]';
results[1].name = '[[admin/dashboard:new-users]]';
results[2].name = '[[admin/dashboard:posts]]';
results[3].name = '[[admin/dashboard:topics]]';
results[1].name = '[[admin/dashboard:logins]]';
results[2].name = '[[admin/dashboard:new-users]]';
results[3].name = '[[admin/dashboard:posts]]';
results[4].name = '[[admin/dashboard:topics]]';
cache.set('admin:stats', results, 600000);
return results;
}

@ -357,6 +357,7 @@ authenticationController.onSuccessfulLogin = async function (req, uid) {
user.updateLastOnlineTime(uid),
user.updateOnlineUsers(uid),
analytics.increment('logins'),
db.incrObjectFieldBy('global', 'loginCount', 1),
]);
if (uid > 0) {
await db.setObjectField(`uid:${uid}:sessionUUID:sessionId`, uuid, req.sessionID);

@ -111,7 +111,7 @@ module.exports = function (User) {
return;
}
await cleanExpiredSessions(uid);
await db.sortedSetAdd(`uid:${uid}:sessions`, Date.now(), sessionId);
await db.sortedSetsAdd([`uid:${uid}:sessions`, 'sessions:recent'], Date.now(), sessionId);
await revokeSessionsAboveThreshold(uid, meta.config.maxUserSessions);
};

Loading…
Cancel
Save