151 lines
2.9 KiB
Bash
151 lines
2.9 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
export LANG=C
|
|
export LC_ALL=C
|
|
|
|
get_tmux_option() {
|
|
local option
|
|
local default_value
|
|
local option_value
|
|
option="$1"
|
|
default_value="$2"
|
|
option_value="$(tmux show-option -qv "$option")"
|
|
if [ -z "$option_value" ]; then
|
|
option_value="$(tmux show-option -gqv "$option")"
|
|
fi
|
|
if [ -z "$option_value" ]; then
|
|
echo "$default_value"
|
|
else
|
|
echo "$option_value"
|
|
fi
|
|
}
|
|
|
|
is_osx() {
|
|
[ "$(uname)" == "Darwin" ]
|
|
}
|
|
|
|
is_freebsd() {
|
|
[ "$(uname)" == "FreeBSD" ]
|
|
}
|
|
|
|
is_openbsd() {
|
|
[ "$(uname)" == "OpenBSD" ]
|
|
}
|
|
|
|
is_linux() {
|
|
[ "$(uname)" == "Linux" ]
|
|
}
|
|
|
|
is_cygwin() {
|
|
command -v WMIC &>/dev/null
|
|
}
|
|
|
|
is_linux_iostat() {
|
|
# Bug in early versions of linux iostat -V return error code
|
|
iostat -c &>/dev/null
|
|
}
|
|
|
|
# is second float bigger or equal?
|
|
fcomp() {
|
|
awk -v n1="$1" -v n2="$2" 'BEGIN {if (n1<=n2) exit 0; exit 1}'
|
|
}
|
|
|
|
load_status() {
|
|
local percentage=$1
|
|
local prefix=$2
|
|
medium_thresh=$(get_tmux_option "@${prefix}_medium_thresh" "30")
|
|
high_thresh=$(get_tmux_option "@${prefix}_high_thresh" "80")
|
|
if fcomp "$high_thresh" "$percentage"; then
|
|
echo "high"
|
|
elif fcomp "$medium_thresh" "$percentage" && fcomp "$percentage" "$high_thresh"; then
|
|
echo "medium"
|
|
else
|
|
echo "low"
|
|
fi
|
|
}
|
|
|
|
temp_status() {
|
|
local temp
|
|
temp=$1
|
|
cpu_temp_medium_thresh=$(get_tmux_option "@cpu_temp_medium_thresh" "80")
|
|
cpu_temp_high_thresh=$(get_tmux_option "@cpu_temp_high_thresh" "90")
|
|
if fcomp "$cpu_temp_high_thresh" "$temp"; then
|
|
echo "high"
|
|
elif fcomp "$cpu_temp_medium_thresh" "$temp" && fcomp "$temp" "$cpu_temp_high_thresh"; then
|
|
echo "medium"
|
|
else
|
|
echo "low"
|
|
fi
|
|
}
|
|
|
|
cpus_number() {
|
|
if is_linux; then
|
|
if command_exists "nproc"; then
|
|
nproc
|
|
else
|
|
echo "$(($(sed -n 's/^processor.*:\s*\([0-9]\+\)/\1/p' /proc/cpuinfo | tail -n 1) + 1))"
|
|
fi
|
|
else
|
|
sysctl -n hw.ncpu
|
|
fi
|
|
}
|
|
|
|
command_exists() {
|
|
local command
|
|
command="$1"
|
|
command -v "$command" &>/dev/null
|
|
}
|
|
|
|
get_tmp_dir() {
|
|
local tmpdir
|
|
tmpdir="${TMPDIR:-${TMP:-${TEMP:-/tmp}}}"
|
|
[ -d "$tmpdir" ] || local tmpdir=~/tmp
|
|
echo "$tmpdir/tmux-$EUID-cpu"
|
|
}
|
|
|
|
get_time() {
|
|
date +%s.%N
|
|
}
|
|
|
|
get_cache_val() {
|
|
local key
|
|
local timeout
|
|
local cache
|
|
key="$1"
|
|
# seconds after which cache is invalidated
|
|
timeout="${2:-2}"
|
|
cache="$(get_tmp_dir)/$key"
|
|
if [ -f "$cache" ]; then
|
|
awk -v cache="$(head -n1 "$cache")" -v timeout="$timeout" -v now="$(get_time)" \
|
|
'BEGIN {if (now - timeout < cache) exit 0; exit 1}' &&
|
|
tail -n+2 "$cache"
|
|
fi
|
|
}
|
|
|
|
put_cache_val() {
|
|
local key
|
|
local val
|
|
local tmpdir
|
|
key="$1"
|
|
val="${*:2}"
|
|
tmpdir="$(get_tmp_dir)"
|
|
[ ! -d "$tmpdir" ] && mkdir -p "$tmpdir" && chmod 0700 "$tmpdir"
|
|
get_time >"$tmpdir/$key"
|
|
echo -n "$val" >>"$tmpdir/$key"
|
|
echo -n "$val"
|
|
}
|
|
|
|
cached_eval() {
|
|
local command
|
|
local key
|
|
local val
|
|
command="$1"
|
|
key="$(basename "$command")"
|
|
val="$(get_cache_val "$key")"
|
|
if [ -z "$val" ]; then
|
|
put_cache_val "$key" "$($command "${@:2}")"
|
|
else
|
|
echo -n "$val"
|
|
fi
|
|
}
|