🎉 Improved Backend Structure & Documentation 🖥️📚
This commit is contained in:
parent
57d19c7df3
commit
928ee3f8d5
110
backend/app.py
110
backend/app.py
@ -1828,16 +1828,19 @@ def einstellungen_redirect():
|
||||
"""Leitet zur neuen Einstellungsseite im User-Blueprint weiter (deutsche URL)."""
|
||||
return redirect(url_for("user_settings"))
|
||||
|
||||
@app.route("/admin")
|
||||
@app.route("/admin-dashboard")
|
||||
@login_required
|
||||
def admin():
|
||||
if not current_user.is_admin:
|
||||
flash("Nur Administratoren haben Zugriff auf diesen Bereich.", "error")
|
||||
return redirect(url_for("index"))
|
||||
|
||||
@admin_required
|
||||
def admin_page():
|
||||
"""Admin-Dashboard-Seite mit Live-Funktionen"""
|
||||
# Daten für das Template sammeln (gleiche Logik wie admin-dashboard)
|
||||
db_session = get_db_session()
|
||||
try:
|
||||
# Erfolgsrate berechnen
|
||||
completed_jobs = db_session.query(Job).filter(Job.status == 'completed').count() if db_session else 0
|
||||
total_jobs = db_session.query(Job).count() if db_session else 0
|
||||
success_rate = round((completed_jobs / total_jobs * 100), 1) if total_jobs > 0 else 0
|
||||
|
||||
# Statistiken sammeln
|
||||
stats = {
|
||||
'total_users': db_session.query(User).count(),
|
||||
@ -1845,7 +1848,56 @@ def admin():
|
||||
'online_printers': db_session.query(Printer).filter(Printer.status == 'online').count(),
|
||||
'active_jobs': db_session.query(Job).filter(Job.status.in_(['running', 'queued'])).count(),
|
||||
'queued_jobs': db_session.query(Job).filter(Job.status == 'queued').count(),
|
||||
'success_rate': calculate_success_rate(db_session) # Berechnung der tatsächlichen Erfolgsrate
|
||||
'success_rate': success_rate
|
||||
}
|
||||
|
||||
# Tab-Parameter
|
||||
active_tab = request.args.get('tab', 'users')
|
||||
|
||||
# Benutzer laden (für users tab)
|
||||
users = []
|
||||
if active_tab == 'users':
|
||||
users = db_session.query(User).all()
|
||||
|
||||
# Drucker laden (für printers tab)
|
||||
printers = []
|
||||
if active_tab == 'printers':
|
||||
printers = db_session.query(Printer).all()
|
||||
|
||||
db_session.close()
|
||||
|
||||
return render_template("admin.html",
|
||||
stats=stats,
|
||||
active_tab=active_tab,
|
||||
users=users,
|
||||
printers=printers)
|
||||
except Exception as e:
|
||||
app_logger.error(f"Fehler beim Laden der Admin-Daten: {str(e)}")
|
||||
db_session.close()
|
||||
flash("Fehler beim Laden des Admin-Bereichs.", "error")
|
||||
return redirect(url_for("index"))
|
||||
|
||||
@app.route("/admin")
|
||||
@login_required
|
||||
@admin_required
|
||||
def admin():
|
||||
"""Admin-Dashboard-Seite mit Live-Funktionen"""
|
||||
# Daten für das Template sammeln (gleiche Logik wie admin-dashboard)
|
||||
db_session = get_db_session()
|
||||
try:
|
||||
# Erfolgsrate berechnen
|
||||
completed_jobs = db_session.query(Job).filter(Job.status == 'completed').count() if db_session else 0
|
||||
total_jobs = db_session.query(Job).count() if db_session else 0
|
||||
success_rate = round((completed_jobs / total_jobs * 100), 1) if total_jobs > 0 else 0
|
||||
|
||||
# Statistiken sammeln
|
||||
stats = {
|
||||
'total_users': db_session.query(User).count(),
|
||||
'total_printers': db_session.query(Printer).count(),
|
||||
'online_printers': db_session.query(Printer).filter(Printer.status == 'online').count(),
|
||||
'active_jobs': db_session.query(Job).filter(Job.status.in_(['running', 'queued'])).count(),
|
||||
'queued_jobs': db_session.query(Job).filter(Job.status == 'queued').count(),
|
||||
'success_rate': success_rate
|
||||
}
|
||||
|
||||
# Tab-Parameter
|
||||
@ -1914,50 +1966,6 @@ def stats_page():
|
||||
"""Zeigt die Statistiken-Seite an"""
|
||||
return render_template("stats.html", title="Statistiken")
|
||||
|
||||
@app.route("/admin-dashboard")
|
||||
@login_required
|
||||
@admin_required
|
||||
def admin_page():
|
||||
"""Erweiterte Admin-Dashboard-Seite mit Live-Funktionen"""
|
||||
# Daten für das Template sammeln
|
||||
db_session = get_db_session()
|
||||
try:
|
||||
# Statistiken sammeln
|
||||
stats = {
|
||||
'total_users': db_session.query(User).count(),
|
||||
'total_printers': db_session.query(Printer).count(),
|
||||
'online_printers': db_session.query(Printer).filter(Printer.status == 'online').count(),
|
||||
'active_jobs': db_session.query(Job).filter(Job.status.in_(['running', 'queued'])).count(),
|
||||
'queued_jobs': db_session.query(Job).filter(Job.status == 'queued').count(),
|
||||
'success_rate': calculate_success_rate(db_session) # Berechnung der tatsächlichen Erfolgsrate
|
||||
}
|
||||
|
||||
# Tab-Parameter
|
||||
active_tab = request.args.get('tab', 'users')
|
||||
|
||||
# Benutzer laden (für users tab)
|
||||
users = []
|
||||
if active_tab == 'users':
|
||||
users = db_session.query(User).all()
|
||||
|
||||
# Drucker laden (für printers tab)
|
||||
printers = []
|
||||
if active_tab == 'printers':
|
||||
printers = db_session.query(Printer).all()
|
||||
|
||||
db_session.close()
|
||||
|
||||
return render_template("admin.html",
|
||||
title="Admin Dashboard",
|
||||
stats=stats,
|
||||
active_tab=active_tab,
|
||||
users=users,
|
||||
printers=printers)
|
||||
except Exception as e:
|
||||
app_logger.error(f"Fehler beim Laden der Admin-Dashboard-Daten: {str(e)}")
|
||||
db_session.close()
|
||||
flash("Fehler beim Laden des Admin-Dashboards.", "error")
|
||||
return redirect(url_for("index"))
|
||||
|
||||
# ===== RECHTLICHE SEITEN =====
|
||||
|
||||
|
1222
backend/combined.sh
1222
backend/combined.sh
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
1
backend/docs/CHANGELOG_SETUP_KONSOLIDIERUNG.md
Normal file
1
backend/docs/CHANGELOG_SETUP_KONSOLIDIERUNG.md
Normal file
@ -0,0 +1 @@
|
||||
|
1
backend/docs/SETUP_ANLEITUNG.md
Normal file
1
backend/docs/SETUP_ANLEITUNG.md
Normal file
@ -0,0 +1 @@
|
||||
|
1387
backend/installer.sh
1387
backend/installer.sh
File diff suppressed because it is too large
Load Diff
@ -35,3 +35,10 @@
|
||||
2025-06-01 04:48:29 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert
|
||||
2025-06-01 04:48:43 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert
|
||||
2025-06-01 04:54:12 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert
|
||||
2025-06-01 13:15:28 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert
|
||||
2025-06-01 13:18:20 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert
|
||||
2025-06-01 13:19:07 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert
|
||||
2025-06-01 13:19:13 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert
|
||||
2025-06-01 13:19:37 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert
|
||||
2025-06-01 13:19:50 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert
|
||||
2025-06-01 13:21:18 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert
|
||||
|
@ -900,3 +900,97 @@ WHERE users.id = ?
|
||||
2025-06-01 04:54:25 - [app] app - [INFO] INFO - Benutzer admin@mercedes-benz.com hat sich abgemeldet
|
||||
2025-06-01 04:54:31 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_page: User authenticated: True, User ID: 1, Is Admin: True
|
||||
2025-06-01 04:54:31 - [app] app - [ERROR] ERROR - Fehler beim Laden der Admin-Dashboard-Daten: Could not build url for endpoint 'admin_settings'. Did you mean 'optimization_settings' instead?
|
||||
2025-06-01 13:15:27 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\database\myp.db
|
||||
2025-06-01 13:15:29 - [app] app - [INFO] INFO - SQLite für Produktionsumgebung konfiguriert (WAL-Modus, Cache, Optimierungen)
|
||||
2025-06-01 13:15:30 - [app] app - [INFO] INFO - ✅ Timeout Force-Quit Manager geladen
|
||||
2025-06-01 13:15:30 - [app] app - [INFO] INFO - ✅ Zentraler Shutdown-Manager initialisiert
|
||||
2025-06-01 13:15:30 - [app] app - [INFO] INFO - 🔄 Starte Datenbank-Setup und Migrationen...
|
||||
2025-06-01 13:15:30 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert
|
||||
2025-06-01 13:15:30 - [app] app - [INFO] INFO - ✅ JobOrder-Tabelle bereits vorhanden
|
||||
2025-06-01 13:15:30 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt.
|
||||
2025-06-01 13:15:30 - [app] app - [INFO] INFO - ✅ Datenbank-Setup und Migrationen erfolgreich abgeschlossen
|
||||
2025-06-01 13:15:30 - [app] app - [INFO] INFO - 🖨️ Starte automatische Steckdosen-Initialisierung...
|
||||
2025-06-01 13:15:30 - [app] app - [INFO] INFO - ℹ️ Keine Drucker zur Initialisierung gefunden
|
||||
2025-06-01 13:15:30 - [app] app - [INFO] INFO - 🔄 Debug-Modus: Queue Manager deaktiviert für Entwicklung
|
||||
2025-06-01 13:15:30 - [app] app - [INFO] INFO - Job-Scheduler gestartet
|
||||
2025-06-01 13:15:30 - [app] app - [INFO] INFO - Starte Debug-Server auf 0.0.0.0:5000 (HTTP)
|
||||
2025-06-01 13:15:30 - [app] app - [INFO] INFO - Windows-Debug-Modus: Auto-Reload deaktiviert
|
||||
2025-06-01 13:15:38 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_page: User authenticated: True, User ID: 1, Is Admin: True
|
||||
2025-06-01 13:15:38 - [app] app - [ERROR] ERROR - Fehler beim Laden der Admin-Dashboard-Daten: name 'calculate_success_rate' is not defined
|
||||
2025-06-01 13:18:20 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\database\myp.db
|
||||
2025-06-01 13:18:21 - [app] app - [INFO] INFO - SQLite für Produktionsumgebung konfiguriert (WAL-Modus, Cache, Optimierungen)
|
||||
2025-06-01 13:18:21 - [app] app - [INFO] INFO - ✅ Timeout Force-Quit Manager geladen
|
||||
2025-06-01 13:18:21 - [app] app - [INFO] INFO - ✅ Zentraler Shutdown-Manager initialisiert
|
||||
2025-06-01 13:18:21 - [app] app - [INFO] INFO - 🔄 Starte Datenbank-Setup und Migrationen...
|
||||
2025-06-01 13:18:21 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert
|
||||
2025-06-01 13:18:21 - [app] app - [INFO] INFO - ✅ JobOrder-Tabelle bereits vorhanden
|
||||
2025-06-01 13:18:22 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt.
|
||||
2025-06-01 13:18:22 - [app] app - [INFO] INFO - ✅ Datenbank-Setup und Migrationen erfolgreich abgeschlossen
|
||||
2025-06-01 13:18:22 - [app] app - [INFO] INFO - 🖨️ Starte automatische Steckdosen-Initialisierung...
|
||||
2025-06-01 13:18:22 - [app] app - [INFO] INFO - ℹ️ Keine Drucker zur Initialisierung gefunden
|
||||
2025-06-01 13:18:22 - [app] app - [INFO] INFO - 🔄 Debug-Modus: Queue Manager deaktiviert für Entwicklung
|
||||
2025-06-01 13:18:22 - [app] app - [INFO] INFO - Job-Scheduler gestartet
|
||||
2025-06-01 13:18:22 - [app] app - [INFO] INFO - Starte Debug-Server auf 0.0.0.0:5000 (HTTP)
|
||||
2025-06-01 13:18:22 - [app] app - [INFO] INFO - Windows-Debug-Modus: Auto-Reload deaktiviert
|
||||
2025-06-01 13:18:23 - [app] app - [INFO] INFO - Admin-Check für Funktion admin: User authenticated: True, User ID: 1, Is Admin: True
|
||||
2025-06-01 13:18:24 - [app] app - [ERROR] ERROR - Fehler beim Laden der Admin-Daten: Could not build url for endpoint 'admin_page'. Did you mean 'admin_add_user_page' instead?
|
||||
2025-06-01 13:19:07 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\database\myp.db
|
||||
2025-06-01 13:19:08 - [app] app - [INFO] INFO - SQLite für Produktionsumgebung konfiguriert (WAL-Modus, Cache, Optimierungen)
|
||||
2025-06-01 13:19:08 - [app] app - [INFO] INFO - ✅ Timeout Force-Quit Manager geladen
|
||||
2025-06-01 13:19:12 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\database\myp.db
|
||||
2025-06-01 13:19:13 - [app] app - [INFO] INFO - SQLite für Produktionsumgebung konfiguriert (WAL-Modus, Cache, Optimierungen)
|
||||
2025-06-01 13:19:13 - [app] app - [INFO] INFO - ✅ Timeout Force-Quit Manager geladen
|
||||
2025-06-01 13:19:37 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\database\myp.db
|
||||
2025-06-01 13:19:37 - [app] app - [INFO] INFO - SQLite für Produktionsumgebung konfiguriert (WAL-Modus, Cache, Optimierungen)
|
||||
2025-06-01 13:19:38 - [app] app - [INFO] INFO - ✅ Timeout Force-Quit Manager geladen
|
||||
2025-06-01 13:19:38 - [app] app - [INFO] INFO - ✅ Zentraler Shutdown-Manager initialisiert
|
||||
2025-06-01 13:19:38 - [app] app - [INFO] INFO - 🔄 Starte Datenbank-Setup und Migrationen...
|
||||
2025-06-01 13:19:38 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert
|
||||
2025-06-01 13:19:38 - [app] app - [INFO] INFO - ✅ JobOrder-Tabelle bereits vorhanden
|
||||
2025-06-01 13:19:38 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt.
|
||||
2025-06-01 13:19:38 - [app] app - [INFO] INFO - ✅ Datenbank-Setup und Migrationen erfolgreich abgeschlossen
|
||||
2025-06-01 13:19:38 - [app] app - [INFO] INFO - 🖨️ Starte automatische Steckdosen-Initialisierung...
|
||||
2025-06-01 13:19:38 - [app] app - [INFO] INFO - ℹ️ Keine Drucker zur Initialisierung gefunden
|
||||
2025-06-01 13:19:38 - [app] app - [INFO] INFO - 🔄 Debug-Modus: Queue Manager deaktiviert für Entwicklung
|
||||
2025-06-01 13:19:38 - [app] app - [INFO] INFO - Job-Scheduler gestartet
|
||||
2025-06-01 13:19:38 - [app] app - [INFO] INFO - Starte Debug-Server auf 0.0.0.0:5000 (HTTP)
|
||||
2025-06-01 13:19:38 - [app] app - [INFO] INFO - Windows-Debug-Modus: Auto-Reload deaktiviert
|
||||
2025-06-01 13:19:50 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\database\myp.db
|
||||
2025-06-01 13:19:51 - [app] app - [INFO] INFO - SQLite für Produktionsumgebung konfiguriert (WAL-Modus, Cache, Optimierungen)
|
||||
2025-06-01 13:19:51 - [app] app - [INFO] INFO - ✅ Timeout Force-Quit Manager geladen
|
||||
2025-06-01 13:19:51 - [app] app - [INFO] INFO - ✅ Zentraler Shutdown-Manager initialisiert
|
||||
2025-06-01 13:19:51 - [app] app - [INFO] INFO - 🔄 Starte Datenbank-Setup und Migrationen...
|
||||
2025-06-01 13:19:51 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert
|
||||
2025-06-01 13:19:51 - [app] app - [INFO] INFO - ✅ JobOrder-Tabelle bereits vorhanden
|
||||
2025-06-01 13:19:52 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt.
|
||||
2025-06-01 13:19:52 - [app] app - [INFO] INFO - ✅ Datenbank-Setup und Migrationen erfolgreich abgeschlossen
|
||||
2025-06-01 13:19:52 - [app] app - [INFO] INFO - 🖨️ Starte automatische Steckdosen-Initialisierung...
|
||||
2025-06-01 13:19:52 - [app] app - [INFO] INFO - ℹ️ Keine Drucker zur Initialisierung gefunden
|
||||
2025-06-01 13:19:52 - [app] app - [INFO] INFO - 🔄 Debug-Modus: Queue Manager deaktiviert für Entwicklung
|
||||
2025-06-01 13:19:52 - [app] app - [INFO] INFO - Job-Scheduler gestartet
|
||||
2025-06-01 13:19:52 - [app] app - [INFO] INFO - Starte Debug-Server auf 0.0.0.0:5000 (HTTP)
|
||||
2025-06-01 13:19:52 - [app] app - [INFO] INFO - Windows-Debug-Modus: Auto-Reload deaktiviert
|
||||
2025-06-01 13:19:55 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_page: User authenticated: True, User ID: 1, Is Admin: True
|
||||
2025-06-01 13:19:56 - [app] app - [ERROR] ERROR - Fehler beim Laden der Admin-Daten: Could not build url for endpoint 'admin_settings'. Did you mean 'optimization_settings' instead?
|
||||
2025-06-01 13:20:04 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_page: User authenticated: True, User ID: 1, Is Admin: True
|
||||
2025-06-01 13:20:04 - [app] app - [ERROR] ERROR - Fehler beim Laden der Admin-Daten: Could not build url for endpoint 'admin_settings'. Did you mean 'optimization_settings' instead?
|
||||
2025-06-01 13:20:31 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_page: User authenticated: True, User ID: 1, Is Admin: True
|
||||
2025-06-01 13:20:31 - [app] app - [ERROR] ERROR - Fehler beim Laden der Admin-Daten: Could not build url for endpoint 'admin_settings'. Did you mean 'optimization_settings' instead?
|
||||
2025-06-01 13:21:14 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_page: User authenticated: True, User ID: 1, Is Admin: True
|
||||
2025-06-01 13:21:14 - [app] app - [ERROR] ERROR - Fehler beim Laden der Admin-Daten: Could not build url for endpoint 'admin_settings'. Did you mean 'optimization_settings' instead?
|
||||
2025-06-01 13:21:18 - [app] app - [INFO] INFO - Optimierte SQLite-Engine erstellt: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend\database\myp.db
|
||||
2025-06-01 13:21:19 - [app] app - [INFO] INFO - SQLite für Produktionsumgebung konfiguriert (WAL-Modus, Cache, Optimierungen)
|
||||
2025-06-01 13:21:19 - [app] app - [INFO] INFO - ✅ Timeout Force-Quit Manager geladen
|
||||
2025-06-01 13:21:19 - [app] app - [INFO] INFO - ✅ Zentraler Shutdown-Manager initialisiert
|
||||
2025-06-01 13:21:19 - [app] app - [INFO] INFO - 🔄 Starte Datenbank-Setup und Migrationen...
|
||||
2025-06-01 13:21:19 - [app] app - [INFO] INFO - Datenbank mit Optimierungen initialisiert
|
||||
2025-06-01 13:21:19 - [app] app - [INFO] INFO - ✅ JobOrder-Tabelle bereits vorhanden
|
||||
2025-06-01 13:21:20 - [app] app - [INFO] INFO - Admin-Benutzer admin (admin@mercedes-benz.com) existiert bereits. Passwort wurde zurückgesetzt.
|
||||
2025-06-01 13:21:20 - [app] app - [INFO] INFO - ✅ Datenbank-Setup und Migrationen erfolgreich abgeschlossen
|
||||
2025-06-01 13:21:20 - [app] app - [INFO] INFO - 🖨️ Starte automatische Steckdosen-Initialisierung...
|
||||
2025-06-01 13:21:20 - [app] app - [INFO] INFO - ℹ️ Keine Drucker zur Initialisierung gefunden
|
||||
2025-06-01 13:21:20 - [app] app - [INFO] INFO - 🔄 Debug-Modus: Queue Manager deaktiviert für Entwicklung
|
||||
2025-06-01 13:21:20 - [app] app - [INFO] INFO - Job-Scheduler gestartet
|
||||
2025-06-01 13:21:20 - [app] app - [INFO] INFO - Starte Debug-Server auf 0.0.0.0:5000 (HTTP)
|
||||
2025-06-01 13:21:20 - [app] app - [INFO] INFO - Windows-Debug-Modus: Auto-Reload deaktiviert
|
||||
2025-06-01 13:21:20 - [app] app - [INFO] INFO - Admin-Check für Funktion admin_page: User authenticated: True, User ID: 1, Is Admin: True
|
||||
|
@ -44,3 +44,6 @@
|
||||
2025-06-01 04:46:53 - [auth] auth - [INFO] INFO - Benutzer admin@mercedes-benz.com hat sich erfolgreich angemeldet
|
||||
2025-06-01 04:54:27 - [auth] auth - [WARNING] WARNING - JSON-Parsing fehlgeschlagen: 400 Bad Request: Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)
|
||||
2025-06-01 04:54:27 - [auth] auth - [INFO] INFO - Benutzer admin@mercedes-benz.com hat sich erfolgreich angemeldet
|
||||
2025-06-01 13:15:34 - [auth] auth - [WARNING] WARNING - JSON-Parsing fehlgeschlagen: 400 Bad Request: Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)
|
||||
2025-06-01 13:15:34 - [auth] auth - [INFO] INFO - Benutzer admin@mercedes-benz.com hat sich erfolgreich angemeldet
|
||||
2025-06-01 13:15:36 - [auth] auth - [INFO] INFO - 🔐 Neue Session erstellt für Benutzer admin@mercedes-benz.com von IP 127.0.0.1
|
||||
|
@ -35,3 +35,10 @@
|
||||
2025-06-01 04:48:29 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation)
|
||||
2025-06-01 04:48:43 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation)
|
||||
2025-06-01 04:54:11 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation)
|
||||
2025-06-01 13:15:28 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation)
|
||||
2025-06-01 13:18:20 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation)
|
||||
2025-06-01 13:19:07 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation)
|
||||
2025-06-01 13:19:13 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation)
|
||||
2025-06-01 13:19:37 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation)
|
||||
2025-06-01 13:19:50 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation)
|
||||
2025-06-01 13:21:18 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation)
|
||||
|
@ -133,3 +133,31 @@
|
||||
2025-06-01 04:54:12 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
|
||||
2025-06-01 04:54:12 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit threading initialisiert (eventlet-Fallback)
|
||||
2025-06-01 04:54:13 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: threading)
|
||||
2025-06-01 13:15:29 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
|
||||
2025-06-01 13:15:30 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
|
||||
2025-06-01 13:15:30 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit threading initialisiert (eventlet-Fallback)
|
||||
2025-06-01 13:15:30 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: threading)
|
||||
2025-06-01 13:18:21 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
|
||||
2025-06-01 13:18:21 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
|
||||
2025-06-01 13:18:21 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit threading initialisiert (eventlet-Fallback)
|
||||
2025-06-01 13:18:21 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: threading)
|
||||
2025-06-01 13:19:08 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
|
||||
2025-06-01 13:19:08 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
|
||||
2025-06-01 13:19:08 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit threading initialisiert (eventlet-Fallback)
|
||||
2025-06-01 13:19:08 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: threading)
|
||||
2025-06-01 13:19:13 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
|
||||
2025-06-01 13:19:13 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
|
||||
2025-06-01 13:19:13 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit threading initialisiert (eventlet-Fallback)
|
||||
2025-06-01 13:19:13 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: threading)
|
||||
2025-06-01 13:19:37 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
|
||||
2025-06-01 13:19:38 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
|
||||
2025-06-01 13:19:38 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit threading initialisiert (eventlet-Fallback)
|
||||
2025-06-01 13:19:38 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: threading)
|
||||
2025-06-01 13:19:51 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
|
||||
2025-06-01 13:19:51 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
|
||||
2025-06-01 13:19:51 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit threading initialisiert (eventlet-Fallback)
|
||||
2025-06-01 13:19:51 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: threading)
|
||||
2025-06-01 13:21:19 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
|
||||
2025-06-01 13:21:19 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet
|
||||
2025-06-01 13:21:19 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit threading initialisiert (eventlet-Fallback)
|
||||
2025-06-01 13:21:19 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: threading)
|
||||
|
@ -35,3 +35,10 @@
|
||||
2025-06-01 04:48:29 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet
|
||||
2025-06-01 04:48:43 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet
|
||||
2025-06-01 04:54:11 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:15:28 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:18:20 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:19:07 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:19:13 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:19:37 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:19:50 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:21:18 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet
|
||||
|
@ -33,3 +33,10 @@
|
||||
2025-06-01 04:48:30 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand)
|
||||
2025-06-01 04:48:44 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand)
|
||||
2025-06-01 04:54:12 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand)
|
||||
2025-06-01 13:15:29 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand)
|
||||
2025-06-01 13:18:21 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand)
|
||||
2025-06-01 13:19:08 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand)
|
||||
2025-06-01 13:19:13 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand)
|
||||
2025-06-01 13:19:37 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand)
|
||||
2025-06-01 13:19:51 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand)
|
||||
2025-06-01 13:21:19 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand)
|
||||
|
@ -66,3 +66,17 @@
|
||||
2025-06-01 04:48:44 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
2025-06-01 04:54:12 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
2025-06-01 04:54:12 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:15:29 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:15:30 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:18:21 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:18:21 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:19:08 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:19:08 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:19:13 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:19:13 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:19:37 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:19:38 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:19:51 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:19:51 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:21:19 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
2025-06-01 13:21:19 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet
|
||||
|
@ -66,3 +66,17 @@
|
||||
2025-06-01 04:48:44 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
2025-06-01 04:54:12 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
2025-06-01 04:54:12 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
2025-06-01 13:15:30 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
2025-06-01 13:15:30 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
2025-06-01 13:18:21 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
2025-06-01 13:18:21 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
2025-06-01 13:19:08 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
2025-06-01 13:19:08 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
2025-06-01 13:19:13 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
2025-06-01 13:19:13 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
2025-06-01 13:19:37 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
2025-06-01 13:19:38 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
2025-06-01 13:19:51 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
2025-06-01 13:19:51 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
2025-06-01 13:21:19 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
2025-06-01 13:21:19 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt
|
||||
|
@ -31,3 +31,10 @@
|
||||
2025-06-01 04:48:30 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-01 04:48:44 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-01 04:54:13 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-01 13:15:30 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-01 13:18:21 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-01 13:19:08 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-01 13:19:13 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-01 13:19:38 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-01 13:19:51 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
2025-06-01 13:21:19 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert
|
||||
|
@ -923,3 +923,67 @@
|
||||
2025-06-01 04:54:49 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus...
|
||||
2025-06-01 04:54:49 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden
|
||||
2025-06-01 04:54:49 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Steckdosen-Erkennung abgeschlossen: 0/6 Steckdosen gefunden in 36.0s
|
||||
2025-06-01 13:15:28 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert
|
||||
2025-06-01 13:15:28 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet
|
||||
2025-06-01 13:15:30 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Starte automatische Tapo-Steckdosenerkennung...
|
||||
2025-06-01 13:15:30 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Teste 6 Standard-IPs aus der Konfiguration
|
||||
2025-06-01 13:15:30 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 1/6: 192.168.0.103
|
||||
2025-06-01 13:15:30 - [printer_monitor] printer_monitor - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Programmstart...
|
||||
2025-06-01 13:15:30 - [printer_monitor] printer_monitor - [WARNING] WARNING - ⚠️ Keine aktiven Drucker zur Initialisierung gefunden
|
||||
2025-06-01 13:15:36 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 2/6: 192.168.0.104
|
||||
2025-06-01 13:15:42 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 3/6: 192.168.0.100
|
||||
2025-06-01 13:15:48 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 4/6: 192.168.0.101
|
||||
2025-06-01 13:15:54 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 5/6: 192.168.0.102
|
||||
2025-06-01 13:16:00 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 6/6: 192.168.0.105
|
||||
2025-06-01 13:16:06 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Steckdosen-Erkennung abgeschlossen: 0/6 Steckdosen gefunden in 36.1s
|
||||
2025-06-01 13:18:20 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert
|
||||
2025-06-01 13:18:20 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet
|
||||
2025-06-01 13:18:22 - [printer_monitor] printer_monitor - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Programmstart...
|
||||
2025-06-01 13:18:22 - [printer_monitor] printer_monitor - [WARNING] WARNING - ⚠️ Keine aktiven Drucker zur Initialisierung gefunden
|
||||
2025-06-01 13:18:22 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Starte automatische Tapo-Steckdosenerkennung...
|
||||
2025-06-01 13:18:22 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Teste 6 Standard-IPs aus der Konfiguration
|
||||
2025-06-01 13:18:22 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 1/6: 192.168.0.103
|
||||
2025-06-01 13:18:28 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 2/6: 192.168.0.104
|
||||
2025-06-01 13:18:34 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 3/6: 192.168.0.100
|
||||
2025-06-01 13:18:40 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 4/6: 192.168.0.101
|
||||
2025-06-01 13:18:46 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 5/6: 192.168.0.102
|
||||
2025-06-01 13:18:52 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 6/6: 192.168.0.105
|
||||
2025-06-01 13:18:58 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Steckdosen-Erkennung abgeschlossen: 0/6 Steckdosen gefunden in 36.1s
|
||||
2025-06-01 13:19:07 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert
|
||||
2025-06-01 13:19:07 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet
|
||||
2025-06-01 13:19:12 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert
|
||||
2025-06-01 13:19:12 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet
|
||||
2025-06-01 13:19:37 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert
|
||||
2025-06-01 13:19:37 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet
|
||||
2025-06-01 13:19:38 - [printer_monitor] printer_monitor - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Programmstart...
|
||||
2025-06-01 13:19:38 - [printer_monitor] printer_monitor - [WARNING] WARNING - ⚠️ Keine aktiven Drucker zur Initialisierung gefunden
|
||||
2025-06-01 13:19:39 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Starte automatische Tapo-Steckdosenerkennung...
|
||||
2025-06-01 13:19:39 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Teste 6 Standard-IPs aus der Konfiguration
|
||||
2025-06-01 13:19:39 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 1/6: 192.168.0.103
|
||||
2025-06-01 13:19:45 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 2/6: 192.168.0.104
|
||||
2025-06-01 13:19:50 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert
|
||||
2025-06-01 13:19:50 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet
|
||||
2025-06-01 13:19:52 - [printer_monitor] printer_monitor - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Programmstart...
|
||||
2025-06-01 13:19:52 - [printer_monitor] printer_monitor - [WARNING] WARNING - ⚠️ Keine aktiven Drucker zur Initialisierung gefunden
|
||||
2025-06-01 13:19:52 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Starte automatische Tapo-Steckdosenerkennung...
|
||||
2025-06-01 13:19:52 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Teste 6 Standard-IPs aus der Konfiguration
|
||||
2025-06-01 13:19:52 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 1/6: 192.168.0.103
|
||||
2025-06-01 13:19:58 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 2/6: 192.168.0.104
|
||||
2025-06-01 13:20:04 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 3/6: 192.168.0.100
|
||||
2025-06-01 13:20:10 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 4/6: 192.168.0.101
|
||||
2025-06-01 13:20:16 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 5/6: 192.168.0.102
|
||||
2025-06-01 13:20:23 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 6/6: 192.168.0.105
|
||||
2025-06-01 13:20:29 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Steckdosen-Erkennung abgeschlossen: 0/6 Steckdosen gefunden in 36.1s
|
||||
2025-06-01 13:21:18 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert
|
||||
2025-06-01 13:21:18 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet
|
||||
2025-06-01 13:21:20 - [printer_monitor] printer_monitor - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Programmstart...
|
||||
2025-06-01 13:21:20 - [printer_monitor] printer_monitor - [WARNING] WARNING - ⚠️ Keine aktiven Drucker zur Initialisierung gefunden
|
||||
2025-06-01 13:21:20 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Starte automatische Tapo-Steckdosenerkennung...
|
||||
2025-06-01 13:21:20 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Teste 6 Standard-IPs aus der Konfiguration
|
||||
2025-06-01 13:21:20 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 1/6: 192.168.0.103
|
||||
2025-06-01 13:21:26 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 2/6: 192.168.0.104
|
||||
2025-06-01 13:21:32 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 3/6: 192.168.0.100
|
||||
2025-06-01 13:21:38 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 4/6: 192.168.0.101
|
||||
2025-06-01 13:21:44 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 5/6: 192.168.0.102
|
||||
2025-06-01 13:21:50 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 6/6: 192.168.0.105
|
||||
2025-06-01 13:21:56 - [printer_monitor] printer_monitor - [INFO] INFO - ✅ Steckdosen-Erkennung abgeschlossen: 0/6 Steckdosen gefunden in 36.1s
|
||||
|
@ -2911,3 +2911,20 @@
|
||||
2025-06-01 04:54:11 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
|
||||
2025-06-01 04:54:13 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet
|
||||
2025-06-01 04:54:13 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet
|
||||
2025-06-01 13:15:28 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
|
||||
2025-06-01 13:15:30 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet
|
||||
2025-06-01 13:15:30 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet
|
||||
2025-06-01 13:18:20 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
|
||||
2025-06-01 13:18:22 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet
|
||||
2025-06-01 13:18:22 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet
|
||||
2025-06-01 13:19:07 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
|
||||
2025-06-01 13:19:12 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
|
||||
2025-06-01 13:19:37 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
|
||||
2025-06-01 13:19:38 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet
|
||||
2025-06-01 13:19:38 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet
|
||||
2025-06-01 13:19:50 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
|
||||
2025-06-01 13:19:52 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet
|
||||
2025-06-01 13:19:52 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet
|
||||
2025-06-01 13:21:18 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True
|
||||
2025-06-01 13:21:20 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet
|
||||
2025-06-01 13:21:20 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet
|
||||
|
@ -31,3 +31,10 @@
|
||||
2025-06-01 04:48:30 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-01 04:48:44 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-01 04:54:13 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-01 13:15:30 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-01 13:18:21 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-01 13:19:08 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-01 13:19:13 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-01 13:19:38 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-01 13:19:51 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
2025-06-01 13:21:19 - [security] security - [INFO] INFO - 🔒 Security System initialisiert
|
||||
|
@ -88,3 +88,18 @@
|
||||
2025-06-01 04:48:30 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert
|
||||
2025-06-01 04:48:44 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert
|
||||
2025-06-01 04:54:12 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert
|
||||
2025-06-01 13:15:30 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert
|
||||
2025-06-01 13:18:21 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert
|
||||
2025-06-01 13:19:08 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert
|
||||
2025-06-01 13:19:08 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔄 Starte koordiniertes System-Shutdown...
|
||||
2025-06-01 13:19:08 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🧹 Führe 1 Cleanup-Funktionen aus...
|
||||
2025-06-01 13:19:08 - [shutdown_manager] shutdown_manager - [INFO] INFO - ✅ Koordiniertes Shutdown abgeschlossen in 0.0s
|
||||
2025-06-01 13:19:08 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🏁 System wird beendet...
|
||||
2025-06-01 13:19:13 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert
|
||||
2025-06-01 13:19:14 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔄 Starte koordiniertes System-Shutdown...
|
||||
2025-06-01 13:19:14 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🧹 Führe 1 Cleanup-Funktionen aus...
|
||||
2025-06-01 13:19:14 - [shutdown_manager] shutdown_manager - [INFO] INFO - ✅ Koordiniertes Shutdown abgeschlossen in 0.0s
|
||||
2025-06-01 13:19:14 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🏁 System wird beendet...
|
||||
2025-06-01 13:19:38 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert
|
||||
2025-06-01 13:19:51 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert
|
||||
2025-06-01 13:21:19 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert
|
||||
|
@ -291,3 +291,66 @@
|
||||
2025-06-01 04:54:12 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
|
||||
2025-06-01 04:54:12 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
|
||||
2025-06-01 04:54:12 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-01 13:15:30 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-01 13:15:30 - [startup] startup - [INFO] INFO - 🚀 MYP Platform Backend wird gestartet...
|
||||
2025-06-01 13:15:30 - [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-01 13:15:30 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32)
|
||||
2025-06-01 13:15:30 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend
|
||||
2025-06-01 13:15:30 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-01T13:15:30.022931
|
||||
2025-06-01 13:15:30 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
|
||||
2025-06-01 13:15:30 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
|
||||
2025-06-01 13:15:30 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-01 13:18:21 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-01 13:18:21 - [startup] startup - [INFO] INFO - 🚀 MYP Platform Backend wird gestartet...
|
||||
2025-06-01 13:18:21 - [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-01 13:18:21 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32)
|
||||
2025-06-01 13:18:21 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend
|
||||
2025-06-01 13:18:21 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-01T13:18:21.616582
|
||||
2025-06-01 13:18:21 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
|
||||
2025-06-01 13:18:21 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
|
||||
2025-06-01 13:18:21 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-01 13:19:08 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-01 13:19:08 - [startup] startup - [INFO] INFO - 🚀 MYP Platform Backend wird gestartet...
|
||||
2025-06-01 13:19:08 - [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-01 13:19:08 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32)
|
||||
2025-06-01 13:19:08 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend
|
||||
2025-06-01 13:19:08 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-01T13:19:08.567147
|
||||
2025-06-01 13:19:08 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
|
||||
2025-06-01 13:19:08 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
|
||||
2025-06-01 13:19:08 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-01 13:19:13 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-01 13:19:13 - [startup] startup - [INFO] INFO - 🚀 MYP Platform Backend wird gestartet...
|
||||
2025-06-01 13:19:13 - [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-01 13:19:13 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32)
|
||||
2025-06-01 13:19:13 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend
|
||||
2025-06-01 13:19:13 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-01T13:19:13.918980
|
||||
2025-06-01 13:19:13 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
|
||||
2025-06-01 13:19:13 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
|
||||
2025-06-01 13:19:13 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-01 13:19:37 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-01 13:19:37 - [startup] startup - [INFO] INFO - 🚀 MYP Platform Backend wird gestartet...
|
||||
2025-06-01 13:19:37 - [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-01 13:19:37 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32)
|
||||
2025-06-01 13:19:37 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend
|
||||
2025-06-01 13:19:37 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-01T13:19:37.994201
|
||||
2025-06-01 13:19:37 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
|
||||
2025-06-01 13:19:37 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
|
||||
2025-06-01 13:19:37 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-01 13:19:51 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-01 13:19:51 - [startup] startup - [INFO] INFO - 🚀 MYP Platform Backend wird gestartet...
|
||||
2025-06-01 13:19:51 - [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-01 13:19:51 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32)
|
||||
2025-06-01 13:19:51 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend
|
||||
2025-06-01 13:19:51 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-01T13:19:51.748912
|
||||
2025-06-01 13:19:51 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
|
||||
2025-06-01 13:19:51 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
|
||||
2025-06-01 13:19:51 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-01 13:21:19 - [startup] startup - [INFO] INFO - ==================================================
|
||||
2025-06-01 13:21:19 - [startup] startup - [INFO] INFO - 🚀 MYP Platform Backend wird gestartet...
|
||||
2025-06-01 13:21:19 - [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-01 13:21:19 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32)
|
||||
2025-06-01 13:21:19 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend
|
||||
2025-06-01 13:21:19 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-01T13:21:19.672971
|
||||
2025-06-01 13:21:19 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert
|
||||
2025-06-01 13:21:19 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert
|
||||
2025-06-01 13:21:19 - [startup] startup - [INFO] INFO - ==================================================
|
||||
|
@ -138,3 +138,31 @@
|
||||
2025-06-01 04:54:11 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
|
||||
2025-06-01 04:54:11 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
|
||||
2025-06-01 04:54:11 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
|
||||
2025-06-01 13:15:27 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an...
|
||||
2025-06-01 13:15:27 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
|
||||
2025-06-01 13:15:27 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
|
||||
2025-06-01 13:15:27 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
|
||||
2025-06-01 13:18:20 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an...
|
||||
2025-06-01 13:18:20 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
|
||||
2025-06-01 13:18:20 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
|
||||
2025-06-01 13:18:20 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
|
||||
2025-06-01 13:19:07 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an...
|
||||
2025-06-01 13:19:07 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
|
||||
2025-06-01 13:19:07 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
|
||||
2025-06-01 13:19:07 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
|
||||
2025-06-01 13:19:12 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an...
|
||||
2025-06-01 13:19:12 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
|
||||
2025-06-01 13:19:12 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
|
||||
2025-06-01 13:19:12 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
|
||||
2025-06-01 13:19:36 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an...
|
||||
2025-06-01 13:19:36 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
|
||||
2025-06-01 13:19:36 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
|
||||
2025-06-01 13:19:36 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
|
||||
2025-06-01 13:19:50 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an...
|
||||
2025-06-01 13:19:50 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
|
||||
2025-06-01 13:19:50 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
|
||||
2025-06-01 13:19:50 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
|
||||
2025-06-01 13:21:18 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an...
|
||||
2025-06-01 13:21:18 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen)
|
||||
2025-06-01 13:21:18 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet
|
||||
2025-06-01 13:21:18 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet
|
||||
|
843
backend/setup.sh
Normal file
843
backend/setup.sh
Normal file
@ -0,0 +1,843 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ===================================================================
|
||||
# MYP Druckerverwaltung - KONSOLIDIERTES SETUP-SKRIPT
|
||||
# Kombiniert alle Installationsfunktionen in einer einzigen Datei
|
||||
# Optimiert für Debian/Linux (Raspberry Pi OS) - KEIN Windows-Support
|
||||
# HTTPS auf Port 443 mit automatischer SSL-Zertifikat-Generierung
|
||||
# Kiosk-Modus mit Chromium-Autostart ohne Desktop-Environment
|
||||
# Version: 4.0.0
|
||||
# ===================================================================
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# =========================== GLOBALE KONFIGURATION ===========================
|
||||
readonly APP_NAME="MYP Druckerverwaltung"
|
||||
readonly APP_VERSION="4.0.0"
|
||||
readonly APP_DIR="/opt/myp"
|
||||
readonly HTTPS_SERVICE_NAME="myp-https"
|
||||
readonly KIOSK_SERVICE_NAME="myp-kiosk"
|
||||
readonly WATCHDOG_SERVICE_NAME="kiosk-watchdog"
|
||||
readonly WATCHDOG_PYTHON_SERVICE_NAME="kiosk-watchdog-python"
|
||||
readonly KIOSK_USER="kiosk"
|
||||
readonly CURRENT_DIR="$(pwd)"
|
||||
readonly INSTALL_LOG="/var/log/myp-install.log"
|
||||
readonly HTTPS_PORT="443"
|
||||
readonly HTTPS_URL="https://localhost:${HTTPS_PORT}"
|
||||
readonly SYSTEMD_DIR="$CURRENT_DIR/systemd"
|
||||
readonly SYSTEM_SYSTEMD_DIR="/etc/systemd/system"
|
||||
|
||||
# Farben für Ausgabe
|
||||
readonly RED='\033[0;31m'
|
||||
readonly GREEN='\033[0;32m'
|
||||
readonly YELLOW='\033[1;33m'
|
||||
readonly BLUE='\033[0;34m'
|
||||
readonly PURPLE='\033[0;35m'
|
||||
readonly CYAN='\033[0;36m'
|
||||
readonly NC='\033[0m'
|
||||
|
||||
# =========================== LOGGING-FUNKTIONEN ===========================
|
||||
log() {
|
||||
echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')] $1${NC}" | tee -a "$INSTALL_LOG"
|
||||
}
|
||||
|
||||
error() {
|
||||
echo -e "${RED}[FEHLER] $1${NC}" | tee -a "$INSTALL_LOG"
|
||||
exit 1
|
||||
}
|
||||
|
||||
warning() {
|
||||
echo -e "${YELLOW}[WARNUNG] $1${NC}" | tee -a "$INSTALL_LOG"
|
||||
}
|
||||
|
||||
info() {
|
||||
echo -e "${BLUE}[INFO] $1${NC}" | tee -a "$INSTALL_LOG"
|
||||
}
|
||||
|
||||
progress() {
|
||||
echo -e "${PURPLE}[FORTSCHRITT] $1${NC}" | tee -a "$INSTALL_LOG"
|
||||
}
|
||||
|
||||
success() {
|
||||
echo -e "${CYAN}[ERFOLG] $1${NC}" | tee -a "$INSTALL_LOG"
|
||||
}
|
||||
|
||||
# =========================== SYSTEM-VALIDIERUNG ===========================
|
||||
check_root() {
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
error "Dieses Skript muss als Root ausgeführt werden: sudo $0"
|
||||
fi
|
||||
export PATH="/usr/sbin:/sbin:/usr/bin:/bin:/usr/local/bin:$PATH"
|
||||
log "✅ Root-Berechtigung bestätigt"
|
||||
}
|
||||
|
||||
check_debian_system() {
|
||||
if [ ! -f /etc/debian_version ]; then
|
||||
error "Dieses Skript ist nur für Debian/Raspbian-Systeme geeignet!"
|
||||
fi
|
||||
|
||||
local debian_version=$(cat /etc/debian_version 2>/dev/null || echo "Unbekannt")
|
||||
log "✅ Debian/Raspbian-System erkannt (Version: $debian_version)"
|
||||
|
||||
# Prüfe auf Raspberry Pi
|
||||
if [ -f /proc/device-tree/model ]; then
|
||||
local pi_model=$(cat /proc/device-tree/model 2>/dev/null || echo "Unbekannt")
|
||||
info "Raspberry Pi Modell: $pi_model"
|
||||
fi
|
||||
}
|
||||
|
||||
check_internet_connection() {
|
||||
progress "Prüfe Internetverbindung..."
|
||||
|
||||
local test_urls=("8.8.8.8" "1.1.1.1" "google.com")
|
||||
local connection_ok=false
|
||||
|
||||
for url in "${test_urls[@]}"; do
|
||||
if ping -c 1 -W 3 "$url" >/dev/null 2>&1; then
|
||||
connection_ok=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$connection_ok" = true ]; then
|
||||
log "✅ Internetverbindung verfügbar"
|
||||
else
|
||||
warning "⚠️ Keine Internetverbindung - Installation könnte fehlschlagen"
|
||||
fi
|
||||
}
|
||||
|
||||
# =========================== SYSTEM-VORBEREITUNG ===========================
|
||||
update_system() {
|
||||
log "=== SYSTEM-UPDATE ==="
|
||||
|
||||
progress "Aktualisiere Paketlisten..."
|
||||
apt-get update -y || error "APT Update fehlgeschlagen"
|
||||
|
||||
progress "Führe System-Upgrade durch..."
|
||||
apt-get upgrade -y || warning "System-Upgrade teilweise fehlgeschlagen"
|
||||
|
||||
progress "Installiere grundlegende System-Tools..."
|
||||
apt-get install -y \
|
||||
curl \
|
||||
wget \
|
||||
git \
|
||||
nano \
|
||||
htop \
|
||||
rsync \
|
||||
unzip \
|
||||
sudo \
|
||||
systemd \
|
||||
ca-certificates \
|
||||
gnupg \
|
||||
lsb-release \
|
||||
apt-transport-https \
|
||||
software-properties-common \
|
||||
bc \
|
||||
|| error "Grundlegende Tools Installation fehlgeschlagen"
|
||||
|
||||
log "✅ System-Update abgeschlossen"
|
||||
}
|
||||
|
||||
# =========================== DESKTOP-ENVIRONMENT ENTFERNUNG ===========================
|
||||
remove_desktop_environments() {
|
||||
log "=== ENTFERNE DESKTOP ENVIRONMENTS FÜR KIOSK-MODUS ==="
|
||||
|
||||
progress "Stoppe alle Desktop-Services..."
|
||||
local desktop_services=("lightdm" "gdm3" "sddm" "xdm" "nodm")
|
||||
|
||||
for service in "${desktop_services[@]}"; do
|
||||
systemctl stop "$service" 2>/dev/null || true
|
||||
systemctl disable "$service" 2>/dev/null || true
|
||||
done
|
||||
|
||||
progress "Entferne Desktop-Pakete vollständig..."
|
||||
|
||||
# Raspberry Pi OS Desktop-Pakete
|
||||
apt-get remove --purge -y \
|
||||
raspberrypi-ui-mods \
|
||||
pi-package \
|
||||
desktop-base \
|
||||
lxde* \
|
||||
xfce4* \
|
||||
gnome* \
|
||||
kde* \
|
||||
mate* \
|
||||
cinnamon* \
|
||||
openbox \
|
||||
pcmanfm \
|
||||
file-manager* \
|
||||
task-lxde-desktop \
|
||||
task-xfce-desktop \
|
||||
task-gnome-desktop \
|
||||
task-kde-desktop \
|
||||
2>/dev/null || true
|
||||
|
||||
# Display Manager entfernen
|
||||
apt-get remove --purge -y \
|
||||
lightdm* \
|
||||
gdm3* \
|
||||
sddm* \
|
||||
xdm* \
|
||||
nodm* \
|
||||
2>/dev/null || true
|
||||
|
||||
# Unnötige Anwendungen entfernen
|
||||
apt-get remove --purge -y \
|
||||
libreoffice* \
|
||||
thunderbird* \
|
||||
firefox* \
|
||||
vlc* \
|
||||
gimp* \
|
||||
scratch* \
|
||||
minecraft-pi \
|
||||
sonic-pi \
|
||||
2>/dev/null || true
|
||||
|
||||
# Aufräumen
|
||||
apt-get autoremove --purge -y
|
||||
apt-get autoclean
|
||||
|
||||
log "✅ Desktop Environments vollständig entfernt"
|
||||
}
|
||||
|
||||
# =========================== MINIMALE X11-UMGEBUNG ===========================
|
||||
install_minimal_x11() {
|
||||
log "=== INSTALLIERE MINIMALE X11-UMGEBUNG FÜR KIOSK ==="
|
||||
|
||||
progress "Installiere minimale X11-Pakete..."
|
||||
apt-get install -y \
|
||||
xserver-xorg-core \
|
||||
xserver-xorg-input-all \
|
||||
xserver-xorg-video-fbdev \
|
||||
xserver-xorg-video-vesa \
|
||||
xinit \
|
||||
x11-xserver-utils \
|
||||
xdotool \
|
||||
unclutter \
|
||||
openbox \
|
||||
|| error "X11 Installation fehlgeschlagen"
|
||||
|
||||
# Browser-Installation mit Fallback-Mechanismus
|
||||
progress "Installiere Browser für Kiosk-Modus..."
|
||||
local browser_installed=false
|
||||
|
||||
# Versuche Chromium zu installieren
|
||||
if apt-get install -y chromium 2>/dev/null; then
|
||||
log "✅ Chromium erfolgreich installiert"
|
||||
browser_installed=true
|
||||
elif apt-get install -y chromium-browser 2>/dev/null; then
|
||||
log "✅ Chromium-Browser erfolgreich installiert"
|
||||
browser_installed=true
|
||||
elif apt-get install -y firefox-esr 2>/dev/null; then
|
||||
warning "⚠️ Chromium nicht verfügbar - Firefox ESR als Fallback installiert"
|
||||
browser_installed=true
|
||||
fi
|
||||
|
||||
if [ "$browser_installed" = false ]; then
|
||||
error "❌ Kein Browser verfügbar (chromium, chromium-browser, firefox-esr)"
|
||||
fi
|
||||
|
||||
log "✅ Minimale X11-Umgebung installiert"
|
||||
}
|
||||
|
||||
# =========================== KIOSK-BENUTZER MANAGEMENT ===========================
|
||||
create_kiosk_user() {
|
||||
log "=== KIOSK-BENUTZER SETUP ==="
|
||||
|
||||
if ! id "$KIOSK_USER" &>/dev/null; then
|
||||
progress "Erstelle Kiosk-Benutzer: $KIOSK_USER"
|
||||
useradd -m -s /bin/bash "$KIOSK_USER" || error "Kann Kiosk-Benutzer nicht erstellen"
|
||||
|
||||
# Gruppen hinzufügen
|
||||
usermod -aG audio,video,input,dialout,plugdev,users "$KIOSK_USER" 2>/dev/null || true
|
||||
else
|
||||
info "Kiosk-Benutzer $KIOSK_USER existiert bereits"
|
||||
fi
|
||||
|
||||
# Passwort entfernen für automatischen Login
|
||||
passwd -d "$KIOSK_USER" || warning "Konnte Passwort nicht entfernen"
|
||||
|
||||
log "✅ Kiosk-Benutzer konfiguriert: $KIOSK_USER"
|
||||
}
|
||||
|
||||
configure_autologin() {
|
||||
log "=== KONFIGURIERE AUTOLOGIN FÜR KIOSK-BENUTZER ==="
|
||||
|
||||
# Getty-Service für automatischen Login konfigurieren
|
||||
progress "Konfiguriere automatischen Login auf tty1..."
|
||||
|
||||
local getty_override_dir="/etc/systemd/system/getty@tty1.service.d"
|
||||
mkdir -p "$getty_override_dir"
|
||||
|
||||
cat > "$getty_override_dir/override.conf" << EOF
|
||||
[Service]
|
||||
ExecStart=
|
||||
ExecStart=-/sbin/agetty --autologin $KIOSK_USER --noclear %I \$TERM
|
||||
EOF
|
||||
|
||||
# Systemd-Konfiguration neu laden
|
||||
systemctl daemon-reload
|
||||
systemctl enable getty@tty1.service
|
||||
|
||||
log "✅ Autologin für $KIOSK_USER konfiguriert"
|
||||
}
|
||||
|
||||
# =========================== PYTHON & NODE.JS INSTALLATION ===========================
|
||||
install_python_dependencies() {
|
||||
log "=== PYTHON-ABHÄNGIGKEITEN INSTALLATION ==="
|
||||
|
||||
progress "Installiere Python 3 und Entwicklungstools..."
|
||||
apt-get install -y \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3-dev \
|
||||
python3-setuptools \
|
||||
python3-venv \
|
||||
build-essential \
|
||||
libssl-dev \
|
||||
libffi-dev \
|
||||
sqlite3 \
|
||||
|| error "Python Installation fehlgeschlagen"
|
||||
|
||||
# pip auf neueste Version aktualisieren
|
||||
progress "Aktualisiere pip..."
|
||||
python3 -m pip install --upgrade pip --break-system-packages || warning "pip Update fehlgeschlagen"
|
||||
|
||||
# SSL-Konfiguration für pip
|
||||
mkdir -p /root/.pip
|
||||
cat > /root/.pip/pip.conf << EOF
|
||||
[global]
|
||||
trusted-host = pypi.org
|
||||
pypi.python.org
|
||||
files.pythonhosted.org
|
||||
cert = /etc/ssl/certs/ca-certificates.crt
|
||||
timeout = 60
|
||||
retries = 3
|
||||
no-cache-dir = true
|
||||
|
||||
[install]
|
||||
trusted-host = pypi.org
|
||||
pypi.python.org
|
||||
files.pythonhosted.org
|
||||
no-warn-script-location = true
|
||||
EOF
|
||||
|
||||
log "✅ Python-Umgebung vorbereitet"
|
||||
}
|
||||
|
||||
install_nodejs_npm() {
|
||||
log "=== NODE.JS UND NPM INSTALLATION ==="
|
||||
|
||||
# Alte Node.js-Installationen entfernen
|
||||
progress "Entferne alte Node.js-Installationen..."
|
||||
apt-get remove --purge -y nodejs npm 2>/dev/null || true
|
||||
apt-get autoremove -y 2>/dev/null || true
|
||||
|
||||
# NodeSource Repository für Node.js LTS hinzufügen
|
||||
progress "Installiere Node.js LTS..."
|
||||
|
||||
if curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - 2>/dev/null; then
|
||||
apt-get update -y
|
||||
apt-get install -y nodejs || error "Node.js Installation fehlgeschlagen"
|
||||
else
|
||||
warning "NodeSource Repository nicht verfügbar - verwende Debian-Repository"
|
||||
apt-get install -y nodejs npm || error "Node.js Fallback Installation fehlgeschlagen"
|
||||
fi
|
||||
|
||||
# Versionen prüfen
|
||||
if command -v node >/dev/null 2>&1; then
|
||||
local node_version=$(node --version)
|
||||
log "✅ Node.js installiert: $node_version"
|
||||
else
|
||||
error "❌ Node.js Installation fehlgeschlagen"
|
||||
fi
|
||||
|
||||
if command -v npm >/dev/null 2>&1; then
|
||||
local npm_version=$(npm --version)
|
||||
log "✅ npm installiert: $npm_version"
|
||||
|
||||
# npm-Konfiguration optimieren
|
||||
npm config set fund false 2>/dev/null || true
|
||||
npm config set audit-level moderate 2>/dev/null || true
|
||||
else
|
||||
error "❌ npm Installation fehlgeschlagen"
|
||||
fi
|
||||
|
||||
log "✅ Node.js und npm erfolgreich installiert"
|
||||
}
|
||||
|
||||
install_python_packages() {
|
||||
log "=== PYTHON-PAKETE INSTALLATION ==="
|
||||
|
||||
local pip_opts="--break-system-packages --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --timeout 60 --retries 3"
|
||||
|
||||
progress "Installiere Flask-Framework..."
|
||||
pip3 install $pip_opts Flask==3.1.1 || pip3 install $pip_opts Flask || error "Flask Installation fehlgeschlagen"
|
||||
pip3 install $pip_opts Flask-Login==0.6.3 || pip3 install $pip_opts Flask-Login || error "Flask-Login Installation fehlgeschlagen"
|
||||
pip3 install $pip_opts Flask-WTF==1.2.1 || pip3 install $pip_opts Flask-WTF || error "Flask-WTF Installation fehlgeschlagen"
|
||||
|
||||
progress "Installiere Datenbank-Komponenten..."
|
||||
pip3 install $pip_opts SQLAlchemy==2.0.36 || pip3 install $pip_opts SQLAlchemy || error "SQLAlchemy Installation fehlgeschlagen"
|
||||
|
||||
progress "Installiere Sicherheits-Komponenten..."
|
||||
pip3 install $pip_opts bcrypt==4.2.1 || pip3 install $pip_opts bcrypt || error "bcrypt Installation fehlgeschlagen"
|
||||
pip3 install $pip_opts cryptography==44.0.0 || pip3 install $pip_opts cryptography || error "cryptography Installation fehlgeschlagen"
|
||||
pip3 install $pip_opts Werkzeug==3.1.3 || pip3 install $pip_opts Werkzeug || error "Werkzeug Installation fehlgeschlagen"
|
||||
|
||||
progress "Installiere weitere Abhängigkeiten..."
|
||||
pip3 install $pip_opts requests==2.32.3 || pip3 install $pip_opts requests || error "requests Installation fehlgeschlagen"
|
||||
pip3 install $pip_opts psutil==6.1.1 || pip3 install $pip_opts psutil || error "psutil Installation fehlgeschlagen"
|
||||
pip3 install $pip_opts MarkupSafe==3.0.2 || pip3 install $pip_opts MarkupSafe || error "MarkupSafe Installation fehlgeschlagen"
|
||||
pip3 install $pip_opts gunicorn==23.0.0 || pip3 install $pip_opts gunicorn || error "gunicorn Installation fehlgeschlagen"
|
||||
|
||||
# Optionale Pakete
|
||||
pip3 install $pip_opts PyP100 || warning "PyP100 Installation fehlgeschlagen (optional)"
|
||||
pip3 install $pip_opts redis==5.2.1 || warning "redis Installation fehlgeschlagen (optional)"
|
||||
|
||||
log "✅ Python-Pakete erfolgreich installiert"
|
||||
}
|
||||
|
||||
# =========================== SSL-ZERTIFIKATE ===========================
|
||||
install_ssl_certificates() {
|
||||
log "=== SSL-ZERTIFIKATE KONFIGURATION ==="
|
||||
|
||||
progress "Aktualisiere CA-Zertifikate..."
|
||||
apt-get install -y ca-certificates openssl || error "CA-Zertifikate Installation fehlgeschlagen"
|
||||
update-ca-certificates || warning "CA-Zertifikate Update fehlgeschlagen"
|
||||
|
||||
# Mercedes Corporate Zertifikate (falls vorhanden)
|
||||
if [ -d "$CURRENT_DIR/certs/mercedes" ] && [ "$(ls -A $CURRENT_DIR/certs/mercedes 2>/dev/null)" ]; then
|
||||
progress "Installiere Mercedes Corporate Zertifikate..."
|
||||
|
||||
find "$CURRENT_DIR/certs/mercedes" -type f \( -name "*.crt" -o -name "*.pem" -o -name "*.cer" \) | while read cert_file; do
|
||||
local cert_basename=$(basename "$cert_file")
|
||||
local cert_name="${cert_basename%.*}"
|
||||
|
||||
progress "Verarbeite Mercedes-Zertifikat: $cert_basename"
|
||||
|
||||
# Zertifikat validieren und installieren
|
||||
if openssl x509 -in "$cert_file" -text -noout >/dev/null 2>&1; then
|
||||
cp "$cert_file" "/usr/local/share/ca-certificates/${cert_name}.crt"
|
||||
log "✅ Zertifikat installiert: ${cert_name}.crt"
|
||||
elif openssl x509 -in "$cert_file" -inform DER -text -noout >/dev/null 2>&1; then
|
||||
openssl x509 -in "$cert_file" -inform DER -out "/usr/local/share/ca-certificates/${cert_name}.crt" -outform PEM
|
||||
log "✅ DER-Zertifikat konvertiert und installiert: ${cert_name}.crt"
|
||||
else
|
||||
warning "⚠️ Ungültiges Zertifikat übersprungen: $cert_file"
|
||||
fi
|
||||
done
|
||||
|
||||
update-ca-certificates || warning "Mercedes Zertifikate Update fehlgeschlagen"
|
||||
fi
|
||||
|
||||
# SSL-Umgebungsvariablen setzen
|
||||
export SSL_CERT_FILE="/etc/ssl/certs/ca-certificates.crt"
|
||||
export REQUESTS_CA_BUNDLE="/etc/ssl/certs/ca-certificates.crt"
|
||||
export CURL_CA_BUNDLE="/etc/ssl/certs/ca-certificates.crt"
|
||||
|
||||
log "✅ SSL-Zertifikate konfiguriert"
|
||||
}
|
||||
|
||||
# =========================== ANWENDUNGS-DEPLOYMENT ===========================
|
||||
deploy_application() {
|
||||
log "=== ANWENDUNGS-DEPLOYMENT ==="
|
||||
|
||||
progress "Erstelle Zielverzeichnis: $APP_DIR"
|
||||
mkdir -p "$APP_DIR" || error "Konnte Zielverzeichnis nicht erstellen"
|
||||
|
||||
progress "Kopiere Anwendungsdateien..."
|
||||
|
||||
# Liste der zu kopierenden Dateien/Ordner
|
||||
local copy_items=(
|
||||
"app.py"
|
||||
"models.py"
|
||||
"requirements.txt"
|
||||
"blueprints/"
|
||||
"config/"
|
||||
"database/"
|
||||
"static/"
|
||||
"templates/"
|
||||
"uploads/"
|
||||
"utils/"
|
||||
"logs/"
|
||||
"certs/"
|
||||
)
|
||||
|
||||
# Sichere selektive Kopie
|
||||
for item in "${copy_items[@]}"; do
|
||||
if [ -e "$CURRENT_DIR/$item" ]; then
|
||||
progress "Kopiere: $item"
|
||||
cp -r "$CURRENT_DIR/$item" "$APP_DIR/" || warning "Fehler beim Kopieren von $item"
|
||||
else
|
||||
info "Überspringe nicht vorhandenes Element: $item"
|
||||
fi
|
||||
done
|
||||
|
||||
# Spezielle Dateien
|
||||
for file in "package.json" "package-lock.json" "tailwind.config.js" "postcss.config.js"; do
|
||||
if [ -f "$CURRENT_DIR/$file" ]; then
|
||||
cp "$CURRENT_DIR/$file" "$APP_DIR/" || warning "Fehler beim Kopieren von $file"
|
||||
fi
|
||||
done
|
||||
|
||||
# Erstelle notwendige Verzeichnisse
|
||||
mkdir -p "$APP_DIR"/{database/backups,logs/{app,auth,errors},uploads/temp,certs/localhost}
|
||||
|
||||
# Berechtigungen setzen
|
||||
chown -R root:root "$APP_DIR"
|
||||
chmod -R 755 "$APP_DIR"
|
||||
chmod 750 "$APP_DIR"/{database,logs,certs}
|
||||
chmod +x "$APP_DIR/app.py"
|
||||
|
||||
log "✅ Anwendung erfolgreich deployed"
|
||||
}
|
||||
|
||||
install_npm_dependencies() {
|
||||
log "=== NPM-ABHÄNGIGKEITEN INSTALLATION ==="
|
||||
|
||||
if [ -f "$APP_DIR/package.json" ]; then
|
||||
progress "Installiere npm-Abhängigkeiten..."
|
||||
|
||||
cd "$APP_DIR"
|
||||
|
||||
# npm install mit verschiedenen Fallback-Strategien
|
||||
if npm install --no-optional --no-audit --no-fund 2>/dev/null; then
|
||||
log "✅ npm install erfolgreich (Standard)"
|
||||
elif npm install --legacy-peer-deps --no-optional 2>/dev/null; then
|
||||
log "✅ npm install erfolgreich (Legacy-Modus)"
|
||||
elif npm install --force 2>/dev/null; then
|
||||
log "✅ npm install erfolgreich (Force-Modus)"
|
||||
else
|
||||
warning "⚠️ npm install fehlgeschlagen - überspringe"
|
||||
fi
|
||||
|
||||
cd "$CURRENT_DIR"
|
||||
else
|
||||
info "Keine package.json gefunden - überspringe npm-Installation"
|
||||
fi
|
||||
|
||||
log "✅ NPM-Abhängigkeiten verarbeitet"
|
||||
}
|
||||
|
||||
# =========================== SSL-ZERTIFIKAT GENERIERUNG ===========================
|
||||
generate_ssl_certificate() {
|
||||
log "=== SSL-ZERTIFIKAT GENERIERUNG ==="
|
||||
|
||||
progress "Generiere selbstsigniertes SSL-Zertifikat für localhost..."
|
||||
|
||||
local cert_dir="$APP_DIR/certs/localhost"
|
||||
mkdir -p "$cert_dir"
|
||||
|
||||
# Generiere privaten Schlüssel
|
||||
openssl genrsa -out "$cert_dir/localhost.key" 2048 || error "Fehler beim Generieren des privaten Schlüssels"
|
||||
|
||||
# Generiere Zertifikat
|
||||
openssl req -new -x509 -key "$cert_dir/localhost.key" -out "$cert_dir/localhost.crt" -days 365 \
|
||||
-subj "/C=DE/ST=Baden-Wuerttemberg/L=Stuttgart/O=Mercedes-Benz/OU=IT/CN=localhost" \
|
||||
|| error "Fehler beim Generieren des SSL-Zertifikats"
|
||||
|
||||
# Berechtigungen setzen
|
||||
chmod 600 "$cert_dir/localhost.key"
|
||||
chmod 644 "$cert_dir/localhost.crt"
|
||||
|
||||
log "✅ SSL-Zertifikat erfolgreich generiert"
|
||||
}
|
||||
|
||||
# =========================== SYSTEMD-SERVICES ===========================
|
||||
install_systemd_services() {
|
||||
log "=== SYSTEMD-SERVICES INSTALLATION ==="
|
||||
|
||||
# Prüfe ob systemd-Verzeichnis existiert
|
||||
if [ ! -d "$SYSTEMD_DIR" ]; then
|
||||
error "systemd-Verzeichnis nicht gefunden: $SYSTEMD_DIR"
|
||||
fi
|
||||
|
||||
progress "Kopiere Service-Dateien nach $SYSTEM_SYSTEMD_DIR..."
|
||||
|
||||
# Kopiere alle Service-Dateien
|
||||
local service_files=(
|
||||
"$HTTPS_SERVICE_NAME.service"
|
||||
"$KIOSK_SERVICE_NAME.service"
|
||||
"$WATCHDOG_SERVICE_NAME.service"
|
||||
"$WATCHDOG_PYTHON_SERVICE_NAME.service"
|
||||
)
|
||||
|
||||
for service_file in "${service_files[@]}"; do
|
||||
if [ -f "$SYSTEMD_DIR/$service_file" ]; then
|
||||
progress "Kopiere Service: $service_file"
|
||||
cp "$SYSTEMD_DIR/$service_file" "$SYSTEM_SYSTEMD_DIR/" || error "Fehler beim Kopieren von $service_file"
|
||||
else
|
||||
warning "Service-Datei nicht gefunden: $service_file"
|
||||
fi
|
||||
done
|
||||
|
||||
# Systemd-Konfiguration neu laden
|
||||
progress "Lade systemd-Konfiguration neu..."
|
||||
systemctl daemon-reload || error "systemctl daemon-reload fehlgeschlagen"
|
||||
|
||||
log "✅ Systemd-Services installiert"
|
||||
}
|
||||
|
||||
enable_and_start_services() {
|
||||
log "=== SERVICES AKTIVIEREN UND STARTEN ==="
|
||||
|
||||
# HTTPS-Service aktivieren und starten
|
||||
progress "Aktiviere und starte HTTPS-Service..."
|
||||
systemctl enable "$HTTPS_SERVICE_NAME" || error "Fehler beim Aktivieren des HTTPS-Service"
|
||||
systemctl start "$HTTPS_SERVICE_NAME" || error "Fehler beim Starten des HTTPS-Service"
|
||||
|
||||
# Warte kurz und prüfe Status
|
||||
sleep 5
|
||||
if systemctl is-active --quiet "$HTTPS_SERVICE_NAME"; then
|
||||
log "✅ HTTPS-Service läuft erfolgreich"
|
||||
else
|
||||
error "❌ HTTPS-Service konnte nicht gestartet werden"
|
||||
fi
|
||||
|
||||
# Kiosk-Service aktivieren (aber nicht starten - wird beim nächsten Boot gestartet)
|
||||
progress "Aktiviere Kiosk-Service..."
|
||||
systemctl enable "$KIOSK_SERVICE_NAME" || warning "Fehler beim Aktivieren des Kiosk-Service"
|
||||
|
||||
# Watchdog-Service aktivieren und starten
|
||||
progress "Aktiviere und starte Watchdog-Service..."
|
||||
systemctl enable "$WATCHDOG_SERVICE_NAME" || warning "Fehler beim Aktivieren des Watchdog-Service"
|
||||
systemctl start "$WATCHDOG_SERVICE_NAME" || warning "Fehler beim Starten des Watchdog-Service"
|
||||
|
||||
log "✅ Services erfolgreich konfiguriert"
|
||||
}
|
||||
|
||||
# =========================== SYSTEM-TEST ===========================
|
||||
test_application() {
|
||||
log "=== SYSTEM-TEST ==="
|
||||
|
||||
progress "Teste HTTPS-Verbindung..."
|
||||
|
||||
# Warte auf Service-Start
|
||||
local max_attempts=30
|
||||
local attempt=1
|
||||
|
||||
while [ $attempt -le $max_attempts ]; do
|
||||
if curl -k -s --connect-timeout 5 "$HTTPS_URL" >/dev/null 2>&1; then
|
||||
success "✅ HTTPS-Backend erreichbar unter $HTTPS_URL"
|
||||
break
|
||||
fi
|
||||
|
||||
progress "Warte auf HTTPS-Backend... ($attempt/$max_attempts)"
|
||||
sleep 2
|
||||
((attempt++))
|
||||
done
|
||||
|
||||
if [ $attempt -gt $max_attempts ]; then
|
||||
error "❌ HTTPS-Backend nicht erreichbar nach $max_attempts Versuchen"
|
||||
fi
|
||||
|
||||
# Teste SSL-Zertifikat
|
||||
progress "Teste SSL-Zertifikat..."
|
||||
if openssl s_client -connect localhost:443 -servername localhost </dev/null 2>/dev/null | openssl x509 -noout -text >/dev/null 2>&1; then
|
||||
success "✅ SSL-Zertifikat gültig"
|
||||
else
|
||||
warning "⚠️ SSL-Zertifikat-Test fehlgeschlagen"
|
||||
fi
|
||||
|
||||
log "✅ System-Test abgeschlossen"
|
||||
}
|
||||
|
||||
# =========================== AUFRÄUMEN ===========================
|
||||
cleanup_old_files() {
|
||||
log "=== AUFRÄUMEN ALTE DATEIEN ==="
|
||||
|
||||
progress "Entferne alte Shell-Skripte..."
|
||||
|
||||
# Entferne alte Skripte (falls vorhanden)
|
||||
local old_scripts=("combined.sh" "installer.sh")
|
||||
|
||||
for script in "${old_scripts[@]}"; do
|
||||
if [ -f "$CURRENT_DIR/$script" ]; then
|
||||
progress "Entferne: $script"
|
||||
rm -f "$CURRENT_DIR/$script" || warning "Fehler beim Entfernen von $script"
|
||||
fi
|
||||
done
|
||||
|
||||
log "✅ Aufräumen abgeschlossen"
|
||||
}
|
||||
|
||||
# =========================== HAUPTMENÜ ===========================
|
||||
show_menu() {
|
||||
clear
|
||||
echo -e "${CYAN}=================================================================${NC}"
|
||||
echo -e "${CYAN} $APP_NAME - Setup-Skript v$APP_VERSION${NC}"
|
||||
echo -e "${CYAN}=================================================================${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Bitte wählen Sie eine Option:${NC}"
|
||||
echo ""
|
||||
echo -e "${GREEN}1)${NC} Nur Abhängigkeiten installieren und System vorbereiten"
|
||||
echo -e " ${BLUE}→ Python, Node.js, SSL-Zertifikate, minimaler Test${NC}"
|
||||
echo ""
|
||||
echo -e "${GREEN}2)${NC} Finale Installation mit kompletter Kiosk-Modus-Konfiguration"
|
||||
echo -e " ${BLUE}→ Desktop entfernen, Autologin, Services aktivieren${NC}"
|
||||
echo ""
|
||||
echo -e "${GREEN}3)${NC} Nur Services installieren/aktualisieren"
|
||||
echo -e " ${BLUE}→ Systemd-Services aus systemd/ Verzeichnis kopieren${NC}"
|
||||
echo ""
|
||||
echo -e "${GREEN}4)${NC} System-Test durchführen"
|
||||
echo -e " ${BLUE}→ HTTPS-Verbindung und SSL-Zertifikat testen${NC}"
|
||||
echo ""
|
||||
echo -e "${GREEN}5)${NC} Beenden"
|
||||
echo ""
|
||||
echo -e "${CYAN}=================================================================${NC}"
|
||||
echo -n "Ihre Wahl [1-5]: "
|
||||
}
|
||||
|
||||
# =========================== INSTALLATIONS-MODI ===========================
|
||||
install_dependencies_only() {
|
||||
log "=== MODUS: NUR ABHÄNGIGKEITEN INSTALLIEREN ==="
|
||||
|
||||
check_root
|
||||
check_debian_system
|
||||
check_internet_connection
|
||||
|
||||
update_system
|
||||
install_python_dependencies
|
||||
install_nodejs_npm
|
||||
install_ssl_certificates
|
||||
install_python_packages
|
||||
deploy_application
|
||||
install_npm_dependencies
|
||||
generate_ssl_certificate
|
||||
|
||||
# Minimaler Test
|
||||
progress "Starte minimalen Test..."
|
||||
cd "$APP_DIR"
|
||||
|
||||
# Teste Python-Import
|
||||
if python3 -c "import sys; sys.path.insert(0, '$APP_DIR'); from app import app; print('✅ Flask-App erfolgreich importiert')" 2>/dev/null; then
|
||||
success "✅ Python-Abhängigkeiten funktionieren"
|
||||
else
|
||||
error "❌ Python-Import fehlgeschlagen"
|
||||
fi
|
||||
|
||||
cd "$CURRENT_DIR"
|
||||
|
||||
success "✅ Abhängigkeiten-Installation abgeschlossen!"
|
||||
info "Das System ist bereit für die finale Kiosk-Installation (Option 2)"
|
||||
}
|
||||
|
||||
install_full_kiosk() {
|
||||
log "=== MODUS: FINALE KIOSK-INSTALLATION ==="
|
||||
|
||||
check_root
|
||||
check_debian_system
|
||||
|
||||
# Führe zuerst Abhängigkeiten-Installation durch (falls noch nicht geschehen)
|
||||
if [ ! -d "$APP_DIR" ] || [ ! -f "$APP_DIR/app.py" ]; then
|
||||
warning "Anwendung noch nicht deployed - führe Abhängigkeiten-Installation durch..."
|
||||
install_dependencies_only
|
||||
fi
|
||||
|
||||
remove_desktop_environments
|
||||
install_minimal_x11
|
||||
create_kiosk_user
|
||||
configure_autologin
|
||||
install_systemd_services
|
||||
enable_and_start_services
|
||||
test_application
|
||||
cleanup_old_files
|
||||
|
||||
success "✅ Finale Kiosk-Installation abgeschlossen!"
|
||||
info "Das System wird beim nächsten Neustart automatisch im Kiosk-Modus starten"
|
||||
warning "⚠️ Neustart empfohlen: sudo reboot"
|
||||
}
|
||||
|
||||
install_services_only() {
|
||||
log "=== MODUS: NUR SERVICES INSTALLIEREN ==="
|
||||
|
||||
check_root
|
||||
install_systemd_services
|
||||
|
||||
# Frage ob Services aktiviert werden sollen
|
||||
echo ""
|
||||
echo -n "Services aktivieren und starten? [j/N]: "
|
||||
read -r activate_services
|
||||
|
||||
if [[ "$activate_services" =~ ^[Jj]$ ]]; then
|
||||
enable_and_start_services
|
||||
else
|
||||
info "Services installiert aber nicht aktiviert"
|
||||
info "Manuell aktivieren mit: sudo systemctl enable $HTTPS_SERVICE_NAME"
|
||||
fi
|
||||
|
||||
success "✅ Service-Installation abgeschlossen!"
|
||||
}
|
||||
|
||||
run_system_test() {
|
||||
log "=== MODUS: SYSTEM-TEST ==="
|
||||
|
||||
test_application
|
||||
|
||||
# Zusätzliche Tests
|
||||
progress "Prüfe Service-Status..."
|
||||
|
||||
local services=("$HTTPS_SERVICE_NAME" "$KIOSK_SERVICE_NAME" "$WATCHDOG_SERVICE_NAME")
|
||||
|
||||
for service in "${services[@]}"; do
|
||||
if systemctl is-enabled --quiet "$service" 2>/dev/null; then
|
||||
if systemctl is-active --quiet "$service"; then
|
||||
success "✅ $service: aktiv und läuft"
|
||||
else
|
||||
warning "⚠️ $service: aktiviert aber läuft nicht"
|
||||
fi
|
||||
else
|
||||
info "ℹ️ $service: nicht aktiviert"
|
||||
fi
|
||||
done
|
||||
|
||||
success "✅ System-Test abgeschlossen!"
|
||||
}
|
||||
|
||||
# =========================== HAUPTPROGRAMM ===========================
|
||||
main() {
|
||||
# Erstelle Log-Datei
|
||||
touch "$INSTALL_LOG" || true
|
||||
|
||||
while true; do
|
||||
show_menu
|
||||
read -r choice
|
||||
|
||||
case $choice in
|
||||
1)
|
||||
install_dependencies_only
|
||||
echo ""
|
||||
echo -n "Drücken Sie Enter um fortzufahren..."
|
||||
read -r
|
||||
;;
|
||||
2)
|
||||
install_full_kiosk
|
||||
echo ""
|
||||
echo -n "Drücken Sie Enter um fortzufahren..."
|
||||
read -r
|
||||
;;
|
||||
3)
|
||||
install_services_only
|
||||
echo ""
|
||||
echo -n "Drücken Sie Enter um fortzufahren..."
|
||||
read -r
|
||||
;;
|
||||
4)
|
||||
run_system_test
|
||||
echo ""
|
||||
echo -n "Drücken Sie Enter um fortzufahren..."
|
||||
read -r
|
||||
;;
|
||||
5)
|
||||
log "Setup-Skript beendet"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
error "Ungültige Auswahl. Bitte wählen Sie 1-5."
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
# Skript starten
|
||||
main "$@"
|
@ -650,7 +650,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
document.getElementById('modal-optimize-db').addEventListener('click', optimizeDatabase);
|
||||
document.getElementById('modal-create-backup').addEventListener('click', createBackup);
|
||||
document.getElementById('modal-advanced-settings').addEventListener('click', function() {
|
||||
window.location.href = '{{ url_for("admin_settings") }}';
|
||||
window.location.href = '{{ url_for("optimization_settings") }}';
|
||||
});
|
||||
});
|
||||
|
||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user