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=", + "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", } // 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; +