1
0
Fork 0
dotfiles/common/.local/libexec/statusbar/sb-cpu
2024-09-27 11:43:04 +02:00

48 lines
1.2 KiB
Bash
Executable file

#!/bin/sh
. libsb
n_cpu=$(grep -c 'cpu[0-9]\+' /proc/stat)
cache=$XDG_RUNTIME_DIR/cpubarscache
temp="$(sensors | awk '/CPU/ {printf ("%.f°C", $2)}' | tr -d "+")"
[ -n "$temp" ] && temp="${temp} "
new=$(awk '/cpu[0-9]+/ { printf "%d %d\n", $5, ($2 + $3 + $4 + $5) }' /proc/stat 2>/dev/null)
[ ! -f "$cache" ] && {
echo "$new" >"$cache"
exit
}
old=$(cat "$cache")
printf "%b" "$temp<span ${bggray}>"
first=true
IFS='
'
for i in $(seq "$n_cpu"); do
eval "$(echo "$old" | awk -v i="$i" 'NR==i { printf "old_idle=%s old_total=%s", $1, $2 }')"
eval "$(echo "$new" | awk -v i="$i" 'NR==i { printf "new_idle=%s new_total=%s", $1, $2 }')"
# shellcheck disable=SC2154
delta_idle=$((new_idle - old_idle))
# shellcheck disable=SC2154
delta_total=$((new_total - old_total))
percent=$(((delta_total - delta_idle) * 100 / delta_total))
eval "$(meter_bar "$percent" | awk -F: '{ printf "color=\"%s\" bar=\"%s\"", $1, $2 }')"
if [ "$color" != "$prevcolor" ]; then
$first || printf "%b" "</span>"
printf "%b" "<span $color>"
fi
printf "%b" "$bar"
first=false
prevcolor=$color
index=$((index + 1))
done
printf "%s" "</span></span>"
echo "$new" >"$cache"