diff --git a/routers/admin/resources.go b/routers/admin/resources.go index 20638553b..026c37e52 100644 --- a/routers/admin/resources.go +++ b/routers/admin/resources.go @@ -136,6 +136,26 @@ func GetResourceSpecificationList(ctx *context.Context) { 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) diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 322f746f4..9d19d6c5e 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -645,6 +645,7 @@ func RegisterRoutes(m *macaron.Macaron) { m.Group("/specification", func() { m.Get("", admin.GetSpecificationPage) m.Get("/list", admin.GetResourceSpecificationList) + m.Get("/list/all", admin.GetAllResourceSpecificationList) m.Get("/scenes/:id", admin.GetResourceSpecificationScenes) m.Post("/grampus/sync", admin.SyncGrampusSpecs) m.Post("/add", binding.Bind(models.ResourceSpecificationReq{}), admin.AddResourceSpecification) @@ -1487,6 +1488,12 @@ func RegisterRoutes(m *macaron.Macaron) { m.Get("/record/list", point.GetPointRecordList) }, reqSignIn) + m.Group("/resources", func() { + m.Group("/queue", func() { + m.Get("/centers", admin.GetResourceAiCenters) + }) + }) + if setting.API.EnableSwagger { m.Get("/swagger.v1.json", templates.JSONRenderer(), routers.SwaggerV1Json) } diff --git a/services/cloudbrain/resource/resource_specification.go b/services/cloudbrain/resource/resource_specification.go index c3c75419f..d23fd3aad 100644 --- a/services/cloudbrain/resource/resource_specification.go +++ b/services/cloudbrain/resource/resource_specification.go @@ -130,10 +130,48 @@ func GetResourceSpecificationList(opts models.SearchResourceSpecificationOptions if err != nil { return nil, err } - return models.NewResourceSpecAndQueueListRes(n, r), nil } +//GetAllDistinctResourceSpecification returns specification and queue after distinct +//totalSize is always 0 here +func GetAllDistinctResourceSpecification(opts models.SearchResourceSpecificationOptions) (*models.ResourceSpecAndQueueListRes, error) { + opts.Page = 0 + opts.PageSize = 1000 + _, r, err := models.SearchResourceSpecification(opts) + if err != nil { + return nil, err + } + nr := distinctResourceSpecAndQueue(r) + return models.NewResourceSpecAndQueueListRes(0, nr), nil +} + +func distinctResourceSpecAndQueue(r []models.ResourceSpecAndQueue) []models.ResourceSpecAndQueue { + specs := make([]models.ResourceSpecAndQueue, 0, len(r)) + sourceSpecIdMap := make(map[string]models.ResourceSpecAndQueue, 0) + for i := 0; i < len(r); i++ { + spec := r[i] + if spec.SourceSpecId == "" { + specs = append(specs, spec) + continue + } + if _, has := sourceSpecIdMap[spec.SourceSpecId]; has { + //prefer to use on-shelf spec + if sourceSpecIdMap[spec.SourceSpecId].Status != spec.Status && spec.Status == models.SpecOnShelf { + for k, v := range specs { + if v.ResourceSpecification.ID == sourceSpecIdMap[spec.SourceSpecId].ResourceSpecification.ID { + specs[k] = spec + } + } + } + continue + } + specs = append(specs, spec) + sourceSpecIdMap[spec.SourceSpecId] = spec + } + return specs +} + func GetResourceSpecificationScenes(specId int64) ([]models.ResourceSceneBriefRes, error) { r, err := models.GetSpecScenes(specId) if err != nil { diff --git a/web_src/vuepages/apis/modules/resources.js b/web_src/vuepages/apis/modules/resources.js index 32a87c53f..965d5ae04 100644 --- a/web_src/vuepages/apis/modules/resources.js +++ b/web_src/vuepages/apis/modules/resources.js @@ -110,6 +110,19 @@ export const getResSpecificationList = (params) => { }); } +// 查询资源规格列表(所有) +// cluster 所属集群 :OpenI 启智集群,C2Net 智算集群 +// queue 所属队列id +// status 状态 : 1 待审核 2已上架 3已下架 +export const getResSpecificationListAll = (params) => { + return service({ + url: '/admin/resources/specification/list/all', + method: 'get', + params, + data: {}, + }); +} + // 同步智算网络资源池(队列) export const syncResSpecification = () => { return service({ diff --git a/web_src/vuepages/pages/resources/components/SceneDialog.vue b/web_src/vuepages/pages/resources/components/SceneDialog.vue index cadfb1db1..fed3f8db0 100644 --- a/web_src/vuepages/pages/resources/components/SceneDialog.vue +++ b/web_src/vuepages/pages/resources/components/SceneDialog.vue @@ -89,7 +89,7 @@