From a36ff086b2c930eeee97b124f7d64bf3c648bf87 Mon Sep 17 00:00:00 2001 From: criyle Date: Sun, 8 Mar 2020 01:49:11 -0500 Subject: [PATCH] Add ExitStatus --- README.md | 3 +++ cmd/executorserver/model.go | 13 +++++++------ cmd/executorserver/worker.go | 2 ++ pkg/envexec/cmd.go | 2 ++ pkg/envexec/run_single.go | 11 ++++++----- pkg/envexec/run_status.go | 9 +++++++-- pkg/envexec/util.go | 8 ++++++-- 7 files changed, 33 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index ed91810..9402d8c 100644 --- a/README.md +++ b/README.md @@ -162,6 +162,7 @@ Single (Require `apt install g++` inside the container): [ { "status": "Accepted", + "exitStatus": 0, "time": 303225231, "memory": 32243712, "files": { @@ -223,6 +224,7 @@ Multiple: [ { "status": "Accepted", + "exitStatus": 0, "time": 1545123, "memory": 253952, "files": { @@ -232,6 +234,7 @@ Multiple: }, { "status": "Accepted", + "exitStatus": 0, "time": 1501463, "memory": 253952, "files": { diff --git a/cmd/executorserver/model.go b/cmd/executorserver/model.go index 2de252b..a8cc34f 100644 --- a/cmd/executorserver/model.go +++ b/cmd/executorserver/model.go @@ -49,10 +49,11 @@ func (s status) MarshalJSON() ([]byte, error) { } type response struct { - Status status `json:"status"` - Error string `json:"error,omitempty"` - Time uint64 `json:"time"` - Memory uint64 `json:"memory"` - Files map[string]string `json:"files,omitempty"` - FileIDs map[string]string `json:"fileIds,omitempty"` + Status status `json:"status"` + ExitStatus int `json:"exitStatus"` + Error string `json:"error,omitempty"` + Time uint64 `json:"time"` + Memory uint64 `json:"memory"` + Files map[string]string `json:"files,omitempty"` + FileIDs map[string]string `json:"fileIds,omitempty"` } diff --git a/cmd/executorserver/worker.go b/cmd/executorserver/worker.go index ff2a5af..0958de3 100644 --- a/cmd/executorserver/worker.go +++ b/cmd/executorserver/worker.go @@ -81,6 +81,7 @@ func workDoSingle(rc cmd) (res response) { return } res.Status = status(result.Status) + res.ExitStatus = result.ExitStatus res.Error = result.Error res.Time = uint64(result.Time) res.Memory = uint64(result.Memory) @@ -138,6 +139,7 @@ func workDoGroup(rc []cmd, pm []pipeMap) (rts []response) { for i, result := range results { var res response res.Status = status(result.Status) + res.ExitStatus = result.ExitStatus res.Error = result.Error res.Time = uint64(result.Time) res.Memory = uint64(result.Memory) diff --git a/pkg/envexec/cmd.go b/pkg/envexec/cmd.go index d9ee7de..54cf178 100644 --- a/pkg/envexec/cmd.go +++ b/pkg/envexec/cmd.go @@ -50,6 +50,8 @@ type PipeCollector struct { type Result struct { Status Status + ExitStatus int + Error string // error Time time.Duration diff --git a/pkg/envexec/run_single.go b/pkg/envexec/run_single.go index 193ca4b..c032e53 100644 --- a/pkg/envexec/run_single.go +++ b/pkg/envexec/run_single.go @@ -58,11 +58,12 @@ func runSingle(m container.Environment, cg Cgroup, c *Cmd, fds []*os.File, ptc [ // collect result files, err := copyOutAndCollect(m, c, ptc) result = Result{ - Status: convertStatus(rt.Status), - Error: rt.Error, - Time: rt.Time, - Memory: rt.Memory, - Files: files, + Status: convertStatus(rt.Status), + ExitStatus: rt.ExitStatus, + Error: rt.Error, + Time: rt.Time, + Memory: rt.Memory, + Files: files, } // collect error if err != nil && result.Error == "" { diff --git a/pkg/envexec/run_status.go b/pkg/envexec/run_status.go index 82fee2c..9995084 100644 --- a/pkg/envexec/run_status.go +++ b/pkg/envexec/run_status.go @@ -18,9 +18,12 @@ const ( StatusTimeLimitExceeded // TLE StatusOutputLimitExceeded // OLE StatusFileError // FE - StatusRuntimeError // RE + StatusNonzeroExitStatus // NZS + StatusSignalled // SIG StatusDangerousSyscall // DJS + //StatusRuntimeError // RE + // SPJ / interactor error StatusJudgementFailed StatusInvalidInteraction // interactor signals error @@ -38,7 +41,9 @@ var statusToString = []string{ "Time Limit Exceeded", "Output Limit Exceeded", "File Error", - "Runtime Error", + //"Runtime Error", + "Nonzero Exit Status", + "Signalled", "Dangerous Syscall", "Judgement Failed", "Invalid Interaction", diff --git a/pkg/envexec/util.go b/pkg/envexec/util.go index b62494f..bc44fe7 100644 --- a/pkg/envexec/util.go +++ b/pkg/envexec/util.go @@ -10,8 +10,12 @@ func convertStatus(s runner.Status) Status { switch s { case runner.StatusNormal: return StatusAccepted - case runner.StatusSignalled, runner.StatusNonzeroExitStatus: - return StatusRuntimeError + // case runner.StatusSignalled, runner.StatusNonzeroExitStatus: + // return StatusRuntimeError + case runner.StatusSignalled: + return StatusSignalled + case runner.StatusNonzeroExitStatus: + return StatusNonzeroExitStatus case runner.StatusMemoryLimitExceeded: return StatusMemoryLimitExceeded case runner.StatusTimeLimitExceeded: