package api import ( "fmt" "log" "git.x2erp.com/qdy/go-base/ctx" "git.x2erp.com/qdy/go-base/model/response" "git.x2erp.com/qdy/go-svc-code/internal/opencode/container" ) // InstanceStatusHandler 获取项目实例状态 // 路由: GET /api/opencode/projects/:id/status func InstanceStatusHandler(manager *container.InstanceManager) func(string, *ctx.RequestContext) (*response.QueryResult[interface{}], error) { return func(id string, reqCtx *ctx.RequestContext) (*response.QueryResult[interface{}], error) { log.Printf("获取项目实例状态请求: 项目ID=%s", id) // 获取实例 instance := manager.GetInstance(id) if instance == nil { // 实例不存在,返回停止状态 instanceInfo := InstanceInfo{ ProjectID: id, Status: string(container.StatusStopped), } return SuccessResponse(instanceInfo) } // 构建响应数据 instanceInfo := InstanceInfo{ ProjectID: instance.ProjectID, Port: instance.Port, PID: instance.PID, Status: string(instance.Status), ConfigPath: instance.ConfigPath, WorkDir: instance.WorkDir, APIBase: fmt.Sprintf("http://localhost:%d", instance.Port), ToolURL: instance.ToolURL, } if instance.Error != "" { instanceInfo.Status = string(container.StatusError) } log.Printf("实例状态查询成功: 项目=%s, 状态=%s", id, instance.Status) return SuccessResponse(instanceInfo) } }