1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Refactor checkJobStatus() to use API URLs provided via context

This commit is contained in:
jeremystretch
2021-09-08 14:17:27 -04:00
parent 950ce94653
commit 2c1745ce28
5 changed files with 16 additions and 15 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -4,7 +4,7 @@ import { apiGetBase, hasError, getNetboxData } from './util';
let timeout: number = 1000;
interface JobInfo {
id: Nullable<string>;
url: Nullable<string>;
complete: boolean;
}
@ -23,15 +23,16 @@ function asyncTimeout(ms: number) {
function getJobInfo(): JobInfo {
let complete = false;
const id = getNetboxData('data-job-id');
const jobComplete = getNetboxData('data-job-complete');
// Determine the API URL for the job status
const url = getNetboxData('data-job-url');
// Determine the job completion status, if present. If the job is not complete, the value will be
// "None". Otherwise, it will be a stringified date.
const jobComplete = getNetboxData('data-job-complete');
if (typeof jobComplete === 'string' && jobComplete.toLowerCase() !== 'none') {
complete = true;
}
return { id, complete };
return { url, complete };
}
/**
@ -59,10 +60,10 @@ function updateLabel(status: JobStatus) {
/**
* Recursively check the job's status.
* @param id Job ID
* @param url API URL for job result
*/
async function checkJobStatus(id: string) {
const res = await apiGetBase<APIJobResult>(`/api/extras/job-results/${id}/`);
async function checkJobStatus(url: string) {
const res = await apiGetBase<APIJobResult>(url);
if (hasError(res)) {
// If the response is an API error, display an error message and stop checking for job status.
const toast = createToast('danger', 'Error', res.error);
@ -82,17 +83,17 @@ async function checkJobStatus(id: string) {
if (timeout < 10000) {
timeout += 1000;
}
await Promise.all([checkJobStatus(id), asyncTimeout(timeout)]);
await Promise.all([checkJobStatus(url), asyncTimeout(timeout)]);
}
}
}
function initJobs() {
const { id, complete } = getJobInfo();
const { url, complete } = getJobInfo();
if (id !== null && !complete) {
if (url !== null && !complete) {
// If there is a job ID and it is not completed, check for the job's status.
Promise.resolve(checkJobStatus(id));
Promise.resolve(checkJobStatus(url));
}
}

View File

@ -96,6 +96,6 @@
{% endblock %}
{% block data %}
<span data-job-id="{{ result.pk }}"></span>
<span data-job-url="{% url 'extras-api:jobresult-detail' pk=result.pk %}"></span>
<span data-job-complete="{{ result.completed }}"></span>
{% endblock %}

View File

@ -112,6 +112,6 @@
{% endblock content-wrapper %}
{% block data %}
<span data-job-id="{{ result.pk }}"></span>
<span data-job-url="{% url 'extras-api:jobresult-detail' pk=result.pk %}"></span>
<span data-job-complete="{{ result.completed }}"></span>
{% endblock %}