From 68bbd1174869544fc8ccaeef41af4373b5fb9a48 Mon Sep 17 00:00:00 2001 From: zhangwei <894646498@qq.com> Date: Wed, 3 Sep 2025 19:08:12 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E7=AE=97=E5=A2=9E=E5=8A=A0=E5=AE=B9?= =?UTF-8?q?=E5=99=A8=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/cloud/containerdeletehandler.go | 12 ++----- internal/handler/cloud/containerloghandler.go | 11 ++---- .../handler/cloud/containermetricshandler.go | 11 ++---- internal/handler/routes.go | 6 ++-- internal/logic/cloud/containerdeletelogic.go | 34 +++++++++++++++++-- internal/logic/cloud/containerloglogic.go | 29 ++++++++++++++++ internal/logic/cloud/containermetricslogic.go | 27 +++++++++++++++ internal/participant/cloud/interface.go | 16 +++++++++ internal/participant/cloud/model.go | 13 +++++++ internal/types/cloud/container.go | 18 +++++----- 10 files changed, 135 insertions(+), 42 deletions(-) create mode 100644 internal/participant/cloud/interface.go diff --git a/internal/handler/cloud/containerdeletehandler.go b/internal/handler/cloud/containerdeletehandler.go index 112c29ca..c0b8057d 100644 --- a/internal/handler/cloud/containerdeletehandler.go +++ b/internal/handler/cloud/containerdeletehandler.go @@ -1,10 +1,9 @@ package cloud import ( + "github.com/zeromicro/go-zero/rest/httpx" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/logic/cloud" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result" - "io" - "k8s.io/apimachinery/pkg/util/json" "net/http" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" @@ -14,17 +13,10 @@ import ( func ContainerDeleteHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { var req container.DeleteParam - body, err := io.ReadAll(r.Body) - if err != nil { + if err := httpx.Parse(r, &req); err != nil { result.ParamErrorResult(r, w, err) return } - - if err = json.Unmarshal(body, &req); err != nil { - result.ParamErrorResult(r, w, err) - return - } - l := cloud.NewContainerDeleteLogic(r.Context(), svcCtx) resp, err := l.ContainerDelete(&req) result.HttpResult(r, w, resp, err) diff --git a/internal/handler/cloud/containerloghandler.go b/internal/handler/cloud/containerloghandler.go index bdcbb292..79ecc8d7 100644 --- a/internal/handler/cloud/containerloghandler.go +++ b/internal/handler/cloud/containerloghandler.go @@ -1,11 +1,10 @@ package cloud import ( - "encoding/json" + "github.com/zeromicro/go-zero/rest/httpx" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/logic/cloud" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result" - "io" "net/http" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" @@ -15,16 +14,10 @@ import ( func ContainerLogHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { var req container.LogParam - body, err := io.ReadAll(r.Body) - if err != nil { + if err := httpx.Parse(r, &req); err != nil { result.ParamErrorResult(r, w, err) return } - if err = json.Unmarshal(body, &req); err != nil { - result.ParamErrorResult(r, w, err) - return - } - l := cloud.NewContainerLogLogic(r.Context(), svcCtx) resp, err := l.ContainerLog(&req) result.HttpResult(r, w, resp, err) diff --git a/internal/handler/cloud/containermetricshandler.go b/internal/handler/cloud/containermetricshandler.go index 56e95464..bae69641 100644 --- a/internal/handler/cloud/containermetricshandler.go +++ b/internal/handler/cloud/containermetricshandler.go @@ -1,11 +1,10 @@ package cloud import ( - "encoding/json" + "github.com/zeromicro/go-zero/rest/httpx" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/logic/cloud" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result" - "io" "net/http" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" @@ -15,16 +14,10 @@ import ( func ContainerMetricsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { var req container.MetricsParam - body, err := io.ReadAll(r.Body) - if err != nil { + if err := httpx.Parse(r, &req); err != nil { result.ParamErrorResult(r, w, err) return } - if err = json.Unmarshal(body, &req); err != nil { - result.ParamErrorResult(r, w, err) - return - } - l := cloud.NewContainerMetricsLogic(r.Context(), svcCtx) resp, err := l.ContainerMetrics(&req) result.HttpResult(r, w, resp, err) diff --git a/internal/handler/routes.go b/internal/handler/routes.go index bc403638..a4cb1a0a 100644 --- a/internal/handler/routes.go +++ b/internal/handler/routes.go @@ -397,7 +397,7 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { { // 删除容器 Method: http.MethodDelete, - Path: "/cloud/container/delete", + Path: "/cloud/container/delete/:id", Handler: cloud.ContainerDeleteHandler(serverCtx), }, { @@ -409,13 +409,13 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { { // 获取容器日志 Method: http.MethodGet, - Path: "/cloud/container/log", + Path: "/cloud/container/log/:id", Handler: cloud.ContainerLogHandler(serverCtx), }, { // 获取容器监控数据 Method: http.MethodGet, - Path: "/cloud/container/metrics", + Path: "/cloud/container/metrics/:id", Handler: cloud.ContainerMetricsHandler(serverCtx), }, }, diff --git a/internal/logic/cloud/containerdeletelogic.go b/internal/logic/cloud/containerdeletelogic.go index 98de9609..4a7c004f 100644 --- a/internal/logic/cloud/containerdeletelogic.go +++ b/internal/logic/cloud/containerdeletelogic.go @@ -18,10 +18,14 @@ import ( "context" "errors" "github.com/zeromicro/go-zero/core/logx" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/participant/cloud" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types" container "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types/cloud" "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/models" + "k8s.io/apimachinery/pkg/util/json" "net/http" + "strconv" ) type ContainerDeleteLogic struct { @@ -39,12 +43,29 @@ func NewContainerDeleteLogic(ctx context.Context, svcCtx *svc.ServiceContext) *C } func (l *ContainerDeleteLogic) ContainerDelete(req *container.DeleteParam) (resp interface{}, err error) { + task := &types.TaskModel{} + l.svcCtx.DbEngin.Table("task").Where("id", req.Id).Scan(&task) + if task.Name == "" { + return nil, errors.New("任务不存在") + } taskCloud := models.TaskCloud{} - l.svcCtx.DbEngin.Model(models.TaskAi{}).Where("id", req.Id).Scan(&taskCloud) + l.svcCtx.DbEngin.Table("task_cloud").Where("task_id", req.Id).Scan(&taskCloud) if taskCloud.Name == "" { - return nil, errors.New("任务不存在") + return nil, errors.New("通算任务不存在") } - create, err := l.svcCtx.Cloud.ContainerDelete(req.ClusterId, req) + if taskCloud.BusinessCode != "" && taskCloud.BusinessCode != "null" { + var eciRequestParam cloud.EciRequestParam + err := json.Unmarshal([]byte(taskCloud.BusinessCode), &eciRequestParam) + if err != nil { + logx.Errorf("Failed to unmarshal BusinessCode: %v", err) + return nil, err + } + req.Name = eciRequestParam.ContainerGroupId + } else { + req.Name = taskCloud.Name + } + req.ClusterId = strconv.FormatInt(taskCloud.ClusterId, 10) + create, err := l.svcCtx.Cloud.ContainerDelete(strconv.FormatInt(taskCloud.ClusterId, 10), req) if err != nil { return nil, err } @@ -53,5 +74,12 @@ func (l *ContainerDeleteLogic) ContainerDelete(req *container.DeleteParam) (resp } taskCloud.Status = "Deleted" l.svcCtx.DbEngin.Updates(taskCloud) + task.Status = "Deleted" + l.svcCtx.DbEngin.Updates(task) return } + +type DeleteContainerParam struct { + RequestId string `json:"RequestId"` + ContainerGroupId string `json:"ContainerGroupId"` +} diff --git a/internal/logic/cloud/containerloglogic.go b/internal/logic/cloud/containerloglogic.go index c8450ff5..82a65745 100644 --- a/internal/logic/cloud/containerloglogic.go +++ b/internal/logic/cloud/containerloglogic.go @@ -18,9 +18,14 @@ import ( "context" "errors" "github.com/zeromicro/go-zero/core/logx" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/participant/cloud" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types" container "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types/cloud" + "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/models" + "k8s.io/apimachinery/pkg/util/json" "net/http" + "strconv" ) type ContainerLogLogic struct { @@ -38,6 +43,30 @@ func NewContainerLogLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Cont } func (l *ContainerGetLogic) ContainerLog(req *container.LogParam) (resp interface{}, err error) { + task := &types.TaskModel{} + l.svcCtx.DbEngin.Table("task").Where("id", req.Id).Scan(&task) + if task.Name == "" { + return nil, errors.New("任务不存在") + } + taskCloud := models.TaskCloud{} + l.svcCtx.DbEngin.Table("task_cloud").Where("task_id", req.Id).Scan(&taskCloud) + if taskCloud.Name == "" { + return nil, errors.New("通算任务不存在") + } + if taskCloud.BusinessCode != "" && taskCloud.BusinessCode != "null" { + var eciRequestParam cloud.EciRequestParam + err := json.Unmarshal([]byte(taskCloud.BusinessCode), &eciRequestParam) + if err != nil { + logx.Errorf("Failed to unmarshal BusinessCode: %v", err) + return nil, err + } + eciLogParam := cloud.EciLogParam{ + ContainerGroupId: eciRequestParam.ContainerGroupId, + } + req.ContainerLogParameter = eciLogParam + } + req.Name = taskCloud.Name + req.ClusterId = strconv.FormatInt(taskCloud.ClusterId, 10) get, err := l.svcCtx.Cloud.ContainerLog(req.ClusterId, req) if err != nil { return nil, err diff --git a/internal/logic/cloud/containermetricslogic.go b/internal/logic/cloud/containermetricslogic.go index 523c7bbb..ffa9cf54 100644 --- a/internal/logic/cloud/containermetricslogic.go +++ b/internal/logic/cloud/containermetricslogic.go @@ -18,9 +18,14 @@ import ( "context" "errors" "github.com/zeromicro/go-zero/core/logx" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/participant/cloud" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types" container "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types/cloud" + "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/models" + "k8s.io/apimachinery/pkg/util/json" "net/http" + "strconv" ) type ContainerMetricsLogic struct { @@ -38,6 +43,28 @@ func NewContainerMetricsLogic(ctx context.Context, svcCtx *svc.ServiceContext) * } func (l *ContainerMetricsLogic) ContainerMetrics(req *container.MetricsParam) (resp interface{}, err error) { + task := &types.TaskModel{} + l.svcCtx.DbEngin.Table("task").Where("id", req.Id).Scan(&task) + if task.Name == "" { + return nil, errors.New("任务不存在") + } + taskCloud := models.TaskCloud{} + l.svcCtx.DbEngin.Table("task_cloud").Where("task_id", req.Id).Scan(&taskCloud) + if taskCloud.Name == "" { + return nil, errors.New("通算任务不存在") + } + if taskCloud.BusinessCode != "" && taskCloud.BusinessCode != "null" { + var eciRequestParam cloud.EciRequestParam + err := json.Unmarshal([]byte(taskCloud.BusinessCode), &eciRequestParam) + if err != nil { + logx.Errorf("Failed to unmarshal BusinessCode: %v", err) + return nil, err + } + req.Name = eciRequestParam.ContainerGroupId + } else { + req.Name = taskCloud.Name + } + req.ClusterId = strconv.FormatInt(taskCloud.ClusterId, 10) get, err := l.svcCtx.Cloud.ContainerMetrics(req.ClusterId, req) if err != nil { return nil, err diff --git a/internal/participant/cloud/interface.go b/internal/participant/cloud/interface.go new file mode 100644 index 00000000..8c0dbb9a --- /dev/null +++ b/internal/participant/cloud/interface.go @@ -0,0 +1,16 @@ +package cloud + +type ContainerCreateParameter interface { + ContainerCreateParam() +} + +type ContainerDeleteParameter interface { + ContainerDeleteParam() +} + +type ContainerGetParameter interface { + ContainerGetParam() +} +type ContainerLogParameter interface { + ContainerLogParam() +} diff --git a/internal/participant/cloud/model.go b/internal/participant/cloud/model.go index 81d88f07..92bd2512 100644 --- a/internal/participant/cloud/model.go +++ b/internal/participant/cloud/model.go @@ -41,3 +41,16 @@ type GetParam struct { Name string `json:"name,omitempty"` GetParameter interface{} `json:"getParameter,omitempty"` } +type LogParam struct { + Name string `json:"name,omitempty"` + GetParameter interface{} `json:"getParameter,omitempty"` +} + +type EciLogParam struct { + ContainerGroupId string `json:"containerGroupId"` +} + +type EciRequestParam struct { + RequestId string `json:"RequestId"` + ContainerGroupId string `json:"ContainerGroupId"` +} diff --git a/internal/types/cloud/container.go b/internal/types/cloud/container.go index ff732de8..442807ca 100644 --- a/internal/types/cloud/container.go +++ b/internal/types/cloud/container.go @@ -51,10 +51,10 @@ func (e EciCreateParam) ContainerCreateParam() { // 删除容器参数 type DeleteParam struct { - Id string `json:"id"` - ClusterId string `json:"clusterId,omitempty"` + Id string `path:"id"` + ClusterId string `json:"clusterId,optional"` Name string `json:"name,optional"` - DeleteParameter interface{} `json:"deleteParameter,omitempty"` + DeleteParameter interface{} `json:"deleteParameter,optional"` } func (k K8sDeleteParam) ContainerDeleteParameter() { @@ -91,14 +91,16 @@ type EciGetParam struct { ContainerGroupName string `json:"containerGroupName,omitempty"` } type LogParam struct { - ClusterId string `json:"clusterId"` - Name string `json:"name,omitempty"` - ContainerLogParameter interface{} `json:"containerLogParameter,omitempty"` + Id string `path:"id"` + ClusterId string `json:"clusterId,optional"` + Name string `json:"name,optional"` + ContainerLogParameter interface{} `json:"containerLogParameter,optional"` } type MetricsParam struct { - ClusterId string `json:"clusterId"` - Name string `json:"name,omitempty"` + Id string `path:"id"` + ClusterId string `json:"clusterId,optional"` + Name string `json:"name,optional"` } func (k K8sLogParam) ContainerLogParam() {