hi,
I need to change the code such that it becomes configurable to send email or sms or both.
At the moment the code works like sending both email and sms for any alert now want to change it to send email/sms as per my demand.
- Like for a particular alert I only want email
- If the alert is critical then both email and sms.
this file name is PACKAGE_OLC_ACTUAL_STATE
$HOME/MONITORING_ENGINE/monitoring_driver.ksh -i OLC_ACTUAL_STATE \
-email tat.r@abc.com \
-email alex.do@abc.com \
-email M.Cha@abc.com \
-email M.K@abc.com \
-email Z.Wu@abc.com \
-email B.Der@abc.com \
-email P.As@abc.com \
-email Ax.Kha@abc.com \
-email p.m@abc.com \
-sms 90540@msg.abc.com \
-sms 44471@msg.abc.com \
-sms 7654@msg.abc.com \
-sms 44566@msg.abc.com \
-sms 554029@msg.abc.com \
+alert \
-alert_log `basename $0` $*
this file name is PACKAGE_OLC_ACTUAL_STATEAUTO_LOOP
. `dirname $0`/monitoring_gen_source.ksh
#=========================================================================================
SwAlertLimit()
{
echo 1 |awk -v ALERT_COUNTER="$ALERT_COUNTER" '\
{
if(sprintf("%06ld",ALERT_COUNTER)>sprintf("%06ld",4)) {printf("%ld",1);exit}
printf("%ld",0)
}'
}
#=========================================================================================
STOP_ENGINE_INI $0
SLEEP_ENGINE_INI $0
ALERT_COUNTER=0
while test 1 -eq 1 ; do
$HOME/MONITORING_PACKAGES/PACKAGE_OLC_ACTUAL_STATE $*
case X$? in
X0) ALERT_COUNTER=0 ; SwAlert=0;;
X1) ALERT_COUNTER=`echo $ALERT_COUNTER |awk '{printf("%ld",$1+1)}'`
ALERT_COUNTER=0 ; SwAlert=0 # close alert regarding MONITORING_FREQUENCY_ALERT_LIMIT_MSG
;;
esac
#case X$ALERT_COUNTER in
# X5) $HOME/MONITORING_ENGINE/monitoring_driver.ksh +alert \
# $* -i MONITORING_TERMINATION_ALERT_LIMIT_MSG \
# -i_ref MAF_ACTUAL_STATE
#
# exit;;
#esac
case X`SwAlertLimit $ALERT_COUNTER` in
X1) $HOME/MONITORING_ENGINE/monitoring_driver.ksh +alert \
$* -i MONITORING_FREQUENCY_ALERT_LIMIT_MSG \
-times $ALERT_COUNTER \
-sec 1800
;;
esac
STOP_ENGINE_CHECK_POINT
SLEEP_ENGINE_CHECK_POINT
STOP_ENGINE_CHECK_POINT
done
this file name is OLC_ACTUAL_STATE.ksh
#!/bin/ksh
# Monitoring item.
# Run regimes:
# 1. Run under Monitoring driver as item.
# 1. Run as separated script with own options.
#
# Monitoring root is the directory of the running monitoring_driver.ksh.
# Monitoring tree is:
# / e-mail.lst
# MONITORING_DEFAULT_PARAMS ---------> sql_connect_string.txt
# / \ mode.txt
# /
# / /item.ksh
#ROOT -----> MONITORING_ITEMS_LIBRARY ---------> item.sql
# \ \ \item.desc
# \ \
# \ \
# \ MONITORING_LOGS
# \
# monitoring_driver.ksh
# monitoring_gen_source.ksh
#
#
#
# Run ksh without driver:
#
#
#
#
#
#===============================================================
OLC_TOGGLE_DEFINITION()
{
# get remote user@host on the base processes list
cat $THIS_PROCESSES_LIST |/usr/xpg4/bin/awk '{if ($1=="") next ; printf("%s@%s\n",$2,$1)}' |sort -u
}
#===============================================================
OLCHostUserMapping()
{
# get list of the OLC servers per host/user
echo 1 |/usr/xpg4/bin/awk -v TheHost=$1 \
-v TheUser=$3 \
-v THIS_PROCESSES_LIST=$THIS_PROCESSES_LIST '\
{
while (getline TheProcess<THIS_PROCESSES_LIST==1) {
split(TheProcess,TheProcess_v)
ProcIndex=sprintf("%s %s %s %s %s",TheProcess_v[1],
TheProcess_v[2],
TheProcess_v[3],
TheProcess_v[4],
substr(TheProcess_v[5],1,2))
ProcMask=sprintf("%s %s olcServer -n",
TheHost,
TheUser)
if(ProcIndex==sprintf("%s RB",ProcMask) || ProcIndex==sprintf("%s FR",ProcMask)) OLCSrv=sprintf("%s %s",OLCSrv,TheProcess_v[5])
}
printf("%s\n",OLCSrv)
}'
}
#===============================================================
CheckProcesses()
{
/usr/xpg4/bin/awk -v THIS_PROCESSES_LIST=$THIS_PROCESSES_LIST '\
{
# Input format:
#sp20359 prpmus2 gnavm_ewd -n RBAOC6 -b olcServer -c -n RBAOC6 18185 11:34:08
#host user process ................................... pid stime
ProcIndex=sprintf("%s %s %s %s %s",$1,$2,$3,$4,$5)
if(Matrix[ProcIndex]==ProcIndex) next
Matrix[ProcIndex]=ProcIndex
MatrixInd_qty++
MatrixInd[MatrixInd_qty]=ProcIndex
ProcIndexLocation=sprintf("%s %s %s",$3,$4,$5)
MatrixLocation_BOX_ALIAS[ProcIndexLocation]=sprintf("%s@%s",toupper(substr($2,5)),$1)
MatrixLocationConfirm[ProcIndexLocation]=ProcIndexLocation
#sp20484 prpmolc1 args,pid,pgid,ppid,stime,etime,pcpu,vsz
AccountId=toupper(substr($2,5))
if (AccountId=="OLC1") OrderId=1
if (AccountId=="OLC2") OrderId=2
if (AccountId=="US1") OrderId=3
if (AccountId=="US2") OrderId=3
if (AccountId=="US3") OrderId=3
if (AccountId=="US4") OrderId=3
PROCESS_INFO=sprintf("%6ld|%6ld|%6ld|%8s|%12s|%4.1f|%12ld",$(NF-6),$(NF-5),$(NF-4),$(NF-3),$(NF-2),$(NF-1),$NF)
ARGS_INFO="";ThisSep=""
for(i=3;i<=NF-7;i++) {ARGS_INFO=ARGS_INFO ThisSep $i;ThisSep=" "}
printf("PROCESS|[%ld]|%7s|%8s|%-35s|%s\n",OrderId,$1,$2,substr(ARGS_INFO,1,35),PROCESS_INFO)
} END {
while (getline TheProcess<THIS_PROCESSES_LIST==1) {
split(TheProcess,TheProcess_v)
if(TheProcess_v[1]=="") continue;
#List format:
# sp20359 prpmus2 gnavm_ewd -n RBAOC6 -b olcServer -c -n RBAOC6
# sp20359 prpmus2 olcServer -n RBAOC11
#
# TheProcess_v[1] - host
# TheProcess_v[2] - user
# TheProcess_v[3] - exe
# TheProcess_v[4] - option -n
# TheProcess_v[5] - OLC server name
BOX_ID=sprintf("%s@%s",TheProcess_v[2],TheProcess_v[1])
BOX_ALIAS=sprintf("%s@%s",toupper(substr(TheProcess_v[2],5)),TheProcess_v[1])
if (MATRIX_BOX[BOX_ID]!=BOX_ID) {
BOX_QTY++
MATRIX_BOX_ID[BOX_QTY]=BOX_ID
MATRIX_BOX_ALIAS[BOX_QTY]=BOX_ALIAS
MATRIX_BOX[BOX_ID]=BOX_ID
}
ProcIndex=sprintf("%s %s %s %s %s",TheProcess_v[1],
TheProcess_v[2],
TheProcess_v[3],
TheProcess_v[4],
TheProcess_v[5])
if(Matrix[ProcIndex]==ProcIndex) continue;
ProcessCode=""
if (TheProcess_v[3]=="gnavm_ewd") ProcessCode="WD "
RunMsg=""
ProcIndexLocation=sprintf("%s %s %s",
TheProcess_v[3],
TheProcess_v[4],
TheProcess_v[5])
if(MatrixLocationConfirm[ProcIndexLocation]==ProcIndexLocation) RunMsg=sprintf("-RunAt %s",MatrixLocation_BOX_ALIAS[ProcIndexLocation])
# one msg per alert# printf("[ALERT-no %s%s at %s%s]\n",ProcessCode,TheProcess_v[5],BOX_ALIAS,RunMsg)
MATRIX_BOX_ALERTS[BOX_ID]=sprintf("%s%s%s%s%S",MATRIX_BOX_ALERTS[BOX_ID],Sep[BOX_ID],
ProcessCode,TheProcess_v[5],RunMsg)
if(!(substr(TheProcess_v[5],1,6)=="OXAOLC" || substr(TheProcess_v[5],1,3)=="FRD")) SwSmsAlert[BOX_ID]=1
Sep[BOX_ID]=","
}
for (i=1;i<=BOX_QTY;i++)
if (MATRIX_BOX_ALERTS[MATRIX_BOX_ID]!="") {
if (SwSmsAlert[MATRIX_BOX_ID]) {
printf("[ALERT-%s NoProc %s]\n",MATRIX_BOX_ALIAS,MATRIX_BOX_ALERTS[MATRIX_BOX_ID])
} else {
printf("[ALERT-EMAIL-%s NoProc %s]\n",MATRIX_BOX_ALIAS,MATRIX_BOX_ALERTS[MATRIX_BOX_ID])
}
}
# Output format:
# [ALERT-US1@sp20358 no proc SED13-RunAt OLC2@sp20483]
# [ALERT-US2@sp20359 no proc SED14-RunAt OLC2@sp20483]
# [ALERT-US4@sp20361 no proc SED15-RunAt OLC2@sp20483]
}'
}
#===============================================================
LaunchRemoteProcesses()
{
ssh $1 -l $3 "ps -u $3 -o args,pid,pgid,ppid,stime,etime,pcpu,vsz |grep -E '^olcServer|^gnavm_ewd|^oxadaemon|^OLCDMN_cdrdFileRegDaemon'" |\
/usr/xpg4/bin/awk -v TheHost=$1 -v TheUser=$3 '\
{printf("%s %s %s\n",TheHost,TheUser,$0)}' |sort
}
#===============================================================
LaunchRemoteEventFile_SQL()
{
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# Last event_file time stamp ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# Alert - no events flow last [AlertEvFlowStopMin] minutes ~#
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
for OLCSrv in `OLCHostUserMapping $1 -l $3` ; do
ssh $1 -l $3 "cd /work/users/${3}/var/m3g/projs/olc/log ; \ls -Et event_file_${OLCSrv}_*.log |head -1" |\
/usr/xpg4/bin/awk -v TheHost=$1 -v TheUser=$3 \
-v OLCSrv=$OLCSrv \
-v SysDate="`date '+%Y-%m-%d %H:%M:%S'`" \
-v AlertEvFlowStopMin=$AlertEvFlowStopMin \
-v AlertEvFlowStopMinRBAOC=$AlertEvFlowStopMinRBAOC \
-v q="'" '\
BEGIN {
printf("SET LINESIZE 220\n")
printf("SET PAGESIZE 0\n")
printf("SET FEEDBACK OFF\n")
printf("col col_msg for a200\n")
}
{
if (substr(OLCSrv,1,2)=="FR") OrderId=1
if (substr(OLCSrv,1,2)=="RB") OrderId=2
if (substr(OLCSrv,1,5)=="RBAOC") OrderId=3
if (substr(OLCSrv,1,2)=="FR") AlertEvFlow=AlertEvFlowStopMin
if (substr(OLCSrv,1,2)=="RB") AlertEvFlow=AlertEvFlowStopMin
if (substr(OLCSrv,1,5)=="RBAOC") AlertEvFlow=AlertEvFlowStopMinRBAOC
split($7,time_v,".")
printf("select %sEVENT_LOG|[%ld]|%4s@%-7s|event_file_%-7s|%s||lpad(trunc((to_date(%s%s%s,%sYYYY-MM-DD HH24:MI:SS%s)-to_date(%s%s %s%s,%sYYYY-MM-DD HH24:MI:SS%s))*24*60),7)||%s|[%s %s]|[%s]%s col_msg from dual;\n",
q,OrderId,toupper(substr(TheUser,5)),TheHost,OLCSrv,q,
q,SysDate,q,q,q,
q,$6,time_v[1],q,q,q,
q,$6,time_v[1],SysDate,q)
printf("select case when trunc((to_date(%s%s%s,%sYYYY-MM-DD HH24:MI:SS%s)-to_date(%s%s %s%s,%sYYYY-MM-DD HH24:MI:SS%s))*24*60)>=%ld then \n",
q,SysDate,q,q,q,
q,$6,time_v[1],q,q,q,AlertEvFlow)
printf("%s[ALERT-%s@%s Flow %s %s||trunc((to_date(%s%s%s,%sYYYY-MM-DD HH24:MI:SS%s)-to_date(%s%s %s%s,%sYYYY-MM-DD HH24:MI:SS%s))*24*60)||%s min. ago]%s end col_msg from dual;\n",
q,toupper(substr(TheUser,5)),TheHost,OLCSrv, q,
q,SysDate,q,q,q,
q,$6,time_v[1],q,q,q,
q,q)
}'
done
}
#===============================================================
LaunchRemoteEventFile()
{
LaunchRemoteEventFile_SQL $1 -l $3 |sqlplus -s $MONITORING_SQL_CONNECT
}
#===============================================================
LaunchRemoteEventStats()
{
for OLCSrv in `OLCHostUserMapping $1 -l $3` ; do
ssh $1 -l $3 "/work/users/${3}/MONITORING_ENGINE/MONITORING_ITEMS_LIBRARY/OLCRjctdEvents.pl -l /work/users/${3}/var/m3g/projs/olc/log -p ${OLCSrv} -r 10.0 -m 10000 -h 1.0"
done
}
#===============================================================
LaunchTitle()
{
case X$1 in
XProcesses) echo 1 |/usr/xpg4/bin/awk '\
{printf("PROCESS|[%ld]|%-7s|%-8s|%-35s|%6s|%6s|%6s|%8s|%12s|%4s|%12s\n",
0,"HOST","USER","COMMAND","PID","PGID","PPID","STIME","ELAPSED","%CPU","VSZ")
}'
;;
XEventFile) echo 1 |/usr/xpg4/bin/awk '\
{printf("EVENT_LOG|[%ld]|%4s@%-7s|event_file_%-7s|%7s|%21s|%21s\n",
0,"USER","HOST","OLCSRV","min.ago","last stamp at","sysdate")
}'
;;
XEventStats) echo 1 |/usr/xpg4/bin/awk '\
{printf("EVENT_REJECTS|[%ld]|%4s@%-7s|%-7s|%5s%s|%12s|%12s|%12s\n",
0,"USER","HOST","OLCSRV","REJ","%","TOTAL","Success","Rejects")
}'
;;
esac
}
#===============================================================
LaunchRemote()
{
for user_host in `OLC_TOGGLE_DEFINITION` ; do
TheUser=`echo $user_host |awk -F"@" '{print $1}'`
TheHost=`echo $user_host |awk -F"@" '{print $2}'`
case X$1 in
XProcesses) LaunchRemoteProcesses $TheHost -l $TheUser & ;;
XEventFile) LaunchRemoteEventFile $TheHost -l $TheUser & ;;
XEventStats) LaunchRemoteEventStats $TheHost -l $TheUser & ;;
esac
done
wait
}
#===============================================================
AlertsPool()
{
LaunchTitle Processes
LaunchTitle EventFile
LaunchTitle EventStats
LaunchRemote Processes |CheckProcesses
LaunchRemote EventFile
LaunchRemote EventStats
AlertsOXATruncate
}
#===============================================================
AlertsOXATruncate()
{
sqlplus -S SBUSG7C/CONUSG74PR@AOLCPRSV1 @${WORK_DIR}/OLC_OXA_TRUNC_1.sql
sqlplus -S SBUSG8C/CONUSG84PR@AOLCPRSV1 @${WORK_DIR}/OLC_OXA_TRUNC_2.sql
sqlplus -S SBUSG9C/CONUSG94PR@AOLCPRSV1 @${WORK_DIR}/OLC_OXA_TRUNC_3.sql
}
#===============================================================
###############
### M A I N ###
###############
WORK_DIR=`dirname $0`
MONITORING_ITEM=`basename $0 |awk -F"." '{print $1}'`
THIS_PROCESSES_LIST=$WORK_DIR/${MONITORING_ITEM}_processes_mapping.txt
ALERT_DISK_SPACE=80
AlertPerCentRejects=10 # 10% rejects in two last events logs
AlertEvFlowStopMin=5 # 5 minutes no events flow
AlertEvFlowStopMinRBAOC=30 # 30 minutes no events flow in RBAOC
while test $# -ge 1 ; do
case $1 in
-u|-h) Usage $0 ; exit;;
-s) MONITORING_SQL_CONNECT="$2" ; shift 2;;
-alert_rej) AlertPerCentRejects="$2" ; shift 2;;
-alert_flow) AlertEvFlowStopMin="$2" ; shift 2;;
-alert_flow_RBAOC) AlertEvFlowStopMinRBAOC="$2" ; shift 2;;
*) shift;;
esac
done
MONITORING_ITEM=`basename $0 |awk -F"." '{print $1}'`
AlertsPool |sort |/usr/xpg4/bin/awk '{if ($1=="") next; print $0}'
this file name is monitoring_gen_source.ksh
MonitoringGen_Root()
{
cd `dirname $1` ; /bin/pwd
}
#===============================================================
MonitoringGen_params_list()
{
awk -v get_param_qty="$1" '\
function IsEqual(Param1,Param2) {if (sprintf("%09ld",Param1+0)==sprintf("%09ld",Param2+0)) return 1; return 0 }
{ if($1=="") next;
if(substr($1,1,1)=="#") next;
printf("%s",$0)
param_qty++
if (get_param_qty+0 && IsEqual(param_qty,get_param_qty)) exit
printf(" ")
}'
}
#===============================================================
export PATH=/usr/xpg4/bin:$ORACLE_HOME/bin:$PATH
case X`uname` in
XSunOS) EmailOpt="" ;;
*) EmailOpt="-m" ;;
esac
MONITORING_DRIVER="`basename $0|awk -F"." '{print $1}'`"
MONITORING_ROOT=`MonitoringGen_Root $0`
MONITORING_ITEMS_LIBRARY=$MONITORING_ROOT/MONITORING_ITEMS_LIBRARY
MONITORING_ITEMS_LIBRARY_ON_ROOT="`basename $MONITORING_ROOT`"/MONITORING_ITEMS_LIBRARY
### MONITORING_LOGS=$MONITORING_ROOT/MONITORING_LOGS
MONITORING_LOGS=$HOME/MONITORING_LOGS ; mkdir -p $HOME/MONITORING_LOGS
MONITORING_STDOUT_DIR=$MONITORING_LOGS
MONITORING_DEFAULT_PARAMS=$MONITORING_ROOT/MONITORING_DEFAULT_PARAMS
MONITORING_EMAIL_LST_DEFAULT="`cat $MONITORING_DEFAULT_PARAMS/${MONITORING_DRIVER}.e-mail.lst 2>/dev/null |MonitoringGen_params_list`"
MONITORING_SMS_LST_DEFAULT="`cat $MONITORING_DEFAULT_PARAMS/${MONITORING_DRIVER}.sms.lst 2>/dev/null |MonitoringGen_params_list`"
MONITORING_MODE=`cat $MONITORING_DEFAULT_PARAMS/mode.txt 2>/dev/null |MonitoringGen_params_list 1`
MONITORING_SQL_CONNECT=`cat $MONITORING_DEFAULT_PARAMS/sql_connect_string.txt 2>/dev/null |MonitoringGen_params_list 1`
#===============================================================
MonitoringGen_Usage()
{
echo "
$1 [-email "1 2 3"] [-s TECUSTSEL/TECUSTSEL@cuspr] [-mode test/production] -i Reconciliation_pub_to_sub_recv_data [-iopt ... ... ... ...]
"
}
#===============================================================
MonitoringGen_Product()
{
# 1 - this pid
MONITORING_PID=$1
# Main environments:
# MONITORING_EMAIL_LST
# MONITORING_SQL_CONNECT
# MONITORING_MODE
# MONITORING_ITEM
MONITORING_SQL_USER=`echo $MONITORING_SQL_CONNECT |awk -F"/" '{print $1}'`
MONITORING_SQL_INST=`echo $MONITORING_SQL_CONNECT |awk -F"@" '{print $2}'`
case X$MONITORING_EMAIL_LST in
X) MONITORING_EMAIL_LST="$MONITORING_EMAIL_LST_DEFAULT";;
esac
case X$MONITORING_SMS_LST in
X) MONITORING_SMS_LST="$MONITORING_SMS_LST_DEFAULT";;
esac
case X${MONITORING_EMAIL_LST}$MONITORING_SMS_LST in
X) case X$MONITORING_STDOUT_TYPE in
Xscreen) echo 1 > /dev/null ;;
Xfile) echo 1 > /dev/null ;;
Xalert_log) echo 1 > /dev/null ;;
*) MONITORING_STDOUT_TYPE=file ;;
esac
### exit 9
;;
esac
case X$MONITORING_STDOUT_TYPE in
Xscreen) echo 1 > /dev/null ;;
Xfile) echo 1 > /dev/null ;;
Xfile_email) echo 1 > /dev/null ;;
Xalert_log) echo 1 > /dev/null ;;
X) MONITORING_STDOUT_TYPE=email ;;
esac
case X$MONITORING_ITEM in
XMONITORING_TERMINATION_ALERT_LIMIT_MSG)
MONITORING_ALERT_POLICY="ALERT"
MONITORING_ALERT_OPTIONS="$MONITORING_ALERT_OPTIONS +alert"
esac
MONITORING_PRODUCT_DATETIME_STAMP=`date '+%Y%m%d_%H%M%S_%Z'`
THIS_DATE=`echo $MONITORING_PRODUCT_DATETIME_STAMP |MonitoringGen_DateReformat_2`
THIS_TIME=`echo $MONITORING_PRODUCT_DATETIME_STAMP |MonitoringGen_TimeReformat_2`
THIS_TIME_HHMI=`echo $MONITORING_PRODUCT_DATETIME_STAMP |MonitoringGen_TimeReformat_3`
MONITORING_PRODUCT_PREFIX=ErrHandler.${MONITORING_PRODUCT_DATETIME_STAMP}
MONITORING_PRODUCT_LOG=${MONITORING_LOGS}/${MONITORING_PRODUCT_PREFIX}.${MONITORING_PID}.log ### FILE ###
### MONITORING_PRODUCT_LOG=/dev/null ### FILE ###
MonitoringGen_Product_Params_Handler
MONITORING_PRODUCT=$MONITORING_ITEM
#################################
#### ====== Excel file ====== ###
#################################
case X$MONITORING_MODE_SPEC in
X1) MONITORING_ENV_LABEL=$MONITORING_MODE ;;
*) case X$MONITORING_SQL_CONNECT_SPEC in
X1) MONITORING_ENV_LABEL=$MONITORING_SQL_USER ;;
*) MONITORING_ENV_LABEL=$MONITORING_MODE ;;
esac
;;
esac
case X$MONITORING_EXCEL_TITLE in
X) MonitoringGen_Product_excel_title ;;
*) MONITORING_EXCEL_TITLE=${MONITORING_EXCEL_TITLE}_made_at_${MONITORING_PRODUCT_DATETIME_STAMP}_${MONITORING_ENV_LABEL} ;;
esac
MONITORING_PRODUCT_EXCEL_ATTACH=${MONITORING_EXCEL_TITLE}.csv
### !!!!!!!!!!!!! STDOUT - locate in the directory, where run driver !!!!!!
rm -fr ${MONITORING_STDOUT_DIR}/${MONITORING_PRODUCT_EXCEL_ATTACH}.STDOUT ; touch ${MONITORING_STDOUT_DIR}/${MONITORING_PRODUCT_EXCEL_ATTACH}.STDOUT ### LAUNCH FILE ###
#################################
MONITORING_PRODUCT_DESC="`cat $MONITORING_ITEMS_LIBRARY/${MONITORING_ITEM}.desc 2>/dev/null |MonitoringGen_params_list 1`"
MONITORING_PRODUCT_DESC=`eval echo $MONITORING_PRODUCT_DESC`
case X"$MONITORING_PRODUCT_DESC" in
X) MONITORING_PRODUCT_DESC=$MONITORING_ITEM ;;
esac
MONITORING_PRODUCT_EXE=$MONITORING_ITEMS_LIBRARY/${MONITORING_ITEM}.ksh
MONITORING_PRODUCT_EXE_ON_ROOT=$MONITORING_ITEMS_LIBRARY_ON_ROOT/${MONITORING_ITEM}.ksh
MONITORING_PRODUCT_PREFIX=${MONITORING_PRODUCT}_${MONITORING_PRODUCT_DATETIME_STAMP}
MONITORING_PRODUCT_OUTPUT=${MONITORING_LOGS}/${MONITORING_PRODUCT_PREFIX}.${MONITORING_PID}.xls ### FILE ###
MONITORING_PRODUCT_SUMMARY=${MONITORING_LOGS}/${MONITORING_PRODUCT_PREFIX}_summary.${MONITORING_PID}.xls ### FILE ###
MONITORING_PRODUCT_SUMMARY_XLS=Summary_${MONITORING_PRODUCT_PREFIX}.xls
MONITORING_PRODUCT_LOG=${MONITORING_LOGS}/${MONITORING_PRODUCT_PREFIX}.${MONITORING_PID}.log ### FILE ###
### MONITORING_PRODUCT_LOG=/dev/null ### FILE ###
#case X$MONITORING_SQL_CONNECT_SPEC in
# X) MONITORING_PRODUCT_SUBJECT="${MONITORING_MODE} ${MONITORING_USER}@${MONITORING_HOST} [$THIS_DATE $THIS_TIME `date '+%Z'`] $MONITORING_PRODUCT_DESC" ;;
# *) MONITORING_PRODUCT_SUBJECT="${MONITORING_MODE} ${MONITORING_SQL_USER}@${MONITORING_SQL_INST} [$THIS_DATE $THIS_TIME `date '+%Z'`] $MONITORING_PRODUCT_DESC" ;;
#esac
MONITORING_PRODUCT_SUBJECT="${MONITORING_MODE} $MONITORING_PRODUCT_DESC [$THIS_DATE $THIS_TIME_HHMI `date '+%Z'`]"
rm -fr $MONITORING_PRODUCT_OUTPUT ; touch $MONITORING_PRODUCT_OUTPUT ### LAUNCH FILE ###
rm -fr $MONITORING_PRODUCT_SUMMARY ; touch $MONITORING_PRODUCT_SUMMARY ### LAUNCH FILE ###
MONITORING_ITEM_OPTIONS="$MONITORING_ITEM_OPTIONS -s $MONITORING_SQL_CONNECT -log $MONITORING_PRODUCT_LOG -date $MONITORING_DATE "
MONITORING_ITEM_OPTIONS="$MONITORING_ITEM_OPTIONS $MONITORING_ITEM_OPTIONS_0 $MONITORING_ITEM_OPTIONS_1" # options with 0 or 1 params
MONITORING_ITEM_OPTIONS="$MONITORING_ITEM_OPTIONS $MONITORING_ALERT_OPTIONS"
case X$MONITORING_ALERT_POLICY in
XALERT) MONITORING_PRODUCT_OUTPUT_ALERT_MSG=$MONITORING_PRODUCT_OUTPUT.alert.msg ### FILE ###
;;
esac
MONITORING_PRODUCT_OUTPUT_SUBJECT_MSG=$MONITORING_PRODUCT_OUTPUT.subject.msg ### FILE ###
rm -fr $MONITORING_PRODUCT_LOG 2>/dev/null ### ; touch $MONITORING_PRODUCT_LOG 2>/dev/null ### LAUNCH FILE ###
echo "
[PARAMS INFO] Monitoring Subject: $MONITORING_PRODUCT_SUBJECT
[PARAMS INFO] Root: $MONITORING_ROOT
[PARAMS INFO] Main Driver: $MONITORING_DRIVER
[PARAMS INFO] Item: `MonitoringGen_alignment MONITORING_ITEMS_LIBRARY/`$MONITORING_ITEM
[PARAMS INFO] Item Driver: MONITORING_ITEMS_LIBRARY/${MONITORING_ITEM}.ksh
##################
[PARAMS INFO] ### Parameters ###
##################
[PARAMS INFO] Mode: $MONITORING_MODE
[PARAMS INFO] Monitor date: $MONITORING_DATE
[PARAMS INFO] e-mail list: $MONITORING_EMAIL_LST
[PARAMS INFO] sql connect string: $MONITORING_SQL_CONNECT
[PARAMS INFO] host: $MONITORING_HOST
[PARAMS INFO] user: $MONITORING_USER
########################################
[PARAMS INFO] ### The following files will be sent ###
########################################
[PARAMS INFO] Readme.txt
[PARAMS INFO] ${MONITORING_PRODUCT_PREFIX}.${MONITORING_PID}.xls
########################
[PARAMS INFO] ### Unix level files ###
########################
[PARAMS INFO] MONITORING_LOGS/${MONITORING_PRODUCT_PREFIX}.${MONITORING_PID}.xls
[PARAMS INFO] MONITORING_LOGS/${MONITORING_PRODUCT_PREFIX}.${MONITORING_PID}.log
" > /dev/null ### >> $MONITORING_PRODUCT_LOG
}
#===============================================================
MonitoringGen_Product_Params_Handler()
{
# Log params errors file is ErrHandler.YYYYMMDD_HHMMSS.pid.log
ParamHandler=0
case X"$MONITORING_ITEM" in
X) touch $MONITORING_PRODUCT_LOG 2>/dev/null ### LAUNCH FILE ###
echo "[PARAMS ERROR] - monitoring item is empty: use option [-i ... ]" >> $MONITORING_PRODUCT_LOG
ParamHandler=1
;;
esac
case X"$MONITORING_EMAIL_LST" in
X) touch $MONITORING_PRODUCT_LOG 2>/dev/null ### LAUNCH FILE ###
echo "
[PARAMS ERROR] - e-mail list is empty:
put file $MONITORING_DEFAULT_PARAMS/${MONITORING_DRIVER}.e-mail.lst
or use option [-email \"1 2 3\"]" >> $MONITORING_PRODUCT_LOG
ParamHandler=1;;
esac
case X"$MONITORING_MODE" in
X) touch $MONITORING_PRODUCT_LOG 2>/dev/null ### LAUNCH FILE ###
echo "
[PARAMS WARNING] - mode is empty - used default PRODUCTION:
put file $MONITORING_DEFAULT_PARAMS/mode.txt
or use option [-m ... ]" >> $MONITORING_PRODUCT_LOG
MONITORING_MODE=PRODUCTION
;;
esac
case X"$MONITORING_DATE" in
X) MONITORING_DATE="`date '+%Y%m%d'`"
MONITORING_DATE_SYSDATE_IN_USE=Y
echo "[PARAMS WARNING] - date is empty - used default today $MONITORING_DATE: use option [-date YYYYMMDD]" >/dev/null ### >> $MONITORING_PRODUCT_LOG
;;
esac
case X"$MONITORING_SQL_CONNECT" in
X) case $MONITORING_DRIVER in
monitoring_driver) touch $MONITORING_PRODUCT_LOG 2>/dev/null ### LAUNCH FILE ###
echo "
[PARAMS ERROR] - sql connect string is empty:
put file $MONITORING_DEFAULT_PARAMS/sql_connect_string.txt
or use option [-s TECUSTSEL/TECUSTSEL@cuspr]" >> $MONITORING_PRODUCT_LOG
ParamHandler=1;;
*) MONITORING_SQL_CONNECT="no relevant";;
esac
;;
esac
case X"$MONITORING_HOST" in
X) MONITORING_HOST=$HOST
#MONITORING_HOST="`hostname`"
case $MONITORING_DRIVER in
monitoring_driver_weblogic_exceptions)
touch $MONITORING_PRODUCT_LOG 2>/dev/null ### LAUNCH FILE ###
echo "[PARAMS ERROR] - host is empty - access local weblogic host $MONITORING_HOST : use option [-host hostname]" >> $MONITORING_PRODUCT_LOG
;;
esac
;;
esac
case X"$MONITORING_USER" in
X) MONITORING_USER="`id -un`"
case $MONITORING_DRIVER in
monitoring_driver_weblogic_exceptions)
echo "[PARAMS WARNING] - user is empty - access local weblogic user $MONITORING_USER : use option [-user usename]" >> $MONITORING_PRODUCT_LOG
;;
esac
;;
esac
case X"$MONITORING_REMOTE" in
X) MONITORING_REMOTE=N
case $MONITORING_DRIVER in
monitoring_driver_weblogic_exceptions)
echo "[PARAMS WARNING] - default access local weblogic: use [-remote] to access by remote" >> $MONITORING_PRODUCT_LOG
;;
esac
;;
esac
case $ParamHandler in
1) touch $MONITORING_PRODUCT_LOG 2>/dev/null ### LAUNCH FILE ###
echo "\n[PARAMS ERROR] - monitoring is cancelled due to the parameters errors." >> $MONITORING_PRODUCT_LOG
exit
;;
esac
}
#===============================================================
MonitoringGen_Product_excel_title()
{
case X$MONITORING_DATE_SYSDATE_IN_USE in
XY) MONITORING_EXCEL_TITLE="" ;;
*) MONITORING_EXCEL_TITLE=${MONITORING_DATE}_;;
esac
MONITORING_EXCEL_TITLE=${MONITORING_EXCEL_TITLE}made_at_${MONITORING_PRODUCT_DATETIME_STAMP}_${MONITORING_ENV_LABEL}
case X$MONITORING_SUBJECT in
X)
case X$MONITORING_MIN_VALUE in
X) echo 1>/dev/null ;;
*) MONITORING_EXCEL_TITLE=${MONITORING_MIN_VALUE}-${MONITORING_MAX_VALUE}_${MONITORING_EXCEL_TITLE};;
esac
case $MONITORING_ITEM in
## TRB_SUB_ERRS_REPORT) MONITORING_EXCEL_TITLE=${MONITORING_PRODUCT}_${MONITORING_ERROR_SORT_NAME}${MONITORING_EXCEL_TITLE};;
TRB_SUB_ERRS_REPORT) MONITORING_EXCEL_TITLE=TRB_${MONITORING_PRODUCT_DATETIME_STAMP}_${MONITORING_ENV_LABEL}_SUB_ERRS_REPORT_${MONITORING_ERROR_SORT_NAME} ;;
TRB_SUB_ERRS_TREATMENT_REPORT) MONITORING_EXCEL_TITLE=TRB_${MONITORING_PRODUCT_DATETIME_STAMP}_${MONITORING_ENV_LABEL}_SUB_ERRS_REPORT_${MONITORING_ERROR_SORT_NAME} ;;
TRB_TO) # when options for the recovery queue : -appl -publisher -min -max:
MONITORING_EXCEL_TITLE=TRB_TO_${MONITORING_APPLICATION}_FROM_${MONITORING_PUBLISHER}_${MONITORING_EXCEL_TITLE} ;;
*) MONITORING_EXCEL_TITLE=${MONITORING_PRODUCT}_${MONITORING_EXCEL_TITLE};;
esac
;;
*)
MONITORING_SUBJECT_ITEM=`basename ${MONITORING_SUBJECT_VALUE}`
MONITORING_SUBJECT_NAME=${MONITORING_SUBJECT}_${MONITORING_SUBJECT_ITEM}
case $MONITORING_ITEM in
CUSTOMER_ACTUAL_STATE) MONITORING_EXCEL_TITLE=${MONITORING_SUBJECT_NAME}_ACTUAL_STATE_${MONITORING_EXCEL_TITLE} ;;
## TRB_SUB_ERRS_REPORT) MONITORING_EXCEL_TITLE=${MONITORING_PRODUCT}_${MONITORING_SUBJECT_NAME}_${MONITORING_EXCEL_TITLE} ;;
TRB_SUB_ERRS_REPORT) MONITORING_EXCEL_TITLE=TRB_${MONITORING_PRODUCT_DATETIME_STAMP}_${MONITORING_ENV_LABEL}_SUB_ERRS_REPORT_${MONITORING_SUBJECT_NAME} ;;
TRB_SUB_ERRS_TREATMENT_REPORT) MONITORING_EXCEL_TITLE=TRB_${MONITORING_PRODUCT_DATETIME_STAMP}_${MONITORING_ENV_LABEL}_SUB_ERRS_REPORT_${MONITORING_SUBJECT_NAME} ;;
TRB_TO) MONITORING_EXCEL_TITLE=TRB_TO_${MONITORING_APPLICATION}_${MONITORING_SUBJECT_NAME}_${MONITORING_EXCEL_TITLE} ;;
TRB_POOL_TO_SUB) MONITORING_EXCEL_TITLE=TRB_TO_${MONITORING_APPLICATION}_${MONITORING_SUBJECT_NAME}_${MONITORING_EXCEL_TITLE}_POOL ;;
TRB_POOL_ORDER_CHARGE)
case X$MONITORING_OPT_ACTIVITY in
X1) ITEM_TRB_POOL_ORDER_CHARGE_ACTV=ActvAdding ;;
X2) ITEM_TRB_POOL_ORDER_CHARGE_ACTV=ActvRemove ;;
X3) ITEM_TRB_POOL_ORDER_CHARGE_ACTV=ActvChange ;;
XAGREEMENT) ITEM_TRB_POOL_ORDER_CHARGE_ACTV=Agreements ;;
X*) ITEM_TRB_POOL_ORDER_CHARGE_ACTV=Actv${MONITORING_OPT_ACTIVITY} ;;
esac
MONITORING_EXCEL_TITLE=${MONITORING_SUBJECT_ITEM}_${MONITORING_PRODUCT}_${ITEM_TRB_POOL_ORDER_CHARGE_ACTV}_${MONITORING_EXCEL_TITLE} ;;
*) MONITORING_EXCEL_TITLE=${MONITORING_SUBJECT_NAME}_${MONITORING_PRODUCT}_${MONITORING_EXCEL_TITLE} ;;
esac
;;
esac
}
#===============================================================
MonitoringGen_Product_Readme()
{
MONITORING_FILE_README=${MONITORING_PRODUCT_OUTPUT}.readme ### FILE ###
rm -fr $MONITORING_FILE_README ### LAUNCH FILE ###
echo "
Attached Excel files are data files with pipe separated columns.
Format excel file - perform the following steps:
1. Open file
2. Press the column 'A'
3. Toolbars - press 'Data' and 'Text to Columns':
3.1. Mark 'o Delimited' and press [Next>]
3.2. Choose Delimiters. Unmark 'Tab' and enter into 'Other:' | (pipe)
3.3. Press [Next>]
3.4. Press [Finish]
4. Columns width autofit:
4.1 Press the left column (before column 'A') - mark all space
4.2 Double click on the right border of the column 'A'
" | awk -v MONITORING_STDOUT_TYPE="$MONITORING_STDOUT_TYPE" \
-v MONITORING_FILE_README="$MONITORING_FILE_README" \
'{ if (MONITORING_STDOUT_TYPE=="screen") exit; print $0 >> MONITORING_FILE_README }'
case X$MONITORING_STDOUT_TYPE in
X) unix2dos -437 $MONITORING_FILE_README |$MONITORING_ITEMS_LIBRARY/uuencode Readme.txt >> $MONITORING_PRODUCT_OUTPUT ;;
esac
rm -fr $MONITORING_FILE_README ### REMOVE README FILE ###
}
#===============================================================
MonitoringGen_Product_Flow()
{
case X$MONITORING_STDOUT_TYPE in
Xscreen) awk '{print $0}' ;;
*) MONITORING_ALERT_IND="$MONITORING_ALERT_POLICY"
MONITORING_RESULT_QTY=`echo $MONITORING_RESULT_QTY |awk '{printf("%ld",$1+1)}'`
MONITORING_RESULT_QTY_STAMP=`echo $MONITORING_RESULT_QTY |awk '\
{for(i=2;i<=$1;i++) {w=sprintf("_%03ld",$1);break}
print w}'`
AttachmentExt=xls
AttachmentExt=csv
awk -v MONITORING_ALERT_POLICY="$MONITORING_ALERT_POLICY" \
-v MONITORING_PRODUCT_OUTPUT_ALERT_MSG="$MONITORING_PRODUCT_OUTPUT_ALERT_MSG" \
-v MONITORING_PRODUCT_OUTPUT_SUBJECT_MSG="$MONITORING_PRODUCT_OUTPUT_SUBJECT_MSG" \
-v SwAlertMsg=0 '\
{ if (!FirstLine && $1=="") next;
#if (!FirstLine) {Line="";for(i_pipe=1;i_pipe<=51;i_pipe++) Line=Line "|";print Line}
#if (!FirstLine) print "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
FirstLine=1
# sw_dash_line=1;v_pipe_qty=split($0,v_pipe,"|")
# for(i_pipe=1;i_pipe<=v_pipe_qty;i_pipe++) if (substr(v_pipe[i_pipe],1,1)!="-") {sw_dash_line=0;break};
# if(sw_dash_line) next
if(substr($0,1,1)=="-") next
Line=""
for(i_fld=1;i_fld<=NF;i_fld++)
{ Sep=" " ; if (substr($i_fld,1,1)=="|" || substr($i_fld,1,1)==",") Sep="";Line=Line Sep $i_fld}
print Line
SwDataFound=1
if (MONITORING_ALERT_POLICY=="ALERT")
{
if (substr($1,1,6)=="[ALERT") SwAlert=1
if (substr($1,1,7)=="[ALERT-") { split($0,alert_msg_v,"]")
if (SwAlertMsg) printf("%s]\n",alert_msg_v[1]) >> MONITORING_PRODUCT_OUTPUT_ALERT_MSG
if (!SwAlertMsg) printf("%s]\n",alert_msg_v[1]) > MONITORING_PRODUCT_OUTPUT_ALERT_MSG
SwAlertMsg=1
}
}
if (substr($1,1,9)=="[SUBJECT-") { split($0,subject_msg_v,"]")
printf("[%s]\n",substr(subject_msg_v[1],10)) >> MONITORING_PRODUCT_OUTPUT_SUBJECT_MSG
}
}
END {
#if (SwAlert && !SwAlertMsg) printf("[ALERT]\n",alert_msg_v[1]) > MONITORING_PRODUCT_OUTPUT_ALERT_MSG
if(!SwDataFound) printf("NO_DATA_FOUND\n")
}' > ${MONITORING_STDOUT_DIR}/${MONITORING_PRODUCT_EXCEL_ATTACH}.STDOUT
unix2dos -437 ${MONITORING_STDOUT_DIR}/${MONITORING_PRODUCT_EXCEL_ATTACH}.STDOUT |$MONITORING_ITEMS_LIBRARY/uuencode ${MONITORING_PRODUCT_EXCEL_ATTACH} >> $MONITORING_PRODUCT_OUTPUT
;;
esac
}
#===============================================================
MonitoringGen_Product_Flow_Summary()
{
# 1 - flow id
# 2 - summary type
# 3 - specific prefix
case X$2 in
X) MonitoringGen_Product_Flow $3 ;;
*) MonitoringGen_Product_Flow_${2}_Summary "$1" |MonitoringGen_Product_Flow $3 ;;
esac
}
#===============================================================
MonitoringGen_Product_gen_Summary()
{
# 1 - flow id
awk -v FlowId="$1" \
-v MONITORING_PRODUCT_SUMMARY="$MONITORING_PRODUCT_SUMMARY" '\
{ print $0 }
END {
if(!NR) { printf("%s|NO_DATA_FOUND\n",FlowId) >> MONITORING_PRODUCT_SUMMARY
} else {
printf("%s|%5ld rows extracted \n",FlowId,NR-1) >> MONITORING_PRODUCT_SUMMARY
}
}'
}
#===============================================================
MonitoringGen_Product_Send()
{
case X$MONITORING_STDOUT_TYPE in
Xscreen) cat $MONITORING_PRODUCT_SUMMARY 2>/dev/null ;;
*)
# case file or alert_log stdout is treated inside:
MonitoringGen_Product_Send_Procedure ;;
esac
### REMOVE OUTPUT FILE ###
rm -fr $MONITORING_PRODUCT_OUTPUT $MONITORING_PRODUCT_SUMMARY $MONITORING_PRODUCT_OUTPUT_ALERT_MSG $MONITORING_PRODUCT_OUTPUT_SUBJECT_MSG 2>/dev/null
case X$MONITORING_STDOUT_TYPE in
Xfile*) echo 1 > /dev/null ;;
*) rm -fr ${MONITORING_STDOUT_DIR}/${MONITORING_PRODUCT_EXCEL_ATTACH}.STDOUT 2>/dev/null ;;
esac
### case X$MONITORING_STDOUT_KEEP in
### XY) echo 1 > /dev/null ;;
### *) rm -fr ${MONITORING_STDOUT_DIR}/${MONITORING_PRODUCT_EXCEL_ATTACH}.STDOUT 2>/dev/null ;;
### esac
}
#===============================================================
MonitoringGen_Product_Send_Procedure()
{
# 1 - summary specific name
# $MONITORING_PRODUCT_SUMMARY - does not exist - MonitoringGen_Product_Flow_Summary is not in use.
case "`cat $MONITORING_PRODUCT_SUMMARY 2>/dev/null |awk 'BEGIN {Sw=0} {if ($1!="") {Sw=1;exit}} END {print Sw}'`" in
1) case X$1 in
X) echo 1 >/dev/null ;;
*) MONITORING_PRODUCT_SUMMARY_XLS=${1}.xls ;;
esac
cat $MONITORING_PRODUCT_SUMMARY |\
awk '{ if (!FirstLine && $1=="") next;
#if (!FirstLine) {Line="";for(i_pipe=1;i_pipe<=51;i_pipe++) Line=Line "|";print Line}
#if (!FirstLine) print "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
FirstLine=1
# sw_dash_line=1;v_pipe_qty=split($0,v_pipe,"|")
# for(i_pipe=1;i_pipe<=v_pipe_qty;i_pipe++) if (substr(v_pipe[i_pipe],1,1)!="-") {sw_dash_line=0;break};
# if(sw_dash_line) next
if(substr($0,1,1)=="-") next
Line=""
for(i_fld=1;i_fld<=NF;i_fld++)
{ Sep=" " ; if (substr($i_fld,1,1)=="|") Sep="";Line=Line Sep $i_fld}
print Line
}' |$MONITORING_ITEMS_LIBRARY/uuencode $MONITORING_PRODUCT_SUMMARY_XLS >> $MONITORING_PRODUCT_OUTPUT
;;
esac
case X$MONITORING_ALERT_POLICY in
XALERT)
if [ -f $MONITORING_PRODUCT_OUTPUT_ALERT_MSG ] ; then
# MonitoringGen_Product_Readme ### do not attach readme
# ---------------------------------------
GetAlertMsgInd=0
while test 1 -eq 1 ; do
GetAlertMsgInd=`MonitoringPlusPlus $GetAlertMsgInd`
MONITORING_PRODUCT_ALERT_TEXT=`MonitoringGen_Product_Get_Alert_Msg $GetAlertMsgInd`
case X$MONITORING_PRODUCT_ALERT_TEXT in
*ALERT*)
case X$MONITORING_STDOUT_TYPE in
Xfile*) echo 1 > /dev/null ;;
Xalert_log) echo 1 > /dev/null ;;
*) MONITORING_PRODUCT_ALERT_TEXT_SEND=`MonitoringGen_Product_Get_Alert_Txt`
case X$MONITORING_PRODUCT_ALERT_TEXT in
X*ALERT-SMS-*) MonitoringGen_SendSMS ;;
X*ALERT-EMAIL-*) MonitoringGen_SendEMAIL ;;
*) MonitoringGen_SendSMS
MonitoringGen_SendEMAIL ;;
esac
;;
esac
MonitoringGen_alert_log "$MONITORING_PRODUCT_SUBJECT $MONITORING_PRODUCT_ALERT_TEXT"
;;
*) break ;;
esac
done
# ---------------------------------------
export MONITORING_EXIT_STATUS=1
#echo "\a\a\a" # stdout is closed
fi
;;
X)
# MonitoringGen_Product_Readme ### do not attach readme
MONITORING_PRODUCT_SUBJECT_TEXT=""
if [ -f $MONITORING_PRODUCT_OUTPUT_SUBJECT_MSG ] ; then
MONITORING_PRODUCT_SUBJECT_TEXT=`MonitoringGen_Product_Get_Subject_Msg`
fi
case X$MONITORING_STDOUT_TYPE in
Xfile*) echo 1 > /dev/null ;;
Xalert_log) echo 1 > /dev/null ;;
*)
# Send e-mail:
mailx $EmailOpt -s "$MONITORING_PRODUCT_SUBJECT $MONITORING_PRODUCT_SUBJECT_TEXT" $MONITORING_EMAIL_LST < $MONITORING_PRODUCT_OUTPUT
;;
esac
MonitoringGen_alert_log "$MONITORING_PRODUCT_SUBJECT $MONITORING_PRODUCT_SUBJECT_TEXT"
;;
esac
}
#===============================================================
MonitoringGen_SendSMS()
{
# Send SMS:
echo "$MONITORING_PRODUCT_SUBJECT $MONITORING_PRODUCT_ALERT_TEXT_SEND" |MonitoringGSUBBrackets |mailx $EmailOpt $MONITORING_SMS_LST
}
#===============================================================
MonitoringGen_SendEMAIL()
{
# Send e-mail:
mailx $EmailOpt -s "$MONITORING_PRODUCT_SUBJECT $MONITORING_PRODUCT_ALERT_TEXT_SEND" $MONITORING_EMAIL_LST < $MONITORING_PRODUCT_OUTPUT
}
#===============================================================
MonitoringGen_alert_log()
{
# 1 - Log Text
# WRITE INTO ALERT PACKAGE LOG:
case X$MONITORING_ALERT_POLICY_LOG in
X) echo 1>/dev/null;;
*) THIS_MONITORING_ALERT_POLICY_LOG=${MONITORING_LOGS}/${MONITORING_ALERT_POLICY_LOG}_`date '+%Y%m%d'`.csv
touch $THIS_MONITORING_ALERT_POLICY_LOG
echo "$1" |MonitoringGSUBBracketsPipe >> $THIS_MONITORING_ALERT_POLICY_LOG
;;
esac
}
#===============================================================
MonitoringGen_Product_Get_Alert_Msg()
{
cat $MONITORING_PRODUCT_OUTPUT_ALERT_MSG 2>/dev/null |awk -v LineNum=$1 '\
{
if (NR==LineNum) {print $0;exit}
}'
}
#===============================================================
MonitoringGen_Product_Get_Alert_Txt()
{
echo "$MONITORING_PRODUCT_ALERT_TEXT" |awk '\
{
print $0 # not finished - can be added extract pure text.
}'
}
#===============================================================
MonitoringGen_Product_Get_Subject_Msg()
{
cat $MONITORING_PRODUCT_OUTPUT_SUBJECT_MSG 2>/dev/null |awk '\
{
if ($1=="") next
print $0;exit
}'
}
#===============================================================
MonitoringGen_GrepReformat()
{
awk '\
BEGIN {printf("File|Record number|Message text\n")}
{
fld_qty=split($0,fld_v,":")
printf("%s|%s|%s",fld_v[1],fld_v[2],fld_v[3])
for(i=4;i<=fld_qty;i++) printf(":%s",fld_v)
printf("\n")
}'
}
#===============================================================
MonitoringGen_DateReformat()
{
# Input YYYYMMDD 200600809
# Output Aug 9 2006
echo 1 |awk -v THIS_DATE_YYYYMMDD=$1 \
-v qs='"' '\
function MonthNumToName(MonthNum) {
split("Jan;Fev;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec",MonthName_v,";")
return MonthName_v[MonthNum+0]
}
{
print MonthNumToName(substr(THIS_DATE_YYYYMMDD,5,2)) " " substr(THIS_DATE_YYYYMMDD,7,2)+0 ", " substr(THIS_DATE_YYYYMMDD,1,4)
}'
}
#===============================================================
MonitoringGen_DateReformat_2()
{
# Input YYYYMMDD.......
# Output YYYY-MM-DD
awk '{printf("%s-%s-%s",substr($1,1,4),substr($1,5,2),substr($1,7,2))}'
}
#===============================================================
MonitoringGen_TimeReformat_2()
{
# Input YYYYMMDD_HHMMSS
# Output HH:MI:SS
awk '{printf("%s:%s:%s",substr($1,10,2),substr($1,12,2),substr($1,14,2))}'
}
#===============================================================
MonitoringGen_TimeReformat_3()
{
# Input YYYYMMDD_HHMMSS
# Output HH:MI
awk '{printf("%s:%s",substr($1,10,2),substr($1,12,2))}'
}
#===============================================================
MonitoringGen_alignment()
{
# 1 - string
# 2 - symbol
echo 1 |awk -v String="$1" -v Symbol="$2" '\
{ if (Symbol=="") Symbol=" "
printf("%" length(String) "s",Symbol)
}'
}
#===============================================================
MonitoringGen_Option_Extract_Value()
{
# 1 - option ( -5HH -3MI -10SS ....)
# 2 - delimiter ( H M S ....)
echo $1 |awk -F'-' '{print toupper($2)}' |awk -F'$2' '{print $1}'
}
#===============================================================
MonitoringPlusPlus()
{
echo 1 |awk -v Index="$1" '{printf("%ld",Index+$1)}'
}
#===============================================================
MonitoringGSUBBrackets()
{
awk -v Br1="[" -v Br2="]" '\
function GetNew(Sep,Symbol) {
Input_qty=split(New,Input_v,Sep)
New=Input_v[1]
for(i=2;i<=Input_qty;i++) New=sprintf("%s%s%s",New,Symbol,Input_v)
}
{
New=$0
GetNew(Br1,"")
GetNew(Br2,"")
GetNew("@"," ")
print New
}'
}
#===============================================================
MonitoringGSUBBracketsPipe()
{
awk -v Br1="[" -v Br2="]" '\
function GetNew(Sep,Symbol) {
Input_qty=split(New,Input_v,Sep)
New=Input_v[1]
for(i=2;i<=Input_qty;i++) New=sprintf("%s%s%s",New,Symbol,Input_v)
}
{
New=$0
GetNew(Br1,"|" Br1)
GetNew(Br2,Br2"|")
print New
}'
}
#===============================================================
#===================== STOP ENGINE =============================
#===============================================================
#--------------------- STOP_ENGINE_INI() -----------------------
#--------------------- STOP_ENGINE_POLICY() --------------------
#--------------------- STOP_ENGINE_CHECK_POINT() ---------------
#--------------------- STOP_ENGINE_EXIT_POINT_CONTROL() --------
#--------------------- STOP_ENGINE_EXIT_POINT() ----------------
#===============================================================
SLEEP_ENGINE_INI()
{
# 1 - unique full file name with the directory.
SLEEP_ENGINE_FILE=`MonitoringGen_Root $1`/`basename $1`.sleep
}
#===============================================================
STOP_ENGINE_INI()
{
# 1 - unique full file name with the directory.
STOP_ENGINE_FILE=`MonitoringGen_Root $1`/`basename $1`.STOP
rm -fr $STOP_ENGINE_FILE ; touch $STOP_ENGINE_FILE
}
#---------------------------------------------------------------
STOP_ENGINE_POLICY()
{
echo "
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!! S T O P R U L E: !!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo 1 > $STOP_ENGINE_FILE
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"
}
#---------------------------------------------------------------
STOP_ENGINE_CHECK_POINT()
{
STOP_ENGINE_INDEX=`cat $STOP_ENGINE_FILE 2>/dev/null |awk '{StopInd=$1+0} END{print StopInd+0}'`
### STOP_ENGINE_ITERATION=`MonitoringPlusPlus $STOP_ENGINE_ITERATION`
case X$STOP_ENGINE_INDEX in
X1) STOP_ENGINE_EXIT_POINT_CONTROL
case X$1 in
X) STOP_ENGINE_EXIT_POINT;;
*) $1;;
esac
;;
esac
}
#---------------------------------------------------------------
SLEEP_ENGINE_CHECK_POINT()
{
SLEEP_ENGINE_INDEX=`cat $SLEEP_ENGINE_FILE 2>/dev/null |awk '{StopInd=$1+0;exit} END{print StopInd+0}'`
sleep $SLEEP_ENGINE_INDEX
}
#---------------------------------------------------------------
STOP_ENGINE_EXIT_POINT_CONTROL()
{
STOP_ENGINE_DATE=`date '+%Y%m%d_%H%M%S_%Z'`
STOP_ENGINE_FILE_CONTROL=${STOP_ENGINE_FILE}.control.$STOP_ENGINE_DATE
rm -fr $STOP_ENGINE_FILE_CONTROL ; touch $STOP_ENGINE_FILE_CONTROL
echo "Stop engine signal was received at $STOP_ENGINE_DATE" >> $STOP_ENGINE_FILE_CONTROL 2>&1
\ls -l $STOP_ENGINE_FILE >> $STOP_ENGINE_FILE_CONTROL 2>&1
echo "Content:" >> $STOP_ENGINE_FILE_CONTROL 2>&1
cat $STOP_ENGINE_FILE >> $STOP_ENGINE_FILE_CONTROL 2>&1
rm -fr $STOP_ENGINE_FILE
}
#---------------------------------------------------------------
STOP_ENGINE_EXIT_POINT()
{
exit
}
#===============================================================
SLEEP_ENGINE_MECHANIZM_WITH_STDOUT()
{
# 1 - session id
# 2 - besic sleep seconds
# 3 - iteration number
echo $2 |awk -v v_session_id="$1" \
-v Date="`date '+%Y%m%d_%H%M%S_%Z'`" \
-v v_sleep_param="$2" \
-v v_iteration="$3" \
-v Minutes="$Minutes" \
-v Seconds="$Seconds" '\
{
printf(" Session [%s] Iteration No %ld \n",v_session_id,v_iteration)
printf(" Sysdate [%s] Passed %3ld min.+%2ld sec.+sleep %ld sec.: ",Date,Minutes,Seconds,v_sleep_param)
for (i=1;i<=$1;i++) {system("sleep 1");printf(" %ld",i)}
printf(" seconds.\n")
}'
SecondsTotal=`echo 1 |awk -v v_sleep_param="$2" -v Seconds="$Seconds" '{printf("%ld",0+Seconds+v_sleep_param)}'`
Seconds=`echo 1 |awk -v SecondsTotal="$SecondsTotal" '{printf("%ld",(0+SecondsTotal)%60)}'`
Minutes=`echo 1 |awk -v SecondsTotal="$SecondsTotal" -v Minutes="$Minutes" '\
{SecondsTotal=SecondsTotal+0 ; Minutes=Minutes+0
printf("%ld",Minutes+(SecondsTotal-SecondsTotal%60)/60)}'`
}
#===============================================================
################################################################
#################### END OF GEN SOURCE #########################
################################################################
this file name is monitoring_driver.ksh
. `dirname $0`/monitoring_gen_source.ksh
#===============================================================
###############
### M A I N ###
###############
export MONITORING_EXIT_STATUS=0
MONITORING_ERROR_SORT_NAME="FULL"
while test $# -ge 1 ; do
case "$1" in
-u|-h) MonitoringGen_Usage $0 ; exit;;
-email) MONITORING_EMAIL_LST="${MONITORING_EMAIL_LST}$2 " ;
case X$2 in
Xno) MONITORING_STDOUT_TYPE=file ;;
esac
shift 2;;
-sms) MONITORING_SMS_LST="${MONITORING_SMS_LST}$2 " ; shift 2;;
-screen) MONITORING_STDOUT_TYPE=screen ; shift ;;
-stdout) MONITORING_STDOUT_TYPE=file ; shift ;;
+stdout) MONITORING_STDOUT_TYPE=file_email ; shift ;;
+alert_log) MONITORING_ALERT_POLICY_LOG="$2" ; MONITORING_STDOUT_TYPE=alert_log ; shift 2;;
-alert_log) MONITORING_ALERT_POLICY_LOG="$2" ; shift 2;;
-excel_title) MONITORING_EXCEL_TITLE="$2" ; shift 2;;
-mode) MONITORING_MODE="$2" ; MONITORING_MODE_SPEC=1 ; shift 2;;
-s) MONITORING_SQL_CONNECT="$2" ; MONITORING_SQL_CONNECT_SPEC=1 ; shift 2;;
# date - YYYYMMDD
-date) MONITORING_DATE="$2" ; shift 2;;
-i) MONITORING_ITEM="$2" ; shift 2;;
-i_ref) MONITORING_ITEM_SECONDARY="$2"
MONITORING_ITEM_OPTIONS_1="$MONITORING_ITEM_OPTIONS_1 $1 $2" ; shift 2;;
# Send alert e-mail just in the alert case - alert policy:
+alert) MONITORING_ALERT_POLICY="ALERT"
MONITORING_ALERT_OPTIONS="$MONITORING_ALERT_OPTIONS $1" ; shift ;;
-alert_t) MONITORING_ALERT_OPTIONS="$MONITORING_ALERT_OPTIONS $1 $2" ; shift 2;;
-alert_c*) MONITORING_ALERT_OPTIONS="$MONITORING_ALERT_OPTIONS $1 $2" ; shift 2;;
-*DD|-*dd) MONITORING_ITEM_OPTIONS_0="$MONITORING_ITEM_OPTIONS_0 $1" ; shift;;
-*HH|-*hh) MONITORING_ITEM_OPTIONS_0="$MONITORING_ITEM_OPTIONS_0 $1" ; shift;;
-*MI|-*mi) MONITORING_ITEM_OPTIONS_0="$MONITORING_ITEM_OPTIONS_0 $1" ; shift;;
-*SS|-*ss) MONITORING_ITEM_OPTIONS_0="$MONITORING_ITEM_OPTIONS_0 $1" ; shift;;
-min) MONITORING_ITEM_OPTIONS_1="$MONITORING_ITEM_OPTIONS_1 $1 $2" ; MONITORING_MIN_VALUE="$2" ; shift 2;;
-max) MONITORING_ITEM_OPTIONS_1="$MONITORING_ITEM_OPTIONS_1 $1 $2" ; MONITORING_MAX_VALUE="$2" ; shift 2;;
-cust) MONITORING_CUSTOMER="$2"
MONITORING_ITEM_OPTIONS_1="$MONITORING_ITEM_OPTIONS_1 $1 $2" ; MONITORING_SUBJECT_VALUE=$2 ; MONITORING_SUBJECT="CUSTOMER" ; shift 2 ;;
-account) MONITORING_ITEM_OPTIONS_1="$MONITORING_ITEM_OPTIONS_1 $1 $2" ; MONITORING_SUBJECT_VALUE=$2 ; MONITORING_SUBJECT="ACCOUNT" ; shift 2 ;;
-subs) MONITORING_ITEM_OPTIONS_1="$MONITORING_ITEM_OPTIONS_1 $1 $2" ; MONITORING_SUBJECT_VALUE=$2 ; MONITORING_SUBJECT="SUBSCRIBER_NO" ; shift 2 ;;
-external) MONITORING_ITEM_OPTIONS_1="$MONITORING_ITEM_OPTIONS_1 $1 $2" ; MONITORING_SUBJECT_VALUE=$2 ; MONITORING_SUBJECT="EXTERNAL_ID" ; shift 2 ;;
-prim) MONITORING_ITEM_OPTIONS_1="$MONITORING_ITEM_OPTIONS_1 $1 $2" ; MONITORING_SUBJECT_VALUE=$2 ; MONITORING_SUBJECT="PRIM_RESOURCE_VAL" ; shift 2 ;;
-mst_trx_id) MONITORING_ITEM_OPTIONS_1="$MONITORING_ITEM_OPTIONS_1 $1 $2" ; MONITORING_SUBJECT_VALUE=$2 ; MONITORING_SUBJECT="MST_TRX_ID" ; shift 2 ;;
-appl) MONITORING_ITEM_OPTIONS_1="$MONITORING_ITEM_OPTIONS_1 $1 $2" ; MONITORING_APPLICATION="$2" ; shift 2;;
-publisher) MONITORING_ITEM_OPTIONS_1="$MONITORING_ITEM_OPTIONS_1 $1 $2" ; MONITORING_PUBLISHER="$2" ; shift 2;;
-actv) MONITORING_ITEM_OPTIONS_1="$MONITORING_ITEM_OPTIONS_1 $1 $2" ; MONITORING_OPT_ACTIVITY="$2"; shift 2;;
-err) MONITORING_ITEM_OPTIONS_1="$MONITORING_ITEM_OPTIONS_1 $1 $2" ; MONITORING_ERROR_SORT="$2" ; MONITORING_ERROR_SORT_NAME="err_$2" ; shift 2 ;;
-ps) MONITORING_ITEM_OPTIONS_1="$MONITORING_ITEM_OPTIONS_1 $1 $2" ; shift 2;;
-*) MONITORING_ITEM_OPTIONS_1="$MONITORING_ITEM_OPTIONS_1 $1 $2" ; shift 2;;
*) shift;;
esac
done
MonitoringGen_Product $$
$MONITORING_PRODUCT_EXE $MONITORING_ITEM_OPTIONS |MonitoringGen_Product_Flow
MonitoringGen_Product_Send
exit $MONITORING_EXIT_STATUS
please help
thanks ...