#!/bin/bash

# (c) 2004-2009 - José Calhariz

#
#Script para verificar o espaço livre numa máquina.  Aqui ficam as
#funções auxiliares e em /etc/checkspace.d ficam pequenos scripts para
#verificar o espaço livre.
#

DF=/bin/df
FS=/usr/bin/fs
TAIL=/usr/bin/tail
AWK=/usr/bin/awk


function verbosemsg () {
    case $VERBOSE in 
	yes | YES)
	    echo $*
	    ;;
	*)
    esac
}

# checkspace - Verifica o espaço livre numa directoria.
# $1 - dir para verificar
# $2 - espaço minimo livre
# $3 - Mensagem em caso de aviso
function checkspace (){
    if [ ! -d $1 ] ; then 
	return 0;
    fi
    FREE=0
    FREE=`$DF -k -P $1 | $TAIL -1 | $AWK '{print $4}'`
    if [ 0$2 -ge 0$FREE ] ; then
	echo "Aviso: \"$1\" tem apenas $FREE KB livres, devia ter $2 KB. $3"
    fi
    verbosemsg "\"$1\" tem $FREE KB livres. $3"
}

# checkspace_afs - Verifica o espaço livre numa directoria em AFS
# $1 - dir para verificar
# $2 - espaço minimo livre
# $3 - Mensagem em caso de aviso
function checkspace_afs (){
    if [ ! -d $1 ] ; then 
	return 0;
    fi
    QUOTA=0
    USED=0
    QUOTA=`$FS examine $1 | grep quota | cut -d ' ' -f 5`
    USED=`$FS examine $1 | grep used | cut -d ' ' -f 5`
    FREE=0
    FREE=$(( QUOTA - USED))
    if [ 0$2 -ge 0$FREE ] ; then
	echo "Aviso: \"$1\" tem apenas $FREE KB livres, devia ter $2 KB. $3"
    fi
    verbosemsg "\"$1\" tem $FREE KB livres. $3"
}

# checkspace_afs_mail - Verifica o espaço livre numa directoria em AFS
# $1 - dir para verificar
# $2 - espaço minimo livre
# $3 - Mensagem em caso de aviso
# $4 - emails
function checkspace_afs_mail (){
    if [ ! -d $1 ] ; then 
	return 0;
    fi
    QUOTA=0
    USED=0
    QUOTA=`$FS examine $1 | grep quota | cut -d ' ' -f 5`
    USED=`$FS examine $1 | grep used | cut -d ' ' -f 5`
    FREE=0
    FREE=$(( QUOTA - USED))
    if [ 0$2 -ge 0$FREE ] ; then
	for mail in $4 ; do
	    echo "Aviso: \"$1\" tem apenas $FREE KB livres, devia ter $2 KB. $3"
	    /usr/sbin/sendmail -v $mail <<EOF
Subject: Aviso "$1" tem apenas $FREE KB livres, devia ter $2 KB.

 Aviso: "$1" tem apenas $FREE KB livres, devia ter $2 KB. 

$3
EOF
	done
    fi
    verbosemsg "\"$1\" tem $FREE livre. $3"
}

if [ "A$1" == "A-q" ] ; then
    VERBOSE=NO
else
    VERBOSE=YES
fi

source /etc/cal-scripts/checkspace.conf

checkspace /        300000 "Raiz precisa de estar livre"
checkspace /var/log 100000 "Espaço para guardar os logs"
checkspace /tmp     100000 "Espaço para temporários"

for s in /etc/cal-scripts/checkspace.d/check* ; do
    source "$s"
done
