|
|
| import streamlit as st
|
| from datetime import datetime, timedelta
|
| from banco import SessionLocal
|
| from models import LogAcesso
|
| from utils_auditoria import registrar_log
|
|
|
|
|
| def main():
|
| st.title("🧹 Limpeza de Logs de Auditoria")
|
|
|
| st.markdown(
|
| """
|
| Este módulo permite excluir registros antigos de auditoria
|
| para suavizar o banco de dados.
|
| """
|
| )
|
|
|
| opcoes = {
|
| "Último mês": 30,
|
| "Últimos 2 meses": 60,
|
| "Últimos 6 meses": 180,
|
| "Últimos 12 meses": 365,
|
| "Personalizado": None,
|
| }
|
|
|
| escolha = st.selectbox("📅 Escolha o período:", list(opcoes.keys()))
|
|
|
| data_inicio = None
|
| data_fim = datetime.now()
|
|
|
| if escolha != "Personalizado":
|
| dias = opcoes[escolha]
|
| data_inicio = datetime.now() - timedelta(days=dias)
|
| else:
|
| col1, col2 = st.columns(2)
|
| with col1:
|
| data_inicio = st.date_input("Data inicial")
|
| with col2:
|
| data_fim = st.date_input("Data final")
|
| data_inicio = datetime.combine(data_inicio, datetime.min.time())
|
| data_fim = datetime.combine(data_fim, datetime.max.time())
|
|
|
| st.info(f"🗓️ Registros de auditoria entre {data_inicio.date()} e {data_fim.date()} serão excluídos.")
|
|
|
| st.divider()
|
|
|
|
|
| with SessionLocal() as db:
|
| total_prev = (
|
| db.query(LogAcesso)
|
| .filter(LogAcesso.data_hora >= data_inicio, LogAcesso.data_hora <= data_fim)
|
| .count()
|
| )
|
| st.info(f"🔎 Prévia: {total_prev} registro(s) serão removidos no período selecionado.")
|
|
|
|
|
| st.warning(
|
| "⚠️ **Atenção:** Todos os registros de auditoria no período selecionado serão apagados.\n\n"
|
| "Confirme abaixo para prosseguir."
|
| )
|
| confirmacao = st.selectbox("Confirmar exclusão?", ["Não", "SIM"], index=0)
|
|
|
|
|
| if st.button("❌ Excluir registros de auditoria"):
|
| if confirmacao != "SIM":
|
| st.error("Operação cancelada. Se desejar prosseguir, selecione **SIM** na confirmação.")
|
| return
|
|
|
| with SessionLocal() as db:
|
| try:
|
| registros = (
|
| db.query(LogAcesso)
|
| .filter(LogAcesso.data_hora >= data_inicio, LogAcesso.data_hora <= data_fim)
|
| .all()
|
| )
|
|
|
| total = len(registros)
|
|
|
| if total == 0:
|
| st.warning("Nenhum registro encontrado para exclusão.")
|
| return
|
|
|
| for r in registros:
|
| db.delete(r)
|
|
|
| db.commit()
|
|
|
| registrar_log(
|
| usuario=st.session_state.get("usuario"),
|
| acao=f"Excluiu {total} registros de auditoria entre {data_inicio.date()} e {data_fim.date()}",
|
| tabela="log_acesso",
|
| registro_id=None
|
| )
|
|
|
| st.success(f"🎉 {total} registro(s) de auditoria foram excluídos com sucesso!")
|
|
|
| except Exception as e:
|
| db.rollback()
|
| st.error(f"❌ Erro ao excluir registros: {e}")
|
|
|
|
|
|
|
|
|