|
|
|
|
|
from datetime import datetime
|
|
|
import logging
|
|
|
from banco import SessionLocal
|
|
|
from models import LogAcesso
|
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def registrar_log(usuario, acao, tabela, registro_id=None):
|
|
|
"""
|
|
|
Registra um log de acesso/ação na tabela LogAcesso.
|
|
|
Mantém assinatura e padrão original, mas com tratamento de exceções e normalização.
|
|
|
|
|
|
:param usuario: str | usuário responsável pela ação (fallback para 'sistema' se None/vazio)
|
|
|
:param acao: str | ação realizada (ex.: 'CRIAR', 'DESATIVAR', 'EXCLUIR')
|
|
|
:param tabela: str | nome da tabela/entidade relacionada (ex.: 'eventos_calendario')
|
|
|
:param registro_id: int | id do registro afetado (opcional)
|
|
|
"""
|
|
|
|
|
|
usuario = (usuario or "sistema")
|
|
|
acao = (acao or "").strip() or "DESCONHECIDA"
|
|
|
tabela = (tabela or "").strip() or "desconhecida"
|
|
|
|
|
|
db = SessionLocal()
|
|
|
try:
|
|
|
log = LogAcesso(
|
|
|
usuario=usuario,
|
|
|
acao=acao,
|
|
|
tabela=tabela,
|
|
|
registro_id=registro_id,
|
|
|
data_hora=datetime.now()
|
|
|
)
|
|
|
db.add(log)
|
|
|
db.commit()
|
|
|
except Exception as e:
|
|
|
|
|
|
try:
|
|
|
db.rollback()
|
|
|
except Exception:
|
|
|
|
|
|
pass
|
|
|
logger.exception(
|
|
|
"Falha ao registrar log: usuario=%r, acao=%r, tabela=%r, registro_id=%r. Erro: %s",
|
|
|
usuario, acao, tabela, registro_id, e
|
|
|
)
|
|
|
|
|
|
finally:
|
|
|
db.close()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def registrar_log_safe(usuario, acao, tabela, registro_id=None):
|
|
|
try:
|
|
|
registrar_log(usuario, acao, tabela, registro_id)
|
|
|
except Exception:
|
|
|
|
|
|
logger.exception(
|
|
|
"registrar_log_safe: erro inesperado ao registrar log (usuario=%r, acao=%r, tabela=%r, registro_id=%r)",
|
|
|
usuario, acao, tabela, registro_id
|
|
|
)
|
|
|
|
|
|
|