feat: add language selection for build;feat: file and line number for debug messages;fix:add error handling for chdir call
This commit is contained in:
parent
157eafc58b
commit
858b2e7fd7
7 changed files with 18 additions and 31 deletions
|
@ -1,7 +1,6 @@
|
|||
package runner
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"io"
|
||||
"fmt"
|
||||
"log"
|
||||
|
@ -11,6 +10,7 @@ import (
|
|||
cgroups "github.com/containerd/cgroups"
|
||||
rand "math/rand"
|
||||
"time"
|
||||
"git.sch9.ru/new_gate/ms-runner/languages"
|
||||
)
|
||||
|
||||
const runIdLength = 20
|
||||
|
@ -43,7 +43,6 @@ func int32ToString(n int32) string {
|
|||
}
|
||||
|
||||
func copyFile(src string,dst string) error {
|
||||
log.Println(src,dst)
|
||||
srcFile,err := os.Open(src)
|
||||
if(err!=nil) {return err}
|
||||
defer srcFile.Close()
|
||||
|
@ -115,15 +114,15 @@ func NewRunnerService() (*RunnerService, error) {
|
|||
return &runnerService,nil
|
||||
}
|
||||
|
||||
func (runnerService RunnerService) Build(buildCmd []string, filename string) {
|
||||
func (runnerService RunnerService) Build(languageId int32, filename string) {
|
||||
core := <-runnerService.CoreFreed
|
||||
runId := genRunId()
|
||||
err := os.Mkdir("runs/" + runId, 0777)
|
||||
if(err!=nil) { log.Fatal(err) }
|
||||
os.Chmod("runs/" + runId, 0777)
|
||||
copyFile("starter/shared/main.c","runs/"+runId+"/main.c")//FIXME add source and file extension
|
||||
runnerService.IsolatedRun([]string{"/usr/bin/gcc","/shared/main.c","-o","/shared/executable","-save-temps=obj"},"../runs/"+runId,Limits{Processes: 10,Core:core,Memory:BuildMemory,Time:BuildTime});
|
||||
copyFile("runs/"+runId+"/executable","destination")//FIXME add destination
|
||||
copyFile(filename,"runs/"+runId+"/src")
|
||||
runnerService.IsolatedRun(languages.Languages[languageId].CompileCmd,"../runs/"+runId,Limits{Processes: 10,Core:core,Memory:BuildMemory,Time:BuildTime});
|
||||
copyFile("runs/"+runId+"/executable","executable")
|
||||
os.RemoveAll("runs/" + runId)
|
||||
go func() {
|
||||
runnerService.CoreFreed <- core
|
||||
|
@ -133,17 +132,10 @@ func (runnerService RunnerService) Build(buildCmd []string, filename string) {
|
|||
func (runnerService RunnerService) IsolatedRun(command []string, sharedFolder string, limits Limits) {
|
||||
args := []string{int32ToString(limits.Processes),int32ToString(limits.Core), int32ToString(limits.Memory), int32ToString(limits.Time), sharedFolder}
|
||||
args = append(args, command...)
|
||||
log.Println(limits.Processes)
|
||||
log.Println(string(limits.Processes))
|
||||
log.Println(args)
|
||||
log.Println("running isolated process with command:",args)
|
||||
cmd := exec.Command("starter/starter", args...)
|
||||
var stdBuffer bytes.Buffer
|
||||
mw := io.MultiWriter(os.Stdout, &stdBuffer)
|
||||
cmd.Stdout = mw
|
||||
err := cmd.Run();
|
||||
if err != nil {
|
||||
log.Println(123)
|
||||
log.Println(err)
|
||||
}
|
||||
//cmd.Wait()
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue