All checks were successful
Build and Deploy Log Center / build-and-deploy (push) Successful in 2m24s
新增两种日志来源(cicd / deployment),使日志中台覆盖"构建→部署→运行"全链路: 后端变更: - models.py: 新增 LogSource 枚举和 source 字段,file_path/line_number 改为可选 - main.py: 按来源生成不同指纹策略,所有查询端点支持 source 筛选,仪表盘新增来源分布统计 - database.py: 新增 4 条迁移 SQL(source 字段、索引、字段可空) - task_manager.py: 修复 Agent 仅拉取 runtime 来源的缺陷 新增组件: - k8s-monitor/: K8s Pod 健康监控脚本(Python),每 5 分钟检测异常 Pod 并上报 - k8s/monitor-cronjob.yaml: CronJob + RBAC 部署清单 - scripts/report-cicd-error.sh: CI/CD 错误上报 Bash 脚本 - scripts/gitea-actions-example.yaml: Gitea Actions 集成示例 前端变更: - api.ts: 类型定义更新,支持 source 字段 - BugList.tsx: 新增来源筛选标签页和来源列 - BugDetail.tsx: 按来源条件渲染(CI/CD 信息、部署信息),非 runtime 禁用修复按钮 - Dashboard.tsx: 新增来源分布表格 - index.css: 来源标签样式(source-badge) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
48 lines
1.7 KiB
Python
48 lines
1.7 KiB
Python
from sqlmodel import SQLModel, create_engine
|
|
from sqlmodel.ext.asyncio.session import AsyncSession
|
|
from sqlalchemy.ext.asyncio import create_async_engine
|
|
from sqlalchemy.orm import sessionmaker
|
|
from sqlalchemy import text
|
|
import os
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
DB_USER = os.getenv("DB_USER")
|
|
DB_PASSWORD = os.getenv("DB_PASSWORD")
|
|
DB_HOST = os.getenv("DB_HOST")
|
|
DB_PORT = os.getenv("DB_PORT", "5432")
|
|
DB_NAME = os.getenv("DB_NAME")
|
|
|
|
DATABASE_URL = f"postgresql+asyncpg://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}"
|
|
|
|
engine = create_async_engine(DATABASE_URL, echo=True, future=True)
|
|
|
|
async def init_db():
|
|
async with engine.begin() as conn:
|
|
# await conn.run_sync(SQLModel.metadata.drop_all)
|
|
await conn.run_sync(SQLModel.metadata.create_all)
|
|
|
|
# Migrate: add new columns to existing repairtask table
|
|
migrations = [
|
|
"ALTER TABLE repairtask ADD COLUMN repair_round INTEGER DEFAULT 1",
|
|
"ALTER TABLE repairtask ADD COLUMN failure_reason TEXT",
|
|
# Log source support
|
|
"ALTER TABLE errorlog ADD COLUMN source VARCHAR(20) DEFAULT 'runtime'",
|
|
"ALTER TABLE errorlog ALTER COLUMN file_path DROP NOT NULL",
|
|
"ALTER TABLE errorlog ALTER COLUMN line_number DROP NOT NULL",
|
|
"CREATE INDEX ix_errorlog_source ON errorlog (source)",
|
|
]
|
|
for sql in migrations:
|
|
try:
|
|
await conn.execute(text(sql))
|
|
except Exception:
|
|
pass # Column already exists
|
|
|
|
async def get_session() -> AsyncSession:
|
|
async_session = sessionmaker(
|
|
engine, class_=AsyncSession, expire_on_commit=False
|
|
)
|
|
async with async_session() as session:
|
|
yield session
|