50 lines
2.3 KiB
Python
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 |