Feature: ZFS Pool-Aktionen (Scrub, Resilver, Clear Errors) + Product-Spalte fix
- Backend: neue Endpoints POST /api/pools/{name}/clear und /resilver
- Frontend: Pool ⋮-Menü mit Scrub, Resilver, Clear Errors
- Product-Spalte im Status-Tab bricht jetzt korrekt um statt abgeschnitten zu werden
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -93,6 +93,38 @@ async def scrub_pool(pool_name: str, current_user: str = Depends(get_current_use
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
@router.post("/{pool_name}/clear")
|
||||
async def clear_pool_errors(pool_name: str, current_user: str = Depends(get_current_user)):
|
||||
"""
|
||||
Clear error counters on pool
|
||||
"""
|
||||
try:
|
||||
stdout, stderr, rc = zfs_runner.run_command(["zpool", "clear", pool_name])
|
||||
if rc != 0:
|
||||
raise HTTPException(status_code=400, detail=stderr.strip() or "Failed to clear errors")
|
||||
return {"status": "success", "message": f"Errors cleared on {pool_name}"}
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
@router.post("/{pool_name}/resilver")
|
||||
async def resilver_pool(pool_name: str, current_user: str = Depends(get_current_user)):
|
||||
"""
|
||||
Start resilver on pool
|
||||
"""
|
||||
try:
|
||||
stdout, stderr, rc = zfs_runner.run_command(["zpool", "resilver", pool_name])
|
||||
if rc != 0:
|
||||
raise HTTPException(status_code=400, detail=stderr.strip() or "Failed to start resilver")
|
||||
return {"status": "success", "message": f"Resilver started on {pool_name}"}
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
@router.post("/clear-cache")
|
||||
async def clear_cache(current_user: str = Depends(get_current_user)):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user