refactor: delete table
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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,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__ = (
|
||||
|
||||
@@ -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__ = (
|
||||
|
||||
Reference in New Issue
Block a user