diff --git a/CHANGELOG.md b/CHANGELOG.md index 15b88fa..bf8f487 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -82,6 +82,7 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page. | Version | Date | Comment | | ------- | ---------- | --------------------------------------------------------------------------------------------------- | +| 5.18.13 | 2023-08-08 | `mem()` fixed error handling | | 5.18.12 | 2023-08-05 | `fsSize()` rw /snap/ issue fixed (linux) | | 5.18.11 | 2023-08-04 | `bluetooth()` improved parsing, macOS Sonoma detection | | 5.18.10 | 2023-07-28 | `cpu()` fixed cache sizes, extended sockets (windows) | diff --git a/docs/history.html b/docs/history.html index 2f85be5..618f2f5 100644 --- a/docs/history.html +++ b/docs/history.html @@ -57,6 +57,11 @@ + + 5.18.13 + 2023-08-08 + mem() fixed error handling + 5.18.12 2023-08-05 diff --git a/docs/index.html b/docs/index.html index 7e10175..acb4285 100644 --- a/docs/index.html +++ b/docs/index.html @@ -170,7 +170,7 @@
systeminformation
 
-
New Version: 5.18.12
+
New Version: 5.18.13
diff --git a/lib/memory.js b/lib/memory.js index ba09b0b..54dd64c 100644 --- a/lib/memory.js +++ b/lib/memory.js @@ -166,60 +166,70 @@ function mem(callback) { }; if (_linux) { - fs.readFile('/proc/meminfo', function (error, stdout) { - if (!error) { - const lines = stdout.toString().split('\n'); - result.total = parseInt(util.getValue(lines, 'memtotal'), 10); - result.total = result.total ? result.total * 1024 : os.totalmem(); - result.free = parseInt(util.getValue(lines, 'memfree'), 10); - result.free = result.free ? result.free * 1024 : os.freemem(); - result.used = result.total - result.free; + try { + fs.readFile('/proc/meminfo', function (error, stdout) { + if (!error) { + const lines = stdout.toString().split('\n'); + result.total = parseInt(util.getValue(lines, 'memtotal'), 10); + result.total = result.total ? result.total * 1024 : os.totalmem(); + result.free = parseInt(util.getValue(lines, 'memfree'), 10); + result.free = result.free ? result.free * 1024 : os.freemem(); + result.used = result.total - result.free; - result.buffers = parseInt(util.getValue(lines, 'buffers'), 10); - result.buffers = result.buffers ? result.buffers * 1024 : 0; - result.cached = parseInt(util.getValue(lines, 'cached'), 10); - result.cached = result.cached ? result.cached * 1024 : 0; - result.slab = parseInt(util.getValue(lines, 'slab'), 10); - result.slab = result.slab ? result.slab * 1024 : 0; - result.buffcache = result.buffers + result.cached + result.slab; + result.buffers = parseInt(util.getValue(lines, 'buffers'), 10); + result.buffers = result.buffers ? result.buffers * 1024 : 0; + result.cached = parseInt(util.getValue(lines, 'cached'), 10); + result.cached = result.cached ? result.cached * 1024 : 0; + result.slab = parseInt(util.getValue(lines, 'slab'), 10); + result.slab = result.slab ? result.slab * 1024 : 0; + result.buffcache = result.buffers + result.cached + result.slab; - let available = parseInt(util.getValue(lines, 'memavailable'), 10); - result.available = available ? available * 1024 : result.free + result.buffcache; - result.active = result.total - result.available; + let available = parseInt(util.getValue(lines, 'memavailable'), 10); + result.available = available ? available * 1024 : result.free + result.buffcache; + result.active = result.total - result.available; - result.swaptotal = parseInt(util.getValue(lines, 'swaptotal'), 10); - result.swaptotal = result.swaptotal ? result.swaptotal * 1024 : 0; - result.swapfree = parseInt(util.getValue(lines, 'swapfree'), 10); - result.swapfree = result.swapfree ? result.swapfree * 1024 : 0; - result.swapused = result.swaptotal - result.swapfree; - } + result.swaptotal = parseInt(util.getValue(lines, 'swaptotal'), 10); + result.swaptotal = result.swaptotal ? result.swaptotal * 1024 : 0; + result.swapfree = parseInt(util.getValue(lines, 'swapfree'), 10); + result.swapfree = result.swapfree ? result.swapfree * 1024 : 0; + result.swapused = result.swaptotal - result.swapfree; + } + if (callback) { callback(result); } + resolve(result); + }); + } catch (e) { if (callback) { callback(result); } resolve(result); - }); + } } if (_freebsd || _openbsd || _netbsd) { - exec('/sbin/sysctl hw.realmem hw.physmem vm.stats.vm.v_page_count vm.stats.vm.v_wire_count vm.stats.vm.v_active_count vm.stats.vm.v_inactive_count vm.stats.vm.v_cache_count vm.stats.vm.v_free_count vm.stats.vm.v_page_size', function (error, stdout) { - if (!error) { - let lines = stdout.toString().split('\n'); - const pagesize = parseInt(util.getValue(lines, 'vm.stats.vm.v_page_size'), 10); - const inactive = parseInt(util.getValue(lines, 'vm.stats.vm.v_inactive_count'), 10) * pagesize; - const cache = parseInt(util.getValue(lines, 'vm.stats.vm.v_cache_count'), 10) * pagesize; + try { + exec('/sbin/sysctl hw.realmem hw.physmem vm.stats.vm.v_page_count vm.stats.vm.v_wire_count vm.stats.vm.v_active_count vm.stats.vm.v_inactive_count vm.stats.vm.v_cache_count vm.stats.vm.v_free_count vm.stats.vm.v_page_size', function (error, stdout) { + if (!error) { + let lines = stdout.toString().split('\n'); + const pagesize = parseInt(util.getValue(lines, 'vm.stats.vm.v_page_size'), 10); + const inactive = parseInt(util.getValue(lines, 'vm.stats.vm.v_inactive_count'), 10) * pagesize; + const cache = parseInt(util.getValue(lines, 'vm.stats.vm.v_cache_count'), 10) * pagesize; - result.total = parseInt(util.getValue(lines, 'hw.realmem'), 10); - if (isNaN(result.total)) { result.total = parseInt(util.getValue(lines, 'hw.physmem'), 10); } - result.free = parseInt(util.getValue(lines, 'vm.stats.vm.v_free_count'), 10) * pagesize; - result.buffcache = inactive + cache; - result.available = result.buffcache + result.free; - result.active = result.total - result.free - result.buffcache; + result.total = parseInt(util.getValue(lines, 'hw.realmem'), 10); + if (isNaN(result.total)) { result.total = parseInt(util.getValue(lines, 'hw.physmem'), 10); } + result.free = parseInt(util.getValue(lines, 'vm.stats.vm.v_free_count'), 10) * pagesize; + result.buffcache = inactive + cache; + result.available = result.buffcache + result.free; + result.active = result.total - result.free - result.buffcache; - result.swaptotal = 0; - result.swapfree = 0; - result.swapused = 0; + result.swaptotal = 0; + result.swapfree = 0; + result.swapused = 0; - } + } + if (callback) { callback(result); } + resolve(result); + }); + } catch (e) { if (callback) { callback(result); } resolve(result); - }); + } } if (_sunos) { if (callback) { callback(result); } @@ -233,31 +243,36 @@ function mem(callback) { } catch (e) { util.noop(); } - exec('vm_stat 2>/dev/null | grep "Pages active"', function (error, stdout) { - if (!error) { - let lines = stdout.toString().split('\n'); - - result.active = parseInt(lines[0].split(':')[1], 10) * pageSize; - result.buffcache = result.used - result.active; - result.available = result.free + result.buffcache; - } - exec('sysctl -n vm.swapusage 2>/dev/null', function (error, stdout) { + try { + exec('vm_stat 2>/dev/null | grep "Pages active"', function (error, stdout) { if (!error) { let lines = stdout.toString().split('\n'); - if (lines.length > 0) { - let firstline = lines[0].replace(/,/g, '.').replace(/M/g, ''); - let lineArray = firstline.trim().split(' '); - lineArray.forEach(line => { - if (line.toLowerCase().indexOf('total') !== -1) { result.swaptotal = parseFloat(line.split('=')[1].trim()) * 1024 * 1024; } - if (line.toLowerCase().indexOf('used') !== -1) { result.swapused = parseFloat(line.split('=')[1].trim()) * 1024 * 1024; } - if (line.toLowerCase().indexOf('free') !== -1) { result.swapfree = parseFloat(line.split('=')[1].trim()) * 1024 * 1024; } - }); - } + + result.active = parseInt(lines[0].split(':')[1], 10) * pageSize; + result.buffcache = result.used - result.active; + result.available = result.free + result.buffcache; } - if (callback) { callback(result); } - resolve(result); + exec('sysctl -n vm.swapusage 2>/dev/null', function (error, stdout) { + if (!error) { + let lines = stdout.toString().split('\n'); + if (lines.length > 0) { + let firstline = lines[0].replace(/,/g, '.').replace(/M/g, ''); + let lineArray = firstline.trim().split(' '); + lineArray.forEach(line => { + if (line.toLowerCase().indexOf('total') !== -1) { result.swaptotal = parseFloat(line.split('=')[1].trim()) * 1024 * 1024; } + if (line.toLowerCase().indexOf('used') !== -1) { result.swapused = parseFloat(line.split('=')[1].trim()) * 1024 * 1024; } + if (line.toLowerCase().indexOf('free') !== -1) { result.swapfree = parseFloat(line.split('=')[1].trim()) * 1024 * 1024; } + }); + } + } + if (callback) { callback(result); } + resolve(result); + }); }); - }); + } catch (e) { + if (callback) { callback(result); } + resolve(result); + } } if (_windows) { let swaptotal = 0; diff --git a/lib/system.js b/lib/system.js index b546548..5c2a6b0 100644 --- a/lib/system.js +++ b/lib/system.js @@ -399,10 +399,11 @@ function bios(callback) { } if (_windows) { try { - util.powerShell('Get-CimInstance Win32_bios | select Description,Version,Manufacturer,@{n="ReleaseDate";e={$_.ReleaseDate.ToString("yyyy-MM-dd")}},BuildNumber,SerialNumber | fl').then((stdout, error) => { + util.powerShell('Get-CimInstance Win32_bios | select Description,Version,Manufacturer,@{n="ReleaseDate";e={$_.ReleaseDate.ToString("yyyy-MM-dd")}},BuildNumber,SerialNumber,SMBIOSBIOSVersion | fl').then((stdout, error) => { if (!error) { let lines = stdout.toString().split('\r\n'); const description = util.getValue(lines, 'description', ':'); + const version = util.getValue(lines, 'SMBIOSBIOSVersion', ':'); if (description.indexOf(' Version ') !== -1) { // ... Phoenix ROM BIOS PLUS Version 1.10 A04 result.vendor = description.split(' Version ')[0].trim(); @@ -413,7 +414,7 @@ function bios(callback) { result.version = description.split(' Ver: ')[1].trim(); } else { result.vendor = util.getValue(lines, 'manufacturer', ':'); - result.version = util.getValue(lines, 'version', ':'); + result.version = version || util.getValue(lines, 'version', ':'); } result.releaseDate = util.getValue(lines, 'releasedate', ':'); result.revision = util.getValue(lines, 'buildnumber', ':');