Optim: logging structure + query_helpers.py + fix exceptions silencieuses routers

This commit is contained in:
Pierre & Lumière 2026-04-17 23:19:18 +00:00
parent 9097872e57
commit a0f90cd719
7 changed files with 50 additions and 2 deletions

View File

@ -1,3 +1,9 @@
import logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(levelname)s [%(name)s] %(message)s",
datefmt="%Y-%m-%d %H:%M:%S"
)
"""PatchCenter v2 — Entry point FastAPI""" """PatchCenter v2 — Entry point FastAPI"""
from fastapi import FastAPI, Request from fastapi import FastAPI, Request
from fastapi.responses import RedirectResponse from fastapi.responses import RedirectResponse

View File

@ -1,3 +1,5 @@
import logging
logger = logging.getLogger(__name__)
"""Router campagnes — creation, prereqs, assignation, workflow""" """Router campagnes — creation, prereqs, assignation, workflow"""
from datetime import datetime from datetime import datetime
from fastapi import APIRouter, Request, Depends, Query, Form from fastapi import APIRouter, Request, Depends, Query, Form

View File

@ -1,3 +1,5 @@
import logging
logger = logging.getLogger(__name__)
"""Router contacts — gestion des responsables applicatifs et scopes""" """Router contacts — gestion des responsables applicatifs et scopes"""
from fastapi import APIRouter, Request, Depends, Query, Form from fastapi import APIRouter, Request, Depends, Query, Form
from fastapi.responses import HTMLResponse, RedirectResponse from fastapi.responses import HTMLResponse, RedirectResponse

View File

@ -1,3 +1,5 @@
import logging
logger = logging.getLogger(__name__)
from fastapi import APIRouter, Request, Depends from fastapi import APIRouter, Request, Depends
from fastapi.responses import HTMLResponse, RedirectResponse from fastapi.responses import HTMLResponse, RedirectResponse
from fastapi.templating import Jinja2Templates from fastapi.templating import Jinja2Templates

View File

@ -1,3 +1,5 @@
import logging
logger = logging.getLogger(__name__)
"""Router serveurs — CRUD + detail + edit via HTMX""" """Router serveurs — CRUD + detail + edit via HTMX"""
from fastapi import APIRouter, Request, Depends, Query, Form from fastapi import APIRouter, Request, Depends, Query, Form
from fastapi.responses import HTMLResponse, RedirectResponse, StreamingResponse from fastapi.responses import HTMLResponse, RedirectResponse, StreamingResponse
@ -205,8 +207,8 @@ async def server_update(request: Request, server_id: int, db=Depends(get_db),
vm_id = list(r["objects"].values())[0]["key"] vm_id = list(r["objects"].values())[0]["key"]
new_list = [{"applicationsolution_id": int(app_itop_id)}] if app_itop_id else [] new_list = [{"applicationsolution_id": int(app_itop_id)}] if app_itop_id else []
client.update("VirtualMachine", vm_id, {"applicationsolution_list": new_list}) client.update("VirtualMachine", vm_id, {"applicationsolution_list": new_list})
except Exception: except Exception as e:
pass logger.warning(f"Erreur non bloquante: {e}")
s = get_server_full(db, server_id) s = get_server_full(db, server_id)
tags = get_server_tags(db, s.qid) tags = get_server_tags(db, s.qid)

View File

@ -1,3 +1,5 @@
import logging
logger = logging.getLogger(__name__)
"""Router settings — configuration modules externes + connexions""" """Router settings — configuration modules externes + connexions"""
from fastapi import APIRouter, Request, Depends, Form from fastapi import APIRouter, Request, Depends, Form
from fastapi.responses import HTMLResponse, RedirectResponse from fastapi.responses import HTMLResponse, RedirectResponse

View File

@ -0,0 +1,32 @@
"""Helpers SQL reutilisables pour eviter la duplication de JOINs."""
from sqlalchemy import text
SERVER_BASE_JOINS = """
LEFT JOIN domain_environments de ON s.domain_env_id = de.id
LEFT JOIN domains d ON de.domain_id = d.id
LEFT JOIN environments e ON de.environment_id = e.id
LEFT JOIN zones z ON s.zone_id = z.id
"""
SERVER_BASE_COLS = """
s.id, s.hostname, s.fqdn, s.os_family, s.os_version,
s.etat, s.tier, s.environnement, s.machine_type,
d.name as domaine, d.code as domain_code,
e.name as env_name, e.code as env_code,
z.name as zone
"""
def server_list_query(where="1=1", order="s.hostname", limit=None, offset=None):
"""Construit une requete SELECT serveurs avec JOINs standard."""
q = f"""
SELECT {SERVER_BASE_COLS}
FROM servers s
{SERVER_BASE_JOINS}
WHERE {where}
ORDER BY {order}
"""
if limit is not None:
q += f" LIMIT {int(limit)}"
if offset is not None:
q += f" OFFSET {int(offset)}"
return text(q)