fix: improve connection to postgres to raise business logic exception

And raises delay between each new try
This commit is contained in:
Alexis Fourmaux 2026-05-09 17:25:02 +02:00
parent 0830c2f182
commit f77cf3dd75
2 changed files with 18 additions and 7 deletions

View file

@ -4,21 +4,22 @@ import time
import psycopg2 import psycopg2
from psycopg2.extensions import connection from psycopg2.extensions import connection
from ports import DeviceRepository, ReadingRepository from ports import DeviceRepository, ReadingRepository
from exceptions import DatabaseConnectionError
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
def connect(uri: str, retries: int = 10, base_delay: float = 1.0) -> connection:
def connect(uri: str) -> connection: for attempt in range(retries):
for _ in range(10):
try: try:
conn = psycopg2.connect(uri) conn = psycopg2.connect(uri)
conn.autocommit = True conn.autocommit = True
log.info("PostgreSQL connecté") log.info("PostgreSQL connecté")
return conn return conn
except Exception as e: except psycopg2.OperationalError as e:
log.warning("Attente PostgreSQL... (%s)", e) delay = min(base_delay * 2 ** attempt, 30.0)
time.sleep(3) log.warning("Attente PostgreSQL (tentative %d/%d) : %s", attempt + 1, retries, e)
raise RuntimeError("Impossible de se connecter à PostgreSQL") time.sleep(delay)
raise DatabaseConnectionError(f"Impossible de se connecter après {retries} tentatives")
class PgDeviceRepository(DeviceRepository): class PgDeviceRepository(DeviceRepository):

View file

@ -0,0 +1,10 @@
# domain/exceptions.py (ou dans domain.py directement)
class InfrastructureError(Exception):
"""Erreur technique levée par un adapter"""
class DatabaseConnectionError(InfrastructureError):
"""Impossible de se connecter à la db"""
class MessageBrokerError(InfrastructureError):
"""Impossible de se connecter au broker MQTT"""