![]() | eigene Checker |
Dieses Kapitel handelt von selbst erstellten Checker-Dlls. Über eigene Checker können Sie die Überwachungen beliebiger Prozesse oder Zustände erreichen, die nur Sie selbst kennen können. Vishnu stellt Ihnen zwar schon einige Standard-Checker zur Verfügung, Sie werden aber früher oder später eigene Checker mit speziellen Funktionen erstellen wollen. Für die Erstellung eigener DLLs sind jedoch Grundkenntnisse in einer DotNet-Sprache, z.B. C# erforderlich.
![]() |
---|
Der Einstieg ist allerdings für C# durch eine Vishnu-Visual Studio-Erweiterung auch ohne Programmierkenntnisse möglich. Es wird auf Knopfdruck ein lauffähiges Testprojekt mit Ihrem eigenen neuen Checker generiert. |
So sieht der Demo-Job für eigene Checker aus:
Dies ist die zugehörige JobDescription.xml:
<?xml version="1.0" encoding="utf-8"?> <JobDescription> <LogicalName>UserCheckerDemo</LogicalName> <LogicalExpression>Predecessor AND UserChecker</LogicalExpression> <Checkers type="array"> <Checker> <LogicalName>Predecessor</LogicalName> <PhysicalPath>TrueFalseExceptionChecker.dll</PhysicalPath> <Parameters>False:True:Exception|10|Predecessor: Hello World</Parameters> <Trigger> <PhysicalPath>TimerTrigger.dll</PhysicalPath> <Parameters>S:3|S:15</Parameters> </Trigger> </Checker> <Checker> <LogicalName>UserChecker</LogicalName> <PhysicalPath>Plugin\UserChecker.dll</PhysicalPath> <Trigger> <Reference>True</Reference> <Parameters>Predecessor</Parameters> </Trigger> </Checker> </Checkers> </JobDescription>
![]() |
---|
Nochmal kurz erinnert: der Start-Job kann über Konfiguration und Parameter eingestellt werden. |
Über die Visual Studio Erweiterung Vishnu_UserChecker_VSIX.vsix (per Doppelklick installieren) können Sie Visual Studio eine C#-Projektvorlage für eigene Checker hinzufügen.
Diese Projektvorlage kann dann später für ein neues Projekt verwendet werden:
Es wird eine Projektmappe mit einem Checker-Projekt und einem Testprojekt generiert.
![]() |
---|
Es erfolgen während der Generierung der Projekte zwei Fehlermeldungen, dass dem Projekt nicht alle erforderlichen Pakete hinzugefügt werden könnten. Diese treffen aber nicht zu und können ignoriert werden. |
![]() |
---|
Der UserCecker und das Testprojekt sind sofort umwandlungsfähig und der UserChecker könnte mit der implementierten Demo-Funktionalität als Vishnu-Checker eingesetzt werden. Hier die Ausgabe des Testprojekts: |
Die Klasse UserChecker im durch die Projektvorlage generierten Projekt (s.o.) enthält als Haupt-Verarbeitungslogik die Methode Work. Hier können Sie Ihre geschäftsspezifische Verarbeitungslogik einbauen:
... private bool? Work(TreeEvent source) { // Beispielhaft wird hier über das übergebene TreeEvent ein Zusatzparameter // aus dem Result eines angenommenen Vorgänger-Checkers weiterverarbeitet. // Bei den meisten Checkern ist dieser Teil allerdings nicht erforderlich. string demoInterestingPredecessorHello = null; if (source?.Results?.ContainsKey("Predecessor") == true) { object returnObject = source.Results["Predecessor"].ReturnObject; demoInterestingPredecessorHello = GenericPropertyGetter.GetProperty<string>( returnObject, "DefaultResultProperty"); } else { if (source?.Environment?.ContainsKey("Predecessor") == true) { object returnObject = source.Environment["Predecessor"].ReturnObject; demoInterestingPredecessorHello = GenericPropertyGetter.GetProperty<string>( returnObject, "DefaultResultProperty"); } // Je nach Anforderungen kann hier eine Exception geworfen werden. //else //{ // throw new ApplicationException( // "UserChecker: DemoInterestingPredecessor wurde nicht gefunden!"); //} } // Hier folgt die eigentliche Checker-Verarbeitung, die einen erweiterten boolean als Rückgabe // dieses Checkers ermittelt und ggf. auch ein Return-Objekt mit zusätzlichen Informationen füllt. // Die Rückgabe kann völlig unabhängig von Results oder Environment sein; ist hier nur für // die Demo abhängig kodiert. // TODO: hier können Sie Ihre eigene Verarbeitung implementieren. if (!String.IsNullOrEmpty(demoInterestingPredecessorHello)) { this._returnObject = demoInterestingPredecessorHello; return true; } else { this._returnObject = "no Predecessor-Result found!"; return false; } } ...
![]() |
---|
Wie man im Beispiel sehen kann, ist auch der Zugriff auf das Vishnu-Environment möglich. Dies ist aber in der Praxis selten notwendig. |