
#!/bin/sh
# File	: rpt_oplocks.sh
# By	: Maarten.deBoer@Atos.net, 140114
# Subject	: Report vscan (@vfilers) items
#(0.1)	: copied from rpt_vscan.sh
#(0.2)	: date +%e (in stead of +%d)
PGM="`basename $0|cut -d\. -f1`" 
VER="0.2"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
FILERS="${HOME}/etc/filers"
SSH="/usr/bin/ssh -n"
HOSTNAME="`hostname|cut -d\. -f1`"
MAILTO="maarten.deboer@atos.net"
DATI="`date +%Y-%m-%d_%H-%M`"
CSV="/tmp/FSOD-oplock-report_${DATI}.csv"
FILTER="[1234567890]*"
CUSTCODE="[1234567890]*"
MAIL=""
MONSTR="`date +%b`" 
DAYNR="`date +%e` " 
MSGLOG=""

USAGE()
{
  echo "Usage: ${PGM} [<options>]"
  echo "  Version: ${VERSION}"
  echo "  options:"
  echo "    -c          : Custromer code (${CUSTCODE})"
  echo "    -d          : Daynr (${DAYNR})"
  echo "    -e          : Etc/filers (${FILERS})"
  echo "    -f          : Filter filername (${FILTER})"
  echo "    -h | --help : this help"
  echo "    -l          : send messagesLog per vfiler"
  echo "    -m | --mail : do send mail"
  echo "    -V          : Version"
  echo "    -x          : set -x"
  echo "    --mailto    : change MAILTO address & do send mail (${MAILTO})"
  echo "    --msglog    : send MeSsaGes LOG of vfiler"
  echo "    --noday     : do NOt check at DAYnumber in /etc/messages file"
}
# Check options
while [ $# -gt 0 ]
  do
  case $1 in
    -c) CUSTCODE=${2}; shift ;;
    -d) DAYNR="${2} "; shift ;;
    -e) FILERS=${2}; shift ;;
    -f) FILTER=${2}; shift ;;
    -l | --msglog) MAIL=1; MSGLOG=1;;
    -h | --help) USAGE; exit 1 ;;
    -m | --mail) MAIL=1 ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    --mailto) MAILTO=$2; MAIL=1; shift ;;
    --noday) DAYNR="";;
    -x)  set -x ;;
    *)  echo "Option $1 not known."; USAGE; exit 1 ;;
  esac
    shift
done

echo "${PGM} v${VER}"
echo "CSV = ${CSV}"
echo "CUSTCODE = ${CUSTCODE}"
echo "DAYNR = ${DAYNR}"
echo "FILERS = ${FILERS}"
echo "FILTER = ${FILTER}"
echo "HOSTNAME = ${HOSTNAME}"
echo "MAILTO = ${MAILTO}"

touch ${TMP} ${LOG} ${CSV} ${TMP}.asc ${TMP}.mail
echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
echo "# Filer;Vfiler;CO Warn;CO Err;CS OpLkBkNoBreakAck;CS OpLkBkNoBreakAck95;CS OpLkBkNoBreakAckNT;VFO cifs.oplocks.opendelta;Remark(s);" > ${TMP}
for FILER in `cat ${FILERS}|grep -v \^#|grep ${FILTER}`
do
  echo -n "${FILER}"|tee -a ${TMP}
  ${SSH} ${FILER} rdfile /etc/messages > ${TMP}.msg

  ${SSH} ${FILER} vfiler status|grep running|grep -v vfiler0|awk '{print $1}'|grep ${CUSTCODE}|while read VFILER
  do
    echo -n ";${VFILER};"|tee -a ${TMP}

    WARNCNT="`grep \" ${DAYNR}\" ${TMP}.msg|grep ${VFILER}|grep 'cifs.oplock'|grep ':warning'|wc -l`"
    ERRORCNT="`grep \" ${DAYNR}\" ${TMP}.msg|grep ${VFILER}|grep 'cifs.oplock'|grep ':error'|wc -l`"
    echo -n "${WARNCNT};${ERRORCNT};"|tee -a ${TMP}

# Check for OpLkBkNoBreakAck, OpLkBkNoBreakAck95, OpLkBkNoBreakAckNT     
    OLBNBA="`${SSH} ${FILER} vfiler run -q ${VFILER} cifs stat|grep 'OpLkBkNoBreakAck '|awk '{print $2}'`"
    OLBNBA95="`${SSH} ${FILER} vfiler run -q ${VFILER} cifs stat|grep 'OpLkBkNoBreakAck95 '|awk '{print $2}'`"
    OLBNBANT="`${SSH} ${FILER} vfiler run -q ${VFILER} cifs stat|grep 'OpLkBkNoBreakAckNT '|awk '{print $2}'`"
    echo -n "${OLBNBA};${OLBNBA95};${OLBNBANT};"|tee -a ${TMP}

# Check for vfiler options cifs.oplocks.opendelta
    OCOO="`${SSH} ${FILER} vfiler run -q ${VFILER} options cifs.oplocks.opendelta|awk '{print $2}'`"
    echo -n "${OCOO};"|tee -a ${TMP}

    if [ ${MSGLOG} ]; then 
      if [ ${WARNCNT} -gt 0 ]; then
        grep " ${DAYNR}" ${TMP}.msg|grep ${VFILER}|grep 'cifs.oplock'|grep ':warning' > ${TMP}.asc
        date|mailx -a ${TMP}.asc -s "@${HOSTNAME}: Oplock Warnings of vfiler ${VFILER} [${PGM} v${VER}]" ${MAILTO}
        echo -n "Warn-Msg-Log send;"|tee -a ${TMP}
      fi  # WARNCNT
      if [ ${ERRORCNT} -gt 0 ]; then
        grep " ${DAYNR}" ${TMP}.msg|grep ${VFILER}|grep 'cifs.oplock'|grep ':error' > ${TMP}.asc
        date|mailx -a ${TMP}.asc -s "@${HOSTNAME}: Oplock Errors of vfiler ${VFILER} [${PGM} v${VER}]" ${MAILTO}
        echo -n "Err-Msg-Log send;"|tee -a ${TMP}
      fi  # ERRORCNT
    fi  # MSGLOG

    echo ""|tee -a ${TMP}

  done  # VFILER

done  # for FILER

if [ -s ${TMP} ] && [ ${MAIL} ]; then
  echo "# ${PGM} v${VER}" >> ${TMP}.mail
  echo "# `date` @${HOSTNAME}" >> ${TMP}.mail
  echo "# CSV = ${CSV}" >> ${TMP}.mail
  echo "# CUSTCODE = ${CUSTCODE}" >> ${TMP}.mail
  echo "# DAYNR = ${DAYNR}" >> ${TMP}.mail
  echo "# FILERS = ${FILERS}" >> ${TMP}.mail
  echo "# FILTER = ${FILTER}" >> ${TMP}.mail
  echo "# MAILTO = ${MAILTO}" >> ${TMP}.mail

  cp ${TMP} ${CSV}
  echo "" >> ${CSV}
  cat ${TMP}.mail >> ${CSV}
  cat ${TMP}.mail|mailx -a ${CSV} -s "@${HOSTNAME}: Oplock reporting [${PGM} v${VER}]" ${MAILTO}
  echo "`date` ${PGM} v${VER} mailed to ${MAILTO}."|tee -a ${LOG}
fi  # -s ${TMP}

echo "`date` ${PGM} v${VER} finished."|tee -a ${LOG}
rm ${TMP} ${CSV} ${TMP}.msg ${TMP}.mail
#${TMP}.asc
exit 0

