Skip to content

Commit

Permalink
Tweak GlCpuTemp widget to support other sensor units
Browse files Browse the repository at this point in the history
The current code assumes all sensors report temperature, when in fact glances' sensor plugin also reports rpm (eg fan speeds) and percentages (eg batteries).

Changes:

 * Add support for percentages
 * Add support for rpm

Note: this widget should really be called something like `GlSensors`, but I haven't been able to easily find a way of renaming it without breaking people's existing configs and workflows.
  • Loading branch information
luispabon committed Apr 3, 2023
1 parent 9c90814 commit df5ada9
Showing 1 changed file with 48 additions and 6 deletions.
54 changes: 48 additions & 6 deletions src/components/Widgets/GlCpuTemp.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<div class="glances-temp-wrapper" v-if="tempData">
<div class="temp-row" v-for="sensor in tempData" :key="sensor.label">
<p class="label">{{ sensor.label | formatLbl }}</p>
<p :class="`temp range-${sensor.color}`">{{ sensor.value | formatVal }}</p>
<p :class="`temp range-${sensor.color}`">{{ sensor.value | formatVal(sensor.sensorType) }}</p>
</div>
</div>
</template>
Expand All @@ -29,8 +29,15 @@ export default {
formatLbl(lbl) {
return capitalize(lbl);
},
formatVal(val) {
return `${Math.round(val)}°C`;
formatVal(val, sensorType) {
switch (sensorType) {
case 'rpm':
return `${Math.round(val)} rpm`;
case 'percentage':
return `${Math.round(val)}%`;
default:
return `${Math.round(val)}°C`;
}
},
},
methods: {
Expand All @@ -40,14 +47,49 @@ export default {
if (temp >= 75) return 'red';
return 'grey';
},
getPercentageColor(percentage) {
if (percentage < 20) return 'red';
if (percentage < 50) return 'orange';
if (percentage < 75) return 'yellow';
return 'green';
},
processData(sensorData) {
const results = [];
sensorData.forEach((sensor) => {
const tempC = sensor.unit === 'F' ? fahrenheitToCelsius(sensor.value) : sensor.value;
// Start by assuming the sensor's unit is degrees Celsius
let sensorValue = sensor.value;
let color = this.getTempColor(sensorValue);
let sensorType = 'temperature';
// Now, override above if sensor unit is actually of a different type
switch (sensor.unit) {
case 'F':
sensorValue = fahrenheitToCelsius(sensorValue);
color = fahrenheitToCelsius(sensorValue);
break;
// R is for RPM and is typically for fans
case 'R':
color = 'grey';
sensorType = 'rpm';
break;
// For instance, battery levels
case '%':
sensorType = 'percentage';
color = this.getPercentageColor(sensorValue);
break;
// Nothing to do here, already covered by default values
default:
break;
}
results.push({
label: sensor.label,
value: tempC,
color: this.getTempColor(tempC),
value: sensorValue,
color,
sensorType,
});
});
this.tempData = results;
Expand Down

0 comments on commit df5ada9

Please sign in to comment.