# ============================================================ # routers/historique.py — Snapshots journaliers (TABLE_FINAL) # ============================================================ from datetime import date from typing import Optional from fastapi import APIRouter, Depends, Query from auth import get_current_user from config import get_cursor from helpers import get_table_name, rows_to_list router = APIRouter(dependencies=[Depends(get_current_user)], tags=["Historique"]) @router.get("") def get_historique( id_monito : Optional[int] = Query(None), date_debut : Optional[date] = Query(None, description="YYYY-MM-DD"), date_fin : Optional[date] = Query(None, description="YYYY-MM-DD"), service : Optional[str] = Query(None), ): """Snapshots journaliers (TABLE_FINAL).""" query = ( "SELECT id_monito, nom_monito, nb_erreurs, service, categorie, bdd_source, " "CONVERT(NVARCHAR, date_sauvegarde, 23) AS date_sauvegarde " "FROM TABLE_FINAL WHERE 1=1" ) params = [] if id_monito: query += " AND id_monito = ?" params.append(id_monito) if date_debut: query += " AND date_sauvegarde >= ?" params.append(str(date_debut)) if date_fin: query += " AND date_sauvegarde <= ?" params.append(str(date_fin)) if service: query += " AND service = ?" params.append(service) query += " ORDER BY date_sauvegarde ASC, id_monito ASC" with get_cursor() as cursor: cursor.execute(query, *params) return rows_to_list(cursor, cursor.fetchall()) @router.get("/comparaison") def get_comparaison( date_debut : Optional[date] = Query(None), date_fin : Optional[date] = Query(None), ): """ Déprécié — utiliser GET /evolution/par-monitoring à la place. Conservé pour compatibilité ascendante. """ query = ( "SELECT CONVERT(NVARCHAR, date_sauvegarde, 23) AS date, " "id_monito, nom_monito, nb_erreurs, service " "FROM TABLE_FINAL WHERE 1=1" ) params = [] if date_debut: query += " AND date_sauvegarde >= ?" params.append(str(date_debut)) if date_fin: query += " AND date_sauvegarde <= ?" params.append(str(date_fin)) query += " ORDER BY date_sauvegarde ASC, id_monito ASC" with get_cursor() as cursor: cursor.execute(query, *params) return rows_to_list(cursor, cursor.fetchall()) @router.get("/{id_monito}/evolution") def get_evolution( id_monito : int, date_debut : Optional[date] = Query(None), date_fin : Optional[date] = Query(None), ): """Évolution d'un monitoring — format optimisé Recharts.""" get_table_name(id_monito) # valide l'existence du monitoring query = ( "SELECT CONVERT(NVARCHAR, date_sauvegarde, 23) AS date, nb_erreurs " "FROM TABLE_FINAL WHERE id_monito = ?" ) params = [id_monito] if date_debut: query += " AND date_sauvegarde >= ?" params.append(str(date_debut)) if date_fin: query += " AND date_sauvegarde <= ?" params.append(str(date_fin)) query += " ORDER BY date_sauvegarde ASC" with get_cursor() as cursor: cursor.execute(query, *params) data = [{"date": r[0], "nb_erreurs": r[1]} for r in cursor.fetchall()] return {"id_monito": id_monito, "points": len(data), "evolution": data}