chore: more verbose log

This commit is contained in:
Paul Pan 2024-01-06 19:47:16 +08:00
parent 5826b98b95
commit 9286aea36a
Signed by: Paul
GPG Key ID: D639BDF5BA578AF4
9 changed files with 34 additions and 29 deletions

View File

@ -19,7 +19,6 @@ func (h *handler) ProblemUpdate(_ context.Context, t *asynq.Task) error {
if p.Status != e.Success {
h.log.Warn("RunnerError", zap.Any("payload", p))
return nil
}
status := h.problemService.UpdateVersion(
@ -29,7 +28,7 @@ func (h *handler) ProblemUpdate(_ context.Context, t *asynq.Task) error {
Bytes: []byte(p.Context),
Status: pgtype.Present,
},
"IsEnabled": true,
"IsEnabled": p.Status == e.Success,
},
)

View File

@ -19,7 +19,6 @@ func (h *handler) SubmitUpdate(_ context.Context, t *asynq.Task) error {
if p.Status != e.Success {
h.log.Warn("RunnerError", zap.Any("payload", p))
return nil
}
createData := &status.CreateData{

View File

@ -22,12 +22,12 @@ func (h *handler) Build(_ context.Context, t *asynq.Task) error {
status, ctx := func() (e.Status, string) {
url, status := h.storageService.Get(p.StorageKey, time.Second*60*5)
if status != e.Success {
return e.InternalError, "{}"
return e.InternalError, "{\"Message\": \"storage error\"}"
}
config, status := h.runnerService.NewProblem(p.ProblemVersionID, url, true)
if status != e.Success {
return e.InternalError, "{}"
return e.InternalError, "{\"Message\": \"build error: " + status.String() + "\"}"
}
for i := range config.Languages {

View File

@ -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))
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
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
compileResult, status := h.runnerService.Compile(p.ProblemVersionID, user, p.Submission.Language)
if status != e.Success {
return e.Success, 0, compileResult
return e.InternalError, 0, compileResult
}
// 4. run and judge

View File

@ -30,13 +30,19 @@ func init() {
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 {
if !s.ProblemExists(version) {
s.log.Info("problem not exists", zap.Uint("version", version))
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))
return e.RunnerUserNotExist
}
@ -44,16 +50,6 @@ func (s *service) check(version uint, user string, lang string) e.Status {
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) {
for _, l := range config.Languages {
if l.Lang == lang {

View File

@ -21,7 +21,11 @@ func (s *service) Compile(version uint, user string, lang string) (JudgeStatus,
config, err := s.ParseConfig(version, true)
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
@ -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))
log, err := os.Create(logFile)
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) {
_ = log.Close()
@ -75,7 +83,7 @@ func (s *service) Compile(version uint, user string, lang string) (JudgeStatus,
Done()
if err != nil {
s.log.Info("compile failed",
s.log.Info("[compile] compile failed",
zap.Error(err),
zap.Uint("version", version),
zap.String("user", user),

View File

@ -40,7 +40,7 @@ func (s *service) loadImage(cfg *depConfig) e.Status {
Done()
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
}

View File

@ -18,13 +18,13 @@ func (s *service) download(version uint, url string) e.Status {
err := down.Down(zipPath, url)
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
}
err = unzip.Unzip(zipPath, problemPath)
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
}
@ -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")
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
}
@ -69,7 +69,7 @@ func (s *service) prebuild(version uint, force bool) e.Status {
err := s.podmanRun(runArgs)
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
}
@ -91,7 +91,7 @@ func (s *service) NewProblem(version uint, url string, force bool) (Config, e.St
cfg, err := s.ParseConfig(version, false)
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
}

View File

@ -75,7 +75,7 @@ func (s *service) problemRun(version uint, user string, lang string, config *Con
Done()
if err != nil {
s.log.Info("run failed",
s.log.Info("[run] run failed",
zap.Error(err),
zap.Uint("version", version),
zap.String("user", user),
@ -138,7 +138,7 @@ func (s *service) problemJudge(version uint, user string, lang string, config *C
Done()
if err != nil {
s.log.Info("judge failed",
s.log.Info("[judge] judge failed",
zap.Error(err),
zap.Uint("version", version),
zap.String("user", user),