You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

cloudbrain_spec.go 3.6 kB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package models
  2. import (
  3. "code.gitea.io/gitea/modules/timeutil"
  4. )
  5. type CloudbrainSpec struct {
  6. CloudbrainID int64 `xorm:"pk"`
  7. SpecId int64 `xorm:"index"`
  8. SourceSpecId string
  9. AccCardsNum int
  10. AccCardType string `xorm:"index"`
  11. CpuCores int
  12. MemGiB float32
  13. GPUMemGiB float32
  14. ShareMemGiB float32
  15. ComputeResource string
  16. UnitPrice int
  17. QueueId int64
  18. QueueCode string
  19. Cluster string
  20. AiCenterCode string `xorm:"index"`
  21. AiCenterName string
  22. IsExclusive bool
  23. ExclusiveOrg string
  24. CreatedTime timeutil.TimeStamp `xorm:"created"`
  25. UpdatedTime timeutil.TimeStamp `xorm:"updated"`
  26. }
  27. func (s CloudbrainSpec) ConvertToSpecification() *Specification {
  28. return &Specification{
  29. ID: s.SpecId,
  30. SourceSpecId: s.SourceSpecId,
  31. AccCardsNum: s.AccCardsNum,
  32. AccCardType: s.AccCardType,
  33. CpuCores: s.CpuCores,
  34. MemGiB: s.MemGiB,
  35. GPUMemGiB: s.GPUMemGiB,
  36. ShareMemGiB: s.ShareMemGiB,
  37. ComputeResource: s.ComputeResource,
  38. UnitPrice: s.UnitPrice,
  39. QueueId: s.QueueId,
  40. QueueCode: s.QueueCode,
  41. Cluster: s.Cluster,
  42. AiCenterCode: s.AiCenterCode,
  43. AiCenterName: s.AiCenterName,
  44. IsExclusive: s.IsExclusive,
  45. ExclusiveOrg: s.ExclusiveOrg,
  46. }
  47. }
  48. func NewCloudBrainSpec(cloudbrainId int64, s Specification) CloudbrainSpec {
  49. return CloudbrainSpec{
  50. CloudbrainID: cloudbrainId,
  51. SpecId: s.ID,
  52. SourceSpecId: s.SourceSpecId,
  53. AccCardsNum: s.AccCardsNum,
  54. AccCardType: s.AccCardType,
  55. CpuCores: s.CpuCores,
  56. MemGiB: s.MemGiB,
  57. GPUMemGiB: s.GPUMemGiB,
  58. ShareMemGiB: s.ShareMemGiB,
  59. ComputeResource: s.ComputeResource,
  60. UnitPrice: s.UnitPrice,
  61. QueueId: s.QueueId,
  62. QueueCode: s.QueueCode,
  63. Cluster: s.Cluster,
  64. AiCenterCode: s.AiCenterCode,
  65. AiCenterName: s.AiCenterName,
  66. IsExclusive: s.IsExclusive,
  67. ExclusiveOrg: s.ExclusiveOrg,
  68. }
  69. }
  70. var StatusChangeChan = make(chan *Cloudbrain, 50)
  71. func InsertCloudbrainSpec(c CloudbrainSpec) (int64, error) {
  72. return x.Insert(&c)
  73. }
  74. func GetCloudbrainSpecByID(cloudbrainId int64) (*CloudbrainSpec, error) {
  75. r := &CloudbrainSpec{}
  76. if has, err := x.Where("cloudbrain_id = ?", cloudbrainId).Get(r); err != nil {
  77. return nil, err
  78. } else if !has {
  79. return nil, nil
  80. }
  81. return r, nil
  82. }
  83. func FindCloudbrainTask(page, pageSize int) ([]*Cloudbrain, error) {
  84. r := make([]*Cloudbrain, 0)
  85. err := x.Unscoped().
  86. Limit(pageSize, (page-1)*pageSize).
  87. OrderBy("cloudbrain.id").
  88. Find(&r)
  89. if err != nil {
  90. return nil, err
  91. }
  92. return r, nil
  93. }
  94. func CountNoSpecHistoricTask() (int64, error) {
  95. n, err := x.Unscoped().
  96. Where(" 1=1 and not exists (select 1 from cloudbrain_spec where cloudbrain.id = cloudbrain_spec.cloudbrain_id)").
  97. Count(&Cloudbrain{})
  98. if err != nil {
  99. return 0, err
  100. }
  101. return n, nil
  102. }
  103. // GetResourceSpecMapByCloudbrainIDs
  104. func GetResourceSpecMapByCloudbrainIDs(ids []int64) (map[int64]*Specification, error) {
  105. specs := make([]*CloudbrainSpec, 0)
  106. if err := x.In("cloudbrain_id", ids).Find(&specs); err != nil {
  107. return nil, err
  108. }
  109. r := make(map[int64]*Specification, len(ids))
  110. for _, s := range specs {
  111. r[s.CloudbrainID] = s.ConvertToSpecification()
  112. }
  113. return r, nil
  114. }
  115. func GetCloudbrainTaskUnitPrice(task Cloudbrain) (int, error) {
  116. s, err := GetCloudbrainSpecByID(task.ID)
  117. if err != nil {
  118. return 0, err
  119. }
  120. var n = 1
  121. if task.WorkServerNumber > 1 {
  122. n = task.WorkServerNumber
  123. }
  124. return s.UnitPrice * n, nil
  125. }