Early work on agent log indexing.

Ylian Saint-Hilaire committed Apr 17, 2021 at 16:04 UTC 86aafb21d30fa776199d48756c6525a014871ed1
1 file changed +35 -1
meshctrl.js
+35 -1
@@ -7,7 +7,7 @@ try { require('ws'); } catch (ex) { console.log('Missing module "ws", type "npm
7 var settings = {};
8 const crypto = require('crypto');
9 const args = require('minimist')(process.argv.slice(2));
10 -const possibleCommands = ['edituser', 'listusers', 'listusersessions', 'listdevicegroups', 'listdevices', 'listusersofdevicegroup', 'listevents', 'serverinfo', 'userinfo', 'adduser', 'removeuser', 'adddevicegroup', 'removedevicegroup', 'editdevicegroup', 'broadcast', 'showevents', 'addusertodevicegroup', 'removeuserfromdevicegroup', 'addusertodevice', 'removeuserfromdevice', 'sendinviteemail', 'generateinvitelink', 'config', 'movetodevicegroup', 'deviceinfo', 'addusergroup', 'listusergroups', 'removeusergroup', 'runcommand', 'shell', 'upload', 'download', 'deviceopenurl', 'devicemessage', 'devicetoast', 'addtousergroup', 'removefromusergroup', 'removeallusersfromusergroup', 'devicesharing', 'devicepower'];
10 +const possibleCommands = ['edituser', 'listusers', 'listusersessions', 'listdevicegroups', 'listdevices', 'listusersofdevicegroup', 'listevents', 'serverinfo', 'userinfo', 'adduser', 'removeuser', 'adddevicegroup', 'removedevicegroup', 'editdevicegroup', 'broadcast', 'showevents', 'addusertodevicegroup', 'removeuserfromdevicegroup', 'addusertodevice', 'removeuserfromdevice', 'sendinviteemail', 'generateinvitelink', 'config', 'movetodevicegroup', 'deviceinfo', 'addusergroup', 'listusergroups', 'removeusergroup', 'runcommand', 'shell', 'upload', 'download', 'deviceopenurl', 'devicemessage', 'devicetoast', 'addtousergroup', 'removefromusergroup', 'removeallusersfromusergroup', 'devicesharing', 'devicepower', 'indexagenterrorlog'];
11 if (args.proxy != null) { try { require('https-proxy-agent'); } catch (ex) { console.log('Missing module "https-proxy-agent", type "npm install https-proxy-agent" to install it.'); return; } }
12
13 if (args['_'].length == 0) {
@@ -75,6 +75,7 @@ if (args['_'].length == 0) {
75 var ok = false;
76 switch (settings.cmd) {
77 case 'config': { performConfigOperations(args); return; }
78 + case 'indexagenterrorlog': { indexAgentErrorLog(); return; }
79 case 'serverinfo': { ok = true; break; }
80 case 'userinfo': { ok = true; break; }
81 case 'listusers': { ok = true; break; }
@@ -2298,3 +2299,36 @@ function displayDeviceInfo(sysinfo, lastconnect, network, nodes) {
2299 }
2300 }
2301 }
2302 +
2303 +// Read the Mesh Agent error log and index it.
2304 +function indexAgentErrorLog() {
2305 + // Index the messages
2306 + const lines = require('fs').readFileSync('../meshcentral-data/agenterrorlogs.txt', { encoding: 'utf8', flag: 'r' }).split('\r\n');
2307 + var errorIndex = {}; // "msg" --> [ { lineNumber, elemenetNumber } ]
2308 + for (var i = 0; i < lines.length; i++) {
2309 + const line = lines[i];
2310 + if (line.length > 88) {
2311 + var nodeid = line.substring(0, 70);
2312 + var fetchTime = parseInt(line.substring(72, 85));
2313 + var data = JSON.parse(line.substring(87));
2314 + if ((data != null) && (data.action == 'errorlog') && (Array.isArray(data.log))) {
2315 + for (var j = 0; j < data.log.length; j++) {
2316 + var entry = data.log[j];
2317 + if ((entry != null) && (typeof entry.t == 'number') && (typeof entry.m == 'string')) {
2318 + const msg = entry.m;
2319 + if (errorIndex[msg] == null) { errorIndex[msg] = []; }
2320 + errorIndex[msg].push({ l: i, e: j });
2321 + }
2322 + }
2323 + }
2324 + }
2325 + }
2326 +
2327 + // Sort the messages by frequency
2328 + var errorIndexCount = []; // [ { m: "msg", c: count } ]
2329 + for (var i in errorIndex) { errorIndexCount.push({ m: i, c: errorIndex[i].length }); }
2330 + errorIndexCount = errorIndexCount.sort(function (a, b) { return b.c - a.c })
2331 +
2332 + // Display the results
2333 + for (var i = 0; i < errorIndexCount.length; i++) { if (errorIndexCount[i].c > 100) { console.log(errorIndexCount[i].c, errorIndexCount[i].m); } }
2334 +}