WIP: Support pausing jobs and allow jobs to be submitted in paused status #104312

Closed
David Zhang wants to merge 2 commits from David-Zhang-10/flamenco:paused-job-status into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
22 changed files with 555 additions and 398 deletions

View File

@ -18,6 +18,7 @@ Name | Type | Description | Notes
**metadata** | [**JobMetadata**](JobMetadata.md) | | [optional]
**storage** | [**JobStorageInfo**](JobStorageInfo.md) | | [optional]
**worker_tag** | **str** | Worker tag that should execute this job. When a tag ID is given, only Workers in that tag will be scheduled to work on it. If empty or ommitted, all workers can work on this job. | [optional]
**submit_as_paused** | **bool** | Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention. | [optional] if omitted the server will use the default value of False
**delete_requested_at** | **datetime** | If job deletion was requested, this is the timestamp at which that request was stored on Flamenco Manager. | [optional]
**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]

View File

@ -4,7 +4,7 @@
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**value** | **str** | | must be one of ["active", "canceled", "completed", "failed", "paused", "queued", "cancel-requested", "requeueing", "under-construction", ]
**value** | **str** | | must be one of ["active", "canceled", "completed", "failed", "paused", "pause-requested", "queued", "cancel-requested", "requeueing", "under-construction", ]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@ -1296,6 +1296,7 @@ with flamenco.manager.ApiClient() as api_client:
shaman_checkout_id="shaman_checkout_id_example",
),
worker_tag="worker_tag_example",
submit_as_paused=False,
) # SubmittedJob | Job to submit
# example passing only required values which don't have defaults set
@ -1332,7 +1333,7 @@ No authorization required
| Status code | Description | Response headers |
|-------------|-------------|------------------|
**200** | Job was succesfully compiled into individual tasks. | - |
**200** | Job was successfully compiled into individual tasks. | - |
**412** | The given job type etag does not match the job type etag on the Manager. This is likely due to the client caching the job type for too long. | - |
**0** | Error message | - |
@ -1378,6 +1379,7 @@ with flamenco.manager.ApiClient() as api_client:
shaman_checkout_id="shaman_checkout_id_example",
),
worker_tag="worker_tag_example",
submit_as_paused=False,
) # SubmittedJob | Job to check
# example passing only required values which don't have defaults set

View File

@ -14,6 +14,7 @@ Name | Type | Description | Notes
**metadata** | [**JobMetadata**](JobMetadata.md) | | [optional]
**storage** | [**JobStorageInfo**](JobStorageInfo.md) | | [optional]
**worker_tag** | **str** | Worker tag that should execute this job. When a tag ID is given, only Workers in that tag will be scheduled to work on it. If empty or ommitted, all workers can work on this job. | [optional]
**submit_as_paused** | **bool** | Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention. | [optional] if omitted the server will use the default value of False
**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)

View File

@ -111,6 +111,7 @@ class Job(ModelComposed):
'metadata': (JobMetadata,), # noqa: E501
'storage': (JobStorageInfo,), # noqa: E501
'worker_tag': (str,), # noqa: E501
'submit_as_paused': (bool,), # noqa: E501
'delete_requested_at': (datetime,), # noqa: E501
}
@ -134,6 +135,7 @@ class Job(ModelComposed):
'metadata': 'metadata', # noqa: E501
'storage': 'storage', # noqa: E501
'worker_tag': 'worker_tag', # noqa: E501
'submit_as_paused': 'submit_as_paused', # noqa: E501
'delete_requested_at': 'delete_requested_at', # noqa: E501
}
@ -190,6 +192,7 @@ class Job(ModelComposed):
metadata (JobMetadata): [optional] # noqa: E501
storage (JobStorageInfo): [optional] # noqa: E501
worker_tag (str): Worker tag that should execute this job. When a tag ID is given, only Workers in that tag will be scheduled to work on it. If empty or ommitted, all workers can work on this job. . [optional] # noqa: E501
submit_as_paused (bool): Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention. . [optional] if omitted the server will use the default value of False # noqa: E501
delete_requested_at (datetime): If job deletion was requested, this is the timestamp at which that request was stored on Flamenco Manager. . [optional] # noqa: E501
"""
@ -305,6 +308,7 @@ class Job(ModelComposed):
metadata (JobMetadata): [optional] # noqa: E501
storage (JobStorageInfo): [optional] # noqa: E501
worker_tag (str): Worker tag that should execute this job. When a tag ID is given, only Workers in that tag will be scheduled to work on it. If empty or ommitted, all workers can work on this job. . [optional] # noqa: E501
submit_as_paused (bool): Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention. . [optional] if omitted the server will use the default value of False # noqa: E501
delete_requested_at (datetime): If job deletion was requested, this is the timestamp at which that request was stored on Flamenco Manager. . [optional] # noqa: E501
"""

View File

@ -57,6 +57,7 @@ class JobStatus(ModelSimple):
'COMPLETED': "completed",
'FAILED': "failed",
'PAUSED': "paused",
'PAUSE-REQUESTED': "pause-requested",
'QUEUED': "queued",
'CANCEL-REQUESTED': "cancel-requested",
'REQUEUEING': "requeueing",
@ -112,10 +113,10 @@ class JobStatus(ModelSimple):
Note that value can be passed either in args or in kwargs, but not in both.
Args:
args[0] (str):, must be one of ["active", "canceled", "completed", "failed", "paused", "queued", "cancel-requested", "requeueing", "under-construction", ] # noqa: E501
args[0] (str):, must be one of ["active", "canceled", "completed", "failed", "paused", "pause-requested", "queued", "cancel-requested", "requeueing", "under-construction", ] # noqa: E501
Keyword Args:
value (str):, must be one of ["active", "canceled", "completed", "failed", "paused", "queued", "cancel-requested", "requeueing", "under-construction", ] # noqa: E501
value (str):, must be one of ["active", "canceled", "completed", "failed", "paused", "pause-requested", "queued", "cancel-requested", "requeueing", "under-construction", ] # noqa: E501
_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.
@ -202,10 +203,10 @@ class JobStatus(ModelSimple):
Note that value can be passed either in args or in kwargs, but not in both.
Args:
args[0] (str):, must be one of ["active", "canceled", "completed", "failed", "paused", "queued", "cancel-requested", "requeueing", "under-construction", ] # noqa: E501
args[0] (str):, must be one of ["active", "canceled", "completed", "failed", "paused", "pause-requested", "queued", "cancel-requested", "requeueing", "under-construction", ] # noqa: E501
Keyword Args:
value (str):, must be one of ["active", "canceled", "completed", "failed", "paused", "queued", "cancel-requested", "requeueing", "under-construction", ] # noqa: E501
value (str):, must be one of ["active", "canceled", "completed", "failed", "paused", "pause-requested", "queued", "cancel-requested", "requeueing", "under-construction", ] # noqa: E501
_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.

View File

@ -100,6 +100,7 @@ class SubmittedJob(ModelNormal):
'metadata': (JobMetadata,), # noqa: E501
'storage': (JobStorageInfo,), # noqa: E501
'worker_tag': (str,), # noqa: E501
'submit_as_paused': (bool,), # noqa: E501
}
@cached_property
@ -117,6 +118,7 @@ class SubmittedJob(ModelNormal):
'metadata': 'metadata', # noqa: E501
'storage': 'storage', # noqa: E501
'worker_tag': 'worker_tag', # noqa: E501
'submit_as_paused': 'submit_as_paused', # noqa: E501
}
read_only_vars = {
@ -171,6 +173,7 @@ class SubmittedJob(ModelNormal):
metadata (JobMetadata): [optional] # noqa: E501
storage (JobStorageInfo): [optional] # noqa: E501
worker_tag (str): Worker tag that should execute this job. When a tag ID is given, only Workers in that tag will be scheduled to work on it. If empty or ommitted, all workers can work on this job. . [optional] # noqa: E501
submit_as_paused (bool): Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention. . [optional] if omitted the server will use the default value of False # noqa: E501
"""
priority = kwargs.get('priority', 50)
@ -268,6 +271,7 @@ class SubmittedJob(ModelNormal):
metadata (JobMetadata): [optional] # noqa: E501
storage (JobStorageInfo): [optional] # noqa: E501
worker_tag (str): Worker tag that should execute this job. When a tag ID is given, only Workers in that tag will be scheduled to work on it. If empty or ommitted, all workers can work on this job. . [optional] # noqa: E501
submit_as_paused (bool): Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention. . [optional] if omitted the server will use the default value of False # noqa: E501
"""
priority = kwargs.get('priority', 50)

View File

@ -76,152 +76,152 @@ All URIs are relative to *http://localhost*
Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
*JobsApi* | [**delete_job**](flamenco\manager\docs/JobsApi.md#delete_job) | **DELETE** /api/v3/jobs/{job_id} | Request deletion this job, including its tasks and any log files. The actual deletion may happen in the background. No job files will be deleted (yet).
*JobsApi* | [**delete_job_mass**](flamenco\manager\docs/JobsApi.md#delete_job_mass) | **DELETE** /api/v3/jobs/mass-delete | Mark jobs for deletion, based on certain criteria.
*JobsApi* | [**delete_job_what_would_it_do**](flamenco\manager\docs/JobsApi.md#delete_job_what_would_it_do) | **GET** /api/v3/jobs/{job_id}/what-would-delete-do | Get info about what would be deleted when deleting this job. The job itself, its logs, and the last-rendered images will always be deleted. The job files are only deleted conditionally, and this operation can be used to figure that out.
*JobsApi* | [**fetch_global_last_rendered_info**](flamenco\manager\docs/JobsApi.md#fetch_global_last_rendered_info) | **GET** /api/v3/jobs/last-rendered | Get the URL that serves the last-rendered images.
*JobsApi* | [**fetch_job**](flamenco\manager\docs/JobsApi.md#fetch_job) | **GET** /api/v3/jobs/{job_id} | Fetch info about the job.
*JobsApi* | [**fetch_job_blocklist**](flamenco\manager\docs/JobsApi.md#fetch_job_blocklist) | **GET** /api/v3/jobs/{job_id}/blocklist | Fetch the list of workers that are blocked from doing certain task types on this job.
*JobsApi* | [**fetch_job_last_rendered_info**](flamenco\manager\docs/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.
*JobsApi* | [**fetch_job_tasks**](flamenco\manager\docs/JobsApi.md#fetch_job_tasks) | **GET** /api/v3/jobs/{job_id}/tasks | Fetch a summary of all tasks of the given job.
*JobsApi* | [**fetch_task**](flamenco\manager\docs/JobsApi.md#fetch_task) | **GET** /api/v3/tasks/{task_id} | Fetch a single task.
*JobsApi* | [**fetch_task_log_info**](flamenco\manager\docs/JobsApi.md#fetch_task_log_info) | **GET** /api/v3/tasks/{task_id}/log | Get the URL of the task log, and some more info.
*JobsApi* | [**fetch_task_log_tail**](flamenco\manager\docs/JobsApi.md#fetch_task_log_tail) | **GET** /api/v3/tasks/{task_id}/logtail | Fetch the last few lines of the task's log.
*JobsApi* | [**get_job_type**](flamenco\manager\docs/JobsApi.md#get_job_type) | **GET** /api/v3/jobs/type/{typeName} | Get single job type and its parameters.
*JobsApi* | [**get_job_types**](flamenco\manager\docs/JobsApi.md#get_job_types) | **GET** /api/v3/jobs/types | Get list of job types and their parameters.
*JobsApi* | [**query_jobs**](flamenco\manager\docs/JobsApi.md#query_jobs) | **POST** /api/v3/jobs/query | Fetch list of jobs.
*JobsApi* | [**remove_job_blocklist**](flamenco\manager\docs/JobsApi.md#remove_job_blocklist) | **DELETE** /api/v3/jobs/{job_id}/blocklist | Remove entries from a job blocklist.
*JobsApi* | [**set_job_priority**](flamenco\manager\docs/JobsApi.md#set_job_priority) | **POST** /api/v3/jobs/{job_id}/setpriority |
*JobsApi* | [**set_job_status**](flamenco\manager\docs/JobsApi.md#set_job_status) | **POST** /api/v3/jobs/{job_id}/setstatus |
*JobsApi* | [**set_task_status**](flamenco\manager\docs/JobsApi.md#set_task_status) | **POST** /api/v3/tasks/{task_id}/setstatus |
*JobsApi* | [**submit_job**](flamenco\manager\docs/JobsApi.md#submit_job) | **POST** /api/v3/jobs | Submit a new job for Flamenco Manager to execute.
*JobsApi* | [**submit_job_check**](flamenco\manager\docs/JobsApi.md#submit_job_check) | **POST** /api/v3/jobs/check | Submit a new job for Flamenco Manager to check.
*MetaApi* | [**check_blender_exe_path**](flamenco\manager\docs/MetaApi.md#check_blender_exe_path) | **POST** /api/v3/configuration/check/blender | Validate a CLI command for use as way to start Blender
*MetaApi* | [**check_shared_storage_path**](flamenco\manager\docs/MetaApi.md#check_shared_storage_path) | **POST** /api/v3/configuration/check/shared-storage | Validate a path for use as shared storage.
*MetaApi* | [**find_blender_exe_path**](flamenco\manager\docs/MetaApi.md#find_blender_exe_path) | **GET** /api/v3/configuration/check/blender | Find one or more CLI commands for use as way to start Blender
*MetaApi* | [**get_configuration**](flamenco\manager\docs/MetaApi.md#get_configuration) | **GET** /api/v3/configuration | Get the configuration of this Manager.
*MetaApi* | [**get_configuration_file**](flamenco\manager\docs/MetaApi.md#get_configuration_file) | **GET** /api/v3/configuration/file | Retrieve the configuration of Flamenco Manager.
*MetaApi* | [**get_farm_status**](flamenco\manager\docs/MetaApi.md#get_farm_status) | **GET** /api/v3/status | Get the status of this Flamenco farm.
*MetaApi* | [**get_shared_storage**](flamenco\manager\docs/MetaApi.md#get_shared_storage) | **GET** /api/v3/configuration/shared-storage/{audience}/{platform} | Get the shared storage location of this Manager, adjusted for the given audience and platform.
*MetaApi* | [**get_variables**](flamenco\manager\docs/MetaApi.md#get_variables) | **GET** /api/v3/configuration/variables/{audience}/{platform} | Get the variables of this Manager. Used by the Blender add-on to recognise two-way variables, and for the web interface to do variable replacement based on the browser's platform.
*MetaApi* | [**get_version**](flamenco\manager\docs/MetaApi.md#get_version) | **GET** /api/v3/version | Get the Flamenco version of this Manager
*MetaApi* | [**save_setup_assistant_config**](flamenco\manager\docs/MetaApi.md#save_setup_assistant_config) | **POST** /api/v3/configuration/setup-assistant | Update the Manager's configuration, and restart it in fully functional mode.
*ShamanApi* | [**shaman_checkout**](flamenco\manager\docs/ShamanApi.md#shaman_checkout) | **POST** /api/v3/shaman/checkout/create | Create a directory, and symlink the required files into it. The files must all have been uploaded to Shaman before calling this endpoint.
*ShamanApi* | [**shaman_checkout_requirements**](flamenco\manager\docs/ShamanApi.md#shaman_checkout_requirements) | **POST** /api/v3/shaman/checkout/requirements | Checks a Shaman Requirements file, and reports which files are unknown.
*ShamanApi* | [**shaman_file_store**](flamenco\manager\docs/ShamanApi.md#shaman_file_store) | **POST** /api/v3/shaman/files/{checksum}/{filesize} | Store a new file on the Shaman server. Note that the Shaman server can forcibly close the HTTP connection when another client finishes uploading the exact same file, to prevent double uploads. The file's contents should be sent in the request body.
*ShamanApi* | [**shaman_file_store_check**](flamenco\manager\docs/ShamanApi.md#shaman_file_store_check) | **GET** /api/v3/shaman/files/{checksum}/{filesize} | Check the status of a file on the Shaman server.
*WorkerApi* | [**may_worker_run**](flamenco\manager\docs/WorkerApi.md#may_worker_run) | **GET** /api/v3/worker/task/{task_id}/may-i-run | The response indicates whether the worker is allowed to run / keep running the task. Optionally contains a queued worker status change.
*WorkerApi* | [**register_worker**](flamenco\manager\docs/WorkerApi.md#register_worker) | **POST** /api/v3/worker/register-worker | Register a new worker
*WorkerApi* | [**schedule_task**](flamenco\manager\docs/WorkerApi.md#schedule_task) | **POST** /api/v3/worker/task | Obtain a new task to execute
*WorkerApi* | [**sign_off**](flamenco\manager\docs/WorkerApi.md#sign_off) | **POST** /api/v3/worker/sign-off | Mark the worker as offline
*WorkerApi* | [**sign_on**](flamenco\manager\docs/WorkerApi.md#sign_on) | **POST** /api/v3/worker/sign-on | Authenticate & sign in the worker.
*WorkerApi* | [**task_output_produced**](flamenco\manager\docs/WorkerApi.md#task_output_produced) | **POST** /api/v3/worker/task/{task_id}/output-produced | Store the most recently rendered frame here. Note that it is up to the Worker to ensure this is in a format that's digestable by the Manager. Currently only PNG and JPEG support is planned.
*WorkerApi* | [**task_update**](flamenco\manager\docs/WorkerApi.md#task_update) | **POST** /api/v3/worker/task/{task_id} | Update the task, typically to indicate progress, completion, or failure.
*WorkerApi* | [**worker_state**](flamenco\manager\docs/WorkerApi.md#worker_state) | **GET** /api/v3/worker/state |
*WorkerApi* | [**worker_state_changed**](flamenco\manager\docs/WorkerApi.md#worker_state_changed) | **POST** /api/v3/worker/state-changed | Worker changed state. This could be as acknowledgement of a Manager-requested state change, or in response to worker-local signals.
*WorkerMgtApi* | [**create_worker_tag**](flamenco\manager\docs/WorkerMgtApi.md#create_worker_tag) | **POST** /api/v3/worker-mgt/tags | Create a new worker tag.
*WorkerMgtApi* | [**delete_worker**](flamenco\manager\docs/WorkerMgtApi.md#delete_worker) | **DELETE** /api/v3/worker-mgt/workers/{worker_id} | Remove the given worker. It is recommended to only call this function when the worker is in `offline` state. If the worker is still running, stop it first. Any task still assigned to the worker will be requeued.
*WorkerMgtApi* | [**delete_worker_tag**](flamenco\manager\docs/WorkerMgtApi.md#delete_worker_tag) | **DELETE** /api/v3/worker-mgt/tag/{tag_id} | Remove this worker tag. This unassigns all workers from the tag and removes it.
*WorkerMgtApi* | [**fetch_worker**](flamenco\manager\docs/WorkerMgtApi.md#fetch_worker) | **GET** /api/v3/worker-mgt/workers/{worker_id} | Fetch info about the worker.
*WorkerMgtApi* | [**fetch_worker_sleep_schedule**](flamenco\manager\docs/WorkerMgtApi.md#fetch_worker_sleep_schedule) | **GET** /api/v3/worker-mgt/workers/{worker_id}/sleep-schedule |
*WorkerMgtApi* | [**fetch_worker_tag**](flamenco\manager\docs/WorkerMgtApi.md#fetch_worker_tag) | **GET** /api/v3/worker-mgt/tag/{tag_id} | Get a single worker tag.
*WorkerMgtApi* | [**fetch_worker_tags**](flamenco\manager\docs/WorkerMgtApi.md#fetch_worker_tags) | **GET** /api/v3/worker-mgt/tags | Get list of worker tags.
*WorkerMgtApi* | [**fetch_workers**](flamenco\manager\docs/WorkerMgtApi.md#fetch_workers) | **GET** /api/v3/worker-mgt/workers | Get list of workers.
*WorkerMgtApi* | [**request_worker_status_change**](flamenco\manager\docs/WorkerMgtApi.md#request_worker_status_change) | **POST** /api/v3/worker-mgt/workers/{worker_id}/setstatus |
*WorkerMgtApi* | [**set_worker_sleep_schedule**](flamenco\manager\docs/WorkerMgtApi.md#set_worker_sleep_schedule) | **POST** /api/v3/worker-mgt/workers/{worker_id}/sleep-schedule |
*WorkerMgtApi* | [**set_worker_tags**](flamenco\manager\docs/WorkerMgtApi.md#set_worker_tags) | **POST** /api/v3/worker-mgt/workers/{worker_id}/settags |
*WorkerMgtApi* | [**update_worker_tag**](flamenco\manager\docs/WorkerMgtApi.md#update_worker_tag) | **PUT** /api/v3/worker-mgt/tag/{tag_id} | Update an existing worker tag.
*JobsApi* | [**delete_job**](flamenco/manager/docs/JobsApi.md#delete_job) | **DELETE** /api/v3/jobs/{job_id} | Request deletion this job, including its tasks and any log files. The actual deletion may happen in the background. No job files will be deleted (yet).
*JobsApi* | [**delete_job_mass**](flamenco/manager/docs/JobsApi.md#delete_job_mass) | **DELETE** /api/v3/jobs/mass-delete | Mark jobs for deletion, based on certain criteria.
*JobsApi* | [**delete_job_what_would_it_do**](flamenco/manager/docs/JobsApi.md#delete_job_what_would_it_do) | **GET** /api/v3/jobs/{job_id}/what-would-delete-do | Get info about what would be deleted when deleting this job. The job itself, its logs, and the last-rendered images will always be deleted. The job files are only deleted conditionally, and this operation can be used to figure that out.
*JobsApi* | [**fetch_global_last_rendered_info**](flamenco/manager/docs/JobsApi.md#fetch_global_last_rendered_info) | **GET** /api/v3/jobs/last-rendered | Get the URL that serves the last-rendered images.
*JobsApi* | [**fetch_job**](flamenco/manager/docs/JobsApi.md#fetch_job) | **GET** /api/v3/jobs/{job_id} | Fetch info about the job.
*JobsApi* | [**fetch_job_blocklist**](flamenco/manager/docs/JobsApi.md#fetch_job_blocklist) | **GET** /api/v3/jobs/{job_id}/blocklist | Fetch the list of workers that are blocked from doing certain task types on this job.
*JobsApi* | [**fetch_job_last_rendered_info**](flamenco/manager/docs/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.
*JobsApi* | [**fetch_job_tasks**](flamenco/manager/docs/JobsApi.md#fetch_job_tasks) | **GET** /api/v3/jobs/{job_id}/tasks | Fetch a summary of all tasks of the given job.
*JobsApi* | [**fetch_task**](flamenco/manager/docs/JobsApi.md#fetch_task) | **GET** /api/v3/tasks/{task_id} | Fetch a single task.
*JobsApi* | [**fetch_task_log_info**](flamenco/manager/docs/JobsApi.md#fetch_task_log_info) | **GET** /api/v3/tasks/{task_id}/log | Get the URL of the task log, and some more info.
*JobsApi* | [**fetch_task_log_tail**](flamenco/manager/docs/JobsApi.md#fetch_task_log_tail) | **GET** /api/v3/tasks/{task_id}/logtail | Fetch the last few lines of the task's log.
*JobsApi* | [**get_job_type**](flamenco/manager/docs/JobsApi.md#get_job_type) | **GET** /api/v3/jobs/type/{typeName} | Get single job type and its parameters.
*JobsApi* | [**get_job_types**](flamenco/manager/docs/JobsApi.md#get_job_types) | **GET** /api/v3/jobs/types | Get list of job types and their parameters.
*JobsApi* | [**query_jobs**](flamenco/manager/docs/JobsApi.md#query_jobs) | **POST** /api/v3/jobs/query | Fetch list of jobs.
*JobsApi* | [**remove_job_blocklist**](flamenco/manager/docs/JobsApi.md#remove_job_blocklist) | **DELETE** /api/v3/jobs/{job_id}/blocklist | Remove entries from a job blocklist.
*JobsApi* | [**set_job_priority**](flamenco/manager/docs/JobsApi.md#set_job_priority) | **POST** /api/v3/jobs/{job_id}/setpriority |
*JobsApi* | [**set_job_status**](flamenco/manager/docs/JobsApi.md#set_job_status) | **POST** /api/v3/jobs/{job_id}/setstatus |
*JobsApi* | [**set_task_status**](flamenco/manager/docs/JobsApi.md#set_task_status) | **POST** /api/v3/tasks/{task_id}/setstatus |
*JobsApi* | [**submit_job**](flamenco/manager/docs/JobsApi.md#submit_job) | **POST** /api/v3/jobs | Submit a new job for Flamenco Manager to execute.
*JobsApi* | [**submit_job_check**](flamenco/manager/docs/JobsApi.md#submit_job_check) | **POST** /api/v3/jobs/check | Submit a new job for Flamenco Manager to check.
*MetaApi* | [**check_blender_exe_path**](flamenco/manager/docs/MetaApi.md#check_blender_exe_path) | **POST** /api/v3/configuration/check/blender | Validate a CLI command for use as way to start Blender
*MetaApi* | [**check_shared_storage_path**](flamenco/manager/docs/MetaApi.md#check_shared_storage_path) | **POST** /api/v3/configuration/check/shared-storage | Validate a path for use as shared storage.
*MetaApi* | [**find_blender_exe_path**](flamenco/manager/docs/MetaApi.md#find_blender_exe_path) | **GET** /api/v3/configuration/check/blender | Find one or more CLI commands for use as way to start Blender
*MetaApi* | [**get_configuration**](flamenco/manager/docs/MetaApi.md#get_configuration) | **GET** /api/v3/configuration | Get the configuration of this Manager.
*MetaApi* | [**get_configuration_file**](flamenco/manager/docs/MetaApi.md#get_configuration_file) | **GET** /api/v3/configuration/file | Retrieve the configuration of Flamenco Manager.
*MetaApi* | [**get_farm_status**](flamenco/manager/docs/MetaApi.md#get_farm_status) | **GET** /api/v3/status | Get the status of this Flamenco farm.
*MetaApi* | [**get_shared_storage**](flamenco/manager/docs/MetaApi.md#get_shared_storage) | **GET** /api/v3/configuration/shared-storage/{audience}/{platform} | Get the shared storage location of this Manager, adjusted for the given audience and platform.
*MetaApi* | [**get_variables**](flamenco/manager/docs/MetaApi.md#get_variables) | **GET** /api/v3/configuration/variables/{audience}/{platform} | Get the variables of this Manager. Used by the Blender add-on to recognise two-way variables, and for the web interface to do variable replacement based on the browser's platform.
*MetaApi* | [**get_version**](flamenco/manager/docs/MetaApi.md#get_version) | **GET** /api/v3/version | Get the Flamenco version of this Manager
*MetaApi* | [**save_setup_assistant_config**](flamenco/manager/docs/MetaApi.md#save_setup_assistant_config) | **POST** /api/v3/configuration/setup-assistant | Update the Manager's configuration, and restart it in fully functional mode.
*ShamanApi* | [**shaman_checkout**](flamenco/manager/docs/ShamanApi.md#shaman_checkout) | **POST** /api/v3/shaman/checkout/create | Create a directory, and symlink the required files into it. The files must all have been uploaded to Shaman before calling this endpoint.
*ShamanApi* | [**shaman_checkout_requirements**](flamenco/manager/docs/ShamanApi.md#shaman_checkout_requirements) | **POST** /api/v3/shaman/checkout/requirements | Checks a Shaman Requirements file, and reports which files are unknown.
*ShamanApi* | [**shaman_file_store**](flamenco/manager/docs/ShamanApi.md#shaman_file_store) | **POST** /api/v3/shaman/files/{checksum}/{filesize} | Store a new file on the Shaman server. Note that the Shaman server can forcibly close the HTTP connection when another client finishes uploading the exact same file, to prevent double uploads. The file's contents should be sent in the request body.
*ShamanApi* | [**shaman_file_store_check**](flamenco/manager/docs/ShamanApi.md#shaman_file_store_check) | **GET** /api/v3/shaman/files/{checksum}/{filesize} | Check the status of a file on the Shaman server.
*WorkerApi* | [**may_worker_run**](flamenco/manager/docs/WorkerApi.md#may_worker_run) | **GET** /api/v3/worker/task/{task_id}/may-i-run | The response indicates whether the worker is allowed to run / keep running the task. Optionally contains a queued worker status change.
*WorkerApi* | [**register_worker**](flamenco/manager/docs/WorkerApi.md#register_worker) | **POST** /api/v3/worker/register-worker | Register a new worker
*WorkerApi* | [**schedule_task**](flamenco/manager/docs/WorkerApi.md#schedule_task) | **POST** /api/v3/worker/task | Obtain a new task to execute
*WorkerApi* | [**sign_off**](flamenco/manager/docs/WorkerApi.md#sign_off) | **POST** /api/v3/worker/sign-off | Mark the worker as offline
*WorkerApi* | [**sign_on**](flamenco/manager/docs/WorkerApi.md#sign_on) | **POST** /api/v3/worker/sign-on | Authenticate & sign in the worker.
*WorkerApi* | [**task_output_produced**](flamenco/manager/docs/WorkerApi.md#task_output_produced) | **POST** /api/v3/worker/task/{task_id}/output-produced | Store the most recently rendered frame here. Note that it is up to the Worker to ensure this is in a format that's digestable by the Manager. Currently only PNG and JPEG support is planned.
*WorkerApi* | [**task_update**](flamenco/manager/docs/WorkerApi.md#task_update) | **POST** /api/v3/worker/task/{task_id} | Update the task, typically to indicate progress, completion, or failure.
*WorkerApi* | [**worker_state**](flamenco/manager/docs/WorkerApi.md#worker_state) | **GET** /api/v3/worker/state |
*WorkerApi* | [**worker_state_changed**](flamenco/manager/docs/WorkerApi.md#worker_state_changed) | **POST** /api/v3/worker/state-changed | Worker changed state. This could be as acknowledgement of a Manager-requested state change, or in response to worker-local signals.
*WorkerMgtApi* | [**create_worker_tag**](flamenco/manager/docs/WorkerMgtApi.md#create_worker_tag) | **POST** /api/v3/worker-mgt/tags | Create a new worker tag.
*WorkerMgtApi* | [**delete_worker**](flamenco/manager/docs/WorkerMgtApi.md#delete_worker) | **DELETE** /api/v3/worker-mgt/workers/{worker_id} | Remove the given worker. It is recommended to only call this function when the worker is in `offline` state. If the worker is still running, stop it first. Any task still assigned to the worker will be requeued.
*WorkerMgtApi* | [**delete_worker_tag**](flamenco/manager/docs/WorkerMgtApi.md#delete_worker_tag) | **DELETE** /api/v3/worker-mgt/tag/{tag_id} | Remove this worker tag. This unassigns all workers from the tag and removes it.
*WorkerMgtApi* | [**fetch_worker**](flamenco/manager/docs/WorkerMgtApi.md#fetch_worker) | **GET** /api/v3/worker-mgt/workers/{worker_id} | Fetch info about the worker.
*WorkerMgtApi* | [**fetch_worker_sleep_schedule**](flamenco/manager/docs/WorkerMgtApi.md#fetch_worker_sleep_schedule) | **GET** /api/v3/worker-mgt/workers/{worker_id}/sleep-schedule |
*WorkerMgtApi* | [**fetch_worker_tag**](flamenco/manager/docs/WorkerMgtApi.md#fetch_worker_tag) | **GET** /api/v3/worker-mgt/tag/{tag_id} | Get a single worker tag.
*WorkerMgtApi* | [**fetch_worker_tags**](flamenco/manager/docs/WorkerMgtApi.md#fetch_worker_tags) | **GET** /api/v3/worker-mgt/tags | Get list of worker tags.
*WorkerMgtApi* | [**fetch_workers**](flamenco/manager/docs/WorkerMgtApi.md#fetch_workers) | **GET** /api/v3/worker-mgt/workers | Get list of workers.
*WorkerMgtApi* | [**request_worker_status_change**](flamenco/manager/docs/WorkerMgtApi.md#request_worker_status_change) | **POST** /api/v3/worker-mgt/workers/{worker_id}/setstatus |
*WorkerMgtApi* | [**set_worker_sleep_schedule**](flamenco/manager/docs/WorkerMgtApi.md#set_worker_sleep_schedule) | **POST** /api/v3/worker-mgt/workers/{worker_id}/sleep-schedule |
*WorkerMgtApi* | [**set_worker_tags**](flamenco/manager/docs/WorkerMgtApi.md#set_worker_tags) | **POST** /api/v3/worker-mgt/workers/{worker_id}/settags |
*WorkerMgtApi* | [**update_worker_tag**](flamenco/manager/docs/WorkerMgtApi.md#update_worker_tag) | **PUT** /api/v3/worker-mgt/tag/{tag_id} | Update an existing worker tag.
## Documentation For Models
- [AssignedTask](flamenco\manager\docs/AssignedTask.md)
- [AvailableJobSetting](flamenco\manager\docs/AvailableJobSetting.md)
- [AvailableJobSettingEvalInfo](flamenco\manager\docs/AvailableJobSettingEvalInfo.md)
- [AvailableJobSettingSubtype](flamenco\manager\docs/AvailableJobSettingSubtype.md)
- [AvailableJobSettingType](flamenco\manager\docs/AvailableJobSettingType.md)
- [AvailableJobSettingVisibility](flamenco\manager\docs/AvailableJobSettingVisibility.md)
- [AvailableJobType](flamenco\manager\docs/AvailableJobType.md)
- [AvailableJobTypes](flamenco\manager\docs/AvailableJobTypes.md)
- [BlenderPathCheckResult](flamenco\manager\docs/BlenderPathCheckResult.md)
- [BlenderPathFindResult](flamenco\manager\docs/BlenderPathFindResult.md)
- [BlenderPathSource](flamenco\manager\docs/BlenderPathSource.md)
- [Command](flamenco\manager\docs/Command.md)
- [Error](flamenco\manager\docs/Error.md)
- [EventFarmStatus](flamenco\manager\docs/EventFarmStatus.md)
- [EventJobUpdate](flamenco\manager\docs/EventJobUpdate.md)
- [EventLastRenderedUpdate](flamenco\manager\docs/EventLastRenderedUpdate.md)
- [EventLifeCycle](flamenco\manager\docs/EventLifeCycle.md)
- [EventTaskLogUpdate](flamenco\manager\docs/EventTaskLogUpdate.md)
- [EventTaskUpdate](flamenco\manager\docs/EventTaskUpdate.md)
- [EventWorkerTagUpdate](flamenco\manager\docs/EventWorkerTagUpdate.md)
- [EventWorkerUpdate](flamenco\manager\docs/EventWorkerUpdate.md)
- [FarmStatus](flamenco\manager\docs/FarmStatus.md)
- [FarmStatusReport](flamenco\manager\docs/FarmStatusReport.md)
- [FlamencoVersion](flamenco\manager\docs/FlamencoVersion.md)
- [Job](flamenco\manager\docs/Job.md)
- [JobAllOf](flamenco\manager\docs/JobAllOf.md)
- [JobBlocklist](flamenco\manager\docs/JobBlocklist.md)
- [JobBlocklistEntry](flamenco\manager\docs/JobBlocklistEntry.md)
- [JobDeletionInfo](flamenco\manager\docs/JobDeletionInfo.md)
- [JobLastRenderedImageInfo](flamenco\manager\docs/JobLastRenderedImageInfo.md)
- [JobMassDeletionSelection](flamenco\manager\docs/JobMassDeletionSelection.md)
- [JobMetadata](flamenco\manager\docs/JobMetadata.md)
- [JobPriorityChange](flamenco\manager\docs/JobPriorityChange.md)
- [JobSettings](flamenco\manager\docs/JobSettings.md)
- [JobStatus](flamenco\manager\docs/JobStatus.md)
- [JobStatusChange](flamenco\manager\docs/JobStatusChange.md)
- [JobStorageInfo](flamenco\manager\docs/JobStorageInfo.md)
- [JobTasksSummary](flamenco\manager\docs/JobTasksSummary.md)
- [JobsQuery](flamenco\manager\docs/JobsQuery.md)
- [JobsQueryResult](flamenco\manager\docs/JobsQueryResult.md)
- [LifeCycleEventType](flamenco\manager\docs/LifeCycleEventType.md)
- [ManagerConfiguration](flamenco\manager\docs/ManagerConfiguration.md)
- [ManagerVariable](flamenco\manager\docs/ManagerVariable.md)
- [ManagerVariableAudience](flamenco\manager\docs/ManagerVariableAudience.md)
- [ManagerVariables](flamenco\manager\docs/ManagerVariables.md)
- [MayKeepRunning](flamenco\manager\docs/MayKeepRunning.md)
- [PathCheckInput](flamenco\manager\docs/PathCheckInput.md)
- [PathCheckResult](flamenco\manager\docs/PathCheckResult.md)
- [RegisteredWorker](flamenco\manager\docs/RegisteredWorker.md)
- [SecurityError](flamenco\manager\docs/SecurityError.md)
- [SetupAssistantConfig](flamenco\manager\docs/SetupAssistantConfig.md)
- [ShamanCheckout](flamenco\manager\docs/ShamanCheckout.md)
- [ShamanCheckoutResult](flamenco\manager\docs/ShamanCheckoutResult.md)
- [ShamanFileSpec](flamenco\manager\docs/ShamanFileSpec.md)
- [ShamanFileSpecWithStatus](flamenco\manager\docs/ShamanFileSpecWithStatus.md)
- [ShamanFileStatus](flamenco\manager\docs/ShamanFileStatus.md)
- [ShamanRequirementsRequest](flamenco\manager\docs/ShamanRequirementsRequest.md)
- [ShamanRequirementsResponse](flamenco\manager\docs/ShamanRequirementsResponse.md)
- [ShamanSingleFileStatus](flamenco\manager\docs/ShamanSingleFileStatus.md)
- [SharedStorageLocation](flamenco\manager\docs/SharedStorageLocation.md)
- [SocketIOSubscription](flamenco\manager\docs/SocketIOSubscription.md)
- [SocketIOSubscriptionOperation](flamenco\manager\docs/SocketIOSubscriptionOperation.md)
- [SocketIOSubscriptionType](flamenco\manager\docs/SocketIOSubscriptionType.md)
- [SubmittedJob](flamenco\manager\docs/SubmittedJob.md)
- [Task](flamenco\manager\docs/Task.md)
- [TaskLogInfo](flamenco\manager\docs/TaskLogInfo.md)
- [TaskStatus](flamenco\manager\docs/TaskStatus.md)
- [TaskStatusChange](flamenco\manager\docs/TaskStatusChange.md)
- [TaskSummary](flamenco\manager\docs/TaskSummary.md)
- [TaskUpdate](flamenco\manager\docs/TaskUpdate.md)
- [TaskWorker](flamenco\manager\docs/TaskWorker.md)
- [Worker](flamenco\manager\docs/Worker.md)
- [WorkerAllOf](flamenco\manager\docs/WorkerAllOf.md)
- [WorkerList](flamenco\manager\docs/WorkerList.md)
- [WorkerRegistration](flamenco\manager\docs/WorkerRegistration.md)
- [WorkerSignOn](flamenco\manager\docs/WorkerSignOn.md)
- [WorkerSleepSchedule](flamenco\manager\docs/WorkerSleepSchedule.md)
- [WorkerStateChange](flamenco\manager\docs/WorkerStateChange.md)
- [WorkerStateChanged](flamenco\manager\docs/WorkerStateChanged.md)
- [WorkerStatus](flamenco\manager\docs/WorkerStatus.md)
- [WorkerStatusChangeRequest](flamenco\manager\docs/WorkerStatusChangeRequest.md)
- [WorkerSummary](flamenco\manager\docs/WorkerSummary.md)
- [WorkerTag](flamenco\manager\docs/WorkerTag.md)
- [WorkerTagChangeRequest](flamenco\manager\docs/WorkerTagChangeRequest.md)
- [WorkerTagList](flamenco\manager\docs/WorkerTagList.md)
- [WorkerTask](flamenco\manager\docs/WorkerTask.md)
- [WorkerTaskAllOf](flamenco\manager\docs/WorkerTaskAllOf.md)
- [AssignedTask](flamenco/manager/docs/AssignedTask.md)
- [AvailableJobSetting](flamenco/manager/docs/AvailableJobSetting.md)
- [AvailableJobSettingEvalInfo](flamenco/manager/docs/AvailableJobSettingEvalInfo.md)
- [AvailableJobSettingSubtype](flamenco/manager/docs/AvailableJobSettingSubtype.md)
- [AvailableJobSettingType](flamenco/manager/docs/AvailableJobSettingType.md)
- [AvailableJobSettingVisibility](flamenco/manager/docs/AvailableJobSettingVisibility.md)
- [AvailableJobType](flamenco/manager/docs/AvailableJobType.md)
- [AvailableJobTypes](flamenco/manager/docs/AvailableJobTypes.md)
- [BlenderPathCheckResult](flamenco/manager/docs/BlenderPathCheckResult.md)
- [BlenderPathFindResult](flamenco/manager/docs/BlenderPathFindResult.md)
- [BlenderPathSource](flamenco/manager/docs/BlenderPathSource.md)
- [Command](flamenco/manager/docs/Command.md)
- [Error](flamenco/manager/docs/Error.md)
- [EventFarmStatus](flamenco/manager/docs/EventFarmStatus.md)
- [EventJobUpdate](flamenco/manager/docs/EventJobUpdate.md)
- [EventLastRenderedUpdate](flamenco/manager/docs/EventLastRenderedUpdate.md)
- [EventLifeCycle](flamenco/manager/docs/EventLifeCycle.md)
- [EventTaskLogUpdate](flamenco/manager/docs/EventTaskLogUpdate.md)
- [EventTaskUpdate](flamenco/manager/docs/EventTaskUpdate.md)
- [EventWorkerTagUpdate](flamenco/manager/docs/EventWorkerTagUpdate.md)
- [EventWorkerUpdate](flamenco/manager/docs/EventWorkerUpdate.md)
- [FarmStatus](flamenco/manager/docs/FarmStatus.md)
- [FarmStatusReport](flamenco/manager/docs/FarmStatusReport.md)
- [FlamencoVersion](flamenco/manager/docs/FlamencoVersion.md)
- [Job](flamenco/manager/docs/Job.md)
- [JobAllOf](flamenco/manager/docs/JobAllOf.md)
- [JobBlocklist](flamenco/manager/docs/JobBlocklist.md)
- [JobBlocklistEntry](flamenco/manager/docs/JobBlocklistEntry.md)
- [JobDeletionInfo](flamenco/manager/docs/JobDeletionInfo.md)
- [JobLastRenderedImageInfo](flamenco/manager/docs/JobLastRenderedImageInfo.md)
- [JobMassDeletionSelection](flamenco/manager/docs/JobMassDeletionSelection.md)
- [JobMetadata](flamenco/manager/docs/JobMetadata.md)
- [JobPriorityChange](flamenco/manager/docs/JobPriorityChange.md)
- [JobSettings](flamenco/manager/docs/JobSettings.md)
- [JobStatus](flamenco/manager/docs/JobStatus.md)
- [JobStatusChange](flamenco/manager/docs/JobStatusChange.md)
- [JobStorageInfo](flamenco/manager/docs/JobStorageInfo.md)
- [JobTasksSummary](flamenco/manager/docs/JobTasksSummary.md)
- [JobsQuery](flamenco/manager/docs/JobsQuery.md)
- [JobsQueryResult](flamenco/manager/docs/JobsQueryResult.md)
- [LifeCycleEventType](flamenco/manager/docs/LifeCycleEventType.md)
- [ManagerConfiguration](flamenco/manager/docs/ManagerConfiguration.md)
- [ManagerVariable](flamenco/manager/docs/ManagerVariable.md)
- [ManagerVariableAudience](flamenco/manager/docs/ManagerVariableAudience.md)
- [ManagerVariables](flamenco/manager/docs/ManagerVariables.md)
- [MayKeepRunning](flamenco/manager/docs/MayKeepRunning.md)
- [PathCheckInput](flamenco/manager/docs/PathCheckInput.md)
- [PathCheckResult](flamenco/manager/docs/PathCheckResult.md)
- [RegisteredWorker](flamenco/manager/docs/RegisteredWorker.md)
- [SecurityError](flamenco/manager/docs/SecurityError.md)
- [SetupAssistantConfig](flamenco/manager/docs/SetupAssistantConfig.md)
- [ShamanCheckout](flamenco/manager/docs/ShamanCheckout.md)
- [ShamanCheckoutResult](flamenco/manager/docs/ShamanCheckoutResult.md)
- [ShamanFileSpec](flamenco/manager/docs/ShamanFileSpec.md)
- [ShamanFileSpecWithStatus](flamenco/manager/docs/ShamanFileSpecWithStatus.md)
- [ShamanFileStatus](flamenco/manager/docs/ShamanFileStatus.md)
- [ShamanRequirementsRequest](flamenco/manager/docs/ShamanRequirementsRequest.md)
- [ShamanRequirementsResponse](flamenco/manager/docs/ShamanRequirementsResponse.md)
- [ShamanSingleFileStatus](flamenco/manager/docs/ShamanSingleFileStatus.md)
- [SharedStorageLocation](flamenco/manager/docs/SharedStorageLocation.md)
- [SocketIOSubscription](flamenco/manager/docs/SocketIOSubscription.md)
- [SocketIOSubscriptionOperation](flamenco/manager/docs/SocketIOSubscriptionOperation.md)
- [SocketIOSubscriptionType](flamenco/manager/docs/SocketIOSubscriptionType.md)
- [SubmittedJob](flamenco/manager/docs/SubmittedJob.md)
- [Task](flamenco/manager/docs/Task.md)
- [TaskLogInfo](flamenco/manager/docs/TaskLogInfo.md)
- [TaskStatus](flamenco/manager/docs/TaskStatus.md)
- [TaskStatusChange](flamenco/manager/docs/TaskStatusChange.md)
- [TaskSummary](flamenco/manager/docs/TaskSummary.md)
- [TaskUpdate](flamenco/manager/docs/TaskUpdate.md)
- [TaskWorker](flamenco/manager/docs/TaskWorker.md)
- [Worker](flamenco/manager/docs/Worker.md)
- [WorkerAllOf](flamenco/manager/docs/WorkerAllOf.md)
- [WorkerList](flamenco/manager/docs/WorkerList.md)
- [WorkerRegistration](flamenco/manager/docs/WorkerRegistration.md)
- [WorkerSignOn](flamenco/manager/docs/WorkerSignOn.md)
- [WorkerSleepSchedule](flamenco/manager/docs/WorkerSleepSchedule.md)
- [WorkerStateChange](flamenco/manager/docs/WorkerStateChange.md)
- [WorkerStateChanged](flamenco/manager/docs/WorkerStateChanged.md)
- [WorkerStatus](flamenco/manager/docs/WorkerStatus.md)
- [WorkerStatusChangeRequest](flamenco/manager/docs/WorkerStatusChangeRequest.md)
- [WorkerSummary](flamenco/manager/docs/WorkerSummary.md)
- [WorkerTag](flamenco/manager/docs/WorkerTag.md)
- [WorkerTagChangeRequest](flamenco/manager/docs/WorkerTagChangeRequest.md)
- [WorkerTagList](flamenco/manager/docs/WorkerTagList.md)
- [WorkerTask](flamenco/manager/docs/WorkerTask.md)
- [WorkerTaskAllOf](flamenco/manager/docs/WorkerTaskAllOf.md)
## Documentation For Authorization

19
go.mod
View File

@ -1,6 +1,6 @@
module projects.blender.org/studio/flamenco
go 1.22
go 1.22.0
require (
github.com/adrg/xdg v0.4.0
@ -20,15 +20,15 @@ require (
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
github.com/google/uuid v1.5.0
github.com/graarh/golang-socketio v0.0.0-20170510162725-2c44953b9b5f
github.com/labstack/echo/v4 v4.9.1
github.com/mattn/go-colorable v0.1.12
github.com/labstack/echo/v4 v4.11.4
github.com/mattn/go-colorable v0.1.13
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8
github.com/pressly/goose/v3 v3.15.1
github.com/rs/zerolog v1.26.1
github.com/stretchr/testify v1.8.4
github.com/zcalusic/sysinfo v1.0.1
github.com/ziflex/lecho/v3 v3.1.0
golang.org/x/crypto v0.16.0
golang.org/x/crypto v0.17.0
golang.org/x/image v0.10.0
golang.org/x/net v0.19.0
golang.org/x/sys v0.15.0
@ -38,6 +38,7 @@ require (
)
require (
github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dlclark/regexp2 v1.7.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
@ -52,17 +53,19 @@ require (
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
github.com/labstack/gommon v0.4.0 // indirect
github.com/mailru/easyjson v0.7.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/labstack/gommon v0.4.2 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/oapi-codegen/runtime v1.1.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasttemplate v1.2.1 // indirect
github.com/valyala/fasttemplate v1.2.2 // indirect
golang.org/x/mod v0.14.0 // indirect
golang.org/x/sync v0.5.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba // indirect
golang.org/x/time v0.5.0 // indirect
golang.org/x/tools v0.16.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
lukechampine.com/uint128 v1.3.0 // indirect

38
go.sum
View File

@ -1,9 +1,13 @@
github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk=
github.com/adrg/xdg v0.4.0 h1:RzRqFcjH4nE5C6oTAxhBtoE2IRyjBSa62SCbyPidvls=
github.com/adrg/xdg v0.4.0/go.mod h1:N6ag73EX4wyxeaoeHctc1mas01KZgsj5tYiAIwqJE/E=
github.com/alessio/shellescape v1.4.2 h1:MHPfaU+ddJ0/bYWpgIeUnQUqKrlJ1S7BfEYPM4uEoM0=
github.com/alessio/shellescape v1.4.2/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30=
github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ=
github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk=
github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w=
github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY=
github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic=
github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
@ -94,8 +98,11 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@ -108,12 +115,12 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg=
github.com/labstack/echo/v4 v4.6.1/go.mod h1:RnjgMWNDB9g/HucVWhQYNQP9PvbYf6adqftqryo7s9k=
github.com/labstack/echo/v4 v4.9.1 h1:GliPYSpzGKlyOhqIbG8nmHBo3i1saKWFOgh41AN3b+Y=
github.com/labstack/echo/v4 v4.9.1/go.mod h1:Pop5HLc+xoc4qhTZ1ip6C0RtP7Z+4VzRLWZZFKqbbjo=
github.com/labstack/echo/v4 v4.11.4 h1:vDZmA+qNeh1pd/cCkEicDMrjtrnMGQ1QFI9gWN1zGq8=
github.com/labstack/echo/v4 v4.11.4/go.mod h1:noh7EvLwqDsmh/X/HWKPUl1AjzJrhyptRyEbQJfxen8=
github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM=
github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8=
github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM=
github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0=
github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y=
@ -125,19 +132,20 @@ github.com/lestrrat-go/jwx v1.2.7/go.mod h1:bw24IXWbavc0R2RsOtpXL7RtMyP589yZ1+L7
github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I=
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM=
github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
@ -146,6 +154,8 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/oapi-codegen/runtime v1.1.1 h1:EXLHh0DXIJnWhdRPN2w4MXAzFyE4CskzhNLUmtpMYro=
github.com/oapi-codegen/runtime v1.1.1/go.mod h1:SK9X900oXmPWilYR5/WKPzt3Kqxn/uS/+lbpREv+eCg=
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU=
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
@ -163,6 +173,7 @@ github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/zerolog v1.26.0/go.mod h1:yBiM87lvSqX8h0Ww4sdzNSkVYZ8dL2xjZJG1lAuGZEo=
github.com/rs/zerolog v1.26.1 h1:/ihwxqH+4z8UxyI70wM1z9yCvkWcfz/a3mj48k/Zngc=
github.com/rs/zerolog v1.26.1/go.mod h1:/wSSJWX7lVrsOwlbyTRSOJvqRlc+WjWlfes+CiJ+tmc=
github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@ -178,8 +189,9 @@ github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxW
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4=
github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
@ -199,8 +211,8 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20211215165025-cf75a172585e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.10.0 h1:gXjUUtwtx5yOE0VKWq1CH4IJAClq4UGgUA3i+rpON9M=
golang.org/x/image v0.10.0/go.mod h1:jtrku+n79PfroUbvDdeUWMAI+heR786BofxrbiSF+J0=
@ -258,6 +270,7 @@ golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
@ -277,8 +290,9 @@ golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE=
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200918232735-d647fc253266/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=

View File

@ -92,6 +92,8 @@ func (f *Flamenco) SubmitJob(e echo.Context) error {
logger = logger.With().Str("job_id", authoredJob.JobID).Logger()
// TODO: check whether this job should be queued immediately or start paused.
// checking whether the job has
//if
authoredJob.Status = api.JobStatusQueued
if err := f.persist.StoreAuthoredJob(ctx, *authoredJob); err != nil {

View File

@ -111,6 +111,7 @@ func (s *Service) Compile(ctx context.Context, sj api.SubmittedJob) (*AuthoredJo
Settings: make(JobSettings),
Metadata: make(JobMetadata),
//SubmitAsPaused: sj.SubmitAsPaused,
}
if sj.Settings != nil {
for key, value := range sj.Settings.AdditionalProperties {

View File

@ -31,6 +31,9 @@ const JOB_TYPE = {
description: "File extension used when rendering images" },
{ key: "has_previews", type: "bool", required: false, eval: "C.scene.render.image_settings.use_preview", visible: "hidden",
description: "Whether Blender will render preview images."},
// Settings for demo purposes:
{ key: "submit_as_paused", type: "bool", required: true, default: false, visible: "submission", description: "Submit the job in a paused state" },
]
};

View File

@ -116,8 +116,7 @@ func (sm *StateMachine) updateJobAfterTaskStatusChange(
return sm.jobStatusIfAThenB(ctx, logger, job, api.JobStatusCompleted, api.JobStatusRequeueing, "task was queued")
case api.TaskStatusPaused:
// Pausing a task has no impact on the job.
return nil
return sm.updateJobOnTaskStatusPaused(ctx, logger, job)
case api.TaskStatusCanceled:
return sm.updateJobOnTaskStatusCanceled(ctx, logger, job)
@ -180,6 +179,38 @@ func (sm *StateMachine) updateJobOnTaskStatusCanceled(ctx context.Context, logge
return nil
}
// updateJobOnTaskStatusPaused conditionally escalates the pausing of a task to pause the job.
func (sm *StateMachine) updateJobOnTaskStatusPaused(ctx context.Context, logger zerolog.Logger, job *persistence.Job) error {
// If no more tasks can run, pause the job.
numRunnable, _, err := sm.persist.CountTasksOfJobInStatus(ctx, job,
api.TaskStatusActive, api.TaskStatusQueued, api.TaskStatusSoftFailed)
if err != nil {
return err
}
if numRunnable == 0 {
logger.Info().Msg("paused task was last runnable task of job, pausing job")
return sm.JobStatusChange(ctx, job, api.JobStatusPaused, "paused task was last runnable task of job, pausing job")
}
if job.Status == api.JobStatusPauseRequested {
// if the job is in pause-requested state, and all other tasks are paused,
// then the job can be paused.
numPaused, numTotal, err := sm.persist.CountTasksOfJobInStatus(ctx, job, api.TaskStatusPaused)
if err != nil {
return err
}
if numPaused == numTotal {
logger.Info().Msg("all tasks of job are paused, job is paused")
return sm.JobStatusChange(ctx, job, api.JobStatusPaused, "all tasks paused")
}
} else {
// if the job is not in pause-requested state, then some error occurred and the job should be failed.
logger.Info().Msg("task cannot be changed to paused when job is not in pause-requested state")
}
return nil
}
// updateJobOnTaskStatusFailed conditionally escalates the failure of a task to fail the entire job.
func (sm *StateMachine) updateJobOnTaskStatusFailed(ctx context.Context, logger zerolog.Logger, job *persistence.Job) error {
// Count the number of failed tasks. If it is over the threshold, fail the job.
@ -382,6 +413,13 @@ func (sm *StateMachine) updateTasksAfterJobStatusChange(
massTaskUpdate: true,
}, err
case api.JobStatusPauseRequested:
jobStatus, err := sm.pauseTasks(ctx, logger, job)
return tasksUpdateResult{
followingJobStatus: jobStatus,
massTaskUpdate: true,
}, err
case api.JobStatusRequeueing:
jobStatus, err := sm.requeueTasks(ctx, logger, job, oldJobStatus)
return tasksUpdateResult{
@ -435,6 +473,37 @@ func (sm *StateMachine) cancelTasks(
return "", nil
}
func (sm *StateMachine) pauseTasks(
ctx context.Context, logger zerolog.Logger, job *persistence.Job,
) (api.JobStatus, error) {
logger.Info().Msg("pausing tasks of job")
// Any task that might run in the future should get paused.
// Active jobs should remain active until finished
taskStatusesToPause := []api.TaskStatus{
api.TaskStatusActive,
api.TaskStatusQueued,
api.TaskStatusCanceled,
}
err := sm.persist.UpdateJobsTaskStatusesConditional(
ctx, job, taskStatusesToPause, api.TaskStatusPaused,
fmt.Sprintf("Manager paused this task because the job got status %q.", job.Status),
)
if err != nil {
return "", fmt.Errorf("pausing tasks of job %s: %w", job.UUID, err)
}
// If pause was requested, it has now happened, so the job can transition.
if job.Status == api.JobStatusPauseRequested {
logger.Info().Msg("all tasks of job paused, job can go to 'paused' status")
return api.JobStatusPaused, nil
}
// This could mean pause was triggered by failure of the job, in which case the
// job is already in the correct status.
return "", nil
}
// requeueTasks re-queues all tasks of the job.
//
// This function assumes that the current job status is "requeueing".

View File

@ -758,7 +758,7 @@ paths:
$ref: "#/components/schemas/SubmittedJob"
responses:
"200":
description: Job was succesfully compiled into individual tasks.
description: Job was successfully compiled into individual tasks.
content:
application/json:
schema: { $ref: "#/components/schemas/Job" }
@ -1680,6 +1680,7 @@ components:
- completed
- failed
- paused
- pause-requested
- queued
- cancel-requested
- requeueing
@ -1861,6 +1862,12 @@ components:
Worker tag that should execute this job. When a tag ID is
given, only Workers in that tag will be scheduled to work on it.
If empty or ommitted, all workers can work on this job.
"submit_as_paused":
type: boolean
description: >
Whether to submit this job as paused. This is useful for jobs that
should not start immediately, but only after manual intervention.
default: false
required: [name, type, priority, submitter_platform]
example:
type: "simple-blender-render"

View File

@ -18,233 +18,234 @@ import (
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
"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",
"AQA=",
}

View File

@ -84,6 +84,8 @@ const (
JobStatusFailed JobStatus = "failed"
JobStatusPauseRequested JobStatus = "pause-requested"
JobStatusPaused JobStatus = "paused"
JobStatusQueued JobStatus = "queued"
@ -703,6 +705,9 @@ type SubmittedJob struct {
// Storage info of a job, which Flamenco can use to remove job-related files when necessary.
Storage *JobStorageInfo `json:"storage,omitempty"`
// Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention.
SubmitAsPaused *bool `json:"submit_as_paused,omitempty"`
// Operating system of the submitter. This is used to recognise two-way variables. This should be a lower-case version of the platform, like "linux", "windows", "darwin", "openbsd", etc. Should be ompatible with Go's `runtime.GOOS`; run `go tool dist list` to get a list of possible platforms.
// As a special case, the platform "manager" can be given, which will be interpreted as "the Manager's platform". This is mostly to make test/debug scripts easier, as they can use a static document on all platforms.
SubmitterPlatform string `json:"submitter_platform"`

View File

@ -8,6 +8,9 @@
<button class="btn delete dangerous" v-on:click="onButtonDeleteConfirmed">Delete</button>
</div>
</div>
<button class="btn pause" :disabled="!jobs.canPause" v-on:click="onButtonPause">
Pause Job
</button>
<button class="btn cancel" :disabled="!jobs.canCancel" v-on:click="onButtonCancel">
Cancel Job
</button>

View File

@ -100,6 +100,9 @@ class Job {
if (data.hasOwnProperty('worker_tag')) {
obj['worker_tag'] = ApiClient.convertToType(data['worker_tag'], 'String');
}
if (data.hasOwnProperty('submit_as_paused')) {
obj['submit_as_paused'] = ApiClient.convertToType(data['submit_as_paused'], 'Boolean');
}
if (data.hasOwnProperty('id')) {
obj['id'] = ApiClient.convertToType(data['id'], 'String');
}
@ -175,6 +178,13 @@ Job.prototype['storage'] = undefined;
*/
Job.prototype['worker_tag'] = undefined;
/**
* Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention.
* @member {Boolean} submit_as_paused
* @default false
*/
Job.prototype['submit_as_paused'] = false;
/**
* UUID of the Job
* @member {String} id
@ -253,6 +263,12 @@ SubmittedJob.prototype['storage'] = undefined;
* @member {String} worker_tag
*/
SubmittedJob.prototype['worker_tag'] = undefined;
/**
* Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention.
* @member {Boolean} submit_as_paused
* @default false
*/
SubmittedJob.prototype['submit_as_paused'] = false;
// Implement JobAllOf interface:
/**
* UUID of the Job

View File

@ -54,6 +54,13 @@ export default class JobStatus {
"paused" = "paused";
/**
* value: "pause-requested"
* @const
*/
"pause-requested" = "pause-requested";
/**
* value: "queued"
* @const

View File

@ -84,6 +84,9 @@ class SubmittedJob {
if (data.hasOwnProperty('worker_tag')) {
obj['worker_tag'] = ApiClient.convertToType(data['worker_tag'], 'String');
}
if (data.hasOwnProperty('submit_as_paused')) {
obj['submit_as_paused'] = ApiClient.convertToType(data['submit_as_paused'], 'Boolean');
}
}
return obj;
}
@ -141,6 +144,13 @@ SubmittedJob.prototype['storage'] = undefined;
*/
SubmittedJob.prototype['worker_tag'] = undefined;
/**
* Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention.
* @member {Boolean} submit_as_paused
* @default false
*/
SubmittedJob.prototype['submit_as_paused'] = false;

View File

@ -18,6 +18,9 @@ export const useTasks = defineStore('tasks', {
activeTaskID: '',
}),
getters: {
canPause() {
return this._anyTaskWithStatus(['active', 'queued', 'cancelled']);
},
canCancel() {
return this._anyTaskWithStatus(['queued', 'active', 'soft-failed']);
},