Aktionen

Zabbix:Template BackupExec 2010 Jobs

Aus znilwiki

Changelog:

  • 01.04.2014: Erste Öffentliche Version


Bekannte Fehler:

  • Wenn ein Job "Nicht eingehalten" wurde gibt mein Tool ein "ZBX_NOTSUPPORTED" zurück - weil BackupExec auch nur ein -1 zurück gemeldet hat - was bedeutet das es dieses Auftrag nicht gibt. Der Auftrag wird beim AutoDiscovery weiterhin gefunden - aber die Items gehen alle auf grau bis ein Auftrag wieder einen anderen Fehlergrund hat. Ich suche noch wie ich in Fall von "Nicht eingehalten" an die Auftragsdaten kommen ...



Download

Download: ZabbixTemplateBackupExec2010.zip Version 1.0.0.73
Template für Zabbix 3.0.x: BackupExec2010_Template_Zabbix3.0.0.zip


Vorwort

Da wir alles mit Zabbix Überwachen wollten wir auch das vielfach eingesetzte BackupExec 2010 überwachen. Die Dienste waren schon mal mit der automatischen Diensteerkennung abgedeckt (siehe Zabbix:Template Windows Service Auto-Discover - Windows Dienste automatisch entdecken), nun fehlten noch die Aufträge.

Als Grundlage für dieses Template nahm ich die bemcmd.exe die wohl seit mindestens BackupExec 12.5 immer mit dabei ist. Mein Tool prüft aber auf den Installationspfad von BackupExec 2010 in der Registry, für ältere Versionen müsste man diese Prüfung anpassen.



Screenshots / Bilder

Zabbix-BackupExec2010-001.png

Zabbix-BackupExec2010-002.png



Funktionsweise

Wie funktioniert es?
Die backupexec2010.exe wird vom Zabbix Agenten auf dem jeweiligen Server aufgerufen.
Die .exe ermittelt in der Registry den Installationspfad von BackupExec 2010 und sucht darüber die bemcmd.exe
Diese wird von der backupexec2010.exe aufgerufen und kennt verschiedene Parameter:

/? oder -?     : Hilfe Anzeigen

discoverjobs   : Erzeugt eine Liste im JSON Format über alle Backup-Aufträge
                 die wiederkehrend geplant sind. (Job State 18) Diese Liste wird vom Zabbix
                 Template für das Auto-Discovery genutzt. Zurück gegeben werden
                 der Auftragsname und die eindeutige Job-ID (in { }).
                 Des weiteren werden alle Aufträge die an einen anderen Auftrag
                 angehängts sind (Job State 23) und alle Aufträge die von einem
                 anderen Job abhängig sind auf grund von Richtlinien (Job State 25)
                 erkannt und an das Template übergeben.

Die nachfolgenden Parameter erwarten als 2. Parameter die Job Id!

jobstatus      : Gibt den Status des letzen Backup-Auftrages zurück. Dies wäre
                 nicht ein aktuell laufender Backup-Auftrag.
                 Bekannte Rückgabewerte für Trigger sind:
                   1 : Abgebrochen
                   3 : Erfolgreich (mit Ausnahmen)
                   6 : Fehlgeschlagen
                  19 : Erfolgreich

jobhowlongago  : Gibt die Zeit in Sekunden zurück die seit dem letzen Start des
                 Auftrages vergangen sind. Mit einem Trigger läßt sich so abfangen
                 das ein Auftrag nicht mehr wie geplant angelaufen ist.

jobbytes       : Gibt die gesamte gesicherte Datenmenge in Bytes zurück

jobruntime     : Gibt die Laufzeit des Backup-Auftrages in Sekunden zurück

jobdirectorys  : Gibt die Anzahl der gesicherten Verzeichnisse zurück

jobfiles       : Gibt die Anzahl der gesicherten Dateien zurück

jobskipped     : Gibt die Anzahl der übersprungenden Dateien zurück

jobcorrupt     : Gibt die Anzahl defekter, nicht gesicherten Dateien zurück

jobinuse       : Gibt die Anzahl von Dateien die in Benutzung waren und nicht
                 gesichert werden konnten zurück

Damit könnt Ihr das ganze zuvor einmal auf der Kommandozeile / DOS-Box testen.



Template

Zunächst müsst Ihr unter

Administration -> General -> Value mapping

Das folgende, neue Value mapping anlegen:

Zabbix-BackupExec2010-003.png
Name:       BackupExec 2010
Value:   1  Abgebrochen
         3  Erfolgreich (mit Ausnahmen)
         6  Fehlgeschlagen
        19  Erfolgreich

Im Zip-Archiv findet Ihr neben der backupexec2010.exe auch das Template in Deutsch.
Die deutschen Versionen findet Ihr nach dem Import in der Hostgruppe 'Templates znil.net' mit den Namen

znil Template BackupExec 2010 Auftragsueberwachung ACTIVE AGENT

Also nur eine Active Agent Version - paasiv müsstet ihr eben selbst daraus bauen bei Bedarf
Darin sind NUR die Items - keine Trigger - die müsst ihr euch selbst anlegen. Als Hilfe dafür habe ich z.B. die Rückgabewerte gebaut wie lange der letzte Start her ist. Damit lässt sich indirekt erkennen wenn z.B,. ein Job hängt (wenn er z.B. mehr als 25h nicht neu gestartet wurde) etc.


Download: ZabbixTemplateBackupExec2010.zip Version 1.0.0.73
Template für Zabbix 3.0.x: BackupExec2010_Template_Zabbix3.0.0.zip



Installation

Zur Installation müsst Ihr folgendes tun:

  • Kopiert die backupexec2010.exe in das Verzeichnis in dem auch schon der Zabbix-Agent ist, z.B.
C:\Program Files\Zabbix
  • Tragt in die Agenten-Konfigurationsdatei, in der Regel ist das die zabbix_agentd.win.conf die Zeile
UserParameter=znil.BackupExec2010[*],"C:\Program Files\Zabbix\backupexec2010.exe" $1 "$2"

ein - Pfad natürlich ggf. anpassen

  • Startet des Zabbix Agenten Dienst neu
net stop "zabbix agent"
net start "zabbix agent"
  • Import eine der .XML Dateien in Zabbix und verknüpft diese mit dem Host.
  • Warten! Alle 3600 Sekunden = 1 Stunde wird die Abfrage gestartet.
  • Da erst die Aufträge gefunden werden und dann daurch die Items angelegt werden dauert es eine Weile bis der Agent davon weis.
  • Als Beschleunigung: Nachdem Ihr in Zabbix die Items sehen könnt startet den AGenten auf dem Server noch einmal neu. Wen Ihr noch einen Proxy dazwishen habt müsst ihr den Dienst auf diesen auch einmal neu starten ... oder einfach abwarten!




Quellcode

Hier noch für Interessierte der Quellcode der backupexec2010.exe:

#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Icon256-32.ico
#AutoIt3Wrapper_Outfile=BackupExec2010.exe
#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_Res_Description=Zabbix Available Windows Updates
#AutoIt3Wrapper_Res_Fileversion=1.0.0.74
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_LegalCopyright=2013 Bernhard Linz
#AutoIt3Wrapper_Res_SaveSource=y
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Res_Field=Website|http://znil.net
#AutoIt3Wrapper_Res_Field=Manual|http://znil.net/index.php?title=Zabbix:Template_BackupExec_2010_Jobs
#AutoIt3Wrapper_Res_Field=See You|znil.net
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
Opt('MustDeclareVars', 1)
#Region    ;************ Includes ************
#Include <Array.au3>
#include <Constants.au3>
#include <Date.au3>
#EndRegion ;************ Includes ************
; ##########################################################################################################################
; ##########################################################################################################################
; # backupexec2010.exe --> Tool for Check BackupJobs in Zabbix                                                             #
; # 2013 Bernhard Linz    /    Bernhard@znil.de    /    http://znil.net                                                    #
; # Idea and Original at Zabbix Wiki                                                                                       #
; #                                                                                                                        #
; # Latest Version of this Program and Template in German:                                                                 #
; # http://znil.net/index.php?title=Zabbix:Template_BackupExec_2010_Jobs                                                   #
; #                                                                                                                        #
; #	         ________  .__   __.  __   __        .__   __.  _______ .___________.                                          #
; #	        |       /  |  \ |  | |  | |  |       |  \ |  | |   ____||           |                                          #
; #	        `---/  /   |   \|  | |  | |  |       |   \|  | |  |__   `---|  |----`                                          #
; #	           /  /    |  . `  | |  | |  |       |  . `  | |   __|      |  |                                               #
; #	          /  /----.|  |\   | |  | |  `----.__|  |\   | |  |____     |  |                                               #
; #	         /________||__| \__| |__| |_______(__)__| \__| |_______|    |__|                                               #
; #                                                                                                                        #
; ##########################################################################################################################
; ##########################################################################################################################

; find the 'bemcmd.exe' - take a look at Registry of Host
Dim $SoftwareBasePaths[3] = ["HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 13.0", _
							 "HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 13.0", _
							 "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Symantec Backup Exec 13.0"]
Global $bemcmdexe
Dim $aparameter[6]
	$aparameter[0] = "-o23 -j -s18 -i" 					; get a List of scheduled jobs
	$aparameter[1] = "-o23 -j -s16" 					; get a list of current running jobs
	$aparameter[2] = '-o21 -e -j"Name of Job"'			; get last Exit-Code of a specific job by Name
	$aparameter[3] = '-o21 -e -i{ID of Job}'			; get last Exit-Code of a specific job by ID
	$aparameter[4] = "-o23 -j -s23 -i" 					; get a List of jobs wich are linked to a master job
	$aparameter[5] = "-o23 -j -s25 -i" 					; get a List of jobs wich dependant for an policy job


Dim $stemp
Dim $atemp
Dim $aDateTemp
Dim $aRuntimeTemp
Dim $aBackupJobs_byName[1] = [ 0 ]
Dim $aBackupJobs_byID[1] = [ 0 ]

Dim $s_JSONOutput
Dim $sRunCommand
Dim $sJobStatus
Dim $iJobStatus
Dim $iJobhowlongago
Dim $iJobBytes
Dim $iJobRuntime
Dim $iJobDirectorys
Dim $iJobFiles
Dim $iJobSkipped
Dim $iJobCorrupt
Dim $iJobInUse

;                          10        20        30        40        50        60        70        80
;                 12345678901234567890123456789012345678901234567890123456789012345678901234567890
Dim $s_Header = _
		"+------------------------------------------------------------------------------" & @CRLF & _
		"| BackupExec2010.exe - Version " & FileGetVersion(@ScriptName) & @CRLF & _
		"+------------------------------------------------------------------------------" & @CRLF & _
		"| 2014 von Bernhard Linz für http://znil.net - Kontakt: Bernhard@znil.net" & @CRLF & _
		"+------------------------------------------------------------------------------" & @CRLF & _
		@CRLF

;                          10        20        30        40        50        60        70        80
;                 12345678901234567890123456789012345678901234567890123456789012345678901234567890
Dim $s_HilfeText = _
		"Hilfsprogramm für Zabbix als UserParameter um Backup-Aufträge zu überwachen" & @CRLF & _
		"Getestet und entwickelt mit backupExec 2010 R3, wird aber auch mit vielen" & @CRLF & _
		"älteren Versionen funktionieren - solange es eine bemcmd.exe im Programm-" & @CRLF & _
		"Verzeichnis gibt." & @CRLF & _
		"---------------------------------------------------------------------------" & @CRLF & _
		@CRLF & _
		"Aufruf: " & @CRLF & _
		@CRLF & _
		@ScriptName & " <Option> <Parameter>" & @CRLF & _
		@CRLF & _
		"Optionen:" & @CRLF & _
		"---------" & @CRLF & _
		" /? oder -?     : Diese Hilfe Anzeigen" & @CRLF & _
		@CRLF & _
		" discoverjobs   : Erzeugt eine Liste im JSON Format über alle Backup-Aufträge" & @CRLF & _
		"                  die wiederkehrend geplant sind. (Job State 18) Diese Liste wird vom Zabbix" & @CRLF & _
		"                  Template für das Auto-Discovery genutzt. Zurück gegeben werden" & @CRLF & _
		"                  der Auftragsname und die eindeutige Job-ID (in { })." & @CRLF & _
		"                  Des weiteren werden alle Aufträge die an einen anderen Auftrag" & @CRLF & _
		"                  angehängts sind (Job State 23) und alle Aufträge die von einem" & @CRLF & _
		"                  anderen Job abhängig sind auf grund von Richtlinien (Jon State 25)" & @CRLF & _
		"                  erkannt und an das Template übergeben." & @CRLF & _
		@CRLF & _
		" jobstatus      : Gibt den Status des letzen Backup-Auftrages zurück. Dies wäre" & @CRLF & _
		"                  nicht ein aktuell laufender Backup-Auftrag." & @CRLF & _
		"                  Bekannte Rückgabewerte für Trigger sind:" & @CRLF & _
		"                    1 : Abgebrochen" & @CRLF & _
		"                    3 : Erfolgreich (mit Ausnahmen)" & @CRLF & _
		"                    6 : Fehlgeschlagen" & @CRLF & _
		"                   19 : Erfolgreich" & @CRLF & _
		@CRLF & _
		" jobhowlongago  : Gibt die Zeit in Sekunden zurück die seit dem letzen Start des" & @CRLF & _
		"                  Auftrages vergangen sind. Mit einem Trigger läßt sich so abfangen" & @CRLF & _
		"                  das ein Auftrag nicht mehr wie geplant angelaufen ist." & @CRLF & _
		@CRLF & _
		" jobbytes       : Gibt die gesamte gesicherte Datenmenge in Bytes zurück" & @CRLF & _
		@CRLF & _
		" jobruntime     : Gibt die Laufzeit des Backup-Auftrages in Sekunden zurück" & @CRLF & _
		@CRLF & _
		" jobdirectorys  : Gibt die Anzahl der gesicherten Verzeichnisse zurück" & @CRLF & _
		@CRLF & _
		" jobfiles       : Gibt die Anzahl der gesicherten Dateien zurück" & @CRLF & _
		@CRLF & _
		" jobskipped     : Gibt die Anzahl der übersprungenden Dateien zurück" & @CRLF & _
		@CRLF & _
		" jobcorrupt     : Gibt die Anzahl defekter, nicht gesicherten Dateien zurück" & @CRLF & _
		@CRLF & _
		" jobinuse       : Gibt die Anzahl von Dateien die in Benutzung waren und nicht" & @CRLF & _
		"                  gesichert werden konnten zurück" & @CRLF & _
		@CRLF & _
		"HINWEIS: Alle Rückgabewerte sind zum letzten beendeten Backup-Auftrag, nicht zu aktuell" & @CRLF & _
		"         laufenden Aufträgen. Durch 'jobhowlongago' und 'jobruntime' kann aber erkannt" & @CRLF & _
		"         wenn ein Job hängt - z.B. wenn der letzte Start des täglichen Backup mehr als" & @CRLF & _
		"         25h zurück liegt" & @CRLF & _
		@CRLF & _
		"+------------------------------------------------------------------------------" & @CRLF & _
		"| BackupExec2010.exe ist FREEWARE!" & @CRLF & _
		"| Kopieren, weitergeben ausdrücklich erlaubt!" & @CRLF & _
		"| Die jeweils aktuelleste Version und Anleitungen findet Ihr unter:" & @CRLF & _
		"| http://http://znil.net/index.php?title=Zabbix:Template_BackupExec_2010_Jobs" & @CRLF & _
		"+------------------------------------------------------------------------------" & @CRLF


; ##########################################################################################################################
; ##########################################################################################################################
;                                                                                   ########################################
; ######## ##     ## ##    ##  ######  ######## ####  #######  ##    ##  ######     ########################################
; ##       ##     ## ###   ## ##    ##    ##     ##  ##     ## ###   ## ##    ##    ########################################
; ##       ##     ## ####  ## ##          ##     ##  ##     ## ####  ## ##          ########################################
; ######   ##     ## ## ## ## ##          ##     ##  ##     ## ## ## ##  ######     ########################################
; ##       ##     ## ##  #### ##          ##     ##  ##     ## ##  ####       ##    ########################################
; ##       ##     ## ##   ### ##    ##    ##     ##  ##     ## ##   ### ##    ##    ########################################
; ##        #######  ##    ##  ######     ##    ####  #######  ##    ##  ######     ########################################
;                                                                                   ########################################
; ##########################################################################################################################
; ##########################################################################################################################
Func _bemcmd($sbemparameter)
	Local $sRunCommand
	Local $outputBEMCMD
	Local $errorsBEMCMD
	Local $hBEMCMD
	Local $iBEMCMDmaxWaitTime = 20000
	Local $iBEMCMDmaxWaitTimeSTART
	Local $stdoutReadFEHLER
	; build the Command for run
	$sRunCommand = $bemcmdexe & " " & $sbemparameter
	; Start the timer for max wait time
	$iBEMCMDmaxWaitTimeSTART = TimerInit()
	; run the Command
	$hBEMCMD = Run($sRunCommand, "", @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD)
	;get the output
	Do
		Sleep(5)
		; get the output
		$outputBEMCMD = $outputBEMCMD & StdoutRead($hBEMCMD)
		; get the errors
		$errorsBEMCMD = $errorsBEMCMD & StderrRead($hBEMCMD)
		; did we have an error while reading?
		$stdoutReadFEHLER = @error
		If $stdoutReadFEHLER <> "" Then
			; No error, go on
			If $outputBEMCMD = "" Then
				; but also no output, let us take a 2. try
				$outputBEMCMD = $outputBEMCMD & StdoutRead($hBEMCMD)
				If $outputBEMCMD = "" Then
					; anymore no output, oh oh
					If $stdoutReadFEHLER <> "" Then
						; but we have an error message
						ConsoleWriteError($errorsBEMCMD & @CRLF)
					EndIf
				EndIf
			EndIf
		EndIf
	Until $stdoutReadFEHLER Or TimerDiff($iBEMCMDmaxWaitTimeSTART) > $iBEMCMDmaxWaitTime
	;MsgBox(0,"",$outputBEMCMD)
	Return $outputBEMCMD
EndFunc ;<== End _bemcmd()

; ###################################################################################
; _ANSI2OEM löst das Problem mit dem Umlauten und anderen Sonderzeichen. Es wandelt Text so um das er korrekt in der DOS-Box dargestellt wird
; So können hier im Quellcode auch Umlaute verwendet werden (in den Textausgaben) und diese werden dann korrekt dargestellt
; Wir zudem für die Prüfung der Gruppenzugehörigkeit benötigt für Gruppen mit Umlauten, z.B. Domänen-Admins
; Dank an Xenobiologist von AutoIt.de für diese Lösung: http://www.autoit.de/index.php?page=Thread&threadID=9461&highlight=ANSI2OEM

Func _ANSI2OEM($text)
	$text = DllCall('user32.dll', 'Int', 'CharToOem', 'str', $text, 'str', '')
	Return $text[2]
	;Return $text
EndFunc   ;==>_ANSI2OEM

; ###################################################################################
; Hilfsroutine die den Hilfetext ausgibt
Func _HilfeAusgeben()
	ConsoleWrite(_ANSI2OEM($s_Header))
	ConsoleWrite(_ANSI2OEM($s_HilfeText))
EndFunc   ;==>_HilfeAusgeben


; ##########################################################################################################################
; ##########################################################################################################################
;                                       ####################################################################################
; ##     ##    ###    #### ##    ##     ####################################################################################
; ###   ###   ## ##    ##  ###   ##     ####################################################################################
; #### ####  ##   ##   ##  ####  ##     ####################################################################################
; ## ### ## ##     ##  ##  ## ## ##     ####################################################################################
; ##     ## #########  ##  ##  ####     ####################################################################################
; ##     ## ##     ##  ##  ##   ###     ####################################################################################
; ##     ## ##     ## #### ##    ##     ####################################################################################
;                                       ####################################################################################
; ##########################################################################################################################
; ##########################################################################################################################


If $CmdLine[0] > 0 Then
	If $CmdLine[1] = "/?" Or $CmdLine[1] = "-?" Then
		_HilfeAusgeben()
		Exit 0
	EndIf
EndIf


; Ok, we need the bemcmd.exe, just find the BackupExec Installation Folder
; we take 3 try - depends of we are a 32 or 64 bit exe and if we run on a 32 or 64 bit system
$bemcmdexe = RegRead($SoftwareBasePaths[0], "InstallLocation")
If $bemcmdexe = "" Then
	$bemcmdexe = RegRead($SoftwareBasePaths[1], "InstallLocation")
	If $bemcmdexe = "" Then
		$bemcmdexe = RegRead($SoftwareBasePaths[2], "InstallLocation")
		If $bemcmdexe = "" Then
			ConsoleWriteError("Error, no installed BackupExec 2010 found" & @CRLF)
			Exit 1
		EndIf
	EndIf
EndIf
$bemcmdexe = $bemcmdexe & "bemcmd.exe"


If StringInStr($CmdLineRaw, "discoverjobs") > 0 Then
	Dim $s_JSONOutput
	; Get all scheduled Jobs
	$stemp = _bemcmd($aparameter[0])
	$atemp = StringSplit($stemp, @CRLF)
	For $i = 1 To $atemp[0]
		If StringLeft($atemp[$i],StringLen("JOB ID: ")) = "JOB ID: " Then
			_ArrayAdd($aBackupJobs_byID, StringReplace(StringReplace(StringReplace($atemp[$i], "JOB ID: ", ""),"{",""),"}",""))
			$aBackupJobs_byID[0] = $aBackupJobs_byID[0] + 1
		EndIf
		If StringLeft($atemp[$i],StringLen("JOB NAME: ")) = "JOB NAME: " Then
			_ArrayAdd($aBackupJobs_byName, StringReplace($atemp[$i], "JOB NAME: ", ""))
			$aBackupJobs_byName[0] = $aBackupJobs_byName[0] + 1
		EndIf
	Next
	; Get all linked Jobs
	$stemp = _bemcmd($aparameter[4])
	$atemp = StringSplit($stemp, @CRLF)
	For $i = 1 To $atemp[0]
		If StringLeft($atemp[$i],StringLen("JOB ID: ")) = "JOB ID: " Then
			_ArrayAdd($aBackupJobs_byID, StringReplace(StringReplace(StringReplace($atemp[$i], "JOB ID: ", ""),"{",""),"}",""))
			$aBackupJobs_byID[0] = $aBackupJobs_byID[0] + 1
		EndIf
		If StringLeft($atemp[$i],StringLen("JOB NAME: ")) = "JOB NAME: " Then
			_ArrayAdd($aBackupJobs_byName, StringReplace($atemp[$i], "JOB NAME: ", ""))
			$aBackupJobs_byName[0] = $aBackupJobs_byName[0] + 1
		EndIf
	Next
	; Get all dependant policy jobs
	$stemp = _bemcmd($aparameter[5])
	$atemp = StringSplit($stemp, @CRLF)
	For $i = 1 To $atemp[0]
		If StringLeft($atemp[$i],StringLen("JOB ID: ")) = "JOB ID: " Then
			_ArrayAdd($aBackupJobs_byID, StringReplace(StringReplace(StringReplace($atemp[$i], "JOB ID: ", ""),"{",""),"}",""))
			$aBackupJobs_byID[0] = $aBackupJobs_byID[0] + 1
		EndIf
		If StringLeft($atemp[$i],StringLen("JOB NAME: ")) = "JOB NAME: " Then
			_ArrayAdd($aBackupJobs_byName, StringReplace($atemp[$i], "JOB NAME: ", ""))
			$aBackupJobs_byName[0] = $aBackupJobs_byName[0] + 1
		EndIf
	Next

	$s_JSONOutput = '{"data":[' & @CRLF
	For $i = 1 To $aBackupJobs_byName[0]
		$s_JSONOutput = $s_JSONOutput & "     " & '{' & '@CRLF' & _
									"          " & '"{#BACKUPEXECJOB}":"' & $aBackupJobs_byName[$i] & '",' & '@CRLF' & _
									"          " & '"{#BACKUPEXECID}":"' & $aBackupJobs_byID[$i] & '"' & '@CRLF' & _
									"     " & '},' & '@CRLF'
	Next
	$s_JSONOutput = StringTrimRight($s_JSONOutput, StringLen("," & "@CRLF")) & @CRLF & "     " & ']' & @CRLF & '}'
	$s_JSONOutput = StringReplace($s_JSONOutput, "@CRLF", @CRLF)
	ConsoleWrite($s_JSONOutput & @CRLF)
EndIf

;MsgBox(0,"",$CmdLineRaw & @CRLF & $CmdLine[0] & @CRLF & $CmdLine[1] & @CRLF & $CmdLine[2])

If $CmdLine[0] = 2 Then
	If $CmdLine[1] = "jobstatus" Then
		;MsgBox(0, "", "jobstatus von: " & $CmdLine[2])
		; Get all scheduled Jobs
		;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))
		$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
		;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))
		$atemp = StringSplit($stemp, @CRLF)

		;_ArrayDisplay($atemp)

		For $i = 1 To $atemp[0]
			If StringLeft($atemp[$i],StringLen("JOB STATUS: ")) = "JOB STATUS: " Then
				$sJobStatus = StringReplace($atemp[$i], "JOB STATUS: ", "")
				$iJobStatus = StringRegExpReplace($sJobStatus, "[^0-9]*","")
				ConsoleWrite($iJobStatus & @CRLF)
				Exit 0
			EndIf
			If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
				ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
				Exit 0
			EndIf
		Next
	EndIf

	If $CmdLine[1] = "jobhowlongago" Then
		; Get all scheduled Jobs
		;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))
		$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
		;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))
		$atemp = StringSplit($stemp, @CRLF)

		;_ArrayDisplay($atemp)

		For $i = 1 To $atemp[0]
			If StringLeft($atemp[$i],StringLen("START TIME: ")) = "START TIME: " Then
				$stemp = StringRegExpReplace($atemp[$i], "START TIME:\s*", "")

				$aDateTemp = StringSplit($stemp, " /")
				; [1] = Monat
				; [2] = Tag
				; [3] = Jahr
				; [4] = Uhrzeit als hh:mm:ss
				;_ArrayDisplay($aDateTemp)
				$iJobhowlongago = _DateDiff("s", $aDateTemp[3] & "/" & $aDateTemp[1] & "/" & $aDateTemp[2] & " " & $aDateTemp[4], @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC)
				;MsgBox(0,"", $aDateTemp[3] & "/" & $aDateTemp[1] & "/" & $aDateTemp[0] & " " & $aDateTemp[4] & @CRLF & @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC)
				ConsoleWrite($iJobhowlongago & @CRLF)
				Exit 0
			EndIf
			If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
				ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
				Exit 0
			EndIf
		Next
	EndIf

	If $CmdLine[1] = "jobbytes" Then
		; Get all scheduled Jobs
		;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))
		$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
		;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))
		$atemp = StringSplit($stemp, @CRLF)

		;_ArrayDisplay($atemp)

		For $i = 1 To $atemp[0]
			If StringLeft($atemp[$i],StringLen("BYTES PROCESSED:")) = "BYTES PROCESSED:" Then
				$stemp = StringRegExpReplace($atemp[$i], "BYTES PROCESSED:\s*", "")
				$iJobBytes = StringReplace($stemp, ",", "")
				ConsoleWrite($iJobBytes & @CRLF)
				Exit 0
			EndIf
			If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
				ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
				Exit 0
			EndIf
		Next
	EndIf

	If $CmdLine[1] = "jobruntime" Then
		; Get all scheduled Jobs
		;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))
		$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
		;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))
		$atemp = StringSplit($stemp, @CRLF)

		;_ArrayDisplay($atemp)

		For $i = 1 To $atemp[0]
			If StringLeft($atemp[$i],StringLen("ELAPSED TIME:")) = "ELAPSED TIME:" Then
				$stemp = StringRegExpReplace($atemp[$i], "ELAPSED TIME:\s*", "")
				$aRuntimeTemp = StringSplit($stemp,":")
				; [1] = Stunden
				; [2] = Minuten
				; [3] = Sekunden

				$iJobRuntime = Int($aRuntimeTemp[3]) + (Int($aRuntimeTemp[2]) * 60) + (Int($aRuntimeTemp[1]) * 3600)

				ConsoleWrite($iJobRuntime & @CRLF)
				Exit 0
			EndIf
			If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
				ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
				Exit 0
			EndIf
		Next
	EndIf

	If $CmdLine[1] = "jobdirectorys" Then
		; Get all scheduled Jobs
		;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))
		$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
		;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))
		$atemp = StringSplit($stemp, @CRLF)

		;_ArrayDisplay($atemp)

		For $i = 1 To $atemp[0]
			If StringLeft($atemp[$i],StringLen("DIRECTORIES PROCESSED:")) = "DIRECTORIES PROCESSED:" Then
				$stemp = StringRegExpReplace($atemp[$i], "DIRECTORIES PROCESSED:\s*", "")
				$iJobDirectorys = StringReplace($stemp, " ", "")
				ConsoleWrite($iJobDirectorys & @CRLF)
				Exit 0
			EndIf
			If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
				ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
				Exit 0
			EndIf
		Next
	EndIf

	If $CmdLine[1] = "jobfiles" Then
		; Get all scheduled Jobs
		;MsgBox(0,"",StringReplace($aparameter[3], 'ID of Job', $CmdLine[2]))
		$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
		;MsgBox(0,"",StringReplace($aparameter[2], '"Name of Job"', $CmdLine[2]))
		$atemp = StringSplit($stemp, @CRLF)

		;_ArrayDisplay($atemp)

		For $i = 1 To $atemp[0]
			If StringLeft($atemp[$i],StringLen("FILES PROCESSED:")) = "FILES PROCESSED:" Then
				$stemp = StringRegExpReplace($atemp[$i], "FILES PROCESSED:\s*", "")
				$iJobFiles = StringReplace($stemp, " ", "")
				ConsoleWrite($iJobFiles & @CRLF)
				Exit 0
			EndIf
			If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
				ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
				Exit 0
			EndIf
		Next
	EndIf

	If $CmdLine[1] = "jobskipped" Then
		$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
		$atemp = StringSplit($stemp, @CRLF)
		For $i = 1 To $atemp[0]
			If StringLeft($atemp[$i],StringLen("FILES SKIPPED:")) = "FILES SKIPPED:" Then
				$stemp = StringRegExpReplace($atemp[$i], "FILES SKIPPED:\s*", "")
				$iJobSkipped = StringReplace($stemp, " ", "")
				ConsoleWrite($iJobSkipped & @CRLF)
				Exit 0
			EndIf
			If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
				ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
				Exit 0
			EndIf
		Next
	EndIf

	If $CmdLine[1] = "jobcorrupt" Then
		$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
		$atemp = StringSplit($stemp, @CRLF)
		For $i = 1 To $atemp[0]
			If StringLeft($atemp[$i],StringLen("FILES CORRUPT:")) = "FILES CORRUPT:" Then
				$stemp = StringRegExpReplace($atemp[$i], "FILES CORRUPT:\s*", "")
				$iJobCorrupt = StringReplace($stemp, " ", "")
				ConsoleWrite($iJobCorrupt & @CRLF)
				Exit 0
			EndIf
			If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
				ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
				Exit 0
			EndIf
		Next
	EndIf

	If $CmdLine[1] = "jobinuse" Then
		$stemp = _bemcmd(StringReplace($aparameter[3], 'ID of Job',$CmdLine[2]))
		$atemp = StringSplit($stemp, @CRLF)
		For $i = 1 To $atemp[0]
			If StringLeft($atemp[$i],StringLen("FILES IN-USE:")) = "FILES IN-USE:" Then
				$stemp = StringRegExpReplace($atemp[$i], "FILES IN-USE:\s*", "")
				$iJobInUse = StringReplace($stemp, " ", "")
				ConsoleWrite($iJobInUse & @CRLF)
				Exit 0
			EndIf
			If StringInStr($atemp[$i], "RETURN VALUE:") > 0 And StringInStr($atemp[$i], "-1") > 0 Then
				ConsoleWrite("ZBX_NOTSUPPORTED" & @CRLF)
				Exit 0
			EndIf
		Next
	EndIf

EndIf
Exit 0



--Bernhard Linz 11:03, 1. Apr. 2014 (CEST)


Kommentare

Loading comments...