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:
@@ -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
|
||||
|
||||
+2
-2
@@ -24,14 +24,14 @@
|
||||
/volume1/homes/wagner/SolarManager/wsMQTTbridge.log
|
||||
/volume1/homes/wagner/SolarManager/wecker.log
|
||||
{
|
||||
daily
|
||||
monthly
|
||||
# Zwei Wochen zurueck. Weiter zurueck hat noch nie jemand gesucht, und
|
||||
# was aelter ist, steht ohnehin als Messwert in der Datenbank.
|
||||
rotate 14
|
||||
# Zusaetzlich zur Tagesgrenze: was ueber 20 MB geht, wird sofort
|
||||
# rotiert. Sonst koennte ein Prozess, der in eine Fehlerschleife
|
||||
# geraet, an einem einzigen Tag das Volume fuellen.
|
||||
maxsize 20M
|
||||
maxsize 10M
|
||||
compress
|
||||
# Eine leere Datei zu rotieren bringt nichts ausser vierzehn leeren
|
||||
# Archiven - der Wecker meldet an den meisten Tagen gar nichts.
|
||||
|
||||
Reference in New Issue
Block a user