Annotation of embedaddon/smartmontools/os_win32/smartd_warning.cmd, revision 1.1.1.1

1.1       misho       1: @echo off
                      2: ::
                      3: :: smartd warning script
                      4: ::
                      5: :: Copyright (C) 2012 Christian Franke <smartmontools-support@lists.sourceforge.net>
                      6: ::
                      7: :: This program is free software; you can redistribute it and/or modify
                      8: :: it under the terms of the GNU General Public License as published by
                      9: :: the Free Software Foundation; either version 2, or (at your option)
                     10: :: any later version.
                     11: ::
                     12: :: You should have received a copy of the GNU General Public License
                     13: :: (for example COPYING); If not, see <http://www.gnu.org/licenses/>.
                     14: ::
                     15: :: $Id: smartd_warning.cmd 3716 2012-11-27 20:10:06Z chrfranke $
                     16: ::
                     17: 
                     18: set err=
                     19: 
                     20: :: Parse options
                     21: set dryrun=
                     22: if "%1" == "--dryrun" (
                     23:   set dryrun=t
                     24:   shift
                     25: )
                     26: 
                     27: if not "%1" == "" (
                     28:   echo smartd warning message script
                     29:   echo.
                     30:   echo Usage:
                     31:   echo set SMARTD_MAILER='Path to external script, empty for "blat"'
                     32:   echo set SMARTD_ADDRESS='Space separated mail adresses, empty if none'
                     33:   echo set SMARTD_MESSAGE='Error Message'
                     34:   echo set SMARTD_FAILTYPE='Type of failure, "EMailTest" for tests'
                     35:   echo set SMARTD_TFIRST='Date of first message sent, empty if none'
                     36:   echo set SMARTD_TFIRSTEPOCH='time_t format of above'
                     37:   echo set SMARTD_PREVCNT='Number of previous messages, 0 if none'
                     38:   echo set SMARTD_NEXTDAYS='Number of days until next message, empty if none'
                     39:   echo set SMARTD_DEVICEINFO='Device identify information'
                     40:   echo :: set SMARTD_DEVICE='Device name'
                     41:   echo :: set SMARTD_DEVICESTRING='Annotated device name'
                     42:   echo :: set SMARTD_DEVICETYPE='Device type from -d directive, "auto" if none'
                     43: 
                     44:   echo smartd_warning.cmd [--dryrun]
                     45:   goto EOF
                     46: )
                     47: 
                     48: if "%SMARTD_ADDRESS%%SMARTD_MAILER%" == "" (
                     49:   echo smartd_warning.cmd: SMARTD_ADDRESS or SMARTD_MAILER must be set
                     50:   goto EOF
                     51: )
                     52: 
                     53: :: Format subject
                     54: set SMARTD_SUBJECT=SMART error (%SMARTD_FAILTYPE%) detected on host: %COMPUTERNAME%
                     55: 
                     56: :: Temp file for message
                     57: if not "%TMP%" == "" set SMARTD_FULLMSGFILE=%TMP%\smartd_warning-%DATE%-%RANDOM%.txt
                     58: if     "%TMP%" == "" set SMARTD_FULLMSGFILE=smartd_warning-%DATE%-%RANDOM%.txt
                     59: 
                     60: :: Format message
                     61: (
                     62:   echo This message was generated by the smartd service running on:
                     63:   echo.
                     64:   echo.   host name:  %COMPUTERNAME%
                     65:   if not "%USERDNSDOMAIN%" == "" echo.   DNS domain: %USERDNSDOMAIN%
                     66:   if     "%USERDNSDOMAIN%" == "" echo.   DNS domain: [Empty]
                     67:   if not "%USERDOMAIN%"    == "" echo.   Win domain: %USERDOMAIN%
                     68:   echo.
                     69:   echo The following warning/error was logged by the smartd service:
                     70:   echo.
                     71:   :: SMARTD_MESSAGE and SMARTD_DEVICEINFO may contain parentheses
                     72:   for %%m in ("%SMARTD_MESSAGE%") do echo.%%~m
                     73:   echo.
                     74:   echo Device info:
                     75:   for %%m in ("%SMARTD_DEVICEINFO%") do echo.%%~m
                     76:   set m=
                     77:   echo.
                     78:   echo For details see the event log or log file of smartd.
                     79:   if not "%SMARTD_FAILTYPE%" == "EmailTest" (
                     80:     echo.
                     81:     echo You can also use the smartctl utility for further investigation.
                     82:     if not "%SMARTD_PREVCNT%" == "0" echo The original message about this issue was sent at %SMARTD_TFIRST%
                     83:     if "%SMARTD_NEXTDAYS%" == "" (
                     84:       echo No additional messages about this problem will be sent.
                     85:     ) else ( if "%SMARTD_NEXTDAYS%" == "1" (
                     86:       echo Another message will be sent in 24 hours if the problem persists.
                     87:     ) else (
                     88:       echo Another message will be sent in %SMARTD_NEXTDAYS% days if the problem persists.
                     89:     ))
                     90:   )
                     91: ) > "%SMARTD_FULLMSGFILE%"
                     92: 
                     93: if not "%dryrun%" == "" (
                     94:   echo %SMARTD_FULLMSGFILE%:
                     95:   type "%SMARTD_FULLMSGFILE%"
                     96:   echo --EOF--
                     97: )
                     98: 
                     99: :: Check first address
                    100: set first=
                    101: for /F "tokens=1*" %%a in ("%SMARTD_ADDRESS%") do (set first=%%a)
                    102: set wtssend=
                    103: if "%first%" == "console"   set wtssend=-c
                    104: if "%first%" == "active"    set wtssend=-a
                    105: if "%first%" == "connected" set wtssend=-s
                    106: set first=
                    107: 
                    108: if not "%wtssend%" == "" (
                    109:   :: Show Message box(es) via WTSSendMessage()
                    110:   if not "%dryrun%" == "" (
                    111:     echo call wtssendmsg %wtssend% "%SMARTD_SUBJECT%" - ^< "%SMARTD_FULLMSGFILE%"
                    112:   ) else (
                    113:     call wtssendmsg %wtssend% "%SMARTD_SUBJECT%" - < "%SMARTD_FULLMSGFILE%"
                    114:     if errorlevel 1 set err=t
                    115:   )
                    116:   :: Remove first address
                    117:   for /F "tokens=1*" %%a in ("%SMARTD_ADDRESS%") do (set SMARTD_ADDRESS=%%b)
                    118: )
                    119: set wtssend=
                    120: 
                    121: :: Make comma separated address list
                    122: set SMARTD_ADDRCSV=
                    123: if not "%SMARTD_ADDRESS%" == "" set SMARTD_ADDRCSV=%SMARTD_ADDRESS: =,%
                    124: 
                    125: :: Use blat mailer by default
                    126: if not "%SMARTD_ADDRESS%" == "" if "%SMARTD_MAILER%" == "" set SMARTD_MAILER=blat
                    127: 
                    128: :: Send mail or run command
                    129: if not "%SMARTD_ADDRCSV%" == "" (
                    130: 
                    131:   :: Send mail
                    132:   if not "%dryrun%" == "" (
                    133:     echo call "%SMARTD_MAILER%" - -q -subject "%SMARTD_SUBJECT%" -to "%SMARTD_ADDRCSV%" ^< "%SMARTD_FULLMSGFILE%"
                    134:   ) else (
                    135:     call "%SMARTD_MAILER%" - -q -subject "%SMARTD_SUBJECT%" -to "%SMARTD_ADDRCSV%" < "%SMARTD_FULLMSGFILE%"
                    136:     if errorlevel 1 set err=t
                    137:   )
                    138: 
                    139: ) else ( if not "%SMARTD_MAILER%" == "" (
                    140: 
                    141:   :: Run command
                    142:   if not "%dryrun%" == "" (
                    143:     echo call "%SMARTD_MAILER%" ^<nul
                    144:   ) else (
                    145:     call "%SMARTD_MAILER%" <nul
                    146:     if errorlevel 1 set err=t
                    147:   )
                    148: 
                    149: ))
                    150: 
                    151: del "%SMARTD_FULLMSGFILE%" >nul 2>nul
                    152: 
                    153: :EOF
                    154: if not "%err%" == "" goto ERROR 2>nul

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>