mirror of
https://github.com/Ylianst/MeshAgent
synced 2025-12-11 13:53:37 +00:00
Added Error Log parsing capability
This commit is contained in:
@@ -2261,6 +2261,9 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx)
|
||||
// Promise: This is very important, as it is used everywhere. Refer to /modules/promise.js to see a human readable version of promise.js
|
||||
duk_peval_string_noresult(ctx, "addCompressedModule('promise', Buffer.from('eJy9Gk1v2zj2bsD/gclhLE+9dqanRYwcsmmK9W6RDJJMO4MgMBiZtpVRJC8lxzU6/u/7HimKpEjKbhqMLrbIx/f9RVKjn7udi3y15cliWZL3J7/8k0yykqXkIuernNMyybNup9v5lMQsK9iMrLMZ46RcMnK+ojH8VDMD8pnxAqDJ++EJiRDguJo67o+7nW2+Js90S7K8JOuCAYakIPMkZYR9jdmqJElG4vx5lSY0ixnZJOVSUKlwDLudPyoM+WNJAZgC+Are5iYYoSVyS+BZluXqdDTabDZDKjgd5nwxSiVcMfo0ubi8ur38B3CLK37LUlYUhLP/rRMOYj5uCV0BMzF9BBZTuiE5J3TBGcyVOTK74UmZZIsBKfJ5uaGcdTuzpCh58rguLT0p1kBeEwA0RTNyfH5LJrfH5F/nt5PbQbfzZXL37+vf7siX85ub86u7yeUtub4hF9dXHyZ3k+srePtIzq/+IP+dXH0YEAZaAirs64oj98BighpkM1DXLWMW+Xku2SlWLE7mSQxCZYs1XTCyyF8Yz0AWsmL8OSnQigUwN+t20uQ5KYUTFK5EQOTnESrvhXLQ3PxO6OqMfNuNcXS+zmJcSRasvMnz8leeA3IW5Y9P/W7nm7TSZgkugEPDFagwU0B9OVsB4QMggNoBHEuInfzhrFzzjAgSMLOz2GAvsGxagGeBM/DpkqUgbjRjBRp8GtM0ZeDFJeXA7wDVBUadaU7RYYfT68cnFpeTD8BLz0bYGxtwSBRAatr4J3KFQsUBvQJA7x/GejyZkwiXDCsuyNEZydZp2iffBPxwtS6WFkR/rHSADwxGiDtBR4UF62fgtOhrAIMHfDTOGvg+eegbHBnIlZIFeamuIcbKVo5UCh0IpH2FY9fUjoID0W0TOICSBMDJP8680tGZspkDUbB0juthQHpFwCcCzqB9QImesc13uVM/5I0Vx7CwyNc8ZuBemFDw7xV9rteLYfkXhzVD9aphnkXmOtLGpIMUETCIdItIXygPHEs8Tf5VNK/k70cEbYmVCswKkmpMW0YvTaAG8YymmE1Ijei0xjNUAL0BqYZOxdKBCLVTYrA1kHWFQdI9JXOaYq1inOe8qF9rgHPw2VOIxQFRBC7ydVaekpMBma5XpyIKa2euqkUkM0HR6w8v8c8laBIWD9EHIlseFQ5SIoiBeZIxUCVYpdxGUoBjK8EdD4JRC4Y61SkmwuSgHFRSXa8wLQzsVYW96oWma9a3QRp0VEYSoCoVkZ9+IooKOavSk7vOgwqf0Yh8gWLNGfQDJM2zBVQWqIbQcyxp5l+CHNjKHIIQdI19y1GQfgsP+MQpo3zy/MxmCS1ZCL+ZCJtPiCXJUWDhzh32DGn1EqH6BjJjxa4vKq5qfRo8QWroQTL4BM0Hy6BQDQzzC8+VKUP8vQCffaTxn26tGo1i6ALylA3TfNFEaKDpydga9cg7yYh8h7eejjM9Ww+ZShYNhVahXRhrWuh2PWh88vSFzXrokEcmQeWgmkIwkpCWJX5V0GRA2lgwRTQdIplH/OjM44Ie15MsQoqYymD9jKaNtBwDwpvoTUvv0wbmlUobkS2SzqlVBP/1FwlDiMzYD6tMmAhds9HdmZm9KQdfGV7JvtYpvuSOc9fRvifGPQr2xXRbJNtkvHG7c5mzZPlhJr3YfMz6ye5j+nu85pUh9Nrw2bUxBrWqTE2+foiRe19Hu+t7G49hFY/c7OKnatDTyiPz9fxwii2nwW1dmq02vQlfab0KvnEYsEbsBk8Q9NyzzzD3HzoDNXci3oylXSWcyvqeeGhYq5VduSXZS6UZJ/R1Sw3DMFB/kGXcSIvdFQ3trjyLDpRVb7/ogy/8fRs1F3IXDC+xPmXZolxigL1HK+LY/S8Psn4Js25XLJ9H1XhfRGIuGtaeAW/290aD314xVtytGE21BIpHTfb3208fAUtjWQC6XLIsMgMY3eCmsn+032aCacqfW0JEPdovgtvuFkL4CEKOeROvJwT7RVSP8Hkj98nRgSTgeEtjg+BqS1aH6IBtgsGC2qlNp/EySWe/qlcoNpFj3N1rAtFJn1roxlR1GDHevz6qa46vVoRKBSoob5YKORguFXL+8FJhwdelwk3/frzfAXpApaj6BRNif1p0zRemvz/J7U+FVtejthRu8rGY8CQfNFfEvZ2rbqRD87KNxrTJvY3bvvroX4WbeN086t0c7ZO9IQoSxqwoKm9XOC/FITwggf1HfciiJmUGgMlTgvu2/9xeXw3xIDtbJPMtEHUzirb//UnYJo5TWwFsTrkB7FvrBu+eiDV2PCo6DPiYlvHSCGqhaP8hLi/9OyGTY2dXHotWpAqlQfMsUp9mqYO4SiSDw3kCmNKtmXgCTHqJK20dTttUJ5ZWi7KqjrCDraTy5z4Fh6kuoJR6L+xlrEagTih3TQIWeU8gvMoWNVpLJ4ZN3KfhJaz8LHwNj2aVmxj6G5AnrROgBpBPY7s2ShT2HYg+QPX07VrIA/ZOoxG5w3s5dTK7oQWhKWd0tiXaukVOAE9BQDXxn0gJ74SWNJuljFe1C+oNVVg85wYvFctm0mzp0j2nLS+HHrcI4P29agsGofaXkMoD0C0uXZnQ3WqGjhm96GpX9aCTye3ArtFusfbpIcQ7KPkAeo1Xl3SwpXwjde6L+4OV6d9itbarbybImwhhcC3xWW06+LfEYqcecbcgJ8yS0HqAIuuzE/B7CnNgkSbGt05tMe589N3LIMSXZ8LWUqUh0QVEnhvpZgILdOShLHw4pOrH2UMYWLY/ZgVraT0CvZLSLaTMoz21w7oXILf0heEHAAwyZMzkJxlQReSZgelA8hOB+wby6ZIWy4t8xqL+Q8hPgn6vexj7JmzGkN8mTYOSUVgrS7deytUaOB6Y0jfv4MKNvHUz51Fs4GhSWEVtnivfNbuuaijSl6/f0WnUGvB9iFBv6LzHGYZ47V8P6E8z/Nmtavib83bH7+YezDtaLWg4Wys4go7w9+jkLdRRZb4fVwekPlMXmAmr1Ig3do6jhDXCZNMbSn31FkxUiycnUuvzFTFfuPMGVwBivLmgszxjnoNxVbrwkh6mT8ZG5PgsZuuhIZUxCQZrHB22hDZmwHWMm2qnT333DhSsGRRV1Ra8Oo3d38jKlZUePDdmGkb3ZE1ibV2MmUDB11rF/UiTdM2ZI+6RZvJtBarO0pCvFhEaMYZ7IFfTaIUT1/gN1XmU1vjGDH5V4HU7z/lsnbIh+7rKeYkZQ3+eZk8N7Z2luneuB0IL6g+F6hX1yPj/S0YAbA==', 'base64'));");
|
||||
|
||||
// util-agentlog, used to parse agent error logs. Refer to modules/util-agentlog.js
|
||||
duk_peval_string_noresult(ctx, "addCompressedModule('util-agentlog', Buffer.from('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', 'base64'));");
|
||||
|
||||
// util-pathHelper, used to settings/config by the agent. Refer to /modules/util-pathHelper for details.
|
||||
duk_peval_string_noresult(ctx, "addCompressedModule('util-pathHelper', Buffer.from('eJy1VFFP2zAQfo+U/3DrA0lZSEu3J1A1dYVp0VA70bIKiRc3uaQeqe3ZDqFC++87N8kAMWli0vIQK77Pd9/33TmDQ9+bSrXTvNhYGA1HQ0iExRKmUiupmeVS+J7vXfAUhcEMKpGhBrtBmCiW0tJGIviG2hAaRvEQQgfotaFe/9T3drKCLduBkBYqg5SBG8h5iYD3KSoLXEAqt6rkTKQINbebfZU2R+x7120GubaMwIzgir7ypzBg1rEFejbWqpPBoK7rmO2ZxlIXg7LBmcFFMj2fLc6PiK07cSVKNAY0/qi4JpnrHTBFZFK2Joolq0FqYIVGilnpyNaaWy6KCIzMbc00+l7GjdV8XdlnPnXUSO9TADnFBPQmC0gWPfg4WSSLyPdWyfLz/GoJq8nl5WS2TM4XML+E6Xx2liyT+Yy+PsFkdg1fktlZBEguURW8V9qxJ4rcOYgZ2bVAfFY+lw0dozDlOU9JlCgqViAU8g61IC2gUG+5cV00RC7zvZJvud0PgXmpiIocDpx5eSVSh6H23OJXZjehotdxBG4ZRa7f09VZ3/cemtbwHMJmD96MQVRlCQcHjygHaZHuuWNUVd5SRRiD0jIlqXFaZ2E/NiTWht2eKpkllVsYjyGouXg3CuADBDc3AZxAMAjcGHZJm4Sxkir803ZlWg2vLdFkfJpyn4aYt6m/Sy5ezfhnN9TOub2psbFMW7OiAQiDOOi/tK2DHsdWXsga9ZQZJM9QZN0xvEc6CQ+/ObaSq7UbU1GEw6jdKlEUdCGP4H3/1LF5Lu5tc3L0yNYtWBr8SzP/xeHXN3H0H9rhFo220qJ12cX2bdrKrCqRvKXfp3Uqu0tx6qK+9wtCYKEt', 'base64'));");
|
||||
|
||||
|
||||
@@ -1589,8 +1589,8 @@ int ILibIsRunningOnChainThread(void* chain);
|
||||
char* ILib_POSIX_InstallCrashHandler(char *exename);
|
||||
#endif
|
||||
|
||||
#define ILIBCRITICALEXITMSG(code, msg) {printf("%s", ILibCriticalLog(msg, NULL, 0, 0, 0)); exit(code);}
|
||||
#define ILIBLOGMESSSAGE(msg) ILibCriticalLog(msg, NULL, 0, 0, 0)
|
||||
#define ILIBCRITICALEXITMSG(code, msg) {printf("%s", ILibCriticalLog(msg, __FILE__, __LINE__, 0, 0)); exit(code);}
|
||||
#define ILIBLOGMESSSAGE(msg) ILibCriticalLog(msg, __FILE__, __LINE__, 0, 0)
|
||||
void ILIBLOGMESSAGEX(char *format, ...);
|
||||
|
||||
#if defined(WIN32)
|
||||
|
||||
179
modules/util-agentlog.js
Normal file
179
modules/util-agentlog.js
Normal file
@@ -0,0 +1,179 @@
|
||||
/*
|
||||
Copyright 2021 Intel Corporation
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
function parseLine(entry)
|
||||
{
|
||||
var test = entry.match(/^\[.*M\]/);
|
||||
if (test == null)
|
||||
{
|
||||
test = entry.match(/\[.+ => .+:[0-9]+\]/);
|
||||
if (test != null)
|
||||
{
|
||||
// Windows Crash Entry
|
||||
var file = test[0].substring(1).match(/(?!.+ ).+(?=:)/);
|
||||
var line = test[0].match(/(?!:)[0-9]+(?=\]$)/);
|
||||
var fn = test[0].match(/(?!\[).+(?= =>)/);
|
||||
|
||||
if (file != null) { this.results.peek().f = file[0].trim(); }
|
||||
if (line != null) { this.results.peek().l = line[0]; }
|
||||
if (fn != null) { this.results.peek().fn = fn[0]; }
|
||||
}
|
||||
else
|
||||
{
|
||||
test = entry.match(/^[\.\/].+\(\) \[0x[0-9a-fA-F]+\]$/);
|
||||
if (test != null)
|
||||
{
|
||||
// Linux Crash Stack with no symbols
|
||||
test = test[0].match(/(?!\[)0x[0-9a-fA-F]+(?=\]$)/);
|
||||
if (test != null)
|
||||
{
|
||||
if (this.results.peek().sx == null) { this.results.peek().sx = []; }
|
||||
this.results.peek().sx.unshift(test[0]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
test = entry.match(/^\[.+_[0-9a-fA-F]{16}\]$/);
|
||||
if(test!=null)
|
||||
{
|
||||
// Linux Crash ID
|
||||
test = test[0].match(/(?!_)[0-9a-fA-F]{16}(?=\]$)/);
|
||||
this.results.peek().h = test[0];
|
||||
}
|
||||
}
|
||||
|
||||
test = entry.match(/(?!^=>)\/+.+:[0-9]+$/);
|
||||
if(test!=null)
|
||||
{
|
||||
// Linux Crash Entry
|
||||
if (this.results.peek().s == null) { this.results.peek().s = []; }
|
||||
this.results.peek().s.unshift(test[0]);
|
||||
}
|
||||
|
||||
}
|
||||
return;
|
||||
}
|
||||
test = test[0];
|
||||
|
||||
var dd = test.substring(1, test.length -1);
|
||||
var c = dd.split(' ');
|
||||
var t = c[1].split(':');
|
||||
if (c[2] == 'PM') { t[0] = parseInt(t[0]) + 12; if (t[0] == 24) { t[0] = 0; } }
|
||||
|
||||
var d = Date.parse(c[0] + 'T' + t.join(':'));
|
||||
var msg = entry.substring(test.length).trim();
|
||||
var hash = msg.match(/^\[[0-9a-fA-F]{16}\]/);
|
||||
if (hash != null)
|
||||
{
|
||||
hash = hash[0].substring(1, hash[0].length - 1);
|
||||
msg = msg.substring(hash.length + 2).trim();
|
||||
}
|
||||
else
|
||||
{
|
||||
hash = msg.match(/^\[\]/);
|
||||
if(hash!=null)
|
||||
{
|
||||
msg = msg.substring(2).trim();
|
||||
hash = null;
|
||||
}
|
||||
}
|
||||
|
||||
var log = { t: Math.floor(d / 1000), m: msg };
|
||||
if (hash != null) { log.h = hash; }
|
||||
|
||||
// Check for File/Line in generic log entry
|
||||
test = msg.match(/^.+:[0-9]+ \([0-9]+,[0-9]+\)/);
|
||||
if (test != null)
|
||||
{
|
||||
log.m = log.m.substring(test[0].length).trim();
|
||||
log.f = test[0].match(/^.+(?=:[0-9]+)/)[0];
|
||||
log.l = test[0].match(/(?!:)[0-9]+(?= \([0-9]+,[0-9]+\)$)/)[0];
|
||||
}
|
||||
|
||||
this.results.push(log);
|
||||
}
|
||||
|
||||
function readLog_data(buffer)
|
||||
{
|
||||
var lines = buffer.toString().split('\n');
|
||||
while(lines.length > 0)
|
||||
{
|
||||
parseLine.call(this, lines.shift());
|
||||
}
|
||||
}
|
||||
|
||||
function readLogEx(path)
|
||||
{
|
||||
var ret = [];
|
||||
try
|
||||
{
|
||||
var s = require('fs').createReadStream(path);
|
||||
s.results = ret;
|
||||
s.on('data', readLog_data);
|
||||
s.resume();
|
||||
s.removeAllListeners('data');
|
||||
s = null;
|
||||
}
|
||||
catch(z)
|
||||
{
|
||||
}
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
||||
function readLog(criteria, path)
|
||||
{
|
||||
var objects = readLogEx(path == null ? (process.execPath.split('.exe').join('') + '.log') : path);
|
||||
var ret = [];
|
||||
|
||||
if (typeof (criteria) == 'string')
|
||||
{
|
||||
try
|
||||
{
|
||||
var dstring = Date.parse(criteria);
|
||||
criteria = Math.floor(dstring / 1000);
|
||||
}
|
||||
catch(z)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof (criteria) == 'number')
|
||||
{
|
||||
if(criteria < 1000)
|
||||
{
|
||||
// Return the last xxx entries
|
||||
ret = objects.slice(objects.length - ((criteria > objects.length) ? objects.length : criteria));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Return entries that are newer than xxx
|
||||
var i;
|
||||
for (i = 0; i < objects.length && objects[i].t <= criteria; ++i) { }
|
||||
ret = objects.slice(i);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = objects;
|
||||
}
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
||||
module.exports = { read: readLog, readEx: readLogEx }
|
||||
|
||||
Reference in New Issue
Block a user