Spaces:
Sleeping
Sleeping
Refactor RCA result retrieval and schema: update endpoint to return multiple results and modify schema fields for consistency
3c9398e | from fastapi import FastAPI, HTTPException | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from db import connect_to_database, disconnect_from_database, database | |
| from schema import rca_results, RCAResult | |
| import logging | |
| # Set up logger | |
| logger = logging.getLogger("uvicorn.error") | |
| # FastAPI setup | |
| app = FastAPI(title="RCA Service") | |
| # CORS settings to allow all domains | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| # Startup event to initialize database connection | |
| async def startup(): | |
| try: | |
| await connect_to_database() | |
| logger.info("Database connected successfully.") | |
| except Exception as e: | |
| logger.error(f"Error connecting to the database: {e}") | |
| # Shutdown event to close database connection | |
| async def shutdown(): | |
| try: | |
| await disconnect_from_database() | |
| logger.info("Database disconnected successfully.") | |
| except Exception as e: | |
| logger.error(f"Error disconnecting from the database: {e}") | |
| def health(): | |
| return {"status": "ok"} | |
| async def get_latest_rca(): | |
| query = rca_results.select().order_by(rca_results.c.logdate.desc()) | |
| rows = await database.fetch_all(query) | |
| if not rows: | |
| logger.info("No RCA results found.") | |
| raise HTTPException(status_code=404, detail="No RCA results found.") | |
| logger.info(f"Returning {len(rows)} RCA result(s)") | |
| results = [] | |
| for row in rows: | |
| row = dict(row) | |
| # Ensure events is a list of dicts, not strings | |
| if "events" in row and isinstance(row["events"], list): | |
| if row["events"] and isinstance(row["events"][0], str): | |
| row["events"] = [{"message": e} for e in row["events"]] | |
| results.append(row) | |
| return results | |