J'utilise des sensors
pour garder un œil sur les températures du processeur sur la console. Cela fait partie de la sortie :
coretemp-isa-0001
Adapter: ISA adapter
Physical id 1: +45.0°C (high = +80.0°C, crit = +90.0°C)
Core 0: +39.0°C (high = +80.0°C, crit = +90.0°C)
Core 1: +39.0°C (high = +80.0°C, crit = +90.0°C)
Core 2: +40.0°C (high = +80.0°C, crit = +90.0°C)
Core 3: +38.0°C (high = +80.0°C, crit = +90.0°C)
Core 4: +40.0°C (high = +80.0°C, crit = +90.0°C)
Core 8: +39.0°C (high = +80.0°C, crit = +90.0°C)
Core 9: +38.0°C (high = +80.0°C, crit = +90.0°C)
Core 10: +38.0°C (high = +80.0°C, crit = +90.0°C)
Core 11: +39.0°C (high = +80.0°C, crit = +90.0°C)
Core 12: +39.0°C (high = +80.0°C, crit = +90.0°C)
nouveau-pci-0200
Adapter: PCI adapter
GPU core: +0.92 V (min = +0.92 V, max = +1.00 V)
fan1: 2220 RPM
temp1: +48.0°C (high = +95.0°C, hyst = +3.0°C)
(crit = +105.0°C, hyst = +5.0°C)
(emerg = +135.0°C, hyst = +5.0°C)
Je voudrais "coloriser" cette sortie. En particulier, si les températures dépassent un certain seuil, je souhaite qu'elles soient affichées en rouge. Ainsi, par exemple, disons que le seuil est de 60, puis toute occurrence de +60.0°C
, +61.0°C
, +62.0°C
, et ainsi de suite devrait être en rouge (idéalement, je voudrais un niveau orange et un niveau rouge basés sur deux seuils différents, mais une solution à un niveau serait également très bien). Idéalement, cela devrait également fonctionner avec les watch sensors
.
Réponse acceptée :
Utilisation : sensors | ./color_sensors.awk
Utilisation avec montre : watch -c 'sensors | ./color_sensors.awk'
#!/usr/bin/awk -f
BEGIN {
DEFAULT_COLOR = "\033[;m";
RED = "\033[1;31m";
MAGENTA = "\033[1;35m";
# CPU_thresholds
cpu_high = 60;
cpu_middle = 50;
# GPU_thresholds
gpu_high = 80;
gpu_middle = 70;
}
function colorize(temp, mid_trsh, high_trsh) {
new_color = "";
temp_number = temp;
gsub("[^0-9]","",temp_number);
gsub(".$","",temp_number);
if(temp_number >= high_trsh)
new_color = RED;
else if (temp_number >= mid_trsh)
new_color = MAGENTA;
return new_color temp DEFAULT_COLOR;
}
/Core/ { $3 = "\t" colorize($3, cpu_middle, cpu_high); }
/Physical id/ { $4 = "\t" colorize($4, cpu_middle, cpu_high); }
# Multiple spaces added for alignment here - "\t ".
/temp1/ { $2 = "\t " colorize($2, gpu_middle, gpu_high) " "; }
{ print; }
Résultat :