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", "forum-traffic": "Forum Traffic",
"page-views": "Page Views", "page-views": "Page Views",
"unique-visitors": "Unique Visitors", "unique-visitors": "Unique Visitors",
"logins": "Logins",
"new-users": "New Users", "new-users": "New Users",
"posts": "Posts", "posts": "Posts",
"topics": "Topics", "topics": "Topics",

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

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

@ -111,7 +111,7 @@ module.exports = function (User) {
return; return;
} }
await cleanExpiredSessions(uid); 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); await revokeSessionsAboveThreshold(uid, meta.config.maxUserSessions);
}; };

Loading…
Cancel
Save