Files
poseidon/api/runners.go
2021-05-04 13:08:04 +02:00

36 lines
1005 B
Go

package api
import (
"encoding/json"
"github.com/gorilla/mux"
"gitlab.hpi.de/codeocean/codemoon/poseidon/api/dto"
"gitlab.hpi.de/codeocean/codemoon/poseidon/environment"
"net/http"
)
// ProvideRunner tries to respond with the id of a runner.
// This runner is then reserved for future use.
func ProvideRunner(writer http.ResponseWriter, request *http.Request) {
runnerRequest := new(dto.RequestRunner)
if err := json.NewDecoder(request.Body).Decode(runnerRequest); err != nil {
writeBadRequest(writer, err)
return
}
environment, err := environment.GetExecutionEnvironment(runnerRequest.ExecutionEnvironmentId)
if err != nil {
writeNotFound(writer, err)
return
}
runner, err := environment.NextRunner()
if err != nil {
writeInternalServerError(writer, err, dto.ErrorNomadOverload)
return
}
sendJson(writer, &dto.ResponseRunner{Id: runner.Id()}, http.StatusOK)
}
func registerRunnerRoutes(router *mux.Router) {
router.HandleFunc("", ProvideRunner).Methods(http.MethodPost)
}