
#!/bin/sh
# File	: linux-fs_chk.sh
# By	: MaartenDeBoer.nl,Maarten.deBoer@Atos.net
# Subject: Script to check the usage of (Linux-)FileSystems
#set -x
PGM=`basename $0|cut -d\. -f1`
VER="0.1"
HOSTNAME=`hostname|cut -d\. -f1`
LOG="${HOME}/log/${PGM}.log"
ETC="${HOME}/etc/${PGM}.${HOSTNAME}"
TMP="/tmp/${PGM}.$$"
MAIL=1
MAXLOGSIZE=1024   # In K's
SCRIPTVER=`echo ${VER} |cut -d\= -f2|cut -d\. -f1`
MAILTO="maarten.deboer@atos.net"
RCFILE="${HOME}/etc/${PGM}.rc" 

USAGE()
{
  echo "Usage: ${PGM} [-h] [-v] [-V] [-x] [-n] [--help] [--nomail] "
  echo "  Version: ${VER}"
  echo "  options:"
  echo "    -h : this help"
  echo "    -v : verbose"
  echo "    -V : Version"
  echo "    -x : set -x"
  echo "    -m : do send Mail"
  echo "    -n : do NOT send mail"
  echo "    --help          : this help"
  echo "    --nomail        : do NOT send mail"
}
if [ -f ${RCFILE} ]; then
  " RCFILE (${RCFILE}) found. Using it" |tee -a ${LOG}
  . ${RCFILE}
fi  # RCFILE
# Check options
while [ $# -gt 0 ]
do
  case ${1} in
    --nomail) MAIL="" ;;
    -n) MAIL="" ;;
    -m|--mail) MAIL=1 ;;
    -h | --help) USAGE; exit 1 ;;
    -v) VERBOSE=1 ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
    --mailto) MAILTO="${2}"; shift ;;
    *)  echo "  Option ${1} not known."; USAGE; exit 1;;
  esac
  shift
done

echo "`date` ${PGM} v${VER} started." | tee -a ${LOG}
echo "  PGM=${PGM}" 
echo "  VER=${VER}" 
echo "  LOG=${LOG}" 
echo "  MAILTO=${MAILTO}" 
echo "  MAIL=${MAIL}" 
sleep 1

# If exitcode <> 0 the /var/log/ not writable
touch ${LOG}
if [ $? != 0 ]; then
  LOG="/tmp/${PGM}.log"
  touch ${LOG}
  if [ $? != 0 ]; then
    echo "  ${LOG} is not writable. Exiting(2) ..."
    exit 2
  fi  # $?
fi  # $?
# Check & move LOG-file if longer then max.
touch ${LOG}
LOGSIZE=`du -ka ${LOG} | cut -f1`
if [ ${LOGSIZE} -ge ${MAXLOGSIZE} ]; then
  mv ${LOG} ${LOG}.old
  touch ${LOG}
  chmod 662 ${LOG}
  echo "  New ${LOG} file." | tee -a ${LOG}
fi

# find right mail program
if [ -f /usr/ucb/mail ]; then
  MAILCMD="/usr/ucb/mail"
fi
if [ -f /bin/mailx ]; then
  MAILCMD="/bin/mailx"
fi
if [ -f /bin/mail ]; then
  MAILCMD="/bin/mail"
fi
if [ -f /usr/bin/mailx ]; then
  MAILCMD="/usr/bin/mailx"
fi

rm -f ${TMP} 1> /dev/null 2>&1

# If local ETC-file, then use this file
if [ -f "${PGM}.etc" ]; then
  ETC="${PGM}.etc"
fi
if [ ! -f ${ETC} ]; then
  echo "  NO ETC-file (${ETC}) found. Creating one ..." | tee -a $LOG
  echo "# ${ETC}" > ${ETC}
  echo "# VERSION=${VER}" >> ${ETC}
  echo "# <FileSystem> : <max.> % " >> ${ETC}
  echo "`df -h --output=target,pcent|egrep '^/boot |^/ |^/home '|grep '%'|sed 's/%//g'|awk '{print $1":"$2}' `" >> ${ETC}
fi  # ETC

VERSION=`grep VERSION ${ETC}|cut -d\= -f2`
if [ "${VERSION}" != "${VER}" ]; then 
  echo "  Version of ETC-file (${ETC}) is not equal to ${VER}. Exiting(3) ..." | tee -a ${LOG}
  exit 3
fi  # if VERSION

cat ${ETC} | grep -v '^#' | while read LINE
do
  FS=`echo ${LINE} | awk -F\: '{print $1}'`
  MAX_USAGE="`echo ${LINE} | awk -F\: '{print $2}'`"
  ACT_USAGE="`df -k | awk '{print $5,$6,":"}' | grep \"$FS :\" | cut -d'%' -f1`"
  if [ "${ACT_USAGE}" -gt "${MAX_USAGE}" ]; then
    echo "  The disk usage of ${HOSTNAME}:${FS} is to high (${ACT_USAGE}% > ${MAX_USAGE}%) " | tee -a ${TMP} | tee -a ${LOG}
  fi
done  # LINE

if [ -s ${TMP} ] ; then  # If size > 0
  if [ ${MAIL} ]; then
    echo "  Options: MAIL=${MAIL} MAILTO=${MAILTO}" | tee -a ${TMP}
    ${MAILCMD} -s "${HOSTNAME}: Some FileSystem Usage to HIGH [${PGM} v${VER}]" ${MAILTO} < ${TMP}
    echo "  Mailed to ${MAILTO}." | tee -a $LOG
  fi  # MAIL
fi  # TMP

rm -f ${TMP}
echo "`date` ${PGM} v${VER} finished." | tee -a ${LOG}
exit 0

