|
- package resource
-
- import (
- "code.gitea.io/gitea/models"
- "code.gitea.io/gitea/modules/grampus"
- "code.gitea.io/gitea/modules/log"
- "code.gitea.io/gitea/routers/response"
- "code.gitea.io/gitea/services/admin/operate_log"
- "encoding/json"
- "fmt"
- "strings"
- )
-
- func AddResourceSpecification(doerId int64, req models.ResourceSpecificationReq) error {
- if req.Status == 0 {
- req.Status = models.SpecNotVerified
- }
- spec := req.ToDTO()
- if _, err := models.InsertResourceSpecification(spec); err != nil {
- return err
- }
- return nil
- }
-
- func UpdateResourceSpecification(doerId int64, specId int64, req models.ResourceSpecificationReq) *response.BizError {
- oldSpec, err := models.GetResourceSpecification(&models.ResourceSpecification{ID: specId})
- if err != nil {
- return response.NewBizError(err)
- }
- if oldSpec == nil {
- return response.SPECIFICATION_NOT_EXIST
- }
- n, err := models.UpdateResourceSpecificationById(specId, models.ResourceSpecification{
- UnitPrice: req.UnitPrice,
- })
- if err != nil {
- return response.NewBizError(err)
- }
-
- if n > 0 {
- newSpec, _ := models.GetResourceSpecification(&models.ResourceSpecification{ID: specId})
- AddSpecOperateLog(doerId, "edit", newSpec, oldSpec, fmt.Sprintf("修改单价从%d积分到%d积分", oldSpec.UnitPrice, newSpec.UnitPrice))
- }
- return nil
- }
-
- func SyncGrampusSpecs(doerId int64) error {
- r, err := grampus.GetResourceSpecs("")
- if err != nil {
- return err
- }
- specUpdateList := make([]models.ResourceSpecification, 0)
- specInsertList := make([]models.ResourceSpecification, 0)
- existIds := make([]int64, 0)
- for _, spec := range r.Infos {
- for _, c := range spec.Centers {
- computeResource := models.ParseComputeResourceFormGrampus(spec.SpecInfo.AccDeviceKind)
- if computeResource == "" {
- continue
- }
- accCardType := strings.ToUpper(spec.SpecInfo.AccDeviceModel)
- memGiB, err := models.ParseMemSizeFromGrampus(spec.SpecInfo.MemorySize)
- gpuMemGiB, err := models.ParseMemSizeFromGrampus(spec.SpecInfo.AccDeviceMemory)
- if err != nil {
- log.Error("ParseMemSizeFromGrampus error. MemorySize=%s AccDeviceMemory=%s", spec.SpecInfo.MemorySize, spec.SpecInfo.AccDeviceMemory)
- }
- // get resource queue.if queue not exist,skip it
- r, err := models.GetResourceQueue(&models.ResourceQueue{
- Cluster: models.C2NetCluster,
- AiCenterCode: c.ID,
- ComputeResource: computeResource,
- AccCardType: accCardType,
- })
- if err != nil || r == nil {
- continue
- }
-
- //Determine if this specification already exists.if exist,update params
- //if not exist,insert a new record and status is SpecNotVerified
- oldSpec, err := models.GetResourceSpecification(&models.ResourceSpecification{
- QueueId: r.ID,
- SourceSpecId: spec.ID,
- })
- if err != nil {
- return err
- }
-
- if oldSpec == nil {
- specInsertList = append(specInsertList, models.ResourceSpecification{
- QueueId: r.ID,
- SourceSpecId: spec.ID,
- AccCardsNum: spec.SpecInfo.AccDeviceNum,
- CpuCores: spec.SpecInfo.CpuCoreNum,
- MemGiB: memGiB,
- GPUMemGiB: gpuMemGiB,
- Status: models.SpecNotVerified,
- IsAutomaticSync: true,
- CreatedBy: doerId,
- UpdatedBy: doerId,
- })
- } else {
- existIds = append(existIds, oldSpec.ID)
- specUpdateList = append(specUpdateList, models.ResourceSpecification{
- ID: oldSpec.ID,
- AccCardsNum: spec.SpecInfo.AccDeviceNum,
- CpuCores: spec.SpecInfo.CpuCoreNum,
- MemGiB: memGiB,
- GPUMemGiB: gpuMemGiB,
- UpdatedBy: doerId,
- })
- }
-
- }
- }
- return models.SyncGrampusSpecs(specUpdateList, specInsertList, existIds)
- }
-
- //GetResourceSpecificationList returns specification and queue
- func GetResourceSpecificationList(opts models.SearchResourceSpecificationOptions) (*models.ResourceSpecAndQueueListRes, error) {
- n, r, err := models.SearchResourceSpecification(opts)
- if err != nil {
- return nil, err
- }
-
- return models.NewResourceSpecAndQueueListRes(n, r), nil
- }
-
- func GetResourceSpecificationScenes(specId int64) ([]models.ResourceSceneBriefRes, error) {
- r, err := models.GetSpecScenes(specId)
- if err != nil {
- return nil, err
- }
-
- return r, nil
- }
-
- func ResourceSpecOnShelf(doerId int64, id int64, req models.ResourceSpecificationReq) *response.BizError {
- spec, err := models.GetResourceSpecification(&models.ResourceSpecification{ID: id})
- if err != nil {
- return response.NewBizError(err)
- }
- if spec == nil {
- return response.SPECIFICATION_NOT_EXIST
- }
- if q, err := models.GetResourceQueue(&models.ResourceQueue{ID: spec.QueueId}); err != nil || q == nil {
- return response.RESOURCE_QUEUE_NOT_AVAILABLE
- }
-
- n, err := models.ResourceSpecOnShelf(id, models.ResourceSpecification{
- UnitPrice: req.UnitPrice,
- })
- if err != nil {
- return response.NewBizError(err)
- }
- if n > 0 {
- newSpec, _ := models.GetResourceSpecification(&models.ResourceSpecification{ID: id})
- AddSpecOperateLog(doerId, "on-shelf", newSpec, spec, fmt.Sprintf("修改单价从%d积分到%d积分", spec.UnitPrice, newSpec.UnitPrice))
- }
- return nil
-
- }
- func ResourceSpecOffShelf(doerId int64, id int64) *response.BizError {
- _, err := models.ResourceSpecOffShelf(id)
- if err != nil {
- return response.NewBizError(err)
- }
- return nil
-
- }
-
- func AddSpecOperateLog(doerId int64, operateType string, newSpec, oldSpec *models.ResourceSpecification, comment string) {
- newJson, _ := json.Marshal(newSpec)
- oldJson, _ := json.Marshal(oldSpec)
- operate_log.Log(models.AdminOperateLog{
- BizType: "SpecOperate",
- OperateType: operateType,
- OldValue: string(newJson),
- NewValue: string(oldJson),
- RelatedId: fmt.Sprint(newSpec.ID),
- Comment: comment,
- CreatedBy: doerId,
- })
- }
|