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.go 3.6 kB

5 years ago
5 years ago
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package models
  2. import (
  3. "fmt"
  4. "code.gitea.io/gitea/modules/setting"
  5. "code.gitea.io/gitea/modules/timeutil"
  6. "xorm.io/builder"
  7. )
  8. type CloudbrainStatus int8
  9. const (
  10. JobWaiting CloudbrainStatus = iota
  11. JobStopped
  12. JobSucceeded
  13. JobFailed
  14. )
  15. type Cloudbrain struct {
  16. ID int64 `xorm:"pk autoincr"`
  17. JobID string `xorm:"INDEX NOT NULL"`
  18. JobName string
  19. Status int32 `xorm:"INDEX"`
  20. UserID int64 `xorm:"INDEX"`
  21. RepoID int64 `xorm:"INDEX"`
  22. CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
  23. UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"`
  24. User *User `xorm:"-"`
  25. Repo *Repository `xorm:"-"`
  26. }
  27. type CloudBrainLoginResult struct {
  28. Code string
  29. Msg string
  30. Payload map[string]interface{}
  31. }
  32. type TaskRole struct {
  33. Name string `json:"name"`
  34. TaskNumber int8 `json:"taskNumber"`
  35. MinSucceededTaskCount int8 `json:"minSucceededTaskCount"`
  36. MinFailedTaskCount int8 `json:"minFailedTaskCount"`
  37. CPUNumber int8 `json:"cpuNumber"`
  38. GPUNumber int8 `json:"gpuNumber"`
  39. MemoryMB int `json:"memoryMB"`
  40. ShmMB int `json:"shmMB"`
  41. Command string `json:"command"`
  42. NeedIBDevice bool `json:"needIBDevice"`
  43. IsMainRole bool `json:"isMainRole"`
  44. }
  45. type CreateJobParams struct {
  46. JobName string `json:"jobName"`
  47. RetryCount int8 `json:"retryCount"`
  48. GpuType string `json:"gpuType"`
  49. Image string `json:"image"`
  50. TaskRoles []TaskRole `json:"taskRoles"`
  51. }
  52. type CreateJobResult struct {
  53. Code string
  54. Msg string
  55. Payload map[string]interface{}
  56. }
  57. type GetJobResult struct {
  58. Code string `json:"code"`
  59. Msg string `json:"msg"`
  60. Payload map[string]interface{} `json:"payload"`
  61. }
  62. type CloudbrainsOptions struct {
  63. ListOptions
  64. RepoID int64 // include all repos if empty
  65. UserID int64
  66. JobStatus CloudbrainStatus
  67. SortType string
  68. CloudbrainIDs []int64
  69. }
  70. func Cloudbrains(opts *CloudbrainsOptions) ([]*Cloudbrain, int64, error) {
  71. sess := x.NewSession()
  72. defer sess.Close()
  73. var cond = builder.NewCond()
  74. if opts.RepoID > 0 {
  75. cond.And(
  76. builder.Eq{"cloudbrain.repo_id": opts.RepoID},
  77. )
  78. }
  79. if opts.UserID > 0 {
  80. cond.And(
  81. builder.Eq{"cloudbrain.user_id": opts.UserID},
  82. )
  83. }
  84. switch opts.JobStatus {
  85. case JobWaiting:
  86. cond.And(builder.Eq{"cloudbrain.status": int(JobWaiting)})
  87. case JobFailed:
  88. cond.And(builder.Eq{"cloudbrain.status": int(JobFailed)})
  89. case JobStopped:
  90. cond.And(builder.Eq{"cloudbrain.status": int(JobStopped)})
  91. case JobSucceeded:
  92. cond.And(builder.Eq{"cloudbrain.status": int(JobSucceeded)})
  93. }
  94. if len(opts.CloudbrainIDs) > 0 {
  95. cond.And(builder.In("cloudbrain.id", opts.CloudbrainIDs))
  96. }
  97. count, err := sess.Where(cond).Count(new(Cloudbrain))
  98. if err != nil {
  99. return nil, 0, fmt.Errorf("Count: %v", err)
  100. }
  101. if opts.Page >= 0 && opts.PageSize > 0 {
  102. var start int
  103. if opts.Page == 0 {
  104. start = 0
  105. } else {
  106. start = (opts.Page - 1) * opts.PageSize
  107. }
  108. sess.Limit(opts.PageSize, start)
  109. }
  110. sess.OrderBy("cloudbrain.created_unix DESC")
  111. cloudbrains := make([]*Cloudbrain, 0, setting.UI.IssuePagingNum)
  112. if err := sess.Find(&cloudbrains); err != nil {
  113. return nil, 0, fmt.Errorf("Find: %v", err)
  114. }
  115. sess.Close()
  116. return cloudbrains, count, nil
  117. }
  118. func CreateCloudbrain(cloudbrain *Cloudbrain) (err error) {
  119. if _, err = x.Insert(cloudbrain); err != nil {
  120. return err
  121. }
  122. return nil
  123. }