diff --git a/IHK_Projektdokumentation/IHK_Projektdokumentation_Final.docx b/IHK_Projektdokumentation/Dokumentation_Final_Markdown/IHK_Projektdokumentation_Final.docx similarity index 100% rename from IHK_Projektdokumentation/IHK_Projektdokumentation_Final.docx rename to IHK_Projektdokumentation/Dokumentation_Final_Markdown/IHK_Projektdokumentation_Final.docx diff --git a/IHK_Projektdokumentation/Dokumentation_Final_Markdown/IHK_Projektdokumentation_Final_Enhanced.docx b/IHK_Projektdokumentation/Dokumentation_Final_Markdown/IHK_Projektdokumentation_Final_Enhanced.docx new file mode 100644 index 00000000..ed991c1d Binary files /dev/null and b/IHK_Projektdokumentation/Dokumentation_Final_Markdown/IHK_Projektdokumentation_Final_Enhanced.docx differ diff --git a/IHK_Projektdokumentation/convert_to_word.py b/IHK_Projektdokumentation/Dokumentation_Final_Markdown/convert_to_word.py similarity index 100% rename from IHK_Projektdokumentation/convert_to_word.py rename to IHK_Projektdokumentation/Dokumentation_Final_Markdown/convert_to_word.py diff --git a/IHK_Projektdokumentation/Dokumentation_Final_Markdown/convert_to_word_enhanced.py b/IHK_Projektdokumentation/Dokumentation_Final_Markdown/convert_to_word_enhanced.py new file mode 100644 index 00000000..d511753e --- /dev/null +++ b/IHK_Projektdokumentation/Dokumentation_Final_Markdown/convert_to_word_enhanced.py @@ -0,0 +1,442 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Erweiterte Konvertierung der IHK-Projektdokumentation von Markdown nach Word (DOCX) +mit vollständiger IHK-konformer Formatierung. +""" + +import os +import re +from docx import Document +from docx.shared import Pt, Inches, RGBColor, Cm +from docx.enum.text import WD_ALIGN_PARAGRAPH, WD_LINE_SPACING +from docx.enum.style import WD_STYLE_TYPE +from docx.enum.section import WD_SECTION +from docx.oxml import OxmlElement +from docx.oxml.ns import qn + +def create_element(name): + """Hilfsfunktion zum Erstellen von XML-Elementen""" + return OxmlElement(name) + +def create_attribute(element, name, value): + """Hilfsfunktion zum Setzen von XML-Attributen""" + element.set(qn(name), value) + +def add_page_numbers(doc): + """Fügt Seitenzahlen in die Fußzeile ein""" + for section in doc.sections: + footer = section.footer + footer_para = footer.paragraphs[0] + footer_para.alignment = WD_ALIGN_PARAGRAPH.CENTER + + # Füge Seitenzahl hinzu + fldChar1 = create_element('w:fldChar') + create_attribute(fldChar1, 'w:fldCharType', 'begin') + + instrText = create_element('w:instrText') + instrText.text = " PAGE " + + fldChar2 = create_element('w:fldChar') + create_attribute(fldChar2, 'w:fldCharType', 'end') + + footer_para._p.append(fldChar1) + footer_para._p.append(instrText) + footer_para._p.append(fldChar2) + +def add_header(doc): + """Fügt Kopfzeile mit Projektinformationen hinzu""" + for section in doc.sections[1:]: # Skip erste Seite (Titelseite) + header = section.header + header_para = header.paragraphs[0] + header_para.text = "IHK-Projektdokumentation - MYP – Manage Your Printer" + header_para.alignment = WD_ALIGN_PARAGRAPH.RIGHT + header_para.style.font.size = Pt(10) + header_para.style.font.italic = True + +def create_ihk_styles(doc): + """Erstellt erweiterte IHK-konforme Formatvorlagen""" + + # Normaler Text mit IHK-Spezifikationen + normal_style = doc.styles['Normal'] + normal_style.font.name = 'Arial' + normal_style.font.size = Pt(11) + normal_style.paragraph_format.line_spacing_rule = WD_LINE_SPACING.ONE_POINT_FIVE + normal_style.paragraph_format.space_after = Pt(6) + normal_style.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY + normal_style.paragraph_format.first_line_indent = Cm(0.5) # Einzug erste Zeile + + # Überschrift 1 - Hauptkapitel + h1_style = doc.styles['Heading 1'] + h1_style.font.name = 'Arial' + h1_style.font.size = Pt(16) + h1_style.font.bold = True + h1_style.font.color.rgb = RGBColor(0, 0, 0) + h1_style.paragraph_format.space_before = Pt(24) + h1_style.paragraph_format.space_after = Pt(12) + h1_style.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.LEFT + h1_style.paragraph_format.keep_with_next = True + h1_style.paragraph_format.page_break_before = False # Kein automatischer Seitenumbruch + + # Überschrift 2 - Unterkapitel + h2_style = doc.styles['Heading 2'] + h2_style.font.name = 'Arial' + h2_style.font.size = Pt(14) + h2_style.font.bold = True + h2_style.font.color.rgb = RGBColor(0, 0, 0) + h2_style.paragraph_format.space_before = Pt(18) + h2_style.paragraph_format.space_after = Pt(6) + h2_style.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.LEFT + h2_style.paragraph_format.keep_with_next = True + + # Überschrift 3 - Abschnitte + h3_style = doc.styles['Heading 3'] + h3_style.font.name = 'Arial' + h3_style.font.size = Pt(12) + h3_style.font.bold = True + h3_style.font.color.rgb = RGBColor(0, 0, 0) + h3_style.paragraph_format.space_before = Pt(12) + h3_style.paragraph_format.space_after = Pt(6) + h3_style.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.LEFT + h3_style.paragraph_format.keep_with_next = True + + # Aufzählungsstil + bullet_style = doc.styles['List Bullet'] + bullet_style.font.name = 'Arial' + bullet_style.font.size = Pt(11) + bullet_style.paragraph_format.left_indent = Cm(1.0) + bullet_style.paragraph_format.first_line_indent = Cm(-0.5) + bullet_style.paragraph_format.space_after = Pt(3) + + # Code-Style für technische Begriffe + try: + code_style = doc.styles.add_style('Code', WD_STYLE_TYPE.CHARACTER) + except: + code_style = doc.styles['Code'] + code_style.font.name = 'Courier New' + code_style.font.size = Pt(10) + code_style.font.color.rgb = RGBColor(0, 0, 139) # Dunkelblau + + # Zitat-Style + try: + quote_style = doc.styles.add_style('Quote', WD_STYLE_TYPE.PARAGRAPH) + except: + quote_style = doc.styles['Quote'] + quote_style.font.name = 'Arial' + quote_style.font.size = Pt(10) + quote_style.font.italic = True + quote_style.paragraph_format.left_indent = Cm(1.0) + quote_style.paragraph_format.right_indent = Cm(1.0) + quote_style.paragraph_format.space_before = Pt(6) + quote_style.paragraph_format.space_after = Pt(6) + + return doc + +def setup_document_layout(doc): + """Richtet das erweiterte Dokumentlayout nach IHK-Vorgaben ein""" + for section in doc.sections: + # IHK-Standard Seitenränder + section.top_margin = Cm(2.5) + section.bottom_margin = Cm(2.0) + section.left_margin = Cm(2.5) + section.right_margin = Cm(2.0) + + # A4 Format + section.page_height = Cm(29.7) + section.page_width = Cm(21.0) + + # Kopf- und Fußzeilenabstand + section.header_distance = Cm(1.25) + section.footer_distance = Cm(1.25) + +def add_enhanced_title_page(doc): + """Fügt eine erweiterte IHK-konforme Titelseite hinzu""" + + # Logo-Platzhalter + p = doc.add_paragraph() + p.alignment = WD_ALIGN_PARAGRAPH.RIGHT + p.add_run('[Mercedes-Benz Logo]').italic = True + + # Leerzeilen + for _ in range(3): + doc.add_paragraph() + + # Prüfungsinformationen + p = doc.add_paragraph() + p.alignment = WD_ALIGN_PARAGRAPH.CENTER + run = p.add_run('Abschlussprüfung Sommer 2025') + run.font.size = Pt(14) + run.font.bold = True + + p = doc.add_paragraph() + p.alignment = WD_ALIGN_PARAGRAPH.CENTER + run = p.add_run('Industrie- und Handelskammer Berlin') + run.font.size = Pt(12) + + doc.add_paragraph() + + p = doc.add_paragraph() + p.alignment = WD_ALIGN_PARAGRAPH.CENTER + run = p.add_run('Fachinformatiker für digitale Vernetzung') + run.font.size = Pt(16) + run.font.bold = True + + for _ in range(2): + doc.add_paragraph() + + # Dokumenttyp + p = doc.add_paragraph() + p.alignment = WD_ALIGN_PARAGRAPH.CENTER + run = p.add_run('Dokumentation der betrieblichen Projektarbeit') + run.font.size = Pt(14) + + for _ in range(2): + doc.add_paragraph() + + # Projekttitel + p = doc.add_paragraph() + p.alignment = WD_ALIGN_PARAGRAPH.CENTER + run = p.add_run('MYP – Manage Your Printer') + run.font.size = Pt(20) + run.font.bold = True + + doc.add_paragraph() + + p = doc.add_paragraph() + p.alignment = WD_ALIGN_PARAGRAPH.CENTER + p.add_run('Digitalisierung des 3D-Drucker-Reservierungsprozesses\n') + p.add_run('durch Etablierung der cyberphysischen Kommunikation\n') + p.add_run('mit relevanten Hardwarekomponenten') + + # Füllung + for _ in range(6): + doc.add_paragraph() + + # Informationsblock am Seitenende + table = doc.add_table(rows=2, cols=2) + table.alignment = WD_ALIGN_PARAGRAPH.CENTER + table.style = 'Table Grid' + + # Ausbildungsbetrieb + cell = table.cell(0, 0) + p = cell.paragraphs[0] + p.add_run('Ausbildungsbetrieb:').bold = True + cell.add_paragraph('Mercedes-Benz AG') + cell.add_paragraph('Daimlerstraße 143') + cell.add_paragraph('12277 Berlin') + + # Prüfungsbewerber + cell = table.cell(0, 1) + p = cell.paragraphs[0] + p.add_run('Prüfungsbewerber:').bold = True + cell.add_paragraph('Till Tomczak') + cell.add_paragraph('Hainbuchenstraße 19') + cell.add_paragraph('16761 Hennigsdorf') + + # Abgabedatum + cell = table.cell(1, 0) + p = cell.paragraphs[0] + p.add_run('Abgabedatum:').bold = True + cell.add_paragraph('5. Juni 2025') + + # Prüflingsnummer + cell = table.cell(1, 1) + p = cell.paragraphs[0] + p.add_run('Prüflingsnummer:').bold = True + cell.add_paragraph('[Wird von IHK vergeben]') + + # Seitenumbruch + doc.add_page_break() + +def process_enhanced_content(content): + """Erweiterte Verarbeitung des Markdown-Inhalts""" + # Entferne den Header-Bereich + content = re.sub(r'^.*?(?=# 1\. Einleitung)', '', content, flags=re.DOTALL) + + # Verbessere Formatierung + content = re.sub(r'–', '–', content) # Korrekter Gedankenstrich + content = re.sub(r'\.\.\.', '…', content) # Auslassungspunkte + content = re.sub(r'"([^"]*)"', '„\\1"', content) # Deutsche Anführungszeichen + + return content + +def add_enhanced_content(doc, content): + """Fügt Inhalt mit erweiterter Formatierung hinzu""" + lines = content.split('\n') + current_paragraph = None + in_list = False + + for i, line in enumerate(lines): + # Überschriften + if line.startswith('# '): + heading = line[2:].strip() + doc.add_heading(heading, level=1) + current_paragraph = None + in_list = False + + elif line.startswith('## '): + heading = line[3:].strip() + doc.add_heading(heading, level=2) + current_paragraph = None + in_list = False + + elif line.startswith('### '): + heading = line[4:].strip() + doc.add_heading(heading, level=3) + current_paragraph = None + in_list = False + + elif line.startswith('#### '): + heading = line[5:].strip() + p = doc.add_paragraph() + p.add_run(heading + ':').bold = True + current_paragraph = None + in_list = False + + # Listen + elif line.strip().startswith('- '): + text = line.strip()[2:] + p = doc.add_paragraph(text, style='List Bullet') + in_list = True + current_paragraph = None + + # Normaler Text + elif line.strip(): + if not in_list: + if current_paragraph is None: + current_paragraph = doc.add_paragraph() + else: + current_paragraph.add_run(' ') + + process_enhanced_inline_formatting(current_paragraph, line.strip()) + else: + in_list = False + current_paragraph = doc.add_paragraph() + process_enhanced_inline_formatting(current_paragraph, line.strip()) + + # Leerzeile + else: + current_paragraph = None + if not in_list: + in_list = False + +def process_enhanced_inline_formatting(paragraph, text): + """Erweiterte Inline-Formatierung mit besserer Erkennung""" + # Komplexere Regex für verschachtelte Formatierungen + pattern = r'(\*\*[^*]+\*\*|\*[^*]+\*|`[^`]+`|„[^"]+"|‚[^\']+\')' + parts = re.split(pattern, text) + + for part in parts: + if not part: + continue + + if part.startswith('**') and part.endswith('**'): + # Fett + paragraph.add_run(part[2:-2]).bold = True + elif part.startswith('*') and part.endswith('*') and not part.startswith('**'): + # Kursiv + paragraph.add_run(part[1:-1]).italic = True + elif part.startswith('`') and part.endswith('`'): + # Code/Technische Begriffe + run = paragraph.add_run(part[1:-1]) + run.font.name = 'Courier New' + run.font.size = Pt(10) + run.font.color.rgb = RGBColor(0, 0, 139) + elif part.startswith('„') or part.startswith('"'): + # Zitate + run = paragraph.add_run(part) + run.italic = True + else: + # Normaler Text + paragraph.add_run(part) + +def add_appendix_placeholder(doc): + """Fügt Platzhalter für Anhänge hinzu""" + doc.add_page_break() + doc.add_heading('Anlagen', level=1) + + doc.add_heading('A. Netzwerkdiagramme und Systemarchitektur', level=2) + p = doc.add_paragraph('[Hier Netzwerkdiagramme einfügen]') + p.italic = True + + doc.add_heading('B. API-Dokumentation', level=2) + p = doc.add_paragraph('[Hier API-Dokumentation einfügen]') + p.italic = True + + doc.add_heading('C. Benutzerhandbuch', level=2) + p = doc.add_paragraph('[Hier Benutzerhandbuch einfügen]') + p.italic = True + + doc.add_heading('D. Testprotokolle', level=2) + p = doc.add_paragraph('[Hier Testprotokolle einfügen]') + p.italic = True + + doc.add_heading('E. Screenshots der Benutzeroberfläche', level=2) + p = doc.add_paragraph('[Hier Screenshots einfügen]') + p.italic = True + + doc.add_heading('F. Konfigurationsdateien und Deployment-Skripte', level=2) + p = doc.add_paragraph('[Hier relevante Konfigurationsdateien einfügen]') + p.italic = True + +def main(): + """Hauptfunktion""" + input_file = 'Dokumentation_Final_Markdown/Dokumentation.md' + output_file = 'IHK_Projektdokumentation_Final_Enhanced.docx' + + print("Lese Markdown-Datei...") + with open(input_file, 'r', encoding='utf-8') as f: + content = f.read() + + print("Erstelle Word-Dokument mit erweiterten IHK-Formatierungen...") + doc = Document() + + # Konfiguration + print("Konfiguriere Dokumentlayout und Styles...") + create_ihk_styles(doc) + setup_document_layout(doc) + + # Titelseite + print("Erstelle erweiterte Titelseite...") + add_enhanced_title_page(doc) + + # Kopf- und Fußzeilen + print("Füge Kopf- und Fußzeilen hinzu...") + add_header(doc) + add_page_numbers(doc) + + # Inhaltsverzeichnis + print("Füge Inhaltsverzeichnis-Platzhalter hinzu...") + doc.add_heading('Inhaltsverzeichnis', level=1) + p = doc.add_paragraph() + p.add_run('Bitte generieren Sie das Inhaltsverzeichnis über:\n') + p.add_run('Verweise → Inhaltsverzeichnis → Automatisches Verzeichnis 1\n\n') + p.add_run('Stellen Sie sicher, dass alle Überschriften korrekt als Überschrift 1-3 formatiert sind.') + p.italic = True + doc.add_page_break() + + # Hauptinhalt + print("Verarbeite und füge Hauptinhalt hinzu...") + processed_content = process_enhanced_content(content) + add_enhanced_content(doc, processed_content) + + # Anhänge + print("Füge Anhang-Platzhalter hinzu...") + add_appendix_placeholder(doc) + + # Speichern + print(f"Speichere Dokument als {output_file}...") + doc.save(output_file) + + print("\nKonvertierung erfolgreich abgeschlossen!") + print("\nWichtige Nachbearbeitungsschritte:") + print("1. Generieren Sie das Inhaltsverzeichnis (Verweise → Inhaltsverzeichnis)") + print("2. Überprüfen Sie alle Seitenumbrüche") + print("3. Fügen Sie fehlende Abbildungen und Diagramme ein") + print("4. Prüfen Sie die Seitennummerierung") + print("5. Ergänzen Sie die Anlagen mit den tatsächlichen Dokumenten") + print("6. Führen Sie eine finale Rechtschreibprüfung durch") + print("\nDie Datei entspricht nun den IHK-Formatvorgaben!") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/backend/database/myp.db b/backend/database/myp.db index 8cef9eac..82bc5380 100644 Binary files a/backend/database/myp.db and b/backend/database/myp.db differ diff --git a/backend/database/myp.db-shm b/backend/database/myp.db-shm deleted file mode 100644 index dc2b43cb..00000000 Binary files a/backend/database/myp.db-shm and /dev/null differ diff --git a/backend/database/myp.db-wal b/backend/database/myp.db-wal deleted file mode 100644 index 1622f658..00000000 Binary files a/backend/database/myp.db-wal and /dev/null differ diff --git a/backend/logs/analytics/analytics.log b/backend/logs/analytics/analytics.log index c81c6ebc..d90185fe 100644 --- a/backend/logs/analytics/analytics.log +++ b/backend/logs/analytics/analytics.log @@ -128,3 +128,4 @@ 2025-06-03 22:00:22 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert 2025-06-03 22:15:15 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert 2025-06-03 22:15:51 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert +2025-06-03 23:03:59 - [analytics] analytics - [INFO] INFO - 📈 Analytics Engine initialisiert diff --git a/backend/logs/auth/auth.log b/backend/logs/auth/auth.log index efb112e9..70533f1e 100644 --- a/backend/logs/auth/auth.log +++ b/backend/logs/auth/auth.log @@ -937,3 +937,4 @@ 2025-06-03 20:42:22 - [auth] auth - [INFO] INFO - 🔐 Neue Session erstellt für Benutzer admin@mercedes-benz.com von IP 127.0.0.1 2025-06-03 22:15:28 - [auth] auth - [INFO] INFO - 🕒 Automatische Abmeldung: Benutzer admin@mercedes-benz.com war 85.0 Minuten inaktiv (Limit: 60min) 2025-06-03 22:15:28 - [auth] auth - [INFO] INFO - 🔐 Neue Session erstellt für Benutzer admin@mercedes-benz.com von IP 10.0.2.2 +2025-06-03 23:04:06 - [auth] auth - [WARNING] WARNING - ⚠️ IP-Adresse geändert für Benutzer admin@mercedes-benz.com: 10.0.2.2 → 127.0.0.1 diff --git a/backend/logs/backup/backup.log b/backend/logs/backup/backup.log index 71c5704a..a5203c24 100644 --- a/backend/logs/backup/backup.log +++ b/backend/logs/backup/backup.log @@ -133,3 +133,4 @@ 2025-06-03 22:00:22 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation) 2025-06-03 22:15:15 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation) 2025-06-03 22:15:51 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation) +2025-06-03 23:03:59 - [backup] backup - [INFO] INFO - BackupManager initialisiert (minimal implementation) diff --git a/backend/logs/dashboard/dashboard.log b/backend/logs/dashboard/dashboard.log index fcf00db3..fc777a73 100644 --- a/backend/logs/dashboard/dashboard.log +++ b/backend/logs/dashboard/dashboard.log @@ -514,3 +514,7 @@ 2025-06-03 22:15:51 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet 2025-06-03 22:15:51 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit eventlet initialisiert 2025-06-03 22:15:51 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: eventlet) +2025-06-03 23:04:00 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet +2025-06-03 23:04:00 - [dashboard] dashboard - [INFO] INFO - Dashboard-Background-Worker gestartet +2025-06-03 23:04:00 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server wird mit threading initialisiert (eventlet-Fallback) +2025-06-03 23:04:00 - [dashboard] dashboard - [INFO] INFO - Dashboard WebSocket-Server initialisiert (async_mode: threading) diff --git a/backend/logs/database/database.log b/backend/logs/database/database.log index 02420862..4f016171 100644 --- a/backend/logs/database/database.log +++ b/backend/logs/database/database.log @@ -129,3 +129,4 @@ 2025-06-03 22:00:22 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet 2025-06-03 22:15:15 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet 2025-06-03 22:15:51 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet +2025-06-03 23:03:59 - [database] database - [INFO] INFO - Datenbank-Wartungs-Scheduler gestartet diff --git a/backend/logs/database_cleanup/database_cleanup.log b/backend/logs/database_cleanup/database_cleanup.log index 788f2d88..ed8660df 100644 --- a/backend/logs/database_cleanup/database_cleanup.log +++ b/backend/logs/database_cleanup/database_cleanup.log @@ -49,3 +49,6 @@ 2025-06-03 22:15:51 - [database_cleanup] database_cleanup - [INFO] INFO - 🧹 Starte umfassendes Datenbank-Cleanup... 2025-06-03 22:15:51 - [database_cleanup] database_cleanup - [INFO] INFO - 📝 Schritt 1: Schließe alle Datenbankverbindungen... 2025-06-03 22:15:51 - [database_cleanup] database_cleanup - [INFO] INFO - 🔄 Schließe alle aktiven Datenbankverbindungen... +2025-06-03 23:04:01 - [database_cleanup] database_cleanup - [INFO] INFO - 🧹 Starte umfassendes Datenbank-Cleanup... +2025-06-03 23:04:01 - [database_cleanup] database_cleanup - [INFO] INFO - 📝 Schritt 1: Schließe alle Datenbankverbindungen... +2025-06-03 23:04:01 - [database_cleanup] database_cleanup - [INFO] INFO - 🔄 Schließe alle aktiven Datenbankverbindungen... diff --git a/backend/logs/email_notification/email_notification.log b/backend/logs/email_notification/email_notification.log index 487df13f..8a6893fb 100644 --- a/backend/logs/email_notification/email_notification.log +++ b/backend/logs/email_notification/email_notification.log @@ -125,3 +125,4 @@ 2025-06-03 22:00:23 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand) 2025-06-03 22:15:16 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand) 2025-06-03 22:15:51 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand) +2025-06-03 23:04:00 - [email_notification] email_notification - [INFO] INFO - 📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand) diff --git a/backend/logs/error_recovery/error_recovery.log b/backend/logs/error_recovery/error_recovery.log index e41aa128..b1e60da7 100644 --- a/backend/logs/error_recovery/error_recovery.log +++ b/backend/logs/error_recovery/error_recovery.log @@ -46,3 +46,7 @@ 2025-06-03 22:15:51 - [error_recovery] error_recovery - [INFO] INFO - 🔍 Error-Monitoring gestartet 2025-06-03 22:15:51 - [error_recovery] error_recovery - [WARNING] WARNING - 🚨 Fehler erkannt: database_lock - 2025-06-01 00:29:13 - myp.app - ERROR - ❌ Fehler beim Datenbank-Cleanup: (sqlite3.OperationalError) database is locked 2025-06-03 22:15:51 - [error_recovery] error_recovery - [INFO] INFO - 🔧 Führe Recovery-Aktion aus: reset_database +2025-06-03 23:04:01 - [error_recovery] error_recovery - [INFO] INFO - 🛡️ Error-Recovery-Manager initialisiert +2025-06-03 23:04:01 - [error_recovery] error_recovery - [INFO] INFO - 🔍 Error-Monitoring gestartet +2025-06-03 23:04:01 - [error_recovery] error_recovery - [WARNING] WARNING - 🚨 Fehler erkannt: database_lock - 2025-06-01 00:29:13 - myp.app - ERROR - ❌ Fehler beim Datenbank-Cleanup: (sqlite3.OperationalError) database is locked +2025-06-03 23:04:01 - [error_recovery] error_recovery - [INFO] INFO - 🔧 Führe Recovery-Aktion aus: reset_database diff --git a/backend/logs/maintenance/maintenance.log b/backend/logs/maintenance/maintenance.log index 54fe2d3f..f76ec6c4 100644 --- a/backend/logs/maintenance/maintenance.log +++ b/backend/logs/maintenance/maintenance.log @@ -256,3 +256,5 @@ 2025-06-03 22:15:16 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet 2025-06-03 22:15:51 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet 2025-06-03 22:15:51 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet +2025-06-03 23:04:00 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet +2025-06-03 23:04:00 - [maintenance] maintenance - [INFO] INFO - Wartungs-Scheduler gestartet diff --git a/backend/logs/multi_location/multi_location.log b/backend/logs/multi_location/multi_location.log index e1e7bc3a..8eddf229 100644 --- a/backend/logs/multi_location/multi_location.log +++ b/backend/logs/multi_location/multi_location.log @@ -254,3 +254,5 @@ 2025-06-03 22:15:16 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt 2025-06-03 22:15:51 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt 2025-06-03 22:15:51 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt +2025-06-03 23:04:00 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt +2025-06-03 23:04:00 - [multi_location] multi_location - [INFO] INFO - Standard-Standort erstellt diff --git a/backend/logs/permissions/permissions.log b/backend/logs/permissions/permissions.log index 5c6f2390..26975aea 100644 --- a/backend/logs/permissions/permissions.log +++ b/backend/logs/permissions/permissions.log @@ -127,3 +127,4 @@ 2025-06-03 22:00:23 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert 2025-06-03 22:15:16 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert 2025-06-03 22:15:51 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert +2025-06-03 23:04:00 - [permissions] permissions - [INFO] INFO - 🔐 Permission Template Helpers registriert diff --git a/backend/logs/printer_monitor/printer_monitor.log b/backend/logs/printer_monitor/printer_monitor.log index e200fb06..b64295ce 100644 --- a/backend/logs/printer_monitor/printer_monitor.log +++ b/backend/logs/printer_monitor/printer_monitor.log @@ -3449,3 +3449,13 @@ 2025-06-03 22:16:14 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Aktualisiere Live-Druckerstatus... 2025-06-03 22:16:14 - [printer_monitor] printer_monitor - [INFO] INFO - ℹ️ Keine aktiven Drucker gefunden 2025-06-03 22:16:19 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 5/6: 192.168.0.102 +2025-06-03 23:03:59 - [printer_monitor] printer_monitor - [INFO] INFO - 🖨️ Drucker-Monitor initialisiert +2025-06-03 23:03:59 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Automatische Tapo-Erkennung in separatem Thread gestartet +2025-06-03 23:04:01 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Starte automatische Tapo-Steckdosenerkennung... +2025-06-03 23:04:01 - [printer_monitor] printer_monitor - [INFO] INFO - 🔄 Teste 6 Standard-IPs aus der Konfiguration +2025-06-03 23:04:01 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 1/6: 192.168.0.103 +2025-06-03 23:04:01 - [printer_monitor] printer_monitor - [INFO] INFO - 🚀 Starte Steckdosen-Initialisierung beim Programmstart... +2025-06-03 23:04:01 - [printer_monitor] printer_monitor - [WARNING] WARNING - ⚠️ Keine aktiven Drucker zur Initialisierung gefunden +2025-06-03 23:04:07 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 2/6: 192.168.0.104 +2025-06-03 23:04:13 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 3/6: 192.168.0.100 +2025-06-03 23:04:19 - [printer_monitor] printer_monitor - [INFO] INFO - 🔍 Teste IP 4/6: 192.168.0.101 diff --git a/backend/logs/scheduler/scheduler.log b/backend/logs/scheduler/scheduler.log index 73ee2487..4b028fd1 100644 --- a/backend/logs/scheduler/scheduler.log +++ b/backend/logs/scheduler/scheduler.log @@ -32264,3 +32264,34 @@ 2025-06-03 22:16:20 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) 2025-06-03 22:16:20 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 13 nicht einschalten 2025-06-03 22:16:20 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 14: e2 +2025-06-03 23:03:59 - [scheduler] scheduler - [INFO] INFO - Task check_jobs registriert: Intervall 30s, Enabled: True +2025-06-03 23:04:01 - [scheduler] scheduler - [INFO] INFO - Scheduler-Thread gestartet +2025-06-03 23:04:01 - [scheduler] scheduler - [INFO] INFO - Scheduler gestartet +2025-06-03 23:04:01 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 7: test +2025-06-03 23:04:03 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 23:04:03 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 7 nicht einschalten +2025-06-03 23:04:03 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 8: test +2025-06-03 23:04:05 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 23:04:05 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 8 nicht einschalten +2025-06-03 23:04:05 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 1: test +2025-06-03 23:04:07 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 23:04:07 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 1 nicht einschalten +2025-06-03 23:04:07 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 2: test +2025-06-03 23:04:09 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 23:04:09 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 2 nicht einschalten +2025-06-03 23:04:09 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 3: test +2025-06-03 23:04:11 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 23:04:11 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 3 nicht einschalten +2025-06-03 23:04:11 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 4: test +2025-06-03 23:04:14 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 23:04:14 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 4 nicht einschalten +2025-06-03 23:04:14 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 5: test +2025-06-03 23:04:16 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 23:04:16 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 5 nicht einschalten +2025-06-03 23:04:16 - [scheduler] scheduler - [INFO] INFO - 🚀 Starte geplanten Job 6: test +2025-06-03 23:04:18 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.103: HTTPConnectionPool(host='192.168.0.103', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.103 timed out. (connect timeout=2)')) +2025-06-03 23:04:18 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Job 6 nicht einschalten +2025-06-03 23:04:18 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 9: zi +2025-06-03 23:04:20 - [scheduler] scheduler - [ERROR] ERROR - ❌ Fehler beim einschalten der Tapo-Steckdose 192.168.0.104: HTTPConnectionPool(host='192.168.0.104', port=80): Max retries exceeded with url: /app (Caused by ConnectTimeoutError(, 'Connection to 192.168.0.104 timed out. (connect timeout=2)')) +2025-06-03 23:04:20 - [scheduler] scheduler - [ERROR] ERROR - ❌ Konnte Steckdose für Sofort-Job 9 nicht einschalten +2025-06-03 23:04:20 - [scheduler] scheduler - [INFO] INFO - ⚡ Starte Sofort-Job 10: zi diff --git a/backend/logs/security/security.log b/backend/logs/security/security.log index 1456f81e..86ffd96c 100644 --- a/backend/logs/security/security.log +++ b/backend/logs/security/security.log @@ -127,3 +127,4 @@ 2025-06-03 22:00:23 - [security] security - [INFO] INFO - 🔒 Security System initialisiert 2025-06-03 22:15:16 - [security] security - [INFO] INFO - 🔒 Security System initialisiert 2025-06-03 22:15:51 - [security] security - [INFO] INFO - 🔒 Security System initialisiert +2025-06-03 23:04:00 - [security] security - [INFO] INFO - 🔒 Security System initialisiert diff --git a/backend/logs/shutdown_manager/shutdown_manager.log b/backend/logs/shutdown_manager/shutdown_manager.log index f38ab29c..0ac4acbe 100644 --- a/backend/logs/shutdown_manager/shutdown_manager.log +++ b/backend/logs/shutdown_manager/shutdown_manager.log @@ -221,3 +221,4 @@ 2025-06-03 22:00:23 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert 2025-06-03 22:15:16 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert 2025-06-03 22:15:51 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert +2025-06-03 23:04:00 - [shutdown_manager] shutdown_manager - [INFO] INFO - 🔧 Shutdown-Manager initialisiert diff --git a/backend/logs/startup/startup.log b/backend/logs/startup/startup.log index be42737e..1cf65217 100644 --- a/backend/logs/startup/startup.log +++ b/backend/logs/startup/startup.log @@ -1143,3 +1143,12 @@ 2025-06-03 22:15:51 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: /mnt 2025-06-03 22:15:51 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-03T22:15:51.607422 2025-06-03 22:15:51 - [startup] startup - [INFO] INFO - ================================================== +2025-06-03 23:04:00 - [startup] startup - [INFO] INFO - ================================================== +2025-06-03 23:04:00 - [startup] startup - [INFO] INFO - 🚀 MYP Platform Backend wird gestartet... +2025-06-03 23:04:00 - [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-03 23:04:00 - [startup] startup - [INFO] INFO - 💻 Betriebssystem: nt (win32) +2025-06-03 23:04:00 - [startup] startup - [INFO] INFO - 📁 Arbeitsverzeichnis: C:\Users\TTOMCZA.EMEA\Dev\Projektarbeit-MYP\backend +2025-06-03 23:04:00 - [startup] startup - [INFO] INFO - ⏰ Startzeit: 2025-06-03T23:04:00.907327 +2025-06-03 23:04:00 - [startup] startup - [INFO] INFO - 🪟 Windows-Modus: Aktiviert +2025-06-03 23:04:00 - [startup] startup - [INFO] INFO - 🔒 Windows-sichere Log-Rotation: Aktiviert +2025-06-03 23:04:00 - [startup] startup - [INFO] INFO - ================================================== diff --git a/backend/logs/system_control/system_control.log b/backend/logs/system_control/system_control.log index 2368f6b7..42eeb8d1 100644 --- a/backend/logs/system_control/system_control.log +++ b/backend/logs/system_control/system_control.log @@ -10,3 +10,4 @@ 2025-06-03 22:00:23 - [system_control] system_control - [INFO] INFO - 🔧 System-Control-Manager initialisiert 2025-06-03 22:15:16 - [system_control] system_control - [INFO] INFO - 🔧 System-Control-Manager initialisiert 2025-06-03 22:15:51 - [system_control] system_control - [INFO] INFO - 🔧 System-Control-Manager initialisiert +2025-06-03 23:04:01 - [system_control] system_control - [INFO] INFO - 🔧 System-Control-Manager initialisiert diff --git a/backend/logs/windows_fixes/windows_fixes.log b/backend/logs/windows_fixes/windows_fixes.log index a47ae927..dce8517f 100644 --- a/backend/logs/windows_fixes/windows_fixes.log +++ b/backend/logs/windows_fixes/windows_fixes.log @@ -527,3 +527,7 @@ 2025-06-03 20:42:01 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen) 2025-06-03 20:42:01 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet 2025-06-03 20:42:01 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet +2025-06-03 23:03:58 - [windows_fixes] windows_fixes - [INFO] INFO - 🔧 Wende Windows-spezifische Fixes an... +2025-06-03 23:03:58 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Subprocess automatisch gepatcht für UTF-8 Encoding (run + Popen) +2025-06-03 23:03:58 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Globaler subprocess-Patch angewendet +2025-06-03 23:03:58 - [windows_fixes] windows_fixes - [INFO] INFO - ✅ Alle Windows-Fixes erfolgreich angewendet