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 5.0 kB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package wechat
  2. import (
  3. "code.gitea.io/gitea/models"
  4. "code.gitea.io/gitea/modules/log"
  5. "code.gitea.io/gitea/modules/setting"
  6. "fmt"
  7. "time"
  8. )
  9. type JobOperateType string
  10. const (
  11. JobOperateTypeStart JobOperateType = "start"
  12. JobOperateTypeStop JobOperateType = "stop"
  13. )
  14. type CloudbrainStartMsg struct {
  15. }
  16. func (CloudbrainStartMsg) Data(ctx *TemplateContext) *DefaultWechatTemplate {
  17. return &DefaultWechatTemplate{
  18. First: TemplateValue{Value: setting.CloudbrainStartedTitle},
  19. Keyword1: TemplateValue{Value: ctx.Cloudbrain.DisplayJobName},
  20. Keyword2: TemplateValue{Value: getJobTypeDisplayName(ctx.Cloudbrain.JobType)},
  21. Keyword3: TemplateValue{Value: time.Unix(int64(ctx.Cloudbrain.CreatedUnix), 0).Format("2006-01-02 15:04:05")},
  22. Remark: TemplateValue{Value: setting.CloudbrainStartedRemark},
  23. }
  24. }
  25. func (CloudbrainStartMsg) ShouldSend(ctx *TemplateContext) bool {
  26. if len(setting.CloudbrainStartedNotifyList) == 0 {
  27. return false
  28. }
  29. for _, v := range setting.CloudbrainStartedNotifyList {
  30. if v == ctx.Cloudbrain.JobType {
  31. return true
  32. }
  33. }
  34. return false
  35. }
  36. func (CloudbrainStartMsg) MsgId(ctx *TemplateContext) string {
  37. return string(JobOperateTypeStart) + "_" + fmt.Sprint(ctx.Cloudbrain.ID)
  38. }
  39. func (CloudbrainStartMsg) Url(ctx *TemplateContext) string {
  40. repo, err := models.GetRepositoryByID(ctx.Cloudbrain.RepoID)
  41. if err != nil {
  42. log.Error("CloudbrainStartMsg GetRepositoryByID error,%v", err)
  43. return ""
  44. }
  45. return getCloudbrainTemplateUrl(*ctx.Cloudbrain, repo)
  46. }
  47. func (CloudbrainStartMsg) TemplateId(ctx *TemplateContext) string {
  48. return setting.CloudbrainStartedTemplateId
  49. }
  50. type CloudbrainStopMsg struct {
  51. }
  52. func (CloudbrainStopMsg) Data(ctx *TemplateContext) *DefaultWechatTemplate {
  53. return &DefaultWechatTemplate{
  54. First: TemplateValue{Value: fmt.Sprintf(setting.CloudbrainStoppedTitle, ctx.Cloudbrain.Status)},
  55. Keyword1: TemplateValue{Value: ctx.Cloudbrain.DisplayJobName},
  56. Keyword2: TemplateValue{Value: getJobTypeDisplayName(ctx.Cloudbrain.JobType)},
  57. Keyword3: TemplateValue{Value: time.Unix(int64(ctx.Cloudbrain.CreatedUnix), 0).Format("2006-01-02 15:04:05")},
  58. Keyword4: TemplateValue{Value: time.Unix(int64(ctx.Cloudbrain.EndTime), 0).Format("2006-01-02 15:04:05")},
  59. Remark: TemplateValue{Value: setting.CloudbrainStoppedRemark},
  60. }
  61. }
  62. func (CloudbrainStopMsg) ShouldSend(ctx *TemplateContext) bool {
  63. if len(setting.CloudbrainStoppedNotifyList) == 0 {
  64. return false
  65. }
  66. for _, v := range setting.CloudbrainStoppedNotifyList {
  67. if v == ctx.Cloudbrain.JobType {
  68. if ctx.Cloudbrain.Duration > 0 && ctx.Cloudbrain.EndTime > 0 {
  69. return true
  70. }
  71. break
  72. }
  73. }
  74. return false
  75. }
  76. func (CloudbrainStopMsg) MsgId(ctx *TemplateContext) string {
  77. return string(JobOperateTypeStop) + "_" + fmt.Sprint(ctx.Cloudbrain.ID)
  78. }
  79. func (CloudbrainStopMsg) Url(ctx *TemplateContext) string {
  80. repo, err := models.GetRepositoryByID(ctx.Cloudbrain.RepoID)
  81. if err != nil {
  82. log.Error("CloudbrainStopMsg GetRepositoryByID error,%v", err)
  83. return ""
  84. }
  85. return getCloudbrainTemplateUrl(*ctx.Cloudbrain, repo)
  86. }
  87. func (CloudbrainStopMsg) TemplateId(ctx *TemplateContext) string {
  88. return setting.CloudbrainStoppedTemplateId
  89. }
  90. var startMsg = &CloudbrainStartMsg{}
  91. var stopMsg = &CloudbrainStopMsg{}
  92. func GetTemplateFromOperateType(operate JobOperateType) Template {
  93. switch operate {
  94. case JobOperateTypeStart:
  95. return startMsg
  96. case JobOperateTypeStop:
  97. return stopMsg
  98. }
  99. return nil
  100. }
  101. func GetJobOperateTypeFromCloudbrainStatus(cloudbrain *models.Cloudbrain) JobOperateType {
  102. if cloudbrain.IsTerminal() {
  103. return JobOperateTypeStop
  104. }
  105. if cloudbrain.IsRunning() {
  106. return JobOperateTypeStart
  107. }
  108. return ""
  109. }
  110. func getCloudbrainTemplateUrl(cloudbrain models.Cloudbrain, repo *models.Repository) string {
  111. url := setting.AppURL + repo.FullName()
  112. switch cloudbrain.JobType {
  113. case string(models.JobTypeDebug):
  114. if cloudbrain.ComputeResource == "CPU/GPU" {
  115. url += "/cloudbrain/" + fmt.Sprint(cloudbrain.ID)
  116. } else {
  117. url += "/modelarts/notebook/" + fmt.Sprint(cloudbrain.ID)
  118. }
  119. case string(models.JobTypeBenchmark):
  120. url += "/cloudbrain/benchmark/" + fmt.Sprint(cloudbrain.ID)
  121. case string(models.JobTypeTrain):
  122. if cloudbrain.Type == models.TypeCloudBrainOne {
  123. url += "/cloudbrain/train-job/" + fmt.Sprint(cloudbrain.JobID)
  124. } else if cloudbrain.Type == models.TypeCloudBrainTwo {
  125. url += "/modelarts/train-job/" + fmt.Sprint(cloudbrain.JobID)
  126. } else if cloudbrain.Type == models.TypeC2Net {
  127. url += "/grampus/train-job/" + fmt.Sprint(cloudbrain.JobID)
  128. }
  129. case string(models.JobTypeInference):
  130. url += "/modelarts/inference-job/" + fmt.Sprint(cloudbrain.JobID)
  131. }
  132. return url
  133. }
  134. func getJobTypeDisplayName(jobType string) string {
  135. switch jobType {
  136. case string(models.JobTypeDebug):
  137. return "调试任务"
  138. case string(models.JobTypeBenchmark):
  139. return "评测任务"
  140. case string(models.JobTypeTrain):
  141. return "训练任务"
  142. case string(models.JobTypeInference):
  143. return "推理任务"
  144. }
  145. return ""
  146. }