print_log.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. """Service for writing independent print log entries.
  2. Log entries are written to a separate table and never touch archives or queue items.
  3. """
  4. import logging
  5. from datetime import datetime
  6. from sqlalchemy.ext.asyncio import AsyncSession
  7. from backend.app.models.print_log import PrintLogEntry
  8. logger = logging.getLogger(__name__)
  9. async def write_log_entry(
  10. db: AsyncSession,
  11. *,
  12. status: str,
  13. print_name: str | None = None,
  14. printer_name: str | None = None,
  15. printer_id: int | None = None,
  16. started_at: datetime | None = None,
  17. completed_at: datetime | None = None,
  18. filament_type: str | None = None,
  19. filament_color: str | None = None,
  20. filament_used_grams: float | None = None,
  21. thumbnail_path: str | None = None,
  22. created_by_username: str | None = None,
  23. ) -> PrintLogEntry:
  24. """Write a print log entry."""
  25. duration = None
  26. if started_at and completed_at:
  27. duration = int((completed_at - started_at).total_seconds())
  28. entry = PrintLogEntry(
  29. print_name=print_name,
  30. printer_name=printer_name,
  31. printer_id=printer_id,
  32. status=status,
  33. started_at=started_at,
  34. completed_at=completed_at,
  35. duration_seconds=duration,
  36. filament_type=filament_type,
  37. filament_color=filament_color,
  38. filament_used_grams=filament_used_grams,
  39. thumbnail_path=thumbnail_path,
  40. created_by_username=created_by_username,
  41. )
  42. db.add(entry)
  43. await db.flush()
  44. return entry