29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
from __future__ import annotations
|
||
|
||
import logging
|
||
|
||
from app.db.base import SessionLocal
|
||
from app.integrations.gateway import GatewayClient
|
||
from app.repositories.request_log import RequestLogRepository
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
async def save_request_log(gateway: GatewayClient, user: str) -> None:
|
||
"""Сохраняет накопленные клиентом записи в external_request_log.
|
||
|
||
Отдельная короткая транзакция: журнал не должен откатываться вместе с
|
||
неудачной записью котировки, а его сбой — ронять обновление.
|
||
"""
|
||
records = gateway.drain_records()
|
||
if not records:
|
||
return
|
||
try:
|
||
async with SessionLocal() as session:
|
||
await RequestLogRepository(session).add_many(records, user)
|
||
await session.commit()
|
||
except Exception: # noqa: BLE001
|
||
logger.exception(
|
||
"Не удалось записать %d записей журнала запросов", len(records)
|
||
)
|