diff --git a/addon/flamenco/manager/__init__.py b/addon/flamenco/manager/__init__.py
index f2d41019..9d8c260c 100644
--- a/addon/flamenco/manager/__init__.py
+++ b/addon/flamenco/manager/__init__.py
@@ -10,7 +10,7 @@
"""
-__version__ = "7521bff1"
+__version__ = "d170cda3"
# import ApiClient
from flamenco.manager.api_client import ApiClient
diff --git a/addon/flamenco/manager/api/jobs_api.py b/addon/flamenco/manager/api/jobs_api.py
index b89ade53..9a5305d0 100644
--- a/addon/flamenco/manager/api/jobs_api.py
+++ b/addon/flamenco/manager/api/jobs_api.py
@@ -33,6 +33,7 @@ from flamenco.manager.model.jobs_query import JobsQuery
from flamenco.manager.model.jobs_query_result import JobsQueryResult
from flamenco.manager.model.submitted_job import SubmittedJob
from flamenco.manager.model.task import Task
+from flamenco.manager.model.task_log_info import TaskLogInfo
from flamenco.manager.model.task_status_change import TaskStatusChange
@@ -334,12 +335,12 @@ class JobsApi(object):
},
api_client=api_client
)
- self.fetch_task_log_endpoint = _Endpoint(
+ self.fetch_task_log_info_endpoint = _Endpoint(
settings={
- 'response_type': (str,),
+ 'response_type': (TaskLogInfo,),
'auth': [],
'endpoint_path': '/api/v3/tasks/{task_id}/log',
- 'operation_id': 'fetch_task_log',
+ 'operation_id': 'fetch_task_log_info',
'http_method': 'GET',
'servers': None,
},
@@ -377,7 +378,6 @@ class JobsApi(object):
},
headers_map={
'accept': [
- 'text/plain',
'application/json'
],
'content_type': [],
@@ -1250,17 +1250,17 @@ class JobsApi(object):
task_id
return self.fetch_task_endpoint.call_with_http_info(**kwargs)
- def fetch_task_log(
+ def fetch_task_log_info(
self,
task_id,
**kwargs
):
- """Fetch the entire task log. # noqa: E501
+ """Get the URL of the task log, and some more info. # noqa: E501
This method makes a synchronous HTTP request by default. To make an
asynchronous HTTP request, please pass async_req=True
- >>> thread = api.fetch_task_log(task_id, async_req=True)
+ >>> thread = api.fetch_task_log_info(task_id, async_req=True)
>>> result = thread.get()
Args:
@@ -1295,7 +1295,7 @@ class JobsApi(object):
async_req (bool): execute request asynchronously
Returns:
- str
+ TaskLogInfo
If the method is called asynchronously, returns the request
thread.
"""
@@ -1325,7 +1325,7 @@ class JobsApi(object):
kwargs['_host_index'] = kwargs.get('_host_index')
kwargs['task_id'] = \
task_id
- return self.fetch_task_log_endpoint.call_with_http_info(**kwargs)
+ return self.fetch_task_log_info_endpoint.call_with_http_info(**kwargs)
def fetch_task_log_tail(
self,
diff --git a/addon/flamenco/manager/api_client.py b/addon/flamenco/manager/api_client.py
index d056cb9d..f44e09e0 100644
--- a/addon/flamenco/manager/api_client.py
+++ b/addon/flamenco/manager/api_client.py
@@ -76,7 +76,7 @@ class ApiClient(object):
self.default_headers[header_name] = header_value
self.cookie = cookie
# Set default User-Agent.
- self.user_agent = 'Flamenco/7521bff1 (Blender add-on)'
+ self.user_agent = 'Flamenco/d170cda3 (Blender add-on)'
def __enter__(self):
return self
diff --git a/addon/flamenco/manager/configuration.py b/addon/flamenco/manager/configuration.py
index be5ddc62..2210fa08 100644
--- a/addon/flamenco/manager/configuration.py
+++ b/addon/flamenco/manager/configuration.py
@@ -404,7 +404,7 @@ conf = flamenco.manager.Configuration(
"OS: {env}\n"\
"Python Version: {pyversion}\n"\
"Version of the API: 1.0.0\n"\
- "SDK Package Version: 7521bff1".\
+ "SDK Package Version: d170cda3".\
format(env=sys.platform, pyversion=sys.version)
def get_host_settings(self):
diff --git a/addon/flamenco/manager/docs/JobsApi.md b/addon/flamenco/manager/docs/JobsApi.md
index 8706cb39..bc6d811b 100644
--- a/addon/flamenco/manager/docs/JobsApi.md
+++ b/addon/flamenco/manager/docs/JobsApi.md
@@ -10,7 +10,7 @@ Method | HTTP request | Description
[**fetch_job_last_rendered_info**](JobsApi.md#fetch_job_last_rendered_info) | **GET** /api/v3/jobs/{job_id}/last-rendered | Get the URL that serves the last-rendered images of this job.
[**fetch_job_tasks**](JobsApi.md#fetch_job_tasks) | **GET** /api/v3/jobs/{job_id}/tasks | Fetch a summary of all tasks of the given job.
[**fetch_task**](JobsApi.md#fetch_task) | **GET** /api/v3/tasks/{task_id} | Fetch a single task.
-[**fetch_task_log**](JobsApi.md#fetch_task_log) | **GET** /api/v3/tasks/{task_id}/log | Fetch the entire task log.
+[**fetch_task_log_info**](JobsApi.md#fetch_task_log_info) | **GET** /api/v3/tasks/{task_id}/log | Get the URL of the task log, and some more info.
[**fetch_task_log_tail**](JobsApi.md#fetch_task_log_tail) | **GET** /api/v3/tasks/{task_id}/logtail | Fetch the last few lines of the task's log.
[**get_job_type**](JobsApi.md#get_job_type) | **GET** /api/v3/jobs/type/{typeName} | Get single job type and its parameters.
[**get_job_types**](JobsApi.md#get_job_types) | **GET** /api/v3/jobs/types | Get list of job types and their parameters.
@@ -415,10 +415,10 @@ No authorization required
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
-# **fetch_task_log**
-> str fetch_task_log(task_id)
+# **fetch_task_log_info**
+> TaskLogInfo fetch_task_log_info(task_id)
-Fetch the entire task log.
+Get the URL of the task log, and some more info.
### Example
@@ -428,6 +428,7 @@ import time
import flamenco.manager
from flamenco.manager.api import jobs_api
from flamenco.manager.model.error import Error
+from flamenco.manager.model.task_log_info import TaskLogInfo
from pprint import pprint
# Defining the host is optional and defaults to http://localhost
# See configuration.py for a list of all supported configuration parameters.
@@ -444,11 +445,11 @@ with flamenco.manager.ApiClient() as api_client:
# example passing only required values which don't have defaults set
try:
- # Fetch the entire task log.
- api_response = api_instance.fetch_task_log(task_id)
+ # Get the URL of the task log, and some more info.
+ api_response = api_instance.fetch_task_log_info(task_id)
pprint(api_response)
except flamenco.manager.ApiException as e:
- print("Exception when calling JobsApi->fetch_task_log: %s\n" % e)
+ print("Exception when calling JobsApi->fetch_task_log_info: %s\n" % e)
```
@@ -460,7 +461,7 @@ Name | Type | Description | Notes
### Return type
-**str**
+[**TaskLogInfo**](TaskLogInfo.md)
### Authorization
@@ -469,14 +470,14 @@ No authorization required
### HTTP request headers
- **Content-Type**: Not defined
- - **Accept**: text/plain, application/json
+ - **Accept**: application/json
### HTTP response details
| Status code | Description | Response headers |
|-------------|-------------|------------------|
-**200** | The task log. | - |
+**200** | The task log info. | - |
**204** | Returned when the task has no log yet. | - |
**0** | Unexpected error. | - |
diff --git a/addon/flamenco/manager/docs/TaskLogInfo.md b/addon/flamenco/manager/docs/TaskLogInfo.md
new file mode 100644
index 00000000..817a234e
--- /dev/null
+++ b/addon/flamenco/manager/docs/TaskLogInfo.md
@@ -0,0 +1,16 @@
+# TaskLogInfo
+
+Info about the log of a single task.
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**task_id** | **str** | |
+**job_id** | **str** | |
+**url** | **str** | The URL at which the task log itself can be downloaded. |
+**size** | **int** | The size of the task log, in bytes. |
+**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/addon/flamenco/manager/model/task_log_info.py b/addon/flamenco/manager/model/task_log_info.py
new file mode 100644
index 00000000..5a05cc94
--- /dev/null
+++ b/addon/flamenco/manager/model/task_log_info.py
@@ -0,0 +1,279 @@
+"""
+ Flamenco manager
+
+ Render Farm manager API # noqa: E501
+
+ The version of the OpenAPI document: 1.0.0
+ Generated by: https://openapi-generator.tech
+"""
+
+
+import re # noqa: F401
+import sys # noqa: F401
+
+from flamenco.manager.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from flamenco.manager.exceptions import ApiAttributeError
+
+
+
+class TaskLogInfo(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ @cached_property
+ def additional_properties_type():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+ """
+ return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501
+
+ _nullable = False
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'task_id': (str,), # noqa: E501
+ 'job_id': (str,), # noqa: E501
+ 'url': (str,), # noqa: E501
+ 'size': (int,), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'task_id': 'task_id', # noqa: E501
+ 'job_id': 'job_id', # noqa: E501
+ 'url': 'url', # noqa: E501
+ 'size': 'size', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ _composed_schemas = {}
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, task_id, job_id, url, size, *args, **kwargs): # noqa: E501
+ """TaskLogInfo - a model defined in OpenAPI
+
+ Args:
+ task_id (str):
+ job_id (str):
+ url (str): The URL at which the task log itself can be downloaded.
+ size (int): The size of the task log, in bytes.
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _spec_property_naming (bool): True if the variable names in the input data
+ are serialized names, as specified in the OpenAPI document.
+ False if the variable names in the input data
+ are pythonic names, e.g. snake case (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', True)
+ _spec_property_naming = kwargs.pop('_spec_property_naming', False)
+ _path_to_item = kwargs.pop('_path_to_item', ())
+ _configuration = kwargs.pop('_configuration', None)
+ _visited_composed_classes = kwargs.pop('_visited_composed_classes', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.task_id = task_id
+ self.job_id = job_id
+ self.url = url
+ self.size = size
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self.additional_properties_type is None:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_path_to_item',
+ '_configuration',
+ '_visited_composed_classes',
+ ])
+
+ @convert_js_args_to_python_args
+ def __init__(self, task_id, job_id, url, size, *args, **kwargs): # noqa: E501
+ """TaskLogInfo - a model defined in OpenAPI
+
+ Args:
+ task_id (str):
+ job_id (str):
+ url (str): The URL at which the task log itself can be downloaded.
+ size (int): The size of the task log, in bytes.
+
+ Keyword Args:
+ _check_type (bool): if True, values for parameters in openapi_types
+ will be type checked and a TypeError will be
+ raised if the wrong type is input.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _spec_property_naming (bool): True if the variable names in the input data
+ are serialized names, as specified in the OpenAPI document.
+ False if the variable names in the input data
+ are pythonic names, e.g. snake case (default)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', True)
+ _spec_property_naming = kwargs.pop('_spec_property_naming', False)
+ _path_to_item = kwargs.pop('_path_to_item', ())
+ _configuration = kwargs.pop('_configuration', None)
+ _visited_composed_classes = kwargs.pop('_visited_composed_classes', ())
+
+ if args:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.task_id = task_id
+ self.job_id = job_id
+ self.url = url
+ self.size = size
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self.additional_properties_type is None:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+ if var_name in self.read_only_vars:
+ raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate "
+ f"class with read only attributes.")
diff --git a/addon/flamenco/manager/models/__init__.py b/addon/flamenco/manager/models/__init__.py
index 1e46f2f5..35e94457 100644
--- a/addon/flamenco/manager/models/__init__.py
+++ b/addon/flamenco/manager/models/__init__.py
@@ -61,6 +61,7 @@ from flamenco.manager.model.socket_io_task_update import SocketIOTaskUpdate
from flamenco.manager.model.socket_io_worker_update import SocketIOWorkerUpdate
from flamenco.manager.model.submitted_job import SubmittedJob
from flamenco.manager.model.task import Task
+from flamenco.manager.model.task_log_info import TaskLogInfo
from flamenco.manager.model.task_status import TaskStatus
from flamenco.manager.model.task_status_change import TaskStatusChange
from flamenco.manager.model.task_summary import TaskSummary
diff --git a/addon/flamenco/manager_README.md b/addon/flamenco/manager_README.md
index dc2373de..d1a15c8e 100644
--- a/addon/flamenco/manager_README.md
+++ b/addon/flamenco/manager_README.md
@@ -4,7 +4,7 @@ Render Farm manager API
The `flamenco.manager` package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
- API version: 1.0.0
-- Package version: 7521bff1
+- Package version: d170cda3
- Build package: org.openapitools.codegen.languages.PythonClientCodegen
For more information, please visit [https://flamenco.io/](https://flamenco.io/)
@@ -44,6 +44,7 @@ from flamenco.manager.model.jobs_query import JobsQuery
from flamenco.manager.model.jobs_query_result import JobsQueryResult
from flamenco.manager.model.submitted_job import SubmittedJob
from flamenco.manager.model.task import Task
+from flamenco.manager.model.task_log_info import TaskLogInfo
from flamenco.manager.model.task_status_change import TaskStatusChange
# Defining the host is optional and defaults to http://localhost
# See configuration.py for a list of all supported configuration parameters.
diff --git a/pkg/api/openapi_client.gen.go b/pkg/api/openapi_client.gen.go
index 2cb925d2..f47598a1 100644
--- a/pkg/api/openapi_client.gen.go
+++ b/pkg/api/openapi_client.gen.go
@@ -179,8 +179,8 @@ type ClientInterface interface {
// FetchTask request
FetchTask(ctx context.Context, taskId string, reqEditors ...RequestEditorFn) (*http.Response, error)
- // FetchTaskLog request
- FetchTaskLog(ctx context.Context, taskId string, reqEditors ...RequestEditorFn) (*http.Response, error)
+ // FetchTaskLogInfo request
+ FetchTaskLogInfo(ctx context.Context, taskId string, reqEditors ...RequestEditorFn) (*http.Response, error)
// FetchTaskLogTail request
FetchTaskLogTail(ctx context.Context, taskId string, reqEditors ...RequestEditorFn) (*http.Response, error)
@@ -624,8 +624,8 @@ func (c *Client) FetchTask(ctx context.Context, taskId string, reqEditors ...Req
return c.Client.Do(req)
}
-func (c *Client) FetchTaskLog(ctx context.Context, taskId string, reqEditors ...RequestEditorFn) (*http.Response, error) {
- req, err := NewFetchTaskLogRequest(c.Server, taskId)
+func (c *Client) FetchTaskLogInfo(ctx context.Context, taskId string, reqEditors ...RequestEditorFn) (*http.Response, error) {
+ req, err := NewFetchTaskLogInfoRequest(c.Server, taskId)
if err != nil {
return nil, err
}
@@ -1748,8 +1748,8 @@ func NewFetchTaskRequest(server string, taskId string) (*http.Request, error) {
return req, nil
}
-// NewFetchTaskLogRequest generates requests for FetchTaskLog
-func NewFetchTaskLogRequest(server string, taskId string) (*http.Request, error) {
+// NewFetchTaskLogInfoRequest generates requests for FetchTaskLogInfo
+func NewFetchTaskLogInfoRequest(server string, taskId string) (*http.Request, error) {
var err error
var pathParam0 string
@@ -2446,8 +2446,8 @@ type ClientWithResponsesInterface interface {
// FetchTask request
FetchTaskWithResponse(ctx context.Context, taskId string, reqEditors ...RequestEditorFn) (*FetchTaskResponse, error)
- // FetchTaskLog request
- FetchTaskLogWithResponse(ctx context.Context, taskId string, reqEditors ...RequestEditorFn) (*FetchTaskLogResponse, error)
+ // FetchTaskLogInfo request
+ FetchTaskLogInfoWithResponse(ctx context.Context, taskId string, reqEditors ...RequestEditorFn) (*FetchTaskLogInfoResponse, error)
// FetchTaskLogTail request
FetchTaskLogTailWithResponse(ctx context.Context, taskId string, reqEditors ...RequestEditorFn) (*FetchTaskLogTailResponse, error)
@@ -3029,14 +3029,15 @@ func (r FetchTaskResponse) StatusCode() int {
return 0
}
-type FetchTaskLogResponse struct {
+type FetchTaskLogInfoResponse struct {
Body []byte
HTTPResponse *http.Response
+ JSON200 *TaskLogInfo
JSONDefault *Error
}
// Status returns HTTPResponse.Status
-func (r FetchTaskLogResponse) Status() string {
+func (r FetchTaskLogInfoResponse) Status() string {
if r.HTTPResponse != nil {
return r.HTTPResponse.Status
}
@@ -3044,7 +3045,7 @@ func (r FetchTaskLogResponse) Status() string {
}
// StatusCode returns HTTPResponse.StatusCode
-func (r FetchTaskLogResponse) StatusCode() int {
+func (r FetchTaskLogInfoResponse) StatusCode() int {
if r.HTTPResponse != nil {
return r.HTTPResponse.StatusCode
}
@@ -3670,13 +3671,13 @@ func (c *ClientWithResponses) FetchTaskWithResponse(ctx context.Context, taskId
return ParseFetchTaskResponse(rsp)
}
-// FetchTaskLogWithResponse request returning *FetchTaskLogResponse
-func (c *ClientWithResponses) FetchTaskLogWithResponse(ctx context.Context, taskId string, reqEditors ...RequestEditorFn) (*FetchTaskLogResponse, error) {
- rsp, err := c.FetchTaskLog(ctx, taskId, reqEditors...)
+// FetchTaskLogInfoWithResponse request returning *FetchTaskLogInfoResponse
+func (c *ClientWithResponses) FetchTaskLogInfoWithResponse(ctx context.Context, taskId string, reqEditors ...RequestEditorFn) (*FetchTaskLogInfoResponse, error) {
+ rsp, err := c.FetchTaskLogInfo(ctx, taskId, reqEditors...)
if err != nil {
return nil, err
}
- return ParseFetchTaskLogResponse(rsp)
+ return ParseFetchTaskLogInfoResponse(rsp)
}
// FetchTaskLogTailWithResponse request returning *FetchTaskLogTailResponse
@@ -4560,20 +4561,27 @@ func ParseFetchTaskResponse(rsp *http.Response) (*FetchTaskResponse, error) {
return response, nil
}
-// ParseFetchTaskLogResponse parses an HTTP response from a FetchTaskLogWithResponse call
-func ParseFetchTaskLogResponse(rsp *http.Response) (*FetchTaskLogResponse, error) {
+// ParseFetchTaskLogInfoResponse parses an HTTP response from a FetchTaskLogInfoWithResponse call
+func ParseFetchTaskLogInfoResponse(rsp *http.Response) (*FetchTaskLogInfoResponse, error) {
bodyBytes, err := ioutil.ReadAll(rsp.Body)
defer func() { _ = rsp.Body.Close() }()
if err != nil {
return nil, err
}
- response := &FetchTaskLogResponse{
+ response := &FetchTaskLogInfoResponse{
Body: bodyBytes,
HTTPResponse: rsp,
}
switch {
+ case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200:
+ var dest TaskLogInfo
+ if err := json.Unmarshal(bodyBytes, &dest); err != nil {
+ return nil, err
+ }
+ response.JSON200 = &dest
+
case strings.Contains(rsp.Header.Get("Content-Type"), "json") && true:
var dest Error
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
diff --git a/pkg/api/openapi_server.gen.go b/pkg/api/openapi_server.gen.go
index e59de15a..aec3728c 100644
--- a/pkg/api/openapi_server.gen.go
+++ b/pkg/api/openapi_server.gen.go
@@ -83,9 +83,9 @@ type ServerInterface interface {
// Fetch a single task.
// (GET /api/v3/tasks/{task_id})
FetchTask(ctx echo.Context, taskId string) error
- // Fetch the entire task log.
+ // Get the URL of the task log, and some more info.
// (GET /api/v3/tasks/{task_id}/log)
- FetchTaskLog(ctx echo.Context, taskId string) error
+ FetchTaskLogInfo(ctx echo.Context, taskId string) error
// Fetch the last few lines of the task's log.
// (GET /api/v3/tasks/{task_id}/logtail)
FetchTaskLogTail(ctx echo.Context, taskId string) error
@@ -481,8 +481,8 @@ func (w *ServerInterfaceWrapper) FetchTask(ctx echo.Context) error {
return err
}
-// FetchTaskLog converts echo context to params.
-func (w *ServerInterfaceWrapper) FetchTaskLog(ctx echo.Context) error {
+// FetchTaskLogInfo converts echo context to params.
+func (w *ServerInterfaceWrapper) FetchTaskLogInfo(ctx echo.Context) error {
var err error
// ------------- Path parameter "task_id" -------------
var taskId string
@@ -493,7 +493,7 @@ func (w *ServerInterfaceWrapper) FetchTaskLog(ctx echo.Context) error {
}
// Invoke the callback with all the unmarshalled arguments
- err = w.Handler.FetchTaskLog(ctx, taskId)
+ err = w.Handler.FetchTaskLogInfo(ctx, taskId)
return err
}
@@ -748,7 +748,7 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
router.GET(baseURL+"/api/v3/shaman/files/:checksum/:filesize", wrapper.ShamanFileStoreCheck)
router.POST(baseURL+"/api/v3/shaman/files/:checksum/:filesize", wrapper.ShamanFileStore)
router.GET(baseURL+"/api/v3/tasks/:task_id", wrapper.FetchTask)
- router.GET(baseURL+"/api/v3/tasks/:task_id/log", wrapper.FetchTaskLog)
+ router.GET(baseURL+"/api/v3/tasks/:task_id/log", wrapper.FetchTaskLogInfo)
router.GET(baseURL+"/api/v3/tasks/:task_id/logtail", wrapper.FetchTaskLogTail)
router.POST(baseURL+"/api/v3/tasks/:task_id/setstatus", wrapper.SetTaskStatus)
router.GET(baseURL+"/api/v3/version", wrapper.GetVersion)
diff --git a/pkg/api/openapi_spec.gen.go b/pkg/api/openapi_spec.gen.go
index 5abea619..d0d96df9 100644
--- a/pkg/api/openapi_spec.gen.go
+++ b/pkg/api/openapi_spec.gen.go
@@ -18,172 +18,173 @@ import (
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
- "AP//EjDx7WTGAAA=",
+ "H4sIAAAAAAAC/+R923IbObLgryB4NsLdsRQpS760NS/r8aVbPXZba8nTGzF2SGAVSMIqAjUASjTHoYjz",
+ "EfsnuydiH/Y87Q/0+aMNZAIoVBWKpGRL1vjMQ4/MqsIlM5H3THweZHJRSsGE0YODzwOdzdmCwp9PteYz",
+ "wfITqs/tv3OmM8VLw6UYHDSeEq4JJcb+RTXhxv5bsYzxC5aTyYqYOSO/S3XO1GgwHJRKlkwZzmCWTC4W",
+ "VOTwNzdsAX/8F8Wmg4PBv4zrxY3dysbP8IPB5XBgViUbHAyoUnRl//1RTuzX7mdtFBcz9/tpqbhU3Kyi",
+ "F7gwbMaUfwN/TXwu6CL9YP2Y2lBTbdyOhd8xvml3RPV5/0Kqiuf2wVSqBTWDA/xh2H7xcjhQ7O8VVywf",
+ "HPzNv2SB4/YS1hZtoQWlCCTxqoY1vj6EeeXkI8uMXeDTC8oLOinYr3JyzIyxy+lQzjEXs4IRjc+JnBJK",
+ "fpUTYkfTCQKZS57hn81xfp8zQWb8gokhKfiCG6CzC1rw3P63YpoYaX/TjLhBRuSNKFak0naNZMnNnCDQ",
+ "YHI7dyDBDvDbxJazKa0K013XyZwR9xDXQfRcLoVbDKk0U2Rp154zw9SCC5h/zrUHyQiHj8ZMTxF+GRsp",
+ "C8NLNxEX9USWHtWUZgwGZTk3dus4olv/lBaaDbvANXOm7KJpUcglsZ+2F0ro1Nh35ox8lBMyp5pMGBNE",
+ "V5MFN4blI/K7rIqc8EVZrEjOCoafFQVhn7jGAak+12QqFQ79UU6GhIrcMhC5KHlh3+Fm9F7UhD6RsmBU",
+ "wI4uaNGFz9HKzKUg7FOpmNZcAvAnjNi3K2pYbmEkVY4b9HhgsJMm6sK6Am6GXdI4Z6vuGg5zJgyfcqbc",
+ "IIHkh2RRaWPXUwn+9woJ0SHtozsIyXnswaBqljgLT8WKsE9GUULVrFpYDuPpbVKuRvZDPTqWC3aEZ2v1",
+ "w48ks2ioNMvtm5li1DDcqjt/q2gN9RGvOcsVSIgvFizn1LBiRRSzQxEKW83ZlAtuPxhaRgDT2ymHABNZ",
+ "GbciqgzPqoKqgIceetDVxLPPdVw3waiO3ZfhqF95hBP3+QXX3B2yK47wV/slLywDbnNxS2NuZVty3uMa",
+ "FC0GXE127BOEONKcByt5VinFhClWRFpWSf24QMQRs9QjcvbL0+NfXjw/fXn46sXp0dOTX85QEci5YpmR",
+ "akVKaubkv5Kz94Pxv8D/3g/OCC1LJnKWIwqZqBZ2f1NesFP7/mA4yLnyf8LPTmjNqZ6z/LR+80PijPTh",
+ "pctDHQSi3UcHEyUE1eTwuT8ysG3LOP5c2PWrEflNEsG0ZSfaqCozlWKa/AASQg9JzjM7FVWc6R8JVYzo",
+ "qiylMu2tu8UPrfKwv2c3XUhqBkOg6203GZFOfDIDMQ5T0tNIEBlNDkfO3DdnB4QWS7rS8NKInAFfB356",
+ "doDkAV871vXuEGU5ANRJAEV+KPg5I9QDjdA835HixxE5W7JJapglm9RSC6huQQWdMcvUhmRSGSKkQQHq",
+ "ZkGxBHQ8ImdznufMLlCwC6Zg6D+1admxRrtSFDL2RQAOKLB2dkGLJq/x2KoBijMNgOk4uAyGgyWbbMRZ",
+ "miK9ElTTCSrPXJPXAAKFkpEb4Ih0YeVWQmMq6IQVV9Nk3U6318JTml5HSWqxMHeMcXnRnJv4mYVWQua9",
+ "4tr4AwwcqR9uXRh57fZ6Oz5pCIqe7dZTpDbozsMRNfNnc5adv2XaaZMt9ZdWOkErz+t/WRgs5ysvKc3c",
+ "cuEfhDQ/OjaW1CW4KKse5RUeETOnhiypRhXbHpkpFznO4jlgcmB9itMmNXbUCOYsLNRxWqnssR4lZTrw",
+ "+uRKYZCw0KmsRJ5ck5aVyjYK5Aglx/hBG6UINLeiMGy856FD2AaUv+QirzG+Ff31EEzCMunu4+BzU85S",
+ "rWXGqUGOZXdzysTFBVUDRxj98tWb3x18uAdEMat0gwZKiUZbzxmNlojYJ5ZVhm1yC/Tb3IHxRY89jNMM",
+ "J/okhZYXSknV3c/PTDDFM8LsY6KYLqXQLOXAyBOk/svJyRFBK5vYN4J2GwYih1bSZEWVozmCh2JVSJoT",
+ "LZGqAwBxtQ3YWhsKlsYF+gO4FKP34pmd7OHuPp4tlqOkBMOGGjqhmtknk0qvRsQeIVioXxRZ8qIgmRSG",
+ "ckEoufeWGbXaeWrNvHv46pxRMJvs8rjIeUYN084QXM55NieGL9CSsqhg2pCMCqtTKWYUtzbhS2ktSi+1",
+ "3YBcg1y3ZEKt7uhF3T1NqtIL7KzgTBiw2STRcsGs3TQjilEtBfAR0DbYJzw8nBZkQrNzOZ2iDA+OE69p",
+ "db02C6Y1naVor0VcgPf6/RRlvSzogolM/pUp7ez4Lan8ov5i/Sr8i062p1bxK3rFaFG8mQ4O/raeyxx7",
+ "091+dTlsL5hmhl8EHXONQLLYKqg2xH9BrBHuDPwkj0YLNMVY7AOw4fmCaUMXZYzJnBq2Y58kZVFiuHfv",
+ "Dp/7Ff4KPrEN7rRtPXlWEwqOvKrM07s58ZuwawAI4aujLTfVlkh2wR509bSRhy+g7MPlB6SGPxcyOy+4",
+ "Nv061RLYsnZcSDE4m+AIYjnJmAL+AA5f1Lyk5Ra6ZBmf8syjeCuxFq/nhTBqlZJo3Zc6R2m95xT3c3od",
+ "92n9aewI7Tlor6g2b0H6svxwQWfsUExlF8wvhKxm85hzg6FDIwZXcpZZQ2WGKlPOp1NmDXNng4N7x35N",
+ "KJlLbXYUK6jhF4y8e/vKs0tLXjvKLYdwu54ROZGWwaPBinbb21dD+5Pl5IIaRt4PPls5cTn+LEVwEuhq",
+ "OuWfmL58P0Be2gS//aAJW1Ukj5IbpqH2bPC1thACU0Uj9aDiNTPUijxgW3kOTiZaHDWJpj1xy6umJtwo",
+ "qlZk4Qbz0B+R11KBXlMW7FNs/jtht5A5K9AQqawMJ2d0NBllZ/Yg1Qi3gD1n4Ghjn6gdyxE27ONgcFwq",
+ "bhh5qfhsbvXOSjM1YgvKC7vq1UQx8d8mTheXaubfQLEyOIYXyLH5f//3ghURXBtwOo5MvzScjKpYz7eB",
+ "MXr1ErgNqsEisxDAkEFZMOP+dqTHpdiZUo5vhD9KqzzbP/5esQr+oCqb84voT3SV4PA7TsWAx/B3xfB5",
+ "ZWGyE8+W1GbDHp7NqZixLltB1SJtfeCzyEXs1D0YavRVBEmL9ANTd8vqIf0Tqs/1cbVYULVKxV8WZcGn",
+ "nOWkcOweffDeezMiz1ADRC0THtaeF/uTZVz2dUatvkf1eVcthq+2Nm4gCuYWvIVd3Xvo9X+vGO45Ok8Q",
+ "HBocPLTKWs0T+k7Z5XAAkYHTyQqiZ22J+sH/dcpFg+IDyTpq/nDZcczgQj4PFlzwhT0w99Mq6Bdzrpe8",
+ "sAr5pOZcQ8+HXh3+5UXNhpI+fjmdatZc6G5qoTWcPl8hcKa3ZDh9O4octvoqu4qw1j4Sb5mplEAvoSUv",
+ "DA1Sf6K5U11hC1fRbKLAbpui+6m3zxMEdL/tgUL1/ZoHyXnNnkkx5bNKUZM0Xrh+yZU2byuxztPDtTXt",
+ "LCPmqIZYmTe1H9aGopuPqEpoa5XiNyEsB1KUkilbkinNjFR6SJxXWUixA5FEqxll8XrJlKNbyWurnmTI",
+ "xIoIwhalWVmLtYA1gA+6KnJxz5AJ640uzemCihdgaubr/VvH8Cquwigq9JQp8vToEEIk3pWY9ndpIxWd",
+ "sVcyo+nw7/MQYAEL3wogeyhgLvfxaKNe256lvbthjOA1VPJXqrh397UJ5NQs5ZImZNAbwXaWdEUu3Mca",
+ "jAwLt4XUBvxF1o4UDN0AEDyxYssK3bKgGUQDyFTJBTn7bNWdyzOn9HKFkduh80bMIdyk0Q1CiU9XCU5N",
+ "6l1Q5GQpE2uihZZ+0rwTdqAYr17OmVt+WVBjdeCdYAxhHBk8P26QySosuo/Q4KPN1r9zcNWA9l9uga+n",
+ "Vc6ZaDoHndnn9EidVJlaw+h1Umodh2qTT0eGvaZlaWEMWPZIIXbLEFI2IVDNMW0kseHVXxgr31ZCJBNR",
+ "DoP7ahkdXIQBWdAVOWestExJeF9VWtVZdObpIrTWI3uUQlRA3wZ9ds1qvWswVjdJ0ISDYbF0dH1oHG+z",
+ "3AKenOEjK53YGbFbcQ6WOBcCj4+dBOA9k/a/gn0yI3I4DYz9zMrqsyE5awLhjLx+d3xiDaEzyA3oIfQW",
+ "ObcAGaDWB6MUlQf/+KEPcDSR5YMJ6w9Wy/2dGP7W4zXfLKyS2e2yfLNEcVGR7YIhb9nMim3FcuS/XUjS",
+ "PFdM6yum5Dn+mz5pcmqWVLE1x3AT1/o9nBzU60LI8TT4hvTV1OEvSupzAsCDKk7s84AYDjJM6YAVDiIo",
+ "9Kw+ha1jllWKm1WIlbQ44LZO83XectSY4HDJVGjymIGtarUcp6CjuD/+5enew0dIprpaDInm/4A8jcnK",
+ "MI0KRM60XQIpnLbjAy6Zm63OWWn5YmA28JrjcRnUGUujmUSlaXAw2H842X3w5H6293iyu7+/n9+fTh48",
+ "nGa7j396Qu/vZXT30eR+/ujBbr738NGTxz/tTn7afZyzh7sP8se7e0/Yrh2I/4MNDu4/2HsAbnecrZCz",
+ "GRezeKpH+5PHe9mj/cmTB3sPpvn9/cmT/ce708mj3d1HT3Z/2s326f2Hj+8/zqb7NH/wYO/R/sPJ/Z8e",
+ "Z4/oT08e7j5+Uk+19/iya6N6iBwluYP9NdJ2vOLu5EucRObHAfkD2o/zTzrfpNOPAwKA51AdlHiWY8Qg",
+ "TDIih4LIImeKuKCH9r5JNxbMaznWx0qja/N92A45fP5+gE4Mb825UQgPESqKqwDb4sz5B3Z0Uc3GOmOC",
+ "7djTNsacvZ3D502ZVh9wRzJbGmq49pe8YMclyzbabDj4sImmzaepllYpN5Z9ht6fFlZS2bjXIA8Xn2gT",
+ "Bhh6DvS1f9vMqSBLL3yCWjO0xBEPCqFKJnRllXSfSVkfY3ISScMvJ74UqtsBwe1QElDdZXDOZKBeS6Bo",
+ "0jle5RYdGXhpzaYV0ZH1eGh61yP6FSddlXOaWGGT1cZjJscAPvO568lhTR6dCMS2jdU59Xxr2K+cNQH8",
+ "Ozfz2kG9Fai90ZgBO5v0gH7o1KohyVnJRA5Z7AIsEhS/3zluttWVInT0uLM7WI29rOvQ24k7VOJcyKWA",
+ "EGghaY72g0VYw06o94+DvcXVQMK0syuurXiAotGAXa8ucUNKw60oCLcg3vqR38QXJq2kpRpiC3wHlKjo",
+ "My9ShjEqnS0tm8edqQurd7yEoUIoHAjNShL3mv2NfXKJPDAhJr/UCUO3RQP1wQzn4WbIIp4oHLevTCsR",
+ "+/5SqsGKoybjaB1xh/+rytyvxQjXMD2ZnTNz+OZXOXkHoahkPr9mJhRSDYm2epS8YIr4r737EzKewYui",
+ "R+SlFWNsCRGPoVV42QWXlT7F1ZyhhjWpiTsV9/9KGTbenm8O9BtdxEUK6ZKYxqKvFJOJy/dCwvzDZKRL",
+ "salien4aopprfXNRqpqzjNz3GE/F3dzTGFmtAx6ANkx419qlBWnvXIZ/QuCCZnPIvLvgeUUxPEuWMMuM",
+ "CabQXyfJgoqVH8SVP5WKZoZntOiNb1wdiP3FilfNgPqCBKhE2pMrV4wKGps4XHfW4iyevkPnUC5VjfJE",
+ "uk1I+7QHz9ozbqXphPStHEHDgZlXi4mAJJCNiEonJKVS1esEJ/wrTLIOUpb19JcpHjMB0Y7AhfBQaGtq",
+ "nY119O0ZYRdg/EHtl5Gu5sNL5+hN+9AC01H2iDzzY2KpyoyZ+Dma/OASt+fEnwf/70LONIb/BGMuP7ks",
+ "eMZNsfLTThiySghA2UerYdiItV6xgsW/a8eQAmtLfjAS1tOYeupJ5qOc/Ag6o33dvnJP2/UQcO5b2k/x",
+ "W1luFDYJ1LzxLv5tq9tSg/iiB++w7Gf6mJVrZBMqY1KJ+gerKI02i4YWocpyXRHc+q1H1kJYBmQK1f9K",
+ "Ggp9oEj44akh59xidHolGITkqaL4VU4gabMofg+xOCf6qD4v5Awfxsd67apPqD5/JWd9XOzEHQKSzStx",
+ "7jQHiIqGM6ukXJCcoYDL8aHLSrdLgtNKLyTP7cc5bropfVJ0bHfSzfS1iwhE5JY2Iq/pKuSkL6rC8BIS",
+ "vQVDByD7ZJIRE8/L1pLqCfrEr0aFNZe021hHiXb4bdS2E4Bkv94GwOgobi4z63qaW5zKfeXE6e3ANryK",
+ "VNusArr4xZfqgM2OC9f55jZVmyCaXahnbYb3GkpEdrINLeKb66jRhcg9PV7DLHAxvy0oyELxVDOWUC8s",
+ "E/RJRFz7VVkty77vK4yiEsDtigY2E+LSr/5LSbETTfyCr06zkMK67ceNePpNEvYVClo20LofJ0nqce1K",
+ "srq2Dt7VPSqs/PKFOi1nzTbpol+elO0e7P/xP8l//Osf//bHv//xv//4t//41z/+zx///sf/ik0YsE3j",
+ "7Ek3y2m2yAcHg8/un5cQHqrE+Sn6a/btnow1/U5plXPp8yunvGAuzDhGq2Wsp+OPcqIx3HV/b38EQ8ZI",
+ "PvrtZ/vPUg8O9h4MB1NFF/bED+7v3N8dDAdg9OhTqU4veM6kNaLhl8FwICtTVgar99knwwTSw2BUulQP",
+ "2Ip7q7sunCmsbJwGl2sz0BlPSWnWjhf5mDDRbMdB0xl0g45vKyaODUZYKEXYtpnQBm9ETAObDHX/ar+p",
+ "ns4pa9vPqQOX7gx14pU37AUF6ZnaO9R89M4XIw4JH7ERmbCpVKzO8oqy/EZX01y+Zj+pmyhJw+Tw08nq",
+ "1CfbXSVH3snNxFq31LKuoJCB5DWyyuYbJQLqBWIVZLD9vzyU/Pm0uavJ32/fbuumavh8PdpVML5t3V9b",
+ "X0x1+or7eYXDtKG1lzMk0/Vs9ldCJ9ivh4FBCapkZCd+kccrHay0jAbibS2LcdgIwHUpJTIMN85cqSI9",
+ "8bu3rwg1vuQ5mp1wo1kxDYkNcikKSfNtEuhquzJgEcvoYP99WLl6EVYotwolK1pOzU67CivlV6gnvEsV",
+ "U/GpvkbJVFx91NUbK20I6xZs1uSOdbCy0cWmdvBDkdWox0La2iq+S8zwuqbslhzJz9SHqXW+LHwWgilQ",
+ "N4Ic1CIIR8ZyVqS899Xu7t4jdAMDxwKMQdcBbFQBDZGeFkWUaw4BX1livvufiHRmROsFPhNSsZz8APqN",
+ "9AUDZ57fOieNkIYwRV1idiiW9y3YYtb24yYvTrfEouDCNWBzASpIrLqnSRa6fGF9hF2aD4cjuyZvLpha",
+ "WktHE2/VFisEa1imr4ZNqg8pD98rOXOeu8AD0InoPVa+OZhdNGAFJmRUFbyn34xpsMArcIkkcdXJyC3f",
+ "LhKRYpClljFIR4PqGy6wqATHSeT+rMtj/jIusOaQ+UlTh+h3/g+qcqzuSvVxiauo5MRQKMEKiQ1QE7Rj",
+ "VSCCA3V37EynF3CC6Bat8Pp723yrWqjuFpKQDNSyXXcN53wJha6diqnyNKKWlo51RNyzjhNtbRZ8iytg",
+ "OETMiF5pwxabx/rSDPdtJEG070bmet3dJJ2pfvmhU7LvqpObUtoLgRpnr7Zpf9Gl7KvabG2Er4eNH72f",
+ "1LBqoq8i85pVESxTWO1707h3MzVQnJxiTTcbB1E+E2+uAgFf9HDa74j86tv1VJ7eYWdFa3ZrqGF9+rbz",
+ "/qq4cmx773FSW44G22pRed+qvsJaNqygafhoQ5XB1E+6pOcgCHXBWDkYDqBZlmVwTLtX5HRqdZGkndPv",
+ "Jk8Uj2ObK+zgUmubrjCvTgu2P565EF3CINCnBf3Han15V7PmzyUXoQoXN9mFDOW6OTPylVrtc1quJlMu",
+ "uJ77+OB184G2weIw7G8NPvtMsD9TzbM1bP3a1tW3Cy59rfKzrxb6ifhiExCueZkViz5MgiBxlM61L5G9",
+ "nhXYz/5QNkHd2bHdQiyCT2mVyqh/p5mCCmGu42Lew+dDUlKtl1Ll/hEKI1cITo1/VUUS1qIVgAfHwhJh",
+ "vcW5MeXg8hI6aaJLDFIUMlOLodD/jZwwunDOHPxSH4zHUx904nLcrX7G7A7ykqqFS4aC9gGD4aDgGXNp",
+ "z26en49eXex3xl8ul6OZqEZSzcbuGz2elcXO/mh3xMRobhbYFIiborFaN12Em4PB/dHuaBd6fpRM0JIP",
+ "Dgb78BMm7gNmxrTk44v9cdbuGzFD9SIUGh/m0F/RNBtMWFrBnGkYbW9310OVCfielmXhSjbGH52PCWl7",
+ "y1rz5nyAvCbQhT3DRcjdRhL0XMmuGFM7mxbStNNq1tCZxmpHQ6ENTD3GC5GXkrs8z5lro98ZMKAiDHo5",
+ "TIN3DNUHY2eu9AL7JRf5n4NJc4SlFjcG7nSj0wS8X8pK1EWZYNiE1rLNKxa+yrqwejWxjuPQSnJpxeNS",
+ "SbiFoYG5l9yl6klFFlIx8uzVoW9siu6MSkPH8CVdgTfQ6iJ+OymiKKVOYArs3wSqgFH/WearrwaNVqV8",
+ "Aiy+patUzhsGsTmsDpdY94LJ0TdPRw23QHelvzUP7hAXCStElE65YHePpv5KCw4uSRpT03WIqUWnzq95",
+ "UY/v+6/XiNzIVPScKpbvOOcI6Pj9JHsMLx/ju9+Uao9ujT7/UxAmLDiiSKSKhm+tnxivME4vMUIF47Za",
+ "xEssd/wilF+hC+LlsDHWii6K5lhthXgTgbQR8RaaJl+wtOLR1RPWYuNpljEdLoZJtctKDBnKU4Q0BDd2",
+ "D7zeb0omnh4d+gz7opBL1KzP/AUKY6dJOoSekZJm5xbZ70U/ukP7pfFn6loUXY4/e4/R5TpKqHsSNfuE",
+ "/+3zgFtYuxJTpzX70QexkYJYvpJW2WmodHk5TE4Yeb36J2wTzIebV4trsF2dPr1OXDfNauvD5J2ub4Fr",
+ "3gJiKVGxTM4E14yYdv8tbN0R2hk17gXBFuCpfCEyobqu358oudTg+/DQd76OK6rozT1CMKR9Uu7p5pFa",
+ "w9KWEDjpl6jH9II1ojQ3I0sbUyT1v5hDWDWEXiCnbpHkg0S+bItuoB/Dkk1oWXq/VS4JJdOqKOryOH/f",
+ "k4X/3ZOK7+r4cQ/O/dVlqK9xaDZid7gi00rgdUAF9AbewKktAaSY9JogXERsvlNkD3FB5isWZt4EVTVb",
+ "yHchDdfcSJeA2+GFN6mvrVkQOPYqKx8RXe5aICvoXPg8KrfUt0ua8ID41klNkkRgE+oLeYFptTlTdO9G",
+ "THfY/7Mx3K/+7ia8NY85VtihrnGj1rHf7cBMNv+5kBPaqFiCJLKbxXNf3eMW8m2YZmgnvowzl0yLe4bM",
+ "7RmlYpVss94jJqE5+5wa7C2g+8pG9QY0vYGoPLZhrvOQZgDonuW08Pd33yc5zSOgEa2rRbsJHlG3ak6x",
+ "4nZzFkyyg8a8WFE5um220ejM209FANXI2HM5gNhrFppt86nVo0HOLKjJ5q4hLnx4d7gKnNvQHdwCfjuC",
+ "rHsnT6FdM7RIFTnRUoWLTRtkaLXd8Wf739/ogq1V7v21W9uo9n7AO6Npdy8P65GL+KzNOlwerb/prOcW",
+ "uDX4iRJ0m/d0uMtGU3jRW2BDD24RaEn7JLxU3wOXAGDRuSsOrqOC6vKtgVhPFQTsx/re4jYIP2MO7+V6",
+ "4Yhq2GaKDgnB/fS8qYb1w7fRrLhvONBmLy3p5e8FWq+c4Ecijy6F7IX8eNK86KZgmDbaRMNbtpAXrHEt",
+ "zm0i5EZka72VBFJOqtLasD8sXZ1nuMbnR9cmRAFEopS/AMctbT+fEUGzjJXQu48JozjTqDPBHdFuktuV",
+ "ee8E+1SyzLAc707retvsosJqXfcoe8gjECRodO35/jZ0dXMHfS1xgaK7hsCs7juTBuEZlQjB6b9LpIA8",
+ "CvTzvjux/B6ATHIJkdzk1ViNe8/WyBd0zwZSi5vH9MuXq5hibcMI7bDvgSj/ye29JqqvYfslB40v1V9D",
+ "QJqZOvuox2cEGt9xqNz45xaPjQKmlITsZNqBoxrWso3p+aC3wZwbbkl1EI6AmAd7e30VU76tf3NBLh4D",
+ "Ad7gIvfpfTp0swuK1bdnrWtIOugLrU36fWGO1noiDp3Z1nI/uBnrO2F5jVu+ekQxwpgzHRcS6Y5guWNS",
+ "l7p1Q/lTuILMbyGihm3EaXrHnojwzpux77Y7xpLaNYyw2aT+hjzozUlSLrK4Ja3PdSCuY/ftecaSTcZT",
+ "gSTfaBvuk3DdwCN3O/LA3Sc3T4BhJbRQjOYr157AMeEHN7+AE+jmuLT/QeyBr13MIE5KznQLonXf2jO8",
+ "gn1WKUYAlOAUlYLdcjSiah3h1gl+hncA0LoVO8bE9GpRcHEeLoaG6xgQAhhiMRgidECpNN40WBuM2GgW",
+ "KwNdW1bXNSKjRYExWq6jkEXNHBCo7RCbWxAlOj5MsJjG1RBUMbqWZ8TdhbflHDFmb5SLpDpcb8tQvgEv",
+ "STZ4Tq03NKyCW28kqEgxIoa+5tVH711HZNzi3Toy0EC8vn0hhoFrS+8u1pfKaHfwEVPWDHUb20jwTzFD",
+ "J75k2OWhtQYM19P5JApshI2rqNkO3spmeFHUS+ieEhh2/Nk3Sb8cf4Zf+D/WePvjfslSsWeOFltK29bt",
+ "7+HGxq6G51+9UpBg2L1NtW5A4TtHh94TiVn97reZtb4N4cONH7xOj+wtbec7dYjiGqm6l3eyq3sjCyg6",
+ "L+uYd6DI/9zEOEwZqo6p8GYnbHe3Ts6mTJHQKh4lNUADZP77wd7uT+8HgbDq1gjQWxdc0qZSwl/AWG9P",
+ "Bz0O0zZCb/4OwjFNEW5zxEsc5YJJwQgrNIxTd0RILROoBQA4ZxRTsB0I/8cOTrPzjIqd53afO+9ggEEC",
+ "htHFdykYSsVnXNAC5rTjw1V72HKhkHGLhnCHATehdQIX7g4CHnNt6KIQ7jWhglAOb+RsUuHdUlvs7Y1b",
+ "2M5Lt7DBxkDqNvqMzAwzO9ooRhdNDhFM6wkX9nwPNyfSPsM5dOvik2v4arwa2nXT7O3+tOl1R44NQnQs",
+ "B2yM+4+TIyj3uTUHIDGATJhZMkfsDpxRqNLHLwnNTOUoxjVDUh2+E1RnT8tg7DxM9H5oNK3fcGr9CaxP",
+ "jiO8UsnMtSnAu3bD/JNV49yhRnHWe4QOCNwu6aouhfETeFcc7uSuSCCQDC4Tq1/ukN8kpBC6nvGNh3A+",
+ "p1JlfFKsSFZI1xbml5OTI5JJIRikEPp2axLKgh3jdaW8uoEvRtgnmhmi6YI5TdJIaOdiP8llZZU8/ECP",
+ "3guPVcxqxNPkaGHCUhggE5mvekVpnDhpp6itiy5YYs0RPDbjz64b1oYAuutEvEVOSGiudTc9erCRHmc0",
+ "1muLqbyj3rpmm7c1PrnEF2swP3Y9hNZj33el+16IwO9nHS1AnzlPDz0x+LbGBB/OqSYCWiuRFTN3i5zi",
+ "oFmnpR+mkS0Y1l7i3jcEFVzlTCtSFvrKbyA84y7Y2Eh8J/bFu0N8hn0y47KgXFyxEumkDZzvha6iUD7V",
+ "hkzZMro9YB7fvbEV94o/CeP5vmZrqWq7QGvUpuxWqerreyA7zSK/+1grisDvINiKPQAhB2JBV+iGZ9Mp",
+ "y4xXaz/KiR+BarJkReHe9x54C7cFo66Qal4tqNCYtgfKKYTlLjjtFneNXGsRDX5d6JrjTxTm4MDBqs/V",
+ "GeFCG0bzVl1h1NKkt2IwNBi7MZHuc0X9VNduOxGSTi/qjixxpd36iqJn0Y1FlXZdbYIL2F/nj9ZksSK0",
+ "ni6hoSMadhYzM446ovVLyvoumxsDc9TWLQHhv4A57tfanx8cNX7zsKz3mk7E8Z96mm1Y/qn+HV3gjT+7",
+ "pjYbrZ3Qpm+zXAhD3lllN7S27qDLtxbaMnV4GbpAbUSaRXbODHQ69i1/giK9HYa2EeOOyXY7Lt026m6g",
+ "aLS/i9RdkO53RPD2EuB24tdTdIcox9ifiqmduoV8Hwnii4Fl3BwxNLpS9h9nQD0u6lYjyx4SLO/nOB0R",
+ "fHf8in75zrVYXz7UILUOmdUosdKp/lIniErzmdiR0+kau4TPxJvpdLDNCb17sHRd5IDfNvrH/Q1ayNZg",
+ "e03Vedw4jlrNHrtEbgD4M1oU6OH2ioCRpHCqm6/DtboBXDd5TzEyg4xxN/yoFytiA1LEjR5tN0X/oQ7X",
+ "4Nzmie62Rf2nONJbk+HTysyZMNiy3fVystTg3e99Cs8X0yQGr4yEGdDp1uibz2uEJynWuOTJpAYbYW3w",
+ "rYkDVuplb93uts/rJaAFV88Xd5uqrk4hPisotJ1VGGkXqx4g9JLCThb1B06ysEQv4ZtWW8NEqQyXICZx",
+ "q9dTUf+JOc/v8dWO6Ahjzq+T+UAgqNyWbRQsxxJMTLZxHGWn6Ufz5AI9ibmokzwcl2Fqp5AZLYDB0UJ/",
+ "ba52wRq7qXSKWo27yaxHzmZzllcFc7HGmyt41hYGLO8NBbqLZkIvjz529Zt0/rU6lS/UAv1emxYPdve/",
+ "XhaZI7FewjxiyrcVec4ER9bpcr7T1j+6XZ3IwzuNkKKGREv/mBaFXPqruwEsbutwPSMRcumcvvu3K2D8",
+ "QaIC8pjQVxRd2jupDGY5zyTcoOyi+XjgrnhonSeKhvEjaGw6TUBT2hG4Snd8SXpd+49LdEnPdxDAcDvp",
+ "O45ON4qak18/6ciN1Y1YpE5JnRegCXWMI6YkX32rpcsBCmPDsfkmPpMvFE5R/y139fiq5Bn4q+M7jkol",
+ "Z4ppPSTu0jNozCUVmVJeVIptlDBermgm8oav0YLbj24ZmVWNNp+U8YKudviOqvpDEa/pyrlSKvFdJDK8",
+ "pqu/MFa+dZ3hvy/zDIOFTo2pM14jjTm4lnUsoFQlyJicM1b6lvnxfVvuRrEiXHavCSV4Q1+sk9b35TXy",
+ "rtYSckejB2MvWllrTeHOzo2kjffr7pRK5lW2TtG3zPINvHzk370TwgFKpccfSza7agaqu+14XIrZt0pe",
+ "3dsyeRW0P5eW6fswPbh//+YP2ismZmYeCr7+hKFzzFjMeY49ZS2XpcSBYMd9grnIbqX7N7/SI7qCHEUj",
+ "JSmocj3THtx/eBuRhHBFEHnNck7JyapkQ4AVkBhBivLK5CSk2NaNVeNA44O9J7dSxxhy/lFSAuuQcH3E",
+ "iuD12i5tC1NIzVxJYwrmLkj9p9I8MLfXAnohtSGKZZjxHDouwH5RH4gyfDkApyp9OLgOhDChK8VC3B20",
+ "d4dlg1c05nzGNHbcb+GYPAsZ11AfcfTbzwDnX49e/EwcKdlBy4IKES732VrhMfNqMRGUF3oMFz+ypWdL",
+ "XGGfCc/tCXJ/rwYBRNWF5+Z4G8l4EDmhNtwb3Olb6SkliANIbOgWT/wqJ95NCjra3yumuCW/upflsNU1",
+ "atQo9deJQZ8eHTa7acYuMrlYVMJdqcnNPNmJuxHNTUzgqOF1WBOBdtq9DY+xu6Ddhj0rShZ+RZ3JIO6Y",
+ "KA/ClOswC8iJOl/cQRDqs+2/P8pJqIKN53Ap3pcfLv9/AAAA//9kRaFsPsgAAA==",
}
// 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 852fc228..20f5ab70 100644
--- a/pkg/api/openapi_types.gen.go
+++ b/pkg/api/openapi_types.gen.go
@@ -603,6 +603,18 @@ type Task struct {
Worker *TaskWorker `json:"worker,omitempty"`
}
+// Info about the log of a single task.
+type TaskLogInfo struct {
+ JobId string `json:"job_id"`
+
+ // The size of the task log, in bytes.
+ Size int `json:"size"`
+ TaskId string `json:"task_id"`
+
+ // The URL at which the task log itself can be downloaded.
+ Url string `json:"url"`
+}
+
// TaskStatus defines model for TaskStatus.
type TaskStatus string
diff --git a/web/app/src/manager-api/ApiClient.js b/web/app/src/manager-api/ApiClient.js
index 97027e55..305417ea 100644
--- a/web/app/src/manager-api/ApiClient.js
+++ b/web/app/src/manager-api/ApiClient.js
@@ -55,7 +55,7 @@ class ApiClient {
* @default {}
*/
this.defaultHeaders = {
- 'User-Agent': 'Flamenco/7521bff1 / webbrowser'
+ 'User-Agent': 'Flamenco/d170cda3 / webbrowser'
};
/**
diff --git a/web/app/src/manager-api/index.js b/web/app/src/manager-api/index.js
index cce8d4cc..3e216e28 100644
--- a/web/app/src/manager-api/index.js
+++ b/web/app/src/manager-api/index.js
@@ -60,6 +60,7 @@ import SocketIOTaskUpdate from './model/SocketIOTaskUpdate';
import SocketIOWorkerUpdate from './model/SocketIOWorkerUpdate';
import SubmittedJob from './model/SubmittedJob';
import Task from './model/Task';
+import TaskLogInfo from './model/TaskLogInfo';
import TaskStatus from './model/TaskStatus';
import TaskStatusChange from './model/TaskStatusChange';
import TaskSummary from './model/TaskSummary';
@@ -403,6 +404,12 @@ export {
*/
Task,
+ /**
+ * The TaskLogInfo model constructor.
+ * @property {module:model/TaskLogInfo}
+ */
+ TaskLogInfo,
+
/**
* The TaskStatus model constructor.
* @property {module:model/TaskStatus}
diff --git a/web/app/src/manager-api/manager/JobsApi.js b/web/app/src/manager-api/manager/JobsApi.js
index 3ddead91..c127a1e1 100644
--- a/web/app/src/manager-api/manager/JobsApi.js
+++ b/web/app/src/manager-api/manager/JobsApi.js
@@ -25,6 +25,7 @@ import JobsQuery from '../model/JobsQuery';
import JobsQueryResult from '../model/JobsQueryResult';
import SubmittedJob from '../model/SubmittedJob';
import Task from '../model/Task';
+import TaskLogInfo from '../model/TaskLogInfo';
import TaskStatusChange from '../model/TaskStatusChange';
/**
@@ -317,15 +318,15 @@ export default class JobsApi {
/**
- * Fetch the entire task log.
+ * Get the URL of the task log, and some more info.
* @param {String} taskId
- * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with an object containing data of type {@link String} and HTTP response
+ * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with an object containing data of type {@link module:model/TaskLogInfo} and HTTP response
*/
- fetchTaskLogWithHttpInfo(taskId) {
+ fetchTaskLogInfoWithHttpInfo(taskId) {
let postBody = null;
// verify the required parameter 'taskId' is set
if (taskId === undefined || taskId === null) {
- throw new Error("Missing the required parameter 'taskId' when calling fetchTaskLog");
+ throw new Error("Missing the required parameter 'taskId' when calling fetchTaskLogInfo");
}
let pathParams = {
@@ -340,8 +341,8 @@ export default class JobsApi {
let authNames = [];
let contentTypes = [];
- let accepts = ['text/plain', 'application/json'];
- let returnType = 'String';
+ let accepts = ['application/json'];
+ let returnType = TaskLogInfo;
return this.apiClient.callApi(
'/api/v3/tasks/{task_id}/log', 'GET',
pathParams, queryParams, headerParams, formParams, postBody,
@@ -350,12 +351,12 @@ export default class JobsApi {
}
/**
- * Fetch the entire task log.
+ * Get the URL of the task log, and some more info.
* @param {String} taskId
- * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with data of type {@link String}
+ * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with data of type {@link module:model/TaskLogInfo}
*/
- fetchTaskLog(taskId) {
- return this.fetchTaskLogWithHttpInfo(taskId)
+ fetchTaskLogInfo(taskId) {
+ return this.fetchTaskLogInfoWithHttpInfo(taskId)
.then(function(response_and_data) {
return response_and_data.data;
});
diff --git a/web/app/src/manager-api/model/TaskLogInfo.js b/web/app/src/manager-api/model/TaskLogInfo.js
new file mode 100644
index 00000000..0d9cdb29
--- /dev/null
+++ b/web/app/src/manager-api/model/TaskLogInfo.js
@@ -0,0 +1,106 @@
+/**
+ * Flamenco manager
+ * Render Farm manager API
+ *
+ * The version of the OpenAPI document: 1.0.0
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ *
+ */
+
+import ApiClient from '../ApiClient';
+
+/**
+ * The TaskLogInfo model module.
+ * @module model/TaskLogInfo
+ * @version 0.0.0
+ */
+class TaskLogInfo {
+ /**
+ * Constructs a new TaskLogInfo
.
+ * Info about the log of a single task.
+ * @alias module:model/TaskLogInfo
+ * @param taskId {String}
+ * @param jobId {String}
+ * @param url {String} The URL at which the task log itself can be downloaded.
+ * @param size {Number} The size of the task log, in bytes.
+ */
+ constructor(taskId, jobId, url, size) {
+
+ TaskLogInfo.initialize(this, taskId, jobId, url, size);
+ }
+
+ /**
+ * Initializes the fields of this object.
+ * This method is used by the constructors of any subclasses, in order to implement multiple inheritance (mix-ins).
+ * Only for internal use.
+ */
+ static initialize(obj, taskId, jobId, url, size) {
+ obj['task_id'] = taskId;
+ obj['job_id'] = jobId;
+ obj['url'] = url;
+ obj['size'] = size;
+ }
+
+ /**
+ * Constructs a TaskLogInfo
from a plain JavaScript object, optionally creating a new instance.
+ * Copies all relevant properties from data
to obj
if supplied or a new instance if not.
+ * @param {Object} data The plain JavaScript object bearing properties of interest.
+ * @param {module:model/TaskLogInfo} obj Optional instance to populate.
+ * @return {module:model/TaskLogInfo} The populated TaskLogInfo
instance.
+ */
+ static constructFromObject(data, obj) {
+ if (data) {
+ obj = obj || new TaskLogInfo();
+
+ if (data.hasOwnProperty('task_id')) {
+ obj['task_id'] = ApiClient.convertToType(data['task_id'], 'String');
+ }
+ if (data.hasOwnProperty('job_id')) {
+ obj['job_id'] = ApiClient.convertToType(data['job_id'], 'String');
+ }
+ if (data.hasOwnProperty('url')) {
+ obj['url'] = ApiClient.convertToType(data['url'], 'String');
+ }
+ if (data.hasOwnProperty('size')) {
+ obj['size'] = ApiClient.convertToType(data['size'], 'Number');
+ }
+ }
+ return obj;
+ }
+
+
+}
+
+/**
+ * @member {String} task_id
+ */
+TaskLogInfo.prototype['task_id'] = undefined;
+
+/**
+ * @member {String} job_id
+ */
+TaskLogInfo.prototype['job_id'] = undefined;
+
+/**
+ * The URL at which the task log itself can be downloaded.
+ * @member {String} url
+ */
+TaskLogInfo.prototype['url'] = undefined;
+
+/**
+ * The size of the task log, in bytes.
+ * @member {Number} size
+ */
+TaskLogInfo.prototype['size'] = undefined;
+
+
+
+
+
+
+export default TaskLogInfo;
+