📚 Improved log management system structure and organization

This commit is contained in:
Till Tomczak
2025-06-20 12:07:10 +02:00
parent 025ec1f240
commit 533132002a
16 changed files with 355 additions and 0 deletions

View File

@ -702,6 +702,7 @@ class Job(Base):
if cached_result is not None:
return cached_result
# Grundlegende Job-Informationen
result = {
"id": self.id,
"name": self.name,
@ -722,10 +723,100 @@ class Job(Base):
"printer": self.printer.to_dict() if self.printer else None
}
# Frontend-kompatible Felder hinzufügen
result.update({
# Alternative Namen für Frontend-Kompatibilität
"title": self.name, # Alias für name
"filename": self.name, # Fallback für filename
"file_name": self.name, # Weitere Alias für file_name
# Drucker-Informationen direkt verfügbar machen
"printer_name": self.printer.name if self.printer else "Unbekannter Drucker",
"printer_model": self.printer.model if self.printer else None,
"printer_location": self.printer.location if self.printer else None,
"printer_status": self.printer.status if self.printer else "unknown",
# Benutzer-Informationen direkt verfügbar machen
"user_name": self.user.name if self.user else "Unbekannter Benutzer",
"username": self.user.username if self.user else None,
"user_email": self.user.email if self.user else None,
# Zeitstempel in verschiedenen Formaten
"start_time": self.start_at.strftime('%d.%m.%Y %H:%M') if self.start_at else "Nicht festgelegt",
"end_time": self.end_at.strftime('%d.%m.%Y %H:%M') if self.end_at else "Nicht festgelegt",
"created_time": self.created_at.strftime('%d.%m.%Y %H:%M') if self.created_at else "Unbekannt",
# Status-Text in Deutsch
"status_text": self._get_status_text(self.status),
# Fortschritt berechnen (falls Job läuft)
"progress": self._calculate_progress(),
# Ist der Job aktiv?
"is_active": self.status in ['scheduled', 'running', 'printing'],
# Verbleibende Zeit berechnen
"remaining_minutes": self._calculate_remaining_minutes()
})
# Ergebnis cachen (3 Minuten für Jobs)
set_cache(cache_key, result, 180)
return result
def _get_status_text(self, status: str) -> str:
"""Wandelt englische Status-Codes in deutsche Texte um"""
status_mapping = {
'scheduled': 'Geplant',
'pending': 'Wartend',
'ready': 'Bereit',
'running': 'Läuft',
'printing': 'Druckt',
'paused': 'Pausiert',
'completed': 'Abgeschlossen',
'finished': 'Beendet',
'failed': 'Fehlgeschlagen',
'cancelled': 'Abgebrochen',
'aborted': 'Abgebrochen',
'waiting_for_printer': 'Wartet auf Drucker'
}
return status_mapping.get(status, status.title() if status else 'Unbekannt')
def _calculate_progress(self) -> int:
"""Berechnet den Fortschritt des Jobs in Prozent"""
if not self.start_at or not self.end_at:
return 0
now = datetime.now()
if self.status == 'completed' or self.status == 'finished':
return 100
elif self.status in ['failed', 'cancelled', 'aborted']:
return 0
elif self.status in ['scheduled', 'pending']:
return 0
elif self.status in ['running', 'printing']:
# Fortschritt basierend auf verstrichener Zeit
total_duration = (self.end_at - self.start_at).total_seconds()
elapsed_time = (now - self.start_at).total_seconds()
if total_duration > 0:
progress = int((elapsed_time / total_duration) * 100)
return min(max(progress, 0), 100) # Zwischen 0 und 100 begrenzen
return 0
def _calculate_remaining_minutes(self) -> int:
"""Berechnet die verbleibenden Minuten für den Job"""
if not self.end_at or self.status not in ['running', 'printing']:
return 0
now = datetime.now()
if now >= self.end_at:
return 0
remaining_seconds = (self.end_at - now).total_seconds()
return max(int(remaining_seconds / 60), 0)
def update_status(self, new_status: str):
"""
Aktualisiert den Job-Status und invalidiert den Cache.