Harveg-DEVops / Wiki

Informationen zu der Architektur und Hintergrundinformationen der Jättruppe
0 stars 0 forks source link

Check status by HTTP request during startup #2

Closed Harveg closed 3 years ago

Harveg commented 3 years ago
  1. Im influxdb Client soll eine HTTP Status health check gemacht werden um zu ermitteln, ob die DB auch wirklich nicht überlastet ist vor dem Übertragen der Datenpunkte. Ziel ist mit dem Eintragen der Datenpunkte keine Überlastung und somit unkontrolliertes Verhalten des influxDB clients zu provozieren.
Harveg commented 3 years ago

Da Github keine anderen Kontakte anzeigt aus der Gärtnertruppe habe ich alle issues nun am Hals.. Der oben genannte issue ist doch etwas für @Davideee, falls du damit bereits arbeiten kannst wäre dies TOP!

Davideee commented 3 years ago

@christofluethi Was war das für eine HTTP request für die Health eines Dienstes abzufragen? Gruess Davide

Harveg commented 3 years ago

Die Abfrage war curl -v 192.168.0.175:8086/health Response: StatusCode : 200 StatusDescription : OK Content : {"checks":[],"message":"ready for queries and writes","name":"influxdb","status":"pass","version":"1.8.3"}

Hab beim testen festgestellt, dass je nach Auslastung der InfluxDB die response schon so 5s dauern kann. Doch bis jetzt kam auch bei hoher Auslastung immer StatusCode 200. Da die einzelnen Threads ja unabhängig die Anfrage machen, kann es sein, dass der erste direkt 200 erhält und der letzte wartet dann ein paar Sekunden, somit würden nicht alle Threads gleichzeitig mit dem schreiben starten. Was denkst du?

Davideee commented 3 years ago

Danke für die Antwort. Mache jetzt vor dem Erstellen der Objekte diese Anfrage beim InfluxDB Dienst. Erst wenn der Status 200 kommt erstelle ich die Objekte. Somit erübrigt sich die Problematik mit den Threads. Siehst du das auch so? Etwas unschön: Ich gehe beim instanzieren des InfluxDB clients davon aus, dass dieser Zustand immer noch so ist ohne ein Exception handling zu machen.. Ich glaube das wird kein Problem 👍 Können wir die Health von Openhab bzw. der REST API auch prüfen? Oder schliesst sich das sowieso aus?

christofluethi commented 3 years ago
Harveg commented 3 years ago

@christofluethi Danke für die Tipps. Fall1: Die Abfrage für Openhab wurde im Main realisiert und wird als erstes gemacht, damit wir sicher sind, dass der Controller über das Netzwerk erreichbar ist bevor wir starten. Fall2Im laufenden Betrieb kann es sein dass der Controller (Openhab) nicht erreichbar ist weshalb nun auch ein exception handling beim Get request eingebaut wurde, dies habe ich getestet und funktioniert soweit gut. Wichtig ist, dass wir genug lange beim Neustart des Controllers abwarten bis wir die threads starten da zum Teil die API erst nach 2-3min auber läuft. Nun noch zum aktuellen Stand des Tests, welcher mit dem letzten Stand von gestern Abend gemacht wurde:

Nach einer gewissen Zeit (bei hoher RAM Auslastung des Controllers) wirft die Abfrage der letzten Punkte immer eine Exception und die Fehlermeldung "Some problem occured when reading Data from DB db_gicom..." erscheint.

Harveg commented 3 years ago

Der health check vor dem Abfragen bringt nicht viel da die DB läuft, jedoch generiert die Abfrage selber zu viel traffic. Der Fokus sollten wir deshalb auf die Abfrage lenken und diese entsprechend optimieren, dass weniger Punkte abgefragt werden: Folgender Vorschalg in function query_last_db_entry_of_all_lot_numbers : query = 'SELECT * FROM gicom ' + \ 'WHERE raum_nummer=$room_number ' + \ 'GROUP BY lotnummer ' + \ 'ORDER BY time DESC LIMIT 1;'_ 'ORDER BY time DESC LIMIT 1 SLIMIT 1;' Mit SLIMIT sollte die Antwort der DB auf eine series limitiert werden da wir in der DB nach einer gewissen Zeit eine riesen Menge an Series haben denke ich, dass dies zum Problem führt, was denkt ihr?

Davideee commented 3 years ago

Dein Vorschlag wird nicht funktionieren, da wir im Moment die Series von mehreren Lot Nummern brauchen. Aber eigentlich bräuchten wir nur die Series mit den aktuell definierten Lot Nummern um die Timestamps upzudaten. Überlege mir da Mal eine Lösung.

Harveg commented 3 years ago

Thx, das hat meine Vorstellungskraft schon überstiegen;) Das heisst man könnte beim WHERE sich auf diese Filterung nach dem tag lot_nummer fokussieren? Würde vieleicht heute Abend dies einmal händisch testen ob das Problem wirklich davon kommt.. Bevor du alle Teile im watchdog umbauen musst.. Das könnte dann irgendwie so aussehen: WHERE "lot-nummer" = 'lot_number_list[1]'

Davideee commented 3 years ago

Habe einen Anpassung gemacht. Fragen nur noch die Lot Nummern an die aktuell definiert sind. Versuch das Mal.

Harveg commented 3 years ago

Die Anpassungen im influxdb_client hab ich noch durchgeschaut und nach ein paar Änderungen nun auch erfolgreich getestet Es musste noch das timeout entfernt werden aus dem influxDB.client objekt da nun die Abfrage solange läuft bis ein Http timeout fehler zurück kommt (influx geagiert nicht mehr) Der Test hat gezeigt, dass bei meinem Rasperry aufgrund mangelndem RAM und fehlender SSD eine Anfrage bis zu 60s dauert... Hier die Resultate:

Da ich beim Test Setup keine SSD einsetzten kann (Fehler beim verschieben des Root Verzeichnis) ist der Test mit einer hohen Anzahl an Abfragen nicht sinnvoll da die SD Karte ziemlich rasch am Limit ist.. @christofluethi Ich würde gerne mit dir das mit dem Einrichten der SSD auf meinem Raspberry anschauen und mache mal einen neuen Issue auf

Harveg commented 3 years ago

Hier noch das LOGfile (verkürzte Variante) started watchdog in grow room 1. started watchdog in grow room 2. started watchdog in grow room 3. started watchdog in grow room 4. started watchdog in grow room 5. started watchdog in grow room 6. started watchdog in grow room 7. started watchdog in grow room 8. started watchdog in grow room 9. started watchdog in grow room 10. started watchdog in grow room 11. started watchdog in grow room 12. started watchdog in grow room 13. started watchdog in grow room 14. started watchdog in grow room 15. Successfully entered 2 new data points in grow room 4. Successfully entered 2 new data points in grow room 13. Successfully entered 2 new data points in grow room 14. Successfully entered 2 new data points in grow room 12. Successfully entered 2 new data points in grow room 15. Successfully entered 2 new data points in grow room 6. Successfully entered 2 new data points in grow room 5. Successfully entered 241 new data points in grow room 2. Successfully entered 241 new data points in grow room 1. Successfully entered 241 new data points in grow room 3. Successfully entered 4 new data points in grow room 10.Successfully entered 4 new data points in grow room 11.Successfully entered 4 new data points in grow room 8.

Successfully entered 482 new data points in grow room 9. Successfully entered 2 new data points in grow room 13. Successfully entered 2 new data points in grow room 12. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom.Some problem occured when entering data in db_gicom.Some problem occured when entering data in db_gicom.

Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Successfully entered 4 new data points in grow room 10. Successfully entered 4 new data points in grow room 8. Successfully entered 4 new data points in grow room 11. Successfully entered 4 new data points in grow room 9. Successfully entered 2 new data points in grow room 2. Successfully entered 2 new data points in grow room 4. Successfully entered 2 new data points in grow room 1. Successfully entered 2 new data points in grow room 3. Successfully entered 2 new data points in grow room 12.Successfully entered 2 new data points in grow room 6.

Successfully entered 2 new data points in grow room 5. Successfully entered 2 new data points in grow room 14. Successfully entered 2 new data points in grow room 13. Successfully entered 2 new data points in grow room 15. Successfully entered 4 new data points in grow room 9. Successfully entered 4 new data points in grow room 10. Successfully entered 4 new data points in grow room 11. Successfully entered 4 new data points in grow room 8. Successfully entered 2 new data points in grow room 1. Successfully entered 2 new data points in grow room 2. Successfully entered 2 new data points in grow room 5. Successfully entered 2 new data points in grow room 3. Successfully entered 2 new data points in grow room 12. Successfully entered 2 new data points in grow room 15. Successfully entered 2 new data points in grow room 6. Successfully entered 2 new data points in grow room 4. Successfully entered 2 new data points in grow room 13. Successfully entered 2 new data points in grow room 14. Successfully entered 4 new data points in grow room 11. Successfully entered 4 new data points in grow room 9. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. No response of Openhab API, try again later. Successfully entered 2 new data points in grow room 1. Successfully entered 2 new data points in grow room 15. Successfully entered 2 new data points in grow room 2. Successfully entered 2 new data points in grow room 13. Successfully entered 2 new data points in grow room 14. Successfully entered 2 new data points in grow room 3. Successfully entered 2 new data points in grow room 5.Successfully entered 2 new data points in grow room 12.

Successfully entered 2 new data points in grow room 6. Successfully entered 2 new data points in grow room 4. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom.Some problem occured when entering data in db_gicom.

Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom.Some problem occured when entering data in db_gicom.

Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. No response of Openhab API, try again later. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. No response of Openhab API, try again later. No response of Openhab API, try again later. No response of Openhab API, try again later. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Some problem occured when entering data in db_gicom. Successfully entered 4 new data points in grow room 13. Successfully entered 6 new data points in grow room 12. Successfully entered 8 new data points in grow room 6. Some problem occured when entering data in db_gicom. Successfully entered 6 new data points in grow room 2. Successfully entered 6 new data points in grow room 15. Successfully entered 6 new data points in grow room 3. Successfully entered 20 new data points in grow room 8. Successfully entered 6 new data points in grow room 4. Successfully entered 2 new data points in grow room 14. Successfully entered 2 new data points in grow room 1. Successfully entered 20 new data points in grow room 11. Successfully entered 2 new data points in grow room 13. Successfully entered 2 new data points in grow room 12. Successfully entered 2 new data points in grow room 6. Successfully entered 2 new data points in grow room 5. Successfully entered 20 new data points in grow room 10. Successfully entered 2 new data points in grow room 15. Successfully entered 2 new data points in grow room 2. Successfully entered 20 new data points in grow room 9. Successfully entered 2 new data points in grow room 4. Successfully entered 2 new data points in grow room 3. No response of Openhab API, try again later. No response of Openhab API, try again later. No response of Openhab API, try again later. Successfully entered 4 new data points in grow room 8.

Davideee commented 3 years ago

Log sieht gut aus. Habe deine Änderungen im Code reviewed. Ist OK. Von mir aus kann man diesen Issue schliessen.

Harveg commented 3 years ago

Danke fürs feedback. Hab noch eine kleine Frage beim grow_room ist ein Fehler aufgetaucht sobald eine ungültige response von openhab kam bei der Zeile 36. Habsoeben einen fix hochgeladen. Nun ist dieFrage ob das Problem nun abgefangen ist und ich es richtig verstanden habe(siehe unten) ? File "C:\HARVEG\Scripts\lib\threading.py", line 926, in _bootstrap_inner self.run() File "C:\HARVEG\Scripts\watchdog\observers\api.py", line 203, in run self.dispatch_events(self.event_queue, self.timeout) File "C:\HARVEG\Scripts\watchdog\observers\api.py", line 376, in dispatch_events handler.dispatch(event) File "C:\HARVEG\Scripts\watchdog\events.py", line 452, in dispatch super(PatternMatchingEventHandler, self).dispatch(event) File "C:\HARVEG\Scripts\watchdog\events.py", line 336, in dispatch event.event_type File "C:\HARVEG\Scripts\hiag_watchdog_win\watchdog_hiag.py", line 94, in _on_modified response = self.grow_room.refresh_timestamps(last_db_entries_list) File "C:\HARVEG\Scripts\hiag_watchdog_win\grow_room.py", line 36, in refresh_timestamps response_flag = response_list[0] TypeError: 'NoneType' object is not subscriptable

Davideee commented 3 years ago

Glaube habe den Fehler behoben. @Harveg kontrolliere nochmals.

Harveg commented 3 years ago

Top habs getestet und der Fehler ist behoben. Issue closed