diff --git a/run_checker_loop.cmd b/run_checker_loop.cmd new file mode 100644 index 0000000..fb0ae3b --- /dev/null +++ b/run_checker_loop.cmd @@ -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 diff --git a/ti_status_checker.py b/ti_status_checker.py index 74dd1ab..737b241 100644 --- a/ti_status_checker.py +++ b/ti_status_checker.py @@ -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}")