
#!/bin/sh
# File	: server_chk.sh
# By	: Maarten.deBoer@Atos.net, 250915
# Subject	: Scripot to check access to Linux-servers
#(0.2),250915	: Add OS-release
#(0.3),260216	: Renamed from linux-access_chk.sh, Add uptime (for checking load)
#(0.4),260216	: Added IP_ADDR, FILTER
#(0.5),260623	: From linux-server_chk.sh. Now also for Windows-server (ping) chk, Add STATUS
#(0.6),260813	: Add SUM in mail body
PGM=`basename $0|cut -d\. -f1`
VER="0.6"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
SSH="/usr/bin/ssh -o ConnectTimeout=10 -n"
CSV="${HOME}/data/${PGM}.csv"
MAILTO="maarten.deboer@atos.net"
HOSTNAME=`hostname |cut -d\. -f1`
FILTER="[?]*"
STATUS="" 

SERVERS="${HOME}/etc/servers"

if [ "${1}" != "" ]; then
  FILTER="${1}"
fi 

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

touch ${TMP}
echo "# Server-name;IP-addr used;Comment;Status;RedHat-release;Uptime;" > ${CSV}
cat ${SERVERS}|grep -v ^#|grep "${FILTER}"|while read LINE
do
#  echo "${LINE}"
  SERVER=`echo ${LINE} | cut -d\# -f1`
  COMMENT=`echo ${LINE} | cut -d\# -f2-`
  STATUS="NO ping"
  RHEL=""
  UPTIME=""
  /usr/bin/ping -c 2 ${SERVER} > ${TMP}
  EC=${?}
#  IP_ADDR=`grep PING ${TMP}|egrep -v '127'|egrep '10|161'|cut -d\( -f2 |cut -d\) -f1|head -1`
  IP_ADDR=`grep PING ${TMP}|egrep '127|10|161'|cut -d\( -f2 |cut -d\) -f1|head -1`
  echo "  PING: SERVER=${SERVER} IP_ADDR=${IP_ADDR} COMMENT=${COMMENT} EC=${EC}"
sleep 1
  if [ ${EC} -eq 0 ]; then
    STATUS="Ping OK"
    if [ "${IP_ADDR}" != "" ]; then
      ${SSH} ${IP_ADDR} "hostname"
      EC=${?}
#  VERSION_ID=`${SSH} ${SERVER} "cat /etc/os-release"|grep ^VERSION_ID|cut -d\= -f2`
      if [ ${EC} = 0 ] ;then
        STATUS="SSH OK"
        RHEL=`${SSH} ${IP_ADDR} "cat /etc/redhat-release"`
        UPTIME=`${SSH} ${IP_ADDR} "/usr/bin/uptime"`
      fi  # EC=0
      echo "    EC=${EC} RHEL=${RHEL} UPTIME=${UPTIME}|"
    fi  # IP_ADDR
  fi  # PING

  echo "${SERVER};${IP_ADDR};${COMMENT};${STATUS};${RHEL};${UPTIME};" >> ${CSV}
done  # SERVER

if [ "${MAILTO}" != "" ]; then
  NO_PING_CNT=`grep -ic "no ping" ${CSV}`
  PING_OK_CNT=`grep -ic "ping ok" ${CSV}`
  SSH_OK_CNT=`grep -ic "ssh ok" ${CSV}`

  echo "`date` : NO_PING_CNT=${NO_PING_CNT} PING_OK_CNT=${PING_OK_CNT} SSH_OK_CNT=${SSH_OK_CNT} " | mailx -a ${CSV} -s ":${HOSTNAME}: CSV report of server check [${PGM} v${VER}]" "${MAILTO}"
  EC=${?}
  echo "  Mailed(${EC}) to ${MAILTO}"|tee -a ${LOG}
fi  # MAILTO

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

