54 lines
1.5 KiB
Bash
Executable File
54 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
LC_NUMERIC=C
|
|
|
|
set -u
|
|
set -e
|
|
|
|
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
source "$CURRENT_DIR/helpers.sh"
|
|
|
|
refresh_interval=$(get_tmux_option "status-interval" "5")
|
|
samples_count="60"
|
|
cpu_metric_file="$(get_tmux_option "@sysstat_cpu_tmp_dir" "/dev/null")/cpu_collect.metric"
|
|
|
|
get_cpu_usage() {
|
|
if is_osx; then
|
|
if command_exists "iostat"; then
|
|
iostat -w "$refresh_interval" -c "$samples_count" \
|
|
| stdbuf -o0 awk 'NR > 2 { print 100-$(NF-3); }'
|
|
else
|
|
top -l "$samples_count" -s "$refresh_interval" -n 0 \
|
|
| sed -u -nr '/CPU usage/s/.*,[[:space:]]*([0-9]+[.,][0-9]*)%[[:space:]]*idle.*/\1/p' \
|
|
| stdbuf -o0 awk '{ print 100-$0 }'
|
|
fi
|
|
elif ! command_exists "vmstat"; then
|
|
if is_freebsd; then
|
|
vmstat -n "$refresh_interval" -c "$samples_count" \
|
|
| stdbuf -o0 awk 'NR>2 {print 100-$(NF-0)}'
|
|
else
|
|
vmstat -n "$refresh_interval" "$samples_count" \
|
|
| stdbuf -o0 awk 'NR>2 {print 100-$(NF-2)}'
|
|
fi
|
|
else
|
|
if is_freebsd; then
|
|
top -d"$samples_count" \
|
|
| sed -u -nr '/CPU:/s/.*,[[:space:]]*([0-9]+[.,][0-9]*)%[[:space:]]*id.*/\1/p' \
|
|
| stdbuf -o0 awk '{ print 100-$0 }'
|
|
else
|
|
top -b -n "$samples_count" -d "$refresh_interval" \
|
|
| sed -u -nr '/%Cpu/s/.*,[[:space:]]*([0-9]+[.,][0-9]*)[[:space:]]*id.*/\1/p' \
|
|
| stdbuf -o0 awk '{ print 100-$0 }'
|
|
fi
|
|
fi
|
|
}
|
|
|
|
main() {
|
|
get_cpu_usage | while read -r value; do
|
|
echo "$value" | tee "$cpu_metric_file"
|
|
done
|
|
}
|
|
|
|
main
|
|
|