From e6d4de301bafebfb2b9f4fa87a453408f15f50c5 Mon Sep 17 00:00:00 2001 From: John Mitchell Date: Fri, 25 Aug 2017 16:26:07 -0400 Subject: [PATCH 1/2] fix stdout ordering --- .../src/job-results/event-queue.service.js | 1 + .../src/job-results/job-results.controller.js | 81 +++++++++++++------ 2 files changed, 56 insertions(+), 26 deletions(-) diff --git a/awx/ui/client/src/job-results/event-queue.service.js b/awx/ui/client/src/job-results/event-queue.service.js index 6982b71e7b..1f4fe874da 100644 --- a/awx/ui/client/src/job-results/event-queue.service.js +++ b/awx/ui/client/src/job-results/event-queue.service.js @@ -27,6 +27,7 @@ export default ['jobResultsService', 'parseStdoutService', function(jobResultsSe if (event.stdout) { mungedEvent.stdout = parseStdoutService.parseStdout(event); mungedEvent.start_line = event.start_line + 1; + mungedEvent.end_line = event.end_line + 1; mungedEvent.changes.push('stdout'); } diff --git a/awx/ui/client/src/job-results/job-results.controller.js b/awx/ui/client/src/job-results/job-results.controller.js index 95d500b05c..15cf662a7b 100644 --- a/awx/ui/client/src/job-results/job-results.controller.js +++ b/awx/ui/client/src/job-results/job-results.controller.js @@ -285,6 +285,51 @@ function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTy } // EVENT STUFF BELOW + var linesInPane = []; + + function addToLinesInPane(event) { + var arr = _.range(event.start_line, event.end_line); + linesInPane = linesInPane.concat(arr); + linesInPane = linesInPane.sort(function(a, b) { + return a - b; + }); + } + + function appendToBottom (event){ + // if we get here then the event type was either a + // header line, recap line, or one of the additional + // event types, so we append it to the bottom. + // These are the event types for captured + // stdout not directly related to playbook or runner + // events: + // (0, 'debug', _('Debug'), False), + // (0, 'verbose', _('Verbose'), False), + // (0, 'deprecated', _('Deprecated'), False), + // (0, 'warning', _('Warning'), False), + // (0, 'system_warning', _('System Warning'), False), + // (0, 'error', _('Error'), True), + angular + .element(".JobResultsStdOut-stdoutContainer") + .append($compile(event + .stdout)($scope.events[event + .counter])); + }; + + function putInCorrectPlace(event) { + if (linesInPane.length) { + for (var i = linesInPane.length - 1; i >= 0; i--) { + if (event.start_line > linesInPane[i]) { + $(`.line_num_${linesInPane[i]}`) + .after($compile(event + .stdout)($scope.events[event + .counter])); + i = -1; + } + } + } else { + appendToBottom(event); + } + } // This is where the async updates to the UI actually happen. // Flow is event queue munging in the service -> $scope setting in here @@ -338,26 +383,6 @@ function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTy } if(change === 'stdout'){ - var appendToBottom = function(mungedEvent){ - // if we get here then the event type was either a - // header line, recap line, or one of the additional - // event types, so we append it to the bottom. - // These are the event types for captured - // stdout not directly related to playbook or runner - // events: - // (0, 'debug', _('Debug'), False), - // (0, 'verbose', _('Verbose'), False), - // (0, 'deprecated', _('Deprecated'), False), - // (0, 'warning', _('Warning'), False), - // (0, 'system_warning', _('System Warning'), False), - // (0, 'error', _('Error'), True), - angular - .element(".JobResultsStdOut-stdoutContainer") - .append($compile(mungedEvent - .stdout)($scope.events[mungedEvent - .counter])); - }; - if (!$scope.events[mungedEvent.counter]) { // line hasn't been put in the pane yet @@ -375,6 +400,7 @@ function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTy .after($compile(mungedEvent .stdout)($scope.events[mungedEvent .counter])); + addToLinesInPane(mungedEvent); } else { var putIn; var classList = $("div", @@ -396,30 +422,33 @@ function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTy var isDup = false; if ($(".header_" + putIn + ",." + putIn).length === 0) { - appendToBottom(mungedEvent); + putInCorrectPlace(mungedEvent); + addToLinesInPane(mungedEvent); } else { $(".header_" + putIn + ",." + putIn) .each((i, v) => { if (angular.element(v).scope() .event.start_line < mungedEvent .start_line) { - putAfter = v; + putAfter = v; } else if (angular.element(v).scope() .event.start_line === mungedEvent .start_line) { - isDup = true; - return false; + isDup = true; + return false; } else if (angular.element(v).scope() .event.start_line > mungedEvent .start_line) { - return false; + return false; } else { appendToBottom(mungedEvent); + addToLinesInPane(mungedEvent); } }); } - if (!isDup) { + if (!isDup && putAfter) { + addToLinesInPane(mungedEvent); $(putAfter).after($compile(mungedEvent .stdout)($scope.events[mungedEvent .counter])); From a5321179acd2e784b438070682dfca02d25221cd Mon Sep 17 00:00:00 2001 From: John Mitchell Date: Mon, 28 Aug 2017 15:06:58 -0400 Subject: [PATCH 2/2] fix stdout ordering missing event issue --- awx/ui/client/src/job-results/event-queue.service.js | 1 + awx/ui/client/src/job-results/job-results.controller.js | 4 ++-- awx/ui/client/src/job-results/parse-stdout.service.js | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/awx/ui/client/src/job-results/event-queue.service.js b/awx/ui/client/src/job-results/event-queue.service.js index 1f4fe874da..c97861ac6b 100644 --- a/awx/ui/client/src/job-results/event-queue.service.js +++ b/awx/ui/client/src/job-results/event-queue.service.js @@ -28,6 +28,7 @@ export default ['jobResultsService', 'parseStdoutService', function(jobResultsSe mungedEvent.stdout = parseStdoutService.parseStdout(event); mungedEvent.start_line = event.start_line + 1; mungedEvent.end_line = event.end_line + 1; + mungedEvent.actual_end_line = parseStdoutService.actualEndLine(event) + 1; mungedEvent.changes.push('stdout'); } diff --git a/awx/ui/client/src/job-results/job-results.controller.js b/awx/ui/client/src/job-results/job-results.controller.js index 15cf662a7b..b85bdbc8f9 100644 --- a/awx/ui/client/src/job-results/job-results.controller.js +++ b/awx/ui/client/src/job-results/job-results.controller.js @@ -288,7 +288,7 @@ function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTy var linesInPane = []; function addToLinesInPane(event) { - var arr = _.range(event.start_line, event.end_line); + var arr = _.range(event.start_line, event.actual_end_line); linesInPane = linesInPane.concat(arr); linesInPane = linesInPane.sort(function(a, b) { return a - b; @@ -313,7 +313,7 @@ function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTy .append($compile(event .stdout)($scope.events[event .counter])); - }; + } function putInCorrectPlace(event) { if (linesInPane.length) { diff --git a/awx/ui/client/src/job-results/parse-stdout.service.js b/awx/ui/client/src/job-results/parse-stdout.service.js index a60ba2e5b1..66c969b9c4 100644 --- a/awx/ui/client/src/job-results/parse-stdout.service.js +++ b/awx/ui/client/src/job-results/parse-stdout.service.js @@ -258,6 +258,9 @@ export default ['$log', 'moment', 'i18n', function($log, moment, i18n){ return _.zip(lineNums, lines).slice(0, -1); }, + actualEndLine: function(event) { + return event.start_line + this.getLineArr(event).length; + }, // public function that provides the parsed stdout line, given a // job_event parseStdout: function(event){