📚 Improved backend structure & logs organization 🎉
This commit is contained in:
Binary file not shown.
BIN
backend/blueprints/__pycache__/admin_unified.cpython-313.pyc
Normal file
BIN
backend/blueprints/__pycache__/admin_unified.cpython-313.pyc
Normal file
Binary file not shown.
BIN
backend/blueprints/__pycache__/api_simple.cpython-313.pyc
Normal file
BIN
backend/blueprints/__pycache__/api_simple.cpython-313.pyc
Normal file
Binary file not shown.
BIN
backend/blueprints/__pycache__/tapo_control.cpython-313.pyc
Normal file
BIN
backend/blueprints/__pycache__/tapo_control.cpython-313.pyc
Normal file
Binary file not shown.
BIN
backend/blueprints/__pycache__/user_management.cpython-313.pyc
Normal file
BIN
backend/blueprints/__pycache__/user_management.cpython-313.pyc
Normal file
Binary file not shown.
Binary file not shown.
@ -3777,3 +3777,28 @@ jinja2.exceptions.UndefinedError: 'stats' is undefined
|
||||
2025-06-09 19:32:13 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/stats
|
||||
2025-06-09 19:32:13 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/admin/system-health
|
||||
2025-06-09 19:32:18 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/stats
|
||||
2025-06-10 10:01:57 - [app] app - [WARNING] WARNING - DatabaseCleanupManager nicht verfügbar - Fallback auf Legacy-Cleanup
|
||||
2025-06-10 10:01:57 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\instance\printer_manager.db
|
||||
2025-06-10 10:01:58 - [app] app - [INFO] INFO - SQLite für Raspberry Pi optimiert (reduzierte Cache-Größe, SD-Karten I/O)
|
||||
2025-06-10 10:01:58 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert
|
||||
2025-06-10 10:01:58 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt.
|
||||
2025-06-10 10:01:58 - [app] app - [INFO] INFO - [START] Server startet auf 0.0.0.0:5000
|
||||
2025-06-10 10:02:14 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/static/icons/icon-192.png
|
||||
2025-06-10 10:02:26 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/static/icons/icon-192.png
|
||||
2025-06-10 10:02:30 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 1, Status: disconnected, Quelle: system
|
||||
2025-06-10 10:02:32 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 2, Status: disconnected, Quelle: system
|
||||
2025-06-10 10:02:34 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 3, Status: disconnected, Quelle: system
|
||||
2025-06-10 10:02:35 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/api/printers
|
||||
2025-06-10 10:02:35 - [app] app - [ERROR] ERROR - Fehler beim Laden des Benutzers 1: (sqlite3.InterfaceError) bad parameter or other API misuse
|
||||
[SQL: SELECT users.id AS users_id, users.email AS users_email, users.username AS users_username, users.password_hash AS users_password_hash, users.name AS users_name, users.role AS users_role, users.active AS users_active, users.created_at AS users_created_at, users.last_login AS users_last_login, users.updated_at AS users_updated_at, users.settings AS users_settings, users.last_activity AS users_last_activity, users.department AS users_department, users.position AS users_position, users.phone AS users_phone, users.bio AS users_bio, users.theme_preference AS users_theme_preference, users.language_preference AS users_language_preference, users.email_notifications AS users_email_notifications, users.browser_notifications AS users_browser_notifications, users.dashboard_layout AS users_dashboard_layout, users.compact_mode AS users_compact_mode, users.show_completed_jobs AS users_show_completed_jobs, users.auto_refresh_interval AS users_auto_refresh_interval, users.auto_logout_timeout AS users_auto_logout_timeout
|
||||
FROM users
|
||||
WHERE users.id = ?
|
||||
LIMIT ? OFFSET ?]
|
||||
[parameters: (1, 1, 0)]
|
||||
(Background on this error at: https://sqlalche.me/e/20/rvf5)
|
||||
2025-06-10 10:02:35 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/static/icons/icon-192.png
|
||||
2025-06-10 10:02:36 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 4, Status: disconnected, Quelle: system
|
||||
2025-06-10 10:02:38 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 5, Status: disconnected, Quelle: system
|
||||
2025-06-10 10:02:40 - [app] app - [ERROR] ERROR - Fehler beim Laden des Benutzers 1: tuple index out of range
|
||||
2025-06-10 10:02:40 - [app] app - [INFO] INFO - Not Found (404): http://127.0.0.1:5000/static/icons/icon-192.png
|
||||
2025-06-10 10:02:40 - [app] app - [INFO] INFO - Steckdosen-Status geloggt: Drucker 6, Status: disconnected, Quelle: system
|
||||
|
@ -23,3 +23,7 @@
|
||||
2025-06-09 19:31:05 - [auth] auth - [WARNING] WARNING - JSON-Parsing fehlgeschlagen: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
|
||||
2025-06-09 19:31:05 - [auth] auth - [INFO] INFO - Benutzer admin@mercedes-benz.com hat sich erfolgreich angemeldet
|
||||
2025-06-09 19:32:21 - [auth] auth - [INFO] INFO - Benutzer admin@mercedes-benz.com hat sich abgemeldet
|
||||
2025-06-10 10:02:16 - [auth] auth - [WARNING] WARNING - JSON-Parsing fehlgeschlagen: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
|
||||
2025-06-10 10:02:16 - [auth] auth - [WARNING] WARNING - Fehlgeschlagener Login-Versuch für Benutzer admin@example.com
|
||||
2025-06-10 10:02:24 - [auth] auth - [WARNING] WARNING - JSON-Parsing fehlgeschlagen: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
|
||||
2025-06-10 10:02:24 - [auth] auth - [INFO] INFO - Benutzer admin@mercedes-benz.com hat sich erfolgreich angemeldet
|
||||
|
@ -51,3 +51,4 @@
|
||||
2025-06-09 19:21:30 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-09 19:26:04 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-09 19:30:59 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-10 10:01:58 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
|
@ -530,3 +530,14 @@
|
||||
2025-06-09 19:31:08 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.106): UNREACHABLE (Ping fehlgeschlagen)
|
||||
2025-06-09 19:31:08 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.102): UNREACHABLE (Ping fehlgeschlagen)
|
||||
2025-06-09 19:31:08 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Status-Update abgeschlossen für 6 Drucker
|
||||
2025-06-10 10:01:58 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert
|
||||
2025-06-10 10:01:58 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet
|
||||
2025-06-10 10:02:26 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
|
||||
2025-06-10 10:02:26 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Prüfe Status von 6 aktiven Druckern...
|
||||
2025-06-10 10:02:35 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.101): UNREACHABLE (Ping fehlgeschlagen)
|
||||
2025-06-10 10:02:35 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.100): UNREACHABLE (Ping fehlgeschlagen)
|
||||
2025-06-10 10:02:35 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.104): UNREACHABLE (Ping fehlgeschlagen)
|
||||
2025-06-10 10:02:35 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.106): UNREACHABLE (Ping fehlgeschlagen)
|
||||
2025-06-10 10:02:35 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.102): UNREACHABLE (Ping fehlgeschlagen)
|
||||
2025-06-10 10:02:35 - [printer_monitor] printer_monitor - [WARNING] WARNING - 🔌 Tapo P110 (192.168.0.103): UNREACHABLE (Ping fehlgeschlagen)
|
||||
2025-06-10 10:02:35 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Status-Update abgeschlossen für 6 Drucker
|
||||
|
@ -309,3 +309,6 @@
|
||||
2025-06-09 19:32:13 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
|
||||
2025-06-09 19:32:13 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 6 Drucker
|
||||
2025-06-09 19:32:13 - [printers] printers - [INFO] INFO - [OK] API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 0.53ms
|
||||
2025-06-10 10:02:26 - [printers] printers - [INFO] INFO - 🔄 Live-Status-Abfrage von Benutzer Administrator (ID: 1)
|
||||
2025-06-10 10:02:35 - [printers] printers - [INFO] INFO - ✅ Live-Status-Abfrage erfolgreich: 6 Drucker
|
||||
2025-06-10 10:02:35 - [printers] printers - [INFO] INFO - [OK] API-Live-Drucker-Status-Abfrage 'get_live_printer_status' erfolgreich in 9039.95ms
|
||||
|
@ -251,3 +251,14 @@
|
||||
2025-06-09 19:32:29 - [queue_manager] queue_manager - [INFO] INFO - 🛑 Shutdown-Signal empfangen - beende Monitor-Loop
|
||||
2025-06-09 19:32:29 - [queue_manager] queue_manager - [INFO] INFO - 🔚 Monitor-Loop beendet
|
||||
2025-06-09 19:32:29 - [queue_manager] queue_manager - [INFO] INFO - ✅ Queue-Manager erfolgreich gestoppt
|
||||
2025-06-10 10:01:58 - [queue_manager] queue_manager - [INFO] INFO - 🚀 Initialisiere neuen Queue-Manager...
|
||||
2025-06-10 10:01:58 - [queue_manager] queue_manager - [INFO] INFO - 🔄 Zentrale Shutdown-Verwaltung erkannt - deaktiviere lokale Signal-Handler
|
||||
2025-06-10 10:01:58 - [queue_manager] queue_manager - [INFO] INFO - 🚀 Starte Printer Queue Manager...
|
||||
2025-06-10 10:01:58 - [queue_manager] queue_manager - [INFO] INFO - 🔄 Queue-Überwachung gestartet (Intervall: 120 Sekunden)
|
||||
2025-06-10 10:01:58 - [queue_manager] queue_manager - [INFO] INFO - ✅ Printer Queue Manager gestartet
|
||||
2025-06-10 10:01:58 - [queue_manager] queue_manager - [INFO] INFO - ✅ Queue-Manager erfolgreich gestartet
|
||||
2025-06-10 10:02:43 - [queue_manager] queue_manager - [INFO] INFO - 🔄 Stoppe Queue-Manager...
|
||||
2025-06-10 10:02:43 - [queue_manager] queue_manager - [INFO] INFO - ⏳ Warte auf Monitor-Thread...
|
||||
2025-06-10 10:02:43 - [queue_manager] queue_manager - [INFO] INFO - 🛑 Shutdown-Signal empfangen - beende Monitor-Loop
|
||||
2025-06-10 10:02:43 - [queue_manager] queue_manager - [INFO] INFO - 🔚 Monitor-Loop beendet
|
||||
2025-06-10 10:02:43 - [queue_manager] queue_manager - [INFO] INFO - ✅ Queue-Manager erfolgreich gestoppt
|
||||
|
@ -112,3 +112,6 @@
|
||||
2025-06-09 19:30:59 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
|
||||
2025-06-09 19:30:59 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet
|
||||
2025-06-09 19:30:59 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet
|
||||
2025-06-10 10:01:58 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
|
||||
2025-06-10 10:01:58 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet
|
||||
2025-06-10 10:01:58 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet
|
||||
|
@ -51,3 +51,4 @@
|
||||
2025-06-09 19:21:30 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-09 19:26:04 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-09 19:30:59 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-10 10:01:58 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
|
@ -393,3 +393,12 @@
|
||||
2025-06-09 19:30:59 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: /cbin/C0S1-cernel/C02L2/Dateiverwaltung/nextcloud/core/files/3_Beruf_Ausbildung_und_Schule/IHK-Abschlussprüfung/Projektarbeit-MYP/backend
|
||||
2025-06-09 19:30:59 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-09T19:30:59.553304
|
||||
2025-06-09 19:30:59 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-10 10:01:58 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-10 10:01:58 - [startup] startup - [INFO] INFO - [START] MYP Platform Backend wird gestartet...
|
||||
2025-06-10 10:01:58 - [startup] startup - [INFO] INFO - 🐍 Python Version: 3.13.3 (tags/v3.13.3:6280bb5, Apr 8 2025, 14:47:33) [MSC v.1943 64 bit (AMD64)]
|
||||
2025-06-10 10:01:58 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32)
|
||||
2025-06-10 10:01:58 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend
|
||||
2025-06-10 10:01:58 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-10T10:01:58.167336
|
||||
2025-06-10 10:01:58 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
|
||||
2025-06-10 10:01:58 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
|
||||
2025-06-10 10:01:58 - [startup] startup - [INFO] INFO - ==================================================
|
||||
|
@ -15,3 +15,11 @@
|
||||
2025-06-09 19:31:23 - [tapo_control] tapo_control - [WARNING] WARNING - ⚠️ Tapo-Steckdose 192.168.0.104 nicht erreichbar
|
||||
2025-06-09 19:31:25 - [tapo_control] tapo_control - [WARNING] WARNING - ⚠️ Tapo-Steckdose 192.168.0.106 nicht erreichbar
|
||||
2025-06-09 19:31:25 - [tapo_control] tapo_control - [INFO] INFO - Dashboard geladen: 6 Steckdosen, 0 online
|
||||
2025-06-10 10:02:28 - [tapo_control] tapo_control - [INFO] INFO - Tapo Dashboard aufgerufen von Benutzer: Administrator
|
||||
2025-06-10 10:02:30 - [tapo_control] tapo_control - [WARNING] WARNING - ⚠️ Tapo-Steckdose 192.168.0.100 nicht erreichbar
|
||||
2025-06-10 10:02:32 - [tapo_control] tapo_control - [WARNING] WARNING - ⚠️ Tapo-Steckdose 192.168.0.101 nicht erreichbar
|
||||
2025-06-10 10:02:34 - [tapo_control] tapo_control - [WARNING] WARNING - ⚠️ Tapo-Steckdose 192.168.0.102 nicht erreichbar
|
||||
2025-06-10 10:02:36 - [tapo_control] tapo_control - [WARNING] WARNING - ⚠️ Tapo-Steckdose 192.168.0.103 nicht erreichbar
|
||||
2025-06-10 10:02:38 - [tapo_control] tapo_control - [WARNING] WARNING - ⚠️ Tapo-Steckdose 192.168.0.104 nicht erreichbar
|
||||
2025-06-10 10:02:40 - [tapo_control] tapo_control - [WARNING] WARNING - ⚠️ Tapo-Steckdose 192.168.0.106 nicht erreichbar
|
||||
2025-06-10 10:02:40 - [tapo_control] tapo_control - [INFO] INFO - Dashboard geladen: 6 Steckdosen, 0 online
|
||||
|
@ -273,3 +273,13 @@
|
||||
2025-06-09 19:31:01 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 6/6: 192.168.0.105
|
||||
2025-06-09 19:31:01 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ steckdosen-erkennung abgeschlossen: 0/6 steckdosen gefunden in 0.0s
|
||||
2025-06-09 19:31:17 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ tapo controller initialisiert
|
||||
2025-06-10 10:01:58 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ tapo controller initialisiert
|
||||
2025-06-10 10:02:00 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 starte automatische tapo-steckdosenerkennung...
|
||||
2025-06-10 10:02:00 - [tapo_controller] tapo_controller - [INFO] INFO - 🔄 teste 6 standard-ips aus der konfiguration
|
||||
2025-06-10 10:02:00 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 1/6: 192.168.0.103
|
||||
2025-06-10 10:02:06 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 2/6: 192.168.0.104
|
||||
2025-06-10 10:02:12 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 3/6: 192.168.0.100
|
||||
2025-06-10 10:02:18 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 4/6: 192.168.0.101
|
||||
2025-06-10 10:02:24 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 5/6: 192.168.0.102
|
||||
2025-06-10 10:02:30 - [tapo_controller] tapo_controller - [INFO] INFO - 🔍 teste ip 6/6: 192.168.0.105
|
||||
2025-06-10 10:02:36 - [tapo_controller] tapo_controller - [INFO] INFO - ✅ steckdosen-erkennung abgeschlossen: 0/6 steckdosen gefunden in 36.0s
|
||||
|
@ -92,3 +92,4 @@
|
||||
2025-06-09 19:32:03 - [user] user - [INFO] INFO - User admin retrieved settings via API
|
||||
2025-06-09 19:32:06 - [user] user - [INFO] INFO - User admin retrieved settings via API
|
||||
2025-06-09 19:32:13 - [user] user - [INFO] INFO - User admin retrieved settings via API
|
||||
2025-06-10 10:02:26 - [user] user - [INFO] INFO - User admin retrieved settings via API
|
||||
|
@ -54,3 +54,7 @@
|
||||
2025-06-05 11:12:31 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
|
||||
2025-06-05 11:12:31 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
|
||||
2025-06-05 11:12:31 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
|
||||
2025-06-10 10:01:57 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an...
|
||||
2025-06-10 10:01:57 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
|
||||
2025-06-10 10:01:57 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
|
||||
2025-06-10 10:01:57 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
|
||||
|
535
backend/setup.sh
535
backend/setup.sh
@ -5285,10 +5285,14 @@ show_main_menu() {
|
||||
echo -e "${GREEN}[4]${NC} ${YELLOW}Credentials anpassen${NC}"
|
||||
echo -e " → Passwörter und Zugangsdaten ändern"
|
||||
echo ""
|
||||
echo -e "${GREEN}[5]${NC} ${PURPLE}Desktop-Verknüpfung erstellen${NC}"
|
||||
echo -e " → Mercedes-Icon auf Desktop für Kiosk-Start"
|
||||
echo -e " → Manuelle Kiosk-Aktivierung per Klick"
|
||||
echo ""
|
||||
echo -e "${GREEN}[0]${NC} ${RED}Beenden${NC}"
|
||||
echo ""
|
||||
echo -e "${CYAN}=================================================================${NC}"
|
||||
echo -n "Ihre Auswahl [0-4]: "
|
||||
echo -n "Ihre Auswahl [0-5]: "
|
||||
}
|
||||
|
||||
handle_menu_selection() {
|
||||
@ -5312,6 +5316,10 @@ handle_menu_selection() {
|
||||
interactive_credentials_setup
|
||||
save_credentials_override
|
||||
;;
|
||||
5)
|
||||
log "🖥️ Benutzer wählte: Desktop-Verknüpfung erstellen"
|
||||
create_desktop_shortcut_interactive
|
||||
;;
|
||||
0)
|
||||
log "👋 Benutzer beendet das Setup"
|
||||
echo -e "\n${GREEN}Auf Wiedersehen! 👋${NC}"
|
||||
@ -5319,7 +5327,7 @@ handle_menu_selection() {
|
||||
;;
|
||||
*)
|
||||
warning "❌ Ungültige Auswahl: $choice"
|
||||
echo -e "\n${RED}Bitte wählen Sie eine Zahl zwischen 0 und 4.${NC}"
|
||||
echo -e "\n${RED}Bitte wählen Sie eine Zahl zwischen 0 und 5.${NC}"
|
||||
sleep 2
|
||||
;;
|
||||
esac
|
||||
@ -5457,6 +5465,383 @@ show_system_status() {
|
||||
read
|
||||
}
|
||||
|
||||
create_desktop_shortcut_interactive() {
|
||||
clear
|
||||
echo -e "${CYAN}=================================================================${NC}"
|
||||
echo -e "${CYAN} DESKTOP-VERKNÜPFUNG ERSTELLEN${NC}"
|
||||
echo -e "${CYAN}=================================================================${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}🖥️ Was wird erstellt:${NC}"
|
||||
echo -e " • Desktop-Icon mit Mercedes-Logo"
|
||||
echo -e " • Kiosk-Start per Doppelklick"
|
||||
echo -e " • Automatische Browser-Erkennung"
|
||||
echo -e " • Intelligente URL-Ermittlung"
|
||||
echo ""
|
||||
echo -e "${PURPLE}📍 Verfügbare Desktop-Umgebungen:${NC}"
|
||||
|
||||
# Erkenne verfügbare Desktop-Umgebungen
|
||||
local desktops_found=()
|
||||
if [ -d "/home/$USER/Desktop" ]; then
|
||||
desktops_found+=("Aktueller Benutzer: /home/$USER/Desktop")
|
||||
fi
|
||||
if [ -d "/home/kiosk/Desktop" ]; then
|
||||
desktops_found+=("Kiosk-Benutzer: /home/kiosk/Desktop")
|
||||
fi
|
||||
if [ -d "/etc/skel/Desktop" ]; then
|
||||
desktops_found+=("System-Standard: /etc/skel/Desktop")
|
||||
fi
|
||||
|
||||
if [ ${#desktops_found[@]} -eq 0 ]; then
|
||||
echo -e " ${RED}❌ Keine Desktop-Verzeichnisse gefunden${NC}"
|
||||
echo -e " ${YELLOW}💡 Desktop-Environment möglicherweise nicht installiert${NC}"
|
||||
echo ""
|
||||
echo -n "Trotzdem fortfahren und Desktop-Verzeichnisse erstellen? (j/N): "
|
||||
read -r create_desktop
|
||||
if [[ ! "$create_desktop" =~ ^[jJyY]$ ]]; then
|
||||
echo -e "${YELLOW}Abgebrochen.${NC}"
|
||||
sleep 1
|
||||
return
|
||||
fi
|
||||
else
|
||||
for desktop in "${desktops_found[@]}"; do
|
||||
echo -e " ✅ $desktop"
|
||||
done
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -n "Desktop-Verknüpfung erstellen? (j/N): "
|
||||
read -r confirm
|
||||
|
||||
if [[ "$confirm" =~ ^[jJyY]$ ]]; then
|
||||
log "✅ Benutzer bestätigte Desktop-Verknüpfung-Erstellung"
|
||||
create_desktop_shortcut
|
||||
echo ""
|
||||
echo -e "${GREEN}✅ Desktop-Verknüpfung erfolgreich erstellt!${NC}"
|
||||
echo -e "${BLUE}🖱️ Doppelklick auf das Mercedes-Icon zum Starten${NC}"
|
||||
echo ""
|
||||
echo -n "Drücken Sie Enter um zum Hauptmenü zurückzukehren..."
|
||||
read
|
||||
else
|
||||
log "❌ Benutzer brach Desktop-Verknüpfung-Erstellung ab"
|
||||
echo -e "${YELLOW}Erstellung abgebrochen.${NC}"
|
||||
sleep 1
|
||||
fi
|
||||
}
|
||||
|
||||
create_desktop_shortcut() {
|
||||
log "=== ERSTELLE DESKTOP-VERKNÜPFUNG ==="
|
||||
|
||||
# Erstelle Kiosk-Start-Skript
|
||||
create_kiosk_launcher_script
|
||||
|
||||
# Erstelle Desktop-Einträge für alle verfügbaren Benutzer
|
||||
create_desktop_entries
|
||||
|
||||
# Setze korrekte Berechtigungen
|
||||
fix_desktop_permissions
|
||||
|
||||
log "✅ Desktop-Verknüpfung erfolgreich erstellt"
|
||||
}
|
||||
|
||||
create_kiosk_launcher_script() {
|
||||
log "=== ERSTELLE KIOSK-LAUNCHER-SKRIPT ==="
|
||||
|
||||
mkdir -p "$APP_DIR/scripts"
|
||||
|
||||
cat > "$APP_DIR/scripts/launch_kiosk.sh" << 'EOF'
|
||||
#!/bin/bash
|
||||
# MYP Kiosk-Modus Launcher
|
||||
# Startet die MYP-Anwendung im Kiosk-Modus
|
||||
|
||||
# Logging-Setup
|
||||
LOG_FILE="/var/log/myp-desktop-launcher.log"
|
||||
exec 1> >(tee -a "$LOG_FILE")
|
||||
exec 2>&1
|
||||
|
||||
echo "=== MYP Kiosk Desktop-Start $(date) ==="
|
||||
|
||||
# Prüfe ob bereits ein Kiosk-Prozess läuft
|
||||
if pgrep -f "chromium.*kiosk.*localhost:5000" >/dev/null 2>&1; then
|
||||
echo "⚠️ Kiosk-Modus bereits aktiv - bringe Fenster in den Vordergrund"
|
||||
# Versuche existierendes Fenster zu aktivieren
|
||||
if command -v wmctrl >/dev/null 2>&1; then
|
||||
wmctrl -a "MYP Druckerverwaltung" 2>/dev/null || true
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Ermittle optimale URL
|
||||
if [ -x /opt/myp/scripts/get_kiosk_url.sh ]; then
|
||||
TARGET_URL=$(/opt/myp/scripts/get_kiosk_url.sh)
|
||||
else
|
||||
TARGET_URL="http://localhost:5000"
|
||||
fi
|
||||
|
||||
echo "🔗 Verwende URL: $TARGET_URL"
|
||||
|
||||
# Prüfe Backend-Verfügbarkeit
|
||||
echo "🔍 Prüfe Backend-Verfügbarkeit..."
|
||||
for i in {1..30}; do
|
||||
if curl -s --connect-timeout 3 --max-time 5 "$TARGET_URL" >/dev/null 2>&1; then
|
||||
echo "✅ Backend erreichbar"
|
||||
break
|
||||
fi
|
||||
echo "⏳ Warte auf Backend... ($i/30)"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# Browser-Auswahl
|
||||
BROWSER=""
|
||||
if command -v chromium >/dev/null 2>&1; then
|
||||
BROWSER="chromium"
|
||||
elif command -v chromium-browser >/dev/null 2>&1; then
|
||||
BROWSER="chromium-browser"
|
||||
elif command -v google-chrome >/dev/null 2>&1; then
|
||||
BROWSER="google-chrome"
|
||||
elif command -v firefox-esr >/dev/null 2>&1; then
|
||||
BROWSER="firefox-esr"
|
||||
elif command -v firefox >/dev/null 2>&1; then
|
||||
BROWSER="firefox"
|
||||
else
|
||||
echo "❌ Kein unterstützter Browser gefunden!"
|
||||
zenity --error --text="Kein unterstützter Browser gefunden!\n\nBitte installieren Sie Chromium oder Firefox." --title="MYP Kiosk-Fehler" 2>/dev/null || \
|
||||
notify-send "MYP Kiosk-Fehler" "Kein unterstützter Browser gefunden!" 2>/dev/null || \
|
||||
echo "FEHLER: Kein Browser verfügbar"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "🌐 Verwende Browser: $BROWSER"
|
||||
|
||||
# Bildschirmauflösung ermitteln
|
||||
if [ -n "$DISPLAY" ]; then
|
||||
RESOLUTION=$(xrandr 2>/dev/null | grep -E '\*|\+' | head -1 | awk '{print $1}' || echo "1920x1080")
|
||||
WIDTH=$(echo $RESOLUTION | cut -d'x' -f1)
|
||||
HEIGHT=$(echo $RESOLUTION | cut -d'x' -f2)
|
||||
echo "📺 Bildschirmauflösung: ${WIDTH}x${HEIGHT}"
|
||||
else
|
||||
WIDTH=1920
|
||||
HEIGHT=1080
|
||||
echo "📺 Verwende Standard-Auflösung: ${WIDTH}x${HEIGHT}"
|
||||
fi
|
||||
|
||||
# Browser-spezifische Argumente
|
||||
if [[ "$BROWSER" == "chromium"* ]] || [[ "$BROWSER" == "google-chrome"* ]]; then
|
||||
BROWSER_ARGS=(
|
||||
--kiosk
|
||||
--no-sandbox
|
||||
--disable-dev-shm-usage
|
||||
--disable-gpu-sandbox
|
||||
--disable-software-rasterizer
|
||||
--disable-background-timer-throttling
|
||||
--disable-backgrounding-occluded-windows
|
||||
--disable-renderer-backgrounding
|
||||
--disable-features=TranslateUI
|
||||
--force-device-scale-factor=1.0
|
||||
--window-size=$WIDTH,$HEIGHT
|
||||
--window-position=0,0
|
||||
--user-data-dir=/tmp/myp-kiosk-desktop
|
||||
--disable-infobars
|
||||
--disable-session-crashed-bubble
|
||||
--disable-restore-session-state
|
||||
--disable-extensions
|
||||
--disable-plugins
|
||||
--disable-popup-blocking
|
||||
--disable-sync
|
||||
--disable-translate
|
||||
--noerrdialogs
|
||||
--no-first-run
|
||||
--no-default-browser-check
|
||||
--autoplay-policy=no-user-gesture-required
|
||||
--disable-background-mode
|
||||
--disable-pinch
|
||||
--hide-scrollbars
|
||||
--ignore-certificate-errors
|
||||
--ignore-ssl-errors
|
||||
--disable-web-security
|
||||
--allow-running-insecure-content
|
||||
--app="$TARGET_URL"
|
||||
)
|
||||
else
|
||||
# Firefox-Argumente
|
||||
BROWSER_ARGS=(
|
||||
--kiosk
|
||||
--width=$WIDTH
|
||||
--height=$HEIGHT
|
||||
--no-remote
|
||||
--new-instance
|
||||
"$TARGET_URL"
|
||||
)
|
||||
fi
|
||||
|
||||
echo "🚀 Starte $BROWSER im Kiosk-Modus..."
|
||||
|
||||
# Browser starten
|
||||
"$BROWSER" "${BROWSER_ARGS[@]}" &
|
||||
BROWSER_PID=$!
|
||||
|
||||
echo "✅ Browser gestartet (PID: $BROWSER_PID)"
|
||||
echo "🎯 Kiosk-Modus aktiv für URL: $TARGET_URL"
|
||||
|
||||
# Optional: Warte auf Browser-Beendigung
|
||||
wait $BROWSER_PID
|
||||
echo "🔚 Kiosk-Modus beendet"
|
||||
EOF
|
||||
|
||||
chmod +x "$APP_DIR/scripts/launch_kiosk.sh"
|
||||
|
||||
log "✅ Kiosk-Launcher-Skript erstellt: $APP_DIR/scripts/launch_kiosk.sh"
|
||||
}
|
||||
|
||||
create_desktop_entries() {
|
||||
log "=== ERSTELLE DESKTOP-EINTRÄGE ==="
|
||||
|
||||
# Mercedes-Icon kopieren an zentrale Stelle
|
||||
local icon_dir="/usr/share/pixmaps"
|
||||
local icon_source="$CURRENT_DIR/static/mercedes.svg"
|
||||
# Fallback-Pfade für das Mercedes-Icon
|
||||
if [ ! -f "$icon_source" ]; then
|
||||
icon_source="$APP_DIR/static/mercedes.svg"
|
||||
fi
|
||||
if [ ! -f "$icon_source" ]; then
|
||||
icon_source="$(find "$CURRENT_DIR" -name "mercedes.svg" 2>/dev/null | head -1)"
|
||||
fi
|
||||
local icon_target="$icon_dir/myp-mercedes.svg"
|
||||
|
||||
if [ -f "$icon_source" ]; then
|
||||
cp "$icon_source" "$icon_target" 2>/dev/null || {
|
||||
# Fallback: Icon in App-Verzeichnis
|
||||
mkdir -p "$APP_DIR/static"
|
||||
cp "$icon_source" "$APP_DIR/static/mercedes.svg"
|
||||
icon_target="$APP_DIR/static/mercedes.svg"
|
||||
}
|
||||
log "✅ Mercedes-Icon kopiert: $icon_target"
|
||||
else
|
||||
warning "⚠️ Mercedes-Icon nicht gefunden: $icon_source"
|
||||
icon_target="applications-graphics" # Fallback-Icon
|
||||
fi
|
||||
|
||||
# Desktop-Entry-Inhalt
|
||||
local desktop_content="[Desktop Entry]
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Name=MYP Druckerverwaltung (Kiosk)
|
||||
Comment=Starte MYP Druckerverwaltung im Kiosk-Modus
|
||||
Exec=$APP_DIR/scripts/launch_kiosk.sh
|
||||
Icon=$icon_target
|
||||
Terminal=false
|
||||
Categories=Office;Graphics;3DGraphics;Engineering;
|
||||
StartupNotify=true
|
||||
StartupWMClass=chromium-browser
|
||||
Keywords=3D;Printing;Drucker;Kiosk;MYP;Mercedes;
|
||||
MimeType=model/stl;model/obj;text/x.gcode;
|
||||
Actions=OpenBrowser;OpenSettings;
|
||||
|
||||
[Desktop Action OpenBrowser]
|
||||
Name=Im Browser öffnen
|
||||
Exec=xdg-open http://localhost:5000
|
||||
|
||||
[Desktop Action OpenSettings]
|
||||
Name=Einstellungen
|
||||
Exec=$APP_DIR/scripts/launch_kiosk.sh --settings"
|
||||
|
||||
# Desktop-Einträge für verschiedene Benutzer erstellen
|
||||
local desktop_dirs=(
|
||||
"/home/$USER/Desktop"
|
||||
"/home/kiosk/Desktop"
|
||||
"/etc/skel/Desktop"
|
||||
"/usr/share/applications" # System-weit verfügbar
|
||||
)
|
||||
|
||||
for desktop_dir in "${desktop_dirs[@]}"; do
|
||||
if [ "$desktop_dir" = "/usr/share/applications" ] || [ -d "$(dirname "$desktop_dir")" ]; then
|
||||
mkdir -p "$desktop_dir" 2>/dev/null || continue
|
||||
|
||||
local desktop_file="$desktop_dir/myp-kiosk.desktop"
|
||||
echo "$desktop_content" > "$desktop_file" 2>/dev/null && {
|
||||
chmod +x "$desktop_file" 2>/dev/null || true
|
||||
log "✅ Desktop-Eintrag erstellt: $desktop_file"
|
||||
}
|
||||
fi
|
||||
done
|
||||
|
||||
# Spezielle Behandlung für aktuellen Benutzer-Desktop
|
||||
if [ -n "$SUDO_USER" ] && [ "$SUDO_USER" != "root" ]; then
|
||||
local user_desktop="/home/$SUDO_USER/Desktop"
|
||||
mkdir -p "$user_desktop" 2>/dev/null || true
|
||||
if [ -d "$user_desktop" ]; then
|
||||
local user_desktop_file="$user_desktop/myp-kiosk.desktop"
|
||||
echo "$desktop_content" > "$user_desktop_file" 2>/dev/null && {
|
||||
chmod +x "$user_desktop_file" 2>/dev/null || true
|
||||
chown "$SUDO_USER:$SUDO_USER" "$user_desktop_file" 2>/dev/null || true
|
||||
log "✅ Benutzer-Desktop-Eintrag erstellt: $user_desktop_file"
|
||||
}
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
fix_desktop_permissions() {
|
||||
log "=== KORRIGIERE DESKTOP-BERECHTIGUNGEN ==="
|
||||
|
||||
# Desktop-Dateien für verschiedene Benutzer korrigieren
|
||||
local users=("$USER" "kiosk")
|
||||
if [ -n "$SUDO_USER" ] && [ "$SUDO_USER" != "root" ]; then
|
||||
users+=("$SUDO_USER")
|
||||
fi
|
||||
|
||||
for user in "${users[@]}"; do
|
||||
if id "$user" >/dev/null 2>&1; then
|
||||
local user_desktop="/home/$user/Desktop"
|
||||
if [ -d "$user_desktop" ]; then
|
||||
chown -R "$user:$user" "$user_desktop" 2>/dev/null || true
|
||||
find "$user_desktop" -name "*.desktop" -exec chmod +x {} \; 2>/dev/null || true
|
||||
log "✅ Berechtigungen korrigiert für: $user"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# System-weite Desktop-Datei
|
||||
if [ -f "/usr/share/applications/myp-kiosk.desktop" ]; then
|
||||
chmod 644 "/usr/share/applications/myp-kiosk.desktop" 2>/dev/null || true
|
||||
log "✅ System-weite Desktop-Datei konfiguriert"
|
||||
fi
|
||||
|
||||
# Update Desktop-Datenbank
|
||||
if command -v update-desktop-database >/dev/null 2>&1; then
|
||||
update-desktop-database /usr/share/applications 2>/dev/null || true
|
||||
log "✅ Desktop-Datenbank aktualisiert"
|
||||
fi
|
||||
}
|
||||
|
||||
install_desktop_tools() {
|
||||
log "=== INSTALLIERE DESKTOP-TOOLS ==="
|
||||
|
||||
# Tools für bessere Desktop-Integration installieren
|
||||
local desktop_packages=(
|
||||
"wmctrl" # Fenster-Management
|
||||
"xdotool" # X11-Automatisierung
|
||||
"zenity" # GUI-Dialoge
|
||||
"notify-osd" # Desktop-Benachrichtigungen
|
||||
"libnotify-bin" # notify-send Kommando
|
||||
"unclutter" # Mauszeiger verstecken
|
||||
)
|
||||
|
||||
progress "Installiere Desktop-Integration-Tools..."
|
||||
|
||||
for package in "${desktop_packages[@]}"; do
|
||||
if ! dpkg -l | grep -q "^ii.*$package" 2>/dev/null; then
|
||||
if apt-get install -y "$package" 2>/dev/null; then
|
||||
log "✅ $package installiert"
|
||||
else
|
||||
warning "⚠️ $package konnte nicht installiert werden"
|
||||
fi
|
||||
else
|
||||
log "✅ $package bereits installiert"
|
||||
fi
|
||||
done
|
||||
|
||||
log "✅ Desktop-Tools-Installation abgeschlossen"
|
||||
}
|
||||
|
||||
# =========================== HAUPTPROGRAMM (INTERAKTIV) ===========================
|
||||
main() {
|
||||
# Stelle sicher, dass wir im richtigen Verzeichnis sind
|
||||
@ -5566,6 +5951,9 @@ install_dependencies_only_auto() {
|
||||
deploy_application
|
||||
install_npm_dependencies
|
||||
|
||||
# Desktop-Tools für bessere Benutzererfahrung installieren
|
||||
install_desktop_tools
|
||||
|
||||
# Credentials deployen
|
||||
deploy_credentials
|
||||
|
||||
@ -5577,6 +5965,20 @@ install_dependencies_only_auto() {
|
||||
install_systemd_services
|
||||
enable_and_start_services
|
||||
|
||||
# Intelligente Kiosk-URL-Ermittlung erstellen
|
||||
create_smart_kiosk_url_script
|
||||
|
||||
# Desktop-Verknüpfung für einfachen Zugang erstellen
|
||||
if [ -n "$DISPLAY" ] || [ -d "/home/*/Desktop" ] 2>/dev/null; then
|
||||
if create_desktop_shortcut 2>/dev/null; then
|
||||
info "✅ Desktop-Verknüpfung mit Mercedes-Icon erstellt"
|
||||
else
|
||||
warning "⚠️ Desktop-Verknüpfung konnte nicht erstellt werden"
|
||||
fi
|
||||
else
|
||||
info "ℹ️ Keine Desktop-Umgebung erkannt - Desktop-Verknüpfung übersprungen"
|
||||
fi
|
||||
|
||||
# Performance-Optimierungen auch für manuelles Testen
|
||||
optimize_webapp_performance
|
||||
optimize_static_assets
|
||||
@ -5642,6 +6044,9 @@ install_full_production_system_auto() {
|
||||
deploy_application
|
||||
install_npm_dependencies
|
||||
|
||||
# Desktop-Tools für bessere Benutzererfahrung installieren
|
||||
install_desktop_tools
|
||||
|
||||
# Credentials deployen
|
||||
deploy_credentials
|
||||
|
||||
@ -5673,6 +6078,16 @@ install_full_production_system_auto() {
|
||||
install_systemd_services
|
||||
enable_and_start_services
|
||||
|
||||
# Intelligente Kiosk-URL-Ermittlung erstellen
|
||||
create_smart_kiosk_url_script
|
||||
|
||||
# Desktop-Verknüpfung für einfachen Zugang erstellen
|
||||
if create_desktop_shortcut 2>/dev/null; then
|
||||
info "✅ Desktop-Verknüpfung mit Mercedes-Icon erstellt"
|
||||
else
|
||||
warning "⚠️ Desktop-Verknüpfung konnte nicht erstellt werden"
|
||||
fi
|
||||
|
||||
# Performance-Optimierungen für Raspberry Pi Webapp
|
||||
optimize_webapp_performance
|
||||
|
||||
@ -5758,6 +6173,7 @@ show_final_summary() {
|
||||
echo -e " ✅ Automatischer Kiosk-Start beim Boot"
|
||||
echo -e " ✅ Firewall und Sicherheitskonfiguration"
|
||||
echo -e " ✅ Performance-Optimierungen"
|
||||
echo -e " ✅ Desktop-Verknüpfung mit Mercedes-Icon"
|
||||
echo ""
|
||||
echo -e "${YELLOW}🚀 System-Status:${NC}"
|
||||
echo -e " 🌐 Webapp: $HTTP_URL"
|
||||
@ -5779,6 +6195,7 @@ show_final_summary() {
|
||||
echo -e " ✅ Anwendung deployed nach: $APP_DIR"
|
||||
echo -e " ✅ Systemd-Services installiert"
|
||||
echo -e " ✅ Performance-Optimierungen"
|
||||
echo -e " ✅ Desktop-Verknüpfung mit Mercedes-Icon"
|
||||
echo ""
|
||||
echo -e "${YELLOW}🚀 System-Status:${NC}"
|
||||
echo -e " 🌐 Webapp: $HTTP_URL"
|
||||
@ -5786,9 +6203,10 @@ show_final_summary() {
|
||||
echo ""
|
||||
echo -e "${PURPLE}💡 Nächste Schritte:${NC}"
|
||||
echo -e " 1. Webapp testen: $HTTP_URL"
|
||||
echo -e " 2. Manuelle Tests durchführen"
|
||||
echo -e " 3. Entwicklung starten: cd $APP_DIR"
|
||||
echo -e " 4. Für Kiosk-Modus: sudo $0 --production"
|
||||
echo -e " 2. Kiosk-Modus testen: Doppelklick auf Mercedes-Icon"
|
||||
echo -e " 3. Manuelle Tests durchführen"
|
||||
echo -e " 4. Entwicklung starten: cd $APP_DIR"
|
||||
echo -e " 5. Für Produktions-Kiosk: sudo $0 --production"
|
||||
;;
|
||||
esac
|
||||
|
||||
@ -5808,5 +6226,110 @@ show_final_summary() {
|
||||
echo -e "${CYAN}=================================================================${NC}"
|
||||
}
|
||||
|
||||
# =========================== INTELLIGENTE KIOSK-URL KONFIGURATION ===========================
|
||||
get_kiosk_url() {
|
||||
log "=== ERMITTLE OPTIMALE KIOSK-URL ==="
|
||||
|
||||
local kiosk_url="http://localhost:5000"
|
||||
local intranet_url="https://m040tbaraspi001.de040.corpintra.net"
|
||||
|
||||
# Prüfe ob localhost erreichbar ist
|
||||
if curl -s --connect-timeout 3 --max-time 5 "http://localhost:5000" >/dev/null 2>&1; then
|
||||
log "✅ Localhost erreichbar - verwende lokale URL"
|
||||
echo "$kiosk_url"
|
||||
return
|
||||
fi
|
||||
|
||||
# Prüfe ob Intranet erreichbar ist
|
||||
if curl -s --connect-timeout 5 --max-time 10 "$intranet_url" >/dev/null 2>&1; then
|
||||
log "✅ Intranet erreichbar - verwende Intranet-URL"
|
||||
echo "$intranet_url"
|
||||
return
|
||||
fi
|
||||
|
||||
# Fallback: Versuche lokale IP-Adresse
|
||||
local local_ip=$(ip route get 1 2>/dev/null | awk '{print $7}' | head -1)
|
||||
if [ -n "$local_ip" ] && [ "$local_ip" != "127.0.0.1" ]; then
|
||||
local ip_url="http://$local_ip:5000"
|
||||
if curl -s --connect-timeout 3 --max-time 5 "$ip_url" >/dev/null 2>&1; then
|
||||
log "✅ Lokale IP erreichbar - verwende IP-URL: $ip_url"
|
||||
echo "$ip_url"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
# Finaler Fallback: localhost
|
||||
log "⚠️ Fallback auf localhost - Backend möglicherweise noch nicht gestartet"
|
||||
echo "$kiosk_url"
|
||||
}
|
||||
|
||||
create_smart_kiosk_url_script() {
|
||||
log "=== ERSTELLE INTELLIGENTE KIOSK-URL ERMITTLUNG ==="
|
||||
|
||||
cat > "$APP_DIR/scripts/get_kiosk_url.sh" << 'EOF'
|
||||
#!/bin/bash
|
||||
# Intelligente Kiosk-URL-Ermittlung für MYP
|
||||
# Priorisiert lokale Verbindung, fällt auf Intranet zurück
|
||||
|
||||
LOCALHOST_URL="http://localhost:5000"
|
||||
INTRANET_URL="https://m040tbaraspi001.de040.corpintra.net"
|
||||
|
||||
# Funktion: URL testen
|
||||
test_url() {
|
||||
local url="$1"
|
||||
local timeout="${2:-5}"
|
||||
|
||||
curl -s --connect-timeout "$timeout" --max-time "$timeout" "$url" >/dev/null 2>&1
|
||||
return $?
|
||||
}
|
||||
|
||||
# Priorisierte URL-Tests
|
||||
echo "[$(date)] Ermittle optimale Kiosk-URL..." >> /var/log/kiosk-url.log
|
||||
|
||||
# 1. Priorität: Localhost (schnellste Option für Kiosk)
|
||||
if test_url "$LOCALHOST_URL" 3; then
|
||||
echo "[$(date)] Localhost verfügbar: $LOCALHOST_URL" >> /var/log/kiosk-url.log
|
||||
echo "$LOCALHOST_URL"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 2. Priorität: Intranet-URL (für Remote-Zugang)
|
||||
if test_url "$INTRANET_URL" 8; then
|
||||
echo "[$(date)] Intranet verfügbar: $INTRANET_URL" >> /var/log/kiosk-url.log
|
||||
echo "$INTRANET_URL"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 3. Priorität: Lokale IP-Adresse
|
||||
LOCAL_IP=$(ip route get 1 2>/dev/null | awk '{print $7}' | head -1)
|
||||
if [ -n "$LOCAL_IP" ] && [ "$LOCAL_IP" != "127.0.0.1" ]; then
|
||||
IP_URL="http://$LOCAL_IP:5000"
|
||||
if test_url "$IP_URL" 5; then
|
||||
echo "[$(date)] Lokale IP verfügbar: $IP_URL" >> /var/log/kiosk-url.log
|
||||
echo "$IP_URL"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# 4. Fallback: Hostname-URL
|
||||
HOSTNAME_URL="http://$(hostname):5000"
|
||||
if test_url "$HOSTNAME_URL" 5; then
|
||||
echo "[$(date)] Hostname verfügbar: $HOSTNAME_URL" >> /var/log/kiosk-url.log
|
||||
echo "$HOSTNAME_URL"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Finaler Fallback: Localhost (auch wenn nicht erreichbar)
|
||||
echo "[$(date)] Fallback auf Localhost: $LOCALHOST_URL" >> /var/log/kiosk-url.log
|
||||
echo "$LOCALHOST_URL"
|
||||
EOF
|
||||
|
||||
chmod +x "$APP_DIR/scripts/get_kiosk_url.sh"
|
||||
|
||||
log "✅ Intelligente Kiosk-URL-Ermittlung erstellt: $APP_DIR/scripts/get_kiosk_url.sh"
|
||||
}
|
||||
|
||||
# =========================== KIOSK-KONFIGURATION MIT INTELLIGENTER URL ===========================
|
||||
|
||||
# Skript starten mit automatischer Modus-Erkennung
|
||||
main "$@"
|
||||
main "$@"
|
@ -162,8 +162,9 @@ ExecStart=/bin/bash -c '\
|
||||
--new-instance"; \
|
||||
fi; \
|
||||
\
|
||||
# URL mit Fallback \
|
||||
TARGET_URL="http://localhost:5000"; \
|
||||
# URL mit intelligenter Ermittlung \
|
||||
TARGET_URL=$(/opt/myp/scripts/get_kiosk_url.sh); \
|
||||
[ -z "$TARGET_URL" ] && TARGET_URL="http://localhost:5000"; \
|
||||
\
|
||||
# Browser starten mit Fehlerbehandlung \
|
||||
echo "🖥️ Starte $BROWSER im Kiosk-Modus..."; \
|
||||
|
BIN
backend/utils/__pycache__/performance_tracker.cpython-313.pyc
Normal file
BIN
backend/utils/__pycache__/performance_tracker.cpython-313.pyc
Normal file
Binary file not shown.
Binary file not shown.
@ -167,6 +167,55 @@ MAIL_USE_TLS = get_env_variable('MAIL_USE_TLS', 'true').lower() in ['true', 'on'
|
||||
MAIL_USERNAME = get_env_variable('MAIL_USERNAME')
|
||||
MAIL_PASSWORD = get_env_variable('MAIL_PASSWORD')
|
||||
|
||||
# ===== NETZWERK-KONFIGURATION =====
|
||||
# Host-Konfiguration für lokalen und Intranet-Zugang
|
||||
FLASK_HOST = get_env_variable("FLASK_HOST", "0.0.0.0")
|
||||
FLASK_PORT = int(get_env_variable("FLASK_PORT", "5000"))
|
||||
FLASK_FALLBACK_PORT = 8080
|
||||
|
||||
# Hostname-Konfiguration für Intranet-Zugang
|
||||
HOSTNAME = "m040tbaraspi001"
|
||||
INTRANET_DOMAIN = "de040.corpintra.net"
|
||||
FULL_HOSTNAME = f"{HOSTNAME}.{INTRANET_DOMAIN}"
|
||||
|
||||
# Erlaubte Hosts für CORS und Security
|
||||
ALLOWED_HOSTS = [
|
||||
"localhost",
|
||||
"127.0.0.1",
|
||||
HOSTNAME,
|
||||
FULL_HOSTNAME,
|
||||
"0.0.0.0"
|
||||
]
|
||||
|
||||
# URL-Konfiguration
|
||||
BASE_URL_LOCAL = f"http://localhost:{FLASK_PORT}"
|
||||
BASE_URL_INTRANET = f"https://{FULL_HOSTNAME}"
|
||||
|
||||
# Automatische URL-Ermittlung basierend auf Request
|
||||
def get_base_url(request=None):
|
||||
"""
|
||||
Ermittelt die korrekte Base-URL basierend auf dem Request
|
||||
|
||||
Args:
|
||||
request: Flask Request Objekt (optional)
|
||||
|
||||
Returns:
|
||||
str: Base URL für die Anwendung
|
||||
"""
|
||||
if request:
|
||||
host = request.host
|
||||
if FULL_HOSTNAME in host:
|
||||
return BASE_URL_INTRANET
|
||||
elif "localhost" in host or "127.0.0.1" in host:
|
||||
return BASE_URL_LOCAL
|
||||
else:
|
||||
# Fallback basierend auf Request-Schema
|
||||
scheme = "https" if request.is_secure else "http"
|
||||
return f"{scheme}://{host}"
|
||||
|
||||
# Fallback ohne Request
|
||||
return BASE_URL_LOCAL
|
||||
|
||||
# ===== HILFSFUNKTIONEN =====
|
||||
|
||||
def get_log_file(category: str) -> str:
|
||||
|
@ -124,7 +124,9 @@ subjectAltName = @alt_names
|
||||
[alt_names]
|
||||
DNS.1 = localhost
|
||||
DNS.2 = *.localhost
|
||||
DNS.3 = 127.0.0.1
|
||||
DNS.3 = m040tbaraspi001
|
||||
DNS.4 = m040tbaraspi001.de040.corpintra.net
|
||||
DNS.5 = *.de040.corpintra.net
|
||||
IP.1 = 127.0.0.1
|
||||
IP.2 = 0.0.0.0
|
||||
"""
|
||||
|
Reference in New Issue
Block a user