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()