Entwarnungs-Logik: Benachrichtigung bei Aufhebung einer Störung implementiert, Batch-Datei-Vorschlag dokumentiert
This commit is contained in:
11
run_checker_loop.cmd
Normal file
11
run_checker_loop.cmd
Normal 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
|
||||||
@ -174,12 +174,21 @@ def load_state():
|
|||||||
with open(STATE_FILE, "r", encoding="utf-8") as f:
|
with open(STATE_FILE, "r", encoding="utf-8") as f:
|
||||||
return json.load(f)
|
return json.load(f)
|
||||||
except (FileNotFoundError, json.JSONDecodeError):
|
except (FileNotFoundError, json.JSONDecodeError):
|
||||||
return {"messages": []}
|
return {"messages": [], "last_status": {}}
|
||||||
|
|
||||||
def save_state(state):
|
def save_state(state):
|
||||||
with open(STATE_FILE, "w", encoding="utf-8") as f:
|
with open(STATE_FILE, "w", encoding="utf-8") as f:
|
||||||
json.dump(state, f, ensure_ascii=False, indent=2)
|
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):
|
def markdownify_message(message):
|
||||||
# Datumsangaben fett hervorheben (z.B. 2025-06-23 oder 23.06.2025)
|
# 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)
|
message = re.sub(r"(\d{4}-\d{2}-\d{2})", r"**\1**", message)
|
||||||
@ -280,23 +289,39 @@ def main():
|
|||||||
|
|
||||||
state = load_state()
|
state = load_state()
|
||||||
known_messages = set(state.get("messages", []))
|
known_messages = set(state.get("messages", []))
|
||||||
|
last_status = state.get("last_status", {})
|
||||||
print("Prüfe TI-Status-API auf neue Meldungen...")
|
print("Prüfe TI-Status-API auf neue Meldungen...")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
messages = fetch_status_messages()
|
messages = fetch_status_messages()
|
||||||
new_messages = [m for m in messages if m not in known_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:
|
for msg in new_messages:
|
||||||
print(f"Neue Meldung gefunden: {msg[:100]}...")
|
print(f"Neue Meldung gefunden: {msg[:100]}...")
|
||||||
send_notification(msg)
|
send_notification(msg)
|
||||||
known_messages.add(msg)
|
known_messages.add(msg)
|
||||||
|
|
||||||
if new_messages:
|
if new_messages or resolved:
|
||||||
save_state({"messages": list(known_messages)})
|
save_state({"messages": list(known_messages), "last_status": data})
|
||||||
print(f"✅ {len(new_messages)} neue Meldung(en) verarbeitet")
|
print(f"✅ {len(new_messages)} neue Meldung(en) und {len(resolved)} Entwarnung(en) verarbeitet")
|
||||||
else:
|
else:
|
||||||
print(f"Keine neuen Meldungen ({datetime.now().strftime('%H:%M:%S')})")
|
print(f"Keine neuen Meldungen ({datetime.now().strftime('%H:%M:%S')})")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Fehler: {e}")
|
print(f"Fehler: {e}")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user