diff --git a/Backup/.deploy.sh b/Backup/.deploy.sh deleted file mode 100644 index 0beec00..0000000 --- a/Backup/.deploy.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -LOG="/home/debian/travail/Logs/deploy.log" -REPO_PATH="/home/debian/travail/Gestion_sondes" -DATE=$(date '+%Y-%m-%d %H:%M:%S') - -echo "[$DATE] 🔄 Déploiement en cours depuis Gitea (branche product)..." >> $LOG - -cd $REPO_PATH - -# S'assurer d'être sur la bonne branche -git checkout product >> $LOG 2>&1 -git pull origin product >> $LOG 2>&1 - -# Redémarrer les services Supervisor -for service in Cuisine_Saclay Monitor cuisine_meudon domo91 -do - supervisorctl stop $service >> $LOG 2>&1 -done - -sleep 2 - -for service in Cuisine_Saclay Monitor cuisine_meudon domo91 -do - supervisorctl start $service >> $LOG 2>&1 -done - -DATE_END=$(date '+%Y-%m-%d %H:%M:%S') -echo "[$DATE_END] ✅ Déploiement terminé avec succès (branche product)" >> $LOG diff --git a/Backup/Sauvegarde du 1742025.txt b/Backup/Sauvegarde du 1742025.txt deleted file mode 100644 index f3e63b6..0000000 --- a/Backup/Sauvegarde du 1742025.txt +++ /dev/null @@ -1,184 +0,0 @@ -# Application Gestion de sondes -import streamlit as st -import mysql.connector -import pandas as pd -from datetime import date -import matplotlib.pyplot as plt -import matplotlib.dates as mdates -import random -from fpdf import FPDF -import os - -st.set_page_config(page_title="Domo91 - Surveillance", layout="wide") -st.title("📡 Supervision Températures") - -# --- Configuration base de données --- -db_config = { - "host": "54.36.188.119", - "user": "michel", - "password": "#SO2&1nf%mZ@jfh", - "database": "Sondes" -} - -# --- Initialisation session --- -if "authenticated" not in st.session_state: - st.session_state["authenticated"] = False - st.session_state["role"] = None - st.session_state["lieu_autorise"] = None - -# --- Sidebar (connexion + bouton PDF) --- -with st.sidebar: - st.header("🔐 Connexion") - if not st.session_state.get("authenticated"): - login = st.text_input("Nom d'utilisateur") - password = st.text_input("Mot de passe", type="password") - if st.button("Se connecter"): - try: - conn = mysql.connector.connect(**db_config) - cursor = conn.cursor(dictionary=True) - cursor.execute("SELECT * FROM MotsDePasse WHERE utilisateur = %s", (login,)) - result = cursor.fetchone() - if result and result["mot_de_passe"] == password: - st.session_state["authenticated"] = True - st.session_state["role"] = result["role"] - st.session_state["lieu_autorise"] = result["Lieu"] - st.success(f"Connecté comme {result['role']} ({result['Lieu']})") - else: - st.error("Identifiants invalides") - cursor.close() - conn.close() - except Exception as e: - st.error(f"Erreur lors de la connexion à la base : {e}") - else: - st.success(f"Connecté ({st.session_state['role']})") - if st.button("🔓 Déconnexion"): - st.session_state["authenticated"] = False - st.session_state["role"] = None - st.session_state["lieu_autorise"] = None - st.rerun() - - st.markdown("---") - st.subheader("📄 Rapport PDF") - if "selected_date" in st.session_state: - if st.button("📥 Télécharger l’état du jour (PDF)"): - site = st.session_state["lieu_autorise"] - date_val = st.session_state["selected_date"].strftime("%Y-%m-%d") - def generer_pdf(site, date_str): - releves = { - "Chambre 1": [("06:00", 3.5), ("07:00", 3.2), ("08:00", 3.1)], - "Congélateur": [("06:00", -18.1), ("07:00", -17.8), ("08:00", -17.5)] - } - alertes = [ - {"Sonde": "Chambre 2", "Debut": f"{date_str} 08:45", "Statut": "En cours"}, - {"Sonde": "Congélateur", "Debut": f"{date_str} 12:30", "Statut": "Acquittée"} - ] - - class RapportPDF(FPDF): - def header(self): - self.set_font("Arial", "B", 14) - self.cell(0, 10, "Rapport de surveillance des sondes", ln=1, align="C") - self.set_font("Arial", "", 12) - self.cell(0, 10, f"Date : {date_str}", ln=1, align="C") - self.ln(5) - - def site_info(self, site_name): - self.set_font("Arial", "B", 12) - self.cell(0, 10, f"Site : {site_name}", ln=1) - self.ln(2) - - def releves_section(self, data): - self.set_font("Arial", "B", 12) - self.cell(0, 10, "Relevés de température", ln=1) - for sonde, mesures in data.items(): - self.set_font("Arial", "B", 11) - self.cell(0, 8, f"Sonde : {sonde}", ln=1) - self.set_font("Arial", "", 10) - for heure, temp in mesures: - self.cell(0, 6, f"{heure} - {temp} °C", ln=1) - self.ln(2) - - def alertes_section(self, data): - self.set_font("Arial", "B", 12) - self.cell(0, 10, "Alertes enregistrées", ln=1) - self.set_font("Arial", "", 10) - for a in data: - self.cell(0, 6, f"{a['Sonde']} - {a['Debut']} - {a['Statut']}", ln=1) - - pdf = RapportPDF() - pdf.add_page() - pdf.site_info(site) - pdf.releves_section(releves) - pdf.alertes_section(alertes) - - file_name = f"rapport_{site}_{date_str}.pdf" - output_path =file_name - pdf.output(output_path) - - with open(output_path, "rb") as f: - st.download_button( - label="📥 Télécharger le rapport PDF", - data=f, - file_name=file_name, - mime="application/pdf" - ) - - generer_pdf(site, date_val) - else: - st.info("Sélectionnez une date pour activer la génération PDF.") - -# --- CONTENU PRINCIPAL SI AUTHENTIFIÉ --- -if st.session_state["authenticated"]: - st.markdown("## Sélection du site et de la date") - try: - conn = mysql.connector.connect(**db_config) - cursor = conn.cursor(dictionary=True) - sites_possibles = ["Saclay", "Meudon"] - if st.session_state["role"] == "superviseur": - site_selectionne = st.selectbox("📍 Choisissez un site :", sites_possibles) - else: - site_selectionne = st.session_state["lieu_autorise"] - st.info(f"Site imposé : {site_selectionne}") - - selected_date = st.date_input("📅 Date du relevé", value=date.today()) - st.session_state["selected_date"] = selected_date - - cursor.execute( - f"SELECT * FROM `{site_selectionne}` WHERE DATE(Date) = %s ORDER BY Sonde, Date", - (selected_date.strftime("%Y-%m-%d"),) - ) - rows = cursor.fetchall() - if rows: - df = pd.DataFrame(rows) - df["Date"] = pd.to_datetime(df["Date"]) - sondes = sorted(df["Sonde"].unique()) - sonde_choisie = st.selectbox("🧪 Choisissez une sonde :", sondes) - df_sonde = df[df["Sonde"] == sonde_choisie] - - cursor.execute("SELECT Temp_Max FROM Chambres_froides WHERE Lieu = %s AND Sonde = %s", (site_selectionne, sonde_choisie)) - seuil = cursor.fetchone() - seuil_temp = seuil["Temp_Max"] if seuil else 10 - - st.subheader("📊 Tableau des relevés") - df_filtré = df_sonde.copy() - df_filtré = df_filtré.drop(columns="Id", errors="ignore") - st.dataframe(df_filtré, use_container_width=True) - - st.subheader("📈 Évolution de la température") - fig, ax = plt.subplots(figsize=(10, 4)) - ax.plot(df_filtré["Date"], df_filtré["Temperature"], marker='o', label="Température") - ax.axhline(seuil_temp, color='red', linestyle='--', label=f"Seuil {seuil_temp}°C") - ax.set_xlabel("Heure") - ax.set_ylabel("Température (°C)") - ax.set_title(f"{sonde_choisie} - {selected_date.strftime('%d/%m/%Y')}") - ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M')) - ax.legend() - st.pyplot(fig) - - else: - st.warning("Aucune donnée trouvée pour cette date.") - - cursor.close() - conn.close() - - except Exception as e: - st.error(f"Erreur MySQL : {e}") \ No newline at end of file diff --git a/Backup/backup_mysql.sh b/Backup/backup_mysql.sh deleted file mode 100644 index f9ee856..0000000 --- a/Backup/backup_mysql.sh +++ /dev/null @@ -1,6 +0,0 @@ -# Fichier de sauvegarde BDD sur Syno en NFS -# Fichier my.cnf -#[mysqldump] -#user=root -#password=4V5t9P!Z2HgT#CLFes4cntEeNBWs -mysqldump --defaults-file=/home/debian/travail/my.cnf -u root --all-databases > /mnt/syno920/all-$(date +%Y%m%d).sql diff --git a/Backup/requirements.txt b/Backup/requirements.txt deleted file mode 100644 index eee1a33..0000000 --- a/Backup/requirements.txt +++ /dev/null @@ -1,9 +0,0 @@ -mysql~=0.0.3 -mysql-connector-python~=9.2.0 -pandas~=2.2.3 -DateTime~=5.5 -streamlit~=1.44.1 -matplotlib~=3.10.1 -paho-mqtt~=2.1.0 -requests~=2.32.3 -schedule~=1.2.2 \ No newline at end of file diff --git a/scripts/deploy_all.sh b/scripts/deploy_all.sh new file mode 100644 index 0000000..b4e745a --- /dev/null +++ b/scripts/deploy_all.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +UPDATE_SCRIPT="/home/debian/travail/Gestion_sondes/scripts/update_product.sh" +RESTART_SCRIPT="/home/debian/travail/Gestion_sondes/scripts/restart_services.sh" + +echo "" +echo "===== 🚀 DÉPLOIEMENT GLOBAL EN COURS =====" +echo "" + +# Étape 1 : Mise à jour Git +echo "🔄 Étape 1 : Mise à jour des sources (Git)" +bash "$UPDATE_SCRIPT" + +# Vérifie le code retour du script de mise à jour +if [ $? -ne 0 ]; then + echo "" + echo "❌ La mise à jour a échoué ou a été interrompue (conflit, erreur Git)." + echo "➡️ Les services ne seront pas redémarrés." + exit 1 +else + echo "✅ Mise à jour réussie !" +fi + +# Étape 2 : Redémarrage des services Supervisor +echo "" +echo "🔁 Étape 2 : Redémarrage des services" +bash "$RESTART_SCRIPT" + +echo "" +echo "🎯 Déploiement complet terminé avec succès." +echo "===== ✅ FIN =====" diff --git a/scripts/restart_services.sh b/scripts/restart_services.sh new file mode 100644 index 0000000..74b42b6 --- /dev/null +++ b/scripts/restart_services.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +LOG="/home/debian/travail/Gestion_sondes/Logs/restart_services.log" +DATE=$(date '+%Y-%m-%d %H:%M:%S') + +echo "[$DATE] 🔄 Redémarrage des services Supervisor" >> $LOG +echo "" +echo "===== 🔄 DÉMARRAGE REDÉMARRAGE DES SERVICES =====" +echo "" + +SERVICES=("Cuisine_Saclay" "Monitor" "cuisine_meudon" "Interface") +ALL_OK=true + +for service in "${SERVICES[@]}" +do + echo "🔁 Redémarrage de $service..." + supervisorctl restart $service >> $LOG 2>&1 + if [ $? -eq 0 ]; then + echo "✅ $service redémarré avec succès." + else + echo "❌ Échec du redémarrage de $service." + ALL_OK=false + fi +done + +DATE_END=$(date '+%Y-%m-%d %H:%M:%S') +echo "[$DATE_END] ✅ Tous les services ont été traités." >> $LOG +echo "" + +if $ALL_OK; then + echo "🎉 Tous les services ont été redémarrés avec succès !" +else + echo "⚠️ Certains services n'ont pas pu être redémarrés. Vérifiez le log :" + echo " → $LOG" +fi +echo "" +echo "===== ✅ FIN DU SCRIPT =====" \ No newline at end of file diff --git a/scripts/update_product.sh b/scripts/update_product.sh new file mode 100644 index 0000000..162d952 --- /dev/null +++ b/scripts/update_product.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +LOG="/home/debian/travail/Gestion_sondes/Logs/update_product.log" +REPO_PATH="/home/debian/travail/Gestion_sondes" +DATE=$(date '+%Y-%m-%d %H:%M:%S') + +echo "[$DATE] 🔄 Lancement du script de mise à jour" >> $LOG + +cd $REPO_PATH || { echo "❌ Dossier introuvable : $REPO_PATH" >> $LOG; exit 1; } + +# Vérifie s'il y a une fusion en cours +if [ -d .git ] && [ -f .git/MERGE_HEAD ]; then + echo "[$DATE] ❌ Fusion en cours détectée. Abandon automatique." >> $LOG + echo "➡️ Lancez 'git merge --abort' manuellement si besoin." >> $LOG + exit 1 +fi + +# Récupération des dernières modifications distantes +git fetch origin >> $LOG 2>&1 + +# Réinitialisation de la branche product sur la version distante +git checkout product >> $LOG 2>&1 +git reset --hard origin/product >> $LOG 2>&1 + +# Fusion directe depuis origin/develop +git merge origin/develop -m "🧩 Merge auto develop → product" >> $LOG 2>&1 + +# Push vers le dépôt distant +git push origin product >> $LOG 2>&1 + +DATE_END=$(date '+%Y-%m-%d %H:%M:%S') +echo "[$DATE_END] ✅ Mise à jour terminée avec succès." >> $LOG \ No newline at end of file diff --git a/tools/.deploy.sh b/tools/.deploy.sh deleted file mode 100644 index 49eda77..0000000 --- a/tools/.deploy.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash - -LOG="/home/debian/travail/Logs/deploy.log" -REPO_PATH="/home/debian/travail/Gestion_sondes" -DATE=$(date '+%Y-%m-%d %H:%M:%S') - -echo "[$DATE] 🔄 Déploiement en cours depuis Gitea (merge develop → product)..." >> $LOG - -cd $REPO_PATH - -# Récupérer les dernières modifications -git fetch origin >> $LOG 2>&1 - -# Passer sur la branche product -git checkout product >> $LOG 2>&1 - -# Fusionner la branche develop dedans -git merge origin/develop -m "Auto-merge develop into product via deploy.sh" >> $LOG 2>&1 - -# Pousser la mise à jour (si tu veux que product soit mis à jour sur Gitea aussi) -# git push origin product >> $LOG 2>&1 - -# Redémarrer les services Supervisor -for service in Cuisine_Saclay Monitor cuisine_meudon domo91 -do - supervisorctl stop $service >> $LOG 2>&1 -done - -sleep 2 - -for service in Cuisine_Saclay Monitor cuisine_meudon domo91 -do - supervisorctl start $service >> $LOG 2>&1 -done - -DATE_END=$(date '+%Y-%m-%d %H:%M:%S') -echo "[$DATE_END] ✅ Déploiement terminé avec succès (develop → product)" >> $LOG diff --git a/tools/deploy_product.sh b/tools/deploy_product.sh deleted file mode 100644 index b6a8960..0000000 --- a/tools/deploy_product.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -LOG="/home/debian/travail/Logs/deploy_product.log" -REPO_PATH="/home/debian/travail/Gestion_sondes" -DATE=$(date '+%Y-%m-%d %H:%M:%S') - -echo "[$DATE] 🚀 Déploiement de la branche develop vers product" >> $LOG - -cd $REPO_PATH - -# 1. Récupérer les dernières modifs -git fetch origin >> $LOG 2>&1 - -# 2. Basculer sur la branche product -git checkout product >> $LOG 2>&1 - -# 3. Mettre à jour tous les .py depuis develop -git checkout origin/develop -- *.py >> $LOG 2>&1 - -# 4. Commit et push -git commit -am "🧩 Déploiement auto : maj des fichiers .py depuis develop" >> $LOG 2>&1 -git push origin product >> $LOG 2>&1 - -# 5. Redémarrage des services Supervisor -for service in Cuisine_Saclay Monitor cuisine_meudon domo91 Interface -do - supervisorctl restart $service >> $LOG 2>&1 -done - -DATE_END=$(date '+%Y-%m-%d %H:%M:%S') -echo "[$DATE_END] ✅ Déploiement terminé avec succès." >> $LOG diff --git a/tools/update_product_from_develop.sh b/tools/update_product_from_develop.sh deleted file mode 100644 index c4d19b2..0000000 --- a/tools/update_product_from_develop.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -# --------------------------------------------- -# Script : update_product_from_develop.sh -# Objectif : Met à jour les fichiers de 'product' depuis 'develop' -# uniquement pour les fichiers déjà existants dans product -# --------------------------------------------- - -echo "📁 Branche active : $(git branch --show-current)" - -# Vérification qu'on est bien sur 'product' -current_branch=$(git branch --show-current) -if [ "$current_branch" != "product" ]; then - echo "❌ Tu n'es pas sur la branche 'product'. Abandon." - exit 1 -fi - -# Lister les fichiers présents dans 'product' -echo "📄 Création de la liste des fichiers dans 'product'..." -git ls-tree --name-only -r product > product_files.txt - -echo "🔄 Mise à jour des fichiers depuis 'develop'..." - -while IFS= read -r file; do - if git show develop:"$file" > /dev/null 2>&1; then - git checkout develop -- "$file" - echo "✅ Mis à jour : $file" - else - echo "❌ Absent dans develop : $file" - fi -done < product_files.txt - -echo "✅ Mise à jour terminée." diff --git a/tools/update_product_from_develop.txt b/tools/update_product_from_develop.txt deleted file mode 100644 index e69de29..0000000