package runner import ( "fmt" "git.0x7f.app/WOJ/woj-server/internal/e" "git.0x7f.app/WOJ/woj-server/pkg/file" "go.uber.org/zap" "os" "path" "path/filepath" ) var ( Prefix = "./resource/runner" ProblemDir = "./problem/" ScriptsDir = "./scripts/" UserDir = "./user/" TmpDir = "./tmp/" ) func init() { wd, err := os.Getwd() if err != nil { panic(err) } Prefix = path.Join(wd, Prefix) ProblemDir = path.Join(Prefix, ProblemDir) UserDir = path.Join(Prefix, UserDir) TmpDir = path.Join(Prefix, TmpDir) } func (s *service) checkAndExecute(version uint, user string, lang string, script string, fail e.Status) 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)) { s.log.Info("user program not exists", zap.String("user", user), zap.String("lang", lang)) return e.RunnerUserNotExist } err := s.execute(script, fmt.Sprintf("%d", version), user, lang) if err != nil { s.log.Info("execute failed", zap.Error(err), zap.Uint("version", version), zap.String("user", user), zap.String("lang", lang)) return fail } 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) }