|
| 1 | +from __future__ import annotations |
| 2 | + |
| 3 | +import uuid |
| 4 | +from datetime import datetime |
| 5 | +from typing import Any |
| 6 | + |
1 | 7 | import sqlalchemy as sa |
2 | 8 | from sqlalchemy.dialects import postgresql |
3 | 9 |
|
4 | | -from .base import GUID, IDColumn, metadata |
| 10 | +from ai.backend.manager.data.error_log.types import ( |
| 11 | + ErrorLogContent, |
| 12 | + ErrorLogData, |
| 13 | + ErrorLogMeta, |
| 14 | + ErrorLogSeverity, |
| 15 | +) |
| 16 | + |
| 17 | +from .base import GUID, Base, IDColumn, mapper_registry |
5 | 18 |
|
6 | 19 | __all__ = [ |
7 | 20 | "error_logs", |
| 21 | + "ErrorLogRow", |
8 | 22 | ] |
9 | 23 |
|
10 | 24 | error_logs = sa.Table( |
11 | 25 | "error_logs", |
12 | | - metadata, |
| 26 | + mapper_registry.metadata, |
13 | 27 | IDColumn(), |
14 | 28 | sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now(), index=True), |
15 | 29 | sa.Column( |
|
26 | 40 | sa.Column("request_status", sa.Integer, nullable=True), |
27 | 41 | sa.Column("traceback", sa.Text, nullable=True), |
28 | 42 | ) |
| 43 | + |
| 44 | + |
| 45 | +class ErrorLogRow(Base): |
| 46 | + __table__ = error_logs |
| 47 | + |
| 48 | + def __init__( |
| 49 | + self, |
| 50 | + severity: ErrorLogSeverity, |
| 51 | + source: str, |
| 52 | + message: str, |
| 53 | + context_lang: str, |
| 54 | + context_env: dict[str, Any], |
| 55 | + user: uuid.UUID | None = None, |
| 56 | + is_read: bool = False, |
| 57 | + is_cleared: bool = False, |
| 58 | + request_url: str | None = None, |
| 59 | + request_status: int | None = None, |
| 60 | + traceback: str | None = None, |
| 61 | + created_at: datetime | None = None, |
| 62 | + ) -> None: |
| 63 | + self.severity = severity.value |
| 64 | + self.source = source |
| 65 | + self.user = user |
| 66 | + self.is_read = is_read |
| 67 | + self.is_cleared = is_cleared |
| 68 | + self.message = message |
| 69 | + self.context_lang = context_lang |
| 70 | + self.context_env = context_env |
| 71 | + self.request_url = request_url |
| 72 | + self.request_status = request_status |
| 73 | + self.traceback = traceback |
| 74 | + if created_at: |
| 75 | + self.created_at = created_at |
| 76 | + |
| 77 | + def to_dataclass(self) -> ErrorLogData: |
| 78 | + return ErrorLogData( |
| 79 | + id=self.id, |
| 80 | + meta=ErrorLogMeta( |
| 81 | + created_at=self.created_at, |
| 82 | + user=self.user, |
| 83 | + source=self.source, |
| 84 | + is_read=self.is_read, |
| 85 | + is_cleared=self.is_cleared, |
| 86 | + context_lang=self.context_lang, |
| 87 | + context_env=self.context_env, |
| 88 | + request_url=self.request_url, |
| 89 | + request_status=self.request_status, |
| 90 | + ), |
| 91 | + content=ErrorLogContent( |
| 92 | + severity=ErrorLogSeverity(self.severity), |
| 93 | + message=self.message, |
| 94 | + traceback=self.traceback, |
| 95 | + ), |
| 96 | + ) |
0 commit comments