import json from typing import List, Optional, Dict, Any from src.alert_mcp.db import get_db from src.alert_mcp import mcp_tools # We use synchronous calls directly to the database logic # This avoids the need for a separate backend server process in the Space. def log_alert( provider_id: int, severity: str, window_days: int, message: str, credential_id: Optional[int] = None, channel: Optional[str] = "ui" ) -> Dict[str, Any]: """ Log a new alert in the system. Args: provider_id: The ID of the provider. severity: One of "info", "warning", "critical". window_days: The window in days. message: The alert message. credential_id: Optional credential ID. channel: Notification channel (default: "ui"). """ db = next(get_db()) try: alert = mcp_tools.log_alert( db=db, provider_id=provider_id, credential_id=credential_id, severity=severity, window_days=window_days, message=message, channel=channel ) return alert.model_dump(mode='json') except ValueError as e: return {"error": str(e)} except Exception as e: return {"error": f"An error occurred: {str(e)}"} finally: db.close() def get_open_alerts( provider_id: Optional[int] = None, severity: Optional[str] = None ) -> List[Dict[str, Any]]: """ Get a list of open (unresolved) alerts. Args: provider_id: Optional filter by provider ID. severity: Optional filter by severity. """ db = next(get_db()) try: alerts = mcp_tools.get_open_alerts(db=db, provider_id=provider_id, severity=severity) return [a.model_dump(mode='json') for a in alerts] except Exception as e: return [{"error": str(e)}] finally: db.close() def mark_alert_resolved( alert_id: int, resolution_note: Optional[str] = None ) -> Dict[str, Any]: """ Mark an alert as resolved. Args: alert_id: The ID of the alert to resolve. resolution_note: A note explaining the resolution. """ db = next(get_db()) try: alert = mcp_tools.mark_alert_resolved(db=db, alert_id=alert_id, resolution_note=resolution_note) return alert.model_dump(mode='json') except ValueError as e: return {"error": str(e)} except Exception as e: return {"error": str(e)} finally: db.close() def summarize_alerts(window_days: Optional[int] = None) -> Dict[str, Any]: """ Get a summary of alerts (counts by severity). Args: window_days: Optional window in days to summarize over. """ db = next(get_db()) try: summary = mcp_tools.summarize_alerts(db=db, window_days=window_days) return summary.model_dump(mode='json') except Exception as e: return {"error": str(e)} finally: db.close()