"Modifications de domo91 & Monitor"
This commit is contained in:
35
Monitor.py
35
Monitor.py
@@ -1,4 +1,4 @@
|
||||
# Surveillance continue avec envoi d'alertes par email + log CSV
|
||||
# Surveillance continue avec envoi d'alertes par email + rappels + log CSV
|
||||
import mysql.connector
|
||||
from datetime import datetime, timedelta
|
||||
import time
|
||||
@@ -19,7 +19,10 @@ config = {
|
||||
}
|
||||
|
||||
# --- Destinataires email ---
|
||||
destinataires = ['services@domo91.fr,cuisine@bw-paris-saclay.com>']
|
||||
destinataires = ['services@domo91.fr', 'michel-68000@hotmail.fr']
|
||||
|
||||
# --- Suivi des alertes actives pour rappels ---
|
||||
alertes_actives = {}
|
||||
|
||||
# --- Fonction d'envoi de mail ---
|
||||
def envoyer_mail(sujet, message, destinataires):
|
||||
@@ -37,6 +40,7 @@ def envoyer_mail(sujet, message, destinataires):
|
||||
|
||||
# --- Fonction de surveillance ---
|
||||
def surveiller():
|
||||
global alertes_actives
|
||||
log_entries = []
|
||||
try:
|
||||
conn = mysql.connector.connect(**config)
|
||||
@@ -63,7 +67,6 @@ def surveiller():
|
||||
""", (nom_sonde,))
|
||||
relevés = cursor.fetchall()
|
||||
|
||||
# Log CSV : tous les relevés analysés
|
||||
for r in relevés:
|
||||
log_entries.append({
|
||||
"Date": r['Date'],
|
||||
@@ -91,14 +94,30 @@ def surveiller():
|
||||
(nom_sonde,)
|
||||
)
|
||||
print(f"🚨 Alerte déclenchée pour {nom_sonde} ({lieu})", flush=True)
|
||||
|
||||
sujet = f"🚨 ALERTE TEMPÉRATURE - {nom_sonde} ({lieu})"
|
||||
message = (
|
||||
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')}"
|
||||
f"depuis plus de 30 minutes.\nHeure : {maintenant.strftime('%Y-%m-%d %H:%M:%S')}"
|
||||
)
|
||||
envoyer_mail(sujet, message, destinataires)
|
||||
|
||||
# Acquittement automatique
|
||||
# Suivi pour rappels
|
||||
alertes_actives[nom_sonde] = maintenant
|
||||
|
||||
else:
|
||||
# Alerte déjà en cours : vérifier s'il faut faire un rappel
|
||||
dernier_envoi = alertes_actives.get(nom_sonde)
|
||||
if dernier_envoi and (maintenant - dernier_envoi >= timedelta(hours=1)):
|
||||
sujet = f"🔔 RAPPEL ALERTE TEMPÉRATURE - {nom_sonde} ({lieu})"
|
||||
message = (
|
||||
f"La sonde '{nom_sonde}' du site '{lieu}' est TOUJOURS en dépassement de seuil (>{seuil}°C).\n"
|
||||
f"Heure : {maintenant.strftime('%Y-%m-%d %H:%M:%S')}"
|
||||
)
|
||||
envoyer_mail(sujet, message, destinataires)
|
||||
alertes_actives[nom_sonde] = maintenant
|
||||
|
||||
# Vérifier retour à la normale (Acquittement)
|
||||
cursor.execute(f"""
|
||||
SELECT Temperature FROM {table_temp}
|
||||
WHERE Sonde = %s
|
||||
@@ -112,11 +131,14 @@ def surveiller():
|
||||
WHERE Sonde = %s AND Status IN ('En cours', 'Test')
|
||||
""", (nom_sonde,))
|
||||
|
||||
# Nettoyage du suivi si normalisé
|
||||
if nom_sonde in alertes_actives:
|
||||
del alertes_actives[nom_sonde]
|
||||
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
# Enregistrer le log
|
||||
if log_entries:
|
||||
df_logs = pd.DataFrame(log_entries)
|
||||
df_logs.to_csv("/home/debian/travail/Logs/monitor.csv", sep=";", index=False)
|
||||
@@ -129,3 +151,4 @@ while True:
|
||||
print(f"📡 Vérification à {datetime.now()}", flush=True)
|
||||
surveiller()
|
||||
time.sleep(300) # 5 minutes
|
||||
|
||||
|
||||
Reference in New Issue
Block a user