|
|
|
|
|
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}")
|
|
|
|
|
|
|
|
|
|
|
|
|