#!/bin/sh -e # # mem_available: grab the current memory and usage # # Copyright (C) 2008 Canonical Ltd. # Copyright (C) 2011-2014 Dustin Kirkland # # Authors: Dustin Kirkland # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . __memory_detail() { free } __memory() { local free="" total="" buffers="" cached="" local kb_main_used=0 buffers_plus_cached=0 fo_buffers=0 fo_cached=0 if [ -r /proc/meminfo ]; then while read tok val unit; do case "$tok" in MemTotal:) total=${val};; MemFree:) free=${val};; Buffers:) buffers=${val};; Cached:) cached=${val};; esac [ -n "${free}" -a -n "${total}" -a -n "${buffers}" -a -n "${cached}" ] && break; done < /proc/meminfo elif $BYOBU_TEST vm_stat >/dev/null 2>&1; then # MacOS support # calculation borrowed from http://apple.stackexchange.com/a/48195/18857 free_blocks=$(vm_stat | grep free | awk '{ print $3 }' | sed -e 's/\.//') inactive_blocks=$(vm_stat | grep inactive | awk '{ print $3 }' | sed -e 's/\.//') speculative_blocks=$(vm_stat | grep speculative | awk '{ print $3 }' | sed -e 's/\.//') free=$((($free_blocks+speculative_blocks)*4)) inactive=$(($inactive_blocks*4)) total=$((($free+$inactive))) buffers=0 cached=0 fi kb_main_used=$(($total-$free)) buffers_plus_cached=$(($buffers+$cached)) # "free output" buffers and cache (output from 'free') fo_buffers=$(($kb_main_used - $buffers_plus_cached)) fpdiv $((100*${fo_buffers})) "${total}" 0; usage=${_RET} if [ $total -ge 1048576 ]; then fpdiv "$total" 1048567 1 total=${_RET} unit="$ICON_GB" elif [ $total -ge 1024 ]; then fpdiv "$total" 1024 0 total=${_RET} unit="$ICON_MB" else unit="$ICON_KB" fi if [ $usage -gt 90 ]; then # Change foreground to yellow, if usage over 90% fg="Y" else fg="W" fi [ -n "$total" ] || return color b g W; printf "%s" "$total"; color -; color g W; printf "%s" "$unit"; color -; color b g "$fg"; printf "%s" "$usage"; color -; color g "$fg"; printf "%s" "$PCT"; color -- } # vi: syntax=sh ts=4 noexpandtab