NEWS
Javascript Adapter stellt für einen kurzen Moment den Dienst ein
-
Hallo, tu mir gerade schwer dieses spezielle Verhalten meines Javascript Adapters zu beschrieben.
Wenn das Skript:
Original:
https://forum.iobroker.net/topic/13971/vorlage-log-datei-aufbereiten-für-vis-javascript
https://github.com/Mic-M/iobroker.logfile-scriptMit meinen Anpassungen:
https://gist.github.com/darkiop/27488d572899adf08bd54b075ee662f3läuft, sieht man in der Instanz-Übersicht das der JS-Adapter kurz Austeigt, der connected und ab und zu auch der alive Status ist kurz rot. Die Ursache konnte ich definitiv auf dieses Skript eingrenzen. Im Log welches ich mit tail -f parallel laufen lassen sieht man oft zu diesem Zeitpunkt folgendes:
2019-02-22 16:58:17.924 - warn: javascript.0 Reconnection to DB.
2019-02-22 16:58:17.929 - warn: javascript.0 Reconnection to DB.Diese Einträge tauchen nicht mehr auf, sobald ich das Skript stoppe und die JS Instanz verhält sich dann auch normal. Das Instanz Log steht auf Debug - mehr Einträge gibt es wohl leider nicht.
Seltsamersamerweise kann ich das Verhalten in meiner Testumgebung nicht nachstellen (komplettes Backup in einer VM eingespielt)
Aktuell läuft das Skript in einer speraten JS Instanz - macht dort also nicht viel kaputt. Die Logs die das Skript extrahiert werden in die entsprechenden Objekte geschrieben, funktionieren tut es ... aber gut anfühlen tut sich das nicht
System: iobroker im Docker-Container
Node: 8.15.0
NPM: 6.8.0
js-controller: 1.4.2 (Bin zurück von 1.5.x - aber selbes Verhalten dort)
js-engine: 4.0.12 (auch hier habe ich bereits ein paar Versionen durch, auch die 3.6.x)Hat jemand eine Idee wonach ich noch schauen könnte/sollte?
Danke und einen schönen Abend,
Thorsten
-
Also nur so kurz reingeschaut kann das gut sein. Es wird das gesamte logfile eingelesen (was ja am Tag immer größer wird) dann wird es gesplittet und dann komplett abgearbeitet.
Reconnect to dB bedeutet das dieser Prozess mehr als 20 Sekunden gebraucht hat und damit der ganze nodejs Prozess mit dem verarbeiten der Logs blockiert war. Ergo: für das Ping Pong spiel mit der States bzw objects Datenbank im Hintergrund war einfach keine Zeit.
Bedeutet: Skript umschreiben das hier und da mal mit setImmediate oder so Schritte asynchron weggetrennt werden. Nur so hätten andere Aktionen eine Chance auch ihre Aufgaben zu machen.
-
Guten Morgen Ingo, vielen Dank!! Das deckt sich mit meiner Erkenntnis von heute Morgen - aktuell ist das Verhalten nicht im Log zu finden --> Morgen, kleines Logfile.
Ich gebe die Info mal an den Entwickler des Skripts weiter, ggf. kann da ja optimiert werden.
Grüße und ein schönes WE,
Thorsten