|
|
|
|
|
import streamlit as st
|
|
|
from banco import SessionLocal
|
|
|
from models import LogAcesso, Usuario
|
|
|
import pandas as pd
|
|
|
from io import BytesIO
|
|
|
import os
|
|
|
|
|
|
|
|
|
print("📂 BANCO LIDO NA AUDITORIA:", os.path.abspath("load.db"))
|
|
|
|
|
|
|
|
|
def main():
|
|
|
st.title("🧾 Auditoria do Sistema Load")
|
|
|
|
|
|
db = SessionLocal()
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
query = (
|
|
|
db.query(
|
|
|
LogAcesso.usuario,
|
|
|
Usuario.perfil,
|
|
|
Usuario.email,
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dados = []
|
|
|
for l in logs:
|
|
|
|
|
|
dados.append({
|
|
|
"Usuário": l[0],
|
|
|
"Perfil": l[1],
|
|
|
"E-mail": l[2] or "—",
|
|
|
"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)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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()
|
|
|
|
|
|
|