diff --git a/cmd/flamenco-manager-poc/main.go b/cmd/flamenco-manager-poc/main.go index e7ddfa40..c93ff173 100644 --- a/cmd/flamenco-manager-poc/main.go +++ b/cmd/flamenco-manager-poc/main.go @@ -17,6 +17,7 @@ import ( "github.com/ziflex/lecho/v3" "gitlab.com/blender/flamenco-goja-test/internal/appinfo" + "gitlab.com/blender/flamenco-goja-test/internal/manager/api_impl" "gitlab.com/blender/flamenco-goja-test/internal/manager/job_compilers" "gitlab.com/blender/flamenco-goja-test/internal/manager/swagger_ui" "gitlab.com/blender/flamenco-goja-test/pkg/api" @@ -92,7 +93,7 @@ func echoOpenAPIPoC() { }) e.Use(validator) - flamenco := api.NewFlamenco() + flamenco := api_impl.NewFlamenco() api.RegisterHandlers(e, flamenco) // Log available routes diff --git a/internal/manager/api_impl/api_impl.go b/internal/manager/api_impl/api_impl.go new file mode 100644 index 00000000..0ac82196 --- /dev/null +++ b/internal/manager/api_impl/api_impl.go @@ -0,0 +1,70 @@ +package api_impl + +import ( + "net/http" + + "github.com/google/uuid" + "github.com/labstack/echo/v4" + "github.com/rs/zerolog/log" + "gitlab.com/blender/flamenco-goja-test/pkg/api" +) + +type Flamenco struct { +} + +var _ api.ServerInterface = (*Flamenco)(nil) + +func NewFlamenco() *Flamenco { + return &Flamenco{} +} + +func (f *Flamenco) RegisterWorker(e echo.Context) error { + remoteIP := e.RealIP() + + logger := log.With(). + Str("ip", remoteIP). + Logger() + + var req api.RegisterWorkerJSONBody + err := e.Bind(&req) + if err != nil { + logger.Warn().Err(err).Msg("bad request received") + return sendAPIError(e, http.StatusBadRequest, "invalid format") + } + + logger.Info().Str("nickname", req.Nickname).Msg("registering new worker") + + return e.JSON(http.StatusOK, &api.RegisteredWorker{ + Id: uuid.New().String(), + Nickname: req.Nickname, + Platform: req.Platform, + Address: remoteIP, + }) +} + +func (f *Flamenco) ScheduleTask(e echo.Context) error { + return e.JSON(http.StatusOK, &api.AssignedTask{ + Id: uuid.New().String(), + Commands: []api.Command{ + {"echo", echo.Map{"payload": "Simon says \"Shaders!\""}}, + {"blender", echo.Map{"blender_cmd": "/shared/bin/blender"}}, + }, + Job: uuid.New().String(), + JobPriority: 50, + JobType: "blender-render", + Name: "A1032", + Priority: 50, + Status: "active", + TaskType: "blender-render", + }) +} + +// sendPetstoreError wraps sending of an error in the Error format, and +// handling the failure to marshal that. +func sendAPIError(e echo.Context, code int, message string) error { + petErr := api.Error{ + Code: int32(code), + Message: message, + } + return e.JSON(code, petErr) +} diff --git a/pkg/api/flamenco.go b/pkg/api/flamenco.go index 4b7d972a..f4f9720d 100644 --- a/pkg/api/flamenco.go +++ b/pkg/api/flamenco.go @@ -4,71 +4,3 @@ //go:generate oapi-codegen -generate client -o openapi_client.gen.go -package api flamenco-manager.yaml package api - -import ( - "net/http" - - "github.com/google/uuid" - "github.com/labstack/echo/v4" - "github.com/rs/zerolog/log" -) - -type Flamenco struct { -} - -var _ ServerInterface = (*Flamenco)(nil) - -func NewFlamenco() *Flamenco { - return &Flamenco{} -} - -func (f *Flamenco) RegisterWorker(e echo.Context) error { - remoteIP := e.RealIP() - - logger := log.With(). - Str("ip", remoteIP). - Logger() - - var req RegisterWorkerJSONBody - err := e.Bind(&req) - if err != nil { - logger.Warn().Err(err).Msg("bad request received") - return sendAPIError(e, http.StatusBadRequest, "invalid format") - } - - logger.Info().Str("nickname", req.Nickname).Msg("registering new worker") - - return e.JSON(http.StatusOK, &RegisteredWorker{ - Id: uuid.New().String(), - Nickname: req.Nickname, - Platform: req.Platform, - Address: remoteIP, - }) -} - -func (f *Flamenco) ScheduleTask(e echo.Context) error { - return e.JSON(http.StatusOK, &AssignedTask{ - Id: uuid.New().String(), - Commands: []Command{ - {"echo", echo.Map{"payload": "Simon says \"Shaders!\""}}, - {"blender", echo.Map{"blender_cmd": "/shared/bin/blender"}}, - }, - Job: uuid.New().String(), - JobPriority: 50, - JobType: "blender-render", - Name: "A1032", - Priority: 50, - Status: "active", - TaskType: "blender-render", - }) -} - -// sendPetstoreError wraps sending of an error in the Error format, and -// handling the failure to marshal that. -func sendAPIError(e echo.Context, code int, message string) error { - petErr := Error{ - Code: int32(code), - Message: message, - } - return e.JSON(code, petErr) -}