Signed-off-by: devad <cossjie@foxmail.com>
Former-commit-id: f40f21e142
scheduler_restruct
| @@ -649,3 +649,16 @@ type ( | |||||
| data interface{} `json:"data"` | data interface{} `json:"data"` | ||||
| } | } | ||||
| ) | ) | ||||
| type ( | |||||
| DeleteAppReq { | |||||
| Name string `form:"name"` | |||||
| NsID string `form:"nsID"` | |||||
| } | |||||
| DeleteAppResp { | |||||
| Code int `json:"code,omitempty"` | |||||
| Msg string `json:"msg,omitempty"` | |||||
| Data interface{} `json:"data,omitempty"` | |||||
| } | |||||
| ) | |||||
| @@ -546,4 +546,24 @@ service pcm { | |||||
| @doc "获取应用详情" | @doc "获取应用详情" | ||||
| @handler GetAppByAppName | @handler GetAppByAppName | ||||
| get /apps/getAppByAppName/:appName (AppDetailReq) returns (AppTaskResp) | get /apps/getAppByAppName/:appName (AppDetailReq) returns (AppTaskResp) | ||||
| @doc "删除应用" | |||||
| @handler DeleteAppByAppName | |||||
| get /apps/deleteApp (DeleteAppReq) returns (DeleteAppResp) | |||||
| @doc "更新应用" | |||||
| @handler UpdateAppByAppName | |||||
| get /apps/updateApp (DeleteAppReq) returns (AppTaskResp) | |||||
| @doc "重启应用" | |||||
| @handler RestartAppByAppName | |||||
| get /apps/restartApp (DeleteAppReq) returns (AppTaskResp) | |||||
| @doc "暂停应用" | |||||
| @handler PauseAppByAppName | |||||
| get /apps/pauseApp (DeleteAppReq) returns (AppTaskResp) | |||||
| @doc "启动应用" | |||||
| @handler StartAppByAppName | |||||
| get /apps/startApp (DeleteAppReq) returns (AppTaskResp) | |||||
| } | } | ||||
| @@ -0,0 +1,28 @@ | |||||
| package apps | |||||
| import ( | |||||
| "net/http" | |||||
| "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" | |||||
| ) | |||||
| func DeleteAppByAppNameHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | |||||
| return func(w http.ResponseWriter, r *http.Request) { | |||||
| var req types.DeleteAppReq | |||||
| if err := httpx.Parse(r, &req); err != nil { | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| return | |||||
| } | |||||
| l := apps.NewDeleteAppByAppNameLogic(r.Context(), svcCtx) | |||||
| resp, err := l.DeleteAppByAppName(&req) | |||||
| if err != nil { | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| } else { | |||||
| httpx.OkJsonCtx(r.Context(), w, resp) | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,28 @@ | |||||
| package apps | |||||
| import ( | |||||
| "net/http" | |||||
| "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" | |||||
| ) | |||||
| func PauseAppByAppNameHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | |||||
| return func(w http.ResponseWriter, r *http.Request) { | |||||
| var req types.DeleteAppReq | |||||
| if err := httpx.Parse(r, &req); err != nil { | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| return | |||||
| } | |||||
| l := apps.NewPauseAppByAppNameLogic(r.Context(), svcCtx) | |||||
| resp, err := l.PauseAppByAppName(&req) | |||||
| if err != nil { | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| } else { | |||||
| httpx.OkJsonCtx(r.Context(), w, resp) | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,28 @@ | |||||
| package apps | |||||
| import ( | |||||
| "net/http" | |||||
| "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" | |||||
| ) | |||||
| func RestartAppByAppNameHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | |||||
| return func(w http.ResponseWriter, r *http.Request) { | |||||
| var req types.DeleteAppReq | |||||
| if err := httpx.Parse(r, &req); err != nil { | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| return | |||||
| } | |||||
| l := apps.NewRestartAppByAppNameLogic(r.Context(), svcCtx) | |||||
| resp, err := l.RestartAppByAppName(&req) | |||||
| if err != nil { | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| } else { | |||||
| httpx.OkJsonCtx(r.Context(), w, resp) | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,28 @@ | |||||
| package apps | |||||
| import ( | |||||
| "net/http" | |||||
| "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" | |||||
| ) | |||||
| func StartAppByAppNameHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | |||||
| return func(w http.ResponseWriter, r *http.Request) { | |||||
| var req types.DeleteAppReq | |||||
| if err := httpx.Parse(r, &req); err != nil { | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| return | |||||
| } | |||||
| l := apps.NewStartAppByAppNameLogic(r.Context(), svcCtx) | |||||
| resp, err := l.StartAppByAppName(&req) | |||||
| if err != nil { | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| } else { | |||||
| httpx.OkJsonCtx(r.Context(), w, resp) | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,28 @@ | |||||
| package apps | |||||
| import ( | |||||
| "net/http" | |||||
| "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" | |||||
| ) | |||||
| func UpdateAppByAppNameHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | |||||
| return func(w http.ResponseWriter, r *http.Request) { | |||||
| var req types.DeleteAppReq | |||||
| if err := httpx.Parse(r, &req); err != nil { | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| return | |||||
| } | |||||
| l := apps.NewUpdateAppByAppNameLogic(r.Context(), svcCtx) | |||||
| resp, err := l.UpdateAppByAppName(&req) | |||||
| if err != nil { | |||||
| httpx.ErrorCtx(r.Context(), w, err) | |||||
| } else { | |||||
| httpx.OkJsonCtx(r.Context(), w, resp) | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -659,6 +659,31 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { | |||||
| Path: "/apps/getAppByAppName/:appName", | Path: "/apps/getAppByAppName/:appName", | ||||
| Handler: apps.GetAppByAppNameHandler(serverCtx), | Handler: apps.GetAppByAppNameHandler(serverCtx), | ||||
| }, | }, | ||||
| { | |||||
| Method: http.MethodGet, | |||||
| Path: "/apps/deleteApp", | |||||
| Handler: apps.DeleteAppByAppNameHandler(serverCtx), | |||||
| }, | |||||
| { | |||||
| Method: http.MethodGet, | |||||
| Path: "/apps/updateApp", | |||||
| Handler: apps.UpdateAppByAppNameHandler(serverCtx), | |||||
| }, | |||||
| { | |||||
| Method: http.MethodGet, | |||||
| Path: "/apps/restartApp", | |||||
| Handler: apps.RestartAppByAppNameHandler(serverCtx), | |||||
| }, | |||||
| { | |||||
| Method: http.MethodGet, | |||||
| Path: "/apps/pauseApp", | |||||
| Handler: apps.PauseAppByAppNameHandler(serverCtx), | |||||
| }, | |||||
| { | |||||
| Method: http.MethodGet, | |||||
| Path: "/apps/startApp", | |||||
| Handler: apps.StartAppByAppNameHandler(serverCtx), | |||||
| }, | |||||
| }, | }, | ||||
| rest.WithPrefix("/pcm/v1"), | rest.WithPrefix("/pcm/v1"), | ||||
| ) | ) | ||||
| @@ -0,0 +1,78 @@ | |||||
| package apps | |||||
| import ( | |||||
| "context" | |||||
| "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/utils" | |||||
| "gitlink.org.cn/jcce-pcm/pcm-participant-kubernetes/kubernetes" | |||||
| "gorm.io/gorm" | |||||
| "github.com/zeromicro/go-zero/core/logx" | |||||
| ) | |||||
| type DeleteAppByAppNameLogic struct { | |||||
| logx.Logger | |||||
| ctx context.Context | |||||
| svcCtx *svc.ServiceContext | |||||
| } | |||||
| func NewDeleteAppByAppNameLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteAppByAppNameLogic { | |||||
| return &DeleteAppByAppNameLogic{ | |||||
| Logger: logx.WithContext(ctx), | |||||
| ctx: ctx, | |||||
| svcCtx: svcCtx, | |||||
| } | |||||
| } | |||||
| type Cloud struct { | |||||
| Id int64 `db:"id"` // id | |||||
| TaskId int64 `db:"task_id"` // 任务id | |||||
| ParticipantId int64 `db:"participant_id"` // 集群静态信息id | |||||
| ApiVersion string `db:"api_version"` //api版本 | |||||
| Name string `db:"name"` // 名称 | |||||
| Namespace string `db:"namespace"` // 命名空间 | |||||
| Kind string `db:"kind"` // 种类 | |||||
| Status string `db:"status"` // 状态 | |||||
| StartTime string `db:"start_time"` // 开始时间 | |||||
| RunningTime int64 `db:"running_time"` // 运行时长 | |||||
| DeletedAt gorm.DeletedAt `gorm:"index"` | |||||
| YamlString string `db:"yaml_string"` | |||||
| Result string `db:"result"` // 运行结果 | |||||
| NsID string `db:"ns_id"` | |||||
| Replica int32 `db:"replica"` | |||||
| } | |||||
| func (l *DeleteAppByAppNameLogic) DeleteAppByAppName(req *types.DeleteAppReq) (resp *types.DeleteAppResp, err error) { | |||||
| resp = &types.DeleteAppResp{} | |||||
| var task = &Task{} | |||||
| //查询应用的yamlString | |||||
| l.svcCtx.DbEngin.Raw(`select * from task where ns_id= ? and name= ? `, req.NsID, req.Name).Scan(&task) | |||||
| if task.Id == 0 { | |||||
| resp.Code = 500 | |||||
| resp.Msg = "App not fount" | |||||
| return resp, err | |||||
| } | |||||
| var clouds []Cloud | |||||
| l.svcCtx.DbEngin.Raw(`select * from cloud where task_id= ? `, task.Id).Scan(&clouds) | |||||
| for _, cloud := range clouds { | |||||
| toYaml := utils.StringToYaml(cloud.YamlString) | |||||
| //调用p端接口查询应用详情 | |||||
| _, err = l.svcCtx.K8sRpc.DeleteYaml(context.Background(), &kubernetes.ApplyReq{ | |||||
| YamlString: *toYaml, | |||||
| }) | |||||
| } | |||||
| if err != nil { | |||||
| logx.Errorf("调用p端接口删除应用失败,err:%v", err) | |||||
| resp.Code = 500 | |||||
| resp.Msg = err.Error() | |||||
| return resp, nil | |||||
| } | |||||
| //删除task跟cloud表数据 | |||||
| l.svcCtx.DbEngin.Delete(&Task{}, task.Id) | |||||
| l.svcCtx.DbEngin.Delete(&Cloud{}, task.Id).Where("task_id = ?", task.Id) | |||||
| resp.Code = 200 | |||||
| resp.Msg = "succeed" | |||||
| return | |||||
| } | |||||
| @@ -0,0 +1,30 @@ | |||||
| package apps | |||||
| import ( | |||||
| "context" | |||||
| "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/svc" | |||||
| "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/types" | |||||
| "github.com/zeromicro/go-zero/core/logx" | |||||
| ) | |||||
| type PauseAppByAppNameLogic struct { | |||||
| logx.Logger | |||||
| ctx context.Context | |||||
| svcCtx *svc.ServiceContext | |||||
| } | |||||
| func NewPauseAppByAppNameLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PauseAppByAppNameLogic { | |||||
| return &PauseAppByAppNameLogic{ | |||||
| Logger: logx.WithContext(ctx), | |||||
| ctx: ctx, | |||||
| svcCtx: svcCtx, | |||||
| } | |||||
| } | |||||
| func (l *PauseAppByAppNameLogic) PauseAppByAppName(req *types.DeleteAppReq) (resp *types.AppTaskResp, err error) { | |||||
| // todo: add your logic here and delete this line | |||||
| return | |||||
| } | |||||
| @@ -0,0 +1,30 @@ | |||||
| package apps | |||||
| import ( | |||||
| "context" | |||||
| "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/svc" | |||||
| "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/types" | |||||
| "github.com/zeromicro/go-zero/core/logx" | |||||
| ) | |||||
| type RestartAppByAppNameLogic struct { | |||||
| logx.Logger | |||||
| ctx context.Context | |||||
| svcCtx *svc.ServiceContext | |||||
| } | |||||
| func NewRestartAppByAppNameLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RestartAppByAppNameLogic { | |||||
| return &RestartAppByAppNameLogic{ | |||||
| Logger: logx.WithContext(ctx), | |||||
| ctx: ctx, | |||||
| svcCtx: svcCtx, | |||||
| } | |||||
| } | |||||
| func (l *RestartAppByAppNameLogic) RestartAppByAppName(req *types.DeleteAppReq) (resp *types.AppTaskResp, err error) { | |||||
| // todo: add your logic here and delete this line | |||||
| return | |||||
| } | |||||
| @@ -0,0 +1,30 @@ | |||||
| package apps | |||||
| import ( | |||||
| "context" | |||||
| "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/svc" | |||||
| "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/types" | |||||
| "github.com/zeromicro/go-zero/core/logx" | |||||
| ) | |||||
| type StartAppByAppNameLogic struct { | |||||
| logx.Logger | |||||
| ctx context.Context | |||||
| svcCtx *svc.ServiceContext | |||||
| } | |||||
| func NewStartAppByAppNameLogic(ctx context.Context, svcCtx *svc.ServiceContext) *StartAppByAppNameLogic { | |||||
| return &StartAppByAppNameLogic{ | |||||
| Logger: logx.WithContext(ctx), | |||||
| ctx: ctx, | |||||
| svcCtx: svcCtx, | |||||
| } | |||||
| } | |||||
| func (l *StartAppByAppNameLogic) StartAppByAppName(req *types.DeleteAppReq) (resp *types.AppTaskResp, err error) { | |||||
| // todo: add your logic here and delete this line | |||||
| return | |||||
| } | |||||
| @@ -0,0 +1,30 @@ | |||||
| package apps | |||||
| import ( | |||||
| "context" | |||||
| "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/svc" | |||||
| "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/types" | |||||
| "github.com/zeromicro/go-zero/core/logx" | |||||
| ) | |||||
| type UpdateAppByAppNameLogic struct { | |||||
| logx.Logger | |||||
| ctx context.Context | |||||
| svcCtx *svc.ServiceContext | |||||
| } | |||||
| func NewUpdateAppByAppNameLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateAppByAppNameLogic { | |||||
| return &UpdateAppByAppNameLogic{ | |||||
| Logger: logx.WithContext(ctx), | |||||
| ctx: ctx, | |||||
| svcCtx: svcCtx, | |||||
| } | |||||
| } | |||||
| func (l *UpdateAppByAppNameLogic) UpdateAppByAppName(req *types.DeleteAppReq) (resp *types.AppTaskResp, err error) { | |||||
| // todo: add your logic here and delete this line | |||||
| return | |||||
| } | |||||
| @@ -612,6 +612,17 @@ type AppTaskResp struct { | |||||
| Data interface{} `json:"data"` | Data interface{} `json:"data"` | ||||
| } | } | ||||
| type DeleteAppReq struct { | |||||
| Name string `form:"name"` | |||||
| NsID string `form:"nsID"` | |||||
| } | |||||
| type DeleteAppResp struct { | |||||
| Code int `json:"code,omitempty"` | |||||
| Msg string `json:"msg,omitempty"` | |||||
| Data interface{} `json:"data,omitempty"` | |||||
| } | |||||
| type Job struct { | type Job struct { | ||||
| SlurmVersion string `json:"slurmVersion"` | SlurmVersion string `json:"slurmVersion"` | ||||
| Name string `json:"name"` | Name string `json:"name"` | ||||
| @@ -115,3 +115,18 @@ func ConvertStructToMap(in interface{}) map[string]string { | |||||
| } | } | ||||
| return out | return out | ||||
| } | } | ||||
| func StringToYaml(in string) *string { | |||||
| // 将Go字符串转换为字节数组 | |||||
| byteArray := []byte(in) | |||||
| // 解析YAML数据 | |||||
| var yamlData map[string]interface{} | |||||
| err := yaml.Unmarshal(byteArray, &yamlData) | |||||
| // 将解析后的数据转换为YAML格式 | |||||
| yamlString, err := yaml.Marshal(yamlData) | |||||
| if err != nil { | |||||
| fmt.Println(err) | |||||
| } | |||||
| resp := string(yamlString) | |||||
| return &resp | |||||
| } | |||||