File size: 2,955 Bytes
0f0ef8d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
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()
|