import streamlit as st import pandas as pd import plotly.express as px # Umrechnungsfaktor von Terabytes nach Bytes TB2B = 1024**4 # Seitenkonfiguration (gibt uns ein schönes breites Layout) st.set_page_config(layout="wide") # 1. Daten laden (Pfad aus deinem Docker-Setup) FILE_PATH = "/data/json_cache.json" @st.cache_data def load_data(): # Falls die Datei existiert, laden, sonst leeres Dataframe für den Test try: return pd.read_json(FILE_PATH) except Exception: # Dummy-Daten, falls Node-RED noch nichts abgelegt hat return pd.DataFrame([ {"ownerGroup": "a-123", "department": "4000", "size": 500000}, {"ownerGroup": "p9999", "department": "6000", "size": 1200000} ]) df = load_data() # 2. NAVIGATION LINKS (Sidebar) st.sidebar.title("Navigation") st.sidebar.markdown("Wählen Sie eine Ansicht:") # Ein Radio-Button verhält sich wie eine klickbare Liste auswahl = st.sidebar.radio( label="Ansichten", options=["Übersicht & Metriken", "Bereichs-Analyse", "Nicht zuweisbare Daten", "Rohdaten"], label_visibility="collapsed" # Versteckt das Label für eine sauberere Optik ) # 3. ANZEIGE RECHTS (Hauptbildschirm) # Hier steuern wir den Inhalt basierend auf der Auswahl links if auswahl == "Übersicht & Metriken": st.title("Übersicht") # Beispiel für schnelle Metriken rechts col1, col2 = st.columns(2) col1.metric("Anzahl Archivgruppen", len(df)) col2.metric("Gesamtvolumen (TB)", f'{df["size"].sum()/TB2B:.2f}' if "size" in df else "0.00") # Hier könnte eine Grafik hin if "department" in df: fig = px.pie(df, names="department", title="Verteilung nach Departments") st.plotly_chart(fig, use_container_width=True) elif auswahl == "Bereichs-Analyse": st.title("Bereichs-Analyse") st.write("Filtern Sie die Daten gezielt nach einzelnen Abteilungen.") # Ein zusätzlicher Filter, der nur in dieser Ansicht erscheint if "department" in df: depts = sorted(df["department"].unique().tolist()) gewaehltes_dept = st.selectbox("Wählen Sie ein Department:", depts) filtered_df = df[df["department"] == gewaehltes_dept] st.metric(f"Gruppen in Department {gewaehltes_dept}", len(filtered_df)) st.dataframe(filtered_df, use_container_width=True) elif auswahl == "Nicht zuweisbare Daten": st.title("Nicht zuweisbare Daten") # Die Tabelle, die du schon gebaut hast st.dataframe(df, use_container_width=True) elif auswahl == "Rohdaten": st.title("Rohdaten") st.write("Durchsuchen und filtern Sie die vollständige Liste der Gruppen.") # Die Tabelle, die du schon gebaut hast st.dataframe(df, use_container_width=True)