Fix fetch failure
This commit is contained in:
@@ -5,6 +5,22 @@ from app.internal.auth import require_admin_token, require_firebase_token
|
|||||||
from app.internal.feature_flags import get_flags, set_flags
|
from app.internal.feature_flags import get_flags, set_flags
|
||||||
from app.internal import firestore as fstore
|
from app.internal import firestore as fstore
|
||||||
|
|
||||||
|
|
||||||
|
async def _get_ai_enabled_system_ids(global_flags: dict) -> set[str]:
|
||||||
|
"""Return system_ids where at least one AI function (STT or correlation) is effectively on."""
|
||||||
|
global_stt = global_flags.get("stt_enabled", True)
|
||||||
|
global_corr = global_flags.get("correlation_enabled", True)
|
||||||
|
all_systems = await fstore.collection_list("systems")
|
||||||
|
enabled: set[str] = set()
|
||||||
|
for system in all_systems:
|
||||||
|
sid = system.get("system_id")
|
||||||
|
if not sid:
|
||||||
|
continue
|
||||||
|
ai_flags = system.get("ai_flags") or {}
|
||||||
|
if ai_flags.get("stt_enabled", global_stt) or ai_flags.get("correlation_enabled", global_corr):
|
||||||
|
enabled.add(sid)
|
||||||
|
return enabled
|
||||||
|
|
||||||
router = APIRouter(prefix="/admin", tags=["admin"])
|
router = APIRouter(prefix="/admin", tags=["admin"])
|
||||||
|
|
||||||
|
|
||||||
@@ -73,10 +89,18 @@ async def debug_correlation(
|
|||||||
"skip_reason": call.get("skip_reason"),
|
"skip_reason": call.get("skip_reason"),
|
||||||
}
|
}
|
||||||
|
|
||||||
# ── Fetch recent incidents ────────────────────────────────────────────────
|
# ── Determine which systems have AI active ────────────────────────────────
|
||||||
|
global_flags = await get_flags()
|
||||||
|
ai_systems = await _get_ai_enabled_system_ids(global_flags)
|
||||||
|
|
||||||
|
# ── Fetch recent incidents (AI-enabled systems only) ──────────────────────
|
||||||
all_incidents = await fstore.collection_list("incidents")
|
all_incidents = await fstore.collection_list("incidents")
|
||||||
all_incidents.sort(key=lambda i: i.get("updated_at", ""), reverse=True)
|
all_incidents.sort(key=lambda i: i.get("updated_at", ""), reverse=True)
|
||||||
incidents = all_incidents[:limit]
|
ai_incidents = [
|
||||||
|
i for i in all_incidents
|
||||||
|
if any(sid in ai_systems for sid in (i.get("system_ids") or []))
|
||||||
|
]
|
||||||
|
incidents = ai_incidents[:limit]
|
||||||
|
|
||||||
# ── Fetch all linked call docs in parallel ────────────────────────────────
|
# ── Fetch all linked call docs in parallel ────────────────────────────────
|
||||||
all_call_ids: list[str] = []
|
all_call_ids: list[str] = []
|
||||||
@@ -98,15 +122,18 @@ async def debug_correlation(
|
|||||||
]
|
]
|
||||||
incident_records.append(rec)
|
incident_records.append(rec)
|
||||||
|
|
||||||
# ── Recent orphaned calls ─────────────────────────────────────────────────
|
# ── Recent orphaned calls (AI-enabled systems only) ───────────────────────
|
||||||
|
# Use a single-field range query to avoid requiring a composite Firestore index;
|
||||||
|
# filter status and system in Python.
|
||||||
cutoff = datetime.now(timezone.utc) - timedelta(hours=orphan_hours)
|
cutoff = datetime.now(timezone.utc) - timedelta(hours=orphan_hours)
|
||||||
recent_ended = await fstore.collection_where("calls", [
|
recent_calls = await fstore.collection_where("calls", [
|
||||||
("status", "==", "ended"),
|
|
||||||
("ended_at", ">=", cutoff),
|
("ended_at", ">=", cutoff),
|
||||||
])
|
])
|
||||||
orphans = [
|
orphans = [
|
||||||
_call_summary(c) for c in recent_ended
|
_call_summary(c) for c in recent_calls
|
||||||
if not c.get("incident_ids") and not c.get("incident_id")
|
if c.get("status") == "ended"
|
||||||
|
and not c.get("incident_ids") and not c.get("incident_id")
|
||||||
|
and c.get("system_id") in ai_systems
|
||||||
]
|
]
|
||||||
orphans.sort(key=lambda c: c.get("started_at", ""), reverse=True)
|
orphans.sort(key=lambda c: c.get("started_at", ""), reverse=True)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user