Manager: implement FetchTask
OAPI endpoint
This commit is contained in:
parent
4da7f67105
commit
18891dda91
@ -246,3 +246,42 @@ func jobDBtoAPI(dbJob *persistence.Job) api.Job {
|
||||
|
||||
return apiJob
|
||||
}
|
||||
|
||||
func taskDBtoAPI(dbTask *persistence.Task) api.Task {
|
||||
apiTask := api.Task{
|
||||
Id: dbTask.UUID,
|
||||
Name: dbTask.Name,
|
||||
Priority: dbTask.Priority,
|
||||
TaskType: dbTask.Type,
|
||||
Created: dbTask.CreatedAt,
|
||||
Updated: dbTask.UpdatedAt,
|
||||
Status: dbTask.Status,
|
||||
Activity: dbTask.Activity,
|
||||
Commands: make([]api.Command, len(dbTask.Commands)),
|
||||
}
|
||||
|
||||
if dbTask.Job != nil {
|
||||
apiTask.JobId = dbTask.Job.UUID
|
||||
}
|
||||
|
||||
if dbTask.Worker != nil {
|
||||
apiTask.Worker = &api.TaskWorker{
|
||||
Id: dbTask.Worker.UUID,
|
||||
Name: dbTask.Worker.Name,
|
||||
Address: dbTask.Worker.Address,
|
||||
}
|
||||
}
|
||||
|
||||
for i := range dbTask.Commands {
|
||||
apiTask.Commands[i] = commandDBtoAPI(dbTask.Commands[i])
|
||||
}
|
||||
|
||||
return apiTask
|
||||
}
|
||||
|
||||
func commandDBtoAPI(dbCommand persistence.Command) api.Command {
|
||||
return api.Command{
|
||||
Name: dbCommand.Name,
|
||||
Parameters: dbCommand.Parameters,
|
||||
}
|
||||
}
|
||||
|
@ -87,6 +87,31 @@ func (f *Flamenco) FetchJobTasks(e echo.Context, jobID string) error {
|
||||
return e.JSON(http.StatusOK, result)
|
||||
}
|
||||
|
||||
func (f *Flamenco) FetchTask(e echo.Context, taskID string) error {
|
||||
logger := requestLogger(e).With().
|
||||
Str("task", taskID).
|
||||
Logger()
|
||||
ctx := e.Request().Context()
|
||||
|
||||
if _, err := uuid.Parse(taskID); err != nil {
|
||||
logger.Debug().Msg("invalid job ID received")
|
||||
return sendAPIError(e, http.StatusBadRequest, "job ID not valid")
|
||||
}
|
||||
|
||||
task, err := f.persist.FetchTask(ctx, taskID)
|
||||
if err == persistence.ErrTaskNotFound {
|
||||
logger.Debug().Msg("non-existent task requested")
|
||||
return sendAPIError(e, http.StatusNotFound, "no such task")
|
||||
}
|
||||
if err != nil {
|
||||
logger.Warn().Err(err).Msg("error fetching task")
|
||||
return sendAPIError(e, http.StatusInternalServerError, "error fetching task")
|
||||
}
|
||||
|
||||
apiTask := taskDBtoAPI(task)
|
||||
return e.JSON(http.StatusOK, apiTask)
|
||||
}
|
||||
|
||||
func taskDBtoSummary(task *persistence.Task) api.TaskSummary {
|
||||
return api.TaskSummary{
|
||||
Id: task.UUID,
|
||||
|
81
internal/manager/api_impl/jobs_query_test.go
Normal file
81
internal/manager/api_impl/jobs_query_test.go
Normal file
@ -0,0 +1,81 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
package api_impl
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"git.blender.org/flamenco/internal/manager/persistence"
|
||||
"git.blender.org/flamenco/pkg/api"
|
||||
"github.com/golang/mock/gomock"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func TestFetchTask(t *testing.T) {
|
||||
mockCtrl := gomock.NewController(t)
|
||||
defer mockCtrl.Finish()
|
||||
|
||||
mf := newMockedFlamenco(mockCtrl)
|
||||
|
||||
taskUUID := "19b62e32-564f-43a3-84fb-06e80ad36f16"
|
||||
workerUUID := "b5725bb3-d540-4070-a2b6-7b4b26925f94"
|
||||
jobUUID := "8b179118-0189-478a-b463-73798409898c"
|
||||
|
||||
dbTask := persistence.Task{
|
||||
Model: gorm.Model{
|
||||
ID: 327,
|
||||
CreatedAt: time.Now().Add(-30 * time.Second),
|
||||
UpdatedAt: time.Now(),
|
||||
},
|
||||
UUID: taskUUID,
|
||||
Name: "симпатичная задача",
|
||||
Type: "misc",
|
||||
JobID: 0,
|
||||
Job: &persistence.Job{UUID: jobUUID},
|
||||
Priority: 47,
|
||||
Status: api.TaskStatusQueued,
|
||||
WorkerID: new(uint),
|
||||
Worker: &persistence.Worker{UUID: workerUUID, Name: "Radnik", Address: "Slapić"},
|
||||
Dependencies: []*persistence.Task{},
|
||||
Activity: "used in unit test",
|
||||
|
||||
Commands: []persistence.Command{
|
||||
{Name: "move-directory",
|
||||
Parameters: map[string]interface{}{
|
||||
"dest": "/render/_flamenco/tests/renders/2022-04-29 Weekly/2022-04-29_140531",
|
||||
"src": "/render/_flamenco/tests/renders/2022-04-29 Weekly/2022-04-29_140531__intermediate-2022-04-29_140531",
|
||||
}},
|
||||
},
|
||||
}
|
||||
|
||||
expectAPITask := api.Task{
|
||||
Activity: "used in unit test",
|
||||
Created: dbTask.CreatedAt,
|
||||
Id: taskUUID,
|
||||
JobId: jobUUID,
|
||||
Name: "симпатичная задача",
|
||||
Priority: 47,
|
||||
Status: api.TaskStatusQueued,
|
||||
TaskType: "misc",
|
||||
Updated: dbTask.UpdatedAt,
|
||||
Worker: &api.TaskWorker{Id: workerUUID, Name: "Radnik", Address: "Slapić"},
|
||||
|
||||
Commands: []api.Command{
|
||||
{Name: "move-directory",
|
||||
Parameters: map[string]interface{}{
|
||||
"dest": "/render/_flamenco/tests/renders/2022-04-29 Weekly/2022-04-29_140531",
|
||||
"src": "/render/_flamenco/tests/renders/2022-04-29 Weekly/2022-04-29_140531__intermediate-2022-04-29_140531",
|
||||
}},
|
||||
},
|
||||
}
|
||||
|
||||
mf.persistence.EXPECT().FetchTask(gomock.Any(), taskUUID).Return(&dbTask, nil)
|
||||
|
||||
echoCtx := mf.prepareMockedRequest(nil)
|
||||
err := mf.flamenco.FetchTask(echoCtx, taskUUID)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assertResponseJSON(t, echoCtx, http.StatusOK, expectAPITask)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user