From 9a327615311cd66e3fa22244ec971162eb963e4d Mon Sep 17 00:00:00 2001 From: Sebastian Hildebrandt Date: Sun, 29 Nov 2020 09:33:19 +0100 Subject: [PATCH] cpuTemperatur() rewrite parsing hwmon (linux) --- lib/cpu.js | 61 +++++++++++++++++++++--------------------------------- 1 file changed, 24 insertions(+), 37 deletions(-) diff --git a/lib/cpu.js b/lib/cpu.js index 95b5e1e..884df4e 100644 --- a/lib/cpu.js +++ b/lib/cpu.js @@ -17,6 +17,7 @@ const os = require('os'); const exec = require('child_process').exec; const fs = require('fs'); const util = require('./util'); +const { execSync } = require('child_process'); let _platform = process.platform; @@ -772,49 +773,35 @@ function cpuTemperature(callback) { max: -1.0 }; if (_linux) { - const cmd = 'cat /sys/class/hwmon/hwmon0/temp*_la* 2>/dev/null;echo "---";cat /sys/class/hwmon/hwmon0/temp*_i* 2>/dev/null;echo "######";cat /sys/class/hwmon/hwmon1/temp*_la* 2>/dev/null;echo "---";cat /sys/class/hwmon/hwmon1/temp*_i* 2>/dev/null;echo "######";cat /sys/class/hwmon/hwmon2/temp*_la* 2>/dev/null;echo "---";cat /sys/class/hwmon/hwmon2/temp*_i* 2>/dev/null;echo "######";cat /sys/class/hwmon/hwmon3/temp*_la* 2>/dev/null;echo "---";cat /sys/class/hwmon/hwmon3/temp*_i* 2>/dev/null;'; + const cmd = 'for mon in /sys/class/hwmon/hwmon*; do for label in "$mon"/temp*_label; do if [ -f $label ]; then value=$(echo $label | rev | cut -c 7- | rev)_input; if [ -f "$value" ]; then echo $(cat "$label")___$(cat "$value"); fi; fi; done; done;'; try { exec(cmd, function (error, stdout) { - // if (!error) { - let sections = stdout.toString().split('######\n'); - let bestSection = -1 - let lineCount = 0 - for (let i = 0; i < sections.length; i++) { - const lines = sections[i].split('\n'); - if (lineCount < lines.length) { - lineCount = lines.length; - bestSection = i; + let lines = stdout.toString().split('\n'); + lines.forEach(line => { + const parts = line.split('___'); + const label = parts[0]; + const value = parts.length > 1 && parts[1] ? parts[1] : '0'; + if (value && (label === undefined || (label && label.toLowerCase().startsWith('core')))) { + result.cores.push(Math.round(parseInt(value, 10) / 100) / 10); + } else if (value && label && result.main === -1) { + result.main = Math.round(parseInt(value, 10) / 100) / 10; } - }; + }) - if (bestSection >= 0 && lineCount > 2) { - let parts = sections[bestSection].split('---'); - // 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); } - 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; + 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) {