|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- package wechat
-
- import (
- "code.gitea.io/gitea/models"
- "code.gitea.io/gitea/modules/log"
- "code.gitea.io/gitea/modules/setting"
- "errors"
- "fmt"
- "time"
- )
-
- type JobOperateType string
-
- const (
- JobOperateTypeStart JobOperateType = "start"
- JobOperateTypeStop JobOperateType = "stop"
- )
-
- func GetJobOperateTypeFromCloudbrainStatus(cloudbrain *models.Cloudbrain) JobOperateType {
- if cloudbrain.IsTerminal() {
- return JobOperateTypeStop
- }
- if cloudbrain.IsRunning() {
- return JobOperateTypeStart
- }
- return ""
- }
-
- func SendCloudbrainStartedMsg(operateType JobOperateType, cloudbrain models.Cloudbrain, date time.Time) error {
- defer func() {
- if err := recover(); err != nil {
- combinedErr := fmt.Errorf("%s\n%s", err, log.Stack(2))
- log.Error("PANIC:", combinedErr)
- }
- }()
- repo, err := models.GetRepositoryByID(cloudbrain.RepoID)
- if err != nil {
- log.Error("SendCloudbrainStartedMsg GetRepositoryByID error,%v", err)
- }
-
- if setting.CloudbrainStartedTemplateId == "" {
- return nil
- }
-
- if date.IsZero() {
- date = time.Now()
- }
- openId := models.GetUserWechatOpenId(cloudbrain.UserID)
- if openId == "" {
- return errors.New("Wechat openId not exist")
- }
- data := CloudbrainTaskData{
- First: TemplateValue{Value: getCloudbrainTemplateTitle(operateType)},
- Keyword1: TemplateValue{Value: cloudbrain.DisplayJobName},
- Keyword2: TemplateValue{Value: getJobTypeDisplayName(cloudbrain.JobType)},
- Keyword3: TemplateValue{Value: date.Format("2006-01-02 15:04:05")},
- Remark: TemplateValue{Value: getCloudbrainTemplateRemark(operateType)},
- }
- req := TemplateMsgRequest{
- ToUser: openId,
- TemplateId: setting.CloudbrainStartedTemplateId,
- Url: getCloudbrainTemplateUrl(cloudbrain, repo),
- ClientMsgId: string(operateType) + "_" + fmt.Sprint(cloudbrain.ID),
- Data: data,
- }
- err, retryFlag := sendTemplateMsg(req)
- if retryFlag {
- log.Info("retrySendCloudbrainTemplateMsg calling")
- refreshAccessToken()
- err, _ = sendTemplateMsg(req)
- if err != nil {
- log.Error("SendCloudbrainStartedMsg err. %v", err)
- return err
- }
- return nil
- }
- if err != nil {
- log.Error("SendCloudbrainStartedMsg err. %v", err)
- return err
- }
- return nil
- }
-
- func getCloudbrainTemplateUrl(cloudbrain models.Cloudbrain, repo *models.Repository) string {
- url := setting.AppURL + repo.FullName()
-
- switch cloudbrain.JobType {
- case string(models.JobTypeDebug):
- if cloudbrain.ComputeResource == "CPU/GPU" {
- url += "/cloudbrain/" + fmt.Sprint(cloudbrain.ID)
- } else {
- url += "/modelarts/notebook/" + fmt.Sprint(cloudbrain.ID)
- }
- case string(models.JobTypeBenchmark):
- url += "/cloudbrain/benchmark/" + fmt.Sprint(cloudbrain.ID)
- case string(models.JobTypeTrain):
- if cloudbrain.Type == models.TypeCloudBrainOne {
- url += "/cloudbrain/train-job/" + fmt.Sprint(cloudbrain.JobID)
- } else if cloudbrain.Type == models.TypeCloudBrainTwo {
- url += "/modelarts/train-job" + fmt.Sprint(cloudbrain.JobID)
- } else if cloudbrain.Type == models.TypeC2Net {
- url += "/grampus/train-job/" + fmt.Sprint(cloudbrain.JobID)
- }
- case string(models.JobTypeInference):
- url += "/modelarts/inference-job/" + fmt.Sprint(cloudbrain.JobID)
- }
- return url
- }
-
- func getCloudbrainTemplateTitle(operateType JobOperateType) string {
- var title string
- switch operateType {
- case JobOperateTypeStart:
- title = "您好,您提交的算力资源申请已通过,任务已启动,请您关注运行情况。"
- case JobOperateTypeStop:
- title = "您好,您提交的任务已运行结束。"
- }
-
- return title
-
- }
-
- func getCloudbrainTemplateRemark(operateType JobOperateType) string {
- var remark string
- switch operateType {
- case JobOperateTypeStart:
- remark = "感谢您的耐心等待。"
- case JobOperateTypeStop:
- remark = "点击可查看运行结果"
- }
-
- return remark
-
- }
-
- func getJobTypeDisplayName(jobType string) string {
- switch jobType {
- case string(models.JobTypeDebug):
- return "调试任务"
- case string(models.JobTypeBenchmark):
- return "评测任务"
- case string(models.JobTypeTrain):
- return "训练任务"
- case string(models.JobTypeInference):
- return "推理任务"
- }
- return ""
- }
|