| @@ -72,6 +72,8 @@ func NewCloudBrainSpec(cloudbrainId int64, s Specification) CloudbrainSpec { | |||||
| } | } | ||||
| } | } | ||||
| var StatusChangeChan = make(chan *Cloudbrain, 50) | |||||
| func InsertCloudbrainSpec(c CloudbrainSpec) (int64, error) { | func InsertCloudbrainSpec(c CloudbrainSpec) (int64, error) { | ||||
| return x.Insert(&c) | return x.Insert(&c) | ||||
| } | } | ||||
| @@ -22,6 +22,6 @@ func NewNotifier() base.Notifier { | |||||
| func (*pointNotifier) NotifyChangeCloudbrainStatus(cloudbrain *models.Cloudbrain, oldStatus string) { | func (*pointNotifier) NotifyChangeCloudbrainStatus(cloudbrain *models.Cloudbrain, oldStatus string) { | ||||
| log.Info("pointNotifier NotifyChangeCloudbrainStatus cloudbrain.id=%d cloudbrain.status=%s oldStatus=%s", cloudbrain.ID, cloudbrain.Status, oldStatus) | log.Info("pointNotifier NotifyChangeCloudbrainStatus cloudbrain.id=%d cloudbrain.status=%s oldStatus=%s", cloudbrain.ID, cloudbrain.Status, oldStatus) | ||||
| if cloudbrain.IsRunning() || cloudbrain.IsTerminal() { | if cloudbrain.IsRunning() || cloudbrain.IsTerminal() { | ||||
| //reward.DeductPoint4Cloudbrain(*cloudbrain, time.Now()) | |||||
| models.StatusChangeChan <- cloudbrain | |||||
| } | } | ||||
| } | } | ||||
| @@ -1204,7 +1204,7 @@ func StopJobs(cloudBrains []*models.Cloudbrain) { | |||||
| }) | }) | ||||
| logErrorAndUpdateJobStatus(err, taskInfo) | logErrorAndUpdateJobStatus(err, taskInfo) | ||||
| } else { | |||||
| } else if taskInfo.Type == models.TypeCloudBrainTwo { | |||||
| if taskInfo.JobType == string(models.JobTypeTrain) { | if taskInfo.JobType == string(models.JobTypeTrain) { | ||||
| err := retry(3, time.Second*30, func() error { | err := retry(3, time.Second*30, func() error { | ||||
| _, err := modelarts.StopTrainJob(taskInfo.JobID, strconv.FormatInt(taskInfo.VersionID, 10)) | _, err := modelarts.StopTrainJob(taskInfo.JobID, strconv.FormatInt(taskInfo.VersionID, 10)) | ||||
| @@ -1221,8 +1221,16 @@ func StopJobs(cloudBrains []*models.Cloudbrain) { | |||||
| }) | }) | ||||
| logErrorAndUpdateJobStatus(err, taskInfo) | logErrorAndUpdateJobStatus(err, taskInfo) | ||||
| } | } | ||||
| } | |||||
| } else if taskInfo.Type == models.TypeC2Net { | |||||
| if taskInfo.JobType == string(models.JobTypeTrain) { | |||||
| err := retry(3, time.Second*30, func() error { | |||||
| _, err := grampus.StopJob(taskInfo.JobID) | |||||
| return err | |||||
| }) | |||||
| logErrorAndUpdateJobStatus(err, taskInfo) | |||||
| } | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -8,6 +8,7 @@ import ( | |||||
| "bytes" | "bytes" | ||||
| "code.gitea.io/gitea/routers/reward/point" | "code.gitea.io/gitea/routers/reward/point" | ||||
| "code.gitea.io/gitea/routers/task" | "code.gitea.io/gitea/routers/task" | ||||
| "code.gitea.io/gitea/services/reward" | |||||
| "encoding/gob" | "encoding/gob" | ||||
| "net/http" | "net/http" | ||||
| "path" | "path" | ||||
| @@ -331,6 +332,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
| m.Get("/dashboard", routers.Dashboard) | m.Get("/dashboard", routers.Dashboard) | ||||
| go routers.SocketManager.Run() | go routers.SocketManager.Run() | ||||
| go task.RunTask() | go task.RunTask() | ||||
| go reward.AcceptStatusChangeAction() | |||||
| m.Get("/action/notification", routers.ActionNotification) | m.Get("/action/notification", routers.ActionNotification) | ||||
| m.Get("/recommend/home", routers.RecommendHomeInfo) | m.Get("/recommend/home", routers.RecommendHomeInfo) | ||||
| //m.Get("/recommend/org", routers.RecommendOrgFromPromote) | //m.Get("/recommend/org", routers.RecommendOrgFromPromote) | ||||
| @@ -15,6 +15,15 @@ var ( | |||||
| const RUN_CLOUDBRAIN_TASK_TITTLE = "运行云脑任务" | const RUN_CLOUDBRAIN_TASK_TITTLE = "运行云脑任务" | ||||
| func AcceptStatusChangeAction() { | |||||
| for { | |||||
| select { | |||||
| case task := <-models.StatusChangeChan: | |||||
| DeductPoint4Cloudbrain(*task, time.Now()) | |||||
| } | |||||
| } | |||||
| } | |||||
| func StartAndGetCloudBrainPointDeductTask(task models.Cloudbrain) (*models.RewardPeriodicTask, error) { | func StartAndGetCloudBrainPointDeductTask(task models.Cloudbrain) (*models.RewardPeriodicTask, error) { | ||||
| if !setting.CloudBrainPaySwitch { | if !setting.CloudBrainPaySwitch { | ||||
| return nil, nil | return nil, nil | ||||
| @@ -86,6 +95,12 @@ func StartCloudbrainPointDeductTask() { | |||||
| } | } | ||||
| func DeductPoint4Cloudbrain(t models.Cloudbrain, now time.Time) error { | func DeductPoint4Cloudbrain(t models.Cloudbrain, now time.Time) error { | ||||
| defer func() { | |||||
| if err := recover(); err != nil { | |||||
| combinedErr := fmt.Errorf("%s\n%s", err, log.Stack(2)) | |||||
| log.Error("PANIC:%v", combinedErr) | |||||
| } | |||||
| }() | |||||
| log.Debug("start to deduct point for cloudbrain[%d]", t.ID) | log.Debug("start to deduct point for cloudbrain[%d]", t.ID) | ||||
| if t.StartTime == 0 { | if t.StartTime == 0 { | ||||
| log.Debug("cloudbrain[%d] task not start", t.ID) | log.Debug("cloudbrain[%d] task not start", t.ID) | ||||