Servers: filtre zone (liste zones + DMZ + Sans zone)

This commit is contained in:
Pierre & Lumière 2026-04-14 21:15:49 +02:00
parent 197296b811
commit 3211b81e60
3 changed files with 14 additions and 2 deletions

View File

@ -20,6 +20,7 @@ async def servers_list(request: Request, db=Depends(get_db),
domain: str = Query(None), env: str = Query(None), domain: str = Query(None), env: str = Query(None),
tier: str = Query(None), etat: str = Query(None), tier: str = Query(None), etat: str = Query(None),
os: str = Query(None), owner: str = Query(None), os: str = Query(None), owner: str = Query(None),
zone: str = Query(None),
application: str = Query(None), application_id: int = Query(None), application: str = Query(None), application_id: int = Query(None),
search: str = Query(None), page: int = Query(1), search: str = Query(None), page: int = Query(1),
sort: str = Query("hostname"), sort_dir: str = Query("asc")): sort: str = Query("hostname"), sort_dir: str = Query("asc")):
@ -28,10 +29,12 @@ async def servers_list(request: Request, db=Depends(get_db),
return RedirectResponse(url="/login") return RedirectResponse(url="/login")
filters = {"domain": domain, "env": env, "tier": tier, "etat": etat, "os": os, filters = {"domain": domain, "env": env, "tier": tier, "etat": etat, "os": os,
"owner": owner, "application": application, "application_id": application_id, "owner": owner, "zone": zone,
"application": application, "application_id": application_id,
"search": search} "search": search}
servers, total = list_servers(db, filters, page, sort=sort, sort_dir=sort_dir) servers, total = list_servers(db, filters, page, sort=sort, sort_dir=sort_dir)
domains_list, envs_list = get_reference_data(db) domains_list, envs_list = get_reference_data(db)
zones_list = db.execute(text("SELECT name, is_dmz FROM zones ORDER BY is_dmz DESC, name")).fetchall()
applications_list = db.execute(text("""SELECT application_name, COUNT(*) as c FROM servers applications_list = db.execute(text("""SELECT application_name, COUNT(*) as c FROM servers
WHERE application_name IS NOT NULL AND application_name != '' WHERE application_name IS NOT NULL AND application_name != ''
@ -48,7 +51,7 @@ async def servers_list(request: Request, db=Depends(get_db),
return templates.TemplateResponse("servers.html", { return templates.TemplateResponse("servers.html", {
"request": request, "user": user, "app_name": APP_NAME, "request": request, "user": user, "app_name": APP_NAME,
"servers": servers, "total": total, "page": page, "per_page": 50, "servers": servers, "total": total, "page": page, "per_page": 50,
"domains_list": domains_list, "envs_list": envs_list, "domains_list": domains_list, "envs_list": envs_list, "zones_list": zones_list,
"applications_list": applications_list, "filters": filters, "applications_list": applications_list, "filters": filters,
"sort": sort, "sort_dir": sort_dir, "sort": sort, "sort_dir": sort_dir,
"perms": perms, "can_edit_servers": can_edit_servers, "perms": perms, "can_edit_servers": can_edit_servers,

View File

@ -124,6 +124,11 @@ def list_servers(db, filters, page=1, per_page=50, sort="hostname", sort_dir="as
where.append("s.etat = :etat"); params["etat"] = filters["etat"] where.append("s.etat = :etat"); params["etat"] = filters["etat"]
if filters.get("os"): if filters.get("os"):
where.append("s.os_family = :os"); params["os"] = filters["os"] where.append("s.os_family = :os"); params["os"] = filters["os"]
if filters.get("zone"):
if filters["zone"] == "__null__":
where.append("s.zone_id IS NULL")
else:
where.append("z.name = :zone"); params["zone"] = filters["zone"]
if filters.get("owner"): if filters.get("owner"):
where.append("s.patch_os_owner = :owner"); params["owner"] = filters["owner"] where.append("s.patch_os_owner = :owner"); params["owner"] = filters["owner"]
if filters.get("application_id"): if filters.get("application_id"):

View File

@ -44,6 +44,10 @@
<option value="linux" {% if filters.os == 'linux' %}selected{% endif %}>Linux</option> <option value="linux" {% if filters.os == 'linux' %}selected{% endif %}>Linux</option>
<option value="windows" {% if filters.os == 'windows' %}selected{% endif %}>Windows</option> <option value="windows" {% if filters.os == 'windows' %}selected{% endif %}>Windows</option>
</select> </select>
<select name="zone" onchange="this.form.submit()"><option value="">Zone</option>
{% for z in zones_list %}<option value="{{ z.name }}" {% if filters.zone == z.name %}selected{% endif %}>{{ z.name }}{% if z.is_dmz %} (DMZ){% endif %}</option>{% endfor %}
<option value="__null__" {% if filters.zone == '__null__' %}selected{% endif %}>(Sans zone)</option>
</select>
<select name="owner" onchange="this.form.submit()"><option value="">Owner</option> <select name="owner" onchange="this.form.submit()"><option value="">Owner</option>
<option value="secops" {% if filters.owner == 'secops' %}selected{% endif %}>secops</option> <option value="secops" {% if filters.owner == 'secops' %}selected{% endif %}>secops</option>
<option value="ipop" {% if filters.owner == 'ipop' %}selected{% endif %}>ipop</option> <option value="ipop" {% if filters.owner == 'ipop' %}selected{% endif %}>ipop</option>