cmalarmprogram.bat 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. @echo off
  2. rem
  3. rem Licensed Materials - Property of IBM and/or HCL
  4. rem
  5. rem IBM Informix Dynamic Server
  6. rem (c) Copyright IBM Corporation 2011 All rights reserved.
  7. rem (c) Copyright HCL Technologies Ltd. 2017. All Rights Reserved.
  8. rem
  9. rem
  10. rem
  11. rem Name : cmalarmprogram.bat
  12. rem Created : May 2011
  13. rem Description : Automates many IDS events using event alarms from the
  14. rem Connection Manager. To install this script, add the following
  15. rem line to the configuration file :
  16. rem CMALARMPROGRAM <INFORMIXDIR>/etc/alarmprogram.bat
  17. rem where <INFORMIXDIR> is replaced by the full value of $INFORMIXDIR
  18. rem This script sends email and pages the DBA when necessary.
  19. rem
  20. rem /**************************************************************************/
  21. rem ########################################
  22. rem
  23. rem PUBLIC SECTION : CONFIGURATION VARIABLES
  24. rem
  25. rem ########################################
  26. SET ALARMADMIN=0
  27. SET ALARMPAGER=0
  28. SET ADMINEMAIL=
  29. SET PAGEREMAIL=
  30. SET MAILUTILITY=%INFORMIXDIR%\bin\ntmail
  31. SET POPSERVER=
  32. SET SENDER=informix@.machine.com
  33. rem #########################################
  34. rem
  35. rem PRIVATE SECTION : EVENT HANDLERS
  36. rem
  37. rem #########################################
  38. set ALRM_NOTWORTHY=1
  39. set ALRM_INFO=2
  40. set ALRM_ATTENTION=3
  41. set ALRM_EMERGENCY=4
  42. set ALRM_FATAL=5
  43. set EVENT_SEVERITY=%1
  44. set EVENT_CLASS=%2
  45. set EVENT_MSG=%~3
  46. set EVENT_ADD_TEXT="%~4"
  47. rem If this alarm is for a specific connection unit then the unit's name is
  48. rem included in EVENT_ADD_TEXT. It is also available via the
  49. rem INFORMIXCMCONUNITNAME environment variable.
  50. set EVENT_FILE="%~5"
  51. set EVENT_UNIQID=%6
  52. set EXIT_STATUS=0
  53. set RM=del
  54. set MAILBODY=%TEMP%\B_%RANDOM%_%EVENT_CLASS%
  55. set MAILHEAD=%TEMP%\H_%RANDOM%_%EVENT_CLASS%
  56. set TMPFILE=%TEMP%\1_%RANDOM%_%EVENT_CLASS%
  57. set TMPFILE2=%TEMP%\2_%RANDOM%_%EVENT_CLASS%
  58. set TMPFILE3=%TEMP%\3_%RANDOM%_%EVENT_CLASS%
  59. set ALARMTESTFILE=
  60. SET DATE_INT=x
  61. SET TIME_INT=y
  62. SET COUNT=0
  63. rem /* Keep track of the last 5 minutes of the alarm log */
  64. SET LASTALARMFILE=%TEMP%\.%INFORMIXCMNAME%.lastcmalarm
  65. SET CURRENT=%TEMP%\%INFORMIXCMNAME%.alarm.current
  66. rem /* Get Format and delimiter information for data and time. */
  67. for /F "tokens=3" %%a in ('reg query "HKCU\Control Panel\International" /v iDate') do set "DATE_FORMAT=%%a"
  68. for /F "tokens=3" %%a in ('reg query "HKCU\Control Panel\International" /v sDate') do set "DATE_DELIM=%%a"
  69. for /F "tokens=3" %%a in ('reg query "HKCU\Control Panel\International" /v sTime') do set "TIME_DELIM=%%a"
  70. for /F "tokens=3" %%a in ('reg query "HKCU\Control Panel\International" /v sDecimal') do set "DECIMAL_DELIM=%%a"
  71. rem /*Remove optional day in the beginning if it exists. */
  72. for %%x in (%DATE%) do set TODAY_DATE=%%x
  73. rem /*Make international date based on the format */
  74. for /F "tokens=1-3 delims=%DATE_DELIM% " %%x in ("%TODAY_DATE%") do (
  75. if %DATE_FORMAT%==0 set DATE_INT=%%z-%%x-%%y
  76. if %DATE_FORMAT%==1 set DATE_INT=%%z-%%y-%%x
  77. if %DATE_FORMAT%==2 set DATE_INT=%%x-%%y-%%z
  78. )
  79. rem /*Use international time and decimal delimiters to set time information */
  80. 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
  81. for /F "tokens=1 delims=0" %%x in ("%M%") do set MIN=%%x
  82. if %MIN% LSS 5 (set /A T5MINAGO=%TIMESTR% - 4500) else set /A T5MINAGO=%TIMESTR% - 500
  83. if NOT EXIST %LASTALARMFILE% goto BYPASS
  84. 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%
  85. if EXIST %CURRENT% move %CURRENT% %LASTALARMFILE%
  86. :BYPASS
  87. rem In order avoid sending incorrect mails ALARMADMIN and ALARMPAGER
  88. rem must be correctly configured. If they are out of range or unset
  89. rem they will be reset to 0 (deactivated).
  90. if "x%ALARMADMIN%" == "x" echo ALARMADMIN is unset, setting it to 0. & set ALARMADMIN=0
  91. if %ALARMADMIN% LSS 0 goto badadmin
  92. if %ALARMADMIN% GTR 5 goto badadmin
  93. goto ebadadmin
  94. :badadmin
  95. echo ALARMADMIN is out of range, reseting it to 0 from %ALARMADMIN%
  96. set ALARMADMIN=0
  97. :ebadadmin
  98. if x%ALARMPAGER% == x echo ALARMPAGER is unset, setting it to 0. & SET ALARMPAGER=0
  99. if %ALARMPAGER% LSS 0 goto badpager
  100. if %ALARMPAGER% GTR 5 goto badpager
  101. goto ebadpager
  102. :badpager
  103. echo ALARMPAGER is out of range, reseting it to 0 from %ALARMPAGER%
  104. set ALARMPAGER=0
  105. :ebadpager
  106. if %EVENT_SEVERITY% EQU 1 set EVENT_SEVERITY_NAME=trivia
  107. if %EVENT_SEVERITY% EQU 2 set EVENT_SEVERITY_NAME=information
  108. if %EVENT_SEVERITY% EQU 3 set EVENT_SEVERITY_NAME=Attention!
  109. if %EVENT_SEVERITY% EQU 4 set EVENT_SEVERITY_NAME=EMERGENCY!!
  110. if %EVENT_SEVERITY% EQU 5 set EVENT_SEVERITY_NAME=FATAL EVENT!!!
  111. rem Cleanup the mail header and the mail body file
  112. %RM% %MAILBODY% %MAILHEAD% %TMPFILE% 2>> nul
  113. echo Subject: %INFORMIXCMNAME% : %EVENT_SEVERITY_NAME% : %EVENT_MSG% >> %MAILHEAD%
  114. echo %EVENT_ADD_TEXT% >> %MAILBODY%
  115. set NOSENDER=1
  116. rem /* Send e-mail to who may be interested */
  117. if %ALARMADMIN% EQU 0 goto eaadmin
  118. if %EVENT_SEVERITY% LSS %ALARMADMIN% goto lssadmin
  119. if "x%ADMINEMAIL%" == "x" goto :eadmin
  120. echo To: %ADMINEMAIL% >> %MAILHEAD%
  121. set MAILTO=%ADMINEMAIL%
  122. set NOSENDER=0
  123. goto eaadmin
  124. :lssadmin
  125. echo Event Severity = %EVENT_SEVERITY% is lower than ALARMADMIN=%ALARMADMIN%
  126. echo No mail will be sent to ALARMEMAIL
  127. :eaadmin
  128. if %ALARMPAGER% EQU 0 goto eapager
  129. if %EVENT_SEVERITY% LSS %ALARMPAGER% goto lsspager
  130. if "x%PAGEREMAIL%" == "x" goto :eapager
  131. if %NOSENDER% EQU 0 echo cc: %PAGEREMAIL% >> %MAILHEAD% & set MAILTO=%MAILTO% %PAGEREMAIL% & goto eapager
  132. echo To: %PAGEREMAIL% >> %MAILHEAD%
  133. set MAILTO=%PAGEREMAIL%
  134. goto :eapager
  135. :lsspager
  136. echo Event Severity = $EVENT_SEVERITY is lower than ALARMPAGER=%ALARMPAGER%
  137. echo No mail will be sent to PAGEREMAIL
  138. :eapager
  139. if "x%MAILTO%" == "x" echo SENDER IS NULL NO MAIL WILL BE SENT. & goto endprog
  140. rem /* send mail */
  141. if "x%ALARMPROGRAMTEST%" == "x" goto tomail
  142. type %MAILBODY% >> %ALARMTESTFILE%
  143. goto endprog
  144. :tomail
  145. if "x%MAILUTILITY%" == "x" echo MAILUTILITY is not set, NO MAIL will be sent. & goto endprog
  146. REM /* Do not send same alarm in less than 5 minute intervel. */
  147. if NOT EXIST %LASTALARMFILE% echo. > %LASTALARMFILE%
  148. TYPE %LASTALARMFILE% | FIND /C "%EVENT_MSG%" > %TMPFILE3%
  149. for /f "tokens=1" %%x in ( %TMPFILE3% ) do set COUNT=%%x
  150. if %COUNT% GEQ 1 goto endprog
  151. %MAILUTILITY% -h %POPSERVER% -f %SENDER% -s "%INFORMIXCMNAME% : %EVENT_SEVERITY_NAME% : %EVENT_MSG% " %MAILTO% < %MAILBODY% >> NUL 2>&1
  152. :endprog
  153. echo %DATE_INT% %TIME_INT% %EVENT_MSG% >> %LASTALARMFILE%
  154. %RM% %MAILHEAD% %MAILBODY% %TMPFILE% %TMPFILE2% %TMPFILE3% %SQLTMPFILE%
  155. SET ALARMADMIN=
  156. SET ALARMPAGER=
  157. SET ADMINEMAIL=
  158. SET PAGEREMAIL=
  159. SET MAILUTILITY=
  160. SET POPSERVER=
  161. SET SENDER=
  162. set ALRM_NOTWORTHY=
  163. set ALRM_INFO=
  164. set ALRM_ATTENTION=
  165. set ALRM_EMERGENCY=
  166. set ALRM_FATAL=
  167. rem /* input parameters */
  168. set EVENT_SEVERITY=
  169. set EVENT_CLASS=
  170. set EVENT_MSG=
  171. set EVENT_ADD_TEXT=
  172. set EVENT_FILE=
  173. set RM=
  174. set MAILBODY=
  175. set MAILHEAD=
  176. set TMPFILE=
  177. set TMPFILE2=
  178. set TMPFILE3=
  179. set EXIT_STATUS=