You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ErrorDetecting/backend/app/models/system_logs.py

33 lines
1.4 KiB

from sqlalchemy.orm import Mapped, mapped_column
from sqlalchemy import String, Boolean
from sqlalchemy import TIMESTAMP, Text
from app.models import Base
class SystemLog(Base):
__tablename__ = "system_logs"
id: Mapped[int] = mapped_column(primary_key=True)
log_id: Mapped[str] = mapped_column(String(32), unique=True)
fault_id: Mapped[str | None] = mapped_column(String(32), nullable=True)
cluster_id: Mapped[int | None] = mapped_column(nullable=True)
timestamp: Mapped[str] = mapped_column(TIMESTAMP(timezone=True))
host: Mapped[str] = mapped_column(String(100))
service: Mapped[str] = mapped_column(String(50))
log_level: Mapped[str] = mapped_column(String(10))
message: Mapped[str] = mapped_column(Text)
exception: Mapped[str | None] = mapped_column(Text, nullable=True)
raw_log: Mapped[str | None] = mapped_column(Text, nullable=True)
processed: Mapped[bool] = mapped_column(Boolean, default=False)
created_at: Mapped[str] = mapped_column(TIMESTAMP(timezone=True))
def to_dict(self) -> dict:
"""将系统日志转换为可序列化字典。"""
return {
"log_id": self.log_id,
"cluster_id": self.cluster_id,
"timestamp": self.timestamp.isoformat() if self.timestamp else None,
"service": self.service,
"log_level": self.log_level,
"message": self.message,
"processed": self.processed,
}