35 lines
1.1 KiB
Go
35 lines
1.1 KiB
Go
package api
|
|
|
|
import (
|
|
"errors"
|
|
"github.com/gorilla/websocket"
|
|
"gitlab.hpi.de/codeocean/codemoon/poseidon/api/dto"
|
|
"gitlab.hpi.de/codeocean/codemoon/poseidon/runner"
|
|
"net/http"
|
|
)
|
|
|
|
// connectToRunner is the endpoint for websocket connections.
|
|
func (r *RunnerController) connectToRunner(writer http.ResponseWriter, request *http.Request) {
|
|
targetRunner, _ := runner.FromContext(request.Context())
|
|
executionId := runner.ExecutionId(request.URL.Query().Get(ExecutionIdKey))
|
|
_, ok := targetRunner.Execution(executionId)
|
|
if !ok {
|
|
writeNotFound(writer, errors.New("executionId does not exist"))
|
|
return
|
|
}
|
|
log.
|
|
WithField("runnerId", targetRunner.Id()).
|
|
WithField("executionId", executionId).
|
|
Info("Running execution")
|
|
connUpgrader := websocket.Upgrader{}
|
|
connClient, err := connUpgrader.Upgrade(writer, request, nil)
|
|
if err != nil {
|
|
log.WithError(err).Warn("Connection upgrade failed")
|
|
return
|
|
}
|
|
err = connClient.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
|
|
if err != nil {
|
|
writeInternalServerError(writer, err, dto.ErrorUnknown)
|
|
}
|
|
}
|