home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2003 February / PCWFEB03.iso / software / dantzretrospect / English / Installer / Data.Cab / F3960_retroeventhandler.vbs < prev    next >
Encoding:
Text File  |  2002-06-28  |  16.0 KB  |  580 lines

  1. '
  2. ' RetroEventHandler.vbs
  3. '
  4. '      Sample VBScript event handler for the Retrospect application.
  5. '
  6. '
  7. ' Sample call:
  8. ' wscript RetroEventHandler.vbs "StartApp" "12/14/99 16:32 PM" "true"
  9. '
  10. 'Copyright 2000-20001
  11. '
  12.  
  13. Option Explicit
  14.  
  15.  
  16. dim WshShell
  17. Set WshShell = WScript.CreateObject("WScript.Shell")
  18.  
  19. dim msgDivider
  20. msgDivider = ":" & vbCrLf & vbCrLf
  21.  
  22. Call HandleEvent()
  23.  
  24.  
  25. ' FormatError
  26. '      Return a string for the passed in error code and error string.
  27. ' This is a utility function for the scripts below.
  28. '
  29. Function FormatError(errCode, errMsg)
  30.     FormatError = "error #" & errCode & " (" & errMsg & ")"
  31. End Function
  32.  
  33.  
  34. '
  35. ' FormatSeconds
  36. '     Return a string representing the passed in number of seconds.
  37. ' E.g.
  38. '     "3 hours 1 minute"
  39. '     "2 hours 2 seconds"
  40. '
  41. Function FormatSeconds(secondsStr)
  42.     dim secStr
  43.     dim seconds
  44.  
  45.     ' convert string to number of seconds
  46.     seconds = 0
  47.     On Error Resume Next
  48.     seconds = 1 * secondsStr
  49.     On Error GoTo 0
  50.  
  51.     secStr = ""
  52.     If (seconds >= 86400 * 2) Then
  53.         secStr = secStr & (seconds \ 86400) & " days "
  54.         seconds = seconds mod 86400
  55.     ElseIf (seconds >= 86400) Then
  56.         secStr = secStr  & "1 day "
  57.         seconds = seconds mod 86400
  58.     End If
  59.  
  60.     If (seconds >= 3600 * 2) Then
  61.         secStr = secStr & (seconds \ 3600) & " hours "
  62.         seconds = seconds mod 3600
  63.     ElseIf (seconds >= 3600) Then
  64.         secStr = secStr  & "1 hour "
  65.         seconds = seconds mod 3600
  66.     End If
  67.  
  68.     If (seconds >= 60 * 2) Then
  69.         secStr = secStr & (seconds \ 60) & " minutes "
  70.         seconds = seconds mod 60
  71.     ElseIf (seconds >= 60) Then
  72.         secStr = secStr & "1 minute "
  73.         seconds = seconds mod 60
  74.     End If
  75.  
  76.     If (seconds >= 2) Then
  77.         secStr = secStr & seconds & " seconds "
  78.     ElseIf (seconds = 1) Then
  79.         secStr = secStr & "1 second "
  80.     End If
  81.     
  82.     If (Len(secStr) > 2) Then
  83.         FormatSeconds = Left(secStr, Len(secStr) - 1)
  84.     Else
  85.         FormatSeconds = "0 seconds"
  86.     End If
  87. End Function
  88.  
  89.  
  90. ' ReturnResult
  91. '     If result is false, create a file to inform the caller we wish to abort.
  92. ' Quit when done.
  93. '
  94. Sub ReturnResult(msg, interventionFile)
  95.     Dim fs, f
  96.     
  97.     Set fs = CreateObject("Scripting.FileSystemObject")
  98.     Set f = fs.CreateTextFile(interventionFile)
  99.     f.Write msg
  100.     f.Close
  101. End Sub
  102.  
  103.  
  104.  
  105. '
  106. ' StartApp
  107. '      Sent when Retrospect launches. wasAutoLaunched is true if Retrospect was
  108. ' launched automatically to run a scheduled script.
  109. '
  110. Sub StartApp(startDate, wasAutoLaunched, interventionFile)
  111.     Dim msg
  112.     Dim btnClicked
  113.  
  114.     If (wasAutoLaunched) Then
  115.         msg = "StartApp" & msgDivider & _
  116.             "Retrospect is autolaunching on " & startDate & "."
  117.     Else
  118.         msg = "StartApp" & msgDivider & _
  119.             "Retrospect is launching on " & startDate & "."
  120.     End If
  121.     msg = msg & vbCrLf & "Let Retrospect launch?"
  122.     btnClicked = WshShell.Popup(msg, 120, "RetroEventHandler:StartApp", 1)
  123.     
  124.     
  125.     if (btnClicked <> 1) and (btnClicked <> -1) Then
  126.         ReturnResult "Retrospect launch stopped by external script.", interventionFile
  127.     End if
  128. End Sub
  129.  
  130.  
  131. '
  132. ' EndApp
  133. '      Sent when Retrospect is quiting.
  134. '
  135. Sub EndApp(endDate)
  136.     Dim msg
  137.     
  138.     msg = "EndApp" & msgDivider & _
  139.         "Retrospect quit on " & endDate & "."
  140.     WshShell.Popup msg, 120, "RetroEventHandler:EndApp", 0
  141. End Sub
  142.  
  143.  
  144. '
  145. ' StartBackupServer
  146. '      Sent when the BackupServer is started via either a script or manually.
  147. ' Return false to prevent backup server starting
  148. '
  149. Sub StartBackupServer(startDate, interventionFile)
  150.     Dim msg
  151.     Dim btnClicked
  152.     
  153.     msg = "StartBackupServer" & msgDivider & _
  154.         "Retrospect Backup Server is starting on " & _
  155.         startDate & "." & vbCrLf & _
  156.         "Let Backup Server run?"
  157.         
  158.     btnClicked = WshShell.Popup(msg, 120, "RetroEventHandler:StartBackupServer", 1)
  159.     if (btnClicked <> 1) and (btnClicked <> -1) Then
  160.         ReturnResult "Backup Server stopped by external script", interventionFile
  161.     End if
  162. End Sub
  163.  
  164.  
  165. '
  166. ' StopBackupServer
  167. '      Sent when Backup Server stops.
  168. '
  169. Sub StopBackupServer(endDate)
  170.     Dim msg
  171.     
  172.     msg =  "StopBackupServer" & msgDivider & _
  173.         "Retrospect Backup Server stopped on " & endDate & "."
  174.     WshShell.Popup msg, 120, "RetroEventHandler:StopBackupServer", 0
  175. End Sub
  176.  
  177.  
  178. '
  179. ' StartScript
  180. '      Sent when a script is run, either manually or as part of a scheduled
  181. ' execution. Return false to prevent script starting
  182. '
  183. Sub StartScript(scriptName, startDate, interventionFile)
  184.     Dim msg
  185.     Dim btnClicked
  186.     
  187.     msg = "StartScript" & msgDivider & _
  188.         "Retrospect script '" & scriptName & "' is starting on " & _
  189.         startDate & "." & vbCrLf & _
  190.         "Let script run?"
  191.  
  192.     btnClicked = WshShell.Popup(msg, 120, "RetroEventHandler:StartScript", 1)
  193.     if (btnClicked <> 1) and (btnClicked <> -1) Then
  194.         ReturnResult "Script is stopped by external script" , interventionFile
  195.     End if
  196. End Sub
  197.  
  198.  
  199. '
  200. ' EndScript
  201. '      Sent when a script finishes.
  202. ' numErrors is the total number of errors that occured. fatalErrCode is zero if
  203. ' the script was able to complete, otherwise it is a negative number for the
  204. ' error that caused the script to abort execution. errMsg is "successful" if
  205. ' there was no fatal error, otherwise it is the description of the error.
  206. '
  207. Sub EndScript(scriptName, _
  208.     numErrors, _
  209.     fatalErrCode, _
  210.     errMsg)
  211.     Dim msg
  212.     
  213.     msg = "EndScript" & msgDivider & "Retrospect script '" & scriptName & "' finished"
  214.                 
  215.     If (fatalErrCode <> 0) Then
  216.         msg = msg & "." & vbCrLf & "The script was stopped by " & _
  217.         FormatError(fatalErrCode, errMsg) & "."
  218.     ElseIf (numErrors = 0) Then
  219.         msg = msg & " with no errors."
  220.     ElseIf (numErrors = 1) Then
  221.         msg = msg & " with one non-fatal error."
  222.     Else
  223.         msg = msg & " with " & FormatNumber(numErrors,0) & " non-fatal errors."
  224.     End If
  225.     
  226.     WshShell.Popup msg, 120, "RetroEventHandler:EndScript", 0
  227. End Sub
  228.  
  229.  
  230. ' StartSource
  231. '      Sent immediately before a script backs up a source volume.
  232. ' sourceName is the volume name that is being backed up, it will be prefaced
  233. ' with "My Computer\" if it is a local volume or the clientName otherwise.
  234. ' sourcePath is the file system path of the volume.
  235. '
  236.  
  237. Sub StartSource(scriptName, sourceName, sourcePath, clientName, interventionFile)
  238.     Dim myComputerName
  239.     Dim msg
  240.     Dim btnClicked
  241.  
  242.     myComputerName = "My Computer"
  243.     msg = "StartSource" & msgDivider
  244.     If (Left(sourceName, Len(myComputerName)) = myComputerName) Then
  245.         sourceName = Right(sourceName, Len(sourceName) - Len(myComputerName) - 1)
  246.         msg = msg & "The local volume '" & sourceName & "' at " & sourcePath & _
  247.         " is about to be backed up by script '" & scriptName &"'."
  248.     Else
  249.         msg = msg & "Client '" & clientName & "'s' volume, '" & sourceName & "' at " & _
  250.             sourcePath & " is about to be backed up by " & scriptName & "."
  251.     End If
  252.     
  253.     msg = msg & vbCrLf & "Let source start?"
  254.     btnClicked = WshShell.Popup(msg, 120, "RetroEventHandler:StartSource", 1)
  255.     if (btnClicked <> 1) and (btnClicked <> -1) Then
  256.         ReturnResult "source skipped by external script", interventionFile
  257.     End if
  258. End Sub
  259.  
  260.  
  261. '
  262. ' EndSource
  263. '
  264. '     Sent after a script has completed backing up a source. As above, sourceName
  265. ' is prefaced with either the client name or "My Computer\".
  266. '
  267.  
  268. Sub EndSource( _
  269.     scriptName, _
  270.     sourceName, _
  271.     sourcePath, _
  272.     clientName, _
  273.     KBBackedUp, _
  274.     numFiles, _
  275.     durationInSecs, _
  276.     backupStartDate, _
  277.     backupStopDate, _
  278.     scriptStartDate, _
  279.     backupSet, _
  280.     backupAction, _
  281.     parentVolume, _
  282.     numErrors, _
  283.     fatalErrCode, _
  284.     errMsg)
  285.     Dim myComputerName
  286.     Dim msg
  287.  
  288.     myComputerName = "My Computer"
  289.     msg = "EndSource" & msgDivider
  290.     
  291.     ' Volume/Client
  292.     If (Left(clientName, Len(myComputerName)) = myComputerName) Then
  293.         sourceName = Right(sourceName, Len(sourceName) - Len(myComputerName) - 1)
  294.         msg = msg & "The local volume '" & sourceName & "' at " & sourcePath
  295.     Else
  296.         msg = msg & "Client '" & clientName & "'s' volume, '" & sourceName & _
  297.             "' at " & sourcePath
  298.     End If
  299.     
  300.     ' Errors
  301.     If (fatalErrCode <> 0) Then
  302.         msg = msg & " stopped by " & FormatError(fatalErrCode, errMsg) & "."    
  303.     ElseIf (numErrors = 0) Then
  304.         msg = msg & " completed successfully."
  305.     ElseIf (numErrors = 1) Then
  306.         msg = msg & " completed with one non-fatal error."
  307.     Else
  308.         msg = msg & " completed with " & FormatNumber(numErrors, 0) & " non-fatal errors."
  309.     End If
  310.     msg = msg & vbCrlf & "Script '" & scriptName & "' finished a " & backupAction & _
  311.         " backup to '" & backupSet & "'. " & FormatNumber(numFiles, 0) & _
  312.         " files (" & FormatNumber(KBBackedUp, 0) & "KB) were backed up in " & _
  313.         FormatSeconds(durationInSecs) & "." & vbCrlf
  314.     msg = msg & "The script started on " & scriptStartDate & _
  315.         " and the backup started on " & backupStartDate & _
  316.         " and finished on " & backupStopDate & "."
  317.     
  318.     WshShell.Popup msg, 120, "RetroEventHandler:EndSource", 0
  319. End Sub
  320.  
  321.  
  322. '
  323. ' MediaRequest
  324. '
  325. '     Sent before Retrospect requests media needed for a backup.
  326. '
  327. '     Return true to fail media request.
  328. '
  329.  
  330. Sub MediaRequest(mediaLabel, _
  331.     mediaName, _
  332.     mediaIsKnown, _
  333.     secondsWaited, _
  334.     interventionFile)
  335.     Dim msg
  336.     Dim btnClicked
  337.     
  338.     msg = "MediaRequest" & msgDivider & _
  339.         "Retrospect is requesting media '" & mediaName & "' (" & mediaLabel & ")"
  340.     If (mediaIsKnown) Then
  341.         msg = msg & vbCrlf & "Retrospect has backed up to this media before."
  342.     Else
  343.         msg = msg & vbCrlf & "This is either a new or unknown media."
  344.     End If
  345.     msg = msg & vbCrlf & "Retrospect has waited " & FormatSeconds(secondsWaited*60) & " so far."
  346.     msg = msg & vbCrlf & "Continue with the media request?"
  347.     
  348.     btnClicked = WshShell.Popup(msg, 120, "RetroEventHandler:MediaRequest", 1)
  349.     if (btnClicked <> 1) and (btnClicked <> -1) Then
  350.         ReturnResult "Media request aborted by external script.", interventionFile
  351.     End if
  352. End Sub
  353.  
  354.  
  355. '
  356. ' TimedOutMediaRequest
  357. '
  358. '     Sent before Retrospect times out on waiting for a media request. Note that
  359. ' the "Media Request Timeout" option in the preferences must be turned on to
  360. ' receive this event.
  361. '
  362. '     Return true to reset timeout request.
  363. '
  364.  
  365. Sub TimedOutMediaRequest(mediaLabel, _
  366.     mediaName, _
  367.     mediaIsKnown, _
  368.     secondsWaited, _
  369.     interventionFile)
  370.     Dim msg
  371.     Dim btnClicked
  372.     
  373.     msg = "TimedOutMediaRequest" & msgDivider & _
  374.         "Retrospect's media request for '" & mediaName & "' (" & mediaLabel & _
  375.         ") is about to time out after waiting " & FormatSeconds(secondsWaited*60) & "." & vbCrLf & _
  376.         "Let Retrospect time out?"
  377.     
  378.     btnClicked = WshShell.Popup(msg, 120, "RetroEventHandler:TimedOutMediaRequest", 1)
  379.     if (btnClicked <> 1) and (btnClicked <> -1)Then
  380.         ReturnResult "TimeOutMediaRequest aborted by external script.", interventionFile
  381.     End if
  382. End Sub
  383.  
  384.  
  385. '
  386. ' ScriptCheckFailed
  387. '
  388. '     Sent before Retrospect quits when the next script to execute will not be
  389. ' able to run. "Check validity of next script" must be checked in Retrospect's
  390. ' preferences (Notification:Alerts) to receive this event.
  391. '
  392.  
  393. Sub ScriptCheckFailed( _
  394.     scriptName, _
  395.     nextDate, _
  396.     reason, _
  397.     errCode, _
  398.     errMsg)
  399.     Dim msg
  400.     
  401.     msg = "ScriptCheckFailed" & msgDivider & _
  402.         "The Retrospect script '" & scriptName & "' will not run on " & _
  403.         nextDate & vbCrLf & _
  404.         FormatError(errCode, errMsg) & "." & vbCrLf & _
  405.         "Retrospect's dialog: '" & reason & "'"
  406.     WshShell.Popup msg, 120, "RetroEventHandler:ScriptCheckFailed", 0
  407. End Sub
  408.  
  409.  
  410. '
  411. ' NextExec
  412. '
  413. '     Sent before Retrospect quits when the next script to execute is able to
  414. ' run. "Check validity of next script" must be checked in Retrospect's
  415. ' preferences (Notification:Alerts) to receive this event.
  416. '
  417.  
  418. Sub NextExec(scriptName, nextDate)
  419.     Dim msg
  420.     
  421.     msg = "NextExec" & msgDivider
  422.     msg = msg & "Script '" & scriptName & "' is scheduled to run on " & _
  423.         nextDate & "."
  424.     WshShell.Popup msg, 120, "RetroEventHandler:NextExec", 0
  425. End Sub
  426.  
  427.  
  428. '
  429. ' StopSched
  430. '
  431. '     Sent when an unattended script is scheduled to stop. Return false to keep
  432. ' script running.
  433. '
  434.  
  435. Sub StopSched(scriptName, schedStopDate, interventionFile)
  436.     Dim msg
  437.     Dim btnClicked
  438.  
  439.     msg = "StopSched" & msgDivider
  440.     msg = msg & "Script '" & scriptName & "' is scheduled to stop on " & _
  441.         schedStopDate & "."
  442.  
  443.     msg = msg & vbCrLf & "Let the script stop?"
  444.     btnClicked = WshShell.Popup(msg, 120, "RetroEventHandler:StopSched", 1)
  445.     if (btnClicked <> 1) and (btnClicked <> -1) Then
  446.         ReturnResult "Script was not stopped due to intervention by external script.", interventionFile
  447.     End if
  448. End Sub
  449.  
  450.  
  451. '
  452. ' PasswordEntry
  453. '
  454. '     Sent when a password is entered.
  455. '
  456.  
  457. Sub PasswordEntry( _
  458.     actionString, _
  459.     attempts, _
  460.     errCode, _
  461.     errMsg)
  462.     Dim msg
  463.     
  464.     msg = "PasswordEntry" & msgDivider
  465.     If (errCode <> 0) Then
  466.         msg = msg & "Login failed after " & FormatNumber(attempts, 0) & _
  467.             " attempts (error #" & errCode & " - " & errMsg & ")" & "." & _
  468.             vbCrLf & "Retrospect's dialog: " & actionString & ""
  469.     ElseIf (attempts = 1) Then
  470.         msg = msg & "Login successful" & vbCrLf & "Retrospect's dialog: " & _
  471.             actionString & ""
  472.     Else
  473.         msg = msg & "Login successful after " & FormatNumber(attempts, 0) & _
  474.             " attempts." & vbCrLf & "Retrospect's dialog: " & actionString &_
  475.             ""
  476.     End If
  477.     WshShell.Popup msg, 120, "RetroEventHandler:PasswordEntry", 0
  478. End Sub
  479.  
  480. '
  481. ' FatalBackupError
  482. '
  483. '     Sent when a unrecoverable error is detected, such as a hardware
  484. ' failure
  485. '
  486.  
  487. Sub FatalBackupError( _
  488.     scriptName, _
  489.     reason, _
  490.     errCode, _
  491.     errMsg, _
  492.     errZone, _
  493.     interventionFile)
  494.     
  495.     Dim msg
  496.         Dim btnClicked
  497.     
  498.     msg = "FatalBackupError" & msgDivider
  499.     msg = msg & "Script '" & scriptName & "' failed in " & errZone & _
  500.         " " & FormatError(errCode, errMsg) & vbCrLf & _
  501.         reason & "." & vbCrLf & _
  502.         "Retrospect's dialog: " & "'" & reason & "'" & vbCrLf & _
  503.         "Do you want to display a modal dialog?"
  504.     btnClicked = WshShell.Popup(msg, 120, "RetroEventHandler:FatalBackupError", 1)
  505.     if (btnClicked <> 1) and (btnClicked <> -1) Then
  506.         ReturnResult "External script prevented the display of a modal dialog.", interventionFile
  507.     End if
  508. End Sub
  509.  
  510.  
  511. '
  512. ' HandleEvent
  513. '      Dispatch event to each possible function above.
  514. '
  515.  
  516. Sub HandleEvent()
  517.     Dim cmdArgs
  518.     Dim eventMsg
  519.     Dim argNo
  520.     Dim debugArgs
  521.  
  522.     Set cmdArgs = WScript.Arguments
  523.     
  524.     If (cmdArgs.Count < 1) Then
  525.         WshShell.Popup "This is a sample Retrospect external script written in VBScript." & _
  526.         vbCrLf & _
  527.         vbCrLf & "To use this file on the backup server, move it to Retrospect's directory." & _
  528.         vbCrLf & "To use this file on a client machine, copy it to the directory containing" & _
  529.         vbCrLf & "the Retrospect client ('retroclient.exe')."
  530.         Exit Sub
  531.     Else
  532.         eventMsg = cmdArgs(0)
  533.     End If
  534.  
  535.     ' get args for debugging
  536.     debugArgs = "Arguments:"
  537.     For argNo = 0 To cmdArgs.Count - 1
  538.         debugArgs = debugArgs & vbCrlf & FormatNumber(argNo, 0) & ":" & cmdArgs(argNo)
  539.     Next
  540.     'WshShell.Popup debugArgs                                ' Uncomment for debugging
  541.     
  542.     ' Handle event
  543.     Select Case eventMsg
  544.         Case "StartApp"
  545.             StartApp cmdArgs(1), cmdArgs(2) = "true", cmdArgs(3)
  546.         Case "EndApp"
  547.             EndApp cmdArgs(1)
  548.         Case "StartBackupServer"
  549.             StartBackupServer cmdArgs(1), cmdArgs(2)  
  550.         Case "StopBackupServer"
  551.             StopBackupServer cmdArgs(1)
  552.         Case "StartScript"
  553.             StartScript cmdArgs(1), cmdArgs(2), cmdArgs(3)
  554.         Case "EndScript"
  555.             EndScript cmdArgs(1), cmdArgs(2), cmdArgs(3), cmdArgs(4)
  556.         Case "StartSource"
  557.             StartSource cmdArgs(1), cmdArgs(2), cmdArgs(3), cmdArgs(4), cmdArgs(5)
  558.         Case "EndSource"
  559.             EndSource cmdArgs(1), cmdArgs(2), cmdArgs(3), cmdArgs(4), cmdArgs(5), cmdArgs(6), _
  560.                 cmdArgs(7), cmdArgs(8), cmdArgs(9), cmdArgs(10), cmdArgs(11), _
  561.                 cmdArgs(12), cmdArgs(13), cmdArgs(14), cmdArgs(15), cmdArgs(16)
  562.         Case "MediaRequest"
  563.             MediaRequest cmdArgs(1), cmdArgs(2), cmdArgs(3) = "true", cmdArgs(4), cmdArgs(5)
  564.         Case "TimedOutMediaRequest"
  565.             TimedOutMediaRequest cmdArgs(1), cmdArgs(2), cmdArgs(3), cmdArgs(4), cmdArgs(5)
  566.         Case "ScriptCheckFailed"
  567.             ScriptCheckFailed cmdArgs(1), cmdArgs(2), cmdArgs(3), cmdArgs(4), cmdArgs(5)
  568.         Case "NextExec"
  569.             NextExec cmdArgs(1), DateValue(cmdArgs(2))
  570.         Case "StopSched"
  571.             StopSched cmdArgs(1), cmdArgs(2), cmdArgs(3)
  572.         Case "PasswordEntry"
  573.             PasswordEntry cmdArgs(1), cmdArgs(2), cmdArgs(3), cmdArgs(4)
  574.         Case "FatalBackupError"
  575.             FatalBackupError cmdArgs(1), cmdArgs(2), cmdArgs(3), cmdArgs(4), cmdArgs(5), cmdArgs(6)
  576.         Case Else
  577.             MsgBox "Unknown command: " & eventMsg
  578.     End Select
  579. End Sub
  580.