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:
Sybren A. Stüvel 2022-03-08 13:52:43 +01:00
parent 42407865eb
commit d0b677ffe3
7 changed files with 235 additions and 63 deletions

View File

@ -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,
})
}

View File

@ -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()

View File

@ -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]

View File

@ -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)

View File

@ -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)

View File

@ -18,62 +18,64 @@ import (
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
"H4sIAAAAAAAC/9xa627bRvZ/lQH7B9riT0lOnP8fWH3aNGlSB7kYlYN+SAx5SB6JYw9n2JmhFG1goA+x",
"b7JbYD9sP+0LuG+0OHPhRaQsu7Gz7RZFQIszZ871dy6cj1Eqi1IKEEZH04+RTnMoqH18rDVbCshOqL7A",
"vzPQqWKlYVJE085bwjShxOAT1YQZ/FtBCmwFGUk2xORAfpDqAtQ4iqNSyRKUYWBPSWVRUJHZZ2agsA//",
"o2ARTaMvJg1zE8/Z5InbEF3GkdmUEE0jqhTd4N/nMsHd/mdtFBNL//u8VEwqZjatBUwYWIIKK9yvA9sF",
"LYZfXE9TG2qqveKg/mZuJUpE9cVuRqqKZfhiIVVBTTR1P8TbCy/jSMGPFVOQRdN3YREqx8tS89YSYUtL",
"LZW0uYobe53W58rkHFKDDD5eUcZpwuGFTGZgDLLT85wZE0sORLv3RC4IJS9kQpCaHnCQXLLUPXbp/JCD",
"IEu2AhETzgpmrJ+tKGcZ/luBJkbibxqIJzImbwTfkEojj2TNTE6c0uzheHbtgj3lbztbBgtacdPn6yQH",
"4l86PojO5Vp4ZkilQZE18p6BAVUwYc/PmQ4qGSN5yJhBLh19f9SCcg1xXw8mB4X0KedyTXDrNk1CFwbX",
"5EDOZUJyqkkCIIiukoIZA9mY/CArnhFWlHxDMuDgtnFO4APTjiDVF5ospHKkz2USEyoyjHVZlIzjGmbG",
"70Xjk4mUHKhAiS5g01fWUQbCsAUD5enWjhGTotKGJEAqwX6snLmYqEUIFusZqvH9W2iOFQVkjBrgG6IA",
"/ZlQe0wGCyYYbojRVa3geGRs+ZGVcT+VVBmWVpyq2oo71KCrJAT4dbgwEEozv7N2xltTOPHbV0yzbd8y",
"qrpOQejDXY/ytnh75EIYlRW8SZGvOLsAQsk3HEQGitAsG0nx9ZjMwCC5M2uQMxcILmNQQRA9laC8PsPk",
"1ODRFc/El9YZ6lgCkdlY0sOK3gJBdD6/6IbANWvstIVfVTLCN84dnDMGm5MnlVIgDN8QiUhDA13r3S2s",
"0WNy9t3j2XffPp0/O3r57fz48cl3Zy6PZkxBaqTakJKanPwvOXsfTb6w/72PzggtS1Rp5sQGURUo34Jx",
"mOP6KI4ypsKj/dljfk51Dtm8WXk6EDy7nKaPcl4DLelbEesAlmpy9PTYofnGio1O411iTF5LIkAbyFAx",
"VWoqBZp8ZQFWxyRjKR5FFQP9NaEKiK7KUiqzLbpnPsbce/gQheaSmii2vrBXyGHpQj5qznR1DNPkFRV0",
"CcohHzM29GmBUD6QvDhNgN+uqPDKvHlBNJR0e/lqKxy8Szj2Wmfuiw3U1kAqfsm0Cc5gvXu33vo6CoXG",
"b5P4pIOIO8RtjhgSMFSUPbH8C6KgVKCRBUKJduWLr4MsEn2AtDKwr9LdXUbWDtR6HdgbNlxry5BE3yol",
"FRLbrrUz6NSPIWL6xWsBWtPlEL9bDFmazfohbl64spxy/mYRTd9db9tZKEhw12XcE0EBNTBkK3zBpCCG",
"FaANLUpEgiBoRg2M8M1QwcAGyL19e/Q0APwLWznvKbpvWu9jkNblflVmdyzNlnUsp0FnzXk1s6eXp85A",
"r8DQjBpqDZVltuCh/Lij+57EWx2hSphRVG1I4Yn5hKfH5JVUNmRKDh/aaJ9SgfmikFhwWqyoML7IGR0n",
"4/SMCGmcHkJxeAEbjCz4QJGWd3HraNNoVipmgDxTbJkj/mN1MIaCMo5cbxIF4s+JTz5SLcMKF5fRzC4g",
"M/Ovf66AtyCl48izFjoP68nVUYN7awcJqYumhq1sV0VFihpwDVbJwfhn4ZTFpBgtKHMr6oeSVto+/FhB",
"ZR+oSnPsuutHlxkd+RF6hk24nkjnB/vsqFSoolH78CiO1tR2FaOFVCOsIfRgav0elkwbUJA5GOyDEM0y",
"BXrYoTjVZm6V0u2qW2mTpRe7gZRTg0EynFflwqyp2pF0bxS7TqQmfOskN6875G4S29tEflJHX+sirpXa",
"7uyDMuIodUWp5TLa1nJLMzskGsL0GaSVYmazI9PcOH1clzc6qWCwRGuas6aRxYz8jNMCRCq3oKJogdz9",
"wYZ/cXj1V/LrT1c/X/1y9fern3/96eofV79c/a09cpn+30G33POnzNMii6bRR//nJVowr8TFXLO/QDQ9",
"RJmMoqmZ0ypjMkAOBqWt66fRRNmdE72YnMsEHRgEPHh4OLYk26nk+PVz/LPU0fThozhaYFmho2n0YPTg",
"AEvqgi5Bz6War1gGEmsE+0sUR7IyZWVcOwEfDAjt7DIuLeQ4DuZuVZcld0jNVCsuNENTjbzgI7fFTdq6",
"3tXYcU+urfPaTed4dT+MxhkY6rXMtS/Nh6Wtfv36YPDB7CdtNVdDsdEaG94in9SZo4Z6jP0mswzkCZ9j",
"hrAeeXhrK4qB9rB+R+zIQBhM7tQXxxijrhZxEx8rCHlfHRw8/H/C5VK7kYKdKDPzpfYltp2NbTtDO110",
"eXgjYMSZ8AMekbEUD1znFCmmdaOe244aqw47EESG8OAxebMCtUZs0KRUsGKy0nzjZAmH1hXOUEHI5cD0",
"86VcEmSqNUfzsNzdH0drxjkWR6HhRymsbiwHQBVn2GZMRcW5Hx3Pbj1yHipznI1cJlfU8b0N8J+QhyFV",
"YIZffWI+3Qonf1InFQ4e0Uqlpzv1MWNL8ea2mgipdb4Cpb0i71vsVlmwQ9oeV9dIbaiBJzkVS+iL7uJ2",
"3sDFreqnbWttE7sRU9kuru6Alz0cdKFXG6qMC1y6phe2KNMcABs3sEVSHOm8Mplc23ElaL9aLhaIBwMI",
"64LFllkz5NqJt7YMzGmFmb7XtmpQaHsEXQQyt5gcPY1JSbVeS5WFVy463AcUQk1Yqlphj6hm9WUnq1Sz",
"tIGp3JgyukQemVhIN10QhqamGXVEoQwjJ0Ax+CrF/U49nUwWoUhjctLvJr93c+NnVBWkcKMj8vj4CMtX",
"loLQ0Drn+fHL1WGP/nq9Hi9FhTXbxO/Rk2XJR4fjgzGIcW4K1+Yxwzvc+uOiOKqjNnowPhgf4GpZgqAl",
"wwLP/oQZ0uTWMhNaMltvWZ+U2qoCPdMq8yhzs+OCGTdQ8J7+jcw2QX0g7B5alhyTFZNicq4daji/3efV",
"3enJZU+rdq4pfbEctZ0ea0gbBbqUqCk86eHBwWflbE010VWagl5UnG+I+6oEGWHCZ/AVyyrK3Yeo8dZX",
"uDth0/UzA/zZFyS0KzY2q6KgalNblVAiYG1noJjaa3fyg8/WpNBWCxSLSDua1NFph9yL8CVFo/MREFkp",
"mTBW3trHJnWaWMKAoz0HU49r79Gq/dnwgOrqRc18eEuBz8EQ3psh2/FqDkxtjdivUV1zVK3+8+bTckd/",
"H89lMmfZ5U4VPgOT5i5U2xPadx8jhlL5LyweghyxXkTFLT3u6/FP79FO1wSdhe+uOazk9gWhifvEaW13",
"A791m0TmQbRAzoPaXYaZKD8iGq2bCdEgWIZZkp8k3Q9iDhS7A4pq2pbA/WcFz95UbYBFge7FSeDhs4Jj",
"JeBDCamBjIBf03aMwL5HyHWwZ/Al/8PpwCZnEsSFZqfe9ijNlmIkF4tr8i4W74tFHwof9Wuo358ifRFo",
"sadT/r07RdRodPaKqot23UexkXbl5R5tP6HcD+Cdh9m7Mxxc6IcMdiHsHQDYfKmALKW7vWPJj4dNIvZY",
"RNxrUPsjdodzPUf6nLHc76v+EMF8Yx98XJkchHHDFj/SQW8I90XW9efRO3ZIBTTb4Cqk5z7Pd8ZMrDF4",
"312Nn2INVgItk0X/ac+wnJLUvidNs3wZ7wIzsnvH79ulbu8eaQ7pBVmHS0s5KHAXizY7lDDsB6O0NVoY",
"BK+BMcS9Aln7oAH1vq5To5PzBnj235X3PJ57uzkljMlJzjRJ7a3GxF5GoikCBofMFaZuyOyxpBl6d3wl",
"JlIhcgWtBHwBNeIypdxCG+X6rvFsBR1pKt1zVeOvZe9Ir2kOWcXhxM2W768BbF8SHzCsvR7e7nx3AdVr",
"6a+Xdq/M2QF5uFFzGUePDg7vbiTR+YY5wPwxqNCEPwXBHGg+OvjTwF1k54BMEyFNyHTua4xzp5hoGV7b",
"W7rQuTrkRLdfIImQayfqw8PPm1pCFFGBXMrEUCZs2W25i0lSGXfDbyntZWMhLc66aLtlxL5x1GlNv6WN",
"faFkfUp7B1cD85FWhEw+2sm37/OHY6X1Hesmrb4n+Om9/t2ni5Yku2LR10PYpyOL7m7Hb8gWJzkEWmsL",
"rSmUIaMOhsiJ/65mM7JHjbYbOaPZODFd2jZm2vT/KGnpbfOJEyWPidmULKWcbzpfJEsllwq0jv0NKX/Z",
"XJEFZbxSsDe3hIyiQWSdsQ2qO1BHFMOKKESqWgUfd2PzSdQquraN9w0iMv5vQdleu0YRlmDsfK2+8JVQ",
"nnDaGYtpe4tvayJ4fNSdkbaLOFkUlfDfapnJe4PUcUPea+Py9PLfAQAA//8fq3bVyDQAAA==",
"H4sIAAAAAAAC/9xb7W4bN9a+FWL6Am3xjiQnzvsCq1+bJk3qIB9G5bQ/EkOmZo40tDnklORI0QYGehF7",
"J7sF9sf2196Ae0eLw4/5kCjLbu1su0EQjGbIw/N9Dh8yH5NMlpUUIIxOxh8TnRVQUvv4WGu2EJCfUH2B",
"v3PQmWKVYVIk495XwjShxOAT1YQZ/K0gA7aEnMzWxBRAvpfqAtQwSZNKyQqUYWBXyWRZUpHbZ2agtA//",
"o2CejJPPRi1zI8/Z6ImbkFymiVlXkIwTqhRd4+9zOcPZ/rU2iomFfz+tFJOKmXVnABMGFqDCCPc2Ml3Q",
"Mv7hepraUFPvFQf1N3EjUSKqL3YzUtcsxw9zqUpqkrF7kW4OvEwTBT/UTEGejN+FQagcL0vDW0eEDS11",
"VNLlKm3tddqsK2fnkBlk8PGSMk5nHF7I2QSMQXa2PGfCxIID0e47kXNCyQs5I0hNRxykkCxzj3063xcg",
"yIItQaSEs5IZ62dLylmO/9agiZH4TgPxRIbkjeBrUmvkkayYKYhTml0c125ccEv5m86Ww5zW3GzzdVIA",
"8R8dH0QXciU8M6TWoMgKec/BgCqZsOsXTAeVDJE85Mwgl46+X2pOuYZ0Ww+mAIX0KedyRXDqJk1C5wbH",
"FEDO5YwUVJMZgCC6npXMGMiH5HtZ85ywsuJrkgMHN41zAh+YdgSpvtBkLpUjfS5nKaEix1iXZcU4jmFm",
"+F60PjmTkgMVKNEFrLeVdZSDMGzOQHm6jWOkpKy1ITMgtWA/1M5cTDQiBIttGar1/VtojpUl5Iwa4Gui",
"AP2ZULtMDnMmGE5I0VWt4LhkavmRtXGvKqoMy2pOVWPFHWrQ9SwE+HV5IRJKEz+zccZbUzjx05dMs03f",
"Mqq+TkHow32P8rZ4e+RCGJUVvEmRLzi7AELJVxxEDorQPB9I8eWQTMAguTNrkDMXCK5iUEEweypBebOG",
"KajBpWuei8+tMzSxBCK3saTjit5Iguh8ftANE9ektdNG/qpnA/zi3ME5Y7A5eVIrBcLwNZGYaWiga727",
"k2v0kJx983jyzddPp8+OXn49PX588s2Zq6M5U5AZqdakoqYg/0vO3iejz+yf98kZoVWFKs2d2CDqEuWb",
"Mw5THJ+kSc5UeLSvfc4vqC4gn7YjTyPBs8tptrOc10BH+k7EugRLNTl6euyy+dqKjU7jXWJIXksiQBvI",
"UTF1ZmoFmnxhE6xOSc4yXIoqBvpLQhUQXVeVVGZTdM98irX38CEKzSU1SWp9Ya+QcelCPWrXdH0M0+QV",
"FXQBymU+Zmzo0xJTeaR4cToDfrumwivz5g1RrOhu1auNcPAu4djrrLkvNlBbkVL8kmkTnMF69269beso",
"NBq/TuKTXkbcIW67REzA0FFuieU/EAWVAo0sEEq0a198H2Qz0QfIagP7Ot3dbWTjQJ3Pgb244TpTYhJ9",
"rZRUSGyz186h1z+GiNluXkvQmi5i/G4wZGm242PcPOO0BJHJ70Bpq9iPN9XMsp1xPRdhoI+rGBcv3OaA",
"cv5mnozfXe9hk9AW4azLdEuRCqiBmMfgByYFMawEbWhZYT4K6s6pgQF+ibUtLELu7dujp6HMvLD9+57W",
"/6a7DkwVzaajrvI7lmbDOpbToLN2vYbZ08tTZ6BXYGhODbWGynPbdlF+3NP9lsQb+1I1Y0ZRtSalJ+bL",
"rh6SV1LZwK04fOjWnIwKrFqlxLbXZqwao5yc0eFsmJ0RIY3TQ2hRL2CN8Q0fKNLyDm0dbZxMKsUMkGeK",
"LQqsQtijDKGkjCPX65kC8eeZL4FSLcIIFwPJxA4gE/Ovfy6BdxJbz5EnnRoR15Pr5qJzGwcJBZRmhi3t",
"3o6KDDXgtnkVB+OfhVMWk2Iwp8yNaB4qWmv78EMNtX2gKitw7988uvrsyA/QM2zZ90R6L+yzo1Kjigbd",
"xZM0WVG7txnMpRpgJ6OjBf5bWDBtQEHukvF2yqF5rkDHHYpTbaZWKf29fad4s+xidzrn1GCQxKu7nJsV",
"VTtK/41i14nUhm9TaqfNPr1fSvduZX8TrtDoIm2U2sUXgjLSJHOtseUy2dRyRzM7JIrl9AlktWJmvaPe",
"3biIXVe9eqUg2ii2W8R2O419Qah7G6mi7CS5+0sb/sPh1V/JLz9e/XT189Xfr3765cerf1z9fPW3LvAz",
"/r+DftPpV5lmZZ6Mk4/+5yVasKjFxVSzv0AyPkSZjKKZmdI6ZzKkHAxKu7sYJyNlZ470fHQuZ+jAIODB",
"w8OhJdktJcevn+PPSifjh4/SZI7NjU7GyYPBgwNs7Eu6AD2VarpkOUjsVOybJE1kbarauE0NfDAgXL+Q",
"DCubchwHUzeqz5JbpGGqExeaoakGXvCBm+Lwvr53tXbcU2ubunZTNLHZlaNxItBix1z7ynwY2kENrg8G",
"H8we72u4isVGB7y8RT1pKkeT6jH228oSqRO+xsRyPfLw1nYUkU1q841Y4EIYLO7Ut+gYo64XcbiTFYS8",
"rw8OHv4/4XKhHbBhcW1mPte+0bcI3aYzdMtFn4c3AgacCQ8ziZxluOCqoEgxa+CCwu7rseuwsCQyhAsP",
"yZslqBXmBk0qBUsma83XTpawaNPhxBpCLiMY7Eu5IMhUB83zabk/P01WjHNsjgLsgFJY3VgOgCrOcLMz",
"FjXnHsCe3Br4jrU5zkaukitq4huHX1+HIVNg4p9+Yz3dCCe/Uq8URpfolNLTnfqYsIV4c1tNhNI63b2f",
"unOxO23BDmm3uLpGakMNPCmoWMC26C5up226uFX/tGmtTWI3YirfxdUd8LKHg37q1YYq4wKXruiFbco0",
"B8CNG9gmKU10UZtcrixoCtqPlvM55oNIhnXBYtusCXLtxFtZBqa0xkq/tW3VoND2mHQxkbnB5OhpSiqq",
"9UqqPHxy0eGOcQg1YajqhD1mNasvi+9SzbI2TRXGVMkl8sjEXDqMQxiamRZWaOAHcgIUg69W3M/U49Fo",
"Hpo0Jkfbu8lvHXr9jKqSlA7AIo+Pj7B9ZRkIDZ11nh+/XB5u0V+tVsOFqLFnG/k5erSo+OBweDAEMSxM",
"6bZ5zPAet365pIOCJA+GB8MDHC0rELRi2ODZV1ghTWEtM6IVs/2W9UmprSrQM60yj3KHYJfMOEDBe/pX",
"Ml8H9YGwc2hVcSxWTIrRuXZZw/ntPq/uoyeXW1q16Kr0zXLSdXrsIW0U6EqipnClhwcHn5SzFdVE11kG",
"el5zvibubAtywoSv4EuW15S747DhxlngnbDp9jMR/uwHErYrNjbrsqRq3ViVUCJgZZFYLO2NO3n4tYNX",
"2m6BYhNpAVKdnPbIvQjnORqdj4DIK8mEsfI2PjZqysQCIo72HEwDGt+jVbcR6ojqmkEtSr2hwOdgCN9C",
"si3IWwBTG0D/Naprl2rUf94ecPf09/FczqYsv9ypwmdgssKFahcnfvcxYSiVP+fxKcgR24qotKPHfXv8",
"03u00zVBZ9N33xxWcvuB0Jk7aLW2u4Hfukki90m0RM6D2js90C6f/a5Bk+9NFZuYeEQtAi3FSWAh4qyo",
"kMbDvFzNIbUP+KQ3y/UNDvGsNfjOX5KsgOzC/WIa9xU1xdRHW/Ia1BIb/aBGV6hHyiNtg1ULtEVrToDk",
"PCB3P4UnsmeIKLbd/QXuP2kN2gInb2L7T1hjagEfKsgM5AT8mK4LBfZ9oVkFe4aQ9C9OI5OcSdBD25l6",
"06M0W4iBnM+vaV9wDzSfb4fno+1W9PenSN9L2xTe66LfnWLybXX2iqqLbvtMNQld+h5tP6Hcn2OEeMdN",
"u08YoRG4EPZCB6w/V0AW0l3FsuSHcZOIPRYR9xrUfond4dzAcZ8ylre3p3+IYL6xDz6uTQHCOMzKI2Po",
"DeHyz6o5675jh1RA8zWOQnrurkUPrWOtwbfd1XgwMFrfOyZL/tOeYTklmf1OWszhMt2VzMjuGb9vl7q9",
"e7iWZBVuoBWgwN0SW+9QQtwPBlkHoYkmrwiac6+JrLtQRL2vm9Lo5LxBPvvvqns+n3u7OSUMyQn2ppm9",
"ojqzN8tohgmDQ+76e4fV+1zSnh30fCUlUmHmCloJ+QXUgMuMcpvaKNd3nc+W0JOm1luuavwd+x3lNSsg",
"rzmcOIj+/vbR3Rv/EcPau/5dAGFXonot/V3h/v1Hu78I16Mu0+TRweHdITu9o+AI88egApbxFARzSfPR",
"wZ8iF8udAzJNhDSh0rlDLedOKdEyfLZXrqF3D8yJbg9yiZArJ+rDw09bWkIUUYFcypmhTNi223KXkllt",
"3HXNhbQ3x4W0edZF2y0j9o2jThv6HW3sCyXrU9o7uIrATJ0IGX20BwgeLonHSuc48CaIiSf42yGTuy8X",
"HUl2xaLvh5hwLAbM4tbV4qSAQGtlU2sGVaio0RA58ceTtiL7rNF1I2c0GyemT9vGTJf+H6UsvW1PilHy",
"lJh1xTILk3QPdislFwq0Tv1FM/8/BxSZU8ZrBXtrS6goGkTeQ79Q3YE6ZjHsiEKkqmXwcXf6MEo6Tdem",
"8b7CjIx/bVK2d+hRhAUYC1M29+ZmlM847aGL2l6G3ABWj4/6UHO3iZNlWQt/5M1MsYVHD1vyXhuXp5f/",
"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

View File

@ -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)