NutrigenieLLM / client /pages /dashboard.py
Sahm269's picture
Upload 12 files
5b2d4e7 verified
import streamlit as st
import psycopg2
import os
import plotly.graph_objects as go
import pandas as pd
from dotenv import load_dotenv
from server.db.db import (
get_recipes_count,
get_average_latency,
get_daily_requests,
get_total_cost,
get_total_impact,
)
# Récupérer les données pour afficher sur le dashboard
total_recipes = get_recipes_count()
average_latency = get_average_latency()
total_cost = get_total_cost()
total_impact = get_total_impact()
# Récupérer les données des requêtes par jour
df_requests = get_daily_requests()
# Affichage de la page dashboard avec Streamlit
st.markdown(
"""
<div class="title-container">
DASHBOARD
</div>
""",
unsafe_allow_html=True,
)
# Ajouter le CSS pour les cards avec animations et un design moderne
st.markdown(
"""
<style>
.title-container {
background-color: #6A5ACD;
border-radius: 10px;
color: white;
text-align: center;
padding: 5px;
margin-bottom: 20px;
box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);
font-family: New Icon;
font-size: 30px;
}
/* Style pour les cards */
.card {
border-radius: 15px;
padding: 20px;
background: linear-gradient(to top, #cae7d4, #a7d7b8);
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
margin-bottom: 20px;
text-align: center;
transition: transform 0.3s, box-shadow 0.3s;
animation: fadeInUp 0.5s ease-out;
height: 200px;
}
.card:hover {
transform: translateY(-10px);
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.2);
}
@keyframes fadeInUp {
0% {
transform: translateY(20px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
.card-title {
font-size: 1.3em;
color: #2d3e50;
margin-bottom: 15px;
font-weight: bold;
font-family: New Icon;
}
.card-value {
font-size: 30px;
color: #0099cc;
font-weight: bold;
}
/* Add smooth transition for the hover effect */
.card .card-title, .card .card-value {
transition: color 0.3s ease;
}
.card:hover {
color: #FF9A76;
}
.card:hover .card-value {
color: #0086b3;
}
</style>
""",
unsafe_allow_html=True,
)
# Créer des colonnes pour disposer les cards
col1, col2, col3, col4 = st.columns(4)
# Card 1
with col1:
st.markdown(
f"""
<div class="card">
<div class="card-title">🍲 Nombre de recettes suggerées</div>
<div class="card-value">{total_recipes}</div>
</div>
""",
unsafe_allow_html=True,
)
# Card 2
with col2:
st.markdown(
f"""
<div class="card">
<div class="card-title">⏱️ Latence moyenne</div>
<div class="card-value">{average_latency}s</div>
</div>
""",
unsafe_allow_html=True,
)
# Card 3
with col3:
st.markdown(
f"""
<div class="card">
<div class="card-title">💸 Coût total des requêtes</div>
<div class="card-value">${total_cost}</div>
</div>
""",
unsafe_allow_html=True,
)
# Card 4
with col4:
st.markdown(
f"""
<div class="card">
<div class="card-title">🌱 Impact écologique estimé</div>
<div class="card-value">{total_impact} kg CO2</div>
</div>
""",
unsafe_allow_html=True,
)
# Graphique des requêtes par jour
st.markdown("### 📅 Nombre de requêtes par jour")
fig = go.Figure(
data=[
go.Scatter(
x=df_requests["date"],
y=df_requests["nombre_requetes"],
mode="lines+markers",
)
]
)
fig.update_layout(
xaxis_title="Date", yaxis_title="Nombre de requêtes", template="plotly_dark"
)
st.plotly_chart(fig)