Tasks Table: Add Worker column (#104402)

Add a `Worker` column to the Job Tasks Table. This lets artists quickly
visualize on which machine a task is currently running, giving better
insights on worker utilization, as well as better expectations on how
long a task might take to finish when running Flamenco on a Renderfarm
made of different slow / fast workers.

Similarly to the Task Details panel for the "Assigned To"  field
`LinkWorker` Vue element, the cell element contains an hyperlink to the
corresponding worker in the Workers page. Since the Worker page also
contains a backlink to the currently running task, this lets user
quickly navigate between the two pages, as seen in the screen recording
demo below.

Reviewed-on: https://projects.blender.org/studio/flamenco/pulls/104402
Reviewed-by: Sybren A. Stüvel <sybren@blender.org>
This commit is contained in:
Jonas Holzman 2025-06-30 14:31:27 +02:00 committed by Sybren A. Stüvel
parent 8f8cd564f6
commit f0fca60427
17 changed files with 315 additions and 235 deletions

View File

@ -10,6 +10,7 @@ bugs in actually-released versions.
- While holding shift, the tasks table will not change the ordering of the tasks, to aid in shift-selecting ranges ([#104388](https://projects.blender.org/studio/flamenco/pulls/104388)). - While holding shift, the tasks table will not change the ordering of the tasks, to aid in shift-selecting ranges ([#104388](https://projects.blender.org/studio/flamenco/pulls/104388)).
- Upgrade Blender Asset Tracer (BAT) to 1.19 to support Blender 5.0 ([BAT#92893](https://projects.blender.org/blender/blender-asset-tracer/pulls/92893)). - Upgrade Blender Asset Tracer (BAT) to 1.19 to support Blender 5.0 ([BAT#92893](https://projects.blender.org/blender/blender-asset-tracer/pulls/92893)).
- Remove the "extra checkout paths" feature from the Shaman system and thus the configuration file ([#104403](https://projects.blender.org/studio/flamenco/issues/104403)). - Remove the "extra checkout paths" feature from the Shaman system and thus the configuration file ([#104403](https://projects.blender.org/studio/flamenco/issues/104403)).
- Add a new "Worker" column to the Job Task table indicating which worker the task is assigned to.
- Update Go & dependencies to fix security vulnerabilities: - Update Go & dependencies to fix security vulnerabilities:
- https://pkg.go.dev/vuln/GO-2025-3751 - https://pkg.go.dev/vuln/GO-2025-3751
- https://pkg.go.dev/vuln/GO-2025-3750 - https://pkg.go.dev/vuln/GO-2025-3750

View File

@ -12,6 +12,7 @@ Name | Type | Description | Notes
**priority** | **int** | | **priority** | **int** | |
**task_type** | **str** | | **task_type** | **str** | |
**updated** | **datetime** | | **updated** | **datetime** | |
**worker** | [**TaskWorker**](TaskWorker.md) | | [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] **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) [[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

@ -13,6 +13,7 @@ Name | Type | Description | Notes
**task_type** | **str** | | **task_type** | **str** | |
**updated** | **datetime** | | **updated** | **datetime** | |
**job_id** | **str** | | **job_id** | **str** | |
**worker** | [**TaskWorker**](TaskWorker.md) | | [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] **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) [[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

@ -31,7 +31,9 @@ from flamenco.manager.exceptions import ApiAttributeError
def lazy_import(): def lazy_import():
from flamenco.manager.model.task_status import TaskStatus from flamenco.manager.model.task_status import TaskStatus
from flamenco.manager.model.task_worker import TaskWorker
globals()['TaskStatus'] = TaskStatus globals()['TaskStatus'] = TaskStatus
globals()['TaskWorker'] = TaskWorker
class TaskSummary(ModelNormal): class TaskSummary(ModelNormal):
@ -94,6 +96,7 @@ class TaskSummary(ModelNormal):
'priority': (int,), # noqa: E501 'priority': (int,), # noqa: E501
'task_type': (str,), # noqa: E501 'task_type': (str,), # noqa: E501
'updated': (datetime,), # noqa: E501 'updated': (datetime,), # noqa: E501
'worker': (TaskWorker,), # noqa: E501
} }
@cached_property @cached_property
@ -109,6 +112,7 @@ class TaskSummary(ModelNormal):
'priority': 'priority', # noqa: E501 'priority': 'priority', # noqa: E501
'task_type': 'task_type', # noqa: E501 'task_type': 'task_type', # noqa: E501
'updated': 'updated', # noqa: E501 'updated': 'updated', # noqa: E501
'worker': 'worker', # noqa: E501
} }
read_only_vars = { read_only_vars = {
@ -161,6 +165,7 @@ class TaskSummary(ModelNormal):
Animal class but this time we won't travel Animal class but this time we won't travel
through its discriminator because we passed in through its discriminator because we passed in
_visited_composed_classes = (Animal,) _visited_composed_classes = (Animal,)
worker (TaskWorker): [optional] # noqa: E501
""" """
_check_type = kwargs.pop('_check_type', True) _check_type = kwargs.pop('_check_type', True)
@ -258,6 +263,7 @@ class TaskSummary(ModelNormal):
Animal class but this time we won't travel Animal class but this time we won't travel
through its discriminator because we passed in through its discriminator because we passed in
_visited_composed_classes = (Animal,) _visited_composed_classes = (Animal,)
worker (TaskWorker): [optional] # noqa: E501
""" """
_check_type = kwargs.pop('_check_type', True) _check_type = kwargs.pop('_check_type', True)

View File

@ -32,9 +32,11 @@ from flamenco.manager.exceptions import ApiAttributeError
def lazy_import(): def lazy_import():
from flamenco.manager.model.task_status import TaskStatus from flamenco.manager.model.task_status import TaskStatus
from flamenco.manager.model.task_summary import TaskSummary from flamenco.manager.model.task_summary import TaskSummary
from flamenco.manager.model.task_worker import TaskWorker
from flamenco.manager.model.worker_task_all_of import WorkerTaskAllOf from flamenco.manager.model.worker_task_all_of import WorkerTaskAllOf
globals()['TaskStatus'] = TaskStatus globals()['TaskStatus'] = TaskStatus
globals()['TaskSummary'] = TaskSummary globals()['TaskSummary'] = TaskSummary
globals()['TaskWorker'] = TaskWorker
globals()['WorkerTaskAllOf'] = WorkerTaskAllOf globals()['WorkerTaskAllOf'] = WorkerTaskAllOf
@ -99,6 +101,7 @@ class WorkerTask(ModelComposed):
'task_type': (str,), # noqa: E501 'task_type': (str,), # noqa: E501
'updated': (datetime,), # noqa: E501 'updated': (datetime,), # noqa: E501
'job_id': (str,), # noqa: E501 'job_id': (str,), # noqa: E501
'worker': (TaskWorker,), # noqa: E501
} }
@cached_property @cached_property
@ -115,6 +118,7 @@ class WorkerTask(ModelComposed):
'task_type': 'task_type', # noqa: E501 'task_type': 'task_type', # noqa: E501
'updated': 'updated', # noqa: E501 'updated': 'updated', # noqa: E501
'job_id': 'job_id', # noqa: E501 'job_id': 'job_id', # noqa: E501
'worker': 'worker', # noqa: E501
} }
read_only_vars = { read_only_vars = {
@ -164,6 +168,7 @@ class WorkerTask(ModelComposed):
Animal class but this time we won't travel Animal class but this time we won't travel
through its discriminator because we passed in through its discriminator because we passed in
_visited_composed_classes = (Animal,) _visited_composed_classes = (Animal,)
worker (TaskWorker): [optional] # noqa: E501
""" """
_check_type = kwargs.pop('_check_type', True) _check_type = kwargs.pop('_check_type', True)
@ -271,6 +276,7 @@ class WorkerTask(ModelComposed):
Animal class but this time we won't travel Animal class but this time we won't travel
through its discriminator because we passed in through its discriminator because we passed in
_visited_composed_classes = (Animal,) _visited_composed_classes = (Animal,)
worker (TaskWorker): [optional] # noqa: E501
""" """
_check_type = kwargs.pop('_check_type', True) _check_type = kwargs.pop('_check_type', True)

View File

@ -108,6 +108,20 @@ func (f *Flamenco) FetchJobTasks(e echo.Context, jobID string) error {
apiSummaries := make([]api.TaskSummary, len(dbSummaries)) apiSummaries := make([]api.TaskSummary, len(dbSummaries))
for i, dbSummary := range dbSummaries { for i, dbSummary := range dbSummaries {
apiSummaries[i] = taskSummaryDBtoAPI(dbSummary) apiSummaries[i] = taskSummaryDBtoAPI(dbSummary)
// We only have the Worker UUID at this point, fetch the full worker information
worker, err := f.persist.FetchWorker(ctx, apiSummaries[i].Worker.Id)
switch {
case errors.Is(err, persistence.ErrWorkerNotFound):
// This is fine, workers can be soft-deleted from the database, and then
// the above FetchWorker call will not return it.
case err != nil:
logger.Warn().Err(err).Str("worker", apiSummaries[i].Worker.Id).Msg("error fetching task worker")
return sendAPIError(e, http.StatusInternalServerError, "error fetching task worker")
default:
apiSummaries[i].Worker = workerToTaskWorker(worker)
}
} }
result := api.JobTasksSummary{ result := api.JobTasksSummary{
Tasks: &apiSummaries, Tasks: &apiSummaries,
@ -179,10 +193,11 @@ func taskSummaryDBtoAPI(task persistence.TaskSummary) api.TaskSummary {
Status: task.Status, Status: task.Status,
TaskType: task.Type, TaskType: task.Type,
Updated: task.UpdatedAt.Time, Updated: task.UpdatedAt.Time,
Worker: &api.TaskWorker{Id: task.WorkerUUID.String},
} }
} }
func taskDBtoSummaryAPI(task persistence.Task) api.TaskSummary { func taskDBtoSummaryAPI(task persistence.Task, worker *persistence.Worker) api.TaskSummary {
return api.TaskSummary{ return api.TaskSummary{
Id: task.UUID, Id: task.UUID,
Name: task.Name, Name: task.Name,
@ -191,5 +206,6 @@ func taskDBtoSummaryAPI(task persistence.Task) api.TaskSummary {
Status: task.Status, Status: task.Status,
TaskType: task.Type, TaskType: task.Type,
Updated: task.UpdatedAt.Time, Updated: task.UpdatedAt.Time,
Worker: workerToTaskWorker(worker),
} }
} }

View File

@ -80,7 +80,7 @@ func (f *Flamenco) FetchWorker(e echo.Context, workerUUID string) error {
if taskJob != nil { if taskJob != nil {
apiWorkerTask := api.WorkerTask{ apiWorkerTask := api.WorkerTask{
TaskSummary: taskDBtoSummaryAPI(taskJob.Task), TaskSummary: taskDBtoSummaryAPI(taskJob.Task, dbWorker),
JobId: taskJob.JobUUID, JobId: taskJob.JobUUID,
} }
apiWorker.Task = &apiWorkerTask apiWorker.Task = &apiWorkerTask

View File

@ -132,6 +132,11 @@ func TestFetchWorker(t *testing.T) {
Id: assignedTask.UUID, Id: assignedTask.UUID,
Name: assignedTask.Name, Name: assignedTask.Name,
Status: assignedTask.Status, Status: assignedTask.Status,
Worker: &api.TaskWorker{
Address: "fe80::5054:ff:fede:2ad7",
Id: "e7632d62-c3b8-4af0-9e78-01752928952c",
Name: "дрон",
},
}, },
JobId: assignedJob.UUID, JobId: assignedJob.UUID,
}, },

View File

@ -33,7 +33,8 @@ func (db *DB) QueryJobTaskSummaries(ctx context.Context, jobUUID string) ([]Task
Type: task.Type, Type: task.Type,
IndexInJob: task.IndexInJob, IndexInJob: task.IndexInJob,
Priority: task.Priority, Priority: task.Priority,
Status: api.TaskStatus(task.Status), Status: task.Status,
WorkerUUID: task.WorkerUUID,
} }
} }

View File

@ -325,9 +325,10 @@ AND T.type = @task_type;
-- name: QueryJobTaskSummaries :many -- name: QueryJobTaskSummaries :many
SELECT tasks.id, tasks.uuid, tasks.name, tasks.index_in_job, tasks.priority, tasks.status, tasks.type, tasks.updated_at SELECT tasks.id, tasks.uuid, tasks.name, tasks.index_in_job, tasks.priority, tasks.status, tasks.type, tasks.updated_at, workers.UUID as workerUUID
FROM tasks FROM tasks
LEFT JOIN jobs ON jobs.id = tasks.job_id LEFT JOIN jobs ON jobs.id = tasks.job_id
LEFT JOIN workers ON workers.id = tasks.worker_id
WHERE jobs.uuid=@job_uuid; WHERE jobs.uuid=@job_uuid;
-- name: SummarizeJobStatuses :many -- name: SummarizeJobStatuses :many

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.26.0 // sqlc v1.29.0
// source: query_jobs.sql // source: query_jobs.sql
package sqlc package sqlc
@ -998,9 +998,10 @@ func (q *Queries) JobCountTasksInStatus(ctx context.Context, arg JobCountTasksIn
} }
const queryJobTaskSummaries = `-- name: QueryJobTaskSummaries :many const queryJobTaskSummaries = `-- name: QueryJobTaskSummaries :many
SELECT tasks.id, tasks.uuid, tasks.name, tasks.index_in_job, tasks.priority, tasks.status, tasks.type, tasks.updated_at SELECT tasks.id, tasks.uuid, tasks.name, tasks.index_in_job, tasks.priority, tasks.status, tasks.type, tasks.updated_at, workers.UUID as workerUUID
FROM tasks FROM tasks
LEFT JOIN jobs ON jobs.id = tasks.job_id LEFT JOIN jobs ON jobs.id = tasks.job_id
LEFT JOIN workers ON workers.id = tasks.worker_id
WHERE jobs.uuid=?1 WHERE jobs.uuid=?1
` `
@ -1013,6 +1014,7 @@ type QueryJobTaskSummariesRow struct {
Status api.TaskStatus Status api.TaskStatus
Type string Type string
UpdatedAt sql.NullTime UpdatedAt sql.NullTime
WorkerUUID sql.NullString
} }
func (q *Queries) QueryJobTaskSummaries(ctx context.Context, jobUuid string) ([]QueryJobTaskSummariesRow, error) { func (q *Queries) QueryJobTaskSummaries(ctx context.Context, jobUuid string) ([]QueryJobTaskSummariesRow, error) {
@ -1033,6 +1035,7 @@ func (q *Queries) QueryJobTaskSummaries(ctx context.Context, jobUuid string) ([]
&i.Status, &i.Status,
&i.Type, &i.Type,
&i.UpdatedAt, &i.UpdatedAt,
&i.WorkerUUID,
); err != nil { ); err != nil {
return nil, err return nil, err
} }

View File

@ -2072,6 +2072,7 @@ components:
priority: { type: integer } priority: { type: integer }
task_type: { type: string } task_type: { type: string }
updated: { type: string, format: date-time } updated: { type: string, format: date-time }
worker: { $ref: "#/components/schemas/TaskWorker" }
required: [id, name, status, index_in_job, priority, task_type, updated] required: [id, name, status, index_in_job, priority, task_type, updated]
TaskLogInfo: TaskLogInfo:

View File

@ -18,236 +18,236 @@ import (
// Base64 encoded, gzipped, json marshaled Swagger object // Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{ var swaggerSpec = []string{
"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",
"AA==", "/qj6WxIBAA==",
} }
// GetSwagger returns the content of the embedded swagger specification file // GetSwagger returns the content of the embedded swagger specification file

View File

@ -787,6 +787,9 @@ type TaskSummary struct {
Status TaskStatus `json:"status"` Status TaskStatus `json:"status"`
TaskType string `json:"task_type"` TaskType string `json:"task_type"`
Updated time.Time `json:"updated"` Updated time.Time `json:"updated"`
// Worker reference, as used in Task objects.
Worker *TaskWorker `json:"worker,omitempty"`
} }
// TaskUpdate is sent by a Worker to update the status & logs of a task it's executing. All properties are optional; omitted properties are ignored (i.e. omitting `activity` will not erase the activity property of the task). // TaskUpdate is sent by a Worker to update the status & logs of a task it's executing. All properties are optional; omitted properties are ignored (i.e. omitting `activity` will not erase the activity property of the task).

View File

@ -82,6 +82,19 @@ export default {
return datetime.relativeTime(cellValue); return datetime.relativeTime(cellValue);
}, },
}, },
{
title: 'Worker',
field: 'worker.name',
sorter: 'string',
sorterParams: { alignEmptyValues: 'bottom' },
formatter: (cell) => {
const worker = cell.getData().worker;
if (!worker) return '';
return `<a href="/app/workers/${worker.id}">${worker.name}</a>`;
},
minWidth: 100,
widthGrow: 1,
},
], ],
rowFormatter(row) { rowFormatter(row) {
const data = row.getData(); const data = row.getData();

View File

@ -13,6 +13,7 @@
import ApiClient from '../ApiClient'; import ApiClient from '../ApiClient';
import TaskStatus from './TaskStatus'; import TaskStatus from './TaskStatus';
import TaskWorker from './TaskWorker';
/** /**
* The TaskSummary model module. * The TaskSummary model module.
@ -84,6 +85,9 @@ class TaskSummary {
if (data.hasOwnProperty('updated')) { if (data.hasOwnProperty('updated')) {
obj['updated'] = ApiClient.convertToType(data['updated'], 'Date'); obj['updated'] = ApiClient.convertToType(data['updated'], 'Date');
} }
if (data.hasOwnProperty('worker')) {
obj['worker'] = TaskWorker.constructFromObject(data['worker']);
}
} }
return obj; return obj;
} }
@ -126,6 +130,11 @@ TaskSummary.prototype['task_type'] = undefined;
*/ */
TaskSummary.prototype['updated'] = undefined; TaskSummary.prototype['updated'] = undefined;
/**
* @member {module:model/TaskWorker} worker
*/
TaskSummary.prototype['worker'] = undefined;

View File

@ -14,6 +14,7 @@
import ApiClient from '../ApiClient'; import ApiClient from '../ApiClient';
import TaskStatus from './TaskStatus'; import TaskStatus from './TaskStatus';
import TaskSummary from './TaskSummary'; import TaskSummary from './TaskSummary';
import TaskWorker from './TaskWorker';
import WorkerTaskAllOf from './WorkerTaskAllOf'; import WorkerTaskAllOf from './WorkerTaskAllOf';
/** /**
@ -92,6 +93,9 @@ class WorkerTask {
if (data.hasOwnProperty('updated')) { if (data.hasOwnProperty('updated')) {
obj['updated'] = ApiClient.convertToType(data['updated'], 'Date'); obj['updated'] = ApiClient.convertToType(data['updated'], 'Date');
} }
if (data.hasOwnProperty('worker')) {
obj['worker'] = TaskWorker.constructFromObject(data['worker']);
}
if (data.hasOwnProperty('job_id')) { if (data.hasOwnProperty('job_id')) {
obj['job_id'] = ApiClient.convertToType(data['job_id'], 'String'); obj['job_id'] = ApiClient.convertToType(data['job_id'], 'String');
} }
@ -137,6 +141,11 @@ WorkerTask.prototype['task_type'] = undefined;
*/ */
WorkerTask.prototype['updated'] = undefined; WorkerTask.prototype['updated'] = undefined;
/**
* @member {module:model/TaskWorker} worker
*/
WorkerTask.prototype['worker'] = undefined;
/** /**
* @member {String} job_id * @member {String} job_id
*/ */
@ -172,6 +181,10 @@ TaskSummary.prototype['task_type'] = undefined;
* @member {Date} updated * @member {Date} updated
*/ */
TaskSummary.prototype['updated'] = undefined; TaskSummary.prototype['updated'] = undefined;
/**
* @member {module:model/TaskWorker} worker
*/
TaskSummary.prototype['worker'] = undefined;
// Implement WorkerTaskAllOf interface: // Implement WorkerTaskAllOf interface:
/** /**
* @member {String} job_id * @member {String} job_id