From 01554989821d97ca6ce5165762cb01a31f2d5f82 Mon Sep 17 00:00:00 2001 From: Michel Date: Mon, 7 Jul 2025 10:07:10 +0200 Subject: [PATCH] Ajout de surveillance Tables Sondes --- Watchdog_Tables_Sondes.py | 85 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 Watchdog_Tables_Sondes.py diff --git a/Watchdog_Tables_Sondes.py b/Watchdog_Tables_Sondes.py new file mode 100644 index 0000000..6b7ffca --- /dev/null +++ b/Watchdog_Tables_Sondes.py @@ -0,0 +1,85 @@ +import mysql.connector +from datetime import datetime, timedelta +import ovh +import os +from dotenv import load_dotenv + +# Charger le .env +load_dotenv() + +DB_CONFIG = { + 'host': os.getenv('DB_HOST'), + 'user': os.getenv('DB_USER'), + 'password': os.getenv('DB_PASSWORD'), + 'database': os.getenv('DB_NAME') +} + +# SMS OVH +OVH_CLIENT = ovh.Client( + endpoint=os.getenv('OVH_ENDPOINT'), + application_key=os.getenv('OVH_APP_KEY'), + application_secret=os.getenv('OVH_APP_SECRET'), + consumer_key=os.getenv('OVH_CONSUMER_KEY') +) + +OVH_SMS_ACCOUNT = os.getenv('OVH_SMS_ACCOUNT') +OVH_SMS_SENDER = os.getenv('OVH_SMS_SENDER') +ENVOI_SMS = os.getenv('ENVOI_SMS', '0') == '1' + +DESTINATAIRE = os.getenv('PHONE_ADMIN') +SEUIL_MINUTES = 10 + +def verifier_table(cnx, table): + cursor = cnx.cursor() + query = f"SELECT MAX(Date) FROM {table};" + cursor.execute(query) + result = cursor.fetchone()[0] + cursor.close() + return result + +def envoyer_sms(message): + if not ENVOI_SMS: + print(f"[DEBUG] ENVOI_SMS=0, pas d'envoi. Message :\n{message}") + return + try: + result = OVH_CLIENT.post( + f'/sms/{OVH_SMS_ACCOUNT}/jobs', + sender=OVH_SMS_SENDER, + message=message, + noStopClause=True, + receivers=[DESTINATAIRE] + ) + print(f"SMS envoyé avec job ID : {result['ids']}") + except Exception as e: + print(f"Erreur lors de l’envoi du SMS : {e}") + +def main(): + now = datetime.now() + cnx = mysql.connector.connect(**DB_CONFIG) + + problemes = [] + for table in ['Saclay', 'Meudon']: + last_date = verifier_table(cnx, table) + if last_date is None: + problemes.append(f"{table} : aucune donnée jamais reçue.") + continue + + delta = now - last_date + if delta > timedelta(minutes=SEUIL_MINUTES): + minutes = int(delta.total_seconds() / 60) + problemes.append( + f"{table} : aucune donnée depuis {minutes} min (dernière à {last_date.strftime('%H:%M:%S')})" + ) + else: + print(f"{table} OK — dernière donnée il y a {int(delta.total_seconds()/60)} min.") + + cnx.close() + + if problemes: + message = "[ALERTE] Données manquantes :\n" + "\n".join(problemes) + envoyer_sms(message) + else: + print("Tout est OK, aucune alerte.") + +if __name__ == "__main__": + main()