diff --git a/src/agents/orchestrator.py b/src/agents/orchestrator.py index 16fd3a5..ed85947 100644 --- a/src/agents/orchestrator.py +++ b/src/agents/orchestrator.py @@ -489,6 +489,9 @@ class AgentOrchestrator: logger.info(f"Lage {incident_id} aus Warteschlange entfernt (removed={removed})") + # refresh_log-Eintrag schreiben, damit Auto-Refresh nicht im naechsten Tick erneut einreiht + await self._log_queued_cancellation(incident_id) + # Send cancelled event if self._ws_manager: try: @@ -639,6 +642,28 @@ class AgentOrchestrator: finally: await db.close() + async def _log_queued_cancellation(self, incident_id: int): + """Schreibt einen cancelled-Eintrag fuer einen Queue-Abbruch (Lage war noch nicht laufend). + Verhindert, dass der Auto-Refresh-Scheduler im naechsten Tick sofort wieder einreiht.""" + from database import get_db + db = await get_db() + try: + cur = await db.execute("SELECT tenant_id FROM incidents WHERE id = ?", (incident_id,)) + row = await cur.fetchone() + tid = row["tenant_id"] if row else None + now_str = datetime.now(TIMEZONE).strftime("%Y-%m-%d %H:%M:%S") + await db.execute( + """INSERT INTO refresh_log (incident_id, started_at, completed_at, status, + trigger_type, error_message, tenant_id) + VALUES (?, ?, ?, 'cancelled', 'manual', 'Aus Warteschlange entfernt', ?)""", + (incident_id, now_str, now_str, tid), + ) + await db.commit() + except Exception as e: + logger.warning(f"Konnte Queue-Cancel nicht in refresh_log loggen: {e}") + finally: + await db.close() + async def _mark_refresh_failed(self, incident_id: int, error: str): """Markiert den laufenden Refresh-Log-Eintrag als error.""" from database import get_db diff --git a/src/main.py b/src/main.py index 1df4348..ff98a9e 100644 --- a/src/main.py +++ b/src/main.py @@ -124,7 +124,7 @@ async def check_auto_refresh(): # Letzten abgeschlossenen oder laufenden Refresh pruefen cursor = await db.execute( - "SELECT started_at, status FROM refresh_log WHERE incident_id = ? AND status IN ('completed', 'running') ORDER BY id DESC LIMIT 1", + "SELECT started_at, status FROM refresh_log WHERE incident_id = ? AND status IN ('completed', 'running', 'cancelled', 'error') ORDER BY id DESC LIMIT 1", (incident_id,), ) last_refresh = await cursor.fetchone()