Last Connect improvements, #2939

Ylian Saint-Hilaire committed Jul 27, 2021 at 00:13 UTC e55d04a2c6353d5144824554d4ce337f4bb8d636
38 files changed +24 -25
agents/MeshCmd-signed.exe
Binary files a/agents/MeshCmd-signed.exe and b/agents/MeshCmd-signed.exe differ
agents/MeshCmd64-signed.exe
Binary files a/agents/MeshCmd64-signed.exe and b/agents/MeshCmd64-signed.exe differ
agents/MeshService-signed.exe
Binary files a/agents/MeshService-signed.exe and b/agents/MeshService-signed.exe differ
agents/MeshService.exe
Binary files a/agents/MeshService.exe and b/agents/MeshService.exe differ
agents/MeshService64-signed.exe
Binary files a/agents/MeshService64-signed.exe and b/agents/MeshService64-signed.exe differ
agents/MeshService64.exe
Binary files a/agents/MeshService64.exe and b/agents/MeshService64.exe differ
agents/agents-new/MeshService.exe
Binary files /dev/null and b/agents/agents-new/MeshService.exe differ
agents/agents-new/MeshService64.exe
Binary files /dev/null and b/agents/agents-new/MeshService64.exe differ
agents/agents-old/MeshCmd-signed.exe
Binary files /dev/null and b/agents/agents-old/MeshCmd-signed.exe differ
agents/agents-old/MeshCmd64-signed.exe
Binary files /dev/null and b/agents/agents-old/MeshCmd64-signed.exe differ
agents/agents-old/MeshService-signed.exe
Binary files /dev/null and b/agents/agents-old/MeshService-signed.exe differ
agents/agents-old/MeshService.exe
Binary files /dev/null and b/agents/agents-old/MeshService.exe differ
agents/agents-old/MeshService64-signed.exe
Binary files /dev/null and b/agents/agents-old/MeshService64-signed.exe differ
agents/agents-old/MeshService64.exe
Binary files /dev/null and b/agents/agents-old/MeshService64.exe differ
agents/agents-old/meshagent_aarch64 renamed
agents/agents-old/meshagent_aarch64-cortex-a53 renamed
agents/agents-old/meshagent_alpine-x86-64 renamed
agents/agents-old/meshagent_arm renamed
agents/agents-old/meshagent_arm-linaro renamed
agents/agents-old/meshagent_arm64 renamed
agents/agents-old/meshagent_armhf renamed
agents/agents-old/meshagent_armhf2 renamed
agents/agents-old/meshagent_freebsd_x86-64 renamed
agents/agents-old/meshagent_mips renamed
agents/agents-old/meshagent_mips24kc renamed
agents/agents-old/meshagent_mipsel24kc renamed
agents/agents-old/meshagent_osx-arm-64 renamed
agents/agents-old/meshagent_osx-universal-64 renamed
agents/agents-old/meshagent_osx-x86-64 renamed
agents/agents-old/meshagent_pogo renamed
agents/agents-old/meshagent_poky renamed
agents/agents-old/meshagent_poky64 renamed
agents/agents-old/meshagent_x86 renamed
agents/agents-old/meshagent_x86-64 renamed
agents/agents-old/meshagent_x86-64_nokvm renamed
agents/agents-old/meshagent_x86_nokvm renamed
meshuser.js
+17 -22
@@ -5404,7 +5404,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
5404 'getnetworkinfo': serverCommandGetNetworkInfo,
5405 'getsysinfo': serverCommandGetSysInfo,
5406 'lastconnect': serverCommandLastConnect,
5407 - 'lastseen': serverCommandLastSeen,
5407 + 'lastconnects': serverCommandLastConnects,
5408 'meshes': serverCommandMeshes,
5409 'serverconsole': serverCommandServerConsole,
5410 'servererrors': serverCommandServerErrors,
@@ -5538,27 +5538,22 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
5538 });
5539 }
5540
5541 - function serverCommandLastSeen(command) {
5542 - var links = parent.GetAllMeshIdWithRights(user);
5543 - var extraids = getUserExtraIds();
5544 - db.GetAllTypeNoTypeFieldMeshFiltered(links, extraids, domain.id, 'node', null, (err, docs) => {
5545 - if (docs == null) { docs = []; }
5546 -
5547 - // use associative array to join lastconnects on to users's nodes (left join)
5548 - var LCs = {}
5549 - for (var i in docs) {
5550 - LCs[docs[i]._id] = '';
5551 - }
5552 -
5553 - db.GetAllType('lastconnect', (err, docs) => {
5554 - for (var j in docs) {
5555 - var nodeid = docs[j]._id.substring(2);
5556 - if (LCs[nodeid] != null) {
5557 - LCs[nodeid] = docs[j].time;
5558 - }
5559 - }
5560 -
5561 - try { ws.send(JSON.stringify({ action: 'lastseen', lastconnects: LCs })); } catch (ex) { }
5541 + function serverCommandLastConnects(command) {
5542 + const links = parent.GetAllMeshIdWithRights(user);
5543 + const extraids = getUserExtraIds();
5544 + db.GetAllTypeNoTypeFieldMeshFiltered(links, extraids, domain.id, 'node', null, function (err, docs) {
5545 + if (docs == null) return;
5546 +
5547 + // Create a list of node ids for this user and query them for last device connection time
5548 + const ids = []
5549 + for (var i in docs) { ids.push('lc' + docs[i]._id); }
5550 +
5551 + // Pull list of last connections only for device owned by this user
5552 + db.GetAllIdsOfType(ids, domain.id, 'lastconnect', function (err, docs) {
5553 + if (docs == null) return;
5554 + const response = {};
5555 + for (var j in docs) { response[docs[j]._id.substring(2)] = docs[j].time; }
5556 + try { ws.send(JSON.stringify({ action: 'lastconnects', lastconnects: response, tag: command.tag })); } catch (ex) { }
5557 });
5558 });
5559 }
views/default.handlebars
+7 -3
@@ -1373,6 +1373,7 @@
1373 var checkedNodeids = {};
1374 var deskKeyboardShortcuts = [];
1375 var deskLastClipboardSent = null;
1376 + var requestedLastConnects = false;
1377
1378 // Console Message Display Timers
1379 var p11DeskConsoleMsgTimer = null;
@@ -1929,7 +1930,6 @@
1930 meshserver.send({ action: 'usergroups' });
1931 meshserver.send({ action: 'meshes' });
1932 meshserver.send({ action: 'nodes', id: '{{currentNode}}' });
1932 - meshserver.send({ action: 'lastseen' });
1933 meshserver.send({ action: 'loginTokens' });
1934 if (pluginHandler != null) { meshserver.send({ action: 'plugins' }); }
1935 if ('{{currentNode}}'.toLowerCase() == '') { meshserver.send({ action: 'files' }); }
@@ -2292,13 +2292,14 @@
2292 }
2293 break;
2294 }
2295 - case 'lastseen': {
2295 + case 'lastconnects': {
2296 var lcnodes = Object.keys(message.lastconnects);
2297 for (var i in lcnodes) {
2298 var lcnodeid = lcnodes[i];
2299 var node = getNodeFromId(lcnodeid);
2300 if (node != null) { node.lastconnect = message.lastconnects[lcnodeid] }
2301 }
2302 + mainUpdate(4);
2303 }
2304 case 'msg': {
2305 // Check if this is a message from a node
@@ -3984,7 +3985,10 @@
3985 if (deviceViewSettings.devsCols.indexOf('user') >= 0) { colums += '<th style=color:gray;width:120px>' + "User"; }
3986 if (deviceViewSettings.devsCols.indexOf('ip') >= 0) { colums += '<th style=color:gray;width:120px>' + "Address"; }
3987 if (deviceViewSettings.devsCols.indexOf('conn') >= 0) { colums += '<th style=color:gray;width:100px>' + "Connectivity"; }
3987 - if (deviceViewSettings.devsCols.indexOf('lastseen') >= 0) { colums += '<th style=color:gray;width:120px>' + "Last Seen"; }
3988 + if (deviceViewSettings.devsCols.indexOf('lastseen') >= 0) {
3989 + colums += '<th style=color:gray;width:120px>' + "Last Seen";
3990 + if (requestedLastConnects == false) { requestedLastConnects = true; meshserver.send({ action: 'lastconnects' }); }
3991 + }
3992
3993 // This height of 1 div at the end to fix a problem in Linux firefox browsers
3994 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>';