go-judge/worker/model.go
2021-06-12 17:33:53 -07:00

90 lines
1.8 KiB
Go

package worker
import (
"fmt"
"time"
"github.com/criyle/go-judge/envexec"
)
type Size = envexec.Size
type CmdCopyOutFile = envexec.CmdCopyOutFile
type PipeMap = envexec.Pipe
type PipeIndex = envexec.PipeIndex
// Cmd defines command and limits to start a program using in envexec
type Cmd struct {
Args []string
Env []string
Files []CmdFile
TTY bool
CPULimit time.Duration
ClockLimit time.Duration
MemoryLimit Size
StackLimit Size
ProcLimit uint64
CPURateLimit float64
StrictMemoryLimit bool
CopyIn map[string]CmdFile
CopyOut []CmdCopyOutFile
CopyOutCached []CmdCopyOutFile
CopyOutMax uint64
CopyOutDir string
}
// Request defines single worker request
type Request struct {
RequestID string
Cmd []Cmd
PipeMapping []PipeMap
}
// Result defines single command response
type Result struct {
Status envexec.Status
ExitStatus int
Error string
Time time.Duration
RunTime time.Duration
Memory envexec.Size
Files map[string][]byte
FileIDs map[string]string
}
// Response defines worker response for single request
type Response struct {
RequestID string
Results []Result
Error error
}
func (r Result) String() string {
type Result struct {
Status envexec.Status
ExitStatus int
Error string
Time time.Duration
RunTime time.Duration
Memory envexec.Size
Files map[string]string
FileIDs map[string]string
}
d := Result{
Status: r.Status,
ExitStatus: r.ExitStatus,
Error: r.Error,
Time: r.Time,
RunTime: r.RunTime,
Memory: r.Memory,
Files: make(map[string]string),
FileIDs: r.FileIDs,
}
for k, v := range r.Files {
d.Files[k] = fmt.Sprintf("(len:%d)", len(v))
}
return fmt.Sprintf("%+v", d)
}