package admin import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/routers/response" "code.gitea.io/gitea/services/cloudbrain/resource" "net/http" "strconv" "strings" ) const ( tplResourceQueue base.TplName = "admin/resources/queue" tplResourceSpecification base.TplName = "admin/resources/specification" tplResourceScene base.TplName = "admin/resources/scene" ) func GetQueuePage(ctx *context.Context) { ctx.Data["PageIsAdmin"] = true ctx.Data["PageIsAdminResources"] = true ctx.Data["PageIsAdminResourcesQueue"] = true ctx.HTML(200, tplResourceQueue) } func GetSpecificationPage(ctx *context.Context) { ctx.Data["PageIsAdmin"] = true ctx.Data["PageIsAdminResources"] = true ctx.Data["PageIsAdminResourcesSpecification"] = true ctx.HTML(200, tplResourceSpecification) } func GetScenePage(ctx *context.Context) { ctx.Data["PageIsAdmin"] = true ctx.Data["PageIsAdminResources"] = true ctx.Data["PageIsAdminResourcesScene"] = true ctx.HTML(200, tplResourceScene) } func GetResourceQueueList(ctx *context.Context) { page := ctx.QueryInt("page") cluster := ctx.Query("cluster") aiCenterCode := ctx.Query("center") computeResource := ctx.Query("resource") accCardType := ctx.Query("card") list, err := resource.GetResourceQueueList(models.SearchResourceQueueOptions{ ListOptions: models.ListOptions{Page: page, PageSize: 10}, Cluster: cluster, AiCenterCode: aiCenterCode, ComputeResource: computeResource, AccCardType: accCardType, }) if err != nil { log.Error("GetResourceQueueList error.%v", err) ctx.JSON(http.StatusOK, response.ServerError(err.Error())) return } ctx.JSON(http.StatusOK, response.SuccessWithData(list)) } func GetResourceQueueCodes(ctx *context.Context) { cluster := ctx.Query("cluster") list, err := resource.GetResourceQueueCodes(models.GetQueueCodesOptions{Cluster: cluster}) if err != nil { log.Error("GetResourceQueueCodes error.%v", err) ctx.JSON(http.StatusOK, response.ServerError(err.Error())) return } ctx.JSON(http.StatusOK, response.SuccessWithData(list)) } func GetResourceAiCenters(ctx *context.Context) { list, err := resource.GetResourceAiCenters() if err != nil { log.Error("GetResourceAiCenters error.%v", err) ctx.JSON(http.StatusOK, response.ServerError(err.Error())) return } ctx.JSON(http.StatusOK, response.SuccessWithData(list)) } func AddResourceQueue(ctx *context.Context, req models.ResourceQueueReq) { req.IsAutomaticSync = false req.CreatorId = ctx.User.ID err := resource.AddResourceQueue(req) if err != nil { log.Error("AddResourceQueue error. %v", err) ctx.JSON(http.StatusOK, response.ServerError(err.Error())) return } ctx.JSON(http.StatusOK, response.Success()) } func UpdateResourceQueue(ctx *context.Context, req models.ResourceQueueReq) { queueId := ctx.ParamsInt64(":id") //only CardsTotalNum permitted to change err := resource.UpdateResourceQueue(queueId, req) if err != nil { log.Error("UpdateResourceQueue error. %v", err) ctx.JSON(http.StatusOK, response.ServerError(err.Error())) return } ctx.JSON(http.StatusOK, response.Success()) } func SyncGrampusQueue(ctx *context.Context) { err := resource.SyncGrampusQueue(ctx.User.ID) if err != nil { log.Error("AddResourceQueue error. %v", err) ctx.JSON(http.StatusOK, response.ServerError(err.Error())) return } ctx.JSON(http.StatusOK, response.Success()) } func GetResourceSpecificationList(ctx *context.Context) { page := ctx.QueryInt("page") queue := ctx.QueryInt64("queue") status := ctx.QueryInt("status") cluster := ctx.Query("cluster") available := ctx.QueryInt("available") list, err := resource.GetResourceSpecificationList(models.SearchResourceSpecificationOptions{ ListOptions: models.ListOptions{Page: page, PageSize: 10}, QueueId: queue, Status: status, Cluster: cluster, AvailableCode: available, OrderBy: models.SearchSpecOrderById, }) if err != nil { log.Error("GetResourceSpecificationList error.%v", err) ctx.JSON(http.StatusOK, response.ServerError(err.Error())) return } ctx.JSON(http.StatusOK, response.SuccessWithData(list)) } func GetAllResourceSpecificationList(ctx *context.Context) { queue := ctx.QueryInt64("queue") status := ctx.QueryInt("status") cluster := ctx.Query("cluster") available := ctx.QueryInt("available") list, err := resource.GetAllDistinctResourceSpecification(models.SearchResourceSpecificationOptions{ QueueId: queue, Status: status, Cluster: cluster, AvailableCode: available, }) if err != nil { log.Error("GetResourceSpecificationList error.%v", err) ctx.JSON(http.StatusOK, response.ServerError(err.Error())) return } ctx.JSON(http.StatusOK, response.SuccessWithData(list)) } func GetResourceSpecificationScenes(ctx *context.Context) { specId := ctx.ParamsInt64(":id") list, err := resource.GetResourceSpecificationScenes(specId) if err != nil { log.Error("GetResourceSpecificationScenes error.%v", err) ctx.JSON(http.StatusOK, response.ServerError(err.Error())) return } r := make(map[string]interface{}) r["List"] = list ctx.JSON(http.StatusOK, response.SuccessWithData(r)) } func AddResourceSpecification(ctx *context.Context, req models.ResourceSpecificationReq) { req.IsAutomaticSync = false req.CreatorId = ctx.User.ID err := resource.AddResourceSpecification(ctx.User.ID, req) if err != nil { log.Error("AddResourceQueue error. %v", err) ctx.JSON(http.StatusOK, response.ServerError(err.Error())) return } ctx.JSON(http.StatusOK, response.Success()) } func UpdateResourceSpecification(ctx *context.Context, req models.ResourceSpecificationReq) { id := ctx.ParamsInt64(":id") action := ctx.Query("action") var err *response.BizError switch action { case "edit": if req.UnitPrice < 0 { ctx.JSON(http.StatusOK, response.ServerError("param error")) return } //only UnitPrice and permitted to change err = resource.UpdateSpecUnitPrice(ctx.User.ID, id, req.UnitPrice) case "on-shelf": err = resource.ResourceSpecOnShelf(ctx.User.ID, id, req.UnitPrice) case "off-shelf": err = resource.ResourceSpecOffShelf(ctx.User.ID, id) } if err != nil { log.Error("UpdateResourceSpecification error. %v", err) ctx.JSON(http.StatusOK, response.ResponseBizError(err)) return } ctx.JSON(http.StatusOK, response.Success()) } func SyncGrampusSpecs(ctx *context.Context) { err := resource.SyncGrampusSpecs(ctx.User.ID) if err != nil { log.Error("AddResourceQueue error. %v", err) ctx.JSON(http.StatusOK, response.ServerError(err.Error())) return } ctx.JSON(http.StatusOK, response.Success()) } func GetResourceSceneList(ctx *context.Context) { page := ctx.QueryInt("page") jobType := ctx.Query("jobType") aiCenterCode := ctx.Query("center") queueId := ctx.QueryInt64("queue") isExclusive := ctx.QueryInt("IsExclusive") list, err := resource.GetResourceSceneList(models.SearchResourceSceneOptions{ ListOptions: models.ListOptions{Page: page, PageSize: 10}, JobType: jobType, IsExclusive: isExclusive, AiCenterCode: aiCenterCode, QueueId: queueId, }) if err != nil { log.Error("GetResourceSceneList error.%v", err) ctx.JSON(http.StatusOK, response.ServerError(err.Error())) return } ctx.JSON(http.StatusOK, response.SuccessWithData(list)) } func AddResourceScene(ctx *context.Context, req models.ResourceSceneReq) { req.CreatorId = ctx.User.ID req.ExclusiveOrg = strings.ReplaceAll(req.ExclusiveOrg, " ", "") err := resource.AddResourceScene(req) if err != nil { log.Error("AddResourceScene error. %v", err) ctx.JSON(http.StatusOK, response.ServerError(err.Error())) return } ctx.JSON(http.StatusOK, response.Success()) } func UpdateResourceScene(ctx *context.Context, req models.ResourceSceneReq) { id := ctx.ParamsInt64(":id") action := ctx.Query("action") req.ID = id var err error switch action { case "edit": req.ExclusiveOrg = strings.ReplaceAll(req.ExclusiveOrg, " ", "") err = resource.UpdateResourceScene(req) case "delete": err = resource.DeleteResourceScene(id) } if err != nil { log.Error("UpdateResourceScene error. %v", err) ctx.JSON(http.StatusOK, response.ServerError(err.Error())) return } ctx.JSON(http.StatusOK, response.Success()) } func RefreshHistorySpec(ctx *context.Context) { scope := ctx.Query("scope") list := ctx.Query("list") var scopeAll = false if scope == "all" { scopeAll = true } var ids = make([]int64, 0) if list != "" { strs := strings.Split(list, "|") for _, s := range strs { i, err := strconv.ParseInt(s, 10, 64) if err != nil { ctx.JSON(http.StatusOK, response.ServerError(err.Error())) return } ids = append(ids, i) } } total, success, err := resource.RefreshHistorySpec(scopeAll, ids) if err != nil { log.Error("RefreshHistorySpec error. %v", err) ctx.JSON(http.StatusOK, response.ServerError(err.Error())) return } r := make(map[string]interface{}, 0) r["success"] = success r["total"] = total ctx.JSON(http.StatusOK, response.SuccessWithData(r)) }