From 54933d0262172b0c204d12e1382feba224ce6526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Tue, 11 Jan 2022 18:38:14 +0100 Subject: [PATCH] API: add Fetch Job endpoint This is made with plain sqlite. It's probably a good idea to move to something like GORM instead. --- internal/manager/api_impl/api_impl.go | 1 + internal/manager/api_impl/jobs.go | 19 +++++ internal/manager/persistence/db.go | 59 ++++++++++++++ pkg/api/flamenco-manager.yaml | 36 ++++++++- pkg/api/openapi_client.gen.go | 111 ++++++++++++++++++++++++++ pkg/api/openapi_server.gen.go | 24 ++++++ pkg/api/openapi_spec.gen.go | 82 +++++++++---------- pkg/api/openapi_types.gen.go | 20 ++++- 8 files changed, 309 insertions(+), 43 deletions(-) diff --git a/internal/manager/api_impl/api_impl.go b/internal/manager/api_impl/api_impl.go index fc20f2ff..ee0f8bd6 100644 --- a/internal/manager/api_impl/api_impl.go +++ b/internal/manager/api_impl/api_impl.go @@ -37,6 +37,7 @@ type Flamenco struct { type JobPersistenceService interface { // StoreJob stores a job in the persistence layer. StoreJob(ctx context.Context, authoredJob job_compilers.AuthoredJob) error + FetchJob(ctx context.Context, jobID string) (*api.Job, error) } type JobCompiler interface { diff --git a/internal/manager/api_impl/jobs.go b/internal/manager/api_impl/jobs.go index af5f1b07..ae9d783a 100644 --- a/internal/manager/api_impl/jobs.go +++ b/internal/manager/api_impl/jobs.go @@ -75,3 +75,22 @@ func (f *Flamenco) SubmitJob(e echo.Context) error { return e.JSON(http.StatusOK, authoredJob) } + +func (f *Flamenco) FetchJob(e echo.Context, jobId string) error { + // TODO: move this into some middleware. + logger := log.With(). + Str("ip", e.RealIP()). + Str("job_id", jobId). + Logger() + + logger.Debug().Msg("fetching job") + + ctx := e.Request().Context() + job, err := f.persist.FetchJob(ctx, jobId) + if err != nil { + logger.Warn().Err(err).Msg("cannot fetch job") + return sendAPIError(e, http.StatusNotFound, fmt.Sprintf("job %+v not found", jobId)) + } + + return e.JSON(http.StatusOK, job) +} diff --git a/internal/manager/persistence/db.go b/internal/manager/persistence/db.go index bd5de3d2..885044c3 100644 --- a/internal/manager/persistence/db.go +++ b/internal/manager/persistence/db.go @@ -30,6 +30,7 @@ import ( _ "modernc.org/sqlite" "gitlab.com/blender/flamenco-goja-test/internal/manager/job_compilers" + "gitlab.com/blender/flamenco-goja-test/pkg/api" ) // TODO : have this configurable from the CLI. @@ -102,3 +103,61 @@ func (db *DB) StoreJob(ctx context.Context, authoredJob job_compilers.AuthoredJo return tx.Commit() } + +func (db *DB) FetchJob(ctx context.Context, jobID string) (*api.Job, error) { + job := api.Job{} + + err := db.sqldb. + QueryRowContext(ctx, `SELECT * FROM jobs j where j.uuid=?`, jobID). + Scan(&job.Id, &job.Name, &job.Type, &job.Priority, &job.Created, &job.Updated) + if err != nil { + return nil, err + } + + // TODO: make settings and metadata an explicit type. + settings := make(map[string]interface{}) + metadata := make(map[string]interface{}) + + rows, err := db.sqldb.QueryContext(ctx, "SELECT key, value FROM job_settings WHERE job_id=?", jobID) + if err != nil { + return nil, err + } + defer rows.Close() + for rows.Next() { + var key, value string + if err := rows.Scan(&key, &value); err != nil { + return nil, err + } + settings[key] = value + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + + rows, err = db.sqldb.QueryContext(ctx, "SELECT key, value FROM job_metadata WHERE job_id=?", jobID) + if err != nil { + return nil, err + } + defer rows.Close() + for rows.Next() { + var key, value string + if err := rows.Scan(&key, &value); err != nil { + return nil, err + } + metadata[key] = value + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + + job.Settings = &settings + job.Metadata = &metadata + + return &job, nil +} diff --git a/pkg/api/flamenco-manager.yaml b/pkg/api/flamenco-manager.yaml index 0c007696..4d62a01d 100644 --- a/pkg/api/flamenco-manager.yaml +++ b/pkg/api/flamenco-manager.yaml @@ -79,7 +79,6 @@ paths: operationId: submitJob summary: Submit a new job for Flamenco Manager to execute. tags: [jobs] - # TODO: Security! requestBody: description: Job to submit required: true @@ -99,6 +98,24 @@ paths: application/json: schema: {$ref: "#/components/schemas/Error"} + /api/jobs/{job_id}: + summary: Job info and management + get: + operationId: fetchJob + summary: Fetch info about the job. + tags: [jobs] + parameters: + - name: job_id + in: path + required: true + schema: {type: string} + responses: + "200": + description: Job info + content: + application/json: + schema: {$ref: "#/components/schemas/Job"} + tags: - name: jobs description: Blablabla for users to get job metadata balbla @@ -242,7 +259,6 @@ components: type: object description: Job definition submitted to Flamenco. properties: - "id": {type: string} "name": {type: string} "type": {type: string} "status": {$ref: "#/components/schemas/JobStatus"} @@ -271,6 +287,22 @@ components: "user.name": "Sybren Stüvel" "user.email": "sybren@blender.org" project: "Sprite Fright" + Job: + allOf: + - $ref: '#/components/schemas/SubmittedJob' + - properties: + id: + type: string + description: UUID of the Job + created: + type: string + format: date-time + description: Creation timestamp + updated: + type: string + format: date-time + description: Creation timestamp + required: [id, created, updated] Error: diff --git a/pkg/api/openapi_client.gen.go b/pkg/api/openapi_client.gen.go index 646b936d..3fbf3ebf 100644 --- a/pkg/api/openapi_client.gen.go +++ b/pkg/api/openapi_client.gen.go @@ -13,6 +13,8 @@ import ( "net/http" "net/url" "strings" + + "github.com/deepmap/oapi-codegen/pkg/runtime" ) // RequestEditorFn is the function signature for the RequestEditor callback function @@ -96,6 +98,9 @@ type ClientInterface interface { // GetJobTypes request GetJobTypes(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error) + // FetchJob request + FetchJob(ctx context.Context, jobId string, reqEditors ...RequestEditorFn) (*http.Response, error) + // RegisterWorker request with any body RegisterWorkerWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) @@ -141,6 +146,18 @@ func (c *Client) GetJobTypes(ctx context.Context, reqEditors ...RequestEditorFn) return c.Client.Do(req) } +func (c *Client) FetchJob(ctx context.Context, jobId string, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewFetchJobRequest(c.Server, jobId) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if err := c.applyEditors(ctx, req, reqEditors); err != nil { + return nil, err + } + return c.Client.Do(req) +} + func (c *Client) RegisterWorkerWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { req, err := NewRegisterWorkerRequestWithBody(c.Server, contentType, body) if err != nil { @@ -244,6 +261,40 @@ func NewGetJobTypesRequest(server string) (*http.Request, error) { return req, nil } +// NewFetchJobRequest generates requests for FetchJob +func NewFetchJobRequest(server string, jobId string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParamWithLocation("simple", false, "job_id", runtime.ParamLocationPath, jobId) + if err != nil { + return nil, err + } + + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } + + operationPath := fmt.Sprintf("/api/jobs/%s", pathParam0) + if operationPath[0] == '/' { + operationPath = "." + operationPath + } + + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryURL.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + // NewRegisterWorkerRequest calls the generic RegisterWorker builder with application/json body func NewRegisterWorkerRequest(server string, body RegisterWorkerJSONRequestBody) (*http.Request, error) { var bodyReader io.Reader @@ -362,6 +413,9 @@ type ClientWithResponsesInterface interface { // GetJobTypes request GetJobTypesWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*GetJobTypesResponse, error) + // FetchJob request + FetchJobWithResponse(ctx context.Context, jobId string, reqEditors ...RequestEditorFn) (*FetchJobResponse, error) + // RegisterWorker request with any body RegisterWorkerWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*RegisterWorkerResponse, error) @@ -416,6 +470,28 @@ func (r GetJobTypesResponse) StatusCode() int { return 0 } +type FetchJobResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Job +} + +// Status returns HTTPResponse.Status +func (r FetchJobResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r FetchJobResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + type RegisterWorkerResponse struct { Body []byte HTTPResponse *http.Response @@ -488,6 +564,15 @@ func (c *ClientWithResponses) GetJobTypesWithResponse(ctx context.Context, reqEd return ParseGetJobTypesResponse(rsp) } +// FetchJobWithResponse request returning *FetchJobResponse +func (c *ClientWithResponses) FetchJobWithResponse(ctx context.Context, jobId string, reqEditors ...RequestEditorFn) (*FetchJobResponse, error) { + rsp, err := c.FetchJob(ctx, jobId, reqEditors...) + if err != nil { + return nil, err + } + return ParseFetchJobResponse(rsp) +} + // RegisterWorkerWithBodyWithResponse request with arbitrary body returning *RegisterWorkerResponse func (c *ClientWithResponses) RegisterWorkerWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*RegisterWorkerResponse, error) { rsp, err := c.RegisterWorkerWithBody(ctx, contentType, body, reqEditors...) @@ -573,6 +658,32 @@ func ParseGetJobTypesResponse(rsp *http.Response) (*GetJobTypesResponse, error) return response, nil } +// ParseFetchJobResponse parses an HTTP response from a FetchJobWithResponse call +func ParseFetchJobResponse(rsp *http.Response) (*FetchJobResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer func() { _ = rsp.Body.Close() }() + if err != nil { + return nil, err + } + + response := &FetchJobResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Job + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + // ParseRegisterWorkerResponse parses an HTTP response from a RegisterWorkerWithResponse call func ParseRegisterWorkerResponse(rsp *http.Response) (*RegisterWorkerResponse, error) { bodyBytes, err := ioutil.ReadAll(rsp.Body) diff --git a/pkg/api/openapi_server.gen.go b/pkg/api/openapi_server.gen.go index e7bcb5da..02c123e4 100644 --- a/pkg/api/openapi_server.gen.go +++ b/pkg/api/openapi_server.gen.go @@ -4,6 +4,10 @@ package api import ( + "fmt" + "net/http" + + "github.com/deepmap/oapi-codegen/pkg/runtime" "github.com/labstack/echo/v4" ) @@ -15,6 +19,9 @@ type ServerInterface interface { // Get list of job types and their parameters. // (GET /api/jobs/types) GetJobTypes(ctx echo.Context) error + // Fetch info about the job. + // (GET /api/jobs/{job_id}) + FetchJob(ctx echo.Context, jobId string) error // Register a new worker // (POST /api/worker/register-worker) RegisterWorker(ctx echo.Context) error @@ -46,6 +53,22 @@ func (w *ServerInterfaceWrapper) GetJobTypes(ctx echo.Context) error { return err } +// FetchJob converts echo context to params. +func (w *ServerInterfaceWrapper) FetchJob(ctx echo.Context) error { + var err error + // ------------- Path parameter "job_id" ------------- + var jobId string + + err = runtime.BindStyledParameterWithLocation("simple", false, "job_id", runtime.ParamLocationPath, ctx.Param("job_id"), &jobId) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter job_id: %s", err)) + } + + // Invoke the callback with all the unmarshalled arguments + err = w.Handler.FetchJob(ctx, jobId) + return err +} + // RegisterWorker converts echo context to params. func (w *ServerInterfaceWrapper) RegisterWorker(ctx echo.Context) error { var err error @@ -96,6 +119,7 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL router.POST(baseURL+"/api/jobs", wrapper.SubmitJob) router.GET(baseURL+"/api/jobs/types", wrapper.GetJobTypes) + router.GET(baseURL+"/api/jobs/:job_id", wrapper.FetchJob) router.POST(baseURL+"/api/worker/register-worker", wrapper.RegisterWorker) router.POST(baseURL+"/api/worker/task", wrapper.ScheduleTask) diff --git a/pkg/api/openapi_spec.gen.go b/pkg/api/openapi_spec.gen.go index f7801054..18eb43d0 100644 --- a/pkg/api/openapi_spec.gen.go +++ b/pkg/api/openapi_spec.gen.go @@ -18,46 +18,48 @@ import ( // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "HgAA", + "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", + "e3e++28AAAD//9hZQfR1IQAA", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/pkg/api/openapi_types.gen.go b/pkg/api/openapi_types.gen.go index 35e30607..c47e1da4 100644 --- a/pkg/api/openapi_types.gen.go +++ b/pkg/api/openapi_types.gen.go @@ -3,6 +3,10 @@ // Code generated by github.com/deepmap/oapi-codegen version v1.9.0 DO NOT EDIT. package api +import ( + "time" +) + const ( Worker_authScopes = "worker_auth.Scopes" ) @@ -154,6 +158,21 @@ type Error struct { Message string `json:"message"` } +// Job defines model for Job. +type Job struct { + // Embedded struct due to allOf(#/components/schemas/SubmittedJob) + SubmittedJob `yaml:",inline"` + // Embedded fields due to inline allOf schema + // Creation timestamp + Created time.Time `json:"created"` + + // UUID of the Job + Id string `json:"id"` + + // Creation timestamp + Updated time.Time `json:"updated"` +} + // JobStatus defines model for JobStatus. type JobStatus string @@ -176,7 +195,6 @@ type SecurityError struct { // Job definition submitted to Flamenco. type SubmittedJob struct { - Id *string `json:"id,omitempty"` Metadata *map[string]interface{} `json:"metadata,omitempty"` Name string `json:"name"` Priority int `json:"priority"`