mirror of
https://github.com/criyle/go-judge.git
synced 2025-11-04 14:50:02 +08:00
40 lines
1.4 KiB
Markdown
40 lines
1.4 KiB
Markdown
# go-judge
|
|
|
|
Under designing.
|
|
|
|
The goal to to reimplement [syzoj/judge-v3](https://github.com/syzoj/judge-v3) in GO language using [go-sandbox](https://github.com/criyle/go-sandbox).
|
|
|
|
## Planned Design
|
|
|
|
Container Root Filesystem:
|
|
|
|
+ necessary lib / exec / compiler / header readonly bind mounted from current file system: /lib /lib64 /bin /usr
|
|
+ work directory tmpfs mount: /w (work dir), /tmp (compiler temp files)
|
|
+ additional compiler scripts / exec readonly bind mounted: /c
|
|
+ additional header readonly bind mounted: /i
|
|
|
|
Brokers and interfaces:
|
|
|
|
+ client: receive pushed judge tasks from website (websocket / socket.io / RabbitMQ)
|
|
+ data: interface to download, cache, lock and access test data files from website by data_id
|
|
+ taskqueue: message queue to send run task and receive result (GO channel / (RabbitMQ, Redis))
|
|
+ file: general file interface (disk / memory)
|
|
+ language: programming language compile & execute configurations
|
|
|
|
Workers:
|
|
|
|
+ judger: execute judge logics (compile / standard / interactive / answer submit) and distribute as run task to queue
|
|
+ runner: receive run task and execute in sandbox (dumb runner)
|
|
|
|
Models:
|
|
|
|
+ JudgeTask: judge task pushed from website (type, source, data)
|
|
+ JudgeResult: judge task result send back to website
|
|
+ JudgeSetting: problem setting (from yaml) and JudgeCase
|
|
+ RunTask: run task parameters send to run_queue
|
|
+ RunResult: run task result sent back from queue
|
|
|
|
Utilities:
|
|
|
|
+ Config: read client config from TOML file
|