feat: multi-percentage monitors (per-core CPU), max 8
This commit is contained in:
+21
-3
@@ -1,8 +1,26 @@
|
||||
#!/bin/sh
|
||||
# CPU: процент загрузки + число ядер. Linux + mac.
|
||||
# Контракт мониторов: 1-я строка — процент, дальше — key=value.
|
||||
# CPU: общий процент + по ядру на каждое ядро (Linux). Mac: только общий.
|
||||
# Контракт мониторов: первые N строк (monitor.percentages, max 8) — проценты,
|
||||
# дальше — key=value.
|
||||
case "$(uname)" in
|
||||
Darwin) cores=$(sysctl -n hw.ncpu) ;;
|
||||
*) cores=$(nproc) ;;
|
||||
esac
|
||||
ps -A -o %cpu | awk -v c="$cores" '{s+=$1} END {printf "%d\nядер=%d\n", s/c, c}'
|
||||
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"
|
||||
|
||||
Reference in New Issue
Block a user