Ajout de Watchdog_Tables_Sondes.py depuis develop

This commit is contained in:
2025-07-07 10:47:22 +02:00
parent c0f6e77e68
commit 80ac12007a

85
Watchdog_Tables_Sondes.py Normal file
View File

@@ -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 lenvoi 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()