#!/bin/ksh
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
#  
#  
# Licensed Materials - Property of IBM 
#  
# (C) COPYRIGHT International Business Machines Corp. 2000,2019 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 

# sccsid = "@(#)10   1.19   src/rsct/rm/ER/logevent, ERrm, rsct_rady, rady2035a 11/12/15 16:39:55"

#####################################################################
#
# Name:    logevent
#
# Purpose: Logs event information generated by Event Response resource
#          manager to a specified log file.
#
# Inputs:  Name of the file where event information is logged.
#          An absolute path for the logfile operand should be specified.  
#
#####################################################################

generate_message () {

        cat  <<EOF

=====================================

${EventTime}

${ConditionName}: $ERRM_COND_NAME
${Severity}: $COND_SEVERITY
${EventType}: $TYPE
${Expression}: $ERRM_EXPR

${ResourceName}: $ERRM_RSRC_NAME
${ResourceClass}: $ERRM_RSRC_CLASS_PNAME
${DataType}: $ERRM_DATA_TYPE
${DataValue}: $ERRM_VALUE
${NodeName}: $ERRM_NODE_NAME
${NodeNameList}: $ERRM_NODE_NAMELIST
${RsrcType}: $ERRM_RSRC_TYPE
EOF
        
}

# main()
# Set path to known value
PATH=/opt/rsct/bin:/usr/xpg4/bin:/usr/bin:/usr/sbin:/bin
export PATH

PERL=/usr/bin/perl
# Instead of using ctdspmsg, we directly call dspmsg to improve the
# performance. 
# Need to ensure the set id and message id are correct.  
#CTMSG=/opt/rsct/bin/ctdspmsg
CTMSG=/usr/bin/dspmsg
MSGMAPPATH=/opt/rsct/msgmaps
export MSGMAPPATH


ConditionName=`$CTMSG -s 5 IBM.ERrm.cat 2 'Condition Name'`
Severity=`$CTMSG -s 5 IBM.ERrm.cat 3 'Severity'`
EventType=`$CTMSG -s 5 IBM.ERrm.cat 4 'Event Type'`
Expression=`$CTMSG -s 5 IBM.ERrm.cat 5 'Expression'`

ResourceName=`$CTMSG -s 5 IBM.ERrm.cat 6 'Resource Name'`
ResourceClass=`$CTMSG -s 5 IBM.ERrm.cat 8 'Resource Class'`
DataType=`$CTMSG -s 5 IBM.ERrm.cat 9 'Data Type'`
DataValue=`$CTMSG -s 5 IBM.ERrm.cat 10 'Data Value'`
NodeName=`$CTMSG -s 5 IBM.ERrm.cat 7 'Node Name'`
NodeNameList=`$CTMSG -s 5 IBM.ERrm.cat 14 'Node NameList'`
RsrcType=`$CTMSG -s 5 IBM.ERrm.cat 15 'Resource Type'`
Usage=`$CTMSG -s 5 IBM.ERrm.cat 11 'Usage'`
InvalidDir=`$CTMSG -s 5 IBM.ERrm.cat 12 'invalid directory'`

# Convert Seveirty
case $ERRM_COND_SEVERITYID in

   0 ) COND_SEVERITY=`$CTMSG -s 5 IBM.ERrm.cat 19 'Informational'`;;
   1 ) COND_SEVERITY=`$CTMSG -s 5 IBM.ERrm.cat 20 'Warning'`;;
   2 ) COND_SEVERITY=`$CTMSG -s 5 IBM.ERrm.cat 21 'Critical'`;;

esac

# Convert EventType
case $ERRM_TYPEID in

   0 ) TYPE=`$CTMSG -s 5 IBM.ERrm.cat 17 'Event'`;;
   1 ) TYPE=`$CTMSG -s 5 IBM.ERrm.cat 18 'Rearm event'`;;

esac

while getopts ":h" opt
do
  case $opt in

    h ) print "${Usage} : `basename $0` [-h] logfile "
        exit 0;;

    ? ) print "${Usage} : `basename $0` [-h] logfile "
        exit 3;;
  esac
done



# Check if a required logfile is specified
if [[ $# -lt 1 ]]; then
   print -u2 "${Usage} : `basename $0` [-h] logfile "
   exit 1
fi

# Check if the logfile path is valid
fileName=$1
pathName=${fileName%/*}

if [[ -z $pathName ]]; then
   pathName=/
fi

if [[ ! -d $pathName ]]; then
   print -u2 "${InvalidDir} "
   exit 2
fi

# convert time string
seconds=${ERRM_TIME%,*}

EventTime=$(seconds=$seconds $PERL -e \
'
use POSIX qw(strftime);
print strftime("%A %D %T", localtime($ENV{seconds}) );  

'
)

data=$(generate_message) ofile=$1   \
$PERL -e \
'
use Fcntl qw(:DEFAULT :flock);
$mytmpdir = `/opt/rsct/bin/cttmpdir`;
$rc = $?;
if ($rc != 0) {
    $mytmpdir = "/tmp";
} else {
    chomp($mytmpdir);
}
open(ofh,">>$mytmpdir/errmlogevent.lck");
flock(ofh,LOCK_EX);
$rc = 0;
$uname=`uname`;  chomp $uname;

# alog only exists on aix
if ("$uname" eq "AIX")
{
 
 `echo "\$data" | alog -q -f "\$ofile" -s 65536` ;
 $rc = $?>>8;
}
else
{
  open(ofh2,">>$ENV{ofile}");  
  print ofh2 "$ENV{data}" ;
  close(ofh2);
}

close(ofh);  
exit $rc;
'
exit $?