diff --git a/api/desc/core/pcm-core.api b/api/desc/core/pcm-core.api index 938b5f5d..6d677523 100644 --- a/api/desc/core/pcm-core.api +++ b/api/desc/core/pcm-core.api @@ -614,4 +614,8 @@ type ( MemoryRate float64 `json:"memoryRate"` MemoryLimit float64 `json:"memoryLimit"` } -) \ No newline at end of file + + AppTaskResp { + data interface{} `json:"data"` + } +) diff --git a/api/desc/pcm.api b/api/desc/pcm.api index f2539457..57b97590 100644 --- a/api/desc/pcm.api +++ b/api/desc/pcm.api @@ -531,11 +531,15 @@ service pcm { @handler AppListHandler get /apps/list (AppListReq) returns (AppListResp) - @doc "应用详情" + @doc "获取应用分发详情" @handler AppDetailHandler - get /apps/detail/:appName (AppDetailReq) returns (AppDetailResp) + get /apps/distribute/:appName (AppDetailReq) returns (AppDetailResp) @doc "应用pods列表" @handler AppPodsHandler get /apps/pods/:appName (AppDetailReq) returns (AppDetailResp) + + @doc "获取应用详情" + @handler GetAppByAppName + get /apps/getAppByAppName/:appName (AppDetailReq) returns (AppTaskResp) } \ No newline at end of file diff --git a/api/internal/handler/apps/getappbyappnamehandler.go b/api/internal/handler/apps/getappbyappnamehandler.go new file mode 100644 index 00000000..8732f57d --- /dev/null +++ b/api/internal/handler/apps/getappbyappnamehandler.go @@ -0,0 +1,24 @@ +package apps + +import ( + "github.com/zeromicro/go-zero/rest/httpx" + "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/logic/apps" + "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/svc" + "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/types" + "gitlink.org.cn/jcce-pcm/pcm-coordinator/pkg/repository/result" + "net/http" +) + +func GetAppByAppNameHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.AppDetailReq + if err := httpx.Parse(r, &req); err != nil { + result.ParamErrorResult(r, w, err) + return + } + + l := apps.NewGetAppByAppNameLogic(r.Context(), svcCtx) + resp, err := l.GetAppByAppName(&req) + result.HttpResult(r, w, resp, err) + } +} diff --git a/api/internal/handler/routes.go b/api/internal/handler/routes.go index f9a94381..7015f3b6 100644 --- a/api/internal/handler/routes.go +++ b/api/internal/handler/routes.go @@ -641,7 +641,7 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { }, { Method: http.MethodGet, - Path: "/apps/detail/:appName", + Path: "/apps/distribute/:appName", Handler: apps.AppDetailHandler(serverCtx), }, { @@ -649,6 +649,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/apps/pods/:appName", Handler: apps.AppPodsHandler(serverCtx), }, + { + Method: http.MethodGet, + Path: "/apps/getAppByAppName/:appName", + Handler: apps.GetAppByAppNameHandler(serverCtx), + }, }, rest.WithPrefix("/pcm/v1"), ) diff --git a/api/internal/logic/apps/applistlogic.go b/api/internal/logic/apps/applistlogic.go index a0f29f5b..2b32fb53 100644 --- a/api/internal/logic/apps/applistlogic.go +++ b/api/internal/logic/apps/applistlogic.go @@ -2,6 +2,7 @@ package apps import ( "context" + "gorm.io/datatypes" "gorm.io/gorm" "time" @@ -36,7 +37,7 @@ type Task struct { StartTime string `db:"start_time"` // 开始时间 EndTime string `db:"end_time"` // 结束运行时间 RunningTime int64 `db:"running_time"` // 已运行时间(单位秒) - YamlString string `db:"yaml_string"` + YamlString datatypes.JSON `db:"yaml_string"` Result string `db:"result"` // 作业结果 DeletedAt gorm.DeletedAt `gorm:"index"` NsID string `db:"ns_id"` diff --git a/api/internal/logic/apps/getappbyappnamelogic.go b/api/internal/logic/apps/getappbyappnamelogic.go new file mode 100644 index 00000000..3d03f698 --- /dev/null +++ b/api/internal/logic/apps/getappbyappnamelogic.go @@ -0,0 +1,33 @@ +package apps + +import ( + "context" + "github.com/zeromicro/go-zero/core/logx" + "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/svc" + "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/types" +) + +type GetAppByAppNameLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetAppByAppNameLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetAppByAppNameLogic { + return &GetAppByAppNameLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *GetAppByAppNameLogic) GetAppByAppName(req *types.AppDetailReq) (resp interface{}, err error) { + var task Task + db := l.svcCtx.DbEngin.Raw("select * from task where ns_id = ? and name = ?", req.NsID, req.Name).Scan(&task) + if db.Error != nil { + logx.Errorf("db error: %v", db.Error) + return + } + resp = task.YamlString + return +} diff --git a/api/internal/types/types.go b/api/internal/types/types.go index d9150716..7cb9030b 100644 --- a/api/internal/types/types.go +++ b/api/internal/types/types.go @@ -578,6 +578,10 @@ type AppDetailResp struct { MemoryLimit float64 `json:"memoryLimit"` } +type AppTaskResp struct { + Data interface{} `json:"data"` +} + type Job struct { SlurmVersion string `json:"slurmVersion"` Name string `json:"name"`