#!/bin/bash
mpstat_activity_float() {
current_idle="$(mpstat -o JSON | jq '.sysstat.hosts[].statistics[]."cpu-load"[].idle')"
current_activity=$(echo "scale=2; 100 - ${current_idle}" | bc)
}
function waiting_on_system_ready_monitor_memory() {
target_activity="10.25"
mpstat_activity_float
while (( $(echo "${current_activity} >= ${target_activity}" | bc -l) )); do
sleep 120
mpstat_activity_float
done
echo "System activity is ${current_activity} below ${target_activity}%. Starting memory monitoring."
monitor_memory &
}
jak psal mikesznovu, bc chce desetinou . ne ,
prepsal sem to na vice mistech:
- zjiskani idle hodnoty z mpstat pres jeho JSON vystup a parsovani pres jq nastroj (btw: tu je hodnota rovnou s . misto ,)
(a nectu jen int cislo abych pres printf mu pridal .00, ale nechavam realne hodnotu na 2 desetina)
- nepouziti local promenejch to je asi vec zvyku
- s tim ^ souvisi mpstat_activity_float nepouzit na nastaveni promene z printf, ale rovnou v te funkci globalni promenoiu
- promene davej do {}, mas to pak prehlednejsi jak pri obarvovani syntaxi, tak kdyz chces pozdeji nahradit ci dohledat konkretni nazvy promenych
EDIT:
jinak v tom tvym scriptu by bez tr slo (schopnost bashe) jen promene pro bc nechat nahrazovat , za . (opet narazime na promenou v {} :-)
while (( $(echo "$current_activity >= $target_activity" | bc -l) )); do
=>
while (( $(echo "${current_activity/,/.} >= ${target_activity/,/.}" | bc -l) )); do