Files
ms1reader-engine/engine/engine.py
2025-12-10 10:31:59 -05:00

77 lines
2.2 KiB
Python

from mysql.connector import Error
from engine.db import get_connection
from engine.engine_components.active_courses import get_active_con_ids
from engine.engine_components.process_course import process_course
from engine.logger import log_info, log_debug, log_warn, log_error
def run_once():
try:
cnx = get_connection()
cur = cnx.cursor(dictionary=True)
con_ids = get_active_con_ids(cur)
if not con_ids:
log_info("[INFO] Aucune course active.")
return
# -------------------------------------------------
# Appliquer les PAUSE_REQUEST avant tout traitement
# -------------------------------------------------
active_courses = get_active_con_ids(cur)
for con_id in active_courses:
engine_table = f"resultv2_{con_id}_lecture"
# Lire le statut actuel
cur.execute(f"SELECT process_status FROM `{engine_table}` LIMIT 1")
row = cur.fetchone()
if not row:
continue
status = (row["process_status"] or "").upper()
# Si CI4 a demandé une pause → Python applique la pause maintenant
if status == "PAUSE_REQUEST":
cur.execute(f"UPDATE `{engine_table}` SET process_status = 'PAUSE'")
cnx.commit()
log_info(f"[PAUSE APPLIED] con_id={con_id}")
for con_id in con_ids:
process_course(cur, cnx, con_id)
except Error as e:
log_error(f"[ERREUR MYSQL] {e}")
finally:
try:
cur.close()
cnx.close()
except:
pass
if __name__ == "__main__":
import time
import msvcrt # Spécifique Windows
log_info("[TEST MODE] Boucle continue — appuyer ENTER pour arrêter.")
try:
while True:
run_once()
time.sleep(0.5)
if msvcrt.kbhit(): # Une touche a été pressée
key = msvcrt.getch()
if key == b'\r': # ENTER = arrêt
log_info("[TEST MODE] Arrêt demandé via ENTER.")
break
except KeyboardInterrupt:
log_info("[TEST MODE] Arrêt via CTRL+C.")