📚 Improved log management system structure and organization
This commit is contained in:
@ -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.
|
||||
|
Reference in New Issue
Block a user