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