.dots/tmux/plugins/tmux-plugin-sysstat/scripts/cpu_collect.sh

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