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",
|
"status": "Accepted",
|
||||||
|
"exitStatus": 0,
|
||||||
"time": 303225231,
|
"time": 303225231,
|
||||||
"memory": 32243712,
|
"memory": 32243712,
|
||||||
"files": {
|
"files": {
|
||||||
@ -223,6 +224,7 @@ Multiple:
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"status": "Accepted",
|
"status": "Accepted",
|
||||||
|
"exitStatus": 0,
|
||||||
"time": 1545123,
|
"time": 1545123,
|
||||||
"memory": 253952,
|
"memory": 253952,
|
||||||
"files": {
|
"files": {
|
||||||
@ -232,6 +234,7 @@ Multiple:
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"status": "Accepted",
|
"status": "Accepted",
|
||||||
|
"exitStatus": 0,
|
||||||
"time": 1501463,
|
"time": 1501463,
|
||||||
"memory": 253952,
|
"memory": 253952,
|
||||||
"files": {
|
"files": {
|
||||||
|
|||||||
@ -50,6 +50,7 @@ func (s status) MarshalJSON() ([]byte, error) {
|
|||||||
|
|
||||||
type response struct {
|
type response struct {
|
||||||
Status status `json:"status"`
|
Status status `json:"status"`
|
||||||
|
ExitStatus int `json:"exitStatus"`
|
||||||
Error string `json:"error,omitempty"`
|
Error string `json:"error,omitempty"`
|
||||||
Time uint64 `json:"time"`
|
Time uint64 `json:"time"`
|
||||||
Memory uint64 `json:"memory"`
|
Memory uint64 `json:"memory"`
|
||||||
|
|||||||
@ -81,6 +81,7 @@ func workDoSingle(rc cmd) (res response) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
res.Status = status(result.Status)
|
res.Status = status(result.Status)
|
||||||
|
res.ExitStatus = result.ExitStatus
|
||||||
res.Error = result.Error
|
res.Error = result.Error
|
||||||
res.Time = uint64(result.Time)
|
res.Time = uint64(result.Time)
|
||||||
res.Memory = uint64(result.Memory)
|
res.Memory = uint64(result.Memory)
|
||||||
@ -138,6 +139,7 @@ func workDoGroup(rc []cmd, pm []pipeMap) (rts []response) {
|
|||||||
for i, result := range results {
|
for i, result := range results {
|
||||||
var res response
|
var res response
|
||||||
res.Status = status(result.Status)
|
res.Status = status(result.Status)
|
||||||
|
res.ExitStatus = result.ExitStatus
|
||||||
res.Error = result.Error
|
res.Error = result.Error
|
||||||
res.Time = uint64(result.Time)
|
res.Time = uint64(result.Time)
|
||||||
res.Memory = uint64(result.Memory)
|
res.Memory = uint64(result.Memory)
|
||||||
|
|||||||
@ -50,6 +50,8 @@ type PipeCollector struct {
|
|||||||
type Result struct {
|
type Result struct {
|
||||||
Status Status
|
Status Status
|
||||||
|
|
||||||
|
ExitStatus int
|
||||||
|
|
||||||
Error string // error
|
Error string // error
|
||||||
|
|
||||||
Time time.Duration
|
Time time.Duration
|
||||||
|
|||||||
@ -59,6 +59,7 @@ func runSingle(m container.Environment, cg Cgroup, c *Cmd, fds []*os.File, ptc [
|
|||||||
files, err := copyOutAndCollect(m, c, ptc)
|
files, err := copyOutAndCollect(m, c, ptc)
|
||||||
result = Result{
|
result = Result{
|
||||||
Status: convertStatus(rt.Status),
|
Status: convertStatus(rt.Status),
|
||||||
|
ExitStatus: rt.ExitStatus,
|
||||||
Error: rt.Error,
|
Error: rt.Error,
|
||||||
Time: rt.Time,
|
Time: rt.Time,
|
||||||
Memory: rt.Memory,
|
Memory: rt.Memory,
|
||||||
|
|||||||
@ -18,9 +18,12 @@ const (
|
|||||||
StatusTimeLimitExceeded // TLE
|
StatusTimeLimitExceeded // TLE
|
||||||
StatusOutputLimitExceeded // OLE
|
StatusOutputLimitExceeded // OLE
|
||||||
StatusFileError // FE
|
StatusFileError // FE
|
||||||
StatusRuntimeError // RE
|
StatusNonzeroExitStatus // NZS
|
||||||
|
StatusSignalled // SIG
|
||||||
StatusDangerousSyscall // DJS
|
StatusDangerousSyscall // DJS
|
||||||
|
|
||||||
|
//StatusRuntimeError // RE
|
||||||
|
|
||||||
// SPJ / interactor error
|
// SPJ / interactor error
|
||||||
StatusJudgementFailed
|
StatusJudgementFailed
|
||||||
StatusInvalidInteraction // interactor signals error
|
StatusInvalidInteraction // interactor signals error
|
||||||
@ -38,7 +41,9 @@ var statusToString = []string{
|
|||||||
"Time Limit Exceeded",
|
"Time Limit Exceeded",
|
||||||
"Output Limit Exceeded",
|
"Output Limit Exceeded",
|
||||||
"File Error",
|
"File Error",
|
||||||
"Runtime Error",
|
//"Runtime Error",
|
||||||
|
"Nonzero Exit Status",
|
||||||
|
"Signalled",
|
||||||
"Dangerous Syscall",
|
"Dangerous Syscall",
|
||||||
"Judgement Failed",
|
"Judgement Failed",
|
||||||
"Invalid Interaction",
|
"Invalid Interaction",
|
||||||
|
|||||||
@ -10,8 +10,12 @@ func convertStatus(s runner.Status) Status {
|
|||||||
switch s {
|
switch s {
|
||||||
case runner.StatusNormal:
|
case runner.StatusNormal:
|
||||||
return StatusAccepted
|
return StatusAccepted
|
||||||
case runner.StatusSignalled, runner.StatusNonzeroExitStatus:
|
// case runner.StatusSignalled, runner.StatusNonzeroExitStatus:
|
||||||
return StatusRuntimeError
|
// return StatusRuntimeError
|
||||||
|
case runner.StatusSignalled:
|
||||||
|
return StatusSignalled
|
||||||
|
case runner.StatusNonzeroExitStatus:
|
||||||
|
return StatusNonzeroExitStatus
|
||||||
case runner.StatusMemoryLimitExceeded:
|
case runner.StatusMemoryLimitExceeded:
|
||||||
return StatusMemoryLimitExceeded
|
return StatusMemoryLimitExceeded
|
||||||
case runner.StatusTimeLimitExceeded:
|
case runner.StatusTimeLimitExceeded:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user