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