Spaces:
Sleeping
Sleeping
import streamlit as st | |
import psycopg2 | |
from datetime import datetime | |
import logging | |
from typing import List, Dict | |
import pandas as pd | |
# Configuration du logging | |
logging.basicConfig(level=logging.INFO, handlers=[logging.StreamHandler()]) | |
logger = logging.getLogger(__name__) | |
# Fonction pour obtenir la connexion à la base de données | |
def get_db_connection(): | |
try: | |
conn = psycopg2.connect( | |
host=st.secrets["DB_HOST"], | |
port=st.secrets["DB_PORT"], | |
dbname=st.secrets["DB_NAME"], | |
user=st.secrets["DB_USER"], | |
password=st.secrets["DB_PASSWORD"] | |
) | |
return conn | |
except Exception as e: | |
logger.error(f"Erreur de connexion à la base de données: {e}") | |
return None | |
# Connexion à la base de données pour récupérer le nombre total de recettes | |
def get_recipes_count(): | |
conn = get_db_connection() | |
if conn is None: | |
return 0 | |
try: | |
cursor = conn.cursor() | |
cursor.execute("SELECT COUNT(*) FROM suggestions_repas") | |
result = cursor.fetchone() | |
return result[0] # Le nombre total de recettes | |
except Exception as e: | |
logger.error(f"Erreur lors de la récupération du nombre de recettes : {e}") | |
return 0 | |
finally: | |
cursor.close() | |
conn.close() | |
# Fonction pour récupérer la latence moyenne des messages | |
def get_average_latency(): | |
conn = get_db_connection() | |
if conn is None: | |
return 0.0 | |
try: | |
cursor = conn.cursor() | |
cursor.execute("SELECT AVG(temps_traitement) FROM messages WHERE temps_traitement IS NOT NULL") | |
result = cursor.fetchone() | |
return round(result[0], 2) if result[0] is not None else 0.0 | |
except Exception as e: | |
logger.error(f"Erreur de connexion à la base de données pour la latence : {e}") | |
return 0.0 | |
finally: | |
cursor.close() | |
conn.close() | |
# Fonction pour récupérer le nombre de requêtes par jour | |
def get_daily_requests(): | |
conn = get_db_connection() | |
if conn is None: | |
return pd.DataFrame() | |
try: | |
query = """ | |
SELECT | |
DATE(timestamp) AS date, | |
COUNT(*) AS nombre_requetes | |
FROM | |
messages | |
GROUP BY | |
date | |
ORDER BY | |
date; | |
""" | |
df = pd.read_sql(query, conn) | |
return df | |
except Exception as e: | |
logger.error(f"Erreur lors de la récupération des requêtes par jour : {e}") | |
return pd.DataFrame() | |
finally: | |
conn.close() | |
# Fonction pour récupérer les ingrédients depuis la base de données | |
def get_ingredients(): | |
conn = get_db_connection() | |
cursor = conn.cursor() | |
try: | |
cursor.execute("SELECT ingredients FROM liste_courses") | |
ingredients_list = cursor.fetchall() # Récupère tous les résultats | |
return ingredients_list | |
except Exception as e: | |
logger.error(f"Erreur lors de la récupération des requêtes par jour : {e}") | |
return pd.DataFrame() | |
finally: | |
# Fermer la connexion | |
cursor.close() | |
conn.close() | |
# Fonction pour récupérer le coût total des requêtes | |
def get_total_cost(): | |
conn = get_db_connection() | |
if conn is None: | |
return 0.0 | |
try: | |
cursor = conn.cursor() | |
cursor.execute("SELECT SUM(total_cout) FROM messages WHERE total_cout IS NOT NULL") | |
result = cursor.fetchone() | |
return round(result[0], 2) if result[0] is not None else 0.0 | |
except Exception as e: | |
logger.error(f"Erreur lors de la récupération du coût total : {e}") | |
return 0.0 | |
finally: | |
cursor.close() | |
conn.close() | |
# Fonction pour récupérer l'impact écologique estimé | |
def get_total_impact(): | |
conn = get_db_connection() | |
if conn is None: | |
return 0.0 | |
try: | |
cursor = conn.cursor() | |
cursor.execute("SELECT SUM(impact_eco) FROM messages WHERE impact_eco IS NOT NULL") | |
result = cursor.fetchone() | |
return round(result[0], 2) if result[0] is not None else 0.0 | |
except Exception as e: | |
logger.error(f"Erreur lors de la récupération de l'impact écologique : {e}") | |
return 0.0 | |
finally: | |
cursor.close() | |
conn.close() | |