log-center/app/models.py
zyc 637c479818
All checks were successful
Build and Deploy Log Center / build-and-deploy (push) Successful in 1m30s
feat: initial log center with k8s deployment
2026-01-30 11:49:47 +08:00

59 lines
1.7 KiB
Python

from datetime import datetime
from typing import Optional, Dict
from sqlmodel import SQLModel, Field, Column, JSON
from enum import Enum
class LogStatus(str, Enum):
NEW = "NEW"
VERIFYING = "VERIFYING"
CANNOT_REPRODUCE = "CANNOT_REPRODUCE"
PENDING_FIX = "PENDING_FIX"
FIXING = "FIXING"
FIXED = "FIXED"
VERIFIED = "VERIFIED"
DEPLOYED = "DEPLOYED"
FIX_FAILED = "FIX_FAILED"
class ErrorLog(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
project_id: str = Field(index=True)
environment: str
level: str
# Error Details
error_type: str
error_message: str
file_path: str
line_number: int
stack_trace: str = Field(sa_column=Column(JSON)) # Store full stack trace
# Context
context: Dict = Field(default={}, sa_column=Column(JSON))
# Versioning
version: Optional[str] = None
commit_hash: Optional[str] = None
# Meta
timestamp: datetime = Field(default_factory=datetime.utcnow)
fingerprint: str = Field(unique=True, index=True) # project_id + error_type + file_path + line_number
# Status Tracking
status: LogStatus = Field(default=LogStatus.NEW)
retry_count: int = Field(default=0)
# Relationships could be added here (e.g., to a RepairTask table if 1:N)
# For simplicity, we track status on the Log itself for now.
# Pydantic Models for API
class ErrorLogCreate(SQLModel):
project_id: str
environment: str
level: str
timestamp: Optional[datetime] = None
version: Optional[str] = None
commit_hash: Optional[str] = None
error: Dict # {type, message, file_path, line_number, stack_trace}
context: Optional[Dict] = {}