From d0b677ffe30d23aeac7e627332bd3b8d5300b5b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Tue, 8 Mar 2022 13:52:43 +0100 Subject: [PATCH] Add API endpoint `/api/version` to get the Flamenco Manager version This will be used in the auto-discovery, to check that a discovered URL can actually be reached & points to a Flamenco Manager. --- internal/manager/api_impl/api_impl.go | 9 ++ internal/worker/mocks/client.gen.go | 20 +++++ pkg/api/flamenco-manager.yaml | 20 +++++ pkg/api/openapi_client.gen.go | 102 ++++++++++++++++++++++ pkg/api/openapi_server.gen.go | 13 +++ pkg/api/openapi_spec.gen.go | 120 +++++++++++++------------- pkg/api/openapi_types.gen.go | 14 ++- 7 files changed, 235 insertions(+), 63 deletions(-) diff --git a/internal/manager/api_impl/api_impl.go b/internal/manager/api_impl/api_impl.go index 9c9796ee..1108ac39 100644 --- a/internal/manager/api_impl/api_impl.go +++ b/internal/manager/api_impl/api_impl.go @@ -6,7 +6,9 @@ package api_impl import ( "context" "fmt" + "net/http" + "git.blender.org/flamenco/internal/appinfo" "git.blender.org/flamenco/internal/manager/job_compilers" "git.blender.org/flamenco/internal/manager/persistence" "git.blender.org/flamenco/internal/manager/task_state_machine" @@ -106,3 +108,10 @@ func sendAPIError(e echo.Context, code int, message string, args ...interface{}) } return e.JSON(code, petErr) } + +func (f *Flamenco) GetVersion(e echo.Context) error { + return e.JSON(http.StatusOK, api.FlamencoVersion{ + Version: appinfo.ApplicationVersion, + Name: appinfo.ApplicationName, + }) +} diff --git a/internal/worker/mocks/client.gen.go b/internal/worker/mocks/client.gen.go index b940cc68..93d052c7 100644 --- a/internal/worker/mocks/client.gen.go +++ b/internal/worker/mocks/client.gen.go @@ -76,6 +76,26 @@ func (mr *MockFlamencoClientMockRecorder) GetJobTypesWithResponse(arg0 interface return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetJobTypesWithResponse", reflect.TypeOf((*MockFlamencoClient)(nil).GetJobTypesWithResponse), varargs...) } +// GetVersionWithResponse mocks base method. +func (m *MockFlamencoClient) GetVersionWithResponse(arg0 context.Context, arg1 ...api.RequestEditorFn) (*api.GetVersionResponse, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0} + for _, a := range arg1 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetVersionWithResponse", varargs...) + ret0, _ := ret[0].(*api.GetVersionResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetVersionWithResponse indicates an expected call of GetVersionWithResponse. +func (mr *MockFlamencoClientMockRecorder) GetVersionWithResponse(arg0 interface{}, arg1 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0}, arg1...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetVersionWithResponse", reflect.TypeOf((*MockFlamencoClient)(nil).GetVersionWithResponse), varargs...) +} + // RegisterWorkerWithBodyWithResponse mocks base method. func (m *MockFlamencoClient) RegisterWorkerWithBodyWithResponse(arg0 context.Context, arg1 string, arg2 io.Reader, arg3 ...api.RequestEditorFn) (*api.RegisterWorkerResponse, error) { m.ctrl.T.Helper() diff --git a/pkg/api/flamenco-manager.yaml b/pkg/api/flamenco-manager.yaml index 2bfb7d10..a7c56f21 100644 --- a/pkg/api/flamenco-manager.yaml +++ b/pkg/api/flamenco-manager.yaml @@ -12,6 +12,19 @@ info: servers: - url: / paths: + /api/version: + summary: Workers can use this to check this is actually a Flamenco server. + get: + summary: Get the Flamenco version of this Manager + operationId: getVersion + responses: + "200": + description: normal response + content: + application/json: + schema: + $ref: "#/components/schemas/FlamencoVersion" + /api/worker/register-worker: summary: Registration of new workers post: @@ -254,6 +267,13 @@ tags: components: schemas: + FlamencoVersion: + type: object + required: [version, name] + properties: + version: { type: string } + name: { type: string } + WorkerRegistration: type: object required: [secret, platform, supported_task_types, nickname] diff --git a/pkg/api/openapi_client.gen.go b/pkg/api/openapi_client.gen.go index 8ad0216e..8bfa00da 100644 --- a/pkg/api/openapi_client.gen.go +++ b/pkg/api/openapi_client.gen.go @@ -101,6 +101,9 @@ type ClientInterface interface { // FetchJob request FetchJob(ctx context.Context, jobId string, reqEditors ...RequestEditorFn) (*http.Response, error) + // GetVersion request + GetVersion(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error) + // RegisterWorker request with any body RegisterWorkerWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) @@ -179,6 +182,18 @@ func (c *Client) FetchJob(ctx context.Context, jobId string, reqEditors ...Reque return c.Client.Do(req) } +func (c *Client) GetVersion(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetVersionRequest(c.Server) + 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 { @@ -412,6 +427,33 @@ func NewFetchJobRequest(server string, jobId string) (*http.Request, error) { return req, nil } +// NewGetVersionRequest generates requests for GetVersion +func NewGetVersionRequest(server string) (*http.Request, error) { + var err error + + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } + + operationPath := fmt.Sprintf("/api/version") + 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 @@ -714,6 +756,9 @@ type ClientWithResponsesInterface interface { // FetchJob request FetchJobWithResponse(ctx context.Context, jobId string, reqEditors ...RequestEditorFn) (*FetchJobResponse, error) + // GetVersion request + GetVersionWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*GetVersionResponse, error) + // RegisterWorker request with any body RegisterWorkerWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*RegisterWorkerResponse, error) @@ -811,6 +856,28 @@ func (r FetchJobResponse) StatusCode() int { return 0 } +type GetVersionResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *FlamencoVersion +} + +// Status returns HTTPResponse.Status +func (r GetVersionResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r GetVersionResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + type RegisterWorkerResponse struct { Body []byte HTTPResponse *http.Response @@ -1005,6 +1072,15 @@ func (c *ClientWithResponses) FetchJobWithResponse(ctx context.Context, jobId st return ParseFetchJobResponse(rsp) } +// GetVersionWithResponse request returning *GetVersionResponse +func (c *ClientWithResponses) GetVersionWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*GetVersionResponse, error) { + rsp, err := c.GetVersion(ctx, reqEditors...) + if err != nil { + return nil, err + } + return ParseGetVersionResponse(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...) @@ -1185,6 +1261,32 @@ func ParseFetchJobResponse(rsp *http.Response) (*FetchJobResponse, error) { return response, nil } +// ParseGetVersionResponse parses an HTTP response from a GetVersionWithResponse call +func ParseGetVersionResponse(rsp *http.Response) (*GetVersionResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer func() { _ = rsp.Body.Close() }() + if err != nil { + return nil, err + } + + response := &GetVersionResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest FlamencoVersion + 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 181ff2ec..bbd8e5fc 100644 --- a/pkg/api/openapi_server.gen.go +++ b/pkg/api/openapi_server.gen.go @@ -22,6 +22,9 @@ type ServerInterface interface { // Fetch info about the job. // (GET /api/jobs/{job_id}) FetchJob(ctx echo.Context, jobId string) error + // Get the Flamenco version of this Manager + // (GET /api/version) + GetVersion(ctx echo.Context) error // Register a new worker // (POST /api/worker/register-worker) RegisterWorker(ctx echo.Context) error @@ -84,6 +87,15 @@ func (w *ServerInterfaceWrapper) FetchJob(ctx echo.Context) error { return err } +// GetVersion converts echo context to params. +func (w *ServerInterfaceWrapper) GetVersion(ctx echo.Context) error { + var err error + + // Invoke the callback with all the unmarshalled arguments + err = w.Handler.GetVersion(ctx) + return err +} + // RegisterWorker converts echo context to params. func (w *ServerInterfaceWrapper) RegisterWorker(ctx echo.Context) error { var err error @@ -197,6 +209,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.GET(baseURL+"/api/version", wrapper.GetVersion) router.POST(baseURL+"/api/worker/register-worker", wrapper.RegisterWorker) router.POST(baseURL+"/api/worker/sign-off", wrapper.SignOff) router.POST(baseURL+"/api/worker/sign-on", wrapper.SignOn) diff --git a/pkg/api/openapi_spec.gen.go b/pkg/api/openapi_spec.gen.go index 32ba9fe1..dd2edcdc 100644 --- a/pkg/api/openapi_spec.gen.go +++ b/pkg/api/openapi_spec.gen.go @@ -18,62 +18,64 @@ import ( // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", + "DgAA///4VeLtlTYAAA==", } // GetSwagger returns the content of the embedded swagger specification file @@ -81,16 +83,16 @@ var swaggerSpec = []string{ func decodeSpec() ([]byte, error) { zipped, err := base64.StdEncoding.DecodeString(strings.Join(swaggerSpec, "")) if err != nil { - return nil, fmt.Errorf("base64 decoding spec: %s", err) + return nil, fmt.Errorf("error base64 decoding spec: %s", err) } zr, err := gzip.NewReader(bytes.NewReader(zipped)) if err != nil { - return nil, fmt.Errorf("decompressing spec: %s", err) + return nil, fmt.Errorf("error decompressing spec: %s", err) } var buf bytes.Buffer _, err = buf.ReadFrom(zr) if err != nil { - return nil, fmt.Errorf("decompressing spec: %s", err) + return nil, fmt.Errorf("error decompressing spec: %s", err) } return buf.Bytes(), nil diff --git a/pkg/api/openapi_types.gen.go b/pkg/api/openapi_types.gen.go index 3b029f7a..bb7f0c8d 100644 --- a/pkg/api/openapi_types.gen.go +++ b/pkg/api/openapi_types.gen.go @@ -172,6 +172,12 @@ type Error struct { Message string `json:"message"` } +// FlamencoVersion defines model for FlamencoVersion. +type FlamencoVersion struct { + Name string `json:"name"` + Version string `json:"version"` +} + // Job defines model for Job. type Job struct { // Embedded struct due to allOf(#/components/schemas/SubmittedJob) @@ -330,7 +336,7 @@ func (a *JobMetadata) UnmarshalJSON(b []byte) error { var fieldVal string err := json.Unmarshal(fieldBuf, &fieldVal) if err != nil { - return fmt.Errorf("unmarshaling field %s: %w", fieldName, err) + return fmt.Errorf("error unmarshaling field %s: %w", fieldName, err) } a.AdditionalProperties[fieldName] = fieldVal } @@ -346,7 +352,7 @@ func (a JobMetadata) MarshalJSON() ([]byte, error) { for fieldName, field := range a.AdditionalProperties { object[fieldName], err = json.Marshal(field) if err != nil { - return nil, fmt.Errorf("marshaling '%s': %w", fieldName, err) + return nil, fmt.Errorf("error marshaling '%s': %w", fieldName, err) } } return json.Marshal(object) @@ -383,7 +389,7 @@ func (a *JobSettings) UnmarshalJSON(b []byte) error { var fieldVal interface{} err := json.Unmarshal(fieldBuf, &fieldVal) if err != nil { - return fmt.Errorf("unmarshaling field %s: %w", fieldName, err) + return fmt.Errorf("error unmarshaling field %s: %w", fieldName, err) } a.AdditionalProperties[fieldName] = fieldVal } @@ -399,7 +405,7 @@ func (a JobSettings) MarshalJSON() ([]byte, error) { for fieldName, field := range a.AdditionalProperties { object[fieldName], err = json.Marshal(field) if err != nil { - return nil, fmt.Errorf("marshaling '%s': %w", fieldName, err) + return nil, fmt.Errorf("error marshaling '%s': %w", fieldName, err) } } return json.Marshal(object)