| | from datetime import date
|
| | from pathlib import Path
|
| | from typing import Optional
|
| |
|
| | import sqlite3
|
| | import streamlit as st
|
| | from fastapi import FastAPI, Query
|
| | from fastapi.responses import RedirectResponse
|
| |
|
| |
|
| | dbpath = Path(__file__).parent.parent / "database" / "db_logsv2.db"
|
| |
|
| |
|
| | api = FastAPI(
|
| | title="SmartRescue API",
|
| | description="API to access SmartRescue events",
|
| | version="1.0.0",
|
| | )
|
| |
|
| |
|
| | @api.get("/", include_in_schema=False)
|
| | async def root():
|
| | """
|
| | Route par défaut, qui redirige vers la page doc
|
| | """
|
| | return RedirectResponse(url="/docs")
|
| |
|
| |
|
| |
|
| |
|
| | base_query = """
|
| | SELECT log.id_log, log.timestamp, prompt.prompt, prompt.response,
|
| | status.status, origin.origin AS origin
|
| | FROM log
|
| | LEFT JOIN prompt ON log.id_prompt = prompt.id_prompt
|
| | LEFT JOIN status ON log.id_status = status.id_status
|
| | LEFT JOIN origin ON log.id_origin = origin.id_origin
|
| | """
|
| |
|
| |
|
| | @api.get("/data")
|
| | async def get_data(
|
| | start_date: Optional[date] = Query(None, description="Date de début (YYYY-MM-DD)"),
|
| | end_date: Optional[date] = Query(None, description="Date de fin (YYYY-MM-DD)"),
|
| | ):
|
| | """
|
| | Retourne les événements de SmartRescue entre deux dates.
|
| |
|
| | Args:
|
| | start_date (Optional[datetime.date]): Date de début (YYYY-MM-DD), optionnelle.
|
| | end_date (Optional[datetime.date]): Date de fin (YYYY-MM-DD), optionnelle.
|
| |
|
| | Returns:
|
| | List[Dict[str, Any]]: Liste des enregistrements, avec chaque champ de la base de données
|
| | comme clé du dictionnaire.
|
| | """
|
| |
|
| | try:
|
| |
|
| | conn = sqlite3.connect(dbpath)
|
| | cursor = conn.cursor()
|
| |
|
| | query = base_query
|
| | params = []
|
| |
|
| |
|
| | if start_date or end_date:
|
| | query += " WHERE "
|
| | conditions = []
|
| |
|
| | if start_date:
|
| | conditions.append("date(log.timestamp) >= ?")
|
| | params.append(start_date.isoformat())
|
| |
|
| | if end_date:
|
| | conditions.append("date(log.timestamp) <= ?")
|
| | params.append(end_date.isoformat())
|
| |
|
| | query += " AND ".join(conditions)
|
| |
|
| | query += " ORDER BY log.timestamp DESC"
|
| |
|
| | cursor.execute(query, params)
|
| | rows = cursor.fetchall()
|
| |
|
| |
|
| | columns = [description[0] for description in cursor.description]
|
| | result = [dict(zip(columns, row)) for row in rows]
|
| |
|
| | return result
|
| | except sqlite3.OperationalError as e:
|
| | return {"error": f"Database error: {str(e)}", "path": dbpath}
|
| | finally:
|
| |
|
| | if "conn" in locals():
|
| | conn.close()
|
| |
|