Нет описания
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

instance_status.go 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package api
  2. import (
  3. "fmt"
  4. "log"
  5. "git.x2erp.com/qdy/go-base/ctx"
  6. "git.x2erp.com/qdy/go-base/model/response"
  7. "git.x2erp.com/qdy/go-svc-code/internal/opencode/container"
  8. )
  9. // InstanceStatusHandler 获取项目实例状态
  10. // 路由: GET /api/opencode/projects/:id/status
  11. func InstanceStatusHandler(manager *container.InstanceManager) func(string, *ctx.RequestContext) (*response.QueryResult[interface{}], error) {
  12. return func(id string, reqCtx *ctx.RequestContext) (*response.QueryResult[interface{}], error) {
  13. log.Printf("获取项目实例状态请求: 项目ID=%s", id)
  14. // 获取实例
  15. instance := manager.GetInstance(id)
  16. if instance == nil {
  17. // 实例不存在,返回停止状态
  18. instanceInfo := InstanceInfo{
  19. ProjectID: id,
  20. Status: string(container.StatusStopped),
  21. }
  22. return SuccessResponse(instanceInfo)
  23. }
  24. // 构建响应数据
  25. instanceInfo := InstanceInfo{
  26. ProjectID: instance.ProjectID,
  27. Port: instance.Port,
  28. PID: instance.PID,
  29. Status: string(instance.Status),
  30. ConfigPath: instance.ConfigPath,
  31. WorkDir: instance.WorkDir,
  32. APIBase: fmt.Sprintf("http://localhost:%d", instance.Port),
  33. ToolURL: instance.ToolURL,
  34. }
  35. if instance.Error != "" {
  36. instanceInfo.Status = string(container.StatusError)
  37. }
  38. log.Printf("实例状态查询成功: 项目=%s, 状态=%s", id, instance.Status)
  39. return SuccessResponse(instanceInfo)
  40. }
  41. }