feat(executor/local): full result state
This commit is contained in:
parent
a708e768ec
commit
868154b440
|
@ -7,6 +7,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strings"
|
"strings"
|
||||||
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/criyle/go-judge/envexec"
|
"github.com/criyle/go-judge/envexec"
|
||||||
|
@ -52,11 +53,31 @@ func (e *Local) Run(cmds []stage.Cmd) ([]stage.ExecutorResult, error) {
|
||||||
err = execCmd.Wait()
|
err = execCmd.Wait()
|
||||||
endTime := time.Now()
|
endTime := time.Now()
|
||||||
runTime := endTime.Sub(startTime)
|
runTime := endTime.Sub(startTime)
|
||||||
|
processState := execCmd.ProcessState
|
||||||
result := stage.ExecutorResult{
|
result := stage.ExecutorResult{
|
||||||
Status: stage.Status(envexec.StatusAccepted),
|
Status: stage.Status(envexec.StatusAccepted),
|
||||||
ExitStatus: 0,
|
ExitStatus: processState.ExitCode(),
|
||||||
Error: "",
|
Error: "",
|
||||||
|
Time: func() uint64 {
|
||||||
|
nanos := processState.UserTime().Nanoseconds()
|
||||||
|
if nanos < 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return uint64(nanos)
|
||||||
|
}(),
|
||||||
|
Memory: func() uint64 {
|
||||||
|
usage := processState.SysUsage()
|
||||||
|
rusage, ok := usage.(*syscall.Rusage)
|
||||||
|
if !ok {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
maxRssKB := rusage.Maxrss
|
||||||
|
maxRssBytes := maxRssKB * 1024
|
||||||
|
if maxRssBytes < 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return uint64(maxRssBytes)
|
||||||
|
}(),
|
||||||
RunTime: func() uint64 {
|
RunTime: func() uint64 {
|
||||||
nanos := runTime.Nanoseconds()
|
nanos := runTime.Nanoseconds()
|
||||||
if nanos < 0 {
|
if nanos < 0 {
|
||||||
|
@ -70,7 +91,6 @@ func (e *Local) Run(cmds []stage.Cmd) ([]stage.ExecutorResult, error) {
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if exitErr, ok := err.(*exec.ExitError); ok {
|
if exitErr, ok := err.(*exec.ExitError); ok {
|
||||||
result.ExitStatus = exitErr.ExitCode()
|
|
||||||
result.Status = stage.Status(envexec.StatusNonzeroExitStatus)
|
result.Status = stage.Status(envexec.StatusNonzeroExitStatus)
|
||||||
result.Error = exitErr.Error()
|
result.Error = exitErr.Error()
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user