
#!/bin/bash
# File: ocum-alert2nagios-sdm.sh
# Owner: Adrian Corici <viorel-adrian.corici@atos.net>
# Author: Atos
#       * Claudiu Nesa <claudiu.nesa@atos.net>
#       * Bogdan Nyari <bogdan.nyari@atos.net>
#	* Maarten de Boer <maarten.deboer@atos.net> 
# Support: Ro Cloud Development Team <dl-ro-cloud-dev@atos.net>
# Release date: 24.05.2017
# Version: 0.9 (pre-stable)
# Description	: Script to forward OCUM alerts to Nagios (to SDM)
#(0.10),171102	: Mod some var's & Added SDM12.9 part. & changed name to ocum-alert2nagios-sdm.sh
#(0.11),171213	: Added HOSTNAME & chk for no empty grep
#(0.12),180227	: Added create_sdm-ticket.sh
#(0.13),180716	: Added MAILTOSEV2 & sleep 1
#(0.14),180925	: Changed check on nlnaf10[67] -> CREATE SDM ticket
#
PGM=$(basename $0|cut -d\. -f1)
VER="0.14"
LOG="/var/log/ocum/${PGM}.log"
TMP="/tmp/${PGM}.tmp"
#LOG="/tmp/ocum/${PGM}.log"
HOSTNAME=`hostname|cut -d\. -f1`
#MAILTOSEV2="maarten.deboer@atos.net agrarix2@xs4all.nl"
MAILTOSEV2="maarten.deboer@atos.net"

# Some init-VAR's
#
# For SDM12.9
#SDMCLASS="ZZ-Event.Storage.NAS.Offshore-onshore-mixed Netapp"
SDMCLASS="ZZ-Event.Storage.Storage"
MONIDHDR="MAS.NL.1"
ONTAPARCH="[cdot]"
#NAGIOSPASSIVEDIR="/opt/netapp/ocum/nagios/PassiveCheck/DVL"
NAGIOSPASSIVEDIR="/opt/netapp/ocum/nagios/PassiveCheck/PRD"
# Create read-only user
OCUMUSER="ocum-readonly"
OCUMPWD="Readonly-0cum"
CREATESDMTICKET="/home/aodfm01a/bin/create_sdm-ticket.sh"

echo "`date` @ ${HOSTNAME}" > ${TMP}

# OCUM Variables default values
eventID=""
eventName=""
eventSeverity=""
eventSourceID=""
eventSourceName=""
eventSourceType=""
eventState=""
eventArgs=""
eventDate=$(/bin/date +'%Y-%m-%d-%H-%M-%S')
# Inititalize the eventSeverityID variable
eventSeverityID=""
# Nagios file
nagiosFile="${NAGIOSPASSIVEDIR}/${eventDate}"

# Initialize row variable
ROW=""
# SDM (12.9) specific variables
MONID=""

# Capturing the OCUM variables passed as script arguments
while [ $# -gt 0 ]
do
    case $1 in
        -eventID)
            eventID=$2
            ;;
        -eventName)
            eventName=$2
            ;;
        -eventSeverity)
            eventSeverity=$2
            ;;
        -eventSourceID)
            eventSourceID=$2
            ;;
        -eventSourceName)
            eventSourceName=$2
            ;;
        -eventSourceType)
            eventSourceType=$2
            ;;
        -eventState)
            eventState=$2
            ;;
        -eventArgs)
            eventArgs=$2
            ;;
    esac
    shift
    shift
done

# Altering log file date
touch ${LOG}
chmod 666 ${LOG}

echo "Event timestamp=${eventDate}" >> ${LOG}
echo "eventID=${eventID}" >> ${LOG}
echo "eventName=${eventName}" >> ${LOG}
echo "eventSeverity=${eventSeverity}" >> ${LOG}
echo "eventSourceID=${eventSourceID}" >> ${LOG}
echo "eventSourceName=${eventSourceName}" >> ${LOG}
echo "eventSourceType=${eventSourceType}" >> ${LOG}
echo "eventState=${eventState}" >> ${LOG}
echo "eventArgs=${eventArgs}" >> ${LOG}
echo "--------------------------------------" >> ${LOG}

# Grouping the event severity from OCUM to a number for SDM/SNOW trough Nagios
case $eventSeverity in
    normal)
        eventSeverityID="0"
        ;;
    information)
        eventSeverityID="0"
        ;;
    warning)
        eventSeverityID="1"
        ;;
    error)
        eventSeverityID="2"
        ;;
    emergency)
        eventSeverityID="2"
        ;;
    critical)
        eventSeverityID="2"
        ;;
esac

# Extracting the CI out of the eventSourceName param. And lower all, for SDM
CI=$(echo $eventSourceName | cut -d":" -f1 | tr [:upper:] [:lower:])

# SNOW specific
#while read filer id; do
#  if [ $filer == ${CI} ]; then
#    MONID=$id
#  fi
#done < ${CIID}

# Adding some info at the MONID
# By checking if CI is in the `cluster list`|`cluster node list`|`cluster svm list`
#
LOGINANSW="`/usr/bin/um cli login -u ${OCUMUSER} -p ${OCUMPWD}`"
echo "LOGINANSW=${LOGINANSW}" >> ${TMP}

if [ "${LOGINANSW}" != "" ] && [ "${CI}" != "" ]; then
  CLUSTERFND=`/usr/bin/um cluster list -q|awk '{print $2}'| grep ${CI}`
  echo "CLUSTERFND=${CLUSTERFND}" >> ${TMP}
  if [ "${CLUSTERFND}" = "" ]; then
#   CI is no cluster, check for node
    NODEFND=`/usr/bin/um cluster node list -q|awk '{print $2}'| grep ${CI}`
    echo "NODEFND=${NODEFND}" >> ${TMP}
    if [ "${NODEFND}" = "" ]; then
# Sort out only ONE result. Leave out -dr
      SVMFND=`/usr/bin/um svm list -q|awk '{print $2}'|grep ${CI}|sort|head -1`
      echo "SVMFND=${SVMFND}" >> ${TMP}
      if [ "${SVMFND}" = "" ]; then
      # CI is none, so hostname is used
        MONID="${MONIDHDR}.${HOSTNAME}"
      else
      # CI is SVM
        MONID="${MONIDHDR}.${CI}-VST"
      fi  # SVMFND
    else
    # CI is Node
      MONID="${MONIDHDR}.${CI}-SOS"
    fi  # NODEFND
  else
  # CI is Cluster
    MONID="${MONIDHDR}.${CI}-PLF"
# 180227,MdB: MONID with -PLF has problems in the line Nagios -> SDM. So we use IMI to gen. tickets
# 180925,MdB: Now only -PLF "problems" with nlnaf10[67]. So check for nlnaf10[67], then create SDM-ticket via IMI
    CHKCI=`echo "${CI}"|grep nlnaf10[67]-PLF`
    if [ "${CHKCI}" != "" ]; then
      ${CREATESDMTICKET} --imi --ci ${CI} --sev 3 --msg "${eventName} ${eventArgs} DFM_EVENT_ID=${eventID} (${eventDate}@${HOSTNAME})."
      echo "`date` ${CREATESDMTICKET} --imi --ci ${CI} --sev 3 --msg \"${eventName} ${eventArgs} DFM_EVENT_ID=${eventID} (${eventDate}@${HOSTNAME}).\" "|tee -a ${LOG}
    else
      echo "`date` No nlnaf10[67]-PLF. So NO CREATESDMTICKET"|tee -a ${LOG}
    fi  # "${CHKCI}" != ""
  fi  # CLUSTERFND

fi  # ${LOGINANSW}

# If MONID=""
if [ "${MONID}" = "" ]; then
  MONID="${MONIDHDR}.${HOSTNAME}"
fi  # MONID
echo "MONID=${MONID}" >> ${TMP}

# Example (SDM12.9)
# 0|CI=aoxnlfsd02 [cdot] User Files Soft Limit Not Exceeded  DFM_EVENT_ID=198002 (2017-11-02-00-39-28).|MONID=MAS.NL.1.aoxnlfsd02;CLASS=ZZ-Event.Storage.Storage;
# 0|CI=nlnafsmnp11 [cdot] Qtree Growth Rate Abnormal nlnafsmnp11:/mnp11_vol01001/groups7 DFM_EVENT_ID=198004 (2017-11-02-08-31-04).|MONID=MAS.NL.1.nlnafsmnp11-VST;CLASS=ZZ-Event.Storage.Storage 

# Priority column
ROW+="${eventSeverityID}|"
# Text column
ROW+="CI=${CI} ${ONTAPARCH} ${eventName} ${eventArgs} DFM_EVENT_ID=${eventID} (${eventDate}@${HOSTNAME}).|"
# SDM(12.9) monid and class column
ROW+="MONID=${MONID};CLASS=${SDMCLASS};"

echo $ROW | tee -a ${nagiosFile} ${LOG}
echo "===== ${PGM} v${VER} ========================" >> ${LOG}

if [ ${eventSeverityID} -ge 2 ]; then
  echo "${eventSeverityID}|CI=${CI} ${ONTAPARCH} ${eventName} ${eventArgs} DFM_EVENT_ID=${eventID} (${eventDate}@${HOSTNAME}).|MONID=${MONID};CLASS=${SDMCLASS};" | mailx -s ":${HOSTNAME}: ${PGM}" ${MAILTOSEV2}
  echo "  Mailed Sev.2 to ${MAILTOSEV2}"|tee -a ${LOG}
fi

sleep 1

exit 0

