mirror of
https://github.com/criyle/go-judge.git
synced 2025-11-04 14:50:02 +08:00
Add ExitStatus
This commit is contained in:
parent
bb9c448601
commit
a36ff086b2
@ -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": {
|
||||
|
||||
@ -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"`
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -50,6 +50,8 @@ type PipeCollector struct {
|
||||
type Result struct {
|
||||
Status Status
|
||||
|
||||
ExitStatus int
|
||||
|
||||
Error string // error
|
||||
|
||||
Time time.Duration
|
||||
|
||||
@ -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 == "" {
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user