Die leider wieder auftretenden Ausfälle beim Anbieter KatSys Cloud haben heute Nacht gezeigt, dass wir am Benachrichtigungs-Konzept nochmal ran müssen:
Die Verbindung zu KatSys ist für mehrere Stunden gestört
ALARMiator prüft alle paar Sekunden einen neuen Verbindungsaufbau
Der scheitert (Gegenstelle ist nicht erreichbar) und sendet dann direkt eine Admin Notification
Das führt nun zu mehreren tausend Benachrichtigungen bei mehrstündigen Störungen.
Probleme dabei:
Zu viele nichts helfende Nachrichten beim Admin
Belastung des Stunden-Limits für Push-Notifications
Die Frage ist nun, wie sollte das geändert werden.
Idee:
Plugins melden dem PluginManager einen FailureState. D.h. ist eine Verbindung gestört, dann wird der auf „true“ gesetzt. Kommt die Verbindung wieder zu Stande, wird der auf false zurückgesetzt.
Jede Änderung eines FailureStates durch ein Plugin (true → false, false → true) löst eine Admin Notification aus.
Ein Cron-Job (alle 5 Minuten) prüft auf den FailureState der Plugins im PluginManager. Ist für ein Plugin der FailureState === true → Admin Notification versenden.
Pro:
Maximal 12 Nachrichten / Stunde für Admins
Contra:
es sind dann immer noch 120 Nachrichten pro Stunde
Habt Ihr vlt. noch Ideen, wie wir das optimieren könnten?
Auch kürzere Fehler sollten doch durch das Vorgehen einmalig gemeldet werden. Szenario:
KatSys Verbindung fällt aus
Plugin FailureState geht von false auf true
Event Admin Notification wird durch den Zustandswechsel einmalig ausgelöst
Was problematisch werden könnte wäre allerdings, wenn die Verbindung (und damit der Plugin FailureState „flattert“, also die Verbindung auf und direkt wieder abgegabut würde. (hatten wir ja auch schon mal).
Anstatt 5 Minuten, könnte man den check exponentiell für jedes Plugin machen bis zu einem maximalen Zeitraum von vlt. 5 Minuten.
Also z.B. Fehler von Plugin A kommt, FailureState wird gesetzt, wenn er innerhalb von 2 Sekunden wieder kommt, wird eine Benachrichtung geschickt und der Zeitraum wächst auf 4 Sekunden, dann auf 8 bis zu einem Limit.
Das sollte für jedes Plugin einzeln verwaltet werden, innerhalb des PluginManagers
Aber als Admin würde ich evtl auch gerne die Unterschiede zwischen den Fehlermeldungen sehen. Denn vielleicht muss ich ja um einen Folgefehler zu beheben den Server Mal durchstarten oder so.