machine_setup/ansible/roles/waybar/files/waybar_scripts/waybar_available_memory_freebsd.bash
2023-08-25 18:11:02 -04:00

43 lines
1.2 KiB
Bash

#!/usr/bin/env bash
#
# Read memory usage in FreeBSD
set -euo pipefail
IFS=$'\n\t'
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SLEEP_INTERVAL=${SLEEP_INTERVAL:-30}
while true; do
# TODO: Why not vm.stats.vm.v_page_size ? Are these the same?
total_pages=$(sysctl -n vm.stats.vm.v_page_count)
page_size=$(sysctl -n hw.pagesize)
active=$(sysctl -n vm.stats.vm.v_active_count)
inactive=$(sysctl -n vm.stats.vm.v_inactive_count)
in_use_pages=$((active + inactive))
free_pages=$((total_pages - in_use_pages))
free_bytes=$((page_size * free_pages))
free_percent=$((100 * free_pages / total_pages))
text=""
if [ $free_bytes -ge $((1024 * 1024 * 1024)) ]; then
text="$((free_bytes / 1024 / 1024 / 1024)) GiB"
elif [ $free_bytes -ge $((1024 * 1024)) ]; then
text="$((free_bytes / 1024 / 1024)) MiB"
elif [ $free_bytes -ge 1024 ]; then
text="$((free_bytes / 1024)) KiB"
else
text="$(free_bytes) B"
fi
tooltip="${free_percent}%"
jq --unbuffered --compact-output <<EOF
{
"text":"${text}",
"tooltip":"${tooltip}",
"percentage":${free_percent}
}
EOF
sleep $SLEEP_INTERVAL
done