diff --git a/pkg/server/server.go b/pkg/server/server.go index 1855925..5da7318 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -65,6 +65,7 @@ func (s *Server) setupRouter() (*httprouter.Router, error) { router.GET("/cluster/join", s.acceptWorkerConn) router.GET("/notifications", s.acceptNotificationConn) + router.POST("/api/v1/load_test", s.handleStartLoadTest) // CORS router.GlobalOPTIONS = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -203,3 +204,20 @@ func loadTestStateToString(s int) string { return "" } + +func (s *Server) handleStartLoadTest(responseWriter http.ResponseWriter, req *http.Request, _ httprouter.Params) { + var startLoadTestRequest messages.StartLoadTestRequest + err := json.NewDecoder(req.Body).Decode(&startLoadTestRequest) + if err != nil { + http.Error(responseWriter, err.Error(), http.StatusBadRequest) + return + } + + s.StartLoadTest(&startLoadTestRequest) + + header := responseWriter.Header() + header.Set("Access-Control-Allow-Origin", "*") + + responseWriter.WriteHeader(200) + responseWriter.Write([]byte("ok")) +} diff --git a/pkg/worker/worker.go b/pkg/worker/worker.go index 1614de2..ba983b4 100644 --- a/pkg/worker/worker.go +++ b/pkg/worker/worker.go @@ -66,7 +66,11 @@ func (w *Worker) Run() { w.conn = conn defer conn.Close() defer close(w.isConnectedCh) - w.isConnectedCh <- struct{}{} + + // TODO: it's inefficient if nobody is reading this + go func() { + w.isConnectedCh <- struct{}{} + }() go w.LoopSendMetricsToServer() diff --git a/web/src/App.vue b/web/src/App.vue index f93936f..e1c8946 100644 --- a/web/src/App.vue +++ b/web/src/App.vue @@ -5,13 +5,17 @@ - + +
+ +
+ +