Sandbox

/app/controller/sandbox.go (1.4 KB)

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package controller

import (
"github.com/valyala/fasthttp"

"{{{ .Package }}}/app"
"{{{ .Package }}}/app/controller/cutil"
"{{{ .Package }}}/app/lib/sandbox"
"{{{ .Package }}}/app/lib/telemetry"
"{{{ .Package }}}/views/vsandbox"
)

func SandboxList(rc *fasthttp.RequestCtx) {
Act("sandbox.list", rc, func(as *app.State, ps *cutil.PageState) (string, error) {
ps.Title = "Sandboxes"
ps.Data = sandbox.AllSandboxes
return Render(rc, as, &vsandbox.List{}, ps, "sandbox")
})
}

func SandboxRun(rc *fasthttp.RequestCtx) {
Act("sandbox.run", rc, func(as *app.State, ps *cutil.PageState) (string, error) {
key, err := cutil.RCRequiredString(rc, "key", false)
if err != nil {
return "", err
}

sb := sandbox.AllSandboxes.Get(key)
if sb == nil {
return ERsp("no sandbox with key [%s]", key)
}

ctx, span, logger := telemetry.StartSpan(ps.Context, "sandbox."+key, ps.Logger)
defer span.Complete()

ret, err := sb.Run(ctx, as, logger.With("sandbox", key))
if err != nil {
return "", err
}
ps.Title = sb.Title
ps.Data = ret
if sb.Key == "testbed" {
return Render(rc, as, &vsandbox.Testbed{}, ps, "sandbox", sb.Key)
}{{{ if .HasModule "wasmclient" }}}
if sb.Key == "wasm" {
return Render(rc, as, &vsandbox.WASM{}, ps, "sandbox", sb.Key)
}{{{ end }}}
return Render(rc, as, &vsandbox.Run{Key: key, Title: sb.Title, Icon: sb.Icon, Result: ret}, ps, "sandbox", sb.Key)
})
}