Web-M1-Ausbau: JSON-Gaesteliste, GA-Verlauf, Python-Serversteuerung, tische.ini-Upload
- bestellung.xml -> bestellung.json: neuer JSONConfig (loest XMLConfig ab), alle work-Beispiele konvertiert, Doku (CLAUDE/README/dateiformate) umgestellt - ga.py: Beobachtungsobjekt Entwicklung zeichnet den Loesungsverlauf auf, neuer Schalter --show-development erzeugt Entwicklung.svg (beste/mittlere/ schlechteste Wertigkeit ueber die Zyklus-Aktionen) - web/main.py: neuer Endpunkt /tische-datei (tische.ini-Upload, ast.literal_eval), Frontend kann jetzt eine tische.ini laden - libs/webserver.py: plattformunabhaengige start/stop/status-Steuerung der Web-Testinstanz (ersetzt run_web_helper.ps1), raeumt auch verwaiste --reload-Prozessbaeume zuverlaessig auf - Sicherheit/Modernisierung: eval() -> ast.literal_eval in Tische/Strafliste, sicherer Mini-Auswerter fuer die String-Ausdruecke in zyklus.cfg, defaultdict(set) in Plaetze - SVG: Tischnummer fett zentriert im Tischkreis statt "Tisch x" darueber - Tests: JSONConfig, Entwicklung und der Zyklus-Auswerter abgedeckt (9 Tests) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+12
-81
@@ -3,93 +3,24 @@
|
||||
# Verwaltet die lokale Web-Testinstanz (FastAPI/uvicorn, M1)
|
||||
#
|
||||
# run_web.sh start - startet den Server im Hintergrund
|
||||
# run_web.sh stop - beendet den Server (inkl. Reload-Kindprozesse)
|
||||
# run_web.sh stop - beendet den Server
|
||||
# run_web.sh status - zeigt ob und unter welcher PID er laeuft
|
||||
# run_web.sh - startet im Vordergrund (Strg+C zum Beenden)
|
||||
# run_web.sh - startet im Vordergrund mit Auto-Reload
|
||||
# (Strg+C zum Beenden)
|
||||
#
|
||||
# http://localhost:8000 Testoberflaeche
|
||||
# http://localhost:8000/docs interaktive API-Doku (Swagger)
|
||||
#
|
||||
# Die eigentliche Prozessverwaltung liegt plattformunabhaengig in
|
||||
# libs/webserver.py (laeuft unveraendert auch unter Windows).
|
||||
# ================================================================
|
||||
|
||||
source "$(dirname "${BASH_SOURCE[0]}")/setenv.sh" > /dev/null
|
||||
|
||||
WEB_PORT=8000
|
||||
PIDDATEI="$PLATZ/log/run_web.pid"
|
||||
LOGDATEI="$PLATZ/log/run_web.log"
|
||||
if [ ! -f "$PLATZ/.venv/bin/activate" ]; then
|
||||
echo "FEHLER: kein .venv gefunden - bitte zuerst bin/install_py.sh ausfuehren"
|
||||
exit 1
|
||||
fi
|
||||
source "$PLATZ/.venv/bin/activate"
|
||||
|
||||
venv_pruefen() {
|
||||
if [ -f "$PLATZ/.venv/bin/activate" ]; then
|
||||
source "$PLATZ/.venv/bin/activate"
|
||||
else
|
||||
echo "FEHLER: kein .venv gefunden - bitte zuerst bin/install_py.sh ausfuehren"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
lauft_pid() {
|
||||
# gibt die PID des Servers aus, wenn er laeuft (Rueckgabe 0), sonst 1
|
||||
if [ -f "$PIDDATEI" ]; then
|
||||
local pid
|
||||
pid=$(cat "$PIDDATEI")
|
||||
if kill -0 "$pid" 2> /dev/null; then
|
||||
echo "$pid"
|
||||
return 0
|
||||
fi
|
||||
rm -f "$PIDDATEI"
|
||||
fi
|
||||
# Fallback: nach dem Prozess suchen (z.B. PID-Datei verloren)
|
||||
pgrep -f "uvicorn main:app.*--port $WEB_PORT" | head -1 && return 0
|
||||
return 1
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
start)
|
||||
venv_pruefen || exit 1
|
||||
if pid=$(lauft_pid); then
|
||||
echo "Server laeuft bereits (PID $pid) - erst 'run_web.sh stop'."
|
||||
exit 1
|
||||
fi
|
||||
mkdir -p "$PLATZ/log"
|
||||
echo "Starte Web-Testinstanz im Hintergrund ..."
|
||||
nohup python -m uvicorn main:app --reload \
|
||||
--app-dir "$PLATZ/web" --port "$WEB_PORT" \
|
||||
> "$LOGDATEI" 2>&1 &
|
||||
echo $! > "$PIDDATEI"
|
||||
sleep 3
|
||||
if pid=$(lauft_pid); then
|
||||
echo "Server laeuft: http://localhost:$WEB_PORT (PID $pid, Log: log/run_web.log)"
|
||||
else
|
||||
echo "FEHLER: Server ist nicht gestartet - siehe $LOGDATEI"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
stop)
|
||||
gestoppt=0
|
||||
if pid=$(lauft_pid); then
|
||||
# ganze Prozessgruppe beenden (uvicorn-Reloader + Kindprozesse)
|
||||
pkill -TERM -P "$pid" 2> /dev/null && gestoppt=1
|
||||
kill "$pid" 2> /dev/null && gestoppt=1
|
||||
fi
|
||||
# Nachzuegler, deren Elternprozess schon weg ist
|
||||
pkill -f "uvicorn main:app.*--port $WEB_PORT" 2> /dev/null && gestoppt=1
|
||||
rm -f "$PIDDATEI"
|
||||
if [ "$gestoppt" = "1" ]; then echo "Beendet."; else echo "Es lief nichts."; fi
|
||||
;;
|
||||
status)
|
||||
if pid=$(lauft_pid); then
|
||||
echo "LAEUFT: http://localhost:$WEB_PORT (PID $pid)"
|
||||
else
|
||||
echo "GESTOPPT: kein Server auf Port $WEB_PORT"
|
||||
fi
|
||||
;;
|
||||
"")
|
||||
venv_pruefen || exit 1
|
||||
echo "Starte Web-Testinstanz im Vordergrund (Strg+C zum Beenden) ..."
|
||||
exec python -m uvicorn main:app --reload \
|
||||
--app-dir "$PLATZ/web" --port "$WEB_PORT"
|
||||
;;
|
||||
*)
|
||||
echo "Unbekannter Parameter '$1' - erlaubt: start | stop | status"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
exec python "$PLATZ_LIBS/webserver.py" "$@"
|
||||
|
||||
Reference in New Issue
Block a user