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.

template.go 4.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. "errors"
  7. "fmt"
  8. "time"
  9. )
  10. type JobOperateType string
  11. const (
  12. JobOperateTypeStart JobOperateType = "start"
  13. JobOperateTypeStop JobOperateType = "stop"
  14. )
  15. func GetJobOperateTypeFromCloudbrainStatus(cloudbrain *models.Cloudbrain) JobOperateType {
  16. if cloudbrain.IsTerminal() {
  17. return JobOperateTypeStop
  18. }
  19. if cloudbrain.IsRunning() {
  20. return JobOperateTypeStart
  21. }
  22. return ""
  23. }
  24. func SendCloudbrainStartedMsg(operateType JobOperateType, cloudbrain models.Cloudbrain, date time.Time) error {
  25. defer func() {
  26. if err := recover(); err != nil {
  27. combinedErr := fmt.Errorf("%s\n%s", err, log.Stack(2))
  28. log.Error("PANIC:", combinedErr)
  29. }
  30. }()
  31. repo, err := models.GetRepositoryByID(cloudbrain.RepoID)
  32. if err != nil {
  33. log.Error("SendCloudbrainStartedMsg GetRepositoryByID error,%v", err)
  34. }
  35. if setting.CloudbrainStartedTemplateId == "" {
  36. return nil
  37. }
  38. if date.IsZero() {
  39. date = time.Now()
  40. }
  41. openId := models.GetUserWechatOpenId(cloudbrain.UserID)
  42. if openId == "" {
  43. return errors.New("Wechat openId not exist")
  44. }
  45. data := CloudbrainTaskData{
  46. First: TemplateValue{Value: getCloudbrainTemplateTitle(operateType)},
  47. Keyword1: TemplateValue{Value: cloudbrain.DisplayJobName},
  48. Keyword2: TemplateValue{Value: getJobTypeDisplayName(cloudbrain.JobType)},
  49. Keyword3: TemplateValue{Value: date.Format("2006-01-02 15:04:05")},
  50. Remark: TemplateValue{Value: getCloudbrainTemplateRemark(operateType)},
  51. }
  52. req := TemplateMsgRequest{
  53. ToUser: openId,
  54. TemplateId: setting.CloudbrainStartedTemplateId,
  55. Url: getCloudbrainTemplateUrl(cloudbrain, repo),
  56. ClientMsgId: string(operateType) + "_" + fmt.Sprint(cloudbrain.ID),
  57. Data: data,
  58. }
  59. err, retryFlag := sendTemplateMsg(req)
  60. if retryFlag {
  61. log.Info("retrySendCloudbrainTemplateMsg calling")
  62. refreshAccessToken()
  63. err, _ = sendTemplateMsg(req)
  64. if err != nil {
  65. log.Error("SendCloudbrainStartedMsg err. %v", err)
  66. return err
  67. }
  68. return nil
  69. }
  70. if err != nil {
  71. log.Error("SendCloudbrainStartedMsg err. %v", err)
  72. return err
  73. }
  74. return nil
  75. }
  76. func getCloudbrainTemplateUrl(cloudbrain models.Cloudbrain, repo *models.Repository) string {
  77. url := setting.AppURL + repo.FullName()
  78. switch cloudbrain.JobType {
  79. case string(models.JobTypeDebug):
  80. if cloudbrain.ComputeResource == "CPU/GPU" {
  81. url += "/cloudbrain/" + fmt.Sprint(cloudbrain.ID)
  82. } else {
  83. url += "/modelarts/notebook/" + fmt.Sprint(cloudbrain.ID)
  84. }
  85. case string(models.JobTypeBenchmark):
  86. url += "/cloudbrain/benchmark/" + fmt.Sprint(cloudbrain.ID)
  87. case string(models.JobTypeTrain):
  88. if cloudbrain.Type == models.TypeCloudBrainOne {
  89. url += "/cloudbrain/train-job/" + fmt.Sprint(cloudbrain.JobID)
  90. } else if cloudbrain.Type == models.TypeCloudBrainTwo {
  91. url += "/modelarts/train-job" + fmt.Sprint(cloudbrain.JobID)
  92. } else if cloudbrain.Type == models.TypeC2Net {
  93. url += "/grampus/train-job/" + fmt.Sprint(cloudbrain.JobID)
  94. }
  95. case string(models.JobTypeInference):
  96. url += "/modelarts/inference-job/" + fmt.Sprint(cloudbrain.JobID)
  97. }
  98. return url
  99. }
  100. func getCloudbrainTemplateTitle(operateType JobOperateType) string {
  101. var title string
  102. switch operateType {
  103. case JobOperateTypeStart:
  104. title = "您好,您提交的算力资源申请已通过,任务已启动,请您关注运行情况。"
  105. case JobOperateTypeStop:
  106. title = "您好,您提交的任务已运行结束。"
  107. }
  108. return title
  109. }
  110. func getCloudbrainTemplateRemark(operateType JobOperateType) string {
  111. var remark string
  112. switch operateType {
  113. case JobOperateTypeStart:
  114. remark = "感谢您的耐心等待。"
  115. case JobOperateTypeStop:
  116. remark = "点击可查看运行结果"
  117. }
  118. return remark
  119. }
  120. func getJobTypeDisplayName(jobType string) string {
  121. switch jobType {
  122. case string(models.JobTypeDebug):
  123. return "调试任务"
  124. case string(models.JobTypeBenchmark):
  125. return "评测任务"
  126. case string(models.JobTypeTrain):
  127. return "训练任务"
  128. case string(models.JobTypeInference):
  129. return "推理任务"
  130. }
  131. return ""
  132. }