Public Access
maj auto 2
This commit is contained in:
1 parent
7ea3c603bb
commit
f966ce7bde
3 files changed
+122
-53
No files matched your search
@@ -0,0 +1,64 @@
|
||||
import os
|
||||
import smtplib
|
||||
from email.mime.text import MIMEText
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
from modules.logger import log_event
|
||||
|
||||
# Option de désactivation depuis l'interface (Phase Debug)
|
||||
DEBUG_MAIL_ACTIVE = True
|
||||
|
||||
def envoyer_alerte_debug(niveau, source, message_erreur):
|
||||
"""
|
||||
Envoie un e-mail à l'administrateur en cas d'erreur serveur (Phase Debug).
|
||||
Utilise le serveur SMTP défini dans le .env
|
||||
"""
|
||||
if not DEBUG_MAIL_ACTIVE:
|
||||
return
|
||||
|
||||
# L'adresse de l'administrateur est configurée via l'interface (ou le .env)
|
||||
email_admin = os.getenv("ADMIN_EMAIL", "votre-email@domaine.com")
|
||||
smtp_serveur = os.getenv("SMTP_SERVER")
|
||||
smtp_port = int(os.getenv("SMTP_PORT", 587))
|
||||
smtp_user = os.getenv("SMTP_USER")
|
||||
smtp_pass = os.getenv("SMTP_PASS")
|
||||
|
||||
if not all([smtp_serveur, smtp_user, smtp_pass]):
|
||||
log_event("WARNING", "DEBUG_MAILER", "Configuration SMTP absente. Impossible d'envoyer l'alerte.")
|
||||
return
|
||||
|
||||
sujet = f"[ALERTE {niveau}] Aethas38_Multi_IA - Erreur dans {source}"
|
||||
corps_html = f"""
|
||||
<html>
|
||||
<body>
|
||||
<h2 style="color: {'red' if niveau == 'CRITICAL' else 'orange'};">Alerte Serveur - Aethas38</h2>
|
||||
<p><strong>Niveau :</strong> {niveau}</p>
|
||||
<p><strong>Module/Source :</strong> {source}</p>
|
||||
<p><strong>Détail de l'erreur :</strong></p>
|
||||
<div style="background-color: #f4f4f4; padding: 10px; border-left: 4px solid red; font-family: monospace;">
|
||||
{message_erreur}
|
||||
</div>
|
||||
<br>
|
||||
<p><em>Notification automatique de l'Orchestrateur (Phase Debug)</em></p>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
|
||||
msg = MIMEMultipart()
|
||||
msg['From'] = smtp_user
|
||||
msg['To'] = email_admin
|
||||
msg['Subject'] = sujet
|
||||
msg.attach(MIMEText(corps_html, 'html'))
|
||||
|
||||
try:
|
||||
server = smtplib.SMTP(smtp_serveur, smtp_port)
|
||||
server.starttls()
|
||||
server.login(smtp_user, smtp_pass)
|
||||
server.send_message(msg)
|
||||
server.quit()
|
||||
# On ne loggue pas la réussite de l'envoi pour éviter une boucle infinie de logs
|
||||
except Exception as e:
|
||||
# Affichage terminal pur pour éviter la boucle d'erreurs
|
||||
print(f"ÉCHEC CRITIQUE : Impossible d'envoyer l'alerte e-mail : {e}")
|
||||
|
||||
# Pour connecter ce module au logger existant, il suffira d'importer cette fonction
|
||||
# dans modules/logger.py et de l'appeler si niveau in ["ERROR", "CRITICAL"].
|
||||
+24
-8
@@ -1,15 +1,31 @@
|
||||
# modules/logger.py
|
||||
import datetime
|
||||
import os
|
||||
from datetime import datetime
|
||||
from modules.debug_mailer import envoyer_alerte_debug
|
||||
|
||||
# Le fichier de destination pour les logs locaux
|
||||
LOG_FILE = "aethas_logs.txt"
|
||||
|
||||
def log_event(niveau, fournisseur, message):
|
||||
"""Enregistre un événement ou une erreur dans le fichier de log."""
|
||||
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
log_entry = f"[{timestamp}] [{niveau.upper()}] [{fournisseur.upper()}] {message}\n"
|
||||
def log_event(niveau, source, message):
|
||||
"""
|
||||
Enregistre un événement dans le fichier de log local.
|
||||
Déclenche l'envoi d'un e-mail si le niveau est ERROR ou CRITICAL.
|
||||
"""
|
||||
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
log_line = f"[{timestamp}] [{niveau}] [{source}] {message}\n"
|
||||
|
||||
# 1. Écriture sécurisée dans le fichier de log local
|
||||
try:
|
||||
with open(LOG_FILE, "a", encoding="utf-8") as f:
|
||||
f.write(log_entry)
|
||||
f.write(log_line)
|
||||
except Exception as e:
|
||||
print(f"Erreur d'écriture des logs : {e}")
|
||||
print(f"ÉCHEC D'ÉCRITURE LOG : Impossible d'écrire dans {LOG_FILE} : {e}")
|
||||
|
||||
# 2. Déclenchement de l'alerte e-mail pour la phase de Debug
|
||||
# Les niveaux peuvent être ajustés (ex: ajouter "WARNING" si vous souhaitez plus d'alertes)
|
||||
if niveau in ["ERROR", "CRITICAL"]:
|
||||
try:
|
||||
# Appel du second module pour gérer l'envoi
|
||||
envoyer_alerte_debug(niveau, source, message)
|
||||
except Exception as mail_error:
|
||||
# On print l'erreur dans la console hôte pour ne pas faire planter l'application
|
||||
print(f"ÉCHEC D'ENVOI E-MAIL : Impossible d'avertir l'administrateur : {mail_error}")
|
||||
Reference in new issue
Block a user