From d672a1e0b86210bb3c9bcd9c60f38939f7a6ee13 Mon Sep 17 00:00:00 2001 From: jagger Date: Fri, 25 Jul 2025 19:35:14 +0800 Subject: [PATCH] add UserId field to resource spec requests and handlers; enhance user tracking in resource synchronization Signed-off-by: jagger --- desc/core/pcm-core.api | 2 ++ .../handler/core/compareresourcespechandler.go | 10 +++++++++- internal/handler/core/syncresourcespechandler.go | 9 +++++++++ internal/logic/core/compareresourcespeclogic.go | 14 ++++++++------ internal/logic/core/syncresourcespeclogic.go | 2 +- internal/storeLink/modelarts.go | 10 ++++++++-- internal/types/types.go | 4 +++- 7 files changed, 40 insertions(+), 11 deletions(-) diff --git a/desc/core/pcm-core.api b/desc/core/pcm-core.api index 644221397..e826fdbb5 100644 --- a/desc/core/pcm-core.api +++ b/desc/core/pcm-core.api @@ -1416,6 +1416,7 @@ type ResourceSpecReq { type FetchResourceSpecReq { ClusterId string `form:"clusterId,optional"` Tag string `form:"tag,optional"` + UserId int64 `form:"userId,optional"` } type IdReq { @@ -1483,4 +1484,5 @@ type EditResourceReq { type SyncResourceReq { Id string `json:"id"` + UserId int64 `json:"userId"` } \ No newline at end of file diff --git a/internal/handler/core/compareresourcespechandler.go b/internal/handler/core/compareresourcespechandler.go index 787c9ce8d..3cc571352 100644 --- a/internal/handler/core/compareresourcespechandler.go +++ b/internal/handler/core/compareresourcespechandler.go @@ -6,6 +6,7 @@ import ( "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" + "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils" "net/http" ) @@ -16,7 +17,14 @@ func CompareResourceSpecHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { result.ParamErrorResult(r, w, err) return } - + token := r.Header.Get("Authorization") + // 获取用户信息 + jccUserInfo, err := utils.ParseTokenWithoutVerify(token) + if err != nil { + result.ParamErrorResult(r, w, err) + return + } + req.UserId = jccUserInfo.Id l := core.NewCompareResourceSpecLogic(r.Context(), svcCtx) resp, err := l.CompareResourceSpec(&req) result.HttpResult(r, w, resp, err) diff --git a/internal/handler/core/syncresourcespechandler.go b/internal/handler/core/syncresourcespechandler.go index 610428ce6..0461e2a1d 100644 --- a/internal/handler/core/syncresourcespechandler.go +++ b/internal/handler/core/syncresourcespechandler.go @@ -6,6 +6,7 @@ import ( "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" + "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/utils" "net/http" ) @@ -17,6 +18,14 @@ func SyncResourceSpecHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return } + token := r.Header.Get("Authorization") + // 获取用户信息 + jccUserInfo, err := utils.ParseTokenWithoutVerify(token) + if err != nil { + result.ParamErrorResult(r, w, err) + return + } + req.UserId = jccUserInfo.Id l := core.NewSyncResourceSpecLogic(r.Context(), svcCtx) resp, err := l.SyncResourceSpec(&req) result.HttpResult(r, w, resp, err) diff --git a/internal/logic/core/compareresourcespeclogic.go b/internal/logic/core/compareresourcespeclogic.go index ebff0a545..ae51358a6 100644 --- a/internal/logic/core/compareresourcespeclogic.go +++ b/internal/logic/core/compareresourcespeclogic.go @@ -79,7 +79,7 @@ func (l *CompareResourceSpecLogic) CompareResourceSpec(req *types.FetchResourceS } // 同步资源到数据库 - if err := l.syncResourcesToDB(apiResources); err != nil { + if err := l.syncResourcesToDB(apiResources, req.UserId); err != nil { return nil, fmt.Errorf("failed to sync resources: %w", err) } @@ -135,10 +135,10 @@ func decodeAPIResponse(input interface{}, output *[]APIResponse) error { return nil } -func (l *CompareResourceSpecLogic) syncResourcesToDB(apiResponses []APIResponse) error { +func (l *CompareResourceSpecLogic) syncResourcesToDB(apiResponses []APIResponse, userId int64) error { for _, response := range apiResponses { // 转换API响应到数据库模型 - dbSpecs, apiSpecs, err := l.processAPIResponse(response) + dbSpecs, apiSpecs, err := l.processAPIResponse(response, userId) if err != nil { return err } @@ -151,7 +151,7 @@ func (l *CompareResourceSpecLogic) syncResourcesToDB(apiResponses []APIResponse) return nil } -func (l *CompareResourceSpecLogic) processAPIResponse(response APIResponse) ([]models.TResourceSpec, []models.TResourceSpec, error) { +func (l *CompareResourceSpecLogic) processAPIResponse(response APIResponse, userId int64) ([]models.TResourceSpec, []models.TResourceSpec, error) { ClusterId := utils.StringToInt64(response.ClusterId) var dbSpecs []models.TResourceSpec if err := l.svcCtx.DbEngin.Model(models.TResourceSpec{}).Preload("BaseResourceSpecs"). @@ -167,7 +167,7 @@ func (l *CompareResourceSpecLogic) processAPIResponse(response APIResponse) ([]m if res.Resource.Name == "" || res.Resource.Type == "" { continue } - spec := l.convertToResourceSpec(ClusterId, res, response.Tag) + spec := l.convertToResourceSpec(ClusterId, res, response.Tag, userId) apiSpecs = append(apiSpecs, spec) } @@ -333,7 +333,7 @@ func (l *CompareResourceSpecLogic) isSpecChanged(old, new models.TResourceSpec) return len(oldBaseMap) > 0 } -func (l *CompareResourceSpecLogic) convertToResourceSpec(ClusterId int64, res Resource, tag string) models.TResourceSpec { +func (l *CompareResourceSpecLogic) convertToResourceSpec(ClusterId int64, res Resource, tag string, userId int64) models.TResourceSpec { spec := models.TResourceSpec{ SourceKey: resourceKey(res.Resource.Type, res.Resource.Name, tag), Type: res.Resource.Type, @@ -344,6 +344,7 @@ func (l *CompareResourceSpecLogic) convertToResourceSpec(ClusterId int64, res Re ClusterId: ClusterId, CreateTime: time.Now(), UpdateTime: time.Now(), + UserId: userId, ChangeType: ChangeTypeNormal, } @@ -355,6 +356,7 @@ func (l *CompareResourceSpecLogic) convertToResourceSpec(ClusterId int64, res Re TotalUnit: br.Total.Unit, AvailableValue: br.Available.Value, AvailableUnit: br.Available.Unit, + UserId: userId, CreateTime: time.Now(), UpdateTime: time.Now(), }) diff --git a/internal/logic/core/syncresourcespeclogic.go b/internal/logic/core/syncresourcespeclogic.go index ceada07d9..da7d51161 100644 --- a/internal/logic/core/syncresourcespeclogic.go +++ b/internal/logic/core/syncresourcespeclogic.go @@ -51,7 +51,7 @@ func (l *SyncResourceSpecLogic) SyncResourceSpec(req *types.SyncResourceReq) (re } for _, response := range apiResources { // 转换API响应到数据库模型 - _, apiSpecs, err := compareLogic.processAPIResponse(response) + _, apiSpecs, err := compareLogic.processAPIResponse(response, req.UserId) if err != nil { return nil, err } diff --git a/internal/storeLink/modelarts.go b/internal/storeLink/modelarts.go index 7a3d0b2c2..af3c517c7 100644 --- a/internal/storeLink/modelarts.go +++ b/internal/storeLink/modelarts.go @@ -162,8 +162,14 @@ func (m *ModelArtsLink) SubmitTask(ctx context.Context, imageId string, cmd stri outputs := make([]*modelarts.OutputTraining, 0) outputValue := "" for _, env := range envs { - s := strings.Split(env, COMMA) - environments[s[0]] = s[1] + // 找到第一个逗号位置 + idx := strings.Index(env, COMMA) + if idx == -1 { + continue + } + key := strings.TrimSpace(env[:idx]) + value := strings.TrimSpace(env[idx+1:]) + environments[key] = value } for _, param := range params { s := strings.Split(param, COMMA) diff --git a/internal/types/types.go b/internal/types/types.go index cb131df27..4d106b80c 100644 --- a/internal/types/types.go +++ b/internal/types/types.go @@ -2283,6 +2283,7 @@ type Fault struct { type FetchResourceSpecReq struct { ClusterId string `form:"clusterId,optional"` Tag string `form:"tag,optional"` + UserId int64 `form:"userId,optional"` } type Fields struct { @@ -5566,7 +5567,8 @@ type SyncClusterAlertReq struct { } type SyncResourceReq struct { - Id string `json:"id"` + Id string `json:"id"` + UserId int64 `json:"userId"` } type Tags struct {