Click or drag to resize

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.

Wichtig  Wichtig

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.

der Demo Job

So sieht der Demo-Job für eigene Checker aus:

User Checker Demo

Dies ist die zugehörige JobDescription:

Hinweis  Hinweis

Nochmal kurz erinnert: der Start-Job kann über Konfiguration und Parameter eingestellt werden.

das Demo Projekt - schnell erzeugen

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

Vishnu User Checker VSIX

Diese Projektvorlage kann dann später für ein neues Projekt verwendet werden:

Vishnu User Checker VSIX select

Es wird eine Projektmappe mit einem Checker-Projekt und einem Testprojekt generiert.

User Checker Solution
Hinweis  Hinweis

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:

User Checker Demo Run
das Demo Projekt - Details

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:

Methode 'Work' in der Klasse UserChecker
    ...
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;
    }
}
    ...
Hinweis  Hinweis

Wie man im Beispiel sehen kann, ist auch der Zugriff auf das Vishnu-Environment möglich. Dies ist aber in der Praxis selten notwendig.

Siehe auch