import streamlit as st from banco import SessionLocal from models import LogAcesso, Usuario import pandas as pd from io import BytesIO import os # Debug opcional – confirma o banco em uso print("📂 BANCO LIDO NA AUDITORIA:", os.path.abspath("load.db")) def main(): st.title("🧾 Auditoria do Sistema Load") db = SessionLocal() try: # ========================= # FILTRO POR PERFIL # ========================= perfis = ( db.query(Usuario.perfil) .distinct() .order_by(Usuario.perfil) .all() ) lista_perfis = ["Todos"] + [p[0] for p in perfis] perfil_selecionado = st.selectbox( "Filtrar por perfil:", lista_perfis ) # ========================= # CONSULTA COM JOIN # ========================= # ✅ Incluímos o e-mail do usuário na seleção query = ( db.query( LogAcesso.usuario, Usuario.perfil, Usuario.email, # <-- novo LogAcesso.acao, LogAcesso.tabela, LogAcesso.registro_id, LogAcesso.data_hora ) .join(Usuario, Usuario.usuario == LogAcesso.usuario) .order_by(LogAcesso.data_hora.desc()) ) if perfil_selecionado != "Todos": query = query.filter(Usuario.perfil == perfil_selecionado) logs = query.all() if not logs: st.info("Nenhum registro encontrado.") return # ========================= # DATAFRAME FORMATADO # ========================= dados = [] for l in logs: # l = (usuario, perfil, email, acao, tabela, registro_id, data_hora) dados.append({ "Usuário": l[0], "Perfil": l[1], "E-mail": l[2] or "—", # ✅ e-mail pode ser nulo "Ação": l[3], "Tabela": l[4], "Registro": l[5], "Data": l[6].strftime("%d/%m/%Y"), "Hora": l[6].strftime("%H:%M:%S"), }) df = pd.DataFrame(dados) st.dataframe(df, use_container_width=True) # ========================= # EXPORTAÇÃO PARA EXCEL # ========================= buffer = BytesIO() with pd.ExcelWriter(buffer, engine="openpyxl") as writer: df.to_excel(writer, index=False, sheet_name="Auditoria") st.download_button( label="📥 Exportar Auditoria para Excel", data=buffer.getvalue(), file_name="auditoria_sistema.xlsx", mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ) finally: db.close()