code to monitor a process


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users code to monitor a process
# 1  
Old 03-03-2010
code to monitor a process

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.
1. Like for a particular alert I only want email
2. If the alert is critical then both email and sms.

this file name is PACKAGE_OLC_ACTUAL_STATE
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


please help

thanks ...

Last edited by pludi; 03-03-2010 at 03:06 AM.. Reason: code tags, please....
# 2  
Old 03-04-2010
The whole thing appears to be parameter driven. Can't see a need to change the script.
Try looking at the contents of:
X$MONITORING_PRODUCT_ALERT_TEXT
Surely there is a manual with this product.
# 3  
Old 03-08-2010
first of all thanks to check the code ....

This is written by a senior who has left ....so i dnt have any manual or help.

I want to send emails for some particular alert and both email and sms for some critical alert.

Please help to modify such that the above condition is matches.

At present the code sends both email and sms for all type of alert .


Thnks
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Monitor log when Process comes UP

Hi, I need to grep a pattern in the log file of a process and send a mail if pattern found.But I am not able to figure out how do I detect when the process comes UP,it is started several times a day and each time it is started I need to perform this action. Please suggest something. (3 Replies)
Discussion started by: vishal bhargava
3 Replies

2. Shell Programming and Scripting

Script to monitor the process

Hi, I need help to monitoring a process using the shell script The same output is below oracle 32578 32577 0 Feb27 ? 00:06:47 java -cp .:lib/ant.jar:lib/ojdbc5.jar:lib/log4j-1.2.17.jar:/ORACLE_HOME/server/lib/wlfullclient.jar:/ORACLE _HOME/server/lib/weblogic.jar:Alerts.jar... (9 Replies)
Discussion started by: ajothi
9 Replies

3. Shell Programming and Scripting

Script to Monitor windows process

Hi Guys, I'm looking for a script( preferably perl script) which should monitor a application service and alert me when it goes down. application is installed in windows NT. Scenario: I have remedy ARS 6.1 installed in windows platform and need some script to monitor its service and alert me... (2 Replies)
Discussion started by: user__user3110
2 Replies

4. Shell Programming and Scripting

script to monitor the process system when a process from user takes longer than 15 min run.

get email notification from from system when a process from XXXX user takes longer than 15 min run.Let me know the time estimation for the same. hi ,any one please tell me , how to write a script to get email notification from system when a process from as mentioned above a xxxx user takes... (1 Reply)
Discussion started by: kirankrishna3
1 Replies

5. Shell Programming and Scripting

Monitor a long running process

Gurus, I am writing a shell script that will be used to automate cold backup of an Oracle Database. The database size is around 300G and will take around 5-6 hours to copy. I have finished the script till the copy of the datafiles. Now, I am stuck at the point where I need to monitor the... (4 Replies)
Discussion started by: sunpraveen
4 Replies

6. UNIX for Dummies Questions & Answers

Monitor Memory of a process

Hi, I need to monitor the memory usage of a particular process continuously. As of now I am using the following command: ps -fu <user name> -o pid,comm,vsz | grep <process_name> | grep -v grep The output of this command gives me what i need except i want the output to keep getting updated... (3 Replies)
Discussion started by: archana485
3 Replies

7. Shell Programming and Scripting

script to monitor process running on server and posting a mail if any process is dead

Hello all, I would be happy if any one could help me with a shell script that would determine all the processes running on a Unix server and post a mail if any of the process is not running or aborted. Thanks in advance Regards, pradeep kulkarni. :mad: (13 Replies)
Discussion started by: pradeepmacha
13 Replies

8. Shell Programming and Scripting

not able to monitor the process

hi all I am running a script monitor using source command. the shell script monitor is used to execute a pl/sql procedure. when i do source monitor and then ps -ef | grep <procedure name> i do not get any info but when i do sh monitor and then ps -ef | grep <procedure name> i... (8 Replies)
Discussion started by: infyanurag
8 Replies

9. Shell Programming and Scripting

Lightwight Process monitor

We've been having some problems with a specific program in our nightly processing, so I whipped up a little script to run to monitor it, and send an e-mail when it's complete (failure or not). My primary problem is that I cannot modify the binary or the script that calls it, since the developers... (7 Replies)
Discussion started by: LivinFree
7 Replies

10. Programming

How to monitor if a process is running

I would like to know if i can monitor if a process is running. I have one program wich is running all the time, called oliba, but sometimes it goes down, and I have to launch it again. Is there a way to monitor the pid of the program, and if the program goes down, to lauch it again? Can you give... (3 Replies)
Discussion started by: Pedro Tavares
3 Replies
Login or Register to Ask a Question