Skip to content

Commit c0a5775

Browse files
committed
pb: Opaque API & update naming
1 parent 6efc4e5 commit c0a5775

18 files changed

+1843
-553
lines changed

Procfile

-1
This file was deleted.

Procfile.dev

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
apigateway: air -c .air.apigateway.toml
2-
demoserver: MONGODB_URI=mongodb://mongo/test air -c .air.demoserver.toml
2+
demoserver: air -c .air.demoserver.toml
33
judger: air -c .air.judger.toml

README.md

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
# go-sandbox-demo
1+
# go-judge-demo
22

3-
A simple demo site for the [go-judge](https://github.com/criyle/go-judge), deployed on [heroku](https://go-judger.herokuapp.com).
3+
A simple demo site for the [go-judge](https://github.com/criyle/go-judge), deployed on M1 Mac Mini docker desktop [site](https://goj.ac).
44
Under development...
55

66
Components:
77

8-
- Frontend: Vue.js
8+
- Frontend: Vue 3, Naive UI, monaco editor
99
- APIGateway: GO
1010
- Backend: GO
1111
- Judger Client: GO
12-
- Dev Server Compiler: Air
12+
- Dev Server Compiler: Air, Overmind
1313

1414
Tools:
1515

@@ -85,13 +85,13 @@ docker build -t judger_exec -f Dockerfile.exec .
8585
```bash
8686
docker run --name mongo -d -p 27017:27017 mongo
8787

88-
docker run --name demo --link mongo -d -e TOKEN=token -e GRPC_ADDR=:6081 -e MONGODB_URI=mongodb://mongo:27017/admin -e RELEASE=1 -p 6081:6081 -p 5082:5082 demoserver
88+
docker run --name demo --link mongo -d -e MONGODB_URI=mongodb://mongo:27017/test -p 5081:5081 -p 5082:5082 demoserver
8989

90-
docker run --name apigateway --link demo -d -e TOKEN=token -e DEMO_SERVER=demo:6081 -e RELEASE=1 -p 5000:5000 apigateway
90+
docker run --name apigateway --link demo -d -e DEMO_SERVER=demo:5081 -p 5000:5000 apigateway
9191

92-
docker run --name exec -d --privileged -e ES_AUTH_TOKEN=token -e ES_ENABLE_GRPC=1 -e ES_ENABLE_METRICS=1 -e ES_ENABLE_DEBUG=1 -e ES_GRPC_ADDR=:6051 -e ES_HTTP_ADDR=:6050 -p 6051:6051 -p 6050:6050 judger_exec
92+
docker run --name exec -d --privileged -e ES_ENABLE_GRPC=1 -e ES_ENABLE_METRICS=1 -e ES_ENABLE_DEBUG=1 -p 5052:5052 -p 5051:5051 -p 5050:5050 judger_exec
9393

94-
docker run --name judger --link exec --link demo -d -e TOKEN=token -e DEMO_SERVER=demo:6081 -e EXEC_SERVER=exec:6051 -e RELEASE=1 -p 2112:2112 judger
94+
docker run --name judger --link exec --link demo -d -e DEMO_SERVER=demo:5081 -e EXEC_SERVER=exec:5051 -p 2112:2112 judger
9595
```
9696

9797
## Data Model

apigateway/api.go

+10-5
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"io"
66
"net/http"
77

8-
"github.com/criyle/go-judger-demo/pb"
8+
"github.com/criyle/go-judge-demo/pb"
99
"github.com/gin-gonic/gin"
1010
"google.golang.org/protobuf/encoding/protojson"
1111
)
@@ -23,14 +23,19 @@ func (a *api) Register(r *gin.RouterGroup) {
2323

2424
func (a *api) apiSubmission(c *gin.Context) {
2525
id := c.Query("id")
26-
resp, err := a.client.Submission(c, &pb.SubmissionRequest{
27-
Id: id,
28-
})
26+
resp, err := a.client.Submission(c, pb.SubmissionRequest_builder{
27+
Id: &id,
28+
}.Build())
2929
if err != nil {
3030
c.AbortWithError(http.StatusInternalServerError, err)
3131
return
3232
}
33-
c.JSON(http.StatusOK, resp.Submissions)
33+
ct, err := protojson.Marshal(resp)
34+
if err != nil {
35+
c.AbortWithError(http.StatusInternalServerError, err)
36+
return
37+
}
38+
c.Data(http.StatusOK, "application/json; charset=utf-8", ct)
3439
}
3540

3641
func (a *api) apiSubmit(c *gin.Context) {

apigateway/judge_updater.go

+4-6
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package main
22

33
import (
4-
"bytes"
54
"context"
6-
"encoding/json"
75
"net/http"
86
"time"
97

10-
"github.com/criyle/go-judger-demo/pb"
8+
"github.com/criyle/go-judge-demo/pb"
119
"github.com/gin-gonic/gin"
1210
"github.com/gorilla/websocket"
1311
"go.uber.org/zap"
12+
"google.golang.org/protobuf/encoding/protojson"
1413
"google.golang.org/protobuf/types/known/emptypb"
1514
)
1615

@@ -79,13 +78,12 @@ func (j *judgeUpdater) broadcastLoop() {
7978
delete(j.observers, c)
8079

8180
case msg := <-j.broadcast:
82-
buf := new(bytes.Buffer)
83-
err := json.NewEncoder(buf).Encode(msg)
81+
buf, err := protojson.Marshal(msg)
8482
if err != nil {
8583
j.logger.Sugar().Debug("encode fail:", err)
8684
continue
8785
}
88-
pMsg, err := websocket.NewPreparedMessage(websocket.TextMessage, buf.Bytes())
86+
pMsg, err := websocket.NewPreparedMessage(websocket.TextMessage, buf)
8987
if err != nil {
9088
j.logger.Sugar().Debug("prepare fail:", err)
9189
continue

apigateway/main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"strings"
1010
"time"
1111

12-
"github.com/criyle/go-judger-demo/pb"
12+
"github.com/criyle/go-judge-demo/pb"
1313
ginzap "github.com/gin-contrib/zap"
1414
"github.com/gin-gonic/contrib/static"
1515
"github.com/gin-gonic/gin"

apigateway/shell.go

+6-8
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"net/http"
77
"time"
88

9-
"github.com/criyle/go-judger-demo/pb"
9+
"github.com/criyle/go-judge-demo/pb"
1010
"github.com/gin-gonic/gin"
1111
"github.com/gorilla/websocket"
1212
"go.uber.org/zap"
@@ -71,13 +71,11 @@ func (s *shell) readLoop() {
7171
if err != nil {
7272
break
7373
}
74-
err = s.sc.Send(&pb.ShellInput{
75-
Request: &pb.ShellInput_Input{
76-
Input: &pb.Input{
77-
Content: msg,
78-
},
79-
},
80-
})
74+
err = s.sc.Send(pb.ShellInput_builder{
75+
Input: pb.Input_builder{
76+
Content: msg,
77+
}.Build(),
78+
}.Build())
8179
if err != nil {
8280
break
8381
}

demoserver/db.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ type db struct {
7676
const (
7777
colName = "submission3"
7878
colName2 = "shell1"
79-
defaultURI = "mongodb://localhost:27017/admin"
79+
defaultURI = "mongodb://localhost:27017/test"
8080
defaultDatabase = "test1"
8181
)
8282

demoserver/grpc_server.go

+63-60
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import (
55
"context"
66
"time"
77

8+
"github.com/criyle/go-judge-demo/pb"
89
execpb "github.com/criyle/go-judge/pb"
9-
"github.com/criyle/go-judger-demo/pb"
1010
"go.mongodb.org/mongo-driver/v2/bson"
1111
"go.uber.org/zap"
1212
"google.golang.org/protobuf/types/known/emptypb"
@@ -54,18 +54,19 @@ func (s *demoServer) Submission(ctx context.Context, req *pb.SubmissionRequest)
5454
}
5555
sub := make([]*pb.Submission, 0, len(m))
5656
for _, v := range m {
57-
sub = append(sub, &pb.Submission{
58-
Id: v.ID.Hex(),
57+
id := v.ID.Hex()
58+
sub = append(sub, pb.Submission_builder{
59+
Id: &id,
5960
Language: convertLanguage(v.Lang),
60-
Source: v.Source,
61+
Source: &v.Source,
6162
Date: timestamppb.New(*v.Date),
62-
Status: v.Status,
63-
TotalTime: v.TotalTime,
64-
MaxMemory: v.MaxMemory,
63+
Status: &v.Status,
64+
TotalTime: &v.TotalTime,
65+
MaxMemory: &v.MaxMemory,
6566
Results: convertResults(v.Results),
66-
})
67+
}.Build())
6768
}
68-
return &pb.SubmissionResponse{Submissions: sub}, nil
69+
return pb.SubmissionResponse_builder{Submissions: sub}.Build(), nil
6970
}
7071

7172
func (s *demoServer) Submit(ctx context.Context, req *pb.SubmitRequest) (*pb.SubmitResponse, error) {
@@ -76,22 +77,24 @@ func (s *demoServer) Submit(ctx context.Context, req *pb.SubmitRequest) (*pb.Sub
7677
if err != nil {
7778
return nil, err
7879
}
79-
s.submit <- &pb.JudgeClientRequest{
80-
Id: m.ID.Hex(),
80+
id := m.ID.Hex()
81+
source := req.GetSource()
82+
s.submit <- pb.JudgeClientRequest_builder{
83+
Id: &id,
8184
Language: req.GetLanguage(),
82-
Source: req.GetSource(),
85+
Source: &source,
8386
InputAnswer: req.GetInputAnswer(),
84-
}
85-
s.update <- &pb.JudgeClientResponse{
86-
Id: m.ID.Hex(),
87-
Language: req.Language,
87+
}.Build()
88+
s.update <- pb.JudgeClientResponse_builder{
89+
Id: &id,
90+
Language: req.GetLanguage(),
8891
Date: timestamppb.New(*m.Date),
89-
Source: m.Source,
90-
}
92+
Source: &source,
93+
}.Build()
9194
s.logger.Sugar().Debug("submit: ", m)
92-
return &pb.SubmitResponse{
93-
Id: m.ID.Hex(),
94-
}, nil
95+
return pb.SubmitResponse_builder{
96+
Id: &id,
97+
}.Build(), nil
9598
}
9699

97100
func (s *demoServer) Judge(js pb.DemoBackend_JudgeServer) error {
@@ -118,7 +121,7 @@ func (s *demoServer) Judge(js pb.DemoBackend_JudgeServer) error {
118121
return err
119122
}
120123
s.update <- resp
121-
if resp.Type == "finished" {
124+
if resp.GetType() == "finished" {
122125
break
123126
}
124127
}
@@ -193,13 +196,13 @@ func (s *demoServer) Shell(ss pb.DemoBackend_ShellServer) error {
193196
switch msg := msg.Response.(type) {
194197
case *execpb.StreamResponse_ExecOutput:
195198
output.Write(msg.ExecOutput.Content)
196-
err = ss.Send(&pb.ShellOutput{Content: msg.ExecOutput.Content})
199+
err = ss.Send(pb.ShellOutput_builder{Content: msg.ExecOutput.Content}.Build())
197200
if err != nil {
198201
return
199202
}
200203

201204
case *execpb.StreamResponse_ExecResponse:
202-
err = ss.Send(&pb.ShellOutput{Content: []byte(msg.ExecResponse.String())})
205+
err = ss.Send(pb.ShellOutput_builder{Content: []byte(msg.ExecResponse.String())}.Build())
203206
if err != nil {
204207
return
205208
}
@@ -217,22 +220,22 @@ func (s *demoServer) Shell(ss pb.DemoBackend_ShellServer) error {
217220
if err != nil {
218221
return
219222
}
220-
switch msg := msg.Request.(type) {
221-
case *pb.ShellInput_Input:
222-
input.Write(msg.Input.Content)
223+
switch msg.WhichRequest() {
224+
case pb.ShellInput_Input_case:
225+
input.Write(msg.GetInput().GetContent())
223226
err = sc.Send(&execpb.StreamRequest{Request: &execpb.StreamRequest_ExecInput{ExecInput: &execpb.StreamRequest_Input{
224-
Content: msg.Input.Content,
227+
Content: msg.GetInput().GetContent(),
225228
}}})
226229
if err != nil {
227230
return
228231
}
229232

230-
case *pb.ShellInput_Resize:
233+
case pb.ShellInput_Resize_case:
231234
err = sc.Send(&execpb.StreamRequest{Request: &execpb.StreamRequest_ExecResize{ExecResize: &execpb.StreamRequest_Resize{
232-
Rows: msg.Resize.Rows,
233-
Cols: msg.Resize.Cols,
234-
X: msg.Resize.X,
235-
Y: msg.Resize.Y,
235+
Rows: msg.GetResize().GetRows(),
236+
Cols: msg.GetResize().GetCols(),
237+
X: msg.GetResize().GetX(),
238+
Y: msg.GetResize().GetY(),
236239
}}})
237240
if err != nil {
238241
return
@@ -258,15 +261,15 @@ func (s *demoServer) updateLoop() {
258261
delete(s.observers, o)
259262

260263
case u := <-s.update:
261-
up := &pb.JudgeUpdate{
262-
Id: u.GetId(),
263-
Type: u.GetType(),
264-
Status: u.GetStatus(),
264+
up := pb.JudgeUpdate_builder{
265265
Date: u.GetDate(),
266266
Language: u.GetLanguage(),
267267
Results: u.GetResults(),
268-
Source: u.GetSource(),
269-
}
268+
}.Build()
269+
up.SetId(u.GetId())
270+
up.SetType(u.GetType())
271+
up.SetStatus(u.GetStatus())
272+
up.SetSource(u.GetSource())
270273
// save to db
271274
id, _ := bson.ObjectIDFromHex(u.GetId())
272275
s.db.Update(context.TODO(), &JudgerUpdate{
@@ -299,13 +302,13 @@ func convertLanguagePB(l *pb.Language) Language {
299302
}
300303

301304
func convertLanguage(l Language) *pb.Language {
302-
return &pb.Language{
303-
Name: l.Name,
304-
SourceFileName: l.SourceFileName,
305-
CompileCmd: l.CompileCmd,
306-
Executables: l.Executables,
307-
RunCmd: l.RunCmd,
308-
}
305+
return pb.Language_builder{
306+
Name: &l.Name,
307+
SourceFileName: &l.SourceFileName,
308+
CompileCmd: &l.CompileCmd,
309+
Executables: &l.Executables,
310+
RunCmd: &l.RunCmd,
311+
}.Build()
309312
}
310313

311314
func convertResultsPB(r []*pb.Result) []Result {
@@ -318,12 +321,12 @@ func convertResultsPB(r []*pb.Result) []Result {
318321

319322
func convertResultPB(r *pb.Result) Result {
320323
return Result{
321-
Time: r.Time,
322-
Memory: r.Memory,
323-
Stdin: r.Stdin,
324-
Stdout: r.Stdout,
325-
Stderr: r.Stderr,
326-
Log: r.Log,
324+
Time: r.GetTime(),
325+
Memory: r.GetMemory(),
326+
Stdin: r.GetStdin(),
327+
Stdout: r.GetStdout(),
328+
Stderr: r.GetStderr(),
329+
Log: r.GetLog(),
327330
}
328331
}
329332

@@ -336,12 +339,12 @@ func convertResults(r []Result) []*pb.Result {
336339
}
337340

338341
func convertResult(r Result) *pb.Result {
339-
return &pb.Result{
340-
Time: r.Time,
341-
Memory: r.Memory,
342-
Stdin: r.Stdin,
343-
Stdout: r.Stdout,
344-
Stderr: r.Stderr,
345-
Log: r.Log,
346-
}
342+
return pb.Result_builder{
343+
Time: &r.Time,
344+
Memory: &r.Memory,
345+
Stdin: &r.Stdin,
346+
Stdout: &r.Stdout,
347+
Stderr: &r.Stderr,
348+
Log: &r.Log,
349+
}.Build()
347350
}

demoserver/main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import (
1010
"os"
1111
"os/signal"
1212

13+
"github.com/criyle/go-judge-demo/pb"
1314
execpb "github.com/criyle/go-judge/pb"
14-
"github.com/criyle/go-judger-demo/pb"
1515
grpc_prometheus "github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus"
1616
grpc_auth "github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/auth"
1717
"github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/logging"

0 commit comments

Comments
 (0)