Skip to content

Commit 88c4227

Browse files
committedJul 9, 2020
add cached eval
- fixes #27 - related #15 - related #5
1 parent f540f07 commit 88c4227

File tree

5 files changed

+53
-12
lines changed

5 files changed

+53
-12
lines changed
 

‎scripts/cpu_percentage.sh

+6-6
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,22 @@ print_cpu_percentage() {
1212
if command_exists "iostat"; then
1313

1414
if is_linux_iostat; then
15-
iostat -c 1 2 | sed '/^\s*$/d' | tail -n 1 | awk -v format="$cpu_percentage_format" '{usage=100-$NF} END {printf(format, usage)}' | sed 's/,/./'
15+
cached_eval iostat -c 1 2 | sed '/^\s*$/d' | tail -n 1 | awk -v format="$cpu_percentage_format" '{usage=100-$NF} END {printf(format, usage)}' | sed 's/,/./'
1616
elif is_osx; then
17-
iostat -c 2 disk0 | sed '/^\s*$/d' | tail -n 1 | awk -v format="$cpu_percentage_format" '{usage=100-$6} END {printf(format, usage)}' | sed 's/,/./'
17+
cached_eval iostat -c 2 disk0 | sed '/^\s*$/d' | tail -n 1 | awk -v format="$cpu_percentage_format" '{usage=100-$6} END {printf(format, usage)}' | sed 's/,/./'
1818
elif is_freebsd || is_openbsd; then
19-
iostat -c 2 | sed '/^\s*$/d' | tail -n 1 | awk -v format="$cpu_percentage_format" '{usage=100-$NF} END {printf(format, usage)}' | sed 's/,/./'
19+
cached_eval iostat -c 2 | sed '/^\s*$/d' | tail -n 1 | awk -v format="$cpu_percentage_format" '{usage=100-$NF} END {printf(format, usage)}' | sed 's/,/./'
2020
else
2121
echo "Unknown iostat version please create an issue"
2222
fi
2323
elif command_exists "sar"; then
24-
sar -u 1 1 | sed '/^\s*$/d' | tail -n 1 | awk -v format="$cpu_percentage_format" '{usage=100-$NF} END {printf(format, usage)}' | sed 's/,/./'
24+
cached_eval sar -u 1 1 | sed '/^\s*$/d' | tail -n 1 | awk -v format="$cpu_percentage_format" '{usage=100-$NF} END {printf(format, usage)}' | sed 's/,/./'
2525
else
2626
if is_cygwin; then
27-
usage="$(WMIC cpu get LoadPercentage | grep -Eo '^[0-9]+')"
27+
usage="$(cached_eval WMIC cpu get LoadPercentage | grep -Eo '^[0-9]+')"
2828
printf "$cpu_percentage_format" "$usage"
2929
else
30-
load=`ps -aux | awk '{print $3}' | tail -n+2 | awk '{s+=$1} END {print s}'`
30+
load=`cached_eval ps -aux | awk '{print $3}' | tail -n+2 | awk '{s+=$1} END {print s}'`
3131
cpus=$(cpus_number)
3232
echo "$load $cpus" | awk -v format="$cpu_percentage_format" '{printf format, $1/$2}'
3333
fi

‎scripts/gpu_percentage.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ print_gpu_percentage() {
1010
gpu_percentage_format=$(get_tmux_option "@gpu_percentage_format" "$gpu_percentage_format")
1111

1212
if command_exists "nvidia-smi"; then
13-
loads=$(nvidia-smi)
13+
loads=$(cached_eval nvidia-smi)
1414
elif command_exists "cuda-smi"; then
15-
loads=$(cuda-smi)
15+
loads=$(cached_eval cuda-smi)
1616
else
1717
echo "No GPU"
1818
return

‎scripts/gram_percentage.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ print_gram_percentage() {
1010
gram_percentage_format=$(get_tmux_option "@gram_percentage_format" "$gram_percentage_format")
1111

1212
if command_exists "nvidia-smi"; then
13-
loads=$(nvidia-smi | sed -nr 's/.*\s([0-9]+)MiB\s*\/\s*([0-9]+)MiB.*/\1 \2/p')
13+
loads=$(cached_eval nvidia-smi | sed -nr 's/.*\s([0-9]+)MiB\s*\/\s*([0-9]+)MiB.*/\1 \2/p')
1414
elif command_exists "cuda-smi"; then
15-
loads=$(cuda-smi | sed -nr 's/.*\s([0-9.]+) of ([0-9.]+) MB.*/\1 \2/p' | awk '{print $2-$1" "$2}')
15+
loads=$(cached_eval cuda-smi | sed -nr 's/.*\s([0-9.]+) of ([0-9.]+) MB.*/\1 \2/p' | awk '{print $2-$1" "$2}')
1616
else
1717
echo "No GPU"
1818
return

‎scripts/helpers.sh

+41
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,44 @@ command_exists() {
6262
local command="$1"
6363
command -v "$command" &> /dev/null
6464
}
65+
66+
get_tmp_dir() {
67+
echo "${TMPDIR:-/tmp}/tmux-$EUID-cpu"
68+
}
69+
70+
get_time() {
71+
date +%s
72+
}
73+
74+
get_cache_val(){
75+
local key="$1"
76+
local timeout="${2:-1}" # default 1 second
77+
local cache="$(get_tmp_dir)/$key"
78+
if [ -f "$cache" ]; then
79+
awk -v cache="$(head -n1 "$cache")" -v timeout=$timeout -v now=$(get_time) \
80+
'BEGIN {if (now - timeout < cache) exit 0; exit 1}' \
81+
&& tail -n+2 "$cache"
82+
fi
83+
}
84+
85+
put_cache_val(){
86+
local key="$1"
87+
local val="${@:2}"
88+
local tmpdir="$(get_tmp_dir)"
89+
[ ! -d "$tmpdir" ] && mkdir -p "$tmpdir" && chmod 0700 "$tmpdir"
90+
echo "$(get_time)" > "$tmpdir/$key"
91+
echo -n "$val" >> "$tmpdir/$key"
92+
echo -n "$val"
93+
}
94+
95+
cached_eval(){
96+
local timeout=2 # seconds after which cache is invalidated
97+
local command="$2"
98+
local key="$(basename "$command")"
99+
local val="$(get_cache_val "$key" "$timeout")"
100+
if [ -z "$val" ]; then
101+
put_cache_val "$key" "$($command "${@:3}")"
102+
else
103+
echo -n "$val"
104+
fi
105+
}

‎scripts/ram_percentage.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ print_ram_percentage() {
1717
ram_percentage_format=$(get_tmux_option "@ram_percentage_format" "$ram_percentage_format")
1818

1919
if command_exists "free"; then
20-
free | awk -v format="$ram_percentage_format" '$1 ~ /Mem/ {printf(format, 100*$3/$2)}'
20+
cached_eval free | awk -v format="$ram_percentage_format" '$1 ~ /Mem/ {printf(format, 100*$3/$2)}'
2121
elif command_exists "vm_stat"; then
2222
# page size of 4096 bytes
23-
stats="$(vm_stat)"
23+
stats="$(cached_eval vm_stat)"
2424

2525
used_and_cached=$(echo "$stats" \
2626
| grep -E "(Pages active|Pages inactive|Pages speculative|Pages wired down|Pages occupied by compressor)" \

0 commit comments

Comments
 (0)
Failed to load comments.