request job details and initial events dataset concurrently

This commit is contained in:
Jake McDermott
2018-06-08 22:23:54 -04:00
parent 4c93c68a29
commit 5e9da2d772

View File

@@ -26,19 +26,20 @@ const PAGE_LIMIT = 5;
const PAGE_SIZE = 50; const PAGE_SIZE = 50;
const ORDER_BY = 'counter'; const ORDER_BY = 'counter';
const WS_PREFIX = 'ws'; const WS_PREFIX = 'ws';
const API_ROOT = '/api/v2/';
function resolveResource ( function resolveResource (
$state, $state,
$stateParams,
Job, Job,
ProjectUpdate, ProjectUpdate,
AdHocCommand, AdHocCommand,
SystemJob, SystemJob,
WorkflowJob, WorkflowJob,
InventoryUpdate, InventoryUpdate,
$stateParams,
qs, qs,
Wait, Wait,
eventsApi, Events,
) { ) {
const { id, type, handleErrors } = $stateParams; const { id, type, handleErrors } = $stateParams;
const { job_event_search } = $stateParams; // eslint-disable-line camelcase const { job_event_search } = $stateParams; // eslint-disable-line camelcase
@@ -46,24 +47,28 @@ function resolveResource (
const { name, key } = getWebSocketResource(type); const { name, key } = getWebSocketResource(type);
let Resource; let Resource;
let related = 'events'; let related;
switch (type) { switch (type) {
case 'project': case 'project':
Resource = ProjectUpdate; Resource = ProjectUpdate;
related = `project_updates/${id}/events/`;
break; break;
case 'playbook': case 'playbook':
Resource = Job; Resource = Job;
related = 'job_events'; related = `jobs/${id}/job_events/`;
break; break;
case 'command': case 'command':
Resource = AdHocCommand; Resource = AdHocCommand;
related = `ad_hoc_commands/${id}/events/`;
break; break;
case 'system': case 'system':
Resource = SystemJob; Resource = SystemJob;
related = `system_jobs/${id}/events/`;
break; break;
case 'inventory': case 'inventory':
Resource = InventoryUpdate; Resource = InventoryUpdate;
related = `inventory_updates/${id}/events/`;
break; break;
// case 'workflow': // case 'workflow':
// todo: integrate workflow chart components into this view // todo: integrate workflow chart components into this view
@@ -89,21 +94,15 @@ function resolveResource (
Object.assign(config.params, query); Object.assign(config.params, query);
} }
Wait('start'); Events.init(`${API_ROOT}${related}`, config.params);
const resourcePromise = new Resource(['get', 'options'], [id, id])
.then(model => {
const endpoint = `${model.get('url')}${related}/`;
eventsApi.init(endpoint, config.params);
return eventsApi.fetch() Wait('start');
.then(events => ([model, events])); const promise = Promise.all([new Resource(['get', 'options'], [id, id]), Events.fetch()])
})
.then(([model, events]) => ({ .then(([model, events]) => ({
id, id,
type, type,
model, model,
events, events,
related,
ws: { ws: {
events: `${WS_PREFIX}-${key}-${id}`, events: `${WS_PREFIX}-${key}-${id}`,
status: `${WS_PREFIX}-${name}`, status: `${WS_PREFIX}-${name}`,
@@ -116,13 +115,14 @@ function resolveResource (
})); }));
if (!handleErrors) { if (!handleErrors) {
return resourcePromise return promise
.finally(() => Wait('stop')); .finally(() => Wait('stop'));
} }
return resourcePromise return promise
.catch(({ data, status }) => { .catch(({ data, status }) => {
qs.error(data, status); qs.error(data, status);
return $state.go($state.current, $state.params, { reload: true }); return $state.go($state.current, $state.params, { reload: true });
}) })
.finally(() => Wait('stop')); .finally(() => Wait('stop'));
@@ -209,13 +209,13 @@ function JobsRun ($stateRegistry, $filter, strings) {
], ],
resource: [ resource: [
'$state', '$state',
'$stateParams',
'JobModel', 'JobModel',
'ProjectUpdateModel', 'ProjectUpdateModel',
'AdHocCommandModel', 'AdHocCommandModel',
'SystemJobModel', 'SystemJobModel',
'WorkflowJobModel', 'WorkflowJobModel',
'InventoryUpdateModel', 'InventoryUpdateModel',
'$stateParams',
'QuerySet', 'QuerySet',
'Wait', 'Wait',
'JobEventsApiService', 'JobEventsApiService',