Workerüberwachung

Workerüberwachung

Wir kennen das ja alle, das Wochenende wird eingeläutet, alle verlassen schnellstmöglich das Büro und dann ab ins Blaue, bzw. im Winter ins weiße.

Alle schauen am Wochenende auf Ihre E-Mails, aber keiner schaut zwischendurch mal, ob denn der Worker wirklich noch seinen Dienst tut.

Daher habe ich mir, auch weil es im JTL -Forum längere Diskussionen darüber gab, Gedanken gemacht, wie das am besten gelöst werden kann, so lange der Worker sich nicht selbst melden kann.

hier nun meine Anleitung dazu (bitte beachten, das Script ist erst ab MS SQL 2012 lauffähig):

:: 	Version 1.1
:: 	MS SQL Version 2012+
::	Copyright (C) 2011 - 2016 Andreas Petermann
::	copyright  	css-umsetzung
::	author     	Andreas Petermann <info@css-umsetzung.de>
:: 	
:: 	
:: 	
:: 	Dieses Script darf kostenlos verwendet werden. Es ist nicht gestattet die Copyright Hinweise zu entfernen, 
:: 	bzw. das Script mit einem anderem Copyright Hinweis zu verkaufen.
::
::	Dieses Script schaut nach, wie lange es her ist, dass der Worker einen Abgleich der jeweiligen Plattform gestartet hat
::	wenn ein Abgleich zu lange her ist, bei einer der Plattformen, wird einmalig eine Mail versendet.

::	Emails über das Windows system schreiben -> https://sourceforge.net/projects/blat/files/
::	blat.exe -to <Empfänger> -f <Absender> -u <User> -pw <Passwort> -server <Servername> -s <Betreff> -body <Nachrichtentext> -attacht <Pfad zur angehängten Textdatei>


:: Die Daten eurer Instanz
set INSTANCE=tcp:<Computer,Port\Instance>
set DATABASE=<Datenbank>
set PASSWD=<Password>
set USER=<User>

:: der Pfad in dem Ihr alles laufen lasst
set SAVEPATH=<C:\Pfad-irgendwohin\>

:: Der Pfad, wo Ihr blat.exe abgelegt habt
set BlatPath=<C:\Pfad-irgendwohin\blat.exe>

:: eure smtp Daten um eine mail zu senden
set emailTo=<email@toUser.de>
set emailFrom=<email@fromWorker.de>
set emailSmtp=<youreDomain.de>
set emailUser=<username>
set emailPass=<userpass>

set emailBody=Dein Worker stresst gerade ein wenig, es könnte aber auch sein, dass du mehrere Artikel geändert hast und der Abgleich daher verzögert ist. 
set emailSubject=Dein Worker mal wieder, im Anhang befindet sich der Status der letzten Abgleiche

set emailPositiveBody=Dein Worker hat sich wieder beruhigt. 
set emailPositiveSubject=Dein Worker arbeitet wieder innerhalb der angegebenen Zeiten


:: xx ist die Anzahl an Minuten, ich würde hier eine 30 oder eher 60 setzen da es ja mal sein kann das der Worker mehr zu tun hat Plattformen die nicht bedient werden stehen dann auf "0"
set maxMinsShop=60
set maxMinsEbay=0
set maxMinsAmazon=0

:: Ab gibt es nichts mehr zu ändern oder anzupassen, es sein denn Ihr wisst was Ihr tut
:: Diese Daten brauchen nicht angepasst zu werden
@echo off 
cls

set DBList=%SAVEPATH%LastStart.txt
set LOCKFILE=%SAVEPATH%errorIsSend.log
set TABLENAME=dbo.tWorkerInfo



set concatShop=CONCAT('letzter Start Shopabgleich: ', Format([dShopStart],'dd-mm-yyyy / hh:mm:ss'), ' - Dies war vor ',DATEDIFF(minute,dShopStart,getdate()), ' Minuten') as shopInformation,
set concatEbay=CONCAT(CHAR(13) + CHAR(10) + 'letzter Start ebayabgleich: ', Format([dEbayStart],'dd-mm-yyyy / hh:mm:ss'), ' - Dies war vor ',DATEDIFF(minute,dEbayStart,getdate()), ' Minuten') as ebayInformation,
set concatAmazon=CONCAT(CHAR(13) + CHAR(10) + 'letzter Start Amazonabgleich: ', Format([dAmazonStart],'dd-mm-yyyy / hh:mm:ss'), ' - Dies war vor ',DATEDIFF(minute,dAmazonStart,getdate()), ' Minuten' ) as amazonInformation


set whereMaxMinShop=((DATEDIFF(minute,dShopStart,getdate()) ">" %maxMinsShop% OR dShopEnde IS NULL) AND %maxMinsShop% ">" 0) 
set whereMaxMinEbay= OR ((DATEDIFF(minute,dEbayStart,getdate()) ">" %maxMinsEbay%  OR dEbayEnde IS NULL)   AND %maxMinsEbay% ">" 0 ) 
set whereMaxMinAmazon= OR ((DATEDIFF(minute,dAmazonStart,getdate()) ">" %maxMinsAmazon%  OR dAmazonEnde IS NULL)  AND %maxMinsAmazon% ">" 0 )

SqlCmd -U "%USER%" -P "%PASSWD%"  -S "%INSTANCE%" -h-1 -W -Q "SET NoCount ON; SELECT %concatShop% %concatEbay% %concatAmazon% from  %DATABASE%.%TABLENAME% where  %whereMaxMinShop:"=%  %whereMaxMinEbay:"=% %whereMaxMinAmazon:"=% " > "%DBList%"


for /f %%i in ("%DBList%") do if %%~zi GTR 10 goto :WriteMail
goto :Deletelock
 
 
 
:WriteMail 
	echo Es gibt ein Problem
	IF EXIST  %LOCKFILE% goto :end
	%BlatPath% -to "%emailTo%" -f "%emailFrom%" -u "%emailUser%" -pw "%emailPass%" -server "%emailSmtp%" -s "%emailSubject%" -body "%emailBody%" -attacht "%DBList%"
	type NUL > %LOCKFILE%

	goto :end

:Deletelock	
	IF EXIST  %LOCKFILE% goto :WritePositiveMail
	goto :end

:WritePositiveMail
  del %LOCKFILE% /s /q
	%BlatPath% -to "%emailTo%" -f "%emailFrom%" -u "%emailUser%" -pw "%emailPass%" -server "%emailSmtp%" -s "%emailPositiveSubject%" -body "%emailPositiveBody%"
	
:end
	echo fertig

Um über den Rechner, auf dem der Server läuft eine E-Mail zu schreiben, wird ein Programm benötigt, in diesem Script erfolgt der E-Mail Versand über Blat.exe

Forumsbeitrag: Forum - Worker überwachung?

Unter diesem Link kann dieses Programm heruntergeladen werden:
https://sourceforge.net/projects/blat/

Die Bash Datei kann hier heruntergeladen werden:
Angezeigte Bash Datei