|
- package task
-
- import (
- "code.gitea.io/gitea/models"
- "code.gitea.io/gitea/modules/log"
- "code.gitea.io/gitea/modules/util"
- "code.gitea.io/gitea/services/reward"
- "code.gitea.io/gitea/services/reward/limiter"
- "fmt"
- )
-
- func Accomplish(action models.Action) {
- switch action.OpType {
- case models.ActionCreateRepo,
- models.ActionCreateImage:
- if action.Repo.IsPrivate {
- return
- }
- case models.ActionCreateDebugGPUTask,
- models.ActionCreateDebugNPUTask,
- models.ActionCreateTrainTask,
- models.ActionCreateInferenceTask,
- models.ActionCreateBenchMarkTask,
- models.ActionCreateGPUTrainTask:
- action.OpType = models.ActionCreateCloudbrainTask
- }
- go accomplish(action)
- }
-
- func accomplish(action models.Action) error {
- defer func() {
- if err := recover(); err != nil {
- combinedErr := fmt.Errorf("%s\n%s", err, log.Stack(2))
- log.Error("PANIC:%v", combinedErr)
- }
- }()
- userId := action.ActUserID
- taskType := fmt.Sprint(action.OpType)
-
- //get task config
- config, err := GetTaskConfig(taskType)
- if err != nil {
- log.Error("GetTaskConfig error,%v", err)
- return err
- }
- if config == nil {
- log.Info("task config not exist,userId=%d taskType=%s", userId, taskType)
- return nil
- }
-
- //is limited?
- if isLimited(userId, config, limiter.JustReject) {
- log.Info("task accomplish maximum times are reached,userId=%d taskType=%s", userId, taskType)
- return nil
- }
-
- //add log
- logId := util.UUID()
- _, err = models.InsertTaskAccomplishLog(&models.TaskAccomplishLog{
- LogId: logId,
- ConfigId: config.ID,
- TaskCode: config.TaskCode,
- UserId: userId,
- ActionId: action.ID,
- })
- if err != nil {
- return err
- }
-
- //reward
- reward.Operate(&models.RewardOperateContext{
- SourceType: models.SourceTypeAccomplishTask,
- SourceId: logId,
- Tittle: config.Tittle,
- Reward: models.Reward{
- Amount: config.AwardAmount,
- Type: models.GetRewardTypeInstance(config.AwardType),
- },
- TargetUserId: userId,
- RequestId: logId,
- OperateType: models.OperateTypeIncrease,
- RejectPolicy: limiter.FillUp,
- })
-
- return nil
- }
-
- func isLimited(userId int64, config *models.TaskConfig, rejectPolicy limiter.LimiterRejectPolicy) bool {
- if _, err := limiter.CheckLimit(config.TaskCode, models.LimitTypeTask, userId, 1, rejectPolicy); err != nil {
- return true
- }
- return false
-
- }
|