aboutsummaryrefslogtreecommitdiffhomepage
path: root/backend/taskqueue
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2024-08-05 05:35:37 +0900
committernsfisis <nsfisis@gmail.com>2024-08-05 05:35:37 +0900
commitdc16e903999af89d87364ad6619e7c8b41301da4 (patch)
tree529f1debc2972ac1486e8c0ca4b25827ccd069a6 /backend/taskqueue
parent2a551a05d714657d7cd3b581290054c97398e968 (diff)
downloadphperkaigi-2025-albatross-dc16e903999af89d87364ad6619e7c8b41301da4.tar.gz
phperkaigi-2025-albatross-dc16e903999af89d87364ad6619e7c8b41301da4.tar.zst
phperkaigi-2025-albatross-dc16e903999af89d87364ad6619e7c8b41301da4.zip
feat: show execution result in play page
Diffstat (limited to 'backend/taskqueue')
-rw-r--r--backend/taskqueue/processor.go8
-rw-r--r--backend/taskqueue/worker_server.go7
2 files changed, 12 insertions, 3 deletions
diff --git a/backend/taskqueue/processor.go b/backend/taskqueue/processor.go
index 1105da5..e505c5a 100644
--- a/backend/taskqueue/processor.go
+++ b/backend/taskqueue/processor.go
@@ -15,11 +15,13 @@ import (
type ExecProcessor struct {
q *db.Queries
+ c chan string
}
-func NewExecProcessor(q *db.Queries) *ExecProcessor {
+func NewExecProcessor(q *db.Queries, c chan string) *ExecProcessor {
return &ExecProcessor{
q: q,
+ c: c,
}
}
@@ -78,6 +80,7 @@ func (p *ExecProcessor) ProcessTask(ctx context.Context, t *asynq.Task) error {
if err != nil {
return fmt.Errorf("CreateTestcaseExecution failed: %v", err)
}
+ p.c <- "compile_error"
return fmt.Errorf("swiftc failed: %v", resData.Stderr)
}
}
@@ -118,6 +121,7 @@ func (p *ExecProcessor) ProcessTask(ctx context.Context, t *asynq.Task) error {
if err != nil {
return fmt.Errorf("CreateTestcaseExecution failed: %v", err)
}
+ p.c <- "compile_error"
return fmt.Errorf("wasmc failed: %v", resData.Stderr)
}
}
@@ -166,6 +170,7 @@ func (p *ExecProcessor) ProcessTask(ctx context.Context, t *asynq.Task) error {
if err != nil {
return fmt.Errorf("CreateTestcaseExecution failed: %v", err)
}
+ p.c <- resData.Result
return fmt.Errorf("testrun failed: %v", resData.Stderr)
}
if isTestcaseExecutionCorrect(testcase.Stdout, resData.Stdout) {
@@ -179,6 +184,7 @@ func (p *ExecProcessor) ProcessTask(ctx context.Context, t *asynq.Task) error {
if err != nil {
return fmt.Errorf("CreateTestcaseExecution failed: %v", err)
}
+ p.c <- "wrong_answer"
return fmt.Errorf("testrun failed: %v", resData.Stdout)
}
}
diff --git a/backend/taskqueue/worker_server.go b/backend/taskqueue/worker_server.go
index 09d9761..485d6d3 100644
--- a/backend/taskqueue/worker_server.go
+++ b/backend/taskqueue/worker_server.go
@@ -9,9 +9,10 @@ import (
type WorkerServer struct {
server *asynq.Server
queries *db.Queries
+ c chan string
}
-func NewWorkerServer(redisAddr string, queries *db.Queries) *WorkerServer {
+func NewWorkerServer(redisAddr string, queries *db.Queries, c chan string) *WorkerServer {
return &WorkerServer{
server: asynq.NewServer(
asynq.RedisClientOpt{
@@ -19,12 +20,14 @@ func NewWorkerServer(redisAddr string, queries *db.Queries) *WorkerServer {
},
asynq.Config{},
),
+ queries: queries,
+ c: c,
}
}
func (s *WorkerServer) Run() error {
mux := asynq.NewServeMux()
- mux.Handle(TaskTypeExec, NewExecProcessor(s.queries))
+ mux.Handle(TaskTypeExec, NewExecProcessor(s.queries, s.c))
return s.server.Run(mux)
}