| @@ -181,6 +181,7 @@ type Cloudbrain struct { | |||||
| type CloudbrainShow struct { | type CloudbrainShow struct { | ||||
| ID int64 | ID int64 | ||||
| JobID string | |||||
| RepoFullName string | RepoFullName string | ||||
| Type int | Type int | ||||
| JobType string | JobType string | ||||
| @@ -201,8 +202,8 @@ type CloudbrainShow4Action struct { | |||||
| func (task *Cloudbrain) ToShow() *CloudbrainShow { | func (task *Cloudbrain) ToShow() *CloudbrainShow { | ||||
| c := &CloudbrainShow{ | c := &CloudbrainShow{ | ||||
| ID: task.ID, | |||||
| ID: task.ID, | |||||
| JobID: task.JobID, | |||||
| JobType: task.JobType, | JobType: task.JobType, | ||||
| Type: task.Type, | Type: task.Type, | ||||
| DisplayJobName: task.DisplayJobName, | DisplayJobName: task.DisplayJobName, | ||||
| @@ -102,6 +102,17 @@ func GetLimitConfigByLimitType(limitType LimitType) ([]LimitConfig, error) { | |||||
| return r, nil | return r, nil | ||||
| } | } | ||||
| func GetLimitersByLimitTypeWithDeleted(limitType LimitType) ([]LimitConfig, error) { | |||||
| r := make([]LimitConfig, 0) | |||||
| err := x.Unscoped().Where(" limit_type = ?", limitType.Name()).Find(&r) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } else if len(r) == 0 { | |||||
| return nil, ErrRecordNotExist{} | |||||
| } | |||||
| return r, nil | |||||
| } | |||||
| func AddLimitConfig(l *LimitConfig) error { | func AddLimitConfig(l *LimitConfig) error { | ||||
| sess := x.NewSession() | sess := x.NewSession() | ||||
| defer sess.Close() | defer sess.Close() | ||||
| @@ -27,7 +27,7 @@ type TaskConfigWithLimit struct { | |||||
| TaskCode string `binding:"Required;MaxSize(256)"` | TaskCode string `binding:"Required;MaxSize(256)"` | ||||
| Tittle string | Tittle string | ||||
| AwardType string | AwardType string | ||||
| AwardAmount int64 `binding:"Required;MaxSize(256)"` | |||||
| AwardAmount int64 | |||||
| Creator string | Creator string | ||||
| CreatedUnix timeutil.TimeStamp | CreatedUnix timeutil.TimeStamp | ||||
| Limiters []*LimitConfigVO | Limiters []*LimitConfigVO | ||||
| @@ -63,6 +63,17 @@ func GetTaskConfigList() ([]*TaskConfig, error) { | |||||
| } | } | ||||
| return r, nil | return r, nil | ||||
| } | } | ||||
| func GetTaskConfigPageWithDeleted(opt ListOptions) ([]*TaskConfig, error) { | |||||
| r := make([]*TaskConfig, 0) | |||||
| err := x.Unscoped().Limit(opt.PageSize, (opt.Page-1)*opt.PageSize).OrderBy("deleted_at asc,id desc").Find(&r) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } | |||||
| if len(r) == 0 { | |||||
| return nil, ErrRecordNotExist{} | |||||
| } | |||||
| return r, nil | |||||
| } | |||||
| func AddTaskConfig(config TaskConfigWithLimit, doer *User) error { | func AddTaskConfig(config TaskConfigWithLimit, doer *User) error { | ||||
| sess := x.NewSession() | sess := x.NewSession() | ||||
| @@ -128,3 +139,31 @@ func AddTaskConfig(config TaskConfigWithLimit, doer *User) error { | |||||
| sess.Commit() | sess.Commit() | ||||
| return nil | return nil | ||||
| } | } | ||||
| func DelTaskConfig(taskCode string) error { | |||||
| sess := x.NewSession() | |||||
| defer sess.Close() | |||||
| //delete old task config | |||||
| p := &TaskConfig{ | |||||
| TaskCode: taskCode, | |||||
| } | |||||
| _, err := sess.Delete(p) | |||||
| if err != nil { | |||||
| sess.Rollback() | |||||
| return err | |||||
| } | |||||
| //delete old limiter config | |||||
| lp := &LimitConfig{ | |||||
| LimitType: LimitTypeTask.Name(), | |||||
| LimitCode: taskCode, | |||||
| } | |||||
| _, err = sess.Delete(lp) | |||||
| if err != nil { | |||||
| sess.Rollback() | |||||
| return err | |||||
| } | |||||
| sess.Commit() | |||||
| return nil | |||||
| } | |||||
| @@ -613,8 +613,8 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
| m.Group("/task/config", func() { | m.Group("/task/config", func() { | ||||
| m.Get("/list", task.GetTaskConfigList) | m.Get("/list", task.GetTaskConfigList) | ||||
| m.Post("/add", bindIgnErr(models.TaskConfigWithLimit{}), task.AddTaskConfig) | |||||
| m.Post("/add/batch", bindIgnErr(models.BatchLimitConfigVO{}), task.BatchAddTaskConfig) | m.Post("/add/batch", bindIgnErr(models.BatchLimitConfigVO{}), task.BatchAddTaskConfig) | ||||
| m.Post("/^:action(new|edit|del)$", bindIgnErr(models.TaskConfigWithLimit{}), task.OperateTaskConfig) | |||||
| }) | }) | ||||
| }, operationReq) | }, operationReq) | ||||
| // ***** END: Operation ***** | // ***** END: Operation ***** | ||||
| @@ -3,13 +3,16 @@ package task | |||||
| import ( | import ( | ||||
| "code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
| "code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
| "code.gitea.io/gitea/modules/log" | |||||
| "code.gitea.io/gitea/routers/response" | "code.gitea.io/gitea/routers/response" | ||||
| "code.gitea.io/gitea/services/task" | "code.gitea.io/gitea/services/task" | ||||
| "errors" | |||||
| "net/http" | "net/http" | ||||
| ) | ) | ||||
| func GetTaskConfigList(ctx *context.Context) { | func GetTaskConfigList(ctx *context.Context) { | ||||
| r, err := task.GetTaskConfigWithLimitList() | |||||
| page := ctx.QueryInt("page") | |||||
| r, err := task.GetTaskConfigWithLimitList(models.ListOptions{PageSize: 20, Page: page}) | |||||
| if err != nil { | if err != nil { | ||||
| ctx.JSON(http.StatusOK, response.ServerError(err.Error())) | ctx.JSON(http.StatusOK, response.ServerError(err.Error())) | ||||
| return | return | ||||
| @@ -17,9 +20,23 @@ func GetTaskConfigList(ctx *context.Context) { | |||||
| ctx.JSON(http.StatusOK, response.SuccessWithData(r)) | ctx.JSON(http.StatusOK, response.SuccessWithData(r)) | ||||
| } | } | ||||
| func AddTaskConfig(ctx *context.Context, config models.TaskConfigWithLimit) { | |||||
| err := task.AddTaskConfig(config, ctx.User) | |||||
| func OperateTaskConfig(ctx *context.Context, config models.TaskConfigWithLimit) { | |||||
| action := ctx.Params(":action") | |||||
| var err error | |||||
| switch action { | |||||
| case "edit": | |||||
| err = task.EditTaskConfig(config, ctx.User) | |||||
| case "new": | |||||
| err = task.AddTaskConfig(config, ctx.User) | |||||
| case "del": | |||||
| err = task.DelTaskConfig(config.TaskCode) | |||||
| default: | |||||
| err = errors.New("action type error") | |||||
| } | |||||
| if err != nil { | if err != nil { | ||||
| log.Error("OperateTaskConfig error ,%v", err) | |||||
| ctx.JSON(http.StatusOK, response.ServerError(err.Error())) | ctx.JSON(http.StatusOK, response.ServerError(err.Error())) | ||||
| return | return | ||||
| } | } | ||||
| @@ -245,3 +245,14 @@ func GetLimitersByLimitType(limitType models.LimitType) ([]models.LimitConfig, e | |||||
| return limiters, nil | return limiters, nil | ||||
| } | } | ||||
| func GetLimitersByLimitTypeWithDeleted(limitType models.LimitType) ([]models.LimitConfig, error) { | |||||
| limiters, err := models.GetLimitersByLimitTypeWithDeleted(limitType) | |||||
| if err != nil { | |||||
| if models.IsErrRecordNotExist(err) { | |||||
| return nil, nil | |||||
| } | |||||
| return nil, err | |||||
| } | |||||
| return limiters, nil | |||||
| } | |||||
| @@ -52,8 +52,20 @@ func GetTaskConfigList() ([]*models.TaskConfig, error) { | |||||
| return config, nil | return config, nil | ||||
| } | } | ||||
| func GetTaskConfigWithLimitList() ([]*models.TaskConfigWithLimit, error) { | |||||
| list, err := GetTaskConfigList() | |||||
| func GetTaskConfigPageWithDeleted(opt models.ListOptions) ([]*models.TaskConfig, error) { | |||||
| config, err := models.GetTaskConfigPageWithDeleted(opt) | |||||
| if err != nil { | |||||
| log.Error(" GetTaskConfigPageWithDeleted from model error. %v", err) | |||||
| if models.IsErrRecordNotExist(err) { | |||||
| return nil, nil | |||||
| } | |||||
| return nil, err | |||||
| } | |||||
| return config, nil | |||||
| } | |||||
| func GetTaskConfigWithLimitList(opt models.ListOptions) ([]*models.TaskConfigWithLimit, error) { | |||||
| list, err := GetTaskConfigPageWithDeleted(opt) | |||||
| if err != nil { | if err != nil { | ||||
| return nil, err | return nil, err | ||||
| } | } | ||||
| @@ -61,7 +73,7 @@ func GetTaskConfigWithLimitList() ([]*models.TaskConfigWithLimit, error) { | |||||
| return nil, nil | return nil, nil | ||||
| } | } | ||||
| r := make([]*models.TaskConfigWithLimit, 0) | r := make([]*models.TaskConfigWithLimit, 0) | ||||
| l, err := limiter.GetLimitersByLimitType(models.LimitTypeTask) | |||||
| l, err := limiter.GetLimitersByLimitTypeWithDeleted(models.LimitTypeTask) | |||||
| if err != nil { | if err != nil { | ||||
| log.Error(" GetLimitersByLimitType from redis error. %v", err) | log.Error(" GetLimitersByLimitType from redis error. %v", err) | ||||
| return nil, err | return nil, err | ||||
| @@ -90,10 +102,27 @@ func GetTaskConfigWithLimitList() ([]*models.TaskConfigWithLimit, error) { | |||||
| } | } | ||||
| func AddTaskConfig(config models.TaskConfigWithLimit, doer *models.User) error { | func AddTaskConfig(config models.TaskConfigWithLimit, doer *models.User) error { | ||||
| t, err := models.GetTaskConfigByTaskCode(config.TaskCode) | |||||
| if err != nil && !models.IsErrRecordNotExist(err) { | |||||
| return err | |||||
| } | |||||
| if t != nil { | |||||
| return errors.New("task config is exist") | |||||
| } | |||||
| return EditTaskConfig(config, doer) | |||||
| } | |||||
| func EditTaskConfig(config models.TaskConfigWithLimit, doer *models.User) error { | |||||
| if config.TaskCode == "" || config.AwardType == "" { | if config.TaskCode == "" || config.AwardType == "" { | ||||
| log.Error(" AddTaskConfig param error") | log.Error(" AddTaskConfig param error") | ||||
| return errors.New("param error") | return errors.New("param error") | ||||
| } | } | ||||
| for i, l := range config.Limiters { | |||||
| if l.Scope == "" { | |||||
| config.Limiters[i].Scope = models.LimitScopeSingleUser.Name() | |||||
| } | |||||
| } | |||||
| err := models.AddTaskConfig(config, doer) | err := models.AddTaskConfig(config, doer) | ||||
| if err != nil { | if err != nil { | ||||
| log.Error("add task config error,config:%v err:%v", config, err) | log.Error("add task config error,config:%v err:%v", config, err) | ||||
| @@ -103,3 +132,18 @@ func AddTaskConfig(config models.TaskConfigWithLimit, doer *models.User) error { | |||||
| redis_client.Del(redis_key.TaskConfigList()) | redis_client.Del(redis_key.TaskConfigList()) | ||||
| return nil | return nil | ||||
| } | } | ||||
| func DelTaskConfig(taskCode string) error { | |||||
| if taskCode == "" { | |||||
| log.Error(" AddTaskConfig param error") | |||||
| return errors.New("param error") | |||||
| } | |||||
| err := models.DelTaskConfig(taskCode) | |||||
| if err != nil { | |||||
| log.Error("del task config error,err:%v", err) | |||||
| return err | |||||
| } | |||||
| redis_client.Del(redis_key.LimitConfig(models.LimitTypeTask.Name())) | |||||
| redis_client.Del(redis_key.TaskConfigList()) | |||||
| return nil | |||||
| } | |||||