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.
This commit is contained in:
parent
42407865eb
commit
d0b677ffe3
@ -6,7 +6,9 @@ package api_impl
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"git.blender.org/flamenco/internal/appinfo"
|
||||||
"git.blender.org/flamenco/internal/manager/job_compilers"
|
"git.blender.org/flamenco/internal/manager/job_compilers"
|
||||||
"git.blender.org/flamenco/internal/manager/persistence"
|
"git.blender.org/flamenco/internal/manager/persistence"
|
||||||
"git.blender.org/flamenco/internal/manager/task_state_machine"
|
"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)
|
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,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -76,6 +76,26 @@ func (mr *MockFlamencoClientMockRecorder) GetJobTypesWithResponse(arg0 interface
|
|||||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetJobTypesWithResponse", reflect.TypeOf((*MockFlamencoClient)(nil).GetJobTypesWithResponse), varargs...)
|
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.
|
// RegisterWorkerWithBodyWithResponse mocks base method.
|
||||||
func (m *MockFlamencoClient) RegisterWorkerWithBodyWithResponse(arg0 context.Context, arg1 string, arg2 io.Reader, arg3 ...api.RequestEditorFn) (*api.RegisterWorkerResponse, error) {
|
func (m *MockFlamencoClient) RegisterWorkerWithBodyWithResponse(arg0 context.Context, arg1 string, arg2 io.Reader, arg3 ...api.RequestEditorFn) (*api.RegisterWorkerResponse, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
|
@ -12,6 +12,19 @@ info:
|
|||||||
servers:
|
servers:
|
||||||
- url: /
|
- url: /
|
||||||
paths:
|
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:
|
/api/worker/register-worker:
|
||||||
summary: Registration of new workers
|
summary: Registration of new workers
|
||||||
post:
|
post:
|
||||||
@ -254,6 +267,13 @@ tags:
|
|||||||
|
|
||||||
components:
|
components:
|
||||||
schemas:
|
schemas:
|
||||||
|
FlamencoVersion:
|
||||||
|
type: object
|
||||||
|
required: [version, name]
|
||||||
|
properties:
|
||||||
|
version: { type: string }
|
||||||
|
name: { type: string }
|
||||||
|
|
||||||
WorkerRegistration:
|
WorkerRegistration:
|
||||||
type: object
|
type: object
|
||||||
required: [secret, platform, supported_task_types, nickname]
|
required: [secret, platform, supported_task_types, nickname]
|
||||||
|
@ -101,6 +101,9 @@ type ClientInterface interface {
|
|||||||
// FetchJob request
|
// FetchJob request
|
||||||
FetchJob(ctx context.Context, jobId string, reqEditors ...RequestEditorFn) (*http.Response, error)
|
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
|
// RegisterWorker request with any body
|
||||||
RegisterWorkerWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error)
|
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)
|
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) {
|
func (c *Client) RegisterWorkerWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) {
|
||||||
req, err := NewRegisterWorkerRequestWithBody(c.Server, contentType, body)
|
req, err := NewRegisterWorkerRequestWithBody(c.Server, contentType, body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -412,6 +427,33 @@ func NewFetchJobRequest(server string, jobId string) (*http.Request, error) {
|
|||||||
return req, nil
|
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
|
// NewRegisterWorkerRequest calls the generic RegisterWorker builder with application/json body
|
||||||
func NewRegisterWorkerRequest(server string, body RegisterWorkerJSONRequestBody) (*http.Request, error) {
|
func NewRegisterWorkerRequest(server string, body RegisterWorkerJSONRequestBody) (*http.Request, error) {
|
||||||
var bodyReader io.Reader
|
var bodyReader io.Reader
|
||||||
@ -714,6 +756,9 @@ type ClientWithResponsesInterface interface {
|
|||||||
// FetchJob request
|
// FetchJob request
|
||||||
FetchJobWithResponse(ctx context.Context, jobId string, reqEditors ...RequestEditorFn) (*FetchJobResponse, error)
|
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
|
// RegisterWorker request with any body
|
||||||
RegisterWorkerWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*RegisterWorkerResponse, error)
|
RegisterWorkerWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*RegisterWorkerResponse, error)
|
||||||
|
|
||||||
@ -811,6 +856,28 @@ func (r FetchJobResponse) StatusCode() int {
|
|||||||
return 0
|
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 {
|
type RegisterWorkerResponse struct {
|
||||||
Body []byte
|
Body []byte
|
||||||
HTTPResponse *http.Response
|
HTTPResponse *http.Response
|
||||||
@ -1005,6 +1072,15 @@ func (c *ClientWithResponses) FetchJobWithResponse(ctx context.Context, jobId st
|
|||||||
return ParseFetchJobResponse(rsp)
|
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
|
// RegisterWorkerWithBodyWithResponse request with arbitrary body returning *RegisterWorkerResponse
|
||||||
func (c *ClientWithResponses) RegisterWorkerWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*RegisterWorkerResponse, error) {
|
func (c *ClientWithResponses) RegisterWorkerWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*RegisterWorkerResponse, error) {
|
||||||
rsp, err := c.RegisterWorkerWithBody(ctx, contentType, body, reqEditors...)
|
rsp, err := c.RegisterWorkerWithBody(ctx, contentType, body, reqEditors...)
|
||||||
@ -1185,6 +1261,32 @@ func ParseFetchJobResponse(rsp *http.Response) (*FetchJobResponse, error) {
|
|||||||
return response, nil
|
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
|
// ParseRegisterWorkerResponse parses an HTTP response from a RegisterWorkerWithResponse call
|
||||||
func ParseRegisterWorkerResponse(rsp *http.Response) (*RegisterWorkerResponse, error) {
|
func ParseRegisterWorkerResponse(rsp *http.Response) (*RegisterWorkerResponse, error) {
|
||||||
bodyBytes, err := ioutil.ReadAll(rsp.Body)
|
bodyBytes, err := ioutil.ReadAll(rsp.Body)
|
||||||
|
@ -22,6 +22,9 @@ type ServerInterface interface {
|
|||||||
// Fetch info about the job.
|
// Fetch info about the job.
|
||||||
// (GET /api/jobs/{job_id})
|
// (GET /api/jobs/{job_id})
|
||||||
FetchJob(ctx echo.Context, jobId string) error
|
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
|
// Register a new worker
|
||||||
// (POST /api/worker/register-worker)
|
// (POST /api/worker/register-worker)
|
||||||
RegisterWorker(ctx echo.Context) error
|
RegisterWorker(ctx echo.Context) error
|
||||||
@ -84,6 +87,15 @@ func (w *ServerInterfaceWrapper) FetchJob(ctx echo.Context) error {
|
|||||||
return err
|
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.
|
// RegisterWorker converts echo context to params.
|
||||||
func (w *ServerInterfaceWrapper) RegisterWorker(ctx echo.Context) error {
|
func (w *ServerInterfaceWrapper) RegisterWorker(ctx echo.Context) error {
|
||||||
var err error
|
var err error
|
||||||
@ -197,6 +209,7 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
|
|||||||
router.POST(baseURL+"/api/jobs", wrapper.SubmitJob)
|
router.POST(baseURL+"/api/jobs", wrapper.SubmitJob)
|
||||||
router.GET(baseURL+"/api/jobs/types", wrapper.GetJobTypes)
|
router.GET(baseURL+"/api/jobs/types", wrapper.GetJobTypes)
|
||||||
router.GET(baseURL+"/api/jobs/:job_id", wrapper.FetchJob)
|
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/register-worker", wrapper.RegisterWorker)
|
||||||
router.POST(baseURL+"/api/worker/sign-off", wrapper.SignOff)
|
router.POST(baseURL+"/api/worker/sign-off", wrapper.SignOff)
|
||||||
router.POST(baseURL+"/api/worker/sign-on", wrapper.SignOn)
|
router.POST(baseURL+"/api/worker/sign-on", wrapper.SignOn)
|
||||||
|
@ -18,62 +18,64 @@ import (
|
|||||||
// Base64 encoded, gzipped, json marshaled Swagger object
|
// Base64 encoded, gzipped, json marshaled Swagger object
|
||||||
var swaggerSpec = []string{
|
var swaggerSpec = []string{
|
||||||
|
|
||||||
"H4sIAAAAAAAC/9xa627bRvZ/lQH7B9riT0lOnP8fWH3aNGlSB7kYlYN+SAx5SB6JYw9n2JmhFG1goA+x",
|
"H4sIAAAAAAAC/9xb7W4bN9a+FWL6Am3xjiQnzvsCq1+bJk3qIB9G5bQ/EkOmZo40tDnklORI0QYGehF7",
|
||||||
"b7JbYD9sP+0LuG+0OHPhRaQsu7Gz7RZFQIszZ871dy6cj1Eqi1IKEEZH04+RTnMoqH18rDVbCshOqL7A",
|
"J7sF9sf2196Ae0eLw4/5kCjLbu1su0EQjGbIw/N9Dh8yH5NMlpUUIIxOxh8TnRVQUvv4WGu2EJCfUH2B",
|
||||||
"vzPQqWKlYVJE085bwjShxOAT1YQZ/FtBCmwFGUk2xORAfpDqAtQ4iqNSyRKUYWBPSWVRUJHZZ2agsA//",
|
"v3PQmWKVYVIk495XwjShxOAT1YQZ/K0gA7aEnMzWxBRAvpfqAtQwSZNKyQqUYWBXyWRZUpHbZ2agtA//",
|
||||||
"o2ARTaMvJg1zE8/Z5InbEF3GkdmUEE0jqhTd4N/nMsHd/mdtFBNL//u8VEwqZjatBUwYWIIKK9yvA9sF",
|
"o2CejJPPRi1zI8/Z6ImbkFymiVlXkIwTqhRd4+9zOcPZ/rU2iomFfz+tFJOKmXVnABMGFqDCCPc2Ml3Q",
|
||||||
"LYZfXE9TG2qqveKg/mZuJUpE9cVuRqqKZfhiIVVBTTR1P8TbCy/jSMGPFVOQRdN3YREqx8tS89YSYUtL",
|
"Mv7hepraUFPvFQf1N3EjUSKqL3YzUtcsxw9zqUpqkrF7kW4OvEwTBT/UTEGejN+FQagcL0vDW0eEDS11",
|
||||||
"LZW0uYobe53W58rkHFKDDD5eUcZpwuGFTGZgDLLT85wZE0sORLv3RC4IJS9kQpCaHnCQXLLUPXbp/JCD",
|
"VNLlKm3tddqsK2fnkBlk8PGSMk5nHF7I2QSMQXa2PGfCxIID0e47kXNCyQs5I0hNRxykkCxzj3063xcg",
|
||||||
"IEu2AhETzgpmrJ+tKGcZ/luBJkbibxqIJzImbwTfkEojj2TNTE6c0uzheHbtgj3lbztbBgtacdPn6yQH",
|
"yIItQaSEs5IZ62dLylmO/9agiZH4TgPxRIbkjeBrUmvkkayYKYhTml0c125ccEv5m86Ww5zW3GzzdVIA",
|
||||||
"4l86PojO5Vp4ZkilQZE18p6BAVUwYc/PmQ4qGSN5yJhBLh19f9SCcg1xXw8mB4X0KedyTXDrNk1CFwbX",
|
"8R8dH0QXciU8M6TWoMgKec/BgCqZsOsXTAeVDJE85Mwgl46+X2pOuYZ0Ww+mAIX0KedyRXDqJk1C5wbH",
|
||||||
"5EDOZUJyqkkCIIiukoIZA9mY/CArnhFWlHxDMuDgtnFO4APTjiDVF5ospHKkz2USEyoyjHVZlIzjGmbG",
|
"FEDO5YwUVJMZgCC6npXMGMiH5HtZ85ywsuJrkgMHN41zAh+YdgSpvtBkLpUjfS5nKaEix1iXZcU4jmFm",
|
||||||
"70Xjk4mUHKhAiS5g01fWUQbCsAUD5enWjhGTotKGJEAqwX6snLmYqEUIFusZqvH9W2iOFQVkjBrgG6IA",
|
"+F60PjmTkgMVKNEFrLeVdZSDMGzOQHm6jWOkpKy1ITMgtWA/1M5cTDQiBIttGar1/VtojpUl5Iwa4Gui",
|
||||||
"/ZlQe0wGCyYYbojRVa3geGRs+ZGVcT+VVBmWVpyq2oo71KCrJAT4dbgwEEozv7N2xltTOPHbV0yzbd8y",
|
"AP2ZULtMDnMmGE5I0VWt4LhkavmRtXGvKqoMy2pOVWPFHWrQ9SwE+HV5IRJKEz+zccZbUzjx05dMs03f",
|
||||||
"qrpOQejDXY/ytnh75EIYlRW8SZGvOLsAQsk3HEQGitAsG0nx9ZjMwCC5M2uQMxcILmNQQRA9laC8PsPk",
|
"Mqq+TkHow32P8rZ4e+RCGJUVvEmRLzi7AELJVxxEDorQPB9I8eWQTMAguTNrkDMXCK5iUEEweypBebOG",
|
||||||
"1ODRFc/El9YZ6lgCkdlY0sOK3gJBdD6/6IbANWvstIVfVTLCN84dnDMGm5MnlVIgDN8QiUhDA13r3S2s",
|
"KajBpWuei8+tMzSxBCK3saTjit5Iguh8ftANE9ektdNG/qpnA/zi3ME5Y7A5eVIrBcLwNZGYaWiga727",
|
||||||
"0WNy9t3j2XffPp0/O3r57fz48cl3Zy6PZkxBaqTakJKanPwvOXsfTb6w/72PzggtS1Rp5sQGURUo34Jx",
|
"k2v0kJx983jyzddPp8+OXn49PX588s2Zq6M5U5AZqdakoqYg/0vO3iejz+yf98kZoVWFKs2d2CDqEuWb",
|
||||||
"mOP6KI4ypsKj/dljfk51Dtm8WXk6EDy7nKaPcl4DLelbEesAlmpy9PTYofnGio1O411iTF5LIkAbyFAx",
|
"Mw5THJ+kSc5UeLSvfc4vqC4gn7YjTyPBs8tptrOc10BH+k7EugRLNTl6euyy+dqKjU7jXWJIXksiQBvI",
|
||||||
"VWoqBZp8ZQFWxyRjKR5FFQP9NaEKiK7KUiqzLbpnPsbce/gQheaSmii2vrBXyGHpQj5qznR1DNPkFRV0",
|
"UTF1ZmoFmnxhE6xOSc4yXIoqBvpLQhUQXVeVVGZTdM98irX38CEKzSU1SWp9Ya+QcelCPWrXdH0M0+QV",
|
||||||
"CcohHzM29GmBUD6QvDhNgN+uqPDKvHlBNJR0e/lqKxy8Szj2Wmfuiw3U1kAqfsm0Cc5gvXu33vo6CoXG",
|
"FXQBymU+Zmzo0xJTeaR4cToDfrumwivz5g1RrOhu1auNcPAu4djrrLkvNlBbkVL8kmkTnMF69269beso",
|
||||||
"b5P4pIOIO8RtjhgSMFSUPbH8C6KgVKCRBUKJduWLr4MsEn2AtDKwr9LdXUbWDtR6HdgbNlxry5BE3yol",
|
"NBq/TuKTXkbcIW67REzA0FFuieU/EAWVAo0sEEq0a198H2Qz0QfIagP7Ot3dbWTjQJ3Pgb244TpTYhJ9",
|
||||||
"FRLbrrUz6NSPIWL6xWsBWtPlEL9bDFmazfohbl64spxy/mYRTd9db9tZKEhw12XcE0EBNTBkK3zBpCCG",
|
"rZRUSGyz186h1z+GiNluXkvQmi5i/G4wZGm242PcPOO0BJHJ70Bpq9iPN9XMsp1xPRdhoI+rGBcv3OaA",
|
||||||
"FaANLUpEgiBoRg2M8M1QwcAGyL19e/Q0APwLWznvKbpvWu9jkNblflVmdyzNlnUsp0FnzXk1s6eXp85A",
|
"cv5mnozfXe9hk9AW4azLdEuRCqiBmMfgByYFMawEbWhZYT4K6s6pgQF+ibUtLELu7dujp6HMvLD9+57W",
|
||||||
"r8DQjBpqDZVltuCh/Lij+57EWx2hSphRVG1I4Yn5hKfH5JVUNmRKDh/aaJ9SgfmikFhwWqyoML7IGR0n",
|
"/6a7DkwVzaajrvI7lmbDOpbToLN2vYbZ08tTZ6BXYGhODbWGynPbdlF+3NP9lsQb+1I1Y0ZRtSalJ+bL",
|
||||||
"4/SMCGmcHkJxeAEbjCz4QJGWd3HraNNoVipmgDxTbJkj/mN1MIaCMo5cbxIF4s+JTz5SLcMKF5fRzC4g",
|
"rh6SV1LZwK04fOjWnIwKrFqlxLbXZqwao5yc0eFsmJ0RIY3TQ2hRL2CN8Q0fKNLyDm0dbZxMKsUMkGeK",
|
||||||
"M/Ovf66AtyCl48izFjoP68nVUYN7awcJqYumhq1sV0VFihpwDVbJwfhn4ZTFpBgtKHMr6oeSVto+/FhB",
|
"LQqsQtijDKGkjCPX65kC8eeZL4FSLcIIFwPJxA4gE/Ovfy6BdxJbz5EnnRoR15Pr5qJzGwcJBZRmhi3t",
|
||||||
"ZR+oSnPsuutHlxkd+RF6hk24nkjnB/vsqFSoolH78CiO1tR2FaOFVCOsIfRgav0elkwbUJA5GOyDEM0y",
|
"3o6KDDXgtnkVB+OfhVMWk2Iwp8yNaB4qWmv78EMNtX2gKitw7988uvrsyA/QM2zZ90R6L+yzo1Kjigbd",
|
||||||
"BXrYoTjVZm6V0u2qW2mTpRe7gZRTg0EynFflwqyp2pF0bxS7TqQmfOskN6875G4S29tEflJHX+sirpXa",
|
"xZM0WVG7txnMpRpgJ6OjBf5bWDBtQEHukvF2yqF5rkDHHYpTbaZWKf29fad4s+xidzrn1GCQxKu7nJsV",
|
||||||
"7uyDMuIodUWp5TLa1nJLMzskGsL0GaSVYmazI9PcOH1clzc6qWCwRGuas6aRxYz8jNMCRCq3oKJogdz9",
|
"VTtK/41i14nUhm9TaqfNPr1fSvduZX8TrtDoIm2U2sUXgjLSJHOtseUy2dRyRzM7JIrl9AlktWJmvaPe",
|
||||||
"wYZ/cXj1V/LrT1c/X/1y9fern3/96eofV79c/a09cpn+30G33POnzNMii6bRR//nJVowr8TFXLO/QDQ9",
|
"3biIXVe9eqUg2ii2W8R2O419Qah7G6mi7CS5+0sb/sPh1V/JLz9e/XT189Xfr3765cerf1z9fPW3LvAz",
|
||||||
"RJmMoqmZ0ypjMkAOBqWt66fRRNmdE72YnMsEHRgEPHh4OLYk26nk+PVz/LPU0fThozhaYFmho2n0YPTg",
|
"/r+DftPpV5lmZZ6Mk4/+5yVasKjFxVSzv0AyPkSZjKKZmdI6ZzKkHAxKu7sYJyNlZ470fHQuZ+jAIODB",
|
||||||
"AEvqgi5Bz6War1gGEmsE+0sUR7IyZWVcOwEfDAjt7DIuLeQ4DuZuVZcld0jNVCsuNENTjbzgI7fFTdq6",
|
"w8OhJdktJcevn+PPSifjh4/SZI7NjU7GyYPBgwNs7Eu6AD2VarpkOUjsVOybJE1kbarauE0NfDAgXL+Q",
|
||||||
"3tXYcU+urfPaTed4dT+MxhkY6rXMtS/Nh6Wtfv36YPDB7CdtNVdDsdEaG94in9SZo4Z6jP0mswzkCZ9j",
|
"DCubchwHUzeqz5JbpGGqExeaoakGXvCBm+Lwvr53tXbcU2ubunZTNLHZlaNxItBix1z7ynwY2kENrg8G",
|
||||||
"hrAeeXhrK4qB9rB+R+zIQBhM7tQXxxijrhZxEx8rCHlfHRw8/H/C5VK7kYKdKDPzpfYltp2NbTtDO110",
|
"H8we72u4isVGB7y8RT1pKkeT6jH228oSqRO+xsRyPfLw1nYUkU1q841Y4EIYLO7Ut+gYo64XcbiTFYS8",
|
||||||
"eXgjYMSZ8AMekbEUD1znFCmmdaOe244aqw47EESG8OAxebMCtUZs0KRUsGKy0nzjZAmH1hXOUEHI5cD0",
|
"rw8OHv4/4XKhHbBhcW1mPte+0bcI3aYzdMtFn4c3AgacCQ8ziZxluOCqoEgxa+CCwu7rseuwsCQyhAsP",
|
||||||
"86VcEmSqNUfzsNzdH0drxjkWR6HhRymsbiwHQBVn2GZMRcW5Hx3Pbj1yHipznI1cJlfU8b0N8J+QhyFV",
|
"yZslqBXmBk0qBUsma83XTpawaNPhxBpCLiMY7Eu5IMhUB83zabk/P01WjHNsjgLsgFJY3VgOgCrOcLMz",
|
||||||
"YIZffWI+3Qonf1InFQ4e0Uqlpzv1MWNL8ea2mgipdb4Cpb0i71vsVlmwQ9oeV9dIbaiBJzkVS+iL7uJ2",
|
"FjXnHsCe3Br4jrU5zkaukitq4huHX1+HIVNg4p9+Yz3dCCe/Uq8URpfolNLTnfqYsIV4c1tNhNI63b2f",
|
||||||
"3sDFreqnbWttE7sRU9kuru6Alz0cdKFXG6qMC1y6phe2KNMcABs3sEVSHOm8Mplc23ElaL9aLhaIBwMI",
|
"unOxO23BDmm3uLpGakMNPCmoWMC26C5up226uFX/tGmtTWI3YirfxdUd8LKHg37q1YYq4wKXruiFbco0",
|
||||||
"64LFllkz5NqJt7YMzGmFmb7XtmpQaHsEXQQyt5gcPY1JSbVeS5WFVy463AcUQk1Yqlphj6hm9WUnq1Sz",
|
"B8CNG9gmKU10UZtcrixoCtqPlvM55oNIhnXBYtusCXLtxFtZBqa0xkq/tW3VoND2mHQxkbnB5OhpSiqq",
|
||||||
"tIGp3JgyukQemVhIN10QhqamGXVEoQwjJ0Ax+CrF/U49nUwWoUhjctLvJr93c+NnVBWkcKMj8vj4CMtX",
|
"9UqqPHxy0eGOcQg1YajqhD1mNasvi+9SzbI2TRXGVMkl8sjEXDqMQxiamRZWaOAHcgIUg69W3M/U49Fo",
|
||||||
"loLQ0Drn+fHL1WGP/nq9Hi9FhTXbxO/Rk2XJR4fjgzGIcW4K1+Yxwzvc+uOiOKqjNnowPhgf4GpZgqAl",
|
"Hpo0Jkfbu8lvHXr9jKqSlA7AIo+Pj7B9ZRkIDZ11nh+/XB5u0V+tVsOFqLFnG/k5erSo+OBweDAEMSxM",
|
||||||
"wwLP/oQZ0uTWMhNaMltvWZ+U2qoCPdMq8yhzs+OCGTdQ8J7+jcw2QX0g7B5alhyTFZNicq4daji/3efV",
|
"6bZ5zPAet365pIOCJA+GB8MDHC0rELRi2ODZV1ghTWEtM6IVs/2W9UmprSrQM60yj3KHYJfMOEDBe/pX",
|
||||||
"3enJZU+rdq4pfbEctZ0ea0gbBbqUqCk86eHBwWflbE010VWagl5UnG+I+6oEGWHCZ/AVyyrK3Yeo8dZX",
|
"Ml8H9YGwc2hVcSxWTIrRuXZZw/ntPq/uoyeXW1q16Kr0zXLSdXrsIW0U6EqipnClhwcHn5SzFdVE11kG",
|
||||||
"uDth0/UzA/zZFyS0KzY2q6KgalNblVAiYG1noJjaa3fyg8/WpNBWCxSLSDua1NFph9yL8CVFo/MREFkp",
|
"el5zvibubAtywoSv4EuW15S747DhxlngnbDp9jMR/uwHErYrNjbrsqRq3ViVUCJgZZFYLO2NO3n4tYNX",
|
||||||
"mTBW3trHJnWaWMKAoz0HU49r79Gq/dnwgOrqRc18eEuBz8EQ3psh2/FqDkxtjdivUV1zVK3+8+bTckd/",
|
"2m6BYhNpAVKdnPbIvQjnORqdj4DIK8mEsfI2PjZqysQCIo72HEwDGt+jVbcR6ojqmkEtSr2hwOdgCN9C",
|
||||||
"H89lMmfZ5U4VPgOT5i5U2xPadx8jhlL5LyweghyxXkTFLT3u6/FP79FO1wSdhe+uOazk9gWhifvEaW13",
|
"si3IWwBTG0D/Naprl2rUf94ecPf09/FczqYsv9ypwmdgssKFahcnfvcxYSiVP+fxKcgR24qotKPHfXv8",
|
||||||
"A791m0TmQbRAzoPaXYaZKD8iGq2bCdEgWIZZkp8k3Q9iDhS7A4pq2pbA/WcFz95UbYBFge7FSeDhs4Jj",
|
"03u00zVBZ9N33xxWcvuB0Jk7aLW2u4Hfukki90m0RM6D2js90C6f/a5Bk+9NFZuYeEQtAi3FSWAh4qyo",
|
||||||
"JeBDCamBjIBf03aMwL5HyHWwZ/Al/8PpwCZnEsSFZqfe9ijNlmIkF4tr8i4W74tFHwof9Wuo358ifRFo",
|
"kMbDvFzNIbUP+KQ3y/UNDvGsNfjOX5KsgOzC/WIa9xU1xdRHW/Ia1BIb/aBGV6hHyiNtg1ULtEVrToDk",
|
||||||
"sadT/r07RdRodPaKqot23UexkXbl5R5tP6HcD+Cdh9m7Mxxc6IcMdiHsHQDYfKmALKW7vWPJj4dNIvZY",
|
"PCB3P4UnsmeIKLbd/QXuP2kN2gInb2L7T1hjagEfKsgM5AT8mK4LBfZ9oVkFe4aQ9C9OI5OcSdBD25l6",
|
||||||
"RNxrUPsjdodzPUf6nLHc76v+EMF8Yx98XJkchHHDFj/SQW8I90XW9efRO3ZIBTTb4Cqk5z7Pd8ZMrDF4",
|
"06M0W4iBnM+vaV9wDzSfb4fno+1W9PenSN9L2xTe66LfnWLybXX2iqqLbvtMNQld+h5tP6Hcn2OEeMdN",
|
||||||
"312Nn2INVgItk0X/ac+wnJLUvidNs3wZ7wIzsnvH79ulbu8eaQ7pBVmHS0s5KHAXizY7lDDsB6O0NVoY",
|
"u08YoRG4EPZCB6w/V0AW0l3FsuSHcZOIPRYR9xrUfond4dzAcZ8ylre3p3+IYL6xDz6uTQHCOMzKI2Po",
|
||||||
"BK+BMcS9Aln7oAH1vq5To5PzBnj235X3PJ57uzkljMlJzjRJ7a3GxF5GoikCBofMFaZuyOyxpBl6d3wl",
|
"DeHyz6o5675jh1RA8zWOQnrurkUPrWOtwbfd1XgwMFrfOyZL/tOeYTklmf1OWszhMt2VzMjuGb9vl7q9",
|
||||||
"JlIhcgWtBHwBNeIypdxCG+X6rvFsBR1pKt1zVeOvZe9Ir2kOWcXhxM2W768BbF8SHzCsvR7e7nx3AdVr",
|
"e7iWZBVuoBWgwN0SW+9QQtwPBlkHoYkmrwiac6+JrLtQRL2vm9Lo5LxBPvvvqns+n3u7OSUMyQn2ppm9",
|
||||||
"6a+Xdq/M2QF5uFFzGUePDg7vbiTR+YY5wPwxqNCEPwXBHGg+OvjTwF1k54BMEyFNyHTua4xzp5hoGV7b",
|
"ojqzN8tohgmDQ+76e4fV+1zSnh30fCUlUmHmCloJ+QXUgMuMcpvaKNd3nc+W0JOm1luuavwd+x3lNSsg",
|
||||||
"W7rQuTrkRLdfIImQayfqw8PPm1pCFFGBXMrEUCZs2W25i0lSGXfDbyntZWMhLc66aLtlxL5x1GlNv6WN",
|
"rzmcOIj+/vbR3Rv/EcPau/5dAGFXonot/V3h/v1Hu78I16Mu0+TRweHdITu9o+AI88egApbxFARzSfPR",
|
||||||
"faFkfUp7B1cD85FWhEw+2sm37/OHY6X1Hesmrb4n+Om9/t2ni5Yku2LR10PYpyOL7m7Hb8gWJzkEWmsL",
|
"wZ8iF8udAzJNhDSh0rlDLedOKdEyfLZXrqF3D8yJbg9yiZArJ+rDw09bWkIUUYFcypmhTNi223KXkllt",
|
||||||
"rSmUIaMOhsiJ/65mM7JHjbYbOaPZODFd2jZm2vT/KGnpbfOJEyWPidmULKWcbzpfJEsllwq0jv0NKX/Z",
|
"3HXNhbQ3x4W0edZF2y0j9o2jThv6HW3sCyXrU9o7uIrATJ0IGX20BwgeLonHSuc48CaIiSf42yGTuy8X",
|
||||||
"XJEFZbxSsDe3hIyiQWSdsQ2qO1BHFMOKKESqWgUfd2PzSdQquraN9w0iMv5vQdleu0YRlmDsfK2+8JVQ",
|
"HUl2xaLvh5hwLAbM4tbV4qSAQGtlU2sGVaio0RA58ceTtiL7rNF1I2c0GyemT9vGTJf+H6UsvW1PilHy",
|
||||||
"nnDaGYtpe4tvayJ4fNSdkbaLOFkUlfDfapnJe4PUcUPea+Py9PLfAQAA//8fq3bVyDQAAA==",
|
"lJh1xTILk3QPdislFwq0Tv1FM/8/BxSZU8ZrBXtrS6goGkTeQ79Q3YE6ZjHsiEKkqmXwcXf6MEo6Tdem",
|
||||||
|
"8b7CjIx/bVK2d+hRhAUYC1M29+ZmlM847aGL2l6G3ABWj4/6UHO3iZNlWQt/5M1MsYVHD1vyXhuXp5f/",
|
||||||
|
"DgAA///4VeLtlTYAAA==",
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetSwagger returns the content of the embedded swagger specification file
|
// GetSwagger returns the content of the embedded swagger specification file
|
||||||
@ -81,16 +83,16 @@ var swaggerSpec = []string{
|
|||||||
func decodeSpec() ([]byte, error) {
|
func decodeSpec() ([]byte, error) {
|
||||||
zipped, err := base64.StdEncoding.DecodeString(strings.Join(swaggerSpec, ""))
|
zipped, err := base64.StdEncoding.DecodeString(strings.Join(swaggerSpec, ""))
|
||||||
if err != nil {
|
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))
|
zr, err := gzip.NewReader(bytes.NewReader(zipped))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("decompressing spec: %s", err)
|
return nil, fmt.Errorf("error decompressing spec: %s", err)
|
||||||
}
|
}
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
_, err = buf.ReadFrom(zr)
|
_, err = buf.ReadFrom(zr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("decompressing spec: %s", err)
|
return nil, fmt.Errorf("error decompressing spec: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return buf.Bytes(), nil
|
return buf.Bytes(), nil
|
||||||
|
@ -172,6 +172,12 @@ type Error struct {
|
|||||||
Message string `json:"message"`
|
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.
|
// Job defines model for Job.
|
||||||
type Job struct {
|
type Job struct {
|
||||||
// Embedded struct due to allOf(#/components/schemas/SubmittedJob)
|
// Embedded struct due to allOf(#/components/schemas/SubmittedJob)
|
||||||
@ -330,7 +336,7 @@ func (a *JobMetadata) UnmarshalJSON(b []byte) error {
|
|||||||
var fieldVal string
|
var fieldVal string
|
||||||
err := json.Unmarshal(fieldBuf, &fieldVal)
|
err := json.Unmarshal(fieldBuf, &fieldVal)
|
||||||
if err != nil {
|
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
|
a.AdditionalProperties[fieldName] = fieldVal
|
||||||
}
|
}
|
||||||
@ -346,7 +352,7 @@ func (a JobMetadata) MarshalJSON() ([]byte, error) {
|
|||||||
for fieldName, field := range a.AdditionalProperties {
|
for fieldName, field := range a.AdditionalProperties {
|
||||||
object[fieldName], err = json.Marshal(field)
|
object[fieldName], err = json.Marshal(field)
|
||||||
if err != nil {
|
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)
|
return json.Marshal(object)
|
||||||
@ -383,7 +389,7 @@ func (a *JobSettings) UnmarshalJSON(b []byte) error {
|
|||||||
var fieldVal interface{}
|
var fieldVal interface{}
|
||||||
err := json.Unmarshal(fieldBuf, &fieldVal)
|
err := json.Unmarshal(fieldBuf, &fieldVal)
|
||||||
if err != nil {
|
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
|
a.AdditionalProperties[fieldName] = fieldVal
|
||||||
}
|
}
|
||||||
@ -399,7 +405,7 @@ func (a JobSettings) MarshalJSON() ([]byte, error) {
|
|||||||
for fieldName, field := range a.AdditionalProperties {
|
for fieldName, field := range a.AdditionalProperties {
|
||||||
object[fieldName], err = json.Marshal(field)
|
object[fieldName], err = json.Marshal(field)
|
||||||
if err != nil {
|
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)
|
return json.Marshal(object)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user