#!/bin/bash
#
# __copy1__
# __copy2__
#
# checks for disk free space against trigger values
#
# returns 0 if ALL of the given filesystems are below the
# related value, 1 if AT LEAST one of the is over
#
# returns 0 on syntax error (to avoid false positives!)
#
CMD=${CMD:-"$0"}
DEBUG=${DEBUG:-"false"}

TIMEFRAME=3600
TEMPDIR=${TEMPDIR:-"/tmp"}
STATFILE="$TEMPDIR/$(basename $0).stats"
FLAGFILE="$TEMPDIR/$(basename $0).lastseen"

usage()
{
	echo "usage: $0 [--timeframe seconds] filesystem1 value {filesystem2 value2 ...}" >&2
	exit 255
}

do_check_fs()
{
	local fs=
	local min=
	local free=
	local stat=0

	cp /dev/null $STATFILE

	while [ $# != 0 ]
	do
		[ $# -lt 2 ] && {
			usage
			return 0
		}
		fs=$1 ; shift
		min=$1 ; shift
		free=`df -k $fs | tail -1 | awk '{ print $4; }'`
		[ $free -le $min ] && {
			logger -s -t $CMD "free space low on $fs (free space $free, min $min) !!"
			echo " $fs free_space=$free needed=$min" >>$STATFILE
			stat=1
		}
	done
	return $stat
}


# (MAIN)


[ "X$1" == "X--timeframe" ] && {
	[ $# -lt 3 ] && usage
	shift
	TIMEFRAME=$1
	shift
}

[ $# -lt 2 ] && usage

do_check_fs $* && exit 0


if [ -f $FLAGFILE ]
then
	time_created=$(stat --format '%Y' $FLAGFILE)
	now=$(date '+%s')

	diff=$(expr $now - $time_created)
	[ $diff -gt $TIMEFRAME ] && rm $FLAGFILE
fi

if [ ! -f $FLAGFILE ]
then
	cp /dev/null $FLAGFILE
	exit 1
fi

exit 0
