Files
pwa-homelab-mon/scripts/cpu.sh
T

27 lines
1.1 KiB
Bash
Executable File

#!/bin/sh
# CPU: общий процент + по ядру на каждое ядро (Linux). Mac: только общий.
# Контракт мониторов: первые N строк (monitor.percentages, max 8) — проценты,
# дальше — key=value.
case "$(uname)" in
Darwin) cores=$(sysctl -n hw.ncpu) ;;
*) cores=$(nproc) ;;
esac
overall=$(ps -A -o %cpu | awk -v c="$cores" '{s+=$1} END {printf "%d", s/c}')
echo "$overall"
# per-core: два среза /proc/stat (user..steal), usage = 1 - Δidle/Δtotal
if [ -r /proc/stat ]; then
a=$(grep '^cpu[0-9]* ' /proc/stat | awk '{i=$5+$6; t=0; for(n=2;n<=8;n++) t+=$n; print i, t}')
sleep 0.5
# оба среза одним awk: первая половина строк — срез 1, вторая — срез 2
printf '%s\n%s\n' "$a" "$(grep '^cpu[0-9]* ' /proc/stat | awk '{i=$5+$6; t=0; for(n=2;n<=8;n++) t+=$n; print i, t}')" | awk '
{ ia[NR]=$1; ta[NR]=$2; n=NR }
END {
half=n/2
for (r=1; r<=half; r++) {
di=ia[r+half]-ia[r]; dt=ta[r+half]-ta[r]
printf "%d\n", (dt>0 ? (1-di/dt)*100 : 0)
}
}'
fi
echo "ядер=$cores"