Code:
$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[i]]!="") {
if (SwSmsAlert[MATRIX_BOX_ID[i]]) {
printf("[ALERT-%s NoProc %s]\n",MATRIX_BOX_ALIAS[i],MATRIX_BOX_ALERTS[MATRIX_BOX_ID[i]])
} else {
printf("[ALERT-EMAIL-%s NoProc %s]\n",MATRIX_BOX_ALIAS[i],MATRIX_BOX_ALERTS[MATRIX_BOX_ID[i]])
}
}
# 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[i])
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[i])
}
{
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[i])
}
{
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