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]
|
return self._sonne[1], self._sonne[2]
|
||||||
auf, unter = "00:00", "00:00"
|
auf, unter = "00:00", "00:00"
|
||||||
try:
|
try:
|
||||||
|
self.solar.ping(reconnect=True) # re-establish connection if it dropped
|
||||||
with self.solar.cursor() as c:
|
with self.solar.cursor() as c:
|
||||||
c.execute("SELECT sunrise, sunset FROM daylight WHERE date = %s", (heute,))
|
c.execute("SELECT sunrise, sunset FROM daylight WHERE date = %s", (heute,))
|
||||||
zeile = c.fetchone()
|
zeile = c.fetchone()
|
||||||
@@ -727,7 +728,7 @@ class Runner:
|
|||||||
else:
|
else:
|
||||||
logger.warning("Kein Eintrag in daylight fuer %s", heute)
|
logger.warning("Kein Eintrag in daylight fuer %s", heute)
|
||||||
except Exception as fehler:
|
except Exception as fehler:
|
||||||
logger.warning("Sonnenzeiten nicht lesbar: %s", fehler)
|
logger.warning("Sonnenzeiten nicht lesbar: %r", fehler)
|
||||||
self._sonne = (heute, auf, unter)
|
self._sonne = (heute, auf, unter)
|
||||||
return auf, unter
|
return auf, unter
|
||||||
|
|
||||||
@@ -752,7 +753,7 @@ class Runner:
|
|||||||
if zeile:
|
if zeile:
|
||||||
stand = {"feiertag": bool(zeile["holiday"]), "ferien": bool(zeile["vacation"])}
|
stand = {"feiertag": bool(zeile["holiday"]), "ferien": bool(zeile["vacation"])}
|
||||||
except Exception as fehler:
|
except Exception as fehler:
|
||||||
logger.warning("Kalender nicht lesbar: %s", fehler)
|
logger.warning("Kalender nicht lesbar: %r", fehler)
|
||||||
self._kalender = (heute, stand)
|
self._kalender = (heute, stand)
|
||||||
return stand
|
return stand
|
||||||
|
|
||||||
@@ -816,7 +817,7 @@ class Runner:
|
|||||||
self.geschrieben[state_id] = wert
|
self.geschrieben[state_id] = wert
|
||||||
self.geschrieben_um[state_id] = jetzt
|
self.geschrieben_um[state_id] = jetzt
|
||||||
except Exception as fehler:
|
except Exception as fehler:
|
||||||
logger.warning("current_value nicht schreibbar: %s", fehler)
|
logger.warning("current_value nicht schreibbar: %r", fehler)
|
||||||
|
|
||||||
# --- Ausfuehren ------------------------------------------------------
|
# --- Ausfuehren ------------------------------------------------------
|
||||||
|
|
||||||
@@ -865,7 +866,7 @@ class Runner:
|
|||||||
c.execute("""INSERT INTO automation_log (automation_id, result, detail)
|
c.execute("""INSERT INTO automation_log (automation_id, result, detail)
|
||||||
VALUES (%s, %s, %s)""", (automatik["id"], ergebnis, detail))
|
VALUES (%s, %s, %s)""", (automatik["id"], ergebnis, detail))
|
||||||
except Exception as fehler:
|
except Exception as fehler:
|
||||||
logger.warning("Protokoll nicht schreibbar: %s", fehler)
|
logger.warning("Protokoll nicht schreibbar: %r", fehler)
|
||||||
automatik["last_run"] = datetime.now()
|
automatik["last_run"] = datetime.now()
|
||||||
self.lief_im_fenster[automatik["id"]] = True
|
self.lief_im_fenster[automatik["id"]] = True
|
||||||
|
|
||||||
@@ -899,7 +900,7 @@ class Runner:
|
|||||||
c.execute("""UPDATE automations SET cond_met = %s, changed = changed
|
c.execute("""UPDATE automations SET cond_met = %s, changed = changed
|
||||||
WHERE id = %s""", (automatik["cond_met"], automatik["id"]))
|
WHERE id = %s""", (automatik["cond_met"], automatik["id"]))
|
||||||
except Exception as fehler:
|
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):
|
def durchlauf(self, fenster=NACHHOLFENSTER):
|
||||||
jetzt = datetime.now()
|
jetzt = datetime.now()
|
||||||
@@ -979,7 +980,7 @@ class Runner:
|
|||||||
c.execute("DELETE FROM automation_log WHERE ts < NOW() - INTERVAL %s DAY",
|
c.execute("DELETE FROM automation_log WHERE ts < NOW() - INTERVAL %s DAY",
|
||||||
(LOG_AUFBEWAHRUNG_TAGE,))
|
(LOG_AUFBEWAHRUNG_TAGE,))
|
||||||
except Exception as fehler:
|
except Exception as fehler:
|
||||||
logger.warning("Protokoll nicht aufraeumbar: %s", fehler)
|
logger.warning("Protokoll nicht aufraeumbar: %r", fehler)
|
||||||
|
|
||||||
# --- Hauptschleife ---------------------------------------------------
|
# --- Hauptschleife ---------------------------------------------------
|
||||||
|
|
||||||
@@ -1012,7 +1013,7 @@ class Runner:
|
|||||||
logger.info("Regelwerk hat sich geaendert, wird neu geladen")
|
logger.info("Regelwerk hat sich geaendert, wird neu geladen")
|
||||||
self.regelwerk_laden()
|
self.regelwerk_laden()
|
||||||
except Exception as fehler:
|
except Exception as fehler:
|
||||||
logger.warning("Regelwerk nicht pruefbar: %s", fehler)
|
logger.warning("Regelwerk nicht pruefbar: %r", fehler)
|
||||||
|
|
||||||
if nur_einmal:
|
if nur_einmal:
|
||||||
return
|
return
|
||||||
|
|||||||
+2
-2
@@ -24,14 +24,14 @@
|
|||||||
/volume1/homes/wagner/SolarManager/wsMQTTbridge.log
|
/volume1/homes/wagner/SolarManager/wsMQTTbridge.log
|
||||||
/volume1/homes/wagner/SolarManager/wecker.log
|
/volume1/homes/wagner/SolarManager/wecker.log
|
||||||
{
|
{
|
||||||
daily
|
monthly
|
||||||
# Zwei Wochen zurueck. Weiter zurueck hat noch nie jemand gesucht, und
|
# Zwei Wochen zurueck. Weiter zurueck hat noch nie jemand gesucht, und
|
||||||
# was aelter ist, steht ohnehin als Messwert in der Datenbank.
|
# was aelter ist, steht ohnehin als Messwert in der Datenbank.
|
||||||
rotate 14
|
rotate 14
|
||||||
# Zusaetzlich zur Tagesgrenze: was ueber 20 MB geht, wird sofort
|
# Zusaetzlich zur Tagesgrenze: was ueber 20 MB geht, wird sofort
|
||||||
# rotiert. Sonst koennte ein Prozess, der in eine Fehlerschleife
|
# rotiert. Sonst koennte ein Prozess, der in eine Fehlerschleife
|
||||||
# geraet, an einem einzigen Tag das Volume fuellen.
|
# geraet, an einem einzigen Tag das Volume fuellen.
|
||||||
maxsize 20M
|
maxsize 10M
|
||||||
compress
|
compress
|
||||||
# Eine leere Datei zu rotieren bringt nichts ausser vierzehn leeren
|
# Eine leere Datei zu rotieren bringt nichts ausser vierzehn leeren
|
||||||
# Archiven - der Wecker meldet an den meisten Tagen gar nichts.
|
# Archiven - der Wecker meldet an den meisten Tagen gar nichts.
|
||||||
|
|||||||
Reference in New Issue
Block a user