| @@ -37,6 +37,7 @@ type HpcInfo struct { | |||||
| Id int64 `json:"id"` // id | Id int64 `json:"id"` // id | ||||
| TaskId int64 `json:"task_id"` // 任务id | TaskId int64 `json:"task_id"` // 任务id | ||||
| JobId string `json:"job_id"` // 作业id(在第三方系统中的作业id) | JobId string `json:"job_id"` // 作业id(在第三方系统中的作业id) | ||||
| AdapterId int64 `json:"adapter_id"` // 执行任务的适配器id | |||||
| ClusterId int64 `json:"cluster_id"` // 执行任务的集群id | ClusterId int64 `json:"cluster_id"` // 执行任务的集群id | ||||
| ClusterType string `json:"cluster_type"` // 执行任务的集群类型 | ClusterType string `json:"cluster_type"` // 执行任务的集群类型 | ||||
| Name string `json:"name"` // 名称 | Name string `json:"name"` // 名称 | ||||
| @@ -8,29 +8,20 @@ info( | |||||
| version: "type version here" | version: "type version here" | ||||
| ) | ) | ||||
| type Job { | |||||
| SlurmVersion string `json:"slurmVersion"` | |||||
| name string `json:"name"` | |||||
| JobStartTime string `json:"JobStartTime"` | |||||
| JobRunTime string `json:"JobRunTime"` | |||||
| StateofJob string `json:"StateofJob"` | |||||
| } | |||||
| type ( | type ( | ||||
| commitHpcTaskReq { | commitHpcTaskReq { | ||||
| Name string `json:"name"` // paratera:jobName | |||||
| Name string `json:"name"` // paratera:jobName | |||||
| Description string `json:"description,optional"` | Description string `json:"description,optional"` | ||||
| tenantId int64 `json:"tenantId,optional"` | tenantId int64 `json:"tenantId,optional"` | ||||
| TaskId int64 `json:"taskId,optional"` | TaskId int64 `json:"taskId,optional"` | ||||
| AdapterId int64 `json:"adapterId,optional"` | AdapterId int64 `json:"adapterId,optional"` | ||||
| MatchLabels map[string]string `json:"matchLabels,optional"` | MatchLabels map[string]string `json:"matchLabels,optional"` | ||||
| CardCount int64 `json:"cardCount,optional"` | CardCount int64 `json:"cardCount,optional"` | ||||
| WorkDir string `json:"workDir,optional"` //paratera:workingDir | |||||
| WorkDir string `json:"workDir,optional"` //paratera:workingDir | |||||
| WallTime string `json:"wallTime,optional"` | WallTime string `json:"wallTime,optional"` | ||||
| CmdScript string `json:"cmdScript,optional"` // paratera:bootScript | CmdScript string `json:"cmdScript,optional"` // paratera:bootScript | ||||
| AppType string `json:"appType,optional"` | AppType string `json:"appType,optional"` | ||||
| AppName string `json:"appName,optional"` // paratera:jobGroupName ac:appname | |||||
| AppName string `json:"appName,optional"` // paratera:jobGroupName ac:appname | |||||
| Queue string `json:"queue,optional"` | Queue string `json:"queue,optional"` | ||||
| NNode string `json:"nNode,optional"` | NNode string `json:"nNode,optional"` | ||||
| SubmitType string `json:"submitType,optional"` | SubmitType string `json:"submitType,optional"` | ||||
| @@ -40,9 +31,7 @@ type ( | |||||
| Environment map[string]string `json:"environment,optional"` | Environment map[string]string `json:"environment,optional"` | ||||
| ClusterType string `json:"clusterType,optional"` | ClusterType string `json:"clusterType,optional"` | ||||
| } | } | ||||
| ) | |||||
| type ( | |||||
| commitHpcTaskResp { | commitHpcTaskResp { | ||||
| TaskId int64 `json:"taskId"` | TaskId int64 `json:"taskId"` | ||||
| Code int32 `json:"code"` | Code int32 `json:"code"` | ||||
| @@ -51,35 +40,76 @@ type ( | |||||
| ) | ) | ||||
| type ( | type ( | ||||
| listJobReq { | |||||
| hpcOverViewReq { | |||||
| } | } | ||||
| listJobResp { | |||||
| hpcOverViewResp { | |||||
| Code int32 `json:"code"` | Code int32 `json:"code"` | ||||
| Msg string `json:"msg"` | Msg string `json:"msg"` | ||||
| RecordCount int32 `json:"recordCount"` | |||||
| Jobs []Job `json:"jobInfos"` | |||||
| Data HPCOverView `json:"data"` | |||||
| } | |||||
| HPCOverView { | |||||
| AdapterCount int32 `json:"adapterCount"` | |||||
| StackCount int32 `json:"stackCount"` | |||||
| ClusterCount int32 `json:"clusterCount"` | |||||
| TaskCount int32 `json:"taskCount"` | |||||
| } | } | ||||
| ) | ) | ||||
| type HistoryJob { | |||||
| SlurmVersion string `json:"slurmVersion"` | |||||
| name string `json:"name"` | |||||
| JobStartTime string `json:"JobStartTime"` | |||||
| JobRunTime string `json:"JobRunTime"` | |||||
| StateofJob string `json:"StateofJob"` | |||||
| } | |||||
| type ( | |||||
| hpcAdapterSummaryReq { | |||||
| } | |||||
| hpcAdapterSummaryResp { | |||||
| Code int32 `json:"code"` | |||||
| Msg string `json:"msg"` | |||||
| Data []HPCAdapterSummary `json:"data"` | |||||
| } | |||||
| HPCAdapterSummary { | |||||
| AdapterName string `json:"adapterName"` | |||||
| StackCount int32 `json:"stackCount"` | |||||
| ClusterCount int32 `json:"clusterCount"` | |||||
| TaskCount int32 `json:"taskCount"` | |||||
| } | |||||
| ) | |||||
| type ( | type ( | ||||
| listHistoryJobReq { | |||||
| hpcJobReq { | |||||
| } | } | ||||
| listHistoryJobResp { | |||||
| hpcJobResp { | |||||
| Code int32 `json:"code"` | Code int32 `json:"code"` | ||||
| Msg string `json:"msg"` | Msg string `json:"msg"` | ||||
| RecordCount int32 `json:"recordCount"` | |||||
| HistoryJobs []HistoryJob `json:"jobInfoDbs"` | |||||
| Data []Job `json:"data"` | |||||
| } | |||||
| Job { | |||||
| JobName string `json:"jobName"` | |||||
| JobDesc string `json:"jobDesc"` | |||||
| SubmitTime string `json:"submitTime"` | |||||
| JobStatus string `json:"jobStatus"` | |||||
| AdapterName string `json:"adapterName"` | |||||
| ClusterName string `json:"clusterName"` | |||||
| ClusterType string `json:"clusterType"` | |||||
| } | } | ||||
| ) | ) | ||||
| type ( | |||||
| hpcResourceReq { | |||||
| } | |||||
| hpcResourceResp { | |||||
| Code int32 `json:"code"` | |||||
| Msg string `json:"msg"` | |||||
| HPCResource HPCResource `json:"hpcResource"` | |||||
| } | |||||
| HPCResource { | |||||
| GPUCardsTotal int32 `json:"gpuCoresTotal"` | |||||
| CPUCoresTotal int32 `json:"cpuCoresTotal"` | |||||
| RAMTotal int32 `json:"ramTotal"` | |||||
| GPUCardsUsed int32 `json:"gpuCoresUsed"` | |||||
| CPUCoresUsed int32 `json:"cpuCoresUsed"` | |||||
| RAMUsed int32 `json:"ramUsed"` | |||||
| GPURate float32 `json:"gpuRate"` | |||||
| CPURate float32 `json:"cpuRate"` | |||||
| RAMRate float32 `json:"ramRate"` | |||||
| } | |||||
| ) | |||||
| type QueueAssetsResp { | type QueueAssetsResp { | ||||
| QueueAssets []QueueAsset `json:"queueAsset"` | QueueAssets []QueueAsset `json:"queueAsset"` | ||||
| @@ -23,6 +23,7 @@ type HpcInfo struct { | |||||
| Id int64 `json:"id"` // id | Id int64 `json:"id"` // id | ||||
| TaskId int64 `json:"task_id"` // 任务id | TaskId int64 `json:"task_id"` // 任务id | ||||
| JobId string `json:"job_id"` // 作业id(在第三方系统中的作业id) | JobId string `json:"job_id"` // 作业id(在第三方系统中的作业id) | ||||
| AdapterId int64 `json:"adapter_id"` // 执行任务的适配器id | |||||
| ClusterId int64 `json:"cluster_id"` // 执行任务的集群id | ClusterId int64 `json:"cluster_id"` // 执行任务的集群id | ||||
| ClusterType string `json:"cluster_type"` // 执行任务的集群类型 | ClusterType string `json:"cluster_type"` // 执行任务的集群类型 | ||||
| Name string `json:"name"` // 名称 | Name string `json:"name"` // 名称 | ||||
| @@ -133,13 +133,17 @@ service pcm { | |||||
| @handler commitHpcTaskHandler | @handler commitHpcTaskHandler | ||||
| post /hpc/commitHpcTask (commitHpcTaskReq) returns (commitHpcTaskResp) | post /hpc/commitHpcTask (commitHpcTaskReq) returns (commitHpcTaskResp) | ||||
| @doc "超算查询任务列表" | |||||
| @handler listJobHandler | |||||
| get /hpc/listJob (listJobReq) returns (listJobResp) | |||||
| @doc "超算总览" | |||||
| @handler overViewHandler | |||||
| get /hpc/overview (hpcOverViewReq) returns (hpcOverViewResp) | |||||
| @doc "超算适配器列表" | |||||
| @handler adapterSummaryHandler | |||||
| get /hpc/adapterSummary (hpcAdapterSummaryReq) returns (hpcAdapterSummaryResp) | |||||
| @doc "超算查询历史任务列表" | |||||
| @handler listHistoryJobHandler | |||||
| get /hpc/listHistoryJob (listHistoryJobReq) returns (listHistoryJobResp) | |||||
| @doc "超算查询任务列表" | |||||
| @handler jobHandler | |||||
| get /hpc/job (hpcJobReq) returns (hpcJobResp) | |||||
| @doc "超算查询资产列表" | @doc "超算查询资产列表" | ||||
| @handler queueAssetsHandler | @handler queueAssetsHandler | ||||
| @@ -5,7 +5,7 @@ Port: 8999 | |||||
| Timeout: 50000 | Timeout: 50000 | ||||
| DB: | DB: | ||||
| DataSource: root:uJpLd6u-J?HC1@(10.206.0.12:3306)/pcm?parseTime=true&loc=Local | |||||
| DataSource: root:uJpLd6u-J?HC1@(47.92.88.143:3306)/pcm?parseTime=true&loc=Local | |||||
| Redis: | Redis: | ||||
| Host: 10.206.0.12:6379 | Host: 10.206.0.12:6379 | ||||
| @@ -1,24 +1,28 @@ | |||||
| package hpc | package hpc | ||||
| import ( | import ( | ||||
| "net/http" | |||||
| "github.com/zeromicro/go-zero/rest/httpx" | "github.com/zeromicro/go-zero/rest/httpx" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/logic/hpc" | "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/logic/hpc" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result" | |||||
| "net/http" | |||||
| ) | ) | ||||
| func ListHistoryJobHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | |||||
| func AdapterSummaryHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | |||||
| return func(w http.ResponseWriter, r *http.Request) { | return func(w http.ResponseWriter, r *http.Request) { | ||||
| var req types.ListHistoryJobReq | |||||
| var req types.HpcAdapterSummaryReq | |||||
| if err := httpx.Parse(r, &req); err != nil { | if err := httpx.Parse(r, &req); err != nil { | ||||
| result.ParamErrorResult(r, w, err) | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| return | return | ||||
| } | } | ||||
| l := hpc.NewListHistoryJobLogic(r.Context(), svcCtx) | |||||
| resp, err := l.ListHistoryJob(&req) | |||||
| result.HttpResult(r, w, resp, err) | |||||
| l := hpc.NewAdapterSummaryLogic(r.Context(), svcCtx) | |||||
| resp, err := l.AdapterSummary(&req) | |||||
| if err != nil { | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| } else { | |||||
| httpx.OkJsonCtx(r.Context(), w, resp) | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,24 +1,28 @@ | |||||
| package hpc | package hpc | ||||
| import ( | import ( | ||||
| "net/http" | |||||
| "github.com/zeromicro/go-zero/rest/httpx" | "github.com/zeromicro/go-zero/rest/httpx" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/logic/hpc" | "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/logic/hpc" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | ||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result" | |||||
| "net/http" | |||||
| ) | ) | ||||
| func ListJobHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | |||||
| func JobHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | |||||
| return func(w http.ResponseWriter, r *http.Request) { | return func(w http.ResponseWriter, r *http.Request) { | ||||
| var req types.ListJobReq | |||||
| var req types.HpcJobReq | |||||
| if err := httpx.Parse(r, &req); err != nil { | if err := httpx.Parse(r, &req); err != nil { | ||||
| result.ParamErrorResult(r, w, err) | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| return | return | ||||
| } | } | ||||
| l := hpc.NewListJobLogic(r.Context(), svcCtx) | |||||
| resp, err := l.ListJob(&req) | |||||
| result.HttpResult(r, w, resp, err) | |||||
| l := hpc.NewJobLogic(r.Context(), svcCtx) | |||||
| resp, err := l.Job(&req) | |||||
| if err != nil { | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| } else { | |||||
| httpx.OkJsonCtx(r.Context(), w, resp) | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -0,0 +1,28 @@ | |||||
| package hpc | |||||
| import ( | |||||
| "net/http" | |||||
| "github.com/zeromicro/go-zero/rest/httpx" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/logic/hpc" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | |||||
| ) | |||||
| func OverViewHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | |||||
| return func(w http.ResponseWriter, r *http.Request) { | |||||
| var req types.HpcOverViewReq | |||||
| if err := httpx.Parse(r, &req); err != nil { | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| return | |||||
| } | |||||
| l := hpc.NewOverViewLogic(r.Context(), svcCtx) | |||||
| resp, err := l.OverView(&req) | |||||
| if err != nil { | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| } else { | |||||
| httpx.OkJsonCtx(r.Context(), w, resp) | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -157,13 +157,18 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { | |||||
| }, | }, | ||||
| { | { | ||||
| Method: http.MethodGet, | Method: http.MethodGet, | ||||
| Path: "/hpc/listJob", | |||||
| Handler: hpc.ListJobHandler(serverCtx), | |||||
| Path: "/hpc/overview", | |||||
| Handler: hpc.OverViewHandler(serverCtx), | |||||
| }, | }, | ||||
| { | { | ||||
| Method: http.MethodGet, | Method: http.MethodGet, | ||||
| Path: "/hpc/listHistoryJob", | |||||
| Handler: hpc.ListHistoryJobHandler(serverCtx), | |||||
| Path: "/hpc/adapterSummary", | |||||
| Handler: hpc.AdapterSummaryHandler(serverCtx), | |||||
| }, | |||||
| { | |||||
| Method: http.MethodGet, | |||||
| Path: "/hpc/job", | |||||
| Handler: hpc.JobHandler(serverCtx), | |||||
| }, | }, | ||||
| { | { | ||||
| Method: http.MethodGet, | Method: http.MethodGet, | ||||
| @@ -0,0 +1,37 @@ | |||||
| package hpc | |||||
| import ( | |||||
| "context" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | |||||
| "github.com/zeromicro/go-zero/core/logx" | |||||
| ) | |||||
| type AdapterSummaryLogic struct { | |||||
| logx.Logger | |||||
| ctx context.Context | |||||
| svcCtx *svc.ServiceContext | |||||
| } | |||||
| func NewAdapterSummaryLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdapterSummaryLogic { | |||||
| return &AdapterSummaryLogic{ | |||||
| Logger: logx.WithContext(ctx), | |||||
| ctx: ctx, | |||||
| svcCtx: svcCtx, | |||||
| } | |||||
| } | |||||
| func (l *AdapterSummaryLogic) AdapterSummary(req *types.HpcAdapterSummaryReq) (resp *types.HpcAdapterSummaryResp, err error) { | |||||
| var hpcAdapterSummary []types.HPCAdapterSummary | |||||
| l.svcCtx.DbEngin.Raw("SELECT ta.NAME AS adapter_name,count( DISTINCT label ) as stack_count,count( DISTINCT tc.id ) as cluster_count,count( DISTINCT th.id) as task_count FROM t_adapter ta LEFT JOIN t_cluster tc ON ta.id = tc.adapter_id LEFT JOIN task_hpc th ON ta.id = th.adapter_id WHERE ta.type = 2 GROUP BY ta.id").Scan(&hpcAdapterSummary) | |||||
| resp = &types.HpcAdapterSummaryResp{ | |||||
| Code: 200, | |||||
| Msg: "success", | |||||
| Data: hpcAdapterSummary, | |||||
| } | |||||
| return resp, nil | |||||
| } | |||||
| @@ -0,0 +1,36 @@ | |||||
| package hpc | |||||
| import ( | |||||
| "context" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | |||||
| "github.com/zeromicro/go-zero/core/logx" | |||||
| ) | |||||
| type JobLogic struct { | |||||
| logx.Logger | |||||
| ctx context.Context | |||||
| svcCtx *svc.ServiceContext | |||||
| } | |||||
| func NewJobLogic(ctx context.Context, svcCtx *svc.ServiceContext) *JobLogic { | |||||
| return &JobLogic{ | |||||
| Logger: logx.WithContext(ctx), | |||||
| ctx: ctx, | |||||
| svcCtx: svcCtx, | |||||
| } | |||||
| } | |||||
| func (l *JobLogic) Job(req *types.HpcJobReq) (resp *types.HpcJobResp, err error) { | |||||
| var job []types.Job | |||||
| l.svcCtx.DbEngin.Raw("SELECT th.NAME as job_name,t.description as job_desc,t.commit_time as submit_time,th.STATUS as job_status,ta.name as adapter_name,tc.name as cluster_name,tc.label as cluster_type FROM task_hpc th LEFT JOIN task t ON t.id = th.task_id JOIN t_cluster tc on th.cluster_id = tc.id JOIN t_adapter ta on tc.adapter_id = ta.id").Scan(&job) | |||||
| resp = &types.HpcJobResp{ | |||||
| Code: 200, | |||||
| Msg: "success", | |||||
| Data: job, | |||||
| } | |||||
| return resp, nil | |||||
| } | |||||
| @@ -1,77 +0,0 @@ | |||||
| /* | |||||
| Copyright (c) [2023] [pcm] | |||||
| [pcm-coordinator] is licensed under Mulan PSL v2. | |||||
| You can use this software according to the terms and conditions of the Mulan PSL v2. | |||||
| You may obtain a copy of Mulan PSL v2 at: | |||||
| http://license.coscl.org.cn/MulanPSL2 | |||||
| THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, | |||||
| EITHER EXPaRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, | |||||
| MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. | |||||
| See the Mulan PSL v2 for more details. | |||||
| */ | |||||
| package hpc | |||||
| import ( | |||||
| "context" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/helper/enum" | |||||
| "strings" | |||||
| "github.com/zeromicro/go-zero/core/logx" | |||||
| ) | |||||
| type ListHistoryJobLogic struct { | |||||
| logx.Logger | |||||
| ctx context.Context | |||||
| svcCtx *svc.ServiceContext | |||||
| } | |||||
| func NewListHistoryJobLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListHistoryJobLogic { | |||||
| return &ListHistoryJobLogic{ | |||||
| Logger: logx.WithContext(ctx), | |||||
| ctx: ctx, | |||||
| svcCtx: svcCtx, | |||||
| } | |||||
| } | |||||
| func (l *ListHistoryJobLogic) ListHistoryJob(req *types.ListHistoryJobReq) (resp *types.ListHistoryJobResp, err error) { | |||||
| resp = &types.ListHistoryJobResp{} | |||||
| var tasks []types.HistoryJob | |||||
| // 查询任务数据 | |||||
| tx := l.svcCtx.DbEngin.Raw("SELECT h.service_name as SlurmVersion,h.name,h.start_time as JobStartTime,h.running_time as JobRunTime,t.status as StateofJob from hpc h join task t on t.id = h.task_id and t.status = 'Completed'").Scan(&tasks) | |||||
| if tx.Error != nil { | |||||
| logx.Error(err) | |||||
| return nil, tx.Error | |||||
| } | |||||
| for _, task := range tasks { | |||||
| // 承接方转义 | |||||
| if task.SlurmVersion != "" { | |||||
| var names []string | |||||
| servicesName := strings.Split(task.SlurmVersion, ",") | |||||
| for _, name := range servicesName { | |||||
| names = append(names, enum.Partner(name).String()) | |||||
| } | |||||
| task.SlurmVersion = strings.Join(names, ",") | |||||
| } | |||||
| resp.HistoryJobs = append(resp.HistoryJobs, types.HistoryJob{ | |||||
| SlurmVersion: task.SlurmVersion, | |||||
| Name: task.Name, | |||||
| JobStartTime: task.JobStartTime, | |||||
| JobRunTime: task.JobRunTime, | |||||
| StateofJob: task.StateofJob, | |||||
| }) | |||||
| } | |||||
| resp.Code = 200 | |||||
| resp.Msg = "success" | |||||
| resp.RecordCount = int32(len(resp.HistoryJobs)) | |||||
| return resp, nil | |||||
| } | |||||
| @@ -1,77 +0,0 @@ | |||||
| /* | |||||
| Copyright (c) [2023] [pcm] | |||||
| [pcm-coordinator] is licensed under Mulan PSL v2. | |||||
| You can use this software according to the terms and conditions of the Mulan PSL v2. | |||||
| You may obtain a copy of Mulan PSL v2 at: | |||||
| http://license.coscl.org.cn/MulanPSL2 | |||||
| THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, | |||||
| EITHER EXPaRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, | |||||
| MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. | |||||
| See the Mulan PSL v2 for more details. | |||||
| */ | |||||
| package hpc | |||||
| import ( | |||||
| "context" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/helper/enum" | |||||
| "strings" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | |||||
| "github.com/zeromicro/go-zero/core/logx" | |||||
| ) | |||||
| type ListJobLogic struct { | |||||
| logx.Logger | |||||
| ctx context.Context | |||||
| svcCtx *svc.ServiceContext | |||||
| } | |||||
| func NewListJobLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListJobLogic { | |||||
| return &ListJobLogic{ | |||||
| Logger: logx.WithContext(ctx), | |||||
| ctx: ctx, | |||||
| svcCtx: svcCtx, | |||||
| } | |||||
| } | |||||
| func (l *ListJobLogic) ListJob(req *types.ListJobReq) (resp *types.ListJobResp, err error) { | |||||
| resp = &types.ListJobResp{} | |||||
| var tasks []types.Job | |||||
| // 查询任务数据 | |||||
| tx := l.svcCtx.DbEngin.Raw("SELECT h.service_name as SlurmVersion,h.name,h.start_time as JobStartTime,h.running_time as JobRunTime,t.status as StateofJob from hpc h join task t on t.id = h.task_id and t.status != 'Completed'").Scan(&tasks) | |||||
| if tx.Error != nil { | |||||
| logx.Error(err) | |||||
| return nil, tx.Error | |||||
| } | |||||
| for _, task := range tasks { | |||||
| // 承接方转义 | |||||
| if task.SlurmVersion != "" { | |||||
| var names []string | |||||
| servicesName := strings.Split(task.SlurmVersion, ",") | |||||
| for _, name := range servicesName { | |||||
| names = append(names, enum.Partner(name).String()) | |||||
| } | |||||
| task.SlurmVersion = strings.Join(names, ",") | |||||
| } | |||||
| resp.Jobs = append(resp.Jobs, types.Job{ | |||||
| SlurmVersion: task.SlurmVersion, | |||||
| Name: task.Name, | |||||
| JobStartTime: task.JobStartTime, | |||||
| JobRunTime: task.JobRunTime + "s", | |||||
| StateofJob: task.StateofJob, | |||||
| }) | |||||
| } | |||||
| resp.Code = 200 | |||||
| resp.Msg = "success" | |||||
| resp.RecordCount = int32(len(resp.Jobs)) | |||||
| return resp, nil | |||||
| } | |||||
| @@ -0,0 +1,37 @@ | |||||
| package hpc | |||||
| import ( | |||||
| "context" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/svc" | |||||
| "gitlink.org.cn/JointCloud/pcm-coordinator/api/internal/types" | |||||
| "github.com/zeromicro/go-zero/core/logx" | |||||
| ) | |||||
| type OverViewLogic struct { | |||||
| logx.Logger | |||||
| ctx context.Context | |||||
| svcCtx *svc.ServiceContext | |||||
| } | |||||
| func NewOverViewLogic(ctx context.Context, svcCtx *svc.ServiceContext) *OverViewLogic { | |||||
| return &OverViewLogic{ | |||||
| Logger: logx.WithContext(ctx), | |||||
| ctx: ctx, | |||||
| svcCtx: svcCtx, | |||||
| } | |||||
| } | |||||
| func (l *OverViewLogic) OverView(req *types.HpcOverViewReq) (resp *types.HpcOverViewResp, err error) { | |||||
| var overView types.HPCOverView | |||||
| tx := l.svcCtx.DbEngin.Raw("SELECT count( DISTINCT a.id ) as adapter_count,count( DISTINCT label ) as stack_count,count( c.id ) as cluster_count,(select count(*) from task_hpc) as task_count FROM t_cluster c JOIN t_adapter a ON c.adapter_id = a.id AND a.type = 2 ").Scan(&overView) | |||||
| println(tx) | |||||
| resp = &types.HpcOverViewResp{ | |||||
| Code: 200, | |||||
| Msg: "success", | |||||
| Data: overView, | |||||
| } | |||||
| return resp, nil | |||||
| } | |||||
| @@ -841,14 +841,6 @@ type PageResult struct { | |||||
| PageSize int `json:"pageSize,omitempty"` | PageSize int `json:"pageSize,omitempty"` | ||||
| } | } | ||||
| type Job struct { | |||||
| SlurmVersion string `json:"slurmVersion"` | |||||
| Name string `json:"name"` | |||||
| JobStartTime string `json:"JobStartTime"` | |||||
| JobRunTime string `json:"JobRunTime"` | |||||
| StateofJob string `json:"StateofJob"` | |||||
| } | |||||
| type CommitHpcTaskReq struct { | type CommitHpcTaskReq struct { | ||||
| Name string `json:"name"` // paratera:jobName | Name string `json:"name"` // paratera:jobName | ||||
| Description string `json:"description,optional"` | Description string `json:"description,optional"` | ||||
| @@ -878,32 +870,76 @@ type CommitHpcTaskResp struct { | |||||
| Msg string `json:"msg"` | Msg string `json:"msg"` | ||||
| } | } | ||||
| type ListJobReq struct { | |||||
| type HpcOverViewReq struct { | |||||
| } | |||||
| type HpcOverViewResp struct { | |||||
| Code int32 `json:"code"` | |||||
| Msg string `json:"msg"` | |||||
| Data HPCOverView `json:"data"` | |||||
| } | |||||
| type HPCOverView struct { | |||||
| AdapterCount int32 `json:"adapterCount"` | |||||
| StackCount int32 `json:"stackCount"` | |||||
| ClusterCount int32 `json:"clusterCount"` | |||||
| TaskCount int32 `json:"taskCount"` | |||||
| } | |||||
| type HpcAdapterSummaryReq struct { | |||||
| } | } | ||||
| type ListJobResp struct { | |||||
| Code int32 `json:"code"` | |||||
| Msg string `json:"msg"` | |||||
| RecordCount int32 `json:"recordCount"` | |||||
| Jobs []Job `json:"jobInfos"` | |||||
| type HpcAdapterSummaryResp struct { | |||||
| Code int32 `json:"code"` | |||||
| Msg string `json:"msg"` | |||||
| Data []HPCAdapterSummary `json:"data"` | |||||
| } | |||||
| type HPCAdapterSummary struct { | |||||
| AdapterName string `json:"adapterName"` | |||||
| StackCount int32 `json:"stackCount"` | |||||
| ClusterCount int32 `json:"clusterCount"` | |||||
| TaskCount int32 `json:"taskCount"` | |||||
| } | |||||
| type HpcJobReq struct { | |||||
| } | |||||
| type HpcJobResp struct { | |||||
| Code int32 `json:"code"` | |||||
| Msg string `json:"msg"` | |||||
| Data []Job `json:"data"` | |||||
| } | |||||
| type Job struct { | |||||
| JobName string `json:"jobName"` | |||||
| JobDesc string `json:"jobDesc"` | |||||
| SubmitTime string `json:"submitTime"` | |||||
| JobStatus string `json:"jobStatus"` | |||||
| AdapterName string `json:"adapterName"` | |||||
| ClusterName string `json:"clusterName"` | |||||
| ClusterType string `json:"clusterType"` | |||||
| } | } | ||||
| type HistoryJob struct { | |||||
| SlurmVersion string `json:"slurmVersion"` | |||||
| Name string `json:"name"` | |||||
| JobStartTime string `json:"JobStartTime"` | |||||
| JobRunTime string `json:"JobRunTime"` | |||||
| StateofJob string `json:"StateofJob"` | |||||
| type HpcResourceReq struct { | |||||
| } | } | ||||
| type ListHistoryJobReq struct { | |||||
| type HpcResourceResp struct { | |||||
| Code int32 `json:"code"` | |||||
| Msg string `json:"msg"` | |||||
| HPCResource HPCResource `json:"hpcResource"` | |||||
| } | } | ||||
| type ListHistoryJobResp struct { | |||||
| Code int32 `json:"code"` | |||||
| Msg string `json:"msg"` | |||||
| RecordCount int32 `json:"recordCount"` | |||||
| HistoryJobs []HistoryJob `json:"jobInfoDbs"` | |||||
| type HPCResource struct { | |||||
| GPUCardsTotal int32 `json:"gpuCoresTotal"` | |||||
| CPUCoresTotal int32 `json:"cpuCoresTotal"` | |||||
| RAMTotal int32 `json:"ramTotal"` | |||||
| GPUCardsUsed int32 `json:"gpuCoresUsed"` | |||||
| CPUCoresUsed int32 `json:"cpuCoresUsed"` | |||||
| RAMUsed int32 `json:"ramUsed"` | |||||
| GPURate float32 `json:"gpuRate"` | |||||
| CPURate float32 `json:"cpuRate"` | |||||
| RAMRate float32 `json:"ramRate"` | |||||
| } | } | ||||
| type QueueAssetsResp struct { | type QueueAssetsResp struct { | ||||
| @@ -5190,6 +5226,7 @@ type HpcInfo struct { | |||||
| Id int64 `json:"id"` // id | Id int64 `json:"id"` // id | ||||
| TaskId int64 `json:"task_id"` // 任务id | TaskId int64 `json:"task_id"` // 任务id | ||||
| JobId string `json:"job_id"` // 作业id(在第三方系统中的作业id) | JobId string `json:"job_id"` // 作业id(在第三方系统中的作业id) | ||||
| AdapterId int64 `json:"adapter_id"` // 执行任务的适配器id | |||||
| ClusterId int64 `json:"cluster_id"` // 执行任务的集群id | ClusterId int64 `json:"cluster_id"` // 执行任务的集群id | ||||
| ClusterType string `json:"cluster_type"` // 执行任务的集群类型 | ClusterType string `json:"cluster_type"` // 执行任务的集群类型 | ||||
| Name string `json:"name"` // 名称 | Name string `json:"name"` // 名称 | ||||