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. |