Entwarnungs-Logik: Benachrichtigung bei Aufhebung einer Störung implementiert, Batch-Datei-Vorschlag dokumentiert
This commit is contained in:
@ -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}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user