in sandbox/sandbox.go [110:168]
func main() {
flag.Parse()
if *mode == "contained" {
runInGvisor()
panic("runInGvisor didn't exit")
}
if flag.NArg() != 0 {
flag.Usage()
os.Exit(1)
}
log.Printf("Go playground sandbox starting.")
readyContainer = make(chan *Container)
runSem = make(chan struct{}, *numWorkers)
go handleSignals()
mux := http.NewServeMux()
gr, err := metrics.GCEResource("go-playground-sandbox")
if err != nil && metadata.OnGCE() {
log.Printf("metrics.GceService(%q) = _, %v, wanted no error.", "go-playground-sandbox", err)
}
if ms, err := metrics.NewService(gr, views); err != nil {
log.Printf("Failed to initialize metrics: metrics.NewService() = _, %v, wanted no error", err)
} else {
mux.Handle("/statusz", ochttp.WithRouteTag(ms, "/statusz"))
defer ms.Stop()
}
if out, err := exec.Command("docker", "version").CombinedOutput(); err != nil {
log.Fatalf("failed to connect to docker: %v, %s", err, out)
}
if *dev {
log.Printf("Running in dev mode; container published to host at: http://localhost:8080/")
log.Printf("Run a binary with: curl -v --data-binary @/home/bradfitz/hello http://localhost:8080/run\n")
} else {
if out, err := exec.Command("docker", "pull", *container).CombinedOutput(); err != nil {
log.Fatalf("error pulling %s: %v, %s", *container, err, out)
}
log.Printf("Listening on %s", *listenAddr)
}
mux.Handle("/health", ochttp.WithRouteTag(http.HandlerFunc(healthHandler), "/health"))
mux.Handle("/healthz", ochttp.WithRouteTag(http.HandlerFunc(healthHandler), "/healthz"))
mux.Handle("/", ochttp.WithRouteTag(http.HandlerFunc(rootHandler), "/"))
mux.Handle("/run", ochttp.WithRouteTag(http.HandlerFunc(runHandler), "/run"))
makeWorkers()
go internal.PeriodicallyDo(context.Background(), 10*time.Second, func(ctx context.Context, _ time.Time) {
countDockerContainers(ctx)
})
trace.ApplyConfig(trace.Config{DefaultSampler: trace.NeverSample()})
httpServer = &http.Server{
Addr: *listenAddr,
Handler: &ochttp.Handler{Handler: mux},
}
log.Fatal(httpServer.ListenAndServe())
}