#!/bin/sh -e
#
#    mem_swap: show the current swap available and used
#
#    Copyright (C) 2010 Canonical Ltd.
#    Copyright (C) 2011-2014 Dustin Kirkland
#
#    Authors: Dustin Kirkland <kirkland@byobu.org>
#
#    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 <http://www.gnu.org/licenses/>.

__swap_detail() {
	if [ -r /proc/meminfo ]; then
		cat /proc/meminfo
	elif [ "$BYOBU_OSTYPE" = "OpenBSD" ]; then
		swapctl -l 2>/dev/null
	fi
}

__swap() {
	local stotal="" sfree="" name="" val="" unit="" mem="" f="";
	if [ "$BYOBU_OSTYPE" = "OpenBSD" ]; then
		# OpenBSD: use swapctl -sk for summary in kB
		local swapline sused
		swapline=$(swapctl -sk 2>/dev/null | tail -1)
		if [ -n "$swapline" ]; then
			# swapctl -sk Total line: "Total: <total_kb> <used_kb> <avail_kb> <pct>%"
			set -- $swapline
			stotal="${2:-0}"
			sused="${3:-0}"
			sfree=$(($stotal - $sused))
		fi
	elif [ -r /proc/meminfo ]; then
		while read name val unit; do
			if [ "$name" = "SwapTotal:" ]; then
				stotal="$val"
			elif [ "$name" = "SwapFree:" ]; then
				sfree="$val"
			else
				continue
			fi
			[ -n "$stotal" -a -n "$sfree" ] && break;
		done < /proc/meminfo
	fi
	if [ "${stotal:-0}" = "0" ]; then
		printf ""
		rm -f "$BYOBU_RUN_DIR/status.$BYOBU_BACKEND/swap"
	else
		mem=${stotal}
		f=$(((100*($stotal-$sfree))/$stotal))
		if [ $mem -ge 1048576 ]; then
		fpdiv "${mem}" 1048576 1
			mem=${_RET}
			unit="$ICON_GB"
		elif [ $mem -ge 1024 ]; then
			fpdiv "${mem}" 1024 0
			mem=${_RET}
			unit="$ICON_MB"
		else
			mem="$mem"
			unit="$ICON_KB"
		fi
		[ -n "$mem" ] || return
		color b G k; printf "s%s" "$mem"; color -; color G k; printf "%s" "$unit"; color -;
		color b G k; printf "%s" "$f"; color -; color G k; printf "%s" "$PCT"; color --
	fi
}

# vi: syntax=sh ts=4 noexpandtab
