Mise à jour 11
This commit is contained in:
42
Monitor.py
42
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
|
import mysql.connector
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
import time
|
||||||
import smtplib
|
import smtplib
|
||||||
from email.mime.text import MIMEText
|
from email.mime.text import MIMEText
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import os
|
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Charger les variables d'environnement
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
|
||||||
# --- Config MySQL ---
|
# --- Config MySQL ---
|
||||||
@@ -17,27 +19,23 @@ config = {
|
|||||||
"database": os.getenv("DB_NAME")
|
"database": os.getenv("DB_NAME")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# --- Destinataires email ---
|
||||||
# --- Fonction de sélection des destinataires selon le site ---
|
destinataires = ['services@domo91.fr']
|
||||||
def get_destinataires(lieu):
|
|
||||||
return os.getenv(f"EMAIL_{lieu.upper()}", os.getenv("EMAIL_DEFAULT")).split(",")
|
|
||||||
|
|
||||||
|
|
||||||
# --- Fonction d'envoi de mail ---
|
# --- Fonction d'envoi de mail ---
|
||||||
def envoyer_mail(sujet, message, destinataires):
|
def envoyer_mail(sujet, message, destinataires):
|
||||||
msg = MIMEText(message)
|
msg = MIMEText(message)
|
||||||
msg['Subject'] = sujet
|
msg['Subject'] = sujet
|
||||||
msg['From'] = os.getenv("EMAIL_FROM")
|
msg['From'] = 'alertes_saclay@domo91.fr'
|
||||||
msg['To'] = ', '.join(destinataires)
|
msg['To'] = ', '.join(destinataires)
|
||||||
try:
|
try:
|
||||||
with smtplib.SMTP_SSL(os.getenv("SMTP_HOST"), int(os.getenv("SMTP_PORT"))) as server:
|
with smtplib.SMTP_SSL('smtp.mail.ovh.net', 465) as server:
|
||||||
server.login(os.getenv("SMTP_USER"), os.getenv("SMTP_PASSWORD"))
|
server.login('alertes_saclay@domo91.fr', 'Kdpke674y23Feq^H')
|
||||||
server.sendmail(msg['From'], destinataires, msg.as_string())
|
server.sendmail(msg['From'], destinataires, msg.as_string())
|
||||||
print(f"📧 Mail envoyé à {destinataires}", flush=True)
|
print(f"📧 Mail envoyé à {destinataires}", flush=True)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Erreur envoi mail : {e}", flush=True)
|
print(f"Erreur envoi mail : {e}", flush=True)
|
||||||
|
|
||||||
|
|
||||||
# --- Fonction de surveillance ---
|
# --- Fonction de surveillance ---
|
||||||
def surveiller():
|
def surveiller():
|
||||||
log_entries = []
|
log_entries = []
|
||||||
@@ -64,9 +62,10 @@ def surveiller():
|
|||||||
WHERE Sonde = %s
|
WHERE Sonde = %s
|
||||||
ORDER BY Date DESC LIMIT 6
|
ORDER BY Date DESC LIMIT 6
|
||||||
""", (nom_sonde,))
|
""", (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({
|
log_entries.append({
|
||||||
"Date": r['Date'],
|
"Date": r['Date'],
|
||||||
"Lieu": lieu,
|
"Lieu": lieu,
|
||||||
@@ -76,9 +75,9 @@ def surveiller():
|
|||||||
"État": "Dépassement" if r['Temperature'] > seuil else "Normal"
|
"État": "Dépassement" if r['Temperature'] > seuil else "Normal"
|
||||||
})
|
})
|
||||||
|
|
||||||
if len(releves) == 6:
|
if len(relevés) == 6:
|
||||||
toutes_hors_seuil = all(r['Temperature'] > seuil for r in releves)
|
toutes_hors_seuil = all(r['Temperature'] > seuil for r in relevés)
|
||||||
plus_ancien = releves[-1]['Date']
|
plus_ancien = relevés[-1]['Date']
|
||||||
maintenant = datetime.now()
|
maintenant = datetime.now()
|
||||||
|
|
||||||
if toutes_hors_seuil and (maintenant - plus_ancien >= timedelta(minutes=30)):
|
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"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 : {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
|
||||||
)
|
)
|
||||||
envoyer_mail(sujet, message, get_destinataires(lieu))
|
envoyer_mail(sujet, message, destinataires)
|
||||||
|
|
||||||
# Acquittement automatique
|
# Acquittement automatique
|
||||||
cursor.execute(f"""
|
cursor.execute(f"""
|
||||||
@@ -121,8 +120,13 @@ def surveiller():
|
|||||||
# Enregistrer le log
|
# Enregistrer le log
|
||||||
if log_entries:
|
if log_entries:
|
||||||
df_logs = pd.DataFrame(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:
|
except Exception as e:
|
||||||
print()
|
|
||||||
print(f"Erreur : {e}", flush=True)
|
print(f"Erreur : {e}", flush=True)
|
||||||
|
|
||||||
|
# --- Boucle principale ---
|
||||||
|
while True:
|
||||||
|
print(f"📡 Vérification à {datetime.now()}", flush=True)
|
||||||
|
surveiller()
|
||||||
|
time.sleep(300) # 5 minutes
|
||||||
Reference in New Issue
Block a user