Spaces:
Paused
Paused
| import streamlit as st | |
| from endpoints_config import API_ENDPOINTS, ENV | |
| from services.cache_admin import purge_cache | |
| from services.stats_logs import fetch_stats_data, fetch_logs_data | |
| from log import logger | |
| logger.info(f"ENV : {ENV}") | |
| st.set_page_config(page_title="Admin Recoplante", page_icon="🛠️", layout="wide") | |
| st.title("🛠️ Tableau de bord d'administration Recoplante") | |
| st.markdown("### ⚙️ Actions globales") | |
| # Initialisation | |
| if "confirm_clear_pred" not in st.session_state: | |
| st.session_state.confirm_clear_pred = False | |
| if "confirm_clear_heatmap" not in st.session_state: | |
| st.session_state.confirm_clear_heatmap = False | |
| col_global1, col_global2, col_global3 = st.columns(3) | |
| # === Purge Prédictions === | |
| with col_global1: | |
| if not st.session_state.confirm_clear_pred: | |
| if st.button("🧹 Purger toutes les prédictions"): | |
| st.session_state.confirm_clear_pred = True | |
| st.rerun() | |
| else: | |
| st.warning("⚠️ Cette action supprimera toutes les prédictions en cache.") | |
| if st.button("✅ Confirmer purge prédictions"): | |
| for service_name, config in API_ENDPOINTS.items(): | |
| if "clear_pred" in config: | |
| purge_cache(config, "clear_pred") | |
| st.success("✅ Prédictions purgées.") | |
| st.session_state.confirm_clear_pred = False | |
| st.rerun() | |
| if st.button("❌ Annuler", key="cancel_pred"): | |
| st.session_state.confirm_clear_pred = False | |
| st.rerun() | |
| # === Purge Heatmaps === | |
| with col_global2: | |
| if not st.session_state.confirm_clear_heatmap: | |
| if st.button("🔥 Purger toutes les heatmaps"): | |
| st.session_state.confirm_clear_heatmap = True | |
| st.rerun() | |
| else: | |
| st.warning("⚠️ Cette action supprimera toutes les heatmaps en cache.") | |
| if st.button("✅ Confirmer purge heatmaps"): | |
| for service_name, config in API_ENDPOINTS.items(): | |
| if "clear_heatmap" in config: | |
| purge_cache(config, "clear_heatmap") | |
| st.success("✅ Heatmaps purgées.") | |
| st.session_state.confirm_clear_heatmap = False | |
| st.rerun() | |
| if st.button("❌ Annuler", key="cancel_heatmap"): | |
| st.session_state.confirm_clear_heatmap = False | |
| st.rerun() | |
| # === Rafraîchir toute la page === | |
| with col_global3: | |
| if st.button("🔄 Rafraîchir tout"): | |
| st.rerun() | |
| # Pour chaque service/API | |
| for service_name, config in API_ENDPOINTS.items(): | |
| st.markdown(f"## 🔹 {service_name}") | |
| # Fetch live stats | |
| stats = fetch_stats_data(config) | |
| # Ligne d'état principale | |
| col1, col2, col3, col4, col5, col6 = st.columns([1.5, 1, 1, 1, 1, 3]) | |
| with col1: | |
| st.metric("Statut", "✅ OK" if stats else "❌ OFFLINE") | |
| with col2: | |
| st.metric("RAM", stats.get("memory_usage_mb", "–") if stats else "–", "MB") | |
| with col3: | |
| st.metric("Uptime", stats.get("uptime_human", "–") if stats else "–") | |
| with col4: | |
| st.metric("Requêtes", stats.get("request_count", "–") if stats else "–") | |
| with col5: | |
| st.metric("Cache", stats.get("cache_items", "–") if stats else "–") | |
| with col6: | |
| colb1, colb2, colb3 = st.columns(3) | |
| with colb1: | |
| if "logs" in config and st.button("📜 Logs", key=f"logs_{service_name}"): | |
| logs = fetch_logs_data(config) | |
| with st.expander(f"📜 Logs détaillés - {service_name}"): | |
| st.code("".join(logs), language="bash") | |
| with colb2: | |
| if "clear_pred" in config and st.button("🧹 Pred", key=f"pred_{service_name}"): | |
| purge_cache(config, "clear_pred") | |
| with colb3: | |
| if "clear_heatmap" in config and st.button("🔥 Heatmap", key=f"hm_{service_name}"): | |
| purge_cache(config, "clear_heatmap") | |
| if "clear_state" in config and st.button("♻️ Reset orchestrateur", key=f"reset_{service_name}"): | |
| purge_cache(config, "clear_state") | |
| st.markdown("---") | |
| st.caption("⚙️ Interface Admin Recoplante — Pilotage centralisé de l’infrastructure") | |