diff --git a/Monitor.py b/Monitor.py index 96376d9..d387c91 100644 --- a/Monitor.py +++ b/Monitor.py @@ -1,12 +1,14 @@ -# Surveillance continue avec envoi d'alertes par email + log CSV + # Surveillance continue avec envoi d'alertes par email + log CSV import mysql.connector from datetime import datetime, timedelta +import time import smtplib from email.mime.text import MIMEText import pandas as pd -import os from dotenv import load_dotenv +import os +# Charger les variables d'environnement load_dotenv() # --- Config MySQL --- @@ -17,27 +19,23 @@ config = { "database": os.getenv("DB_NAME") } - -# --- Fonction de sélection des destinataires selon le site --- -def get_destinataires(lieu): - return os.getenv(f"EMAIL_{lieu.upper()}", os.getenv("EMAIL_DEFAULT")).split(",") - +# --- Destinataires email --- +destinataires = ['services@domo91.fr'] # --- Fonction d'envoi de mail --- def envoyer_mail(sujet, message, destinataires): msg = MIMEText(message) msg['Subject'] = sujet - msg['From'] = os.getenv("EMAIL_FROM") + msg['From'] = 'alertes_saclay@domo91.fr' msg['To'] = ', '.join(destinataires) try: - with smtplib.SMTP_SSL(os.getenv("SMTP_HOST"), int(os.getenv("SMTP_PORT"))) as server: - server.login(os.getenv("SMTP_USER"), os.getenv("SMTP_PASSWORD")) + with smtplib.SMTP_SSL('smtp.mail.ovh.net', 465) as server: + server.login('alertes_saclay@domo91.fr', 'Kdpke674y23Feq^H') server.sendmail(msg['From'], destinataires, msg.as_string()) print(f"📧 Mail envoyé à {destinataires}", flush=True) except Exception as e: print(f"Erreur envoi mail : {e}", flush=True) - # --- Fonction de surveillance --- def surveiller(): log_entries = [] @@ -64,9 +62,10 @@ def surveiller(): WHERE Sonde = %s ORDER BY Date DESC LIMIT 6 """, (nom_sonde,)) - releves = cursor.fetchall() + relevés = cursor.fetchall() - for r in releves: + # Log CSV : tous les relevés analysés + for r in relevés: log_entries.append({ "Date": r['Date'], "Lieu": lieu, @@ -76,9 +75,9 @@ def surveiller(): "État": "Dépassement" if r['Temperature'] > seuil else "Normal" }) - if len(releves) == 6: - toutes_hors_seuil = all(r['Temperature'] > seuil for r in releves) - plus_ancien = releves[-1]['Date'] + if len(relevés) == 6: + toutes_hors_seuil = all(r['Temperature'] > seuil for r in relevés) + plus_ancien = relevés[-1]['Date'] maintenant = datetime.now() if toutes_hors_seuil and (maintenant - plus_ancien >= timedelta(minutes=30)): @@ -98,7 +97,7 @@ def surveiller(): f"La sonde '{nom_sonde}' du site '{lieu}' a dépassé le seuil de {seuil}°C " f"depuis plus de 30 minutes.\nHeure : {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}" ) - envoyer_mail(sujet, message, get_destinataires(lieu)) + envoyer_mail(sujet, message, destinataires) # Acquittement automatique cursor.execute(f""" @@ -121,8 +120,13 @@ def surveiller(): # Enregistrer le log if log_entries: df_logs = pd.DataFrame(log_entries) - df_logs.to_csv("/home/debian/travail/Gestion_sondes/Logs/monitor.csv", sep=";", index=False) + df_logs.to_csv("/home/debian/travail/logs/monitor.csv", sep=";", index=False) except Exception as e: - print() print(f"Erreur : {e}", flush=True) + +# --- Boucle principale --- +while True: + print(f"📡 Vérification à {datetime.now()}", flush=True) + surveiller() + time.sleep(300) # 5 minutes \ No newline at end of file