Spaces:
Sleeping
Sleeping
File size: 4,417 Bytes
335f242 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
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()
|