From d81f669922ca948e5db39cefc9c5b124b1213386 Mon Sep 17 00:00:00 2001 From: xkm <521-arch@starryskymeow.top> Date: Mon, 28 Apr 2025 17:33:28 +0800 Subject: [PATCH 1/3] use /dev/shm as tmp dir --- internal/worker/RunCppTask.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/worker/RunCppTask.go b/internal/worker/RunCppTask.go index e9be02b..34edb9a 100644 --- a/internal/worker/RunCppTask.go +++ b/internal/worker/RunCppTask.go @@ -162,7 +162,7 @@ func runCpp(ctx context.Context, task *model.Paste, cli *client.Client, tmpDir s func (w *Worker) RunCppTask(ctx context.Context, task *model.Paste, cli *client.Client) error { // 临时文件夹 - tmpDir, err := os.MkdirTemp("", "cpp_compile_") + tmpDir, err := os.MkdirTemp("/dev/shm/", "cpp_compile_") if err != nil { return fmt.Errorf("create temp dir error: %v", err) } From a040bc3bf6a8fb93b799d5683aec853d4a35d7cc Mon Sep 17 00:00:00 2001 From: dreamstarsky Date: Fri, 2 May 2025 22:49:03 +0800 Subject: [PATCH 2/3] add stdout/stderr/compilelog limit --- internal/config/LoadWorker.go | 2 ++ internal/worker/RunCppTask.go | 13 ++++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/internal/config/LoadWorker.go b/internal/config/LoadWorker.go index 0aabd74..0a1dd74 100644 --- a/internal/config/LoadWorker.go +++ b/internal/config/LoadWorker.go @@ -10,6 +10,7 @@ type LimitConfig struct { Cpu float32 Memory int Time float32 + Size int } type WorkerConfig struct { @@ -28,6 +29,7 @@ func LoadWorker(configFile string) *WorkerConfig { v.SetDefault("limit.cpu", 1.0) v.SetDefault("limit.time", 10.0) v.SetDefault("limit.memory", 512*1024) + v.SetDefault("limit.size", 1024) v.SetDefault("process", 1) v.SetDefault("name", "default name") v.SetDefault("compilerimage", "cpp_gcc-latest:latest") diff --git a/internal/worker/RunCppTask.go b/internal/worker/RunCppTask.go index 34edb9a..7ed7508 100644 --- a/internal/worker/RunCppTask.go +++ b/internal/worker/RunCppTask.go @@ -64,6 +64,7 @@ func compileCpp(ctx context.Context, task *model.Paste, cli *client.Client, tmpD // Read compilation log if logData, err := os.ReadFile(filepath.Join(tmpDir, "compile.txt")); err == nil { + logData = logData[:min(len(logData), cfg.Limit.Size)] task.CompileLog = string(logData) } @@ -144,18 +145,20 @@ func runCpp(ctx context.Context, task *model.Paste, cli *client.Client, tmpDir s usagePath := filepath.Join(tmpDir, "usage.json") // Read program output - if outData, err := os.ReadFile(stdoutPath); err == nil { - task.Stdout = string(outData) + if stdoutData, err := os.ReadFile(stdoutPath); err == nil { + stdoutData = stdoutData[:min(len(stdoutData), cfg.Limit.Size)] + task.Stdout = string(stdoutData) } - if outData, err := os.ReadFile(stderrPath); err == nil { - task.Stderr = string(outData) + if stderrData, err := os.ReadFile(stderrPath); err == nil { + stderrData = stderrData[:min(len(stderrData), cfg.Limit.Size)] + task.Stderr = string(stderrData) } if usageData, err := os.ReadFile(usagePath); err == nil { var usage Usage fmt.Println(string(usageData)) fmt.Println(json.Unmarshal(usageData, &usage)) task.MemoryUsageKb = int(usage.MaxMemory) - task.ExecutionTimeMs = int(usage.RealTime * 1000) + task.ExecutionTimeMs = int(usage.RealTime * 1000) } return nil } From 49dd9c3e39396c28ba5cf01f1aca992041278676 Mon Sep 17 00:00:00 2001 From: dreamstarsky Date: Fri, 2 May 2025 22:49:51 +0800 Subject: [PATCH 3/3] change default config --- cmd/api/main.go | 2 +- config/{server.yaml => api.yaml} | 0 config/worker.yaml | 12 +++++++----- 3 files changed, 8 insertions(+), 6 deletions(-) rename config/{server.yaml => api.yaml} (100%) diff --git a/cmd/api/main.go b/cmd/api/main.go index 978cbdc..1a3c13c 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -17,7 +17,7 @@ import ( func main() { // Load configuration - cfg := config.LoadApi("config/server.yaml") + cfg := config.LoadApi("config/api.yaml") if cfg.App.Env == "release" { gin.SetMode(gin.ReleaseMode) diff --git a/config/server.yaml b/config/api.yaml similarity index 100% rename from config/server.yaml rename to config/api.yaml diff --git a/config/worker.yaml b/config/worker.yaml index 5dcce4d..b9d6ddc 100644 --- a/config/worker.yaml +++ b/config/worker.yaml @@ -4,11 +4,13 @@ storage: dsn: "host=localhost port=54320 user=postgres password=password dbname=postgres sslmode=disable" limit: - time: 10 - cpu: 1 - memory: 512 + time: 10.0 # s + cpu: 1.0 + memory: 512 # MB + size: 1024 # KB -process: 4 +process: 1 -name: "猫猫" +name: "default name" +compilerimage: "cpp_gcc-latest:latest" \ No newline at end of file