From b574a805165e4f403f02edcfdc9e38a8baa8d3ff Mon Sep 17 00:00:00 2001 From: jagger Date: Tue, 29 Jul 2025 18:20:26 +0800 Subject: [PATCH] add GetClusterBaseInfo handler and logic; implement API for retrieving cluster base information Signed-off-by: jagger --- desc/core/pcm-core.api | 10 +++ desc/pcm.api | 3 + .../adapters/getclusterbaseinfohandler.go | 24 ++++++ internal/handler/routes.go | 40 ++------- .../logic/adapters/getclusterbaseinfologic.go | 84 +++++++++++++++++++ internal/types/types.go | 21 +++-- 6 files changed, 142 insertions(+), 40 deletions(-) create mode 100644 internal/handler/adapters/getclusterbaseinfohandler.go create mode 100644 internal/logic/adapters/getclusterbaseinfologic.go diff --git a/desc/core/pcm-core.api b/desc/core/pcm-core.api index 7a4f68d26..58894986d 100644 --- a/desc/core/pcm-core.api +++ b/desc/core/pcm-core.api @@ -947,6 +947,16 @@ type ( ProxyEnable string `json:"proxyEnable,omitempty" db:"proxy_enable"` Driver string `json:"driver,omitempty" db:"driver"` } + + ClusterBaseInfo { + Id string `json:"id,omitempty" db:"id"` + AdapterId int64 `json:"adapterId,omitempty,string" db:"adapter_id"` + Name string `json:"name,omitempty" db:"name"` + Nickname string `json:"nickname,omitempty" db:"nickname"` + Description string `json:"description,omitempty" db:"description"` + Server string `json:"server,omitempty" db:"server"` + Driver string `json:"driver,omitempty" db:"driver"` + } ) type ClusterDelReq { diff --git a/desc/pcm.api b/desc/pcm.api index 41a9737a1..9df89a97d 100644 --- a/desc/pcm.api +++ b/desc/pcm.api @@ -948,6 +948,9 @@ service pcm { @handler GetAdapterInfoHandler get /adapter/getAdapterInfo (adapterInfoNameReq) returns (adapterInfoNameReqResp) + + @handler GetClusterBaseInfoHandler + get /adapter/cluster/getClusterBaseInfo (ClusterReq) returns (PageResult) } @server ( diff --git a/internal/handler/adapters/getclusterbaseinfohandler.go b/internal/handler/adapters/getclusterbaseinfohandler.go new file mode 100644 index 000000000..747faf149 --- /dev/null +++ b/internal/handler/adapters/getclusterbaseinfohandler.go @@ -0,0 +1,24 @@ +package adapters + +import ( + "github.com/zeromicro/go-zero/rest/httpx" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/logic/adapters" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types" + "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result" + "net/http" +) + +func GetClusterBaseInfoHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.ClusterReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + + l := adapters.NewGetClusterBaseInfoLogic(r.Context(), svcCtx) + resp, err := l.GetClusterBaseInfo(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/internal/handler/routes.go b/internal/handler/routes.go index 03cdfbeed..3a303022e 100644 --- a/internal/handler/routes.go +++ b/internal/handler/routes.go @@ -39,6 +39,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/adapter/cluster/get", Handler: adapters.GetClusterHandler(serverCtx), }, + { + Method: http.MethodGet, + Path: "/adapter/cluster/getClusterBaseInfo", + Handler: adapters.GetClusterBaseInfoHandler(serverCtx), + }, { Method: http.MethodGet, Path: "/adapter/cluster/list", @@ -98,7 +103,7 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { { // 创建算法 Method: http.MethodPost, - Path: "/ai/createAlgorithm", + Path: "/ai/CreateAlgorithm/:projectId", Handler: ai.CreateAlgorithmHandler(serverCtx), }, { @@ -218,22 +223,9 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { { // 创建数据集 Method: http.MethodPost, - Path: "/ai/createDataSet", + Path: "/ai/createDataSet/:projectId", Handler: ai.CreateDataSetHandler(serverCtx), }, - { - // 创建模型 - Method: http.MethodPost, - Path: "/ai/createModel", - Handler: ai.CreateModelHandler(serverCtx), - }, - - { - // 创建模型 - Method: http.MethodPost, - Path: "/ai/task/sync", - Handler: ai.TaskResultSyncHandler(serverCtx), - }, { // 创建notebook Method: http.MethodPost, @@ -376,24 +368,6 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/task/list", Handler: cloud.CloudListHandler(serverCtx), }, - { - // 创建容器 - Method: http.MethodPost, - Path: "/cloud/container/create", - Handler: cloud.ContainerCreateHandler(serverCtx), - }, - { - // 删除容器 - Method: http.MethodDelete, - Path: "/cloud/container/delete", - Handler: cloud.ContainerDeleteHandler(serverCtx), - }, - { - // 获取容器 - Method: http.MethodGet, - Path: "/cloud/container/get", - Handler: cloud.ContainerGetHandler(serverCtx), - }, }, rest.WithPrefix("/pcm/v1"), ) diff --git a/internal/logic/adapters/getclusterbaseinfologic.go b/internal/logic/adapters/getclusterbaseinfologic.go new file mode 100644 index 000000000..24392937d --- /dev/null +++ b/internal/logic/adapters/getclusterbaseinfologic.go @@ -0,0 +1,84 @@ +package adapters + +import ( + "context" + + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type GetClusterBaseInfoLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetClusterBaseInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetClusterBaseInfoLogic { + return &GetClusterBaseInfoLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *GetClusterBaseInfoLogic) GetClusterBaseInfo(req *types.ClusterReq) (resp *types.PageResult, err error) { + limit := req.PageSize + offset := req.PageSize * (req.PageNum - 1) + resp = &types.PageResult{} + var list []types.ClusterBaseInfo + db := l.svcCtx.DbEngin.Model(&types.AdapterInfo{}).Table("t_cluster") + + db = db.Joins("left join t_adapter on t_adapter.id = t_cluster.adapter_id"). + Where("t_cluster.deleted_at is null") + if req.Name != "" { + db = db.Where("t_cluster.name LIKE ?", "%"+req.Name+"%") + } + if req.AdapterId != "" { + db = db.Where("t_cluster.adapter_id = ?", req.AdapterId) + } + if req.Nickname != "" { + db = db.Where("t_cluster.nickname LIKE ?", "%"+req.Nickname+"%") + } + if req.Label != "" { + db = db.Where("t_cluster.label = ?", req.Label) + } + if req.Version != "" { + db = db.Where("t_cluster.version = ?", req.Version) + } + if req.ProducerDict != "" { + db = db.Where("t_cluster.producer_dict = ?", req.ProducerDict) + } + if req.RegionDict != "" { + db = db.Where("t_cluster.region_dict = ?", req.RegionDict) + } + if req.Type != "" { + db = db.Where("t_adapter.type = ?", req.Type) + } + if req.ResourceType != "" { + db = db.Where("t_adapter.resource_type = ?", req.ResourceType) + } + if req.StorageSchedule != "" { + db = db.Where("t_cluster.storage_schedule = ?", req.StorageSchedule) + } + + //count total + var total int64 + err = db.Select("*").Count(&total).Error + if err != nil { + return resp, err + } + + db = db.Limit(limit).Offset(offset) + err = db.Select("t_cluster.*").Order("t_cluster.create_time desc").Scan(&list).Error + if err != nil { + return resp, err + } + resp.List = list + resp.PageSize = req.PageSize + resp.PageNum = req.PageNum + resp.Total = total + + return resp, nil +} diff --git a/internal/types/types.go b/internal/types/types.go index 319afae9e..fb522be35 100644 --- a/internal/types/types.go +++ b/internal/types/types.go @@ -700,6 +700,16 @@ type ClusterAvail struct { ClusterName string `json:"clusterName"` } +type ClusterBaseInfo struct { + Id string `json:"id,omitempty" db:"id"` + AdapterId int64 `json:"adapterId,omitempty,string" db:"adapter_id"` + Name string `json:"name,omitempty" db:"name"` + Nickname string `json:"nickname,omitempty" db:"nickname"` + Description string `json:"description,omitempty" db:"description"` + Server string `json:"server,omitempty" db:"server"` + Driver string `json:"driver,omitempty" db:"driver"` +} + type ClusterCreateReq struct { Id string `json:"id,optional"` AdapterId string `json:"adapterId,optional"` @@ -718,14 +728,13 @@ type ClusterCreateReq struct { Version string `json:"version,optional"` Label string `json:"label,optional"` OwnerId string `json:"ownerId,omitempty,optional"` - AuthType int32 `json:"authType,optional"` + AuthType string `json:"authType,optional"` ProducerDict string `json:"producerDict,optional"` RegionDict string `json:"regionDict,optional"` RegionName string `json:"regionName,optional"` Environment map[string]string `json:"environment,optional"` CostType string `json:"costType,optional"` Price int `json:"price,optional"` - Status string `json:"status,optional"` } type ClusterData struct { @@ -757,7 +766,7 @@ type ClusterInfo struct { Version string `json:"version,omitempty" db:"version"` Label string `json:"label,omitempty" db:"label"` OwnerId string `json:"ownerId,omitempty" db:"owner_id"` - AuthType int32 `json:"authType,omitempty" db:"auth_type"` + AuthType string `json:"authType,omitempty" db:"auth_type"` ProducerDict string `json:"producerDict,omitempty" db:"producer_dict"` RegionDict string `json:"regionDict,omitempty" db:"region_dict"` Location string `json:"location,omitempty" db:"location"` @@ -769,7 +778,6 @@ type ClusterInfo struct { ProxyAddress string `json:"proxyAddress,omitempty" db:"proxy_address"` ProxyEnable string `json:"proxyEnable,omitempty" db:"proxy_enable"` Driver string `json:"driver,omitempty" db:"driver"` - Status string `json:"status,omitempty" db:"status"` } type ClusterListResp struct { @@ -825,7 +833,7 @@ type ClusterRelationInfo struct { CVersion string `json:"cVersion,omitempty" db:"version"` CLabel string `json:"cLabel,omitempty" db:"label"` COwnerId string `json:"cOwnerId,omitempty" db:"owner_id"` - CAuthType int32 `json:"cAuthType,omitempty" db:"auth_type"` + CAuthType string `json:"cAuthType,omitempty" db:"auth_type"` CRegionDict string `json:"cRegionDict,omitempty" db:"-"` CProducerDict string `json:"cProducerDict,omitempty" db:"-"` CCreateTime string `json:"cCreateTime,omitempty" db:"created_time" gorm:"autoCreateTime"` @@ -2145,8 +2153,7 @@ type EditResourceReq struct { CpuUnit string `json:"cpuUnit,optional"` MemoryValue string `json:"memoryValue,optional"` MemoryUnit string `json:"memoryUnit,optional"` - - UserId int64 `json:"userId,optional"` + UserId int64 `json:"userId,optional"` } type EndpointsReq struct {