OAPI: include all info for the jobs table in the JobUpdate schema

By having all info for the jobs table in the `JobUpdate` schema, it won't
have to query for the full job when a new job is added. This fetching of
the full job is now delayed until someone clicks on the table row.
This commit is contained in:
Sybren A. Stüvel 2022-04-12 17:13:53 +02:00
parent 3ab1e9a450
commit e672289a11
15 changed files with 204 additions and 198 deletions

View File

@ -10,7 +10,7 @@
"""
__version__ = "930d7497-dirty"
__version__ = "61618531-dirty"
# import ApiClient
from flamenco.manager.api_client import ApiClient

View File

@ -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/930d7497-dirty (Blender add-on)'
self.user_agent = 'Flamenco/61618531-dirty (Blender add-on)'
def __enter__(self):
return self

View File

@ -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: 930d7497-dirty".\
"SDK Package Version: 61618531-dirty".\
format(env=sys.platform, pyversion=sys.version)
def get_host_settings(self):

View File

@ -1,5 +1,6 @@
# JobUpdate
Subset of a Job, sent over SocketIO when a job changes. For new jobs, `previous_status` will be excluded.
## Properties
Name | Type | Description | Notes
@ -7,6 +8,8 @@ Name | Type | Description | Notes
**id** | **str** | UUID of the Job |
**updated** | **datetime** | Timestamp of last update |
**status** | [**JobStatus**](JobStatus.md) | |
**type** | **str** | |
**priority** | **int** | | defaults to 50
**name** | **str** | Name of the job | [optional]
**previous_status** | [**JobStatus**](JobStatus.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]

View File

@ -90,6 +90,8 @@ class JobUpdate(ModelNormal):
'id': (str,), # noqa: E501
'updated': (datetime,), # noqa: E501
'status': (JobStatus,), # noqa: E501
'type': (str,), # noqa: E501
'priority': (int,), # noqa: E501
'name': (str,), # noqa: E501
'previous_status': (JobStatus,), # noqa: E501
}
@ -103,6 +105,8 @@ class JobUpdate(ModelNormal):
'id': 'id', # noqa: E501
'updated': 'updated', # noqa: E501
'status': 'status', # noqa: E501
'type': 'type', # noqa: E501
'priority': 'priority', # noqa: E501
'name': 'name', # noqa: E501
'previous_status': 'previous_status', # noqa: E501
}
@ -114,15 +118,17 @@ class JobUpdate(ModelNormal):
@classmethod
@convert_js_args_to_python_args
def _from_openapi_data(cls, id, updated, status, *args, **kwargs): # noqa: E501
def _from_openapi_data(cls, id, updated, status, type, *args, **kwargs): # noqa: E501
"""JobUpdate - a model defined in OpenAPI
Args:
id (str): UUID of the Job
updated (datetime): Timestamp of last update
status (JobStatus):
type (str):
Keyword Args:
priority (int): defaults to 50 # 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.
@ -157,6 +163,7 @@ class JobUpdate(ModelNormal):
previous_status (JobStatus): [optional] # noqa: E501
"""
priority = kwargs.get('priority', 50)
_check_type = kwargs.pop('_check_type', True)
_spec_property_naming = kwargs.pop('_spec_property_naming', False)
_path_to_item = kwargs.pop('_path_to_item', ())
@ -185,6 +192,8 @@ class JobUpdate(ModelNormal):
self.id = id
self.updated = updated
self.status = status
self.type = type
self.priority = priority
for var_name, var_value in kwargs.items():
if var_name not in self.attribute_map and \
self._configuration is not None and \
@ -205,15 +214,17 @@ class JobUpdate(ModelNormal):
])
@convert_js_args_to_python_args
def __init__(self, id, updated, status, *args, **kwargs): # noqa: E501
def __init__(self, id, updated, status, type, *args, **kwargs): # noqa: E501
"""JobUpdate - a model defined in OpenAPI
Args:
id (str): UUID of the Job
updated (datetime): Timestamp of last update
status (JobStatus):
type (str):
Keyword Args:
priority (int): defaults to 50 # 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.
@ -248,6 +259,7 @@ class JobUpdate(ModelNormal):
previous_status (JobStatus): [optional] # noqa: E501
"""
priority = kwargs.get('priority', 50)
_check_type = kwargs.pop('_check_type', True)
_spec_property_naming = kwargs.pop('_spec_property_naming', False)
_path_to_item = kwargs.pop('_path_to_item', ())
@ -274,6 +286,8 @@ class JobUpdate(ModelNormal):
self.id = id
self.updated = updated
self.status = status
self.type = type
self.priority = priority
for var_name, var_value in kwargs.items():
if var_name not in self.attribute_map and \
self._configuration is not None and \

View File

@ -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: 930d7497-dirty
- Package version: 61618531-dirty
- Build package: org.openapitools.codegen.languages.PythonClientCodegen
For more information, please visit [https://flamenco.io/](https://flamenco.io/)

View File

@ -14,10 +14,12 @@ import (
// the caller.
func NewJobUpdate(job *persistence.Job) api.JobUpdate {
jobUpdate := api.JobUpdate{
Id: job.UUID,
Name: &job.Name,
Updated: job.UpdatedAt,
Status: job.Status,
Id: job.UUID,
Name: &job.Name,
Updated: job.UpdatedAt,
Status: job.Status,
Type: job.JobType,
Priority: job.Priority,
}
return jobUpdate
}

View File

@ -910,6 +910,9 @@ components:
JobUpdate:
type: object
description: >
Subset of a Job, sent over SocketIO when a job changes.
For new jobs, `previous_status` will be excluded.
properties:
"id":
type: string
@ -922,7 +925,9 @@ components:
description: Timestamp of last update
"status": {$ref: "#/components/schemas/JobStatus"}
"previous_status": {$ref: "#/components/schemas/JobStatus"}
required: [id, updated, status]
"type": {type: string}
"priority": {type: integer, default: 50}
required: [id, updated, status, type, priority]
securitySchemes:
worker_auth:

View File

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

View File

@ -227,7 +227,7 @@ type JobSettings struct {
// JobStatus defines model for JobStatus.
type JobStatus string
// JobUpdate defines model for JobUpdate.
// Subset of a Job, sent over SocketIO when a job changes. For new jobs, `previous_status` will be excluded.
type JobUpdate struct {
// UUID of the Job
Id string `json:"id"`
@ -235,7 +235,9 @@ type JobUpdate struct {
// Name of the job
Name *string `json:"name,omitempty"`
PreviousStatus *JobStatus `json:"previous_status,omitempty"`
Priority int `json:"priority"`
Status JobStatus `json:"status"`
Type string `json:"type"`
// Timestamp of last update
Updated time.Time `json:"updated"`

View File

@ -4,17 +4,17 @@
<span class='flamenco-version'>version: {{ flamencoVersion }}</span>
</header>
<div class="col-1">
<jobs-table ref="jobsTable" :apiClient="apiClient" @activeJobChange="onActiveJobChanged" />
<jobs-table ref="jobsTable" :apiClient="apiClient" @selectedJobChange="onSelectedJobChanged" />
</div>
<div class="col-2">
<job-details :apiClient="apiClient" :jobSummary="activeJobSummary" />
<job-details :apiClient="apiClient" :jobData="selectedJob" />
</div>
<div class="col-3">
<task-details :apiClient="apiClient" />
</div>
<footer>Footer
<update-listener ref="updateListener" :websocketURL="websocketURL" @jobUpdate="onJobUpdate" @message="onChatMessage"
@sioReconnected="onSIOReconnected" @sioDisconnected="onSIODisconnected" />
<update-listener ref="updateListener" :websocketURL="websocketURL" @jobUpdate="onSioJobUpdate"
@message="onChatMessage" @sioReconnected="onSIOReconnected" @sioDisconnected="onSIODisconnected" />
</footer>
</template>
@ -41,7 +41,7 @@ export default {
websocketURL: urls.ws(),
messages: [],
activeJobSummary: {},
selectedJob: {},
flamencoName: DEFAULT_FLAMENCO_NAME,
flamencoVersion: DEFAULT_FLAMENCO_VERSION,
@ -53,23 +53,42 @@ export default {
},
methods: {
// UI component event handlers:
onActiveJobChanged(jobSummary) {
this.activeJobSummary = jobSummary;
onSelectedJobChanged(jobSummary) {
const jobsAPI = new API.JobsApi(this.apiClient);
this._wrap(jobsAPI.fetchJob(jobSummary.id))
.then((job) => {
this.selectedJob = job;
});
},
// SocketIO data event handlers:
sendMessage(message) {
this.$refs.jobsListener.sendBroadcastMessage("typer", message);
},
// SocketIO data event handlers:
onSioJobUpdate(jobUpdate) {
if (!jobUpdate.previous_status)
return this.onJobNew(jobUpdate);
return this.onJobUpdate(jobUpdate);
},
onJobUpdate(jobUpdate) {
console.log("job update received:", jobUpdate);
if (jobUpdate.previous_status) {
this.messages.push(`Job update: ${jobUpdate.id} (${jobUpdate.previous_status}${jobUpdate.status})`);
// this.messages.push(`Job update: ${jobUpdate.id} (${jobUpdate.previous_status} ${jobUpdate.status})`);
if (this.$refs.jobsTable) {
this.$refs.jobsTable.processJobUpdate(jobUpdate);
} else {
this.messages.push(`New job: ${jobUpdate.id} (${jobUpdate.status})`);
this.$refs.jobsTable.processNewJob(jobUpdate);
console.warn("App: this.$refs.jobsTable is", this.$refs.jobsTable);
}
if (this.selectedJob && this.selectedJob.id == jobUpdate.id) {
this.onSelectedJobChanged(jobUpdate);
}
},
onJobNew(jobUpdate) {
if (!this.$refs.jobsTable) {
console.warn("App: this.$refs.jobsTable is", this.$refs.jobsTable);
return;
}
// this.messages.push(`New job: ${jobUpdate.id} (${jobUpdate.status})`);
this.$refs.jobsTable.processNewJob(jobUpdate);
},
onChatMessage(message) {
console.log("chat message received:", message);

View File

@ -60,69 +60,20 @@
<script lang="js">
import * as datetime from "../datetime";
import {
JobsApi,
} from '../manager-api'
export default {
props: [
"apiClient", // Flamenco Manager API client.
// Object, subset of job info, should at least contain an 'id' key. This ID
// determines the job that's shown here. The rest of the fields are used to
// initialise the details until the full job has been fetched from the API.
"jobSummary",
"jobData", // Job data to show.
],
data: () => {
return {
jobData: {},
datetime: datetime,
datetime: datetime, // So that the template can access it.
};
},
mounted() {
// Allow testing from the JS console:
window.jobDetailsVue = this;
},
watch: {
jobSummary(newSummary, oldSummary) {
console.log("Updating job details:", JSON.parse(JSON.stringify(newSummary)));
this.jobData = newSummary;
// TODO later: Fetch the rest of the job. This isn't necessary now,
// because the jobs table already performs the fetch and the "summary" is
// actually the entire job. If this changes, this is the place to trigger
// an actual fetch.
},
},
methods: {
onReconnected() {
// If the connection to the backend was lost, we have likely missed some
// updates. Just fetch the data and start from scratch.
this.fetchJob();
},
fetchJob() {
if (!this.apiClient) {
throw "no apiClient set on JobDetails component";
}
if (!this.jobSummary || !this.jobSummary.id) {
// no job selected, which is fine.
this.clearJobDetails();
return "";
}
const jobsApi = new JobsApi(this.apiClient);
const jobID = this.jobSummary.id;
jobsApi.fetchJob(jobID).then(this.onJobFetched, function (error) {
// TODO: error handling.
console.error(error);
});
return jobID;
},
onJobFetched(data) {
console.log("Job fetched:", data);
},
clearJobDetails() {
this.jobData = {};
},
}
};
</script>

View File

@ -5,13 +5,10 @@
<script lang="js">
import { TabulatorFull as Tabulator } from 'tabulator-tables';
import * as datetime from "../datetime";
import {
JobsApi,
} from '../manager-api'
import * as API from '../manager-api'
export default {
emits: ["activeJobChange"],
emits: ["selectedJobChange"],
props: ["apiClient"],
data: () => {
const options = {
@ -69,7 +66,7 @@ export default {
if (!this.apiClient) {
throw "no apiClient set on JobsTable component";
}
const jobsApi = new JobsApi(this.apiClient);
const jobsApi = new API.JobsApi(this.apiClient);
const jobsQuery = {};
jobsApi.queryJobs(jobsQuery).then(this.onJobsFetched, function (error) {
// TODO: error handling.
@ -87,25 +84,15 @@ export default {
.then(this.sortData);
},
processNewJob(jobUpdate) {
// The update doesn't have all the info we need, so just fetch the job via
// an API call. If this is ever changed, and the jobUpdate does have
// everything needed for this table, JobDetails.vue also needs to be
// adjusted for this.
const jobsApi = new JobsApi(this.apiClient);
jobsApi.fetchJob(jobUpdate.id).then((job) => {
console.log("Fetched job:", JSON.parse(JSON.stringify(job)));
this.tabulator.addData([job])
.then(this.sortData);
}, (error) => {
console.error(error);
});
this.tabulator.addData([jobUpdate])
.then(this.sortData);
},
// Selection handling.
onRowSelected(row) {
this.storeRowSelection();
const rowData = row.getData();
this.$emit("activeJobChange", rowData);
this.$emit("selectedJobChange", rowData);
},
storeRowSelection() {
const selectedData = this.tabulator.getSelectedData();

View File

@ -55,7 +55,7 @@ class ApiClient {
* @default {}
*/
this.defaultHeaders = {
'User-Agent': 'Flamenco/fc363732-dirty / webbrowser'
'User-Agent': 'Flamenco/61618531-dirty / webbrowser'
};
/**

View File

@ -22,14 +22,17 @@ import JobStatus from './JobStatus';
class JobUpdate {
/**
* Constructs a new <code>JobUpdate</code>.
* Subset of a Job, sent over SocketIO when a job changes. For new jobs, &#x60;previous_status&#x60; will be excluded.
* @alias module:model/JobUpdate
* @param id {String} UUID of the Job
* @param updated {Date} Timestamp of last update
* @param status {module:model/JobStatus}
* @param type {String}
* @param priority {Number}
*/
constructor(id, updated, status) {
constructor(id, updated, status, type, priority) {
JobUpdate.initialize(this, id, updated, status);
JobUpdate.initialize(this, id, updated, status, type, priority);
}
/**
@ -37,10 +40,12 @@ class JobUpdate {
* 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, id, updated, status) {
static initialize(obj, id, updated, status, type, priority) {
obj['id'] = id;
obj['updated'] = updated;
obj['status'] = status;
obj['type'] = type;
obj['priority'] = priority || 50;
}
/**
@ -69,6 +74,12 @@ class JobUpdate {
if (data.hasOwnProperty('previous_status')) {
obj['previous_status'] = JobStatus.constructFromObject(data['previous_status']);
}
if (data.hasOwnProperty('type')) {
obj['type'] = ApiClient.convertToType(data['type'], 'String');
}
if (data.hasOwnProperty('priority')) {
obj['priority'] = ApiClient.convertToType(data['priority'], 'Number');
}
}
return obj;
}
@ -104,6 +115,17 @@ JobUpdate.prototype['status'] = undefined;
*/
JobUpdate.prototype['previous_status'] = undefined;
/**
* @member {String} type
*/
JobUpdate.prototype['type'] = undefined;
/**
* @member {Number} priority
* @default 50
*/
JobUpdate.prototype['priority'] = 50;