123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651 |
- @echo off
- rem **************************************************************************
- rem
- rem Licensed Materials - Property of IBM and/or HCL
- rem
- rem IBM Informix Dynamic Server
- rem Copyright IBM Corporation 1996, 2015 All rights reserved.
- rem (c) Copyright HCL Technologies Ltd. 2017. All Rights Reserved.
- rem
- rem **************************************************************************
- rem
- rem Name : alarmprogram.bat
- rem Description : Automates many IDS events using event alarms from the
- rem database server. To install this script, add the following
- rem line to the ONCONFIG file :
- rem ALARMPROGRAM <INFORMIXDIR>/etc/alarmprogram.bat
- rem where <INFORMIXDIR> is replaced by the full value of $INFORMIXDIR
- rem This script sends email and pages the DBA when necessary.
- rem
- rem /**************************************************************************/
- rem ########################################
- rem
- rem PUBLIC SECTION : CONFIGURATION VARIABLES
- rem
- rem ########################################
- SET BACKUPLOGS=N
- SET ALARMADMIN=0
- SET ALARMPAGER=0
- SET ADMINEMAIL=
- SET PAGEREMAIL=
- SET MAILUTILITY=%INFORMIXDIR%\bin\ntmail
- SET POPSERVER=
- SET SENDER=informix@machine.domain.com
- rem #########################################
- rem
- rem PRIVATE SECTION : EVENT HANDLERS
- rem
- rem #########################################
- set ALRM_NOTWORTHY=1
- set ALRM_INFO=2
- set ALRM_ATTENTION=3
- set ALRM_EMERGENCY=4
- set ALRM_FATAL=5
- set EVENT_SEVERITY=%1
- set EVENT_CLASS=%2
- set EVENT_MSG=%~3
- set EVENT_ADD_TEXT="%~4"
- set EVENT_FILE="%~5"
- set EVENT_UNIQID=%6
- set BACKUP_CMD=onbar -b -l
- set EXIT_STATUS=0
- set RM=del
- set ONSTATCMD=onstat
- set MAILBODY=%TEMP%\B_%RANDOM%_%EVENT_CLASS%
- set MAILHEAD=%TEMP%\H_%RANDOM%_%EVENT_CLASS%
- set TMPFILE=%TEMP%\1_%RANDOM%_%EVENT_CLASS%
- set TMPFILE2=%TEMP%\2_%RANDOM%_%EVENT_CLASS%
- set TMPFILE3=%TEMP%\3_%RANDOM%_%EVENT_CLASS%
- set SQLTMPFILE=%TEMP%\S_%RANDOM%_%EVENT_CLASS%
- set ALARMTESTFILE=
- SET DATE_INT=x
- SET TIME_INT=y
- SET COUNT=0
- rem /* Keep track of last 5 minuts alarm log */
- SET LASTALARMFILE=%DBTEMP%\.%INFORMIXSERVER%.alarm
- SET CURRENT=%TEMP%\alarm.current
- rem /* Get Format and delimiter information for data and time. */
- for /F "tokens=3" %%a in ('reg query "HKCU\Control Panel\International" /v iDate') do set "DATE_FORMAT=%%a"
- for /F "tokens=3" %%a in ('reg query "HKCU\Control Panel\International" /v sDate') do set "DATE_DELIM=%%a"
- for /F "tokens=3" %%a in ('reg query "HKCU\Control Panel\International" /v sTime') do set "TIME_DELIM=%%a"
- for /F "tokens=3" %%a in ('reg query "HKCU\Control Panel\International" /v sDecimal') do set "DECIMAL_DELIM=%%a"
- rem /*Remove optional day in the beginning if it exists. */
- for %%x in (%DATE%) do set TODAY_DATE=%%x
- rem /*Make international date based on the format */
- for /F "tokens=1-3 delims=%DATE_DELIM% " %%x in ("%TODAY_DATE%") do (
- if %DATE_FORMAT%==0 set DATE_INT=%%z-%%x-%%y
- if %DATE_FORMAT%==1 set DATE_INT=%%z-%%y-%%x
- if %DATE_FORMAT%==2 set DATE_INT=%%x-%%y-%%z
- )
- rem /*Use international time and decimal delimiters to set time information */
- for /F "tokens=1,2,3 delims=%TIME_DELIM%%DECIMAL_DELIM%" %%x in ("%TIME%") do set TIMESTR=%%x%%y%%z & set TIME_INT=%%x:%%y:%%z & set M=%%y
- if %M%==00 (set MIN=0) else for /F "tokens=1 delims=0" %%x in ("%M%") do set MIN=%%x
- if %MIN% LSS 5 (set /A T5MINAGO=%TIMESTR% - 4500) else set /A T5MINAGO=%TIMESTR% - 500
- if NOT EXIST %LASTALARMFILE% goto BYPASS
- for /F "tokens=1,2,3,4* delims=:. " %%i in (%LASTALARMFILE%) do if %%i EQU %DATE_INT% if %%j%%k%%l GEQ %T5MINAGO% @echo %DATE_INT% %%j:%%k:%%l %%m>> %CURRENT%
- if EXIST %CURRENT% move %CURRENT% %LASTALARMFILE%
- :BYPASS
- rem /* Check the validity for BACKUPLOGS */
- if "x%BACKUPLOGS%" == "x" goto bcklogsunset
- if "x%BACKUPLOGS%" == "xy" set BACKUPLOGS=Y
- goto endbcklogs
- :bcklogsunset
- rem /* if LTAPEDEV is set to NUL set it to N, if not set it to Y */
- %ONSTATCMD% -c | findstr "^LTAPEDEV" > %TMPFILE%
- for /F "tokens=2" %%x in ( %TMPFILE% ) do set LTAPEDEV=%%x
- if "x%LTAPEDEV%" == "xNUL" set BACKUPLOGS=N else set BACKUPLOGS=Y
- :endbcklogs
- rem In order to not to send incorrect mails, ALARMADMIN and ALARMPAGER
- rem Must be correctly configured, if they are out of range or unset,
- rem they will be reset to 0 (Deactivated)
- if "x%ALARMADMIN%" == "x" echo ALARMADMIN is unset, setting it to 0. & set ALARMADMIN=0
- if %ALARMADMIN% LSS 0 goto badadmin
- if %ALARMADMIN% GTR 5 goto badadmin
- goto ebadadmin
- :badadmin
- echo ALARMADMIN is out of range, reseting it to 0 from %ALARMADMIN%
- set ALARMADMIN=0
- :ebadadmin
- if x%ALARMPAGER% == x echo ALARMPAGER is unset, setting it to 0. & SET ALARMPAGER=0
- if %ALARMPAGER% LSS 0 goto badpager
- if %ALARMPAGER% GTR 5 goto badpager
- goto ebadpager
- :badpager
- echo ALARMPAGER is out of range, reseting it to 0 from %ALARMPAGER%
- set ALARMPAGER=0
- :ebadpager
- if %EVENT_SEVERITY% EQU 1 set EVENT_SEVERITY_NAME=trivia
- if %EVENT_SEVERITY% EQU 2 set EVENT_SEVERITY_NAME=information
- if %EVENT_SEVERITY% EQU 3 set EVENT_SEVERITY_NAME=Attention!
- if %EVENT_SEVERITY% EQU 4 set EVENT_SEVERITY_NAME=EMERGENCY!!
- if %EVENT_SEVERITY% EQU 5 set EVENT_SEVERITY_NAME=FATAL EVENT!!!
- rem Cleanup the mail header and the mail body file
- %RM% %MAILBODY% %MAILHEAD% %TMPFILE% 2>> nul
- rem /* Start of case */
- if %EVENT_CLASS% EQU 1 goto defhandler
- if %EVENT_CLASS% EQU 2 goto defhandler
- if %EVENT_CLASS% EQU 3 goto defhandler
- if %EVENT_CLASS% NEQ 4 goto nextto4
- rem /* CHUNK IS OFFLINE */
- echo Subject: %INFORMIXSERVER% : %EVENT_SEVERITY_NAME% : %EVENT_MSG% >> %MAILHEAD%
- echo %EVENT_ADD_TEXT% >> %MAILBODY%
- echo. >> %MAILBODY%
- echo. >> %MAILBODY%
- call :drawseparator %MAILBODY%
- echo RELATED INFORMATION: >> %MAILBODY% & echo. >> %MAILBODY%
- call :drawseparator %MAILBODY%
- call :trimonstat "-d" %MAILBODY% 3
- call :drawseparator %MAILBODY%
- call :trimonstat "-m" %MAILBODY% 3
- :endchkoff
- goto endofcase
- :nextto4
- if %EVENT_CLASS% NEQ 5 goto nextto5
- rem /* DBSPACE IS OFF-LINE */
- echo Subject: %INFORMIXSERVER% : %EVENT_SEVERITY_NAME% : %EVENT_MSG% >> %MAILHEAD%
- echo %EVENT_ADD_TEXT% >> %MAILBODY%
- echo. >> %MAILBODY%
- echo. >> %MAILBODY%
- call :drawseparator %MAILBODY%
- echo RELATED INFORMATION: >> %MAILBODY% & echo. >> %MAILBODY%
- call :drawseparator %MAILBODY%
- call :trimonstat "-d" %MAILBODY% 3
- call :drawseparator %MAILBODY%
- call :trimonstat "-m" %MAILBODY% 3
- :enddbsoff
- goto endofcase
- :nextto5
- if %EVENT_CLASS% NEQ 6 goto nextto6
- rem /* INTERNAL SUBSYSTEM FAILURE */
- echo Subject: %INFORMIXSERVER% : %EVENT_SEVERITY_NAME% : %EVENT_MSG% >> %MAILHEAD%
- echo %EVENT_ADD_TEXT% >> %MAILBODY%
- echo. >> %MAILBODY%
- echo. >> %MAILBODY%
- rem /* Many things cause this problem see the online.log */
- call :drawseparator %MAILBODY%
- echo RELATED INFORMATION: >> %MAILBODY% & echo. >> %MAILBODY%
- call :drawseparator %MAILBODY%
- call :trimonstat "-m" %MAILBODY%
- :endintsub
- goto endofcase
- :nextto6
- if %EVENT_CLASS% EQU 7 goto defhandler
- if %EVENT_CLASS% EQU 8 goto defhandler
- if %EVENT_CLASS% EQU 9 goto defhandler
- if %EVENT_CLASS% EQU 10 goto defhandler
- if %EVENT_CLASS% EQU 11 goto defhandler
- if %EVENT_CLASS% EQU 12 goto defhandler
- if %EVENT_CLASS% EQU 13 goto defhandler
- if %EVENT_CLASS% EQU 14 goto defhandler
- if %EVENT_CLASS% EQU 15 goto defhandler
- if %EVENT_CLASS% EQU 16 goto defhandler
- if %EVENT_CLASS% NEQ 17 goto nextto17
- rem /* ARCHIVE FAILED */
- echo Subject: %INFORMIXSERVER% : %EVENT_SEVERITY_NAME% : %EVENT_MSG% >> %MAILHEAD%
- echo %EVENT_ADD_TEXT% >> %MAILBODY%
- echo. >> %MAILBODY%
- echo. >> %MAILBODY%
- rem /* Try to get the stack trace for the ontape thread */
- call :drawseparator %MAILBODY%
- echo RELATED INFORMATION: >> %MAILBODY% & echo. >> %MAILBODY%
- call :drawseparator %MAILBODY%
- %ONSTATCMD% -g ath > %TMPFILE%
- findstr ontape %TMPFILE% > %TMPFILE2%
- findstr arcbackup1 %TMPFILE% >> %TMPFILE2%
- findstr arcbackup2 %TMPFILE% >> %TMPFILE2%
- for /f "tokens=1" %%x in ( %TMPFILE2% ) do call :trimonstat "-g stk %%x" %MAILBODY% 2 & call :drawseparator %MAILBODY%
- call :trimonstat "-g arc" %MAILBODY% 2
- :endarcfailed
- goto endofcase
- :nextto17
- if %EVENT_CLASS% EQU 18 goto defhandler
- if %EVENT_CLASS% NEQ 19 goto nextto19
- rem /* LOGICAL LOG BACKUP FAILED */
- echo Subject: %INFORMIXSERVER% : %EVENT_SEVERITY_NAME% : %EVENT_MSG% >> %MAILHEAD%
- echo %EVENT_ADD_TEXT% >> %MAILBODY%
- echo. >> %MAILBODY%
- echo. >> %MAILBODY%
- rem /* Try to get the stack trace for all the ontape thread */
- call :drawseparator %MAILBODY%
- echo RELATED INFORMATION: >> %MAILBODY% & echo. >> %MAILBODY%
- call :drawseparator %MAILBODY%
- call :trimonstat "-g ath" %MAILBODY% 2
- call :drawseparator %MAILBODY%
- %ONSTATCMD% -g ath | findstr ontape > %TMPFILE2%
- for /f "tokens=1" %%x in ( %TMPFILE2% ) do call :trimonstat "-g stk %%x" %MAILBODY% 2 & call :drawseparator %MAILBODY%
- :endlogfailed
- goto endofcase
- :nextto19
- if %EVENT_CLASS% NEQ 20 goto nextto20
- rem /* LOGICAL LOGS ARE FULL */
- echo Subject: %INFORMIXSERVER% : %EVENT_SEVERITY_NAME% : %EVENT_MSG% >> %MAILHEAD%
- echo %EVENT_ADD_TEXT% >> %MAILBODY%
- echo. >> %MAILBODY%
- echo. >> %MAILBODY%
- call :trimonstat "-l" %TMPFILE% 15
- findstr U- %TMPFILE% > %TMPFILE2%
- set OLDESLOG=4294967296
- for /f "tokens=4" %%x in ( %TMPFILE2% ) do if OLDESTLOG LSS %%x set OLDESTLOG=%%x
- call :trimonstat "-x" %TMPFILE2% 3
- findstr - active %TMPFILE2% > %TMPFILE%
- for /f "tokens=1,2,3,4,5,6,7,8,9,10" %%a in ( %TMPFILE% ) do call :drawseparator %MAILBODY% & call :checklongtx %OLDESTLOG% %%a %%b %%c %%d %%e %%f %%g %%h %%i %%j
- %ONSTATCMD% -l | find /C "U-B" > %TMPFILE%
- for /f "tokens=1" %%x in ( %TMPFILE% ) do set NUMLOGB=%%x
- if %NUMLOGB% EQU 0 echo LOGICAL LOGS NEED A BACKUP >> %MAILBODY% echo RUN 'onbar -b -l' OR 'ontape -a' OR 'ontape -c' >> %MAILBODY%
- echo. >> %MAILBODY%
- call :drawseparator %MAILBODY%
- echo RELATED INFORMATION: >> %MAILBODY% & echo. >> %MAILBODY%
- call :drawseparator %MAILBODY%
- call :trimonstat "-l" %MAILBODY% 2
- call :drawseparator %MAILBODY%
- call :trimonstat "-x" %MAILBODY% 2
- call :drawseparator %MAILBODY%
- call :trimonstat "-u" %MAILBODY% 2
- :endlogfull
- goto endofcase
- :nextto20
- if %EVENT_CLASS% EQU 21 goto defhandler
- if %EVENT_CLASS% NEQ 22 goto nextto22
- rem /* LONG TRANSACTION DETECTED */
- echo Subject: %INFORMIXSERVER% : %EVENT_SEVERITY_NAME% : %EVENT_MSG% >> %MAILHEAD%
- REM #
- REM # The next line will print something like this:
- REM # Aborting Long Transaction: tx: 0x7000001dc3b88a0 username: gcastro uid: 30062
- REM #
- echo %EVENT_ADD_TEXT% >> %MAILBODY%
- for /F "tokens=5" %%x in ("%EVENT_ADD_TEXT%") do set TX_ADDR=%%x
- >> %MAILBODY% echo Tx Address = %TX_ADDR%:
- %ONSTATCMD% -x | findstr %TX_ADDR:~2% > %TMPFILE%
- >> %MAILBODY% type %TMPFILE%
- >> %MAILBODY% echo.
-
- for /F "tokens=3" %%x in (%TMPFILE%) do SET USER_ADDR=%%x
- >> %MAILBODY% echo Userthread Address = 0x%USER_ADDR%:
- %ONSTATCMD% -u | findstr %USER_ADDR% > %TMPFILE%
- >> %MAILBODY% type %TMPFILE%
- >> %MAILBODY% echo.
-
-
- for /F "tokens=3" %%x in (%TMPFILE%) do SET SESS_ID=%%x
- >> %MAILBODY% echo Session ID = %SESS_ID%:
- >> %MAILBODY% echo.
- call :trimonstat "-g ses %SESS_ID%" %MAILBODY% 2
- REM #
- REM # Trying to find other long transactions
- REM #
- >> %MAILBODY% echo.
- >> %MAILBODY% echo -------------------------------------"
- >> %MAILBODY% echo -
- >> %MAILBODY% echo - OTHER LONG TRANSACTIONS:
- >> %MAILBODY% echo -
- >> %MAILBODY% echo -------------------------------------
- >> %MAILBODY% echo.
-
- echo select "@", tx_id, trim(LEADING '0' from replace(lower(HEX(tx_owner)), "0x", "")), hex(tx_addr) from systrans where tx_longtx != 0 > %SQLTMPFILE%
- dbaccess sysmaster < %SQLTMPFILE% 2> nul | findstr @ > %TMPFILE%
- set /A LONGTXCOUNT=0
- for /F "tokens=2,3,4" %%x in ( %TMPFILE% ) do call :longtxcatch %%x %%y %%z & set /A LONGTXCOUNT+=1
- if %LONGTXCOUNT% NEQ 0 goto longtxtail
- >> %MAILBODY% echo NONE
- goto longtxtail
- :longtxcatch
- rem %1=TXID
- rem %2=TXOWNER
- rem %3=TXADDR
- set TMP1=%TEMP%\__lxt1
-
- call :drawseparator %MAILBODY%
- %ONSTATCMD% -u | findstr %2 > %TMP1%
- for /F "tokens=3" %%x in ( %TMP1% ) do set SESSID=%%x
- echo please check the information below about transaction TXID=%1 at %3 >>%MAILBODY%
- echo that was generated by session %SESSID%. >> %MAILBODY%
- echo. >> %MAILBODY%
- echo SESSION INFORMATION: >> %MAILBODY%
- call :trimonstat "-g ses %SESSID%" %MAILBODY% 2
- goto :eof
- :longtxtail
- call :drawseparator %MAILBODY%
- echo RELATED INFORMATION: >> %MAILBODY% & echo. >> %MAILBODY%
- call :drawseparator %MAILBODY%
- call :trimonstat "-x" %MAILBODY% 2
- call :drawseparator %MAILBODY%
- call :trimonstat "-l" %MAILBODY% 2
- call :drawseparator %MAILBODY%
- call :trimonstat "-m" %MAILBODY% 2
- :longtx
- goto endofcase
- :nextto22
- if %EVENT_CLASS% NEQ 23 goto nextto23
- rem /* LOGICAL LOG FILE COMPLETED */
- rem /* onbar assumes no operator is present, so all messages are written to the
- rem activity log and there shouldn't be any output, but send everything to
- rem NUL just in case */
- echo Subject: %INFORMIXSERVER% : %EVENT_SEVERITY_NAME% : %EVENT_MSG% >> %MAILHEAD%
- echo %EVENT_ADD_TEXT% >> %MAILBODY%
- rem /* TO IMPLEMENT LATER
- rem If there is already a logical log backup don't launch onbar again. */
- if "x%BACKUPLOGS%" == "xY" goto dobackup
- echo "Script will not backup the logical logs."
- goto nobackup
- :dobackup
- call %BACKUP_CMD% 2>&1 > NUL
- rem /* 0 means BACKUP_CMD was successful */
- if ERRORLEVEL 1 goto ERROR
- if ERRORLEVEL 0 goto SUCCESS
- goto backcmddone
- :ERROR
- set EXIT_STATUS=1
- goto backcmddone
- :SUCCESS
- set EXIT_STATUS=0
- :backcmddone
- echo '%BACKUP_CMD%' has been executed and returned CODE=%EXIT_STATUS% >> %MAILBODY%
- echo. >> %MAILBODY%
- :nobackup
- rem /* Now check if the logs are near to fill up */
- %ONSTATCMD% -l | find /C "U-B" > %TMPFILE%
- for /F "tokens=1" %%x in (%TMPFILE%) do set NUMLOGUB=%%x
- %ONSTATCMD% -l | find /C "F-" > %TMPFILE%
- for /F "tokens=1" %%x in (%TMPFILE%) do set NUMLOGF=%%x
- %ONSTATCMD% -l | find /C "A-" > %TMPFILE%
- for /F "tokens=1" %%x in (%TMPFILE%) do set NUMLOGA=%%x
- %ONSTATCMD% -l | find /V "U-B" | find /C "U-" > %TMPFILE%
- for /F "tokens=1" %%x in (%TMPFILE%) do set NUMLOGU=%%x
-
- set /A NUMLOG=%NUMLOGU%+%NUMLOGA%+%NUMLOGF%
- set /A PERC=(100*(%NUMLOGUB%+%NUMLOGF%+%NUMLOGA%))/%NUMLOG%
- if %PERC% GTR 10 goto endlogcomplete
- set /A PERC=100-%PERC%
- call :drawseparator %MAILBODY%
- echo WARNING : MORE THAN 90 PERCENT (%PERC% percent) OF THE LOGICAL LOGS ARE FULL >> %MAILBODY%
- echo A LOGICAL LOG BACKUP IS NEEDED. SEE INFO BELOW >> %MAILBODY%
- echo. >> %MAILBODY%
- call :drawseparator %MAILBODY%
- echo RELATED INFORMATION: >> %MAILBODY% & echo. >> %MAILBODY%
- call :drawseparator %MAILBODY%
- call :trimonstat "-l" %MAILBODY% 2
- :endlogcomplete
- goto endofcase
- :nextto23
- if %EVENT_CLASS% EQU 24 goto defhandler
- if %EVENT_CLASS% EQU 25 goto defhandler
- if %EVENT_CLASS% NEQ 26 goto nextto26
- rem /* LOG FILE DYNAMICALLY ADDED */
- echo Subject: %INFORMIXSERVER% : %EVENT_SEVERITY_NAME% : %EVENT_MSG% >> %MAILHEAD%
- for /F "tokens=5,8 usebackq" %%x in ( `echo %EVENT_ADD_TEXT%` ) do set /A LOGNUM=%%x & set /A DBSNUM=%%y
- echo select '@', number, trunc(physloc/1048576), lower(hex(physloc)), size from syslogfil where number = %LOGNUM%; > %SQLTMPFILE%
- dbaccess sysmaster < %SQLTMPFILE% 2> nul | findstr @ > %TMPFILE%
- for /F "tokens=2,3,4,5" %%a in ( %TMPFILE% ) do set LOG=%%a & set CHKNUM=%%b & set PHYSLOC=%%c & set SIZE=%%d
- echo select name as dbsname from sysdbspaces d where dbsnum = %DBSNUM%; > %SQLTMPFILE%
- dbaccess sysmaster < %SQLTMPFILE% 2> nul | findstr dbsname > %TMPFILE%
- for /F "tokens=2" %%x in ( %TMPFILE% ) do set DBSNAME=%%x
- echo Logical log file number %LOGNUM% has been dynamically added by >> %MAILBODY%
- echo the engine; the log was added to Chunk Number %CHKNUM% in dbspace '%DBSNAME%' >> %MAILBODY%
- echo please check free space on this dbspace and the process that >> %MAILBODY%
- echo generated this event. >> %MAILBODY%
- call :drawseparator %MAILBODY%
- echo RELATED INFORMATION: >> %MAILBODY% & echo. >> %MAILBODY%
- call :drawseparator %MAILBODY%
- call :trimonstat "-l" %MAILBODY% 2
- call :drawseparator %MAILBODY%
- call :trimonstat "-d" %MAILBODY% 2
- :endlogdyn
- goto endofcase
- :nextto26
- if %EVENT_CLASS% NEQ 27 goto nextto27
- rem /* LOG FILE REQUIERED */
- echo Subject: %INFORMIXSERVER% : %EVENT_SEVERITY_NAME% : %EVENT_MSG% >> %MAILHEAD%
- echo %EVENT_ADD_TEXT% >> %MAILBODY%
- call :drawseparator %MAILBODY%
- echo RELATED INFORMATION: >> %MAILBODY% & echo. >> %MAILBODY%
- call :drawseparator %MAILBODY%
- call :trimonstat "-l" %MAILBODY% 2
- call :drawseparator %MAILBODY%
- call :trimonstat "-d" %MAILBODY% 2
- :endlogreq
- goto endofcase
- :nextto27
- if %EVENT_CLASS% NEQ 28 goto nextto29
- rem /* NO SPACE AVAILABLE FOR DINAMIC LOG */
- echo Subject: %INFORMIXSERVER% : %EVENT_SEVERITY_NAME% : %EVENT_MSG% >> %MAILHEAD%
- echo %EVENT_ADD_TEXT% >> %MAILBODY%
- call :drawseparator %MAILBODY%
- echo RELATED INFORMATION: >> %MAILBODY% & echo. >> %MAILBODY%
- call :drawseparator %MAILBODY%
- call :trimonstat "-d" %MAILBODY% 2
- call :drawseparator %MAILBODY%
- call :trimonstat "-l" %MAILBODY% 2
- call :drawseparator %MAILBODY%
- call :trimonstat "-m" %MAILBODY% 2
- :enddynnospace
- goto endofcase
- :nextto29
- rem /*
- rem I could use defhandler instead of enddynnospace, but this could lead a problems
- rem if the amount of events get increased and someone forgets to change the label
- rem */
- :defhandler
- rem /************************************************************************
- rem If you implement a specific handler for 29 put it before this label
- rem with this implementation any future event will have a default handler.
- rem ************************************************************************/
- echo Subject: %INFORMIXSERVER% : %EVENT_SEVERITY_NAME% : %EVENT_MSG% >> %MAILHEAD%
- echo %EVENT_ADD_TEXT% >> %MAILBODY%
- :endofcase
- rem /* End of case */
- set NOSENDER=1
- rem /* Send e-mail to who may be interested */
- if %ALARMADMIN% EQU 0 goto eadmin
- if %EVENT_SEVERITY% LSS %ALARMADMIN% goto lssadmin
- if "x%ADMINEMAIL%" == "x" goto eadmin
- echo To: %ADMINEMAIL% >> %MAILHEAD%
- set MAILTO=%ADMINEMAIL%
- set NOSENDER=0
- goto eadmin
- :lssadmin
- echo Event Severity = %EVENT_SEVERITY% is lower than ALARMADMIN=%ALARMADMIN%
- echo No mail will be sent to ALARMEMAIL
- :eadmin
- if %ALARMPAGER% EQU 0 goto eapager
- if %EVENT_SEVERITY% LSS %ALARMPAGER% goto lsspager
- if "x%PAGEREMAIL%" == "x" goto :eapager
- if %NOSENDER% EQU 0 echo cc: %PAGEREMAIL% >> %MAILHEAD% & set MAILTO=%MAILTO% %PAGEREMAIL% & goto eapager
- echo To: %PAGEREMAIL% >> %MAILHEAD%
- set MAILTO=%PAGEREMAIL%
- goto :eapager
- :lsspager
- echo Event Severity = $EVENT_SEVERITY is lower than ALARMPAGER=%ALARMPAGER%
- echo No mail will be sent to PAGEREMAIL
- :eapager
- if "x%MAILTO%" == "x" echo SENDER IS NULL NO MAIL WILL BE SENT. & goto endprog
- rem /* send mail */
- if "x%ALARMPROGRAMTEST%" == "x" goto tomail
- type %MAILBODY% >> %ALARMTESTFILE%
- goto endprog
- :tomail
- if "x%MAILUTILITY%" == "x" echo MAILUTILITY is not set, NO MAIL will be sent. & goto endprog
- REM /* Do not send same alarm in less than 5 minute intervel. */
- if NOT EXIST %LASTALARMFILE% echo. > %LASTALARMFILE%
- TYPE %LASTALARMFILE% | FIND /C "%EVENT_MSG%" > %TMPFILE3%
- for /f "tokens=1" %%x in ( %TMPFILE3% ) do set COUNT=%%x
- if %COUNT% GEQ 1 goto endprog
- %MAILUTILITY% -h %POPSERVER% -f %SENDER% -s "%INFORMIXSERVER% : %EVENT_SEVERITY_NAME% : %EVENT_MSG% " %MAILTO% < %MAILBODY% >> NUL 2>&1
- goto :endprog
- :trimonstat
- rem /* %1 = onstat options */
- rem /* %2 = output file */
- rem /* %3 = amount of lines to trim from the begining */
- set TAILFILE=%RANDOM%
- set TMP1=%TEMP%\t1%RANDOM%
- set TMP2=%TEMP%\t2%RANDOM%
- echo 1,%3d > %TAILFILE%
- echo e >> %TAILFILE%
- echo q >> %TAILFILE%
- echo y >> %TAILFILE%
- %ONSTATCMD% %~1 > %TMP1%
- findstr /V Blocked: %TMP1% > %TMP2%
- findstr /V Block: %TMP2% > %TMP1%
- edlin %TMP1% < %TAILFILE% > nul
- type %TMP1% >> %2
- %RM% %TMP1% %TMP2% %TAILFILE%
- goto :eof
- :drawseparator
- rem /* %1 = output file */
- echo ------------------------------------- >> %1
- echo. >> %1
- goto :eof
- :checklongtx
- rem /* %1 = Oldest logical log */
- rem /* %2 = Output file */
- rem /* %3 = Tx address */
- rem /* %5 = Userthread */
- rem /* %7 = LogBegin */
- set TMP1=%TEMP%\l1%RANDOM%
- set TMP2=%TEMP%\l2%RANDOM%
- if %7 NEQ %1 goto :eof
- rem /* A long transaction has ocurred, get the culprit one */
- call :trimonstat "-u" %TMP1% 2
- findstr %5 %TMP1% > %TMP2%
- for /f "tokens=3" %%x in ( %TMP2% ) do set SESSID=%%x
- echo A LONG TRANSACTION has filled the Logical Logs, please check >> %2
- echo the next information about transaction 0x$ADDRESS that was generated >> %2
- echo by session $SESSID. >> %2
- echo. >> %2
- echo. >> %2
- echo SESSION INFORMATION: >> %2
- call :trimonstat "-g ses %SESSID%" %2 2
- %RM% %TMP1% %TMP2%
- goto :eof
- :endprog
- echo %DATE_INT% %TIME_INT% %EVENT_MSG% >> %LASTALARMFILE%
- %RM% %MAILHEAD% %MAILBODY% %TMPFILE% %TMPFILE2% %TMPFILE3% %SQLTMPFILE%
- SET BACKUPLOGS=
- SET ALARMADMIN=
- SET ALARMPAGER=
- SET ADMINEMAIL=
- SET PAGEREMAIL=
- SET MAILUTILITY=
- SET POPSERVER=
- SET SENDER=
- set ALRM_NOTWORTHY=
- set ALRM_INFO=
- set ALRM_ATTENTION=
- set ALRM_EMERGENCY=
- set ALRM_FATAL=
- rem /* input parameters */
- set EVENT_SEVERITY=
- set EVENT_CLASS=
- set EVENT_MSG=
- set EVENT_ADD_TEXT=
- set EVENT_FILE=
- set BACKUP_CMD=
- set RM=
- set ONSTATCMD=
- set MAILBODY=
- set MAILHEAD=
- set TMPFILE=
- set TMPFILE2=
- set TMPFILE3=
- set SQLTMPFILE=
- set EXIT_STATUS=
|