diff --git a/.gitignore b/.gitignore index 4850f9e3..d6b05e00 100644 --- a/.gitignore +++ b/.gitignore @@ -329,3 +329,5 @@ ASALocalRun/ # Klocwork .klocwork/ + +*.o \ No newline at end of file diff --git a/microscript/ILibDuktape_Commit.h b/microscript/ILibDuktape_Commit.h index dd36bb64..9067faeb 100644 --- a/microscript/ILibDuktape_Commit.h +++ b/microscript/ILibDuktape_Commit.h @@ -1,3 +1,3 @@ // This file is auto-generated, any edits may be overwritten -#define SOURCE_COMMIT_DATE "2023-Apr-14 13:29:41-0700" -#define SOURCE_COMMIT_HASH "ca52306f87407a122fac70723bfa025b9c422ae6" +#define SOURCE_COMMIT_DATE "2024-Nov-3 15:40:18+0000" +#define SOURCE_COMMIT_HASH "435bccd1eb335b2d54ad2057d8c40a477201df51" diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 90d3478b..0167c2e8 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2658,7 +2658,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addCompressedModule('file-search', Buffer.from('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', 'base64'));"); // identifer: Refer to modules/identifers.js - duk_peval_string_noresult(ctx, "addCompressedModule('identifiers', Buffer.from('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', 'base64'), '2022-10-27T00:44:49.000-07:00');"); + duk_peval_string_noresult(ctx, "addCompressedModule('identifiers', Buffer.from('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', 'base64'), '2022-10-27T08:44:49.000+01:00');"); // zip-reader, refer to modules/zip-reader.js duk_peval_string_noresult(ctx, "addCompressedModule('zip-reader', Buffer.from('eJzVG+9T4zb2OzP8D9q9mcbphhASlrbkuB5LwpUpCzuEvZ3eltlxHJkYHNtnywXKcH/7vSfJtizLdljaD02nmyBL7z293+9J3v52c+MojB5i73rJyHAwHJCTgFGfHIVxFMY288Jgc2Nz49RzaJDQBUmDBY0JW1JyGNkOfMknPfJvGicwmwz7A2LhhNfy0evueHPjIUzJyn4gQchImlCA4CXE9XxK6L1DI0a8gDjhKvI9O3AoufPYkmORMPqbG79ICOGc2TDZhukR/OWq04jNkFoCnyVj0f729t3dXd/mlPbD+HrbF/OS7dOTo+nZbLoF1OKKj4FPk4TE9L+pF8M25w/EjoAYx54Dib59R8KY2NcxhWcsRGLvYo95wXWPJKHL7uyYbm4svITF3jxlJT5lpMF+1QnAKTsgrw9n5GT2mrw7nJ3Mepsbn04ufzr/eEk+HV5cHJ5dnkxn5PyCHJ2fTU4uT87P4K9jcnj2C/n55GzSIxS4BFjofRQj9UCihxykC2DXjNISejcU5CQRdTzXc2BTwXVqX1NyHf5G4wD2QiIar7wEpZgAcYvNDd9beYwrQVLdESD5dntz4zc7JtPzo8kFOSA7A/xv+HZvLMbF6Gi0N/phuPu9HDw9xsG970bD3e/eDsfIfhyO4hCQU3gkpWB15FCnK1cu0sin9+oM4Ce1V51uf8IfcWBuGjhIMgGhO7fHoQ90f7DZ0lrQhHU3Nx6FgngusQCBA5zrR77NgEErcnBAOndeMBp2umKWnIwfXA648aufAJuZ1dkGzDehF1idX3/lVOK8J/FF/YSuAwNXSiDbOgzcNAtvgdvlRQ10kx8JgiT7RAFXQJvbnMUCaD9Zei6zsll3S7BHSz7yaXANNvgPslPlBAfy5oBY6xNC3mg4M6RCFNarXKRuAvyg92AqyewhcCxE1u0WkxU68FNet7pdeHGxTMHxlDP2SVERes9i22Fn8G1Fmm70IxoswCwyVsDWBl3ySKJ+EqaxQ/uOHyYUuAcjX8AA8VdMWRoHY1V+AcAGjhfgojDKWc61WuhE1EeShboCt57FWsQx/uuotQP+JPRp3wvccMfqTIUQgDewIdgNt1O5gsUPFWxGu9Yw2MxZWrS624rw1EcgxRurpDVSnjls8QNmCsfDxSYBXlM244MWSiMDAlPDlEUpU70WV1UH5jL6CcIIletwHz1QMNe3rxNgxd28Q54qgPqBvUITVmRePCucaFR5FoIo+K47PZIbgFVlEWoQhucMWLZZoNghrw5I6VnGzdgRa5C4Bmstw0V2d44ujsgRSpS4NvifRUflf0UGioy5Nir2q8LO1UFhn9xF5EXUyrmCz59KUeN3L4ro4nx+Qx2AifG/8AscxRfx7GQCXO7A7C0AC6rYVxd2xuoCDgW9Ln7LJxiPLTT/m3tMJzJEGs/E+uNJtvjzzf1V310ozJgD9tuy8gsS+gvqegH9EIcQ1tkDZ0+PdDDnSkADFCSguftVjTBID8kFaQAxn6/G1UeeNgZbtDy+uYIL3fIUDYEUdz9Kk6WlrPrsXQnN0jA8mTSFWPBtcv1dVSiozAfFrlGBOYaKCDKgKjk48wpB5Hqmgs49gYpAcQ9GNJyB4A/JAalgKoVKYr3CeRiJ2DIO74jVwaTaDSFBA9spvJQisbE6hiAQQh/zbUwckTwe3GoFrznssxDqg3ztK5PFcgd1JzM2q1XomE1TVQmdZRrcgp/yQRO61fkGEAY6P9hJsn25jFMRVzjMLJq/gaH5AwNb0KnPPoqawL+jYUZTNl63DrIZIUHU4vOfDdQ37CBHLFdn6sAtghNQh1agJuvgbsGPH854qwlXQSmfiwJPfb9hwVP9oyKp+ApSy0Tw7+dTUTNcT1i7/ES6N7GZvab01t+IgdqnXnUM/L/tq1b1THNaU53aWMF3j8rRtPlmhfvjxQPSgSocrCtO6cu4jOFfZXLi/a6HuQaKdGOvJ4eXZ7lAFO3KS7UB+eabssRK7qO6MqvFuvW+7KUakHvDOt1bA0bBp0xLyF/FL9EVFkOL2PaC2kDTQETNsEExtcTIEJL789R1afw+XGAuumOYoOqGKckTczLFcm3gjmlGZlq1ExoEg89FzB0YnkR2qhVtai1QElalTVCqwLLUhy628haSKMgmNHsG2esj+fTu5HK2T7Z23pZ5quDlW5KpG36NtUfoH2ZecKtmg/mgReO4JxKRCxiCn1xI66ViQ6uDcHhyk4MoMhvyeXpxIVIfwILjV5D456j7CfXd/hc+9ZS6TFeZ2olk66BA17yI53WW2FM/we6rNVC22zVUojX7xs/2NpmEASWfit4r9768K8n7LHM/dG6rC3MnVOxBS3gbsOpch8Rycn42JbgB7JpeYis7BrWJq7WrQjkkze/DmBI0roZQAMZjjIIGT2D2TjU7AApy9OQy5NS37xU07AJshibI7wKAUCqNpT2tPK7jRbkNgvKTwuFFibvAFojQmP0MBf+rR0Sg29cRQ+TbHfywR34UX9XnpqhdYnqutWtwvuwG6oydqz/3OEyfAipq+z/xnkHFLWjPXuQddjK7Q5o+ngRsNDydWoMuqv7p8YW+VU3F/0UDGts++ZDGUZhQcuzbsj2nQd3ZA6h7lQxCA6fUi+Q9ZctwUQ/s+zZgx5AInWEX7FQqRB2kYStdvPfYDqdKki4q6SS5DoM48/iC7a0DHSiXxM5ut1SXG6hTbI+FMtFEGq0a7PUm0bagqxXEevSsmGzT/sGG1/ZLmaXXEShM37w28wd/ODdq8IEheGintQD47kPXTSDbeENGg3q1rFc0U9FRh8/ktiouybTU6JnCAMKzzFVrArOpnasGVaJ48sIGZlARjY0rOQtg2TvBC9sHYi0UUovZnuKeiNgU+acSjRQJtIAgW//Iu1iQriKN2NCtxrVqKr1+/CrtazSAfKfQoQrBKGgxqImsJN7q8USp4VnqRMr2+KHvq1GmGOVHDuIkxXwO0H6SZNAK3qMsIAPDHT+Fv63OPp4KYeeyeIpHFRKJcwepjzz/EQ/HavBdN9XX0SfMjlnyyWNLfhT1AvTFH3q7u+iMY9dTHkJYhQmBkvVgwo3o2oqMI+FGmIzzgRs+cDMuyxi3o+wG8kOxl7XPBysbVnmTzvFKQnCNabkyLlsKW2SnO9ZrHXHkI21dcyHKEaaKR5sly0y9xORHIsWBAT+paDr4ZcWRat7e4Is+e1daraaojnJipJ0TtFnTl8JwRCs/GZaSt+pjFNKq1rJWgtrS+XLtdiF/d73AS5ZUS9s5IH7+zH/Bj9Rnie60RNO6cuZZbNtc26ogBZcfCR5J7BOFfn6gXVba8jpKb61uPz8yLR+SWKa5+mFPPby+MDucsN58PAZdQA1TCnHO2gX35PDyUB4nSMHp/Cx6ZhAFUKq89dla3CpLsrABqB2bWZ+dKx2HVpNUK8HnIcgf9UgjrjVlzHkMprlmFqFxeBos8FqXk8YxDRjJ+jMmhUYfoFGQpxT5nuoW/m4yaCt7bIy5NcFVLjbHWPnQcND+JwYN3B83zowR/A9tguSc7oY5b6ruvc4FPtuLYsZ02lADG54318HmU1QTnL7szxULjHkl1pfkgnd0MEss6R5iQGaihzqVjttY3g1LOayefBLykgK7Cg3KzK3REO1GLT7JIm/W1FSgLVC/umqvhyVz7Qaq2iB9VHfYDGs4bIF1aieMvA8XeCWSX3Qkl97KDJDvcmfwbIATmzUBbKNQdCiOPeovntunMFQqbTVKWbW7WJIUDomC4cHfa98TgBFuSmd2xlK3z8KZSDgrHZWvoBakoVE4BBLhf3fYHnAbVZS3SWf2KvIzyocF6Z0lve9U6H9qDxlGnyTrccXdyhhUmqq6SO3Ry26U1BNWd6bxbDFpha+x5DUQoLJQYQzPYkt3d0Raa0yz8wtUryp5WKWeKN3OQ5j8ImkGwZiAiKtZhnOs8sUvbUJxF7WEmP4G+Q4in+KP6cpjDHM04CEnonR9CTOs/5XzqyxLyK+lPlUvt3FxRTZbFnfa/qQshDP/IaIh1jqIkNenotg03ELlRXvtHWAOoLkUFJcJubtRr0OZSh3TBTG9Z0aDyoXNhNmsoKaflJta4mBzUVkVQo2ar+rpWgYuiNkg9P75l4vJ+dnpL+vctlUoRKCyDDHS8kjy4xhwY24i0+MJTZzYi1gYd3q5yQoCCzMd5L4rV1QA6yxKrgj/flZ2lpnEo9qnlFcbZEgr7jM095hMAb+Lhn40uUBtRdryRukNXgeLwXFM4xi2Xb2rrRLZlNxlgXZcXUbdxkXgBg2LIJdpXjU0rZKXgEsnq7t7PbK7h9fBiwCuxNsaKKIgbAVk3C76AV0MMhkk35DhYPd7bvb4o+2o4whcHqbDE7AOBxTzQSbg+xUjrsZt+epRfV6023YMBCPvvcBbpasXnHERc1KfvOCkC0amxzN5hu9WujrV2UWqZbov21Q3fHxG3bAOK56Tpa8jn7Xrh+FgDWg8UDw7+R9+PeSWKmAdDuCbeXEA2nXI5GtkDao1WkdGUFusBZHzdbSOtpYOZmxWD223ysv1PDwoH/p4/fKGqeFV5LvkoPq4ZlX2EW1O/Lfh9kD5jGu/Th8bIKjlegOM3SYYIpc2rwQ+N6x0oaBXwqTx4FbfK/e0NbVx0/LYMVMIAjWvetL0QwvUeadPi12luMX9Zv4zj7W12V8pZ0gsTIkNL4ToxZ249hbquREfeVZ2JK4Rae0mrxQ75SkJRtUx8cjfSSlrGpM3b7zmtMkSSHTGlZOvLeJ1u3pqBaGcv+n57Nr6GLNxMsODOAw106NJ1l5D9+ApV9ZcqD8IFR1g7EUYb1Rp0LfqPussJpBxJLfkb8JTCda0JQ9GMGfpag7qCHTXpTIJvvTLX3xeeIlTj7DqZ40IL0MGSIJ2tPWYdqqh0oiKH46bUBhBC6se6ldKWrHU8y1Zhqm/IHN8wTv3drWYReSrIjTdYuEmWni/ug5GzQ5LbY0aWvj1DRUN/DKxQ32RK/uYjp9LPieDWrrPUXgj07MKD2S12NBkG2j7lOXnFoFHuL0CYbcgAWqrrM4u9yC85D9epDUh0C+1Vtvg60b8DdysjOcXjLult23bK/BOPM/Vkb9/l/CMTb+Dok4p7tbqsPkFHISN/BOQkI+lIrprZH3RYHIXhbrypKfAdkB28Uq/APx5cMXPiO/fDpTBHTm4+04ZHMrBwUgZHGWDuw0vucVp8e6kKsqc2VKaq3CRgu3S+yiM+RHSo7yeFvMYx2W8L75AY/8P7szMwA==', 'base64'), '2022-02-01T20:15:31.000-08:00');"); diff --git a/modules/identifiers.js b/modules/identifiers.js index 8c21c12b..d7b0a5e2 100644 --- a/modules/identifiers.js +++ b/modules/identifiers.js @@ -560,32 +560,34 @@ function macos_identifiers() function win_chassisType() { - var child = require('child_process').execFile(process.env['windir'] + '\\System32\\wbem\\wmic.exe', ['wmic', 'SystemEnclosure', 'get', 'ChassisTypes']); + // needs to be replaced with win-wmi but due to bug in win-wmi it doesnt handle arrays correctly + var child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['powershell', '-noprofile', '-nologo', '-command', '-'], {}); + if (child == null) { return ([]); } + child.descriptorMetadata = 'process-manager'; child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); + child.stdin.write('Get-CimInstance Win32_SystemEnclosure| Select-Object -ExpandProperty ChassisTypes\r\n'); + child.stdin.write('exit\r\n'); child.waitExit(); - - try - { - var tok = child.stdout.str.split('{')[1].split('}')[0]; - var val = tok.split(',')[0]; - return (parseInt(val)); - } - catch (e) - { + try { + return (parseInt(child.stdout.str)); + } catch (e) { return (2); // unknown } } function win_systemType() { - var CSV = '/FORMAT:"' + require('util-language').wmicXslPath + 'csv"'; - var child = require('child_process').execFile(process.env['windir'] + '\\System32\\wbem\\wmic.exe', ['wmic', 'ComputerSystem', 'get', 'PCSystemType', CSV]); - child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); - child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); - child.waitExit(); - - return (parseInt(child.stdout.str.trim().split(',').pop())); + try { + var tokens = require('win-wmi').query('ROOT\\CIMV2', 'SELECT PCSystemType FROM Win32_ComputerSystem', ['PCSystemType']); + if (tokens[0]) { + return (parseInt(tokens[0]['PCSystemType'])); + } else { + return (parseInt(1)); // default is desktop + } + } catch (ex) { + return (parseInt(1)); // default is desktop + } } function win_formFactor(chassistype) diff --git a/modules/sysinfo.js b/modules/sysinfo.js deleted file mode 100644 index d987e18a..00000000 --- a/modules/sysinfo.js +++ /dev/null @@ -1,343 +0,0 @@ -/* -Copyright 2019-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. -*/ - - -// -// sysinfo is a helper module used to query various system metrics in a platform agnostic fashion -// - - -var PDH_FMT_LONG = 0x00000100; -var PDH_FMT_DOUBLE = 0x00000200; - -var promise = require('promise'); -if (process.platform == 'win32') -{ - var GM = require('_GenericMarshal'); - GM.kernel32 = GM.CreateNativeProxy('kernel32.dll'); - GM.kernel32.CreateMethod('GlobalMemoryStatusEx'); // https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-globalmemorystatusex - - GM.pdh = GM.CreateNativeProxy('pdh.dll'); - GM.pdh.CreateMethod('PdhAddEnglishCounterA'); // https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhaddenglishcountera - GM.pdh.CreateMethod('PdhCloseQuery'); // https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhclosequery - GM.pdh.CreateMethod('PdhCollectQueryData'); // https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhcollectquerydata - GM.pdh.CreateMethod('PdhGetFormattedCounterValue'); // https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhgetformattedcountervalue - GM.pdh.CreateMethod('PdhGetFormattedCounterArrayA'); // https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhgetformattedcounterarraya - GM.pdh.CreateMethod('PdhOpenQueryA'); // https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhopenquerya - GM.pdh.CreateMethod('PdhRemoveCounter'); // https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhremovecounter -} - -// -// Windows Implementation for fetching CPU utilization -// -function windows_cpuUtilization() -{ - var p = new promise(function (res, rej) { this._res = res; this._rej = rej; }); - p.counter = GM.CreateVariable(16); - p.cpu = GM.CreatePointer(); - p.cpuTotal = GM.CreatePointer(); - var err = 0; - if ((err = GM.pdh.PdhOpenQueryA(0, 0, p.cpu).Val) != 0) { p._rej(err); return; } - - // This gets the CPU Utilization for each proc - if ((err = GM.pdh.PdhAddEnglishCounterA(p.cpu.Deref(), GM.CreateVariable('\\Processor(*)\\% Processor Time'), 0, p.cpuTotal).Val) != 0) { p._rej(err); return; } - - if ((err = GM.pdh.PdhCollectQueryData(p.cpu.Deref()).Val != 0)) { p._rej(err); return; } - p._timeout = setTimeout(function (po) - { - // Query in 100ms - - var u = { cpus: [] }; - var bufSize = GM.CreateVariable(4); - var itemCount = GM.CreateVariable(4); - var buffer, szName, item; - var e; - if ((e = GM.pdh.PdhCollectQueryData(po.cpu.Deref()).Val != 0)) { po._rej(e); return; /* Reject Promise if this fails */ } - - if ((e = GM.pdh.PdhGetFormattedCounterArrayA(po.cpuTotal.Deref(), PDH_FMT_DOUBLE, bufSize, itemCount, 0).Val) == -2147481646) - { - buffer = GM.CreateVariable(bufSize.toBuffer().readUInt32LE()); - } - else - { - // Reject Promise if this failed - po._rej(e); - return; - } - if ((e = GM.pdh.PdhGetFormattedCounterArrayA(po.cpuTotal.Deref(), PDH_FMT_DOUBLE, bufSize, itemCount, buffer).Val) != 0) { po._rej(e); return; /* reject promise on failuer */ } - for(var i=0;i 0) - { - var usage = lines[0].split(':')[1]; - var bdown = usage.split(','); - - var tot = parseFloat(bdown[0].split('%')[0].trim()) + parseFloat(bdown[1].split('%')[0].trim()); - ret._res({total: tot, cpus: []}); - } - else - { - ret._rej('parse error'); - } - - return (ret); -} - -// -// macOS Memory Utilization, using system utility 'top' -// -function macos_memUtilization() -{ - var mem = { }; - var ret = new promise(function (res, rej) { this._res = res; this._rej = rej; }); - var child = require('child_process').execFile('/bin/sh', ['sh']); - child.stdout.str = ''; - child.stdout.on('data', function (chunk) { this.str += chunk.toString(); }); - child.stdin.write('top -l 1 | grep -E "^Phys"\nexit\n'); - child.waitExit(); - - var lines = child.stdout.str.split('\n'); - if (lines[0].length > 0) - { - var usage = lines[0].split(':')[1]; - var bdown = usage.split(','); - - mem.MemTotal = parseInt(bdown[0].trim().split(' ')[0]); - mem.MemFree = parseInt(bdown[1].trim().split(' ')[0]); - mem.percentFree = ((mem.MemFree / mem.MemTotal) * 100);//.toFixed(2); - mem.percentConsumed = (((mem.MemTotal - mem.MemFree) / mem.MemTotal) * 100);//.toFixed(2); - return (mem); - } - else - { - throw ('Parse Error'); - } -} - -// -// Windows Implementation of fetching system thermals, using WMI and system utility 'wmic' -// -function windows_thermals() -{ - var ret = []; - child = require('child_process').execFile(process.env['windir'] + '\\System32\\wbem\\wmic.exe', ['wmic', '/namespace:\\\\root\\wmi', 'PATH', 'MSAcpi_ThermalZoneTemperature', 'get', 'CurrentTemperature']); - child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); - child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); - child.waitExit(); - - if(child.stdout.str.trim!='') - { - var lines = child.stdout.str.trim().split('\r\n'); - for (var i = 1; i < lines.length; ++i) - { - if (lines[i].trim() != '') { ret.push(((parseFloat(lines[i]) / 10) - 273.15).toFixed(2)); } - } - } - return (ret); -} - -// -// Linux Implementation of fetching system thermals, from the filesystem -// -function linux_thermals() -{ - child = require('child_process').execFile('/bin/sh', ['sh']); - child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); - child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); - child.stdin.write("cat /sys/class/thermal/thermal_zone*/temp | awk '{ print $0 / 1000 }'\nexit\n"); - child.waitExit(); - var ret = child.stdout.str.trim().split('\n'); - if (ret.length == 1 && ret[0] == '') { ret = []; } - return (ret); -} - -// -// macOS Implementation of fetching system thermals, using system utility 'powermetrics' -// -function macos_thermals() -{ - var ret = []; - var child = require('child_process').execFile('/bin/sh', ['sh']); - child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); - child.stderr.on('data', function () { }); - child.stdin.write('powermetrics --help | grep SMC\nexit\n'); - child.waitExit(); - - if (child.stdout.str.trim() != '') - { - child = require('child_process').execFile('/bin/sh', ['sh']); - child.stdout.str = ''; child.stdout.on('data', function (c) - { - this.str += c.toString(); - var tokens = this.str.trim().split('\n'); - for (var i in tokens) - { - if (tokens[i].split(' die temperature: ').length > 1) - { - ret.push(tokens[i].split(' ')[3]); - this.parent.kill(); - } - } - }); - child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); - child.stdin.write('powermetrics -s smc\n'); - child.waitExit(5000); - } - return (ret); -} - -switch(process.platform) -{ - case 'linux': - module.exports = { cpuUtilization: linux_cpuUtilization, memUtilization: linux_memUtilization, thermals: linux_thermals }; - break; - case 'win32': - module.exports = { cpuUtilization: windows_cpuUtilization, memUtilization: windows_memUtilization, thermals: windows_thermals }; - break; - case 'darwin': - module.exports = { cpuUtilization: macos_cpuUtilization, memUtilization: macos_memUtilization, thermals: macos_thermals }; - break; -} - diff --git a/modules/win-info.js b/modules/win-info.js deleted file mode 100644 index def4a35f..00000000 --- a/modules/win-info.js +++ /dev/null @@ -1,260 +0,0 @@ -/* -Copyright 2019-2020 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. -*/ - - -// -// This module fetches various Windows System information, such as pending reboot status, -// volume defrag state, installed applications, windows update status, etc -// - - -var promise = require('promise'); - -// -// This function queries WMI to fetch Windows Update Status -// -function qfe() -{ - var child = require('child_process').execFile(process.env['windir'] + '\\System32\\wbem\\wmic.exe', ['wmic', 'qfe', 'list', 'full', '/FORMAT:CSV']); - child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); - child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); - child.waitExit(); - - var lines = child.stdout.str.trim().split('\r\n'); - var keys = lines[0].split(','); - var i, key; - var tokens; - var result = []; - - for (i = 1; i < lines.length; ++i) - { - var obj = {}; - tokens = lines[i].split(','); - for (key = 0; key < keys.length; ++key) - { - if (tokens[key]) { obj[keys[key]] = tokens[key]; } - } - result.push(obj); - } - return (result); -} - -// This function uses Windows Powershell to fetch metadata about the currently configured AntiVirus -function av() -{ - var child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['powershell', '-noprofile', '-nologo', '-command', '-'], {}); - if (child == null) { return ([]); } - - child.descriptorMetadata = 'process-manager'; - child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); - child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); - - child.stdin.write('[reflection.Assembly]::LoadWithPartialName("system.core")\r\n'); - child.stdin.write('Get-WmiObject -Namespace "root/SecurityCenter2" -Class AntiVirusProduct | '); - child.stdin.write('ForEach-Object -Process { '); - child.stdin.write('$Bytes = [System.Text.Encoding]::UTF8.GetBytes($_.displayName); '); - child.stdin.write('$EncodedText =[Convert]::ToBase64String($Bytes); '); - child.stdin.write('Write-Host ("{0},{1}" -f $_.productState,$EncodedText); }\r\n'); - child.stdin.write('exit\r\n'); - child.waitExit(); - - if (child.stdout.str == '') { return ([]); } - - var lines = child.stdout.str.trim().split('\r\n'); - var result = []; - for (i = 0; i < lines.length; ++i) - { - var keys = lines[i].split(','); - if(keys.length == 2) - { - var status = {}; - status.product = Buffer.from(keys[1], 'base64').toString(); - status.updated = (parseInt(keys[0]) & 0x10) == 0; - status.enabled = (parseInt(keys[0]) & 0x1000) == 0x1000; - result.push(status); - } - } - return (result); -} - -// -// This function uses the defrag system utility to query defrag state of the specified volume -// -// Note: options.volume must be specified -function defrag(options) -{ - var ret = new promise(function (res, rej) { this._res = res; this._rej = rej; }); - var path = ''; - - switch(require('os').arch()) - { - case 'x64': - if (require('_GenericMarshal').PointerSize == 4) - { - // 32 Bit App on 64 Bit Windows - ret._rej('Cannot defrag volume on 64 bit Windows from 32 bit application'); - return (ret); - } - else - { - // 64 Bit App - path = process.env['windir'] + '\\System32\\defrag.exe'; - } - break; - case 'ia32': - // 32 Bit App on 32 Bit Windows - path = process.env['windir'] + '\\System32\\defrag.exe'; - break; - default: - ret._rej(require('os').arch() + ' not supported'); - return (ret); - break; - } - - ret.child = require('child_process').execFile(process.env['windir'] + '\\System32\\defrag.exe', ['defrag', options.volume + ' /A']); - ret.child.promise = ret; - ret.child.promise.options = options; - ret.child.stdout.str = ''; ret.child.stdout.on('data', function (c) { this.str += c.toString(); }); - ret.child.stderr.str = ''; ret.child.stderr.on('data', function (c) { this.str += c.toString(); }); - ret.child.on('exit', function (code) - { - var lines = this.stdout.str.trim().split('\r\n'); - var obj = { volume: this.promise.options.volume }; - for (var i in lines) - { - var token = lines[i].split('='); - if(token.length == 2) - { - switch(token[0].trim().toLowerCase()) - { - case 'volume size': - obj['size'] = token[1]; - break; - case 'free space': - obj['free'] = token[1]; - break; - case 'total fragmented space': - obj['fragmented'] = token[1]; - break; - case 'largest free space size': - obj['largestFragment'] = token[1]; - break; - } - } - } - this.promise._res(obj); - }); - return (ret); -} - -// Helper/Shortcut for registry query -function regQuery(H, Path, Key) -{ - try - { - return(require('win-registry').QueryKey(H, Path, Key)); - } - catch(e) - { - return (null); - } -} - -// This function returns details on any system pending reboots -function pendingReboot() -{ - var tmp = null; - var ret = null; - var HKEY = require('win-registry').HKEY; - if(regQuery(HKEY.LocalMachine, 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Component Based Servicing', 'RebootPending') !=null) - { - ret = 'Component Based Servicing'; - } - else if(regQuery(HKEY.LocalMachine, 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate', 'RebootRequired')) - { - ret = 'Windows Update'; - } - else if ((tmp=regQuery(HKEY.LocalMachine, 'SYSTEM\\CurrentControlSet\\Control\\Session Manager', 'PendingFileRenameOperations'))!=null && tmp != 0 && tmp != '') - { - ret = 'File Rename'; - } - else if (regQuery(HKEY.LocalMachine, 'SYSTEM\\CurrentControlSet\\Control\\ComputerName\\ActiveComputerName', 'ComputerName') != regQuery(HKEY.LocalMachine, 'SYSTEM\\CurrentControlSet\\Control\\ComputerName\\ComputerName', 'ComputerName')) - { - ret = 'System Rename'; - } - return (ret); -} - -// -// Returns a promise that fetches the list of installed applications -// -function installedApps() -{ - var promise = require('promise'); - var ret = new promise(function (a, r) { this._resolve = a; this._reject = r; }); - - var code = "\ - var reg = require('win-registry');\ - var result = [];\ - var val, tmp;\ - var items = reg.QueryKey(reg.HKEY.LocalMachine, 'SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall');\ - for (var key in items.subkeys)\ - {\ - val = {};\ - try\ - {\ - val.name = reg.QueryKey(reg.HKEY.LocalMachine, 'SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\\\\' + items.subkeys[key], 'DisplayName');\ - }\ - catch(e)\ - {\ - continue;\ - }\ - try\ - {\ - val.version = reg.QueryKey(reg.HKEY.LocalMachine, 'SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\\\\' + items.subkeys[key], 'DisplayVersion');\ - if (val.version == '') { delete val.version; }\ - }\ - catch(e)\ - {\ - }\ - try\ - {\ - val.location = reg.QueryKey(reg.HKEY.LocalMachine, 'SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\\\\' + items.subkeys[key], 'InstallLocation');\ - if (val.location == '') { delete val.location; }\ - }\ - catch(e)\ - {\ - }\ - result.push(val);\ - }\ - console.log(JSON.stringify(result,'', 1));process.exit();"; - - ret.child = require('child_process').execFile(process.execPath, [process.execPath.split('\\').pop().split('.exe')[0], '-exec "' + code + '"']); - ret.child.promise = ret; - ret.child.stdout.str = ''; ret.child.stdout.on('data', function (c) { this.str += c.toString(); }); - ret.child.on('exit', function (c) { this.promise._resolve(JSON.parse(this.stdout.str.trim())); }); - return (ret); -} - -if (process.platform == 'win32') -{ - module.exports = { qfe: qfe, av: av, defrag: defrag, pendingReboot: pendingReboot, installedApps: installedApps }; -} -else -{ - var not_supported = function () { throw (process.platform + ' not supported'); }; - module.exports = { qfe: not_supported, av: not_supported, defrag: not_supported, pendingReboot: not_supported, installedApps: not_supported }; -} \ No newline at end of file