from typing import List from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from pydantic import BaseModel from typing import Optional from datetime import datetime from app.core.database import get_db from app.models.server import SystemStatusLog router = APIRouter(tags=["status"]) class SystemStatusItem(BaseModel): id: int environment: str service_name: str service_desc: Optional[str] result: bool fail_reason: Optional[str] recorded_at: datetime class Config: from_attributes = True @router.get("/system-status", response_model=List[SystemStatusItem]) def get_system_status(db: Session = Depends(get_db)): """最新一次系統狀態 (8 筆: test/prod × traefik/keycloak/mail/db)""" # Get latest schedule_log_id for schedule_id=3 from app.models.schedule import ScheduleLog latest_log = ( db.query(ScheduleLog) .filter(ScheduleLog.schedule_id == 3) .order_by(ScheduleLog.started_at.desc()) .first() ) if not latest_log: return [] return ( db.query(SystemStatusLog) .filter(SystemStatusLog.schedule_log_id == latest_log.id) .all() )