Files
Gestion_sondes/Watchdog_Tables_Sondes.py

86 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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()