
#!/bin/sh
# File	: mail-status.sh
# By	: MaartenDeBoer.nl, 161220
# Subject	: Scripts to mail the status
#(0.2)	: Mod. DF-H & add FINGER
#(0.3)	: Mod; delete paths
#(0.4)	: Added INETIP
#(0.5)	: Add speedtest-cli
#(0.6),180228	: Added `hostname -I` + UNAME-A
#(0.7),180301	: Added RCFILE, APPLICS
#(0.8),180301	: Added who
#(0.9),191203	: Added ${PGM}.hosts to check (ping) other hosts too
#(0.10),230222	: Added remote check
PGM="`basename $0|cut -d\. -f1`"
VER="0.10"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
HOSTNAME="`hostname|cut -d\. -f1`"
MAILTO="maarten@agrarix.net nl19471@nlxsdp01.bcklan.ao-srv.com"
#SPEEDTEST="/usr/local/bin/speedtest-cli"
SPEEDTEST=""
RCFILE="${HOME}/etc/${PGM}.rc"
APPLICS=""
HOSTS="${HOME}/etc/${PGM}.hosts"
REM_HOSTS="${HOME}/etc/${PGM}.rem-hosts"
SSH="/usr/bin/ssh -n"

if [ -f ${RCFILE} ]; then
  echo "  Using RCFILE (${RCFILE})"|tee -a ${LOG}
  . ${RCFILE}
fi

touch ${TMP}
echo "HOSTNAME=`hostname`" >> ${TMP}
echo "UPTIME=`uptime`" >> ${TMP}
echo "<FINGER>" >> ${TMP}
echo "`finger`" >> ${TMP}
echo "</FINGER>" >> ${TMP}
echo "<DF-H>" >> ${TMP}
echo "`/bin/df -h`" >> ${TMP}
echo "</DF-H>" >> ${TMP}
echo "<WHO>" >> ${TMP}
echo "`/usr/bin/who`" >> ${TMP}
echo "</WHO>" >> ${TMP}
echo "DATISTRUTC=`date +%Y%m%d%H%M%S --utc`" >> ${TMP}
echo "HOSTNAME-I=`hostname -I`" >> ${TMP}
echo "UNAME-A=`uname -a`" >> ${TMP}
echo "UNAME-R=`uname -r`" >> ${TMP}
echo "UNAME-V=`uname -v`" >> ${TMP}
echo "DMESG-MODEL=`dmesg|grep model|head -1`" >> ${TMP}
wget -q -U "${PGM} v${VER}" -O ${TMP}.ip ip.changeip.com
INETIP="`cat ${TMP}.ip|grep -v IP|grep [1..0]`"
echo "INETIP=${INETIP}" |tee -a ${TMP}
echo "PGM=${PGM} v${VER}" >> ${TMP}

if [ -f ${SPEEDTEST} ]; then
  ${SPEEDTEST} --simple >> ${TMP}.s
#Ping: 9.814 ms
#Download: 37.89 Mbit/s
#Upload: 70.42 Mbit/s
  cat ${TMP}.s
  echo "SPEEDTEST-PING=`grep Ping ${TMP}.s|cut -d\: -f2`" >> ${TMP}
  echo "SPEEDTEST-DOWNLOADSD=`grep Download ${TMP}.s|cut -d\: -f2`" >> ${TMP}
  echo "SPEEDTEST-UPLOAD=`grep Upload ${TMP}.s|cut -d\: -f2`" >> ${TMP}
  rm ${TMP}.s
else
  echo "SPEEDTEST=NO" >> ${TMP}
fi  # SPEEDTEST
echo "APPLICS=${APPLICS}" >> ${TMP}

# When other hosts, then check (ping) them
if [ -f ${HOSTS} ]; then
  echo "  Found HOSTS-file (${HOSTS}). Using it ..."|tee -a ${LOG}
  cat ${HOSTS}|grep -v ^#|awk '{print $1,$2}'|while read HOSTS_IP HOSTS_NAME REST
  do
    ping -c 2 ${HOSTS_IP}
    EC=${?}
    echo "CHECK-HOSTS:${HOSTS_NAME}(${HOSTS_IP})=${EC}"|tee -a ${TMP}

  done  # cat ...
fi

if [ "${MAILTO}" != "" ]; then
  cat ${TMP}|mailx -s "status:${HOSTNAME}" ${MAILTO}
  echo "  Mailed to ${MAILTO}"|tee -a ${LOG}
  echo "" > ${TMP}
fi

if [ -f ${REM_HOSTS} ]; then
  echo "  REM_HOSTS=${REM_HOSTS}"
  cat ${REM_HOSTS}|grep -v ^#|awk '{print $1}'|while read REM_HOST
  do
    echo "  REM_HOST=${REM_HOST}"

    echo "HOSTNAME=`${SSH} ${REM_HOST} 'hostname'`" >> ${TMP}
    echo "UPTIME=`${SSH} ${REM_HOST} 'uptime'`" >> ${TMP}
    echo "<FINGER>" >> ${TMP}
    echo "`${SSH} ${REM_HOST} 'finger'`" >> ${TMP}
    echo "</FINGER>" >> ${TMP}
    echo "<DF-H>" >> ${TMP}
    echo "`${SSH} ${REM_HOST} '/bin/df -h'`" >> ${TMP}
    echo "</DF-H>" >> ${TMP}
    echo "<WHO>" >> ${TMP}
    echo "`${SSH} ${REM_HOST} '/usr/bin/who'`" >> ${TMP}
    echo "</WHO>" >> ${TMP}
    echo "DATISTRUTC=`${SSH} ${REM_HOST} 'date +%Y%m%d%H%M%S --utc'`" >> ${TMP}
    echo "HOSTNAME-I=`${SSH} ${REM_HOST} 'hostname -I'`" >> ${TMP}
    echo "UNAME-A=`${SSH} ${REM_HOST} 'uname -a'`" >> ${TMP}
    echo "UNAME-R=`${SSH} ${REM_HOST} 'uname -r'`" >> ${TMP}
    echo "UNAME-V=`${SSH} ${REM_HOST} 'uname -v'`" >> ${TMP}
    echo "DMESG-MODEL=`${SSH} ${REM_HOST} 'dmesg|grep model|head -1'`" >> ${TMP}

    ${SSH} ${REM_HOST} 'wget -q -U "${PGM} v${VER}" -O /tmp/${PGM}.ip ip.changeip.com'
    REM_INETIP="`${SSH} ${REM_HOST} 'cat /tmp/${PGM}.ip|grep -v IP|grep [1..0]'`"
    echo "INETIP=${REM_INETIP}" |tee -a ${TMP}

    echo "PGM=${PGM} v${VER}" >> ${TMP}

    echo "APPLICS=`grep ${REM_HOST} ${REM_HOSTS}|cut -d\# -f2|awk '{print $1}'`" >> ${TMP}

    if [ "${MAILTO}" != "" ]; then
      HOSTNAME=`${SSH} ${REM_HOST} 'hostname|cut -d\. -f1'`
      cat ${TMP}|mailx -s "status:${HOSTNAME}" ${MAILTO}
      echo "  Mailed (${HOSTNAME}) to ${MAILTO}"|tee -a ${LOG}
      echo "" > ${TMP}
    fi  # MAILTO

  done  # REM_HOST

fi  # REM_HOSTS


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

