diff --git a/.env.example b/.env.example index 91f7f83..a2089a7 100644 --- a/.env.example +++ b/.env.example @@ -13,3 +13,6 @@ SYNC_INTERVAL_MINUTES=15 WINDOW_PAST_DAYS=90 WINDOW_FUTURE_DAYS=365 LOG_LEVEL=INFO + +# Optional: Healthchecks.io / Uptime Kuma URL (wird nach jedem Sync gepingt) +# HEALTHCHECK_URL=https://hc-ping.com/DEINE_UUID diff --git a/docker-compose.yml b/docker-compose.yml index 25e61a4..bba22fa 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,6 +20,7 @@ services: - WINDOW_PAST_DAYS=${WINDOW_PAST_DAYS:-90} - WINDOW_FUTURE_DAYS=${WINDOW_FUTURE_DAYS:-365} - LOG_LEVEL=${LOG_LEVEL:-INFO} + - HEALTHCHECK_URL=${HEALTHCHECK_URL:-} labels: - "com.centurylinklabs.watchtower.enable=true" diff --git a/sync.py b/sync.py index 03596b6..0c36511 100644 --- a/sync.py +++ b/sync.py @@ -36,6 +36,7 @@ SYNC_INTERVAL_MINUTES = int(os.environ.get("SYNC_INTERVAL_MINUTES", "15")) WINDOW_PAST_DAYS = int(os.environ.get("WINDOW_PAST_DAYS", "90")) WINDOW_FUTURE_DAYS = int(os.environ.get("WINDOW_FUTURE_DAYS", "365")) CALENDAR_LABEL = os.environ.get("CALENDAR_LABEL", "default") +HEALTHCHECK_URL = os.environ.get("HEALTHCHECK_URL", "") DB_BOOTSTRAP = os.environ.get("DB_BOOTSTRAP", "false").lower() == "true" @@ -206,6 +207,16 @@ def mark_missing_as_deleted(cur, calendar_label, run_ts, window_start, window_en return cur.rowcount +def ping_healthcheck(): + if not HEALTHCHECK_URL: + return + try: + resp = requests.get(HEALTHCHECK_URL, timeout=10) + log.info("Healthcheck ping: %d", resp.status_code) + except Exception: + log.warning("Healthcheck ping fehlgeschlagen", exc_info=True) + + def run_sync_once(): run_ts = datetime.utcnow().replace(microsecond=0) window_start = run_ts - timedelta(days=WINDOW_PAST_DAYS) @@ -227,6 +238,7 @@ def run_sync_once(): conn.commit() cur.close() log.info("Sync fertig. %d Events als geloescht markiert.", deleted_count) + ping_healthcheck() except MySQLError: conn.rollback() log.exception("DB-Fehler beim Sync, Rollback ausgefuehrt")