From 8ba6366bc9921342ff140d4acc23b195e3ff07ec Mon Sep 17 00:00:00 2001 From: Chris Houseknecht Date: Thu, 19 Jun 2014 01:09:24 -0400 Subject: [PATCH] Job detail page refactor Experimenting with _.throttle to improve event queue processing. --- awx/ui/static/js/controllers/JobDetail.js | 57 +++++++++++++++-------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/awx/ui/static/js/controllers/JobDetail.js b/awx/ui/static/js/controllers/JobDetail.js index 58ff6b9307..f583eb1696 100644 --- a/awx/ui/static/js/controllers/JobDetail.js +++ b/awx/ui/static/js/controllers/JobDetail.js @@ -9,7 +9,7 @@ function JobDetailController ($rootScope, $scope, $compile, $routeParams, $log, ClearScope, Breadcrumbs, LoadBreadCrumbs, GetBasePath, Wait, Rest, ProcessErrors, ProcessEventQueue, SelectPlay, SelectTask, Socket, GetElapsed, FilterAllByHostName, DrawGraph, LoadHostSummary, ReloadHostSummaryList, - JobIsFinished, SetTaskStyles) { + JobIsFinished, SetTaskStyles, DigestEvent) { ClearScope(); @@ -19,7 +19,8 @@ function JobDetailController ($rootScope, $scope, $compile, $routeParams, $log, api_complete = false, refresh_count = 0, lastEventId = 0, - queue = []; + queue = [], + processEvent; scope.plays = []; scope.playsMap = {}; @@ -66,24 +67,40 @@ function JobDetailController ($rootScope, $scope, $compile, $routeParams, $log, event_socket.init(); + + processEvent = _.throttle(function() { + var event; + if (queue.length > 0) { + event = queue.pop(); + $log.debug('processing event: ' + event.id); + DigestEvent({ + scope: scope, + event: event + }); + } + }, 200); + event_socket.on("job_events-" + job_id, function(data) { data.event = data.event_name; if (api_complete && data.id > lastEventId) { $log.debug('received event: ' + data.id); - if (queue.length < 20) { - queue.unshift(data); - } - else { - api_complete = false; // stop more events from hitting the queue - $log.debug('queue halted. reloading in 1.'); - setTimeout(function() { - $log.debug('reloading'); - scope.haltEventQueue = true; - queue = []; - scope.$emit('LoadJob'); - }, 1000); - } + queue.unshift(data); + processEvent(); } + //if (queue.length < 20) { + // queue.unshift(data); + //} + //*else { + // api_complete = false; // stop more events from hitting the queue + // $log.debug('queue halted. reloading in 1.'); + // setTimeout(function() { + // $log.debug('reloading'); + // scope.haltEventQueue = true; + // queue = []; + // scope.$emit('LoadJob'); + // }, 1000); + // } + //} }); if ($rootScope.removeJobStatusChange) { @@ -150,10 +167,10 @@ function JobDetailController ($rootScope, $scope, $compile, $routeParams, $log, DrawGraph({ scope: scope, resize: true }); } - ProcessEventQueue({ - scope: scope, - eventQueue: queue - }); + //ProcessEventQueue({ + // scope: scope, + // eventQueue: queue + //}); }); @@ -967,5 +984,5 @@ function JobDetailController ($rootScope, $scope, $compile, $routeParams, $log, JobDetailController.$inject = [ '$rootScope', '$scope', '$compile', '$routeParams', '$log', 'ClearScope', 'Breadcrumbs', 'LoadBreadCrumbs', 'GetBasePath', 'Wait', 'Rest', 'ProcessErrors', 'ProcessEventQueue', 'SelectPlay', 'SelectTask', 'Socket', 'GetElapsed', 'FilterAllByHostName', 'DrawGraph', - 'LoadHostSummary', 'ReloadHostSummaryList', 'JobIsFinished', 'SetTaskStyles' + 'LoadHostSummary', 'ReloadHostSummaryList', 'JobIsFinished', 'SetTaskStyles', 'DigestEvent' ];