chore: more verbose log
This commit is contained in:
parent
5826b98b95
commit
9286aea36a
@ -19,7 +19,6 @@ func (h *handler) ProblemUpdate(_ context.Context, t *asynq.Task) error {
|
|||||||
|
|
||||||
if p.Status != e.Success {
|
if p.Status != e.Success {
|
||||||
h.log.Warn("RunnerError", zap.Any("payload", p))
|
h.log.Warn("RunnerError", zap.Any("payload", p))
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
status := h.problemService.UpdateVersion(
|
status := h.problemService.UpdateVersion(
|
||||||
@ -29,7 +28,7 @@ func (h *handler) ProblemUpdate(_ context.Context, t *asynq.Task) error {
|
|||||||
Bytes: []byte(p.Context),
|
Bytes: []byte(p.Context),
|
||||||
Status: pgtype.Present,
|
Status: pgtype.Present,
|
||||||
},
|
},
|
||||||
"IsEnabled": true,
|
"IsEnabled": p.Status == e.Success,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -19,7 +19,6 @@ func (h *handler) SubmitUpdate(_ context.Context, t *asynq.Task) error {
|
|||||||
|
|
||||||
if p.Status != e.Success {
|
if p.Status != e.Success {
|
||||||
h.log.Warn("RunnerError", zap.Any("payload", p))
|
h.log.Warn("RunnerError", zap.Any("payload", p))
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
createData := &status.CreateData{
|
createData := &status.CreateData{
|
||||||
|
@ -22,12 +22,12 @@ func (h *handler) Build(_ context.Context, t *asynq.Task) error {
|
|||||||
status, ctx := func() (e.Status, string) {
|
status, ctx := func() (e.Status, string) {
|
||||||
url, status := h.storageService.Get(p.StorageKey, time.Second*60*5)
|
url, status := h.storageService.Get(p.StorageKey, time.Second*60*5)
|
||||||
if status != e.Success {
|
if status != e.Success {
|
||||||
return e.InternalError, "{}"
|
return e.InternalError, "{\"Message\": \"storage error\"}"
|
||||||
}
|
}
|
||||||
|
|
||||||
config, status := h.runnerService.NewProblem(p.ProblemVersionID, url, true)
|
config, status := h.runnerService.NewProblem(p.ProblemVersionID, url, true)
|
||||||
if status != e.Success {
|
if status != e.Success {
|
||||||
return e.InternalError, "{}"
|
return e.InternalError, "{\"Message\": \"build error: " + status.String() + "\"}"
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := range config.Languages {
|
for i := range config.Languages {
|
||||||
|
@ -25,7 +25,10 @@ func (h *handler) Judge(_ context.Context, t *asynq.Task) error {
|
|||||||
h.log.Info("judge", zap.Any("payload", p), zap.String("user", user))
|
h.log.Info("judge", zap.Any("payload", p), zap.String("user", user))
|
||||||
|
|
||||||
status, point, ctx := func() (e.Status, int32, runner.JudgeStatus) {
|
status, point, ctx := func() (e.Status, int32, runner.JudgeStatus) {
|
||||||
systemError := runner.JudgeStatus{Message: "System Error"}
|
systemError := runner.JudgeStatus{
|
||||||
|
Message: "System Error",
|
||||||
|
Tasks: []runner.TaskStatus{{Verdict: runner.VerdictSystemError, Message: "API Error"}},
|
||||||
|
}
|
||||||
|
|
||||||
// 1. write user code
|
// 1. write user code
|
||||||
userCode := filepath.Join(runner.UserDir, user, fmt.Sprintf("%s.%s", user, p.Submission.Language))
|
userCode := filepath.Join(runner.UserDir, user, fmt.Sprintf("%s.%s", user, p.Submission.Language))
|
||||||
@ -53,7 +56,7 @@ func (h *handler) Judge(_ context.Context, t *asynq.Task) error {
|
|||||||
// 3. compile
|
// 3. compile
|
||||||
compileResult, status := h.runnerService.Compile(p.ProblemVersionID, user, p.Submission.Language)
|
compileResult, status := h.runnerService.Compile(p.ProblemVersionID, user, p.Submission.Language)
|
||||||
if status != e.Success {
|
if status != e.Success {
|
||||||
return e.Success, 0, compileResult
|
return e.InternalError, 0, compileResult
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. run and judge
|
// 4. run and judge
|
||||||
|
@ -30,13 +30,19 @@ func init() {
|
|||||||
TmpDir = path.Join(Prefix, TmpDir)
|
TmpDir = path.Join(Prefix, TmpDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *service) ProblemExists(version uint) bool {
|
||||||
|
problemPath := filepath.Join(ProblemDir, fmt.Sprintf("%d", version))
|
||||||
|
return file.Exist(problemPath)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *service) check(version uint, user string, lang string) e.Status {
|
func (s *service) check(version uint, user string, lang string) e.Status {
|
||||||
if !s.ProblemExists(version) {
|
if !s.ProblemExists(version) {
|
||||||
s.log.Info("problem not exists", zap.Uint("version", version))
|
s.log.Info("problem not exists", zap.Uint("version", version))
|
||||||
return e.RunnerProblemNotExist
|
return e.RunnerProblemNotExist
|
||||||
}
|
}
|
||||||
|
|
||||||
if !s.userExists(user, fmt.Sprintf("%s.%s", user, lang)) {
|
userPath := filepath.Join(UserDir, user, fmt.Sprintf("%s.%s", user, lang))
|
||||||
|
if !file.Exist(userPath) {
|
||||||
s.log.Info("user program not exists", zap.String("user", user), zap.String("lang", lang))
|
s.log.Info("user program not exists", zap.String("user", user), zap.String("lang", lang))
|
||||||
return e.RunnerUserNotExist
|
return e.RunnerUserNotExist
|
||||||
}
|
}
|
||||||
@ -44,16 +50,6 @@ func (s *service) check(version uint, user string, lang string) e.Status {
|
|||||||
return e.Success
|
return e.Success
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *service) ProblemExists(version uint) bool {
|
|
||||||
problemPath := filepath.Join(ProblemDir, fmt.Sprintf("%d", version))
|
|
||||||
return file.Exist(problemPath)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *service) userExists(user string, name string) bool {
|
|
||||||
userPath := filepath.Join(UserDir, user, name)
|
|
||||||
return file.Exist(userPath)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *service) getLangInfo(config *Config, lang string) (configLanguage, bool) {
|
func (s *service) getLangInfo(config *Config, lang string) (configLanguage, bool) {
|
||||||
for _, l := range config.Languages {
|
for _, l := range config.Languages {
|
||||||
if l.Lang == lang {
|
if l.Lang == lang {
|
||||||
|
@ -21,7 +21,11 @@ func (s *service) Compile(version uint, user string, lang string) (JudgeStatus,
|
|||||||
|
|
||||||
config, err := s.ParseConfig(version, true)
|
config, err := s.ParseConfig(version, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return JudgeStatus{Message: "parse config failed"}, e.RunnerProblemParseFailed
|
s.log.Error("[compile] parse config failed", zap.Error(err))
|
||||||
|
return JudgeStatus{
|
||||||
|
Message: "parse config failed",
|
||||||
|
Tasks: []TaskStatus{{Verdict: VerdictSystemError, Message: "parse config failed"}},
|
||||||
|
}, e.RunnerProblemParseFailed
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. prepare judge environment
|
// 2. prepare judge environment
|
||||||
@ -34,7 +38,11 @@ func (s *service) Compile(version uint, user string, lang string) (JudgeStatus,
|
|||||||
logFile := filepath.Join(workDir, fmt.Sprintf("%s.compile.log", user))
|
logFile := filepath.Join(workDir, fmt.Sprintf("%s.compile.log", user))
|
||||||
log, err := os.Create(logFile)
|
log, err := os.Create(logFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return JudgeStatus{Message: "create log file failed"}, e.RunnerUserCompileFailed
|
s.log.Error("[compile] create log file failed", zap.Error(err))
|
||||||
|
return JudgeStatus{
|
||||||
|
Message: "create log file failed",
|
||||||
|
Tasks: []TaskStatus{{Verdict: VerdictSystemError, Message: "create log file failed"}},
|
||||||
|
}, e.RunnerUserCompileFailed
|
||||||
}
|
}
|
||||||
defer func(log *os.File) {
|
defer func(log *os.File) {
|
||||||
_ = log.Close()
|
_ = log.Close()
|
||||||
@ -75,7 +83,7 @@ func (s *service) Compile(version uint, user string, lang string) (JudgeStatus,
|
|||||||
Done()
|
Done()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Info("compile failed",
|
s.log.Info("[compile] compile failed",
|
||||||
zap.Error(err),
|
zap.Error(err),
|
||||||
zap.Uint("version", version),
|
zap.Uint("version", version),
|
||||||
zap.String("user", user),
|
zap.String("user", user),
|
||||||
|
@ -40,7 +40,7 @@ func (s *service) loadImage(cfg *depConfig) e.Status {
|
|||||||
Done()
|
Done()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Warn("load image failed", zap.Error(err))
|
s.log.Warn("[deps] load image failed", zap.Error(err))
|
||||||
return e.RunnerDepsBuildFailed
|
return e.RunnerDepsBuildFailed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,13 +18,13 @@ func (s *service) download(version uint, url string) e.Status {
|
|||||||
|
|
||||||
err := down.Down(zipPath, url)
|
err := down.Down(zipPath, url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Error("download problem failed", zap.Error(err))
|
s.log.Error("[new] download problem failed", zap.Error(err))
|
||||||
return e.RunnerDownloadFailed
|
return e.RunnerDownloadFailed
|
||||||
}
|
}
|
||||||
|
|
||||||
err = unzip.Unzip(zipPath, problemPath)
|
err = unzip.Unzip(zipPath, problemPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Warn("unzip problem failed", zap.Error(err))
|
s.log.Warn("[new] unzip problem failed", zap.Error(err))
|
||||||
return e.RunnerUnzipFailed
|
return e.RunnerUnzipFailed
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ func (s *service) prebuild(version uint, force bool) e.Status {
|
|||||||
|
|
||||||
prebuildScript := filepath.Join(ProblemDir, fmt.Sprintf("%d", version), "judge", "prebuild.Makefile")
|
prebuildScript := filepath.Join(ProblemDir, fmt.Sprintf("%d", version), "judge", "prebuild.Makefile")
|
||||||
if !file.Exist(prebuildScript) {
|
if !file.Exist(prebuildScript) {
|
||||||
s.log.Info("prebuild script not found", zap.String("path", prebuildScript), zap.Uint("version", version))
|
s.log.Info("[new] prebuild script not found", zap.String("path", prebuildScript), zap.Uint("version", version))
|
||||||
return e.Success
|
return e.Success
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ func (s *service) prebuild(version uint, force bool) e.Status {
|
|||||||
err := s.podmanRun(runArgs)
|
err := s.podmanRun(runArgs)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Warn("prebuild problem failed", zap.Error(err), zap.Uint("version", version))
|
s.log.Warn("[new] prebuild problem failed", zap.Error(err), zap.Uint("version", version))
|
||||||
return e.RunnerProblemPrebuildFailed
|
return e.RunnerProblemPrebuildFailed
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ func (s *service) NewProblem(version uint, url string, force bool) (Config, e.St
|
|||||||
|
|
||||||
cfg, err := s.ParseConfig(version, false)
|
cfg, err := s.ParseConfig(version, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// TODO: err is dropped here, should return to server: add a new column in problem_version table
|
s.log.Info("[new] parse problem failed", zap.Error(err), zap.Uint("version", version))
|
||||||
return Config{}, e.RunnerProblemParseFailed
|
return Config{}, e.RunnerProblemParseFailed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ func (s *service) problemRun(version uint, user string, lang string, config *Con
|
|||||||
Done()
|
Done()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Info("run failed",
|
s.log.Info("[run] run failed",
|
||||||
zap.Error(err),
|
zap.Error(err),
|
||||||
zap.Uint("version", version),
|
zap.Uint("version", version),
|
||||||
zap.String("user", user),
|
zap.String("user", user),
|
||||||
@ -138,7 +138,7 @@ func (s *service) problemJudge(version uint, user string, lang string, config *C
|
|||||||
Done()
|
Done()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Info("judge failed",
|
s.log.Info("[judge] judge failed",
|
||||||
zap.Error(err),
|
zap.Error(err),
|
||||||
zap.Uint("version", version),
|
zap.Uint("version", version),
|
||||||
zap.String("user", user),
|
zap.String("user", user),
|
||||||
|
Loading…
Reference in New Issue
Block a user