Files
ms1reader-engine/mysql_writer.py
2025-12-09 11:27:02 -05:00

120 lines
2.9 KiB
Python

# mysql_writer.py
import mysql.connector
from mysql.connector import Error
import threading
# =============================
# CONFIGURATION DE LA BD
# =============================
DB_CONFIG = {
"host": "serveur-prod.progiweb.net",
"user": "ms1reader_bd", # ajuste au besoin
"password": "X~=v]lg-l]4,T2FF", # ajuste au besoin
"database": "ms1reader_centrale"
}
TABLE_NAME = "reader_lectures"
# =============================
# CONNEXION PERSISTANTE
# =============================
_conn = None
_lock = threading.Lock()
def _get_connection():
"""Retourne une connexion MySQL persistante, reconnecte si nécessaire."""
global _conn
if _conn is None or not _conn.is_connected():
_conn = mysql.connector.connect(**DB_CONFIG)
return _conn
def write_chrinfo(row: dict):
insert_sql = f"""
INSERT IGNORE INTO `{TABLE_NAME}` (
chrinfo_feed_ip,
chrinfo_feed_port,
chrinfo_event_id,
chrinfo_event_name,
chrinfo_event_desc,
chrinfo_type_transaction,
chrinfo_format_id,
chrinfo_sequence,
chrinfo_location,
chrinfo_tag,
chrinfo_time,
chrinfo_time_iso,
chrinfo_gatornumber,
chrinfo_readerid,
chrinfo_lap,
chrinfo_received_at_iso
) VALUES (
%(chrinfo_feed_ip)s,
%(chrinfo_feed_port)s,
%(chrinfo_event_id)s,
%(chrinfo_event_name)s,
%(chrinfo_event_desc)s,
%(chrinfo_type_transaction)s,
%(chrinfo_format_id)s,
%(chrinfo_sequence)s,
%(chrinfo_location)s,
%(chrinfo_tag)s,
%(chrinfo_time)s,
%(chrinfo_time_iso)s,
%(chrinfo_gatornumber)s,
%(chrinfo_readerid)s,
%(chrinfo_lap)s,
%(chrinfo_received_at_iso)s
)
"""
with _lock:
cursor = None
try:
conn = _get_connection()
cursor = conn.cursor()
# 2) Pas de doublon → on insère
cursor.execute(insert_sql, row)
conn.commit()
except Error as e:
print(f"❌ Erreur MySQL: {e}")
except Exception as e:
print(f"❌ Erreur write_chrinfo: {e}")
finally:
if cursor is not None:
cursor.close()
def write_log(log_type: str, message: str):
"""
Écrit une ligne dans la table log.
Aucun impact sur la logique existante.
"""
sql = """
INSERT INTO log (log_created_at, log_type, log_message)
VALUES (NOW(), %s, %s)
"""
print( sql)
with _lock:
cursor = None
try:
conn = _get_connection()
cursor = conn.cursor()
cursor.execute(sql, (log_type, message))
conn.commit()
except Exception as e:
print(f"❌ Erreur MySQL (write_log): {e}")
finally:
if cursor:
cursor.close()