feat: 添加ComfyUI服务器持久化功能,支持服务器状态自动保存与恢复,增强系统的可靠性和可维护性

This commit is contained in:
iHeyTang
2025-08-15 11:04:47 +08:00
parent a475a87165
commit 5fbbb719f4
5 changed files with 333 additions and 56 deletions

View File

@@ -3,7 +3,7 @@
提供工作流和工作流运行的数据库操作接口
"""
from .models import Workflow, WorkflowRun, WorkflowRunNode
from .models import Workflow, WorkflowRun, WorkflowRunNode, ComfyUIServer
from .api import (
init_db,
save_workflow,
@@ -27,6 +27,7 @@ __all__ = [
"Workflow",
"WorkflowRun",
"WorkflowRunNode",
"ComfyUIServer",
# API函数
"init_db",

View File

@@ -11,7 +11,7 @@ import uuid
from sqlalchemy.future import select
from sqlalchemy import delete
from .models import Base, Workflow, WorkflowRun, WorkflowRunNode
from .models import Base, Workflow, WorkflowRun, WorkflowRunNode, ComfyUIServer
from .connection import async_engine, AsyncSessionLocal

View File

@@ -4,7 +4,7 @@
"""
from datetime import datetime
from sqlalchemy import Column, String, Text, DateTime, ForeignKey
from sqlalchemy import Column, String, Text, DateTime, ForeignKey, Integer, Boolean
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
@@ -109,3 +109,38 @@ class WorkflowRunNode(Base):
"output_data": self.output_data,
"error_message": self.error_message,
}
class ComfyUIServer(Base):
"""ComfyUI 服务器模型"""
__tablename__ = "comfyui_servers"
name = Column(String, primary_key=True)
http_url = Column(String, nullable=False)
ws_url = Column(String, nullable=False)
status = Column(String, nullable=False, default="offline")
last_heartbeat = Column(DateTime)
last_health_check = Column(DateTime)
current_tasks = Column(Integer, default=0)
max_concurrent_tasks = Column(Integer, default=1)
capabilities = Column(Text) # JSON 字符串
server_metadata = Column(Text) # JSON 字符串
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
def to_dict(self) -> dict:
return {
"name": self.name,
"http_url": self.http_url,
"ws_url": self.ws_url,
"status": self.status,
"last_heartbeat": self.last_heartbeat.isoformat() if self.last_heartbeat else None,
"last_health_check": self.last_health_check.isoformat() if self.last_health_check else None,
"current_tasks": self.current_tasks,
"max_concurrent_tasks": self.max_concurrent_tasks,
"capabilities": self.capabilities,
"server_metadata": self.server_metadata,
"created_at": self.created_at.isoformat() if self.created_at else None,
"updated_at": self.updated_at.isoformat() if self.updated_at else None,
}