Run goroutine to check each submission

This commit is contained in:
nemunaire 2016-01-14 18:17:35 +01:00
parent 42ed5c11ec
commit a9f35d224b
2 changed files with 20 additions and 12 deletions

View File

@ -4,9 +4,11 @@ import (
"flag" "flag"
"io/ioutil" "io/ioutil"
"log" "log"
"math/rand"
"os" "os"
"path" "path"
"strings" "strings"
"time"
"golang.org/x/exp/inotify" "golang.org/x/exp/inotify"
"srs.epita.fr/fic-server/libfic" "srs.epita.fr/fic-server/libfic"
@ -44,6 +46,8 @@ func main() {
SubmissionDir = path.Clean(SubmissionDir) SubmissionDir = path.Clean(SubmissionDir)
rand.Seed(time.Now().UnixNano())
log.Println("Creating submission directory...") log.Println("Creating submission directory...")
if _, err := os.Stat(SubmissionDir); os.IsNotExist(err) { if _, err := os.Stat(SubmissionDir); os.IsNotExist(err) {
if err := os.MkdirAll(SubmissionDir, 0777); err != nil { if err := os.MkdirAll(SubmissionDir, 0777); err != nil {
@ -83,9 +87,7 @@ func main() {
// Extract // Extract
spath := strings.Split(strings.TrimPrefix(ev.Name, SubmissionDir), "/") spath := strings.Split(strings.TrimPrefix(ev.Name, SubmissionDir), "/")
if err := treatSubmission(ev.Name, spath[1], spath[2]); err != nil { go treatSubmission(ev.Name, spath[1], spath[2])
log.Println("An error occurs during treating:", err)
}
} }
case err := <-watcher.Error: case err := <-watcher.Error:
log.Println("error:", err) log.Println("error:", err)

View File

@ -2,26 +2,32 @@ package main
import ( import (
"bufio" "bufio"
"encoding/base64"
"encoding/binary"
"log" "log"
"math/rand"
"os" "os"
"strconv" "strconv"
"srs.epita.fr/fic-server/libfic" "srs.epita.fr/fic-server/libfic"
) )
func treatSubmission(pathname string, team_id string, exercice_id string) error { func treatSubmission(pathname string, team_id string, exercice_id string) {
log.Println("Treating", pathname) bid := make([]byte, 5)
binary.LittleEndian.PutUint32(bid, rand.Uint32())
id := "[" + base64.StdEncoding.EncodeToString(bid) + "]"
log.Println(id, "New submission receive", pathname)
if tid, err := strconv.Atoi(team_id); err != nil { if tid, err := strconv.Atoi(team_id); err != nil {
return err log.Println(id, "[ERR]", err)
} else if eid, err := strconv.Atoi(exercice_id); err != nil { } else if eid, err := strconv.Atoi(exercice_id); err != nil {
return err log.Println(id, "[ERR]", err)
} else if team, err := fic.GetTeam(tid); err != nil { } else if team, err := fic.GetTeam(tid); err != nil {
return err log.Println(id, "[ERR]", err)
} else if exercice, err := fic.GetExercice(eid); err != nil { } else if exercice, err := fic.GetExercice(eid); err != nil {
return err log.Println(id, "[ERR]", err)
} else if file, err := os.Open(pathname); err != nil { } else if file, err := os.Open(pathname); err != nil {
return err log.Println(id, "[ERR]", err)
} else { } else {
defer file.Close() defer file.Close()
@ -30,8 +36,8 @@ func treatSubmission(pathname string, team_id string, exercice_id string) error
for scanner.Scan() { for scanner.Scan() {
cnt += scanner.Text() cnt += scanner.Text()
} }
log.Println(team, exercice, cnt)
return nil
log.Println(id, team, exercice, cnt)
} }
} }