feat: track login sessions for admin dashboard reporting

This commit is contained in:
Julian Lam
2021-02-22 11:38:26 -05:00
parent 020f0b8322
commit 9a9f366d3b
4 changed files with 8 additions and 4 deletions

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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);
};