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

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