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 178fd88f4b..bf4bac3799 100644 --- a/awx/ui/client/src/job-results/parse-stdout.service.js +++ b/awx/ui/client/src/job-results/parse-stdout.service.js @@ -27,6 +27,7 @@ export default ['$log', 'moment', function($log, moment){ line = line.replace(/u001b/g, ''); // ansi classes + line = line.replace(/\[1;im/g, ''); line = line.replace(/\[1;31m/g, ''); line = line.replace(/\[0;31m/g, ''); line = line.replace(/\[0;32m/g, ''); @@ -39,6 +40,7 @@ export default ['$log', 'moment', function($log, moment){ line = line.replace(/()\s/g, '$1'); //end span + line = line.replace(/\[0im/g, ''); line = line.replace(/\[0m/g, ''); } else { // For the host event modal in the standard out tab, @@ -192,10 +194,22 @@ export default ['$log', 'moment', function($log, moment){ } }, getLineArr: function(event) { - return _ - .zip(_.range(event.start_line + 1, - event.end_line + 1), - event.stdout.replace("\t", " ").split("\r\n")).slice(0, -1); + let lineNums = _.range(event.start_line + 1, + event.end_line + 1); + + let lines = event.stdout + .replace("\t", " ") + .split("\r\n"); + + if (lineNums.length > lines.length) { + let padBy = lineNums.length - lines.length; + + for (let i = 0; i <= padBy; i++) { + lines.push("[1;imline capped.[0im"); + } + } + + return _.zip(lineNums, lines).slice(0, -1); }, // public function that provides the parsed stdout line, given a // job_event diff --git a/awx/ui/tests/spec/job-results/parse-stdout.service-test.js b/awx/ui/tests/spec/job-results/parse-stdout.service-test.js index 5dd6788b02..e34ad4d6c2 100644 --- a/awx/ui/tests/spec/job-results/parse-stdout.service-test.js +++ b/awx/ui/tests/spec/job-results/parse-stdout.service-test.js @@ -115,6 +115,19 @@ describe('parseStdoutService', () => { expect(returnedEvent).toEqual(expectedReturn); }); + + it('deals correctly with capped lines', () => { + let mockEvent = { + start_line: 7, + end_line: 11, + stdout: "a\r\nb\r\nc..." + }; + let expectedReturn = [[8, "a"],[9, "b"], [10,"c..."], [11, "[1;imline capped.[0im"]]; + + let returnedEvent = parseStdoutService.getLineArr(mockEvent); + + expect(returnedEvent).toEqual(expectedReturn); + }); }); describe('parseStdout()', () => {