Anruf wenn Host nicht erreichbar

  • Hallo zusammen,


    ich möchte mich an mein erstes Modul mit dem Moduldesigner wagen.
    Programmierkenntnisse mit Hochsprachen sind soweit vorhanden.


    Ziel ist es, dass die Anlage einen internen oder auch externen Anruf tätigt wenn ein Host nicht mehr erreichbar ist.


    Folgende Fragen haben sich beim Design ergeben:
    - Was muss ich machen damit das Modul automatisch gestartet wird?
    - Timer oder While(true) Schleife benutzen? Das Modul soll den Host jede Minute mal abfragen und dann den Anruf tätigen. Wenn der Anruf getätigt wurde, soll der nächste Anruf erst nach 15 Minuten erfolgen, außer wenn der der Host zwischenzeitlich wieder da war.
    --> Wie kann ich den Timer unterbrechen und dann wieder starten?
    --> Wenn ich das mit einer While-Schleife löse (was natürlich einfacher ist), wie kann ich sicherstellen, dass es nicht in einer Endlosschleife endet. Spätestens wenn die Anlage herunter fährt, sollte die Schleife abgebrochen werden.
    (Was würde auf der Anlage eigentlich passieren? Was würde passieren bei 100% cpu? Merkt das die Anlage und bricht das Modul ab?)


    Vielen Dank für ein paar Tipps!

  • Hallo Orange


    Zitat

    - Was muss ich machen damit das Modul automatisch gestartet wird?


    Wenn du im Modul Editor im Tab "Timer" schaust, kannst du dort ModulInterne Timer, oder per GUI-Konfigurierte Timer einer Funktion zuweisen.
    ModulTimer springen nach einem Nesutart automatisch wieder an.


    Zitat

    - Timer oder While(true) Schleife benutzen? Das Modul soll den Host jede Minute mal abfragen und dann den Anruf tätigen. Wenn der Anruf getätigt wurde, soll der nächste Anruf erst nach 15 Minuten erfolgen, außer wenn der der Host zwischenzeitlich wieder da war.


    Du kannst beides Kombinieren, was ich dir aber nicht Empfehlen würde, ist das ganze in eine Endlos While-Schleife zu Stecken.
    Auch wenn es vordergründig nicht zu sehen ist, gibt es im Hintergrund ein Failover, dass eine While Schleife nach [n] Iterationen beendet.


    Zitat

    --> Wie kann ich den Timer unterbrechen und dann wieder starten?


    Du kannst den Timer nicht wirklich unterbrechen, könntest aber einen FLAG setzen.
    Im Experten Modus findest du ein Menü "Variables" mit Set/GetVariableValue
    Dort kannst du Werte in verschiedenen Scopes platzieren. Z.b. Instanzweise, oder Modulweise.



    Zitat

    --> Wenn ich das mit einer While-Schleife löse (was natürlich einfacher ist), wie kann ich sicherstellen, dass es nicht in einer Endlosschleife endet. Spätestens wenn die Anlage herunter fährt, sollte die Schleife abgebrochen werden.
    (Was würde auf der Anlage eigentlich passieren? Was würde passieren bei 100% cpu? Merkt das die Anlage und bricht das Modul ab?)


    Wie gesagt bricht eine While-Schleife irgendwann automatisch ab. Wenn ein Modul die Anlage zu sehr auslasten, wird es nicht automatisch beendet, es sei denn der Tomcat Dienst knickt ein.


    Um ein Modul loszuwerden, welches in einer Endlosschleife Steckt musst du also im Normalfall warten bis es das Limit erreicht, oder die Anlagendienste Neu Starten.


    MfG


    Fabian

  • Vielen Dank für deine Antwort! Das hilft mir schon mal sehr weiter!


    Muss ich davor ein synchronize machen bzw. zumindest volatile? Aus meiner Programmierzeit weiß ich noch, da gabs immer wieder Probleme bei solchen Konstrukten.


    Noch eine weitere Sache, muss ich etwas beachten um die anderen Module nicht zu blockieren?
    Muss ich das ganze in einem Thread starten (ich glaube das heißt "fork" auf der Starface), oder werden die Module auf der Firewall selber sowieso in eigenen Threads ausgeführt?


    Was ich noch nicht ganz verstehe mit den anderen Modulen, die werden ja nur bei einem Ereignis wie z.B. einen Anruf gestartet. Mein Modul soll ja eigentlich immer laufen.

  • Hallo Orange


    Zitat

    Muss ich davor ein synchronize machen bzw. zumindest volatile?


    Soweit ich weiss gibt es nur ein synchronize. Ich verwende es nur in ganz wenigen fällen.


    Zitat

    Noch eine weitere Sache, muss ich etwas beachten um die anderen Module nicht zu blockieren?
    Muss ich das ganze in einem Thread starten (ich glaube das heißt "fork" auf der Starface), oder werden die Module auf der Firewall selber sowieso in eigenen Threads ausgeführt?


    Die Module werden alle in eigenen Threads ausgeführt, erhalten aber von der STARFACE einen Context mit allen möglichen Infos.
    Aber Vorsicht! Alles was mit Anrufen interagiert (Z.b. die Call-EntryPoints) Blockieren den Ruf aktiv, bis das Hauptthread der Instanz beendet wird.


    Zitat

    Was ich noch nicht ganz verstehe mit den anderen Modulen, die werden ja nur bei einem Ereignis wie z.B. einen Anruf gestartet. Mein Modul soll ja eigentlich immer laufen.


    Bei Modulen die einen dauerhaften Task haben z.b. um den UserStatus zu überwachen Arbeite ich mit eigenen Background Services.
    Ich habe im Modul einfach einen Timer, welcher einmal in [n] Minuten prüft, ob mein Hintergrundservice noch läuft, und falls nicht startet er ihn.


    Wenn es darum geht mit den Boardmitteln etwas zu überwachen geht das eben nur via Timer.
    Also in deinem Fall z.b. jede Minute eine IP Anpingen, und prüfen, ob diese Antwortet.
    Und falls eine Minute zu gross ist gibt's ja auch die Möglichkeit z.b. alle [n] Sekunden das Modul auszuführen.


    MfG


    Fabian

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!