mirror of
https://github.com/criyle/go-judge.git
synced 2025-11-04 14:50:02 +08:00
77 lines
2.2 KiB
Go
77 lines
2.2 KiB
Go
package worker
|
|
|
|
import "github.com/criyle/go-judge/pkg/envexec"
|
|
|
|
// CmdFile defines file from multiple source including local / memory / cached or pipe collector
|
|
type CmdFile struct {
|
|
Src *string `json:"src"`
|
|
Content *string `json:"content"`
|
|
FileID *string `json:"fileId"`
|
|
Name *string `json:"name"`
|
|
Max *int64 `json:"max"`
|
|
}
|
|
|
|
// Cmd defines command and limits to start a program using in envexec
|
|
type Cmd struct {
|
|
Args []string `json:"args"`
|
|
Env []string `json:"env,omitempty"`
|
|
Files []*CmdFile `json:"files,omitempty"`
|
|
|
|
CPULimit uint64 `json:"cpuLimit"`
|
|
RealCPULimit uint64 `json:"realCpuLimit"`
|
|
MemoryLimit uint64 `json:"memoryLimit"`
|
|
ProcLimit uint64 `json:"procLimit"`
|
|
|
|
CopyIn map[string]CmdFile `json:"copyIn"`
|
|
|
|
CopyOut []string `json:"copyOut"`
|
|
CopyOutCached []string `json:"copyOutCached"`
|
|
CopyOutDir string `json:"copyOutDir"`
|
|
}
|
|
|
|
// PipeIndex defines indexing for a pipe fd
|
|
type PipeIndex struct {
|
|
Index int `json:"index"`
|
|
Fd int `json:"fd"`
|
|
}
|
|
|
|
// PipeMap defines in / out pipe for multiple program
|
|
type PipeMap struct {
|
|
In PipeIndex `json:"in"`
|
|
Out PipeIndex `json:"out"`
|
|
}
|
|
|
|
// Request defines single worker request
|
|
type Request struct {
|
|
RequestID string `json:"requestId"`
|
|
Cmd []Cmd `json:"cmd"`
|
|
PipeMapping []PipeMap `json:"pipeMapping"`
|
|
}
|
|
|
|
// Status offers JSON marshal for envexec.Status
|
|
type Status envexec.Status
|
|
|
|
// MarshalJSON convert status into string
|
|
func (s Status) MarshalJSON() ([]byte, error) {
|
|
return []byte("\"" + (envexec.Status)(s).String() + "\""), nil
|
|
}
|
|
|
|
// Response defines single command response
|
|
type Response struct {
|
|
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"`
|
|
}
|
|
|
|
// Result defines worker response for single request
|
|
type Result struct {
|
|
RequestID string `json:"requestId"`
|
|
Response []Response `json:"results"`
|
|
Error error `json:"-"`
|
|
ErrorMsg string `json:"error,omitempty"`
|
|
}
|