File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / smartmontools / os_win32 / smartd_warning.cmd
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Oct 14 07:54:04 2013 UTC (10 years, 8 months ago) by misho
Branches: smartmontools, elwix, MAIN
CVS tags: v6_2, HEAD
v 6.2

    1: @echo off
    2: ::
    3: :: smartd warning script
    4: ::
    5: :: Copyright (C) 2012-13 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,v 1.1.1.2 2013/10/14 07:54:04 misho Exp $
   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: :: USERDNSDOMAIN may be unset if running as service
   54: if "%USERDNSDOMAIN%" == "" (
   55:   for /f "delims== tokens=2 usebackq" %%d in (`WMIC PATH Win32_Computersystem WHERE "PartOfDomain=TRUE" GET Domain /VALUE 2^>nul ^| find "Domain=" 2^>nul`) do set USERDNSDOMAIN=%%~d
   56: )
   57: 
   58: :: Format subject
   59: set SMARTD_SUBJECT=SMART error (%SMARTD_FAILTYPE%) detected on host: %COMPUTERNAME%
   60: 
   61: :: Temp file for message
   62: if not "%TMP%" == "" set SMARTD_FULLMSGFILE=%TMP%\smartd_warning-%RANDOM%.txt
   63: if     "%TMP%" == "" set SMARTD_FULLMSGFILE=smartd_warning-%RANDOM%.txt
   64: 
   65: :: Format message
   66: (
   67:   echo This message was generated by the smartd service running on:
   68:   echo.
   69:   echo.   host name:  %COMPUTERNAME%
   70:   if not "%USERDNSDOMAIN%" == "" echo.   DNS domain: %USERDNSDOMAIN%
   71:   if     "%USERDNSDOMAIN%" == "" echo.   DNS domain: [Empty]
   72:   if not "%USERDOMAIN%"    == "" echo.   Win domain: %USERDOMAIN%
   73:   echo.
   74:   echo The following warning/error was logged by the smartd service:
   75:   echo.
   76:   :: SMARTD_MESSAGE and SMARTD_DEVICEINFO may contain parentheses
   77:   for %%m in ("%SMARTD_MESSAGE%") do echo.%%~m
   78:   echo.
   79:   echo Device info:
   80:   for %%m in ("%SMARTD_DEVICEINFO%") do echo.%%~m
   81:   set m=
   82:   echo.
   83:   echo For details see the event log or log file of smartd.
   84:   if not "%SMARTD_FAILTYPE%" == "EmailTest" (
   85:     echo.
   86:     echo You can also use the smartctl utility for further investigation.
   87:     if not "%SMARTD_PREVCNT%" == "0" echo The original message about this issue was sent at %SMARTD_TFIRST%
   88:     if "%SMARTD_NEXTDAYS%" == "" (
   89:       echo No additional messages about this problem will be sent.
   90:     ) else ( if "%SMARTD_NEXTDAYS%" == "1" (
   91:       echo Another message will be sent in 24 hours if the problem persists.
   92:     ) else (
   93:       echo Another message will be sent in %SMARTD_NEXTDAYS% days if the problem persists.
   94:     ))
   95:   )
   96: ) > "%SMARTD_FULLMSGFILE%"
   97: 
   98: if not "%dryrun%" == "" (
   99:   echo %SMARTD_FULLMSGFILE%:
  100:   type "%SMARTD_FULLMSGFILE%"
  101:   echo --EOF--
  102: )
  103: 
  104: :: Check first address
  105: set first=
  106: for /F "tokens=1*" %%a in ("%SMARTD_ADDRESS%") do (set first=%%a)
  107: set wtssend=
  108: if "%first%" == "console"   set wtssend=-c
  109: if "%first%" == "active"    set wtssend=-a
  110: if "%first%" == "connected" set wtssend=-s
  111: set first=
  112: 
  113: if not "%wtssend%" == "" (
  114:   :: Show Message box(es) via WTSSendMessage()
  115:   if not "%dryrun%" == "" (
  116:     echo call wtssendmsg %wtssend% "%SMARTD_SUBJECT%" - ^< "%SMARTD_FULLMSGFILE%"
  117:   ) else (
  118:     call wtssendmsg %wtssend% "%SMARTD_SUBJECT%" - < "%SMARTD_FULLMSGFILE%"
  119:     if errorlevel 1 set err=t
  120:   )
  121:   :: Remove first address
  122:   for /F "tokens=1*" %%a in ("%SMARTD_ADDRESS%") do (set SMARTD_ADDRESS=%%b)
  123: )
  124: set wtssend=
  125: 
  126: :: Make comma separated address list
  127: set SMARTD_ADDRCSV=
  128: if not "%SMARTD_ADDRESS%" == "" set SMARTD_ADDRCSV=%SMARTD_ADDRESS: =,%
  129: 
  130: :: Use blat mailer by default
  131: if not "%SMARTD_ADDRESS%" == "" if "%SMARTD_MAILER%" == "" set SMARTD_MAILER=blat
  132: 
  133: :: Send mail or run command
  134: if not "%SMARTD_ADDRCSV%" == "" (
  135: 
  136:   :: Send mail
  137:   if not "%dryrun%" == "" (
  138:     echo call "%SMARTD_MAILER%" - -q -subject "%SMARTD_SUBJECT%" -to "%SMARTD_ADDRCSV%" ^< "%SMARTD_FULLMSGFILE%"
  139:   ) else (
  140:     call "%SMARTD_MAILER%" - -q -subject "%SMARTD_SUBJECT%" -to "%SMARTD_ADDRCSV%" < "%SMARTD_FULLMSGFILE%"
  141:     if errorlevel 1 set err=t
  142:   )
  143: 
  144: ) else ( if not "%SMARTD_MAILER%" == "" (
  145: 
  146:   :: Run command
  147:   if not "%dryrun%" == "" (
  148:     echo call "%SMARTD_MAILER%" ^<nul
  149:   ) else (
  150:     call "%SMARTD_MAILER%" <nul
  151:     if errorlevel 1 set err=t
  152:   )
  153: 
  154: ))
  155: 
  156: del "%SMARTD_FULLMSGFILE%" >nul 2>nul
  157: 
  158: :EOF
  159: if not "%err%" == "" goto ERROR 2>nul

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