From dfc19f55bb42a05f05ad904cfec53a245376ee78 Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Fri, 18 Sep 2020 20:42:07 +0200 Subject: [PATCH] cpuTemperature() fix try catch (linux) --- CHANGELOG.md | 1 + docs/history.html | 5 + docs/index.html | 2 +- lib/cpu.js | 246 ++++++++++++++++++++++++---------------------- 4 files changed, 138 insertions(+), 116 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index debcbda..045aaa9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ For major (breaking) changes - version 3 and 2 see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | +| 4.27.5 | 2020-09-18 | `cpuTemperature()` fix try catch (linux) | | 4.27.4 | 2020-09-16 | `networkInterfaceDefault()` optimization (macOS) | | 4.27.3 | 2020-08-26 | updated typescript typings | | 4.27.2 | 2020-08-26 | fixed issue breaking node v4 compatibility | diff --git a/docs/history.html b/docs/history.html index 1426474..56f2054 100644 --- a/docs/history.html +++ b/docs/history.html @@ -83,6 +83,11 @@ + + 4.27.5 + 2020-09-18 + cpuTemperature() fixed try catch (linux) + 4.27.4 2020-09-16 diff --git a/docs/index.html b/docs/index.html index 8c590df..d0de8c6 100644 --- a/docs/index.html +++ b/docs/index.html @@ -168,7 +168,7 @@
systeminformation
-
Current Version: 4.27.4
+
Current Version: 4.27.5
diff --git a/lib/cpu.js b/lib/cpu.js index 22d9cd4..b4b94a2 100644 --- a/lib/cpu.js +++ b/lib/cpu.js @@ -758,100 +758,105 @@ function cpuTemperature(callback) { }; if (_linux) { const cmd = 'cat /sys/class/hwmon/hwmon1/temp*_la*;echo "---";cat /sys/class/hwmon/hwmon1/temp*_i*'; - exec(cmd, function (error, stdout) { - if (!error) { - let parts = stdout.toString().split('---'); - let labels = parts[0].split('\n'); - let temps = parts[1].split('\n'); - temps.shift(); - for (let i = 0; i < temps.length; i++) { - if (temps[i] && (labels[i] === undefined || (labels[i] && labels[i].toLowerCase().startsWith('core')))) { - result.cores.push(Math.round(parseInt(temps[i], 10) / 100) / 10); - } else if (temps[i] && labels[i] && result.main === -1) { - result.main = Math.round(parseInt(temps[i], 10) / 100) / 10; - } - } - if (result.cores.length > 0) { - if (result.main === -1) { - result.main = Math.round(result.cores.reduce((a, b) => a + b, 0) / result.cores.length); - } - let maxtmp = Math.max.apply(Math, result.cores); - result.max = (maxtmp > result.main) ? maxtmp : result.main; - } - if (result.main !== -1) { - if (result.max === -1) { - result.max = result.main; - } - if (callback) { callback(result); } - resolve(result); - return; - } - } - exec('sensors', function (error, stdout) { + try { + exec(cmd, function (error, stdout) { if (!error) { - let lines = stdout.toString().split('\n'); - let tdieTemp = -1; - lines.forEach(function (line) { - let regex = /[+-]([^°]*)/g; - let temps = line.match(regex); - let firstPart = line.split(':')[0].toUpperCase(); - if (firstPart.indexOf('PHYSICAL') !== -1 || firstPart.indexOf('PACKAGE') !== -1) { - result.main = parseFloat(temps); + let parts = stdout.toString().split('---'); + let labels = parts[0].split('\n'); + let temps = parts[1].split('\n'); + temps.shift(); + for (let i = 0; i < temps.length; i++) { + if (temps[i] && (labels[i] === undefined || (labels[i] && labels[i].toLowerCase().startsWith('core')))) { + result.cores.push(Math.round(parseInt(temps[i], 10) / 100) / 10); + } else if (temps[i] && labels[i] && result.main === -1) { + result.main = Math.round(parseInt(temps[i], 10) / 100) / 10; } - if (firstPart.indexOf('CORE ') !== -1) { - result.cores.push(parseFloat(temps)); - } - if (firstPart.indexOf('TDIE') !== -1 && tdieTemp === -1) { - tdieTemp = parseFloat(temps); - } - }); + } if (result.cores.length > 0) { if (result.main === -1) { result.main = Math.round(result.cores.reduce((a, b) => a + b, 0) / result.cores.length); } let maxtmp = Math.max.apply(Math, result.cores); result.max = (maxtmp > result.main) ? maxtmp : result.main; - } else { - if (result.main === -1 && tdieTemp !== -1) { - result.main = tdieTemp; - result.max = tdieTemp; - } } - if (result.main !== -1.0 || result.max !== -1.0) { + if (result.main !== -1) { + if (result.max === -1) { + result.max = result.main; + } if (callback) { callback(result); } resolve(result); return; } } - fs.stat('/sys/class/thermal/thermal_zone0/temp', function (err) { - if (err === null) { - fs.readFile('/sys/class/thermal/thermal_zone0/temp', function (error, stdout) { - if (!error) { - let lines = stdout.toString().split('\n'); - if (lines.length > 0) { - result.main = parseFloat(lines[0]) / 1000.0; - result.max = result.main; - } + exec('sensors', function (error, stdout) { + if (!error) { + let lines = stdout.toString().split('\n'); + let tdieTemp = -1; + lines.forEach(function (line) { + let regex = /[+-]([^°]*)/g; + let temps = line.match(regex); + let firstPart = line.split(':')[0].toUpperCase(); + if (firstPart.indexOf('PHYSICAL') !== -1 || firstPart.indexOf('PACKAGE') !== -1) { + result.main = parseFloat(temps); } + if (firstPart.indexOf('CORE ') !== -1) { + result.cores.push(parseFloat(temps)); + } + if (firstPart.indexOf('TDIE') !== -1 && tdieTemp === -1) { + tdieTemp = parseFloat(temps); + } + }); + if (result.cores.length > 0) { + if (result.main === -1) { + result.main = Math.round(result.cores.reduce((a, b) => a + b, 0) / result.cores.length); + } + let maxtmp = Math.max.apply(Math, result.cores); + result.max = (maxtmp > result.main) ? maxtmp : result.main; + } else { + if (result.main === -1 && tdieTemp !== -1) { + result.main = tdieTemp; + result.max = tdieTemp; + } + } + if (result.main !== -1.0 || result.max !== -1.0) { if (callback) { callback(result); } resolve(result); - }); - } else { - exec('/opt/vc/bin/vcgencmd measure_temp', function (error, stdout) { - if (!error) { - let lines = stdout.toString().split('\n'); - if (lines.length > 0 && lines[0].indexOf('=')) { - result.main = parseFloat(lines[0].split('=')[1]); - result.max = result.main; - } - } - if (callback) { callback(result); } - resolve(result); - }); + return; + } } + fs.stat('/sys/class/thermal/thermal_zone0/temp', function (err) { + if (err === null) { + fs.readFile('/sys/class/thermal/thermal_zone0/temp', function (error, stdout) { + if (!error) { + let lines = stdout.toString().split('\n'); + if (lines.length > 0) { + result.main = parseFloat(lines[0]) / 1000.0; + result.max = result.main; + } + } + if (callback) { callback(result); } + resolve(result); + }); + } else { + exec('/opt/vc/bin/vcgencmd measure_temp', function (error, stdout) { + if (!error) { + let lines = stdout.toString().split('\n'); + if (lines.length > 0 && lines[0].indexOf('=')) { + result.main = parseFloat(lines[0].split('=')[1]); + result.max = result.main; + } + } + if (callback) { callback(result); } + resolve(result); + }); + } + }); }); }); - }); + } catch (er) { + if (callback) { callback(result); } + resolve(result); + } } if (_freebsd || _openbsd || _netbsd) { exec('sysctl dev.cpu | grep temp', function (error, stdout) { @@ -962,29 +967,35 @@ function cpuFlags(callback) { } } if (_linux) { - exec('export LC_ALL=C; lscpu; unset LC_ALL', function (error, stdout) { - if (!error) { - let lines = stdout.toString().split('\n'); - lines.forEach(function (line) { - if (line.split(':')[0].toUpperCase().indexOf('FLAGS') !== -1) { - result = line.split(':')[1].trim().toLowerCase(); - } - }); - } - if (!result) { - fs.readFile('/proc/cpuinfo', function (error, stdout) { - if (!error) { - let lines = stdout.toString().split('\n'); - result = util.getValue(lines, 'features', ':', true).toLowerCase(); - } + try { + + exec('export LC_ALL=C; lscpu; unset LC_ALL', function (error, stdout) { + if (!error) { + let lines = stdout.toString().split('\n'); + lines.forEach(function (line) { + if (line.split(':')[0].toUpperCase().indexOf('FLAGS') !== -1) { + result = line.split(':')[1].trim().toLowerCase(); + } + }); + } + if (!result) { + fs.readFile('/proc/cpuinfo', function (error, stdout) { + if (!error) { + let lines = stdout.toString().split('\n'); + result = util.getValue(lines, 'features', ':', true).toLowerCase(); + } + if (callback) { callback(result); } + resolve(result); + }); + } else { if (callback) { callback(result); } resolve(result); - }); - } else { - if (callback) { callback(result); } - resolve(result); - } - }); + } + }); + } catch (e) { + if (callback) { callback(result); } + resolve(result); + } } if (_freebsd || _openbsd || _netbsd) { exec('export LC_ALL=C; dmidecode -t 4 2>/dev/null; unset LC_ALL', function (error, stdout) { @@ -1041,28 +1052,33 @@ function cpuCache(callback) { l3: -1, }; if (_linux) { - exec('export LC_ALL=C; lscpu; unset LC_ALL', function (error, stdout) { - if (!error) { - let lines = stdout.toString().split('\n'); - lines.forEach(function (line) { - let parts = line.split(':'); - if (parts[0].toUpperCase().indexOf('L1D CACHE') !== -1) { - result.l1d = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1); - } - if (parts[0].toUpperCase().indexOf('L1I CACHE') !== -1) { - result.l1i = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1); - } - if (parts[0].toUpperCase().indexOf('L2 CACHE') !== -1) { - result.l2 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1); - } - if (parts[0].toUpperCase().indexOf('L3 CACHE') !== -1) { - result.l3 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1); - } - }); - } + try { + exec('export LC_ALL=C; lscpu; unset LC_ALL', function (error, stdout) { + if (!error) { + let lines = stdout.toString().split('\n'); + lines.forEach(function (line) { + let parts = line.split(':'); + if (parts[0].toUpperCase().indexOf('L1D CACHE') !== -1) { + result.l1d = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1); + } + if (parts[0].toUpperCase().indexOf('L1I CACHE') !== -1) { + result.l1i = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1); + } + if (parts[0].toUpperCase().indexOf('L2 CACHE') !== -1) { + result.l2 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1); + } + if (parts[0].toUpperCase().indexOf('L3 CACHE') !== -1) { + result.l3 = parseInt(parts[1].trim()) * (parts[1].indexOf('K') !== -1 ? 1024 : 1); + } + }); + } + if (callback) { callback(result); } + resolve(result); + }); + } catch (e) { if (callback) { callback(result); } resolve(result); - }); + } } if (_freebsd || _openbsd || _netbsd) { exec('export LC_ALL=C; dmidecode -t 7 2>/dev/null; unset LC_ALL', function (error, stdout) {