控制台改为选项卡,并支持封禁节点与下发计算任务。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-10-11 01:33:44 +08:00
parent 80d46dcd5d
commit f0b35e6b34
18 changed files with 933 additions and 300 deletions
+3
View File
@@ -90,6 +90,7 @@ class WithdrawalStatus(str, enum.Enum):
class TaskStatus(str, enum.Enum):
PENDING = "pending"
PROCESSING = "processing"
COMPLETED = "completed"
FAILED = "failed"
EXPIRED = "expired"
@@ -169,6 +170,7 @@ class ComputeNode(Base):
generation_locked: Mapped[bool] = mapped_column(default=False, comment="世代已按上报显卡锁定")
recoverable_stake_amount: Mapped[Decimal | None] = mapped_column(MONEY, comment="尚未返还的质押金")
is_whitelist: Mapped[bool] = mapped_column(Boolean, default=False, comment="白名单节点,跳过单 IP 限制")
is_banned: Mapped[bool] = mapped_column(Boolean, default=False, comment="封禁后拒绝心跳")
client_ip: Mapped[str | None] = mapped_column(String(64), index=True, comment="最近一次注册或心跳的客户端 IP")
hardware_fingerprint: Mapped[str | None] = mapped_column(
String(64), unique=True, comment="显卡 UUID、主板与网卡合成的硬件指纹"
@@ -257,6 +259,7 @@ class ComputeTask(Base):
deadline_at: Mapped[datetime] = mapped_column(UtcDateTime)
responded_at: Mapped[datetime | None] = mapped_column(UtcDateTime)
success: Mapped[bool | None] = mapped_column()
result: Mapped[dict | None] = mapped_column(JSON, comment="节点回传的任务结果")
node: Mapped[ComputeNode] = relationship(back_populates="tasks")