from fastapi import APIRouter, HTTPException, Response from models.schemas import DriveDetail from services.smart import get_smart_data from services.zfs import get_zfs_pool_map router = APIRouter(prefix="/api/drives", tags=["drives"]) @router.get("/{device}", response_model=DriveDetail) async def get_drive_detail(device: str, response: Response): """Get SMART detail for a specific block device.""" try: data, cache_hit = await get_smart_data(device) except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) if "error" in data: raise HTTPException(status_code=502, detail=data["error"]) pool_map = await get_zfs_pool_map() zfs_info = pool_map.get(device) if zfs_info: data["zfs_pool"] = zfs_info["pool"] data["zfs_vdev"] = zfs_info["vdev"] data["zfs_state"] = zfs_info.get("state") response.headers["X-Cache"] = "HIT" if cache_hit else "MISS" return DriveDetail(**data)