Last Connect improvements, #2939

This commit is contained in:
Ylian Saint-Hilaire 2021-07-27 00:13:41 -07:00
parent a5ab48242a
commit e55d04a2c6
38 changed files with 22 additions and 23 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -5404,7 +5404,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
'getnetworkinfo': serverCommandGetNetworkInfo,
'getsysinfo': serverCommandGetSysInfo,
'lastconnect': serverCommandLastConnect,
'lastseen': serverCommandLastSeen,
'lastconnects': serverCommandLastConnects,
'meshes': serverCommandMeshes,
'serverconsole': serverCommandServerConsole,
'servererrors': serverCommandServerErrors,
@ -5538,27 +5538,22 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
});
}
function serverCommandLastSeen(command) {
var links = parent.GetAllMeshIdWithRights(user);
var extraids = getUserExtraIds();
db.GetAllTypeNoTypeFieldMeshFiltered(links, extraids, domain.id, 'node', null, (err, docs) => {
if (docs == null) { docs = []; }
function serverCommandLastConnects(command) {
const links = parent.GetAllMeshIdWithRights(user);
const extraids = getUserExtraIds();
db.GetAllTypeNoTypeFieldMeshFiltered(links, extraids, domain.id, 'node', null, function (err, docs) {
if (docs == null) return;
// use associative array to join lastconnects on to users's nodes (left join)
var LCs = {}
for (var i in docs) {
LCs[docs[i]._id] = '';
}
// Create a list of node ids for this user and query them for last device connection time
const ids = []
for (var i in docs) { ids.push('lc' + docs[i]._id); }
db.GetAllType('lastconnect', (err, docs) => {
for (var j in docs) {
var nodeid = docs[j]._id.substring(2);
if (LCs[nodeid] != null) {
LCs[nodeid] = docs[j].time;
}
}
try { ws.send(JSON.stringify({ action: 'lastseen', lastconnects: LCs })); } catch (ex) { }
// Pull list of last connections only for device owned by this user
db.GetAllIdsOfType(ids, domain.id, 'lastconnect', function (err, docs) {
if (docs == null) return;
const response = {};
for (var j in docs) { response[docs[j]._id.substring(2)] = docs[j].time; }
try { ws.send(JSON.stringify({ action: 'lastconnects', lastconnects: response, tag: command.tag })); } catch (ex) { }
});
});
}

View File

@ -1373,6 +1373,7 @@
var checkedNodeids = {};
var deskKeyboardShortcuts = [];
var deskLastClipboardSent = null;
var requestedLastConnects = false;
// Console Message Display Timers
var p11DeskConsoleMsgTimer = null;
@ -1929,7 +1930,6 @@
meshserver.send({ action: 'usergroups' });
meshserver.send({ action: 'meshes' });
meshserver.send({ action: 'nodes', id: '{{currentNode}}' });
meshserver.send({ action: 'lastseen' });
meshserver.send({ action: 'loginTokens' });
if (pluginHandler != null) { meshserver.send({ action: 'plugins' }); }
if ('{{currentNode}}'.toLowerCase() == '') { meshserver.send({ action: 'files' }); }
@ -2292,13 +2292,14 @@
}
break;
}
case 'lastseen': {
case 'lastconnects': {
var lcnodes = Object.keys(message.lastconnects);
for (var i in lcnodes) {
var lcnodeid = lcnodes[i];
var node = getNodeFromId(lcnodeid);
if (node != null) { node.lastconnect = message.lastconnects[lcnodeid] }
}
mainUpdate(4);
}
case 'msg': {
// Check if this is a message from a node
@ -3984,7 +3985,10 @@
if (deviceViewSettings.devsCols.indexOf('user') >= 0) { colums += '<th style=color:gray;width:120px>' + "User"; }
if (deviceViewSettings.devsCols.indexOf('ip') >= 0) { colums += '<th style=color:gray;width:120px>' + "Address"; }
if (deviceViewSettings.devsCols.indexOf('conn') >= 0) { colums += '<th style=color:gray;width:100px>' + "Connectivity"; }
if (deviceViewSettings.devsCols.indexOf('lastseen') >= 0) { colums += '<th style=color:gray;width:120px>' + "Last Seen"; }
if (deviceViewSettings.devsCols.indexOf('lastseen') >= 0) {
colums += '<th style=color:gray;width:120px>' + "Last Seen";
if (requestedLastConnects == false) { requestedLastConnects = true; meshserver.send({ action: 'lastconnects' }); }
}
// This height of 1 div at the end to fix a problem in Linux firefox browsers
r = '<table style=width:100%;margin-top:4px cellpadding=0 cellspacing=0><th style=color:gray>' + colums + r + '</tr></table><div style=height:1px></div>';