from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from typing import List from app.database import get_db, WolLog, ActionLog from app.models.schemas import WolLog as WolLogSchema, ActionLog as ActionLogSchema from app.services.wol_service import WolService router = APIRouter() @router.post("/wake/{server_id}") async def wake_server(server_id: int, db: Session = Depends(get_db)): success = await WolService.wake_server(db, server_id) if not success: raise HTTPException(status_code=404, detail="Server not found or WOL failed") return {"message": f"WOL packet sent to server {server_id}", "success": True} @router.post("/ping/{server_id}") async def ping_server(server_id: int, db: Session = Depends(get_db)): from app.database import Server server = db.query(Server).filter(Server.id == server_id).first() if not server: raise HTTPException(status_code=404, detail="Server not found") is_online = await WolService.ping_server(server.ip_address) server.is_online = is_online db.commit() return {"server_id": server_id, "is_online": is_online} @router.get("/logs", response_model=List[WolLogSchema]) async def get_wol_logs(db: Session = Depends(get_db), limit: int = 50): logs = db.query(WolLog).order_by(WolLog.timestamp.desc()).limit(limit).all() return logs @router.get("/logs/{server_id}", response_model=List[WolLogSchema]) async def get_server_wol_logs(server_id: int, db: Session = Depends(get_db), limit: int = 20): logs = db.query(WolLog).filter(WolLog.server_id == server_id).order_by(WolLog.timestamp.desc()).limit(limit).all() return logs @router.get("/all-logs", response_model=List[ActionLogSchema]) async def get_all_action_logs(db: Session = Depends(get_db), limit: int = 100): """Get all action logs (WOL, Proxmox, Server actions)""" logs = db.query(ActionLog).order_by(ActionLog.timestamp.desc()).limit(limit).all() return logs @router.get("/all-logs/{action_type}", response_model=List[ActionLogSchema]) async def get_action_logs_by_type(action_type: str, db: Session = Depends(get_db), limit: int = 50): """Get action logs filtered by type (wol, proxmox, server)""" logs = db.query(ActionLog).filter(ActionLog.action_type == action_type).order_by(ActionLog.timestamp.desc()).limit(limit).all() return logs