Ajout de Watchdog_Tables_Sondes.py depuis develop
This commit is contained in:
85
Watchdog_Tables_Sondes.py
Normal file
85
Watchdog_Tables_Sondes.py
Normal 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 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()
|
||||
Reference in New Issue
Block a user