Entwarnungs-Logik: Benachrichtigung bei Aufhebung einer Störung implementiert, Batch-Datei-Vorschlag dokumentiert

This commit is contained in:
2025-07-29 10:51:43 +02:00
parent fcb6cd7995
commit 6e6f58c32d
2 changed files with 43 additions and 7 deletions

11
run_checker_loop.cmd Normal file
View File

@ -0,0 +1,11 @@
@echo off
REM Setze den Pfad zu deinem venv (ggf. anpassen!)
set VENV_PATH=%~dp0.venv
REM Aktiviere das venv
call "%VENV_PATH%\Scripts\activate.bat"
:loop
python ti_status_checker.py
timeout /t 120
goto loop

View File

@ -174,12 +174,21 @@ def load_state():
with open(STATE_FILE, "r", encoding="utf-8") as f:
return json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
return {"messages": []}
return {"messages": [], "last_status": {}}
def save_state(state):
with open(STATE_FILE, "w", encoding="utf-8") as f:
json.dump(state, f, ensure_ascii=False, indent=2)
def extract_outages(app_status):
"""Extrahiert alle aktuellen Störungen als Set von Strings"""
outages = set()
for dienst, status in app_status.items():
outage = status.get("outage", "none")
if outage in ("partial", "full"):
outages.add(dienst)
return outages
def markdownify_message(message):
# Datumsangaben fett hervorheben (z.B. 2025-06-23 oder 23.06.2025)
message = re.sub(r"(\d{4}-\d{2}-\d{2})", r"**\1**", message)
@ -280,23 +289,39 @@ def main():
state = load_state()
known_messages = set(state.get("messages", []))
last_status = state.get("last_status", {})
print("Prüfe TI-Status-API auf neue Meldungen...")
try:
messages = fetch_status_messages()
# Extrahiere aktuelle und vorherige Störungen
resp = requests.get(TI_API_URL)
resp.raise_for_status()
data = resp.json()
app_status = data.get("appStatus", {})
current_outages = extract_outages(app_status)
previous_outages = extract_outages(last_status.get("appStatus", {})) if last_status else set()
# Entwarnungen erkennen
resolved = previous_outages - current_outages
for dienst in resolved:
msg = f"✅ Entwarnung: Die Störung bei {dienst.upper()} wurde behoben."
print(msg)
send_notification(msg)
known_messages.add(msg)
# Normale neue Meldungen
new_messages = [m for m in messages if m not in known_messages]
for msg in new_messages:
print(f"Neue Meldung gefunden: {msg[:100]}...")
send_notification(msg)
known_messages.add(msg)
if new_messages:
save_state({"messages": list(known_messages)})
print(f"{len(new_messages)} neue Meldung(en) verarbeitet")
if new_messages or resolved:
save_state({"messages": list(known_messages), "last_status": data})
print(f"{len(new_messages)} neue Meldung(en) und {len(resolved)} Entwarnung(en) verarbeitet")
else:
print(f"Keine neuen Meldungen ({datetime.now().strftime('%H:%M:%S')})")
except Exception as e:
print(f"Fehler: {e}")