
#!/bin/bash
# File: ocum-alert2nagios-snow.sh
# Owner: Maarten de Boer <maarten.deboer@atos.net>
# Author: Atos
#       * Claudiu Nesa <claudiu.nesa@atos.net>
#       * Bogdan Nyari (left Atos)
#       * Adrian Corici (left Atos)
#       * Maarten de Boer <maarten.deboer@atos.net>
# Description   : Script to forward OCUM alerts to Nagios (to SDM)
#
#(0.9),170524
#(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 sleep 1
#(0.14),180925  : Changed check on nlnaf10[67] -> CREATE SDM ticket
#(0.15),210421  : Changed for SNOW
#(0.16),210610  : Mod for OCUM @nlxfsd11
#(0.17),210624  : Mod. form nlxfsd11, added -s|--sev
PGM=$(basename $0|cut -d\. -f1)
VER="0.17"
#LOG="/var/log/ocum/${PGM}.log"
# Still being the OLD name (temp.)
LOG="/var/log/ocum/ocum-alert2nagios-snow.log"
#LOG="${HOME}/log/${PGM}.log"
TMP="/tmp/${PGM}.tmp"
HOSTNAME=`hostname|cut -d\. -f1`
VERBOSE=""
#
CI2SNOWID="/home/umadmin/shared/nl-fsod2snow-u-id-number_v2.csv"
# Some init-VAR's
# For SDM12.9 => SNOW
#SDMCLASS="ZZ-Event.Storage.Storage"
#SNOWCLASS=Storage.Storage.Other
SNOWCLASS=Storage.Storage.unspecified
# A "leftover" from IPsof(t) implementation. "[cdot]" is for cDOT-systems
ONTAPARCH="[cdot]"
#NAGIOSPASSIVEDIR="/opt/netapp/ocum/nagios/PassiveCheck/DVL"
NAGIOSPASSIVEDIR="/opt/netapp/ocum/nagios/PassiveCheck/PRD"
# Create read-only user
# Needed for getting cluser information for a (node-)CI
OCUMUSER="ocum-readonly"
OCUMPWD="Readonly-0cum"
# 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=""
# Some functions for "stand alone" usage
USAGE()
{
  echo "Usage: ${PGM} [<options>] <event_name> <event_value> "
  echo "  Version: ${VER}"
  echo "  options         :"
  echo "    -h|--help     : this Help"
  echo "    -t|--test     : Test-event"
  echo "    -s|--sev      : Sev(name) for test-event [normal,information,warning,error,emergency,critical]"
  echo "    -c|--ci       : CI-name"
  echo "    -v            : Verbose"
  echo "    -V            : show Version"
  echo "    -x            : set -x"
}
# Check options
while [ $# -gt 0 ]
  do
  case $1 in
    -c | --ci)
      eventSourceName="${2}"
      shift
        ;;
    -s | --sev)
      eventSeverity="${2}"
      shift
        ;;
    -t | --test)
      eventSourceName="nlnaf100-01"
      eventSourceType="CLUSTER_NODE"
      eventState="NEW"
      eventID=`date +%H%M%S`
      eventSeverity="warning"
      eventName="TEST"
      eventArgs="This is a TEST event (with Sev=${eventSeverity})."
      VERBOSE=1
        ;;
    -h | --help) USAGE; exit 1 ;;
    -v) VERBOSE=1 ;;
    -V) echo "${PGM}: v${VER}"; exit 3 ;;
    -x)  set -x ;;
# Capturing the OCUM variables passed as script arguments
    -eventID) eventID=$2; shift ;;
    -eventName) eventName=$2; shift ;;
    -eventSeverity) eventSeverity=$2; shift ;;
    -eventSourceID) eventSourceID=$2; shift ;;
    -eventSourceName) eventSourceName=$2; shift ;;
    -eventSourceType) eventSourceType=$2; shift ;;
    -eventState) eventState=$2; shift ;;
    -eventArgs) eventArgs=$2; shift ;;
  esac
    shift
done
# 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="1" ;;
  emergency) eventSeverityID="2" ;;
  critical) eventSeverityID="2" ;;
esac
# 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 "eventSeverityID=${eventSeverityID}" >> ${LOG}
echo "eventSourceID=${eventSourceID}" >> ${LOG}
echo "eventSourceName=${eventSourceName}" >> ${LOG}
echo "eventSourceType=${eventSourceType}" >> ${LOG}
echo "eventState=${eventState}" >> ${LOG}
echo "eventArgs=${eventArgs}" >> ${LOG}
echo "--------------------------------------" >> ${LOG}
if [ ! -f ${CI2SNOWID} ]; then
  echo "CI2SNOWID NOT found. So, translation from CI to SNOW-Unique-ID can NOT be done"|tee -a ${LOG}
  echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >> ${LOG}
fi


# Only create tickets for NEW events
if [ "$eventState" != "NEW" ]; then
    echo "INFO: ignoring OBSOLETE OR RESOLVED events" >> ${LOG}
    exit 1
fi

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

# Initialize var's
ROW=""
MONID=""
# Nagios file
nagiosFile="${NAGIOSPASSIVEDIR}/${eventDate}"
# Extracting the CI out of the eventSourceName param. And lower all, for SDM
CI=$(echo $eventSourceName | cut -d":" -f1 | tr [:upper:] [:lower:])
echo "CI=${CI}"
# SNOW specific
echo "  Getting OCUM info ..."
# Extending CI(_EXT) with some (PLF, VST) info
# By checking if CI is in the `cluster list`|`cluster node list`|`cluster svm list`
#
CI_EXT=""
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
        CI_EXT="${HOSTNAME}"
      else
      # CI is SVM
        CI_EXT="${CI}-VST"
      fi  # SVMFND
    else
    # CI is Node
      CI_EXT="${CI}-PST"
    fi  # NODEFND
  else
    # CI is Cluster
    CI_EXT="${CI}-PLF"
# >> Does Cluster excists in SNOW?
    CI_EXT="${CI}-01-PST"
  fi  # CLUSTERFND
fi  # ${LOGINANSW}

# If CI_EXT=""
if [ "${CI_EXT}" = "" ]; then
  CI_EXT="${HOSTNAME}"
fi  # CI_EXT
echo "CI_EXT=${CI_EXT}" |tee -a ${TMP} ${LOG}

# Get SNOW Unique ID from the list CI2SNOWID (from SNOW)
SNOW_U_ID=`grep -i ${CI_EXT} ${CI2SNOWID}|awk -F\; '{print $2}'`
if [ "${SNOW_U_ID}" = "" ]; then
# When SNOW_U_ID NOT found, use the 1st one on the list
  SNOW_U_ID=`cat ${CI2SNOWID}|grep -v ^#|head -1|awk -F\; '{print $2}'`
fi
echo "SNOW_U_ID=${SNOW_U_ID}"|tee -a ${LOG} ${TMP}

# Priority column
ROW+="${eventSeverityID}|"
# Text column
ROW+="CI=${CI} ${ONTAPARCH} ${eventName} ${eventArgs} OCUM_EVENT_ID=${eventID} (${eventDate}@${HOSTNAME}).|"
# SNOW (Unique) monid and class column
ROW+="MONID=${SNOW_U_ID};CLASS=${SNOWCLASS};"

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

if [ ${VERBOSE} ]; then
  tail -10 ${LOG}
fi  # VERBOSE

sleep 1
exit 0

