diff --git a/app/routers/servers.py b/app/routers/servers.py index 0cd8824..64ca80e 100644 --- a/app/routers/servers.py +++ b/app/routers/servers.py @@ -1,6 +1,6 @@ """Router serveurs — CRUD + detail + edit via HTMX""" from fastapi import APIRouter, Request, Depends, Query, Form -from fastapi.responses import HTMLResponse, RedirectResponse +from fastapi.responses import HTMLResponse, RedirectResponse, StreamingResponse from fastapi.templating import Jinja2Templates from ..dependencies import get_db, get_current_user from ..services.server_service import ( @@ -36,6 +36,36 @@ async def servers_list(request: Request, db=Depends(get_db), }) + +@router.get("/servers/export-csv") +async def servers_export_csv(request: Request, db=Depends(get_db), + domain: str = Query(None), env: str = Query(None), + tier: str = Query(None), etat: str = Query(None), + search: str = Query(None)): + user = get_current_user(request) + if not user: + return RedirectResponse(url="/login") + import io, csv + filters = {"domain": domain, "env": env, "tier": tier, "etat": etat, "search": search} + servers, total = list_servers(db, filters, page=1, per_page=99999, sort="hostname", sort_dir="asc") + output = io.StringIO() + w = csv.writer(output, delimiter=";") + w.writerow(["Hostname", "FQDN", "OS", "Version OS", "Domaine", "Environnement", + "Zone", "Tier", "Etat", "Owner patching", "Application"]) + for s in servers: + w.writerow([ + s.hostname, getattr(s, "fqdn", "") or "", s.os_family or "", + getattr(s, "os_version", "") or "", + getattr(s, "domaine", "") or "", getattr(s, "environnement", "") or "", + getattr(s, "zone_name", "") or "", s.tier or "", s.etat or "", + s.patch_os_owner or "", getattr(s, "application_name", "") or "", + ]) + output.seek(0) + return StreamingResponse( + iter(["\ufeff" + output.getvalue()]), + media_type="text/csv", + headers={"Content-Disposition": "attachment; filename=serveurs.csv"}) + @router.get("/servers/{server_id}/detail", response_class=HTMLResponse) async def server_detail(request: Request, server_id: int, db=Depends(get_db)): user = get_current_user(request) diff --git a/app/templates/servers.html b/app/templates/servers.html index 9d69f6e..c8782b3 100644 --- a/app/templates/servers.html +++ b/app/templates/servers.html @@ -17,7 +17,7 @@

Serveurs ({{ total }})

- + Export CSV