120 lines
2.9 KiB
Python
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()
|