refactor: delete table

This commit is contained in:
tao.chen
2026-07-31 13:21:15 +08:00
parent f288c90d37
commit 28069f516b
9 changed files with 510 additions and 1074 deletions
+2 -13
View File
@@ -1,13 +1,8 @@
from common.db.base import Base
from common.db.models.audit import AuditLogs
from common.db.models.events import ConsumerInbox, OutboxEvents
from common.db.models.experiments import (
ExperimentMetrics,
ExperimentResources,
Experiments,
)
from common.db.models.identity import Permissions, RolePermissions, Roles, Users
from common.db.models.runtime import EditSessions, RuntimeInstances, WorkspaceOperations
from common.db.models.runtime import WorkspaceOperations
from common.db.models.schedules import (
ScheduleEdges,
ScheduleNodeRuns,
@@ -15,7 +10,7 @@ from common.db.models.schedules import (
ScheduleRuns,
Schedules,
)
from common.db.models.scripts import NotebookSnapshots, Scripts, Versions
from common.db.models.scripts import Scripts, Versions
from common.db.models.storage import DataResources, StorageObjects, UploadSessions
from common.db.models.workspaces import WorkspaceMembers, Workspaces
@@ -24,16 +19,10 @@ __all__ = [
"AuditLogs",
"ConsumerInbox",
"DataResources",
"EditSessions",
"ExperimentMetrics",
"ExperimentResources",
"Experiments",
"NotebookSnapshots",
"OutboxEvents",
"Permissions",
"RolePermissions",
"Roles",
"RuntimeInstances",
"ScheduleEdges",
"ScheduleNodeRuns",
"ScheduleNodes",
-112
View File
@@ -1,112 +0,0 @@
import datetime
import decimal
from typing import Optional
from sqlalchemy import BigInteger, Double, Index, JSON, String, text
from sqlalchemy.dialects.mysql import BIGINT, CHAR, DATETIME, INTEGER, TINYINT
from sqlalchemy.orm import Mapped, mapped_column
from common.db.base import Base
class Experiments(Base):
__tablename__ = "experiments"
__table_args__ = (
Index("fk_experiments_logs", "logs_object_id"),
Index("fk_experiments_parent", "parent_experiment_id"),
Index("fk_experiments_result", "result_object_id"),
Index("fk_experiments_script", "script_id"),
Index("idx_experiments_owner", "owner_user_id", "created_at"),
Index("idx_experiments_schedule_run", "schedule_run_id"),
Index("idx_experiments_version", "versions_id"),
Index(
"idx_experiments_workspace",
"workspace_id",
"experiment_status",
"created_at",
),
{"comment": "实验记录"},
)
experiment_id: Mapped[str] = mapped_column(CHAR(26), primary_key=True)
workspace_id: Mapped[str] = mapped_column(CHAR(26), nullable=False)
owner_user_id: Mapped[str] = mapped_column(CHAR(26), nullable=False)
experiment_name: Mapped[str] = mapped_column(String(255), nullable=False)
source_type: Mapped[str] = mapped_column(
String(24), nullable=False, comment="python/notebook/schedule/rerun"
)
experiment_status: Mapped[str] = mapped_column(
String(24), nullable=False, server_default=text("'queued'")
)
state_version: Mapped[int] = mapped_column(
INTEGER, nullable=False, server_default=text("0"), comment="乐观锁版本"
)
created_at: Mapped[datetime.datetime] = mapped_column(
DATETIME(fsp=3), nullable=False, server_default=text("CURRENT_TIMESTAMP(3)")
)
script_id: Mapped[Optional[str]] = mapped_column(CHAR(26))
versions_id: Mapped[Optional[str]] = mapped_column(
CHAR(26), comment="工作副本运行时可为空"
)
schedule_run_id: Mapped[Optional[str]] = mapped_column(CHAR(26))
parent_experiment_id: Mapped[Optional[str]] = mapped_column(CHAR(26))
parameters_json: Mapped[Optional[dict]] = mapped_column(JSON)
environment_json: Mapped[Optional[dict]] = mapped_column(JSON)
result_summary: Mapped[Optional[str]] = mapped_column(String(2000))
logs_object_id: Mapped[Optional[str]] = mapped_column(CHAR(26))
result_object_id: Mapped[Optional[str]] = mapped_column(CHAR(26))
started_at: Mapped[Optional[datetime.datetime]] = mapped_column(DATETIME(fsp=3))
finished_at: Mapped[Optional[datetime.datetime]] = mapped_column(DATETIME(fsp=3))
duration_ms: Mapped[Optional[int]] = mapped_column(BIGINT)
is_deleted: Mapped[int] = mapped_column(
TINYINT(1), nullable=False, server_default=text("0")
)
deleted_at: Mapped[Optional[datetime.datetime]] = mapped_column(DATETIME(fsp=3))
class ExperimentMetrics(Base):
__tablename__ = "experiment_metrics"
__table_args__ = (
Index("idx_experiment_metrics_lookup", "experiment_id", "metric_name", "step_no"),
{"comment": "实验指标,支持筛选和曲线"},
)
metric_id: Mapped[int] = mapped_column(BIGINT, primary_key=True)
experiment_id: Mapped[str] = mapped_column(CHAR(26), nullable=False)
metric_name: Mapped[str] = mapped_column(String(128), nullable=False)
recorded_at: Mapped[datetime.datetime] = mapped_column(
DATETIME(fsp=3), nullable=False, server_default=text("CURRENT_TIMESTAMP(3)")
)
metric_value: Mapped[Optional[decimal.Decimal]] = mapped_column(
Double(asdecimal=True)
)
metric_text: Mapped[Optional[str]] = mapped_column(String(1000))
step_no: Mapped[Optional[int]] = mapped_column(BigInteger)
is_deleted: Mapped[int] = mapped_column(
TINYINT(1), nullable=False, server_default=text("0")
)
deleted_at: Mapped[Optional[datetime.datetime]] = mapped_column(DATETIME(fsp=3))
class ExperimentResources(Base):
__tablename__ = "experiment_resources"
__table_args__ = (
Index("fk_experiment_resources_resource", "resource_id"),
{"comment": "实验与数据资源"},
)
experiment_id: Mapped[str] = mapped_column(CHAR(26), primary_key=True)
resource_id: Mapped[str] = mapped_column(CHAR(26), primary_key=True)
resource_role: Mapped[str] = mapped_column(
String(16),
primary_key=True,
server_default=text("'input'"),
comment="input/output",
)
created_at: Mapped[datetime.datetime] = mapped_column(
DATETIME(fsp=3), nullable=False, server_default=text("CURRENT_TIMESTAMP(3)")
)
is_deleted: Mapped[int] = mapped_column(
TINYINT(1), nullable=False, server_default=text("0")
)
deleted_at: Mapped[Optional[datetime.datetime]] = mapped_column(DATETIME(fsp=3))
+1 -114
View File
@@ -1,126 +1,13 @@
import datetime
from typing import Optional
from sqlalchemy import BINARY, Index, String, Text, text
from sqlalchemy import Index, String, Text, text
from sqlalchemy.dialects.mysql import CHAR, DATETIME, INTEGER, TINYINT
from sqlalchemy.orm import Mapped, mapped_column
from common.db.base import Base
class RuntimeInstances(Base):
__tablename__ = "runtime_instances"
__table_args__ = (
Index("fk_runtime_started_by", "started_by"),
Index("idx_runtime_lease", "actual_state", "lease_expires_at"),
Index("idx_runtime_owner_state", "owner_user_id", "actual_state"),
Index(
"idx_runtime_workspace_state",
"workspace_id",
"runtime_type",
"actual_state",
),
{"comment": "Jupyter/未来 VS Code、OpenCode Runtime 实例"},
)
runtime_id: Mapped[str] = mapped_column(CHAR(26), primary_key=True)
workspace_id: Mapped[str] = mapped_column(CHAR(26), nullable=False)
runtime_type: Mapped[str] = mapped_column(
String(24), nullable=False, server_default=text("'jupyter'")
)
runtime_provider: Mapped[str] = mapped_column(
String(24), nullable=False, comment="process/docker/kubernetes"
)
proxy_base_path: Mapped[str] = mapped_column(String(512), nullable=False)
desired_state: Mapped[str] = mapped_column(
String(16), nullable=False, server_default=text("'running'")
)
actual_state: Mapped[str] = mapped_column(
String(24),
nullable=False,
server_default=text("'provisioning'"),
comment="provisioning/starting/running/unhealthy/stopping/stopped/failed",
)
state_version: Mapped[int] = mapped_column(
INTEGER, nullable=False, server_default=text("0"), comment="乐观锁版本"
)
started_by: Mapped[str] = mapped_column(CHAR(26), nullable=False)
created_at: Mapped[datetime.datetime] = mapped_column(
DATETIME(fsp=3), nullable=False, server_default=text("CURRENT_TIMESTAMP(3)")
)
updated_at: Mapped[datetime.datetime] = mapped_column(
DATETIME(fsp=3),
nullable=False,
server_default=text("CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3)"),
)
owner_user_id: Mapped[Optional[str]] = mapped_column(
CHAR(26), comment="为空表示 Workspace 级 Runtime"
)
runtime_ref: Mapped[Optional[str]] = mapped_column(
String(255), comment="PID/container ID/pod UID"
)
host_node: Mapped[Optional[str]] = mapped_column(String(255))
internal_url: Mapped[Optional[str]] = mapped_column(String(1000))
started_at: Mapped[Optional[datetime.datetime]] = mapped_column(DATETIME(fsp=3))
last_heartbeat_at: Mapped[Optional[datetime.datetime]] = mapped_column(
DATETIME(fsp=3)
)
lease_expires_at: Mapped[Optional[datetime.datetime]] = mapped_column(
DATETIME(fsp=3)
)
stopped_at: Mapped[Optional[datetime.datetime]] = mapped_column(DATETIME(fsp=3))
error_message: Mapped[Optional[str]] = mapped_column(Text)
is_deleted: Mapped[int] = mapped_column(
TINYINT(1), nullable=False, server_default=text("0")
)
deleted_at: Mapped[Optional[datetime.datetime]] = mapped_column(DATETIME(fsp=3))
class EditSessions(Base):
__tablename__ = "edit_sessions"
__table_args__ = (
Index("fk_edit_sessions_workspace", "workspace_id"),
Index(
"idx_edit_sessions_object",
"storage_object_id",
"session_status",
"expires_at",
),
Index("idx_edit_sessions_runtime", "runtime_id", "session_status"),
Index("idx_edit_sessions_user", "user_id", "session_status"),
{"comment": "编辑会话审计"},
)
edit_session_id: Mapped[str] = mapped_column(CHAR(26), primary_key=True)
workspace_id: Mapped[str] = mapped_column(CHAR(26), nullable=False)
storage_object_id: Mapped[str] = mapped_column(CHAR(26), nullable=False)
user_id: Mapped[str] = mapped_column(CHAR(26), nullable=False)
lock_token_hash: Mapped[bytes] = mapped_column(
BINARY(32), nullable=False, comment="不保存原始 token"
)
session_status: Mapped[str] = mapped_column(
String(16),
nullable=False,
server_default=text("'active'"),
comment="active/closed/expired/failed",
)
started_at: Mapped[datetime.datetime] = mapped_column(
DATETIME(fsp=3), nullable=False, server_default=text("CURRENT_TIMESTAMP(3)")
)
last_heartbeat_at: Mapped[datetime.datetime] = mapped_column(
DATETIME(fsp=3), nullable=False, server_default=text("CURRENT_TIMESTAMP(3)")
)
expires_at: Mapped[datetime.datetime] = mapped_column(DATETIME(fsp=3), nullable=False)
runtime_id: Mapped[Optional[str]] = mapped_column(CHAR(26))
jupyter_session_id: Mapped[Optional[str]] = mapped_column(String(255))
ended_at: Mapped[Optional[datetime.datetime]] = mapped_column(DATETIME(fsp=3))
end_reason: Mapped[Optional[str]] = mapped_column(String(64))
is_deleted: Mapped[int] = mapped_column(
TINYINT(1), nullable=False, server_default=text("0")
)
deleted_at: Mapped[Optional[datetime.datetime]] = mapped_column(DATETIME(fsp=3))
class WorkspaceOperations(Base):
__tablename__ = "workspace_operations"
__table_args__ = (
-32
View File
@@ -63,38 +63,6 @@ class Scripts(Base):
deleted_at: Mapped[Optional[datetime.datetime]] = mapped_column(DATETIME(fsp=3))
class NotebookSnapshots(Base):
__tablename__ = "notebook_snapshots"
__table_args__ = (
Index("fk_snapshots_created_by", "created_by"),
Index("fk_snapshots_source_object", "source_object_id"),
Index("idx_snapshots_workspace_created", "workspace_id", "created_at"),
Index("uk_snapshots_artifact", "artifact_object_id", unique=True),
Index("uk_snapshots_script_hash", "script_id", "content_hash", unique=True),
{"comment": "Notebook 开发快照,append-only"},
)
snapshot_id: Mapped[str] = mapped_column(CHAR(26), primary_key=True)
workspace_id: Mapped[str] = mapped_column(CHAR(26), nullable=False)
script_id: Mapped[str] = mapped_column(CHAR(26), nullable=False)
source_object_id: Mapped[str] = mapped_column(CHAR(26), nullable=False)
artifact_object_id: Mapped[str] = mapped_column(CHAR(26), nullable=False)
snapshot_name: Mapped[str] = mapped_column(String(255), nullable=False)
content_hash: Mapped[str] = mapped_column(CHAR(64), nullable=False)
outputs_stripped: Mapped[int] = mapped_column(
TINYINT(1), nullable=False, server_default=text("1")
)
created_by: Mapped[str] = mapped_column(CHAR(26), nullable=False)
created_at: Mapped[datetime.datetime] = mapped_column(
DATETIME(fsp=3), nullable=False, server_default=text("CURRENT_TIMESTAMP(3)")
)
description: Mapped[Optional[str]] = mapped_column(String(1000))
is_deleted: Mapped[int] = mapped_column(
TINYINT(1), nullable=False, server_default=text("0")
)
deleted_at: Mapped[Optional[datetime.datetime]] = mapped_column(DATETIME(fsp=3))
class Versions(Base):
__tablename__ = "versions"
__table_args__ = (