Einige PyCharm Warnings und Fehlermeldungen wurden entfernt. Allerings scheint die Dockerintegration in PyCharm nicht komplett ohne Fehler zu sein. Man sollte sich nicht zu sehr auf die Fehlermeldungen verlassen, hier speziell, wenn Module vermisst werden. Diese sind in der Regel im Container installiert. PyCharm merkt dies aber nicht!
This commit is contained in:
+59
-51
@@ -7,7 +7,7 @@ import os
|
||||
|
||||
# --- Konstanten ---
|
||||
TB2B = 1024**4 # TB in Bytes
|
||||
FILE_PATH = os.getenv("JSON_CACHE_WITH_PATH", "/data/json_cache.json")
|
||||
FILE_PATH = os.getenv("JSON_CACHE_WITH_PATH", "/data/results/json_cache.json")
|
||||
PRICE_PER_TB = 8.1 # CHF / TB
|
||||
|
||||
|
||||
@@ -24,7 +24,8 @@ def load_data():
|
||||
"""
|
||||
try:
|
||||
return pd.read_json(FILE_PATH)
|
||||
except Exception:
|
||||
except (FileNotFoundError, ValueError):
|
||||
# Fange nur erwartete Fehler ab: Datei nicht gefunden oder ungültiges JSON
|
||||
return pd.DataFrame([
|
||||
{"ownerGroup": "a-123", "department": "4000", "size": 500000, "packedSize": 400000},
|
||||
{"ownerGroup": "p9999", "department": "6000", "size": 1200000, "packedSize": 1000000}
|
||||
@@ -35,10 +36,12 @@ df = load_data()
|
||||
|
||||
|
||||
# --- Session State Initialisierung ---
|
||||
if "department" in df.columns:
|
||||
depts = sorted(df["department"].unique().tolist())
|
||||
if 'gewaehltes_dept' not in st.session_state:
|
||||
st.session_state.gewaehltes_dept = depts[0] if depts else None
|
||||
if 'gewaehltes_dept' not in st.session_state:
|
||||
if "department" in df.columns:
|
||||
depts_for_init = sorted(df["department"].unique().tolist())
|
||||
st.session_state.gewaehltes_dept = depts_for_init[0] if depts_for_init else None
|
||||
else:
|
||||
st.session_state.gewaehltes_dept = None
|
||||
|
||||
|
||||
# --- Navigation (Sidebar) ---
|
||||
@@ -117,7 +120,7 @@ if auswahl == "Übersicht & Metriken":
|
||||
)
|
||||
|
||||
|
||||
if "department" in df:
|
||||
if "department" in df.columns:
|
||||
fig = px.pie(
|
||||
df,
|
||||
names="department",
|
||||
@@ -130,55 +133,60 @@ if auswahl == "Übersicht & Metriken":
|
||||
elif auswahl == "Bereichs-Analyse":
|
||||
st.title("Bereichs-Analyse")
|
||||
|
||||
if "department" in df and depts:
|
||||
try:
|
||||
default_index = depts.index(st.session_state.gewaehltes_dept)
|
||||
except ValueError:
|
||||
if "department" in df.columns:
|
||||
depts = sorted(df["department"].unique().tolist())
|
||||
if depts:
|
||||
default_index = 0
|
||||
if st.session_state.gewaehltes_dept:
|
||||
try:
|
||||
default_index = depts.index(st.session_state.gewaehltes_dept)
|
||||
except ValueError:
|
||||
default_index = 0
|
||||
|
||||
neue_auswahl = st.selectbox(
|
||||
"Bereich auswählen:",
|
||||
depts,
|
||||
index=default_index
|
||||
)
|
||||
st.session_state.gewaehltes_dept = neue_auswahl
|
||||
|
||||
filtered_df = df[df["department"] == st.session_state.gewaehltes_dept].copy()
|
||||
|
||||
if "copies" in filtered_df.columns:
|
||||
conditions = [
|
||||
filtered_df['copies'].str.startswith('one', na=False),
|
||||
filtered_df['copies'].str.startswith('two', na=False)
|
||||
]
|
||||
choices = [1, 2]
|
||||
filtered_df['copies'] = np.select(
|
||||
conditions, choices, default=filtered_df['copies']
|
||||
neue_auswahl = st.selectbox(
|
||||
"Bereich auswählen:",
|
||||
depts,
|
||||
index=default_index
|
||||
)
|
||||
st.session_state.gewaehltes_dept = neue_auswahl
|
||||
|
||||
if "packedSize" in filtered_df.columns:
|
||||
filtered_df = filtered_df.sort_values(
|
||||
by="packedSize", ascending=False
|
||||
filtered_df = df[df["department"] == st.session_state.gewaehltes_dept].copy()
|
||||
|
||||
if "copies" in filtered_df.columns:
|
||||
conditions = [
|
||||
filtered_df['copies'].str.startswith('one', na=False),
|
||||
filtered_df['copies'].str.startswith('two', na=False)
|
||||
]
|
||||
choices = [1, 2]
|
||||
filtered_df['copies'] = np.select(
|
||||
conditions, choices, default=filtered_df['copies']
|
||||
)
|
||||
|
||||
if "packedSize" in filtered_df.columns:
|
||||
filtered_df = filtered_df.sort_values(
|
||||
by="packedSize", ascending=False
|
||||
)
|
||||
|
||||
rename_mapping = {
|
||||
"ownerGroup": "Gruppe",
|
||||
"copies": "Anzahl Kopien",
|
||||
"size": "unpacketierte Grösse",
|
||||
"packedSize": "packetierte Grösse",
|
||||
"beamline": "Beamline",
|
||||
"department": "Bereich"
|
||||
}
|
||||
filtered_df.rename(columns=rename_mapping, inplace=True)
|
||||
|
||||
if "packetierte Grösse" in filtered_df.columns:
|
||||
filtered_df["Kosten [CHF]"] = \
|
||||
(filtered_df["packetierte Grösse"] / TB2B) * PRICE_PER_TB
|
||||
|
||||
department_name = str(st.session_state.gewaehltes_dept)
|
||||
st.metric(
|
||||
f"Anzahl Gruppen in Department {department_name}",
|
||||
len(filtered_df)
|
||||
)
|
||||
|
||||
rename_mapping = {
|
||||
"ownerGroup": "Gruppe",
|
||||
"copies": "Anzahl Kopien",
|
||||
"size": "unpacketierte Grösse",
|
||||
"packedSize": "packetierte Grösse",
|
||||
"beamline": "Beamline",
|
||||
"department": "Bereich"
|
||||
}
|
||||
filtered_df.rename(columns=rename_mapping, inplace=True)
|
||||
|
||||
if "packetierte Grösse" in filtered_df.columns:
|
||||
filtered_df["Kosten [CHF]"] = \
|
||||
(filtered_df["packetierte Grösse"] / TB2B) * PRICE_PER_TB
|
||||
|
||||
st.metric(
|
||||
f"Anzahl Gruppen in Department {st.session_state.gewaehltes_dept}",
|
||||
len(filtered_df)
|
||||
)
|
||||
st.dataframe(filtered_df, use_container_width=True, hide_index=True)
|
||||
st.dataframe(filtered_df, use_container_width=True, hide_index=True)
|
||||
|
||||
elif auswahl == "Nicht zuweisbare Daten":
|
||||
st.title("Nicht zuweisbare Daten")
|
||||
|
||||
+3
-1
@@ -1,6 +1,7 @@
|
||||
services:
|
||||
logic-red:
|
||||
build: ./logic
|
||||
container_name: archive_cost_logic
|
||||
volumes:
|
||||
- ./logic/node-red-data:/data
|
||||
- ./shared_data:/data/results
|
||||
@@ -33,10 +34,11 @@ services:
|
||||
# --- NEUER STREAMLIT CONTAINER ---
|
||||
analytics-app:
|
||||
build: ./analytics
|
||||
container_name: archive_cost_analytics
|
||||
ports:
|
||||
- "8501:8501" # Standard-Port für Streamlit im Browser
|
||||
volumes:
|
||||
- ./analytics:/app
|
||||
- ./shared_data:/data:ro
|
||||
- ./shared_data:/data/results:ro
|
||||
environment:
|
||||
- TZ=Europe/Zurich
|
||||
@@ -1 +1 @@
|
||||
size_by_ownergroup_and_number_of_copies_2026-06-26T11_00_16.json
|
||||
size_by_ownergroup_and_number_of_copies_2026-06-26T12_24_06.json
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user