Mise à jour 11
This commit is contained in:
40
Monitor.py
40
Monitor.py
@@ -1,12 +1,14 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user