File size: 2,453 Bytes
14035fd 6eaa3dc 8846627 0f4361c 8846627 221e826 9edd269 8846627 6eaa3dc 221e826 6eaa3dc 8846627 221e826 6eaa3dc 221e826 684911e 221e826 684911e 221e826 8846627 221e826 8846627 221e826 b493237 |
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 |
import sys
import streamlit as st
import pandas as pd
from utils.load_data import load_logs
from utils.visualize import plot_usage
from utils.report import generate_pdf
from models.anomaly import detect_anomalies
from utils.amc import upcoming_amc_devices
import logging
# Configure logging
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
logger = logging.getLogger(__name__)
# Streamlit app setup
try:
st.set_page_config(page_title="LabOps Dashboard", layout="wide")
logger.info("Streamlit page configuration set successfully.")
except Exception as e:
logger.error(f"Failed to configure Streamlit: {e}")
raise
st.title("π Multi-Device LabOps Dashboard")
# File uploader
try:
uploaded_files = st.file_uploader("Upload Device Logs (CSV)", accept_multiple_files=True, type=["csv"])
logger.info(f"Received {len(uploaded_files)} uploaded files.")
except Exception as e:
logger.error(f"File uploader error: {e}")
st.error(f"Failed to initialize file uploader: {e}")
if uploaded_files:
try:
df = load_logs(uploaded_files)
logger.info(f"Loaded {len(df)} log records from uploaded files.")
st.subheader("π Uploaded Logs")
st.dataframe(df.head())
st.subheader("π Daily Usage Chart")
fig = plot_usage(df)
st.pyplot(fig)
st.subheader("π¨ Detected Anomalies")
anomalies = detect_anomalies(df)
st.dataframe(anomalies)
st.subheader("π Upcoming AMC Devices")
if "amc_expiry" in df.columns:
amc_df = upcoming_amc_devices(df)
st.dataframe(amc_df)
else:
st.info("Column `amc_expiry` not found in uploaded data.")
logger.warning("Missing `amc_expiry` column in data.")
if st.button("π Generate PDF Report"):
pdf_path = generate_pdf(df)
with open(pdf_path, "rb") as f:
st.download_button("Download PDF", f, file_name="labops_report.pdf", mime="application/pdf")
logger.info("PDF report generated and offered for download.")
except Exception as e:
logger.error(f"Error processing uploaded files: {e}")
st.error(f"Failed to process data: {e}")
if __name__ == "__main__":
try:
logger.info("Application starting...")
except Exception as e:
logger.error(f"Application failed to start: {e}")
raise
|