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

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

Achtung  Achtung

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.

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