Datenbankverbindung vor den Sonnenzeiten pruefen, Logs sparsamer drehen

Die Verbindung zur solarLog-Datenbank steht den ganzen Tag ungenutzt herum
und wird vom Server irgendwann geschlossen; das Lesen der Sonnenzeiten war
dann der erste Zugriff, der ins Leere lief. Ein ping(reconnect=True) davor
holt sie zurueck.

Ausserdem stehen die abgefangenen Fehler jetzt mit %r im Protokoll: bei
manchen Ausnahmen ist str() leer, und dann stand dort eine Warnung ohne
Grund.

logrotate dreht monatlich statt taeglich, dafuer schon ab 10 MB.
This commit is contained in:
2026-09-09 00:06:42 +02:00
parent f643e37676
commit 1e7b1d8b21
2 changed files with 10 additions and 9 deletions
+8 -7
View File
@@ -718,6 +718,7 @@ class Runner:
return self._sonne[1], self._sonne[2]
auf, unter = "00:00", "00:00"
try:
self.solar.ping(reconnect=True) # re-establish connection if it dropped
with self.solar.cursor() as c:
c.execute("SELECT sunrise, sunset FROM daylight WHERE date = %s", (heute,))
zeile = c.fetchone()
@@ -727,7 +728,7 @@ class Runner:
else:
logger.warning("Kein Eintrag in daylight fuer %s", heute)
except Exception as fehler:
logger.warning("Sonnenzeiten nicht lesbar: %s", fehler)
logger.warning("Sonnenzeiten nicht lesbar: %r", fehler)
self._sonne = (heute, auf, unter)
return auf, unter
@@ -752,7 +753,7 @@ class Runner:
if zeile:
stand = {"feiertag": bool(zeile["holiday"]), "ferien": bool(zeile["vacation"])}
except Exception as fehler:
logger.warning("Kalender nicht lesbar: %s", fehler)
logger.warning("Kalender nicht lesbar: %r", fehler)
self._kalender = (heute, stand)
return stand
@@ -816,7 +817,7 @@ class Runner:
self.geschrieben[state_id] = wert
self.geschrieben_um[state_id] = jetzt
except Exception as fehler:
logger.warning("current_value nicht schreibbar: %s", fehler)
logger.warning("current_value nicht schreibbar: %r", fehler)
# --- Ausfuehren ------------------------------------------------------
@@ -865,7 +866,7 @@ class Runner:
c.execute("""INSERT INTO automation_log (automation_id, result, detail)
VALUES (%s, %s, %s)""", (automatik["id"], ergebnis, detail))
except Exception as fehler:
logger.warning("Protokoll nicht schreibbar: %s", fehler)
logger.warning("Protokoll nicht schreibbar: %r", fehler)
automatik["last_run"] = datetime.now()
self.lief_im_fenster[automatik["id"]] = True
@@ -899,7 +900,7 @@ class Runner:
c.execute("""UPDATE automations SET cond_met = %s, changed = changed
WHERE id = %s""", (automatik["cond_met"], automatik["id"]))
except Exception as fehler:
logger.warning("cond_met nicht schreibbar: %s", fehler)
logger.warning("cond_met nicht schreibbar: %r", fehler)
def durchlauf(self, fenster=NACHHOLFENSTER):
jetzt = datetime.now()
@@ -979,7 +980,7 @@ class Runner:
c.execute("DELETE FROM automation_log WHERE ts < NOW() - INTERVAL %s DAY",
(LOG_AUFBEWAHRUNG_TAGE,))
except Exception as fehler:
logger.warning("Protokoll nicht aufraeumbar: %s", fehler)
logger.warning("Protokoll nicht aufraeumbar: %r", fehler)
# --- Hauptschleife ---------------------------------------------------
@@ -1012,7 +1013,7 @@ class Runner:
logger.info("Regelwerk hat sich geaendert, wird neu geladen")
self.regelwerk_laden()
except Exception as fehler:
logger.warning("Regelwerk nicht pruefbar: %s", fehler)
logger.warning("Regelwerk nicht pruefbar: %r", fehler)
if nur_einmal:
return