Files
zebra-power/backend/app/api/wol.py

50 lines
2.3 KiB
Python

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