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.

task.go 2.3 kB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package task
  2. import (
  3. "code.gitea.io/gitea/models"
  4. "code.gitea.io/gitea/modules/log"
  5. "code.gitea.io/gitea/modules/util"
  6. "code.gitea.io/gitea/services/reward"
  7. "code.gitea.io/gitea/services/reward/limiter"
  8. "fmt"
  9. )
  10. func Accomplish(action models.Action) {
  11. switch action.OpType {
  12. case models.ActionCreateRepo,
  13. models.ActionCreateImage:
  14. if action.Repo.IsPrivate {
  15. return
  16. }
  17. case models.ActionCreateDebugGPUTask,
  18. models.ActionCreateDebugNPUTask,
  19. models.ActionCreateTrainTask,
  20. models.ActionCreateInferenceTask,
  21. models.ActionCreateBenchMarkTask,
  22. models.ActionCreateGPUTrainTask:
  23. action.OpType = models.ActionCreateCloudbrainTask
  24. }
  25. go accomplish(action)
  26. }
  27. func accomplish(action models.Action) error {
  28. defer func() {
  29. if err := recover(); err != nil {
  30. combinedErr := fmt.Errorf("%s\n%s", err, log.Stack(2))
  31. log.Error("PANIC:%v", combinedErr)
  32. }
  33. }()
  34. userId := action.ActUserID
  35. taskType := fmt.Sprint(action.OpType)
  36. //get task config
  37. config, err := GetTaskConfig(taskType)
  38. if err != nil {
  39. log.Error("GetTaskConfig error,%v", err)
  40. return err
  41. }
  42. if config == nil {
  43. log.Info("task config not exist,userId=%d taskType=%s", userId, taskType)
  44. return nil
  45. }
  46. //is limited?
  47. if isLimited(userId, config, limiter.JustReject) {
  48. log.Info("task accomplish maximum times are reached,userId=%d taskType=%s", userId, taskType)
  49. return nil
  50. }
  51. //add log
  52. logId := util.UUID()
  53. _, err = models.InsertTaskAccomplishLog(&models.TaskAccomplishLog{
  54. LogId: logId,
  55. ConfigId: config.ID,
  56. TaskCode: config.TaskCode,
  57. UserId: userId,
  58. ActionId: action.ID,
  59. })
  60. if err != nil {
  61. return err
  62. }
  63. //reward
  64. reward.Operate(&models.RewardOperateContext{
  65. SourceType: models.SourceTypeAccomplishTask,
  66. SourceId: logId,
  67. Tittle: config.Tittle,
  68. Reward: models.Reward{
  69. Amount: config.AwardAmount,
  70. Type: models.GetRewardTypeInstance(config.AwardType),
  71. },
  72. TargetUserId: userId,
  73. RequestId: logId,
  74. OperateType: models.OperateTypeIncrease,
  75. RejectPolicy: limiter.FillUp,
  76. })
  77. return nil
  78. }
  79. func isLimited(userId int64, config *models.TaskConfig, rejectPolicy limiter.LimiterRejectPolicy) bool {
  80. if _, err := limiter.CheckLimit(config.TaskCode, models.LimitTypeTask, userId, 1, rejectPolicy); err != nil {
  81. return true
  82. }
  83. return false
  84. }