From f59b3ad886d381e5881eb3723dc8c028d4942f7b Mon Sep 17 00:00:00 2001 From: John Mitchell Date: Tue, 21 Feb 2017 14:53:18 -0500 Subject: [PATCH 1/7] fix job results codemirror non-mono font --- awx/ui/client/legacy-styles/ansible-ui.less | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/awx/ui/client/legacy-styles/ansible-ui.less b/awx/ui/client/legacy-styles/ansible-ui.less index 825576f8c8..4cc306cb36 100644 --- a/awx/ui/client/legacy-styles/ansible-ui.less +++ b/awx/ui/client/legacy-styles/ansible-ui.less @@ -2247,6 +2247,10 @@ html input[disabled] { cursor: not-allowed; } +.CodeMirror { + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; +} + .CodeMirror--disabled .CodeMirror.cm-s-default, .CodeMirror--disabled .CodeMirror-line { background-color: #f6f6f6; From 69220e94def4a6cbb34fc91c5d093e8421c863c0 Mon Sep 17 00:00:00 2001 From: John Mitchell Date: Tue, 21 Feb 2017 14:55:11 -0500 Subject: [PATCH 2/7] fix race condition with status socket --- .../src/job-results/job-results.controller.js | 21 ++++++++++++++++--- .../src/job-results/job-results.route.js | 10 +++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) 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 582c4f3988..7fe7cc31a0 100644 --- a/awx/ui/client/src/job-results/job-results.controller.js +++ b/awx/ui/client/src/job-results/job-results.controller.js @@ -1,5 +1,5 @@ -export default ['jobData', 'jobDataOptions', 'jobLabels', 'jobFinished', 'count', '$scope', 'ParseTypeChange', 'ParseVariableString', 'jobResultsService', 'eventQueue', '$compile', '$log', 'Dataset', '$q', 'Rest', '$state', 'QuerySet', '$rootScope', 'moment', '$stateParams', 'i18n', 'fieldChoices', 'fieldLabels', 'workflowResultsService', -function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTypeChange, ParseVariableString, jobResultsService, eventQueue, $compile, $log, Dataset, $q, Rest, $state, QuerySet, $rootScope, moment, $stateParams, i18n, fieldChoices, fieldLabels, workflowResultsService) { +export default ['jobData', 'jobDataOptions', 'jobLabels', 'jobFinished', 'count', '$scope', 'ParseTypeChange', 'ParseVariableString', 'jobResultsService', 'eventQueue', '$compile', '$log', 'Dataset', '$q', 'Rest', '$state', 'QuerySet', '$rootScope', 'moment', '$stateParams', 'i18n', 'fieldChoices', 'fieldLabels', 'workflowResultsService', 'statusSocket', +function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTypeChange, ParseVariableString, jobResultsService, eventQueue, $compile, $log, Dataset, $q, Rest, $state, QuerySet, $rootScope, moment, $stateParams, i18n, fieldChoices, fieldLabels, workflowResultsService, statusSocket) { var toDestroy = []; var cancelRequests = false; var runTimeElapsedTimer = null; @@ -664,6 +664,14 @@ function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTy }); })); + // get previously set up socket messages from resolve + if (statusSocket[0].job_status) { + $scope.job_status = statusSocket[0].job_status; + } + if ($scope.job_status === "running") { + runTimeElapsedTimer = workflowResultsService.createOneSecondTimer(moment(), updateJobElapsedTimer); + } + // Processing of job-status messages from the websocket toDestroy.push($scope.$on(`ws-jobs`, function(e, data) { if (parseInt(data.unified_job_id, 10) === @@ -671,7 +679,9 @@ function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTy // controller is defined, so set the job_status $scope.job_status = data.status; if (data.status === "running") { - runTimeElapsedTimer = workflowResultsService.createOneSecondTimer(moment(), updateJobElapsedTimer); + if (!runTimeElapsedTimer) { + runTimeElapsedTimer = workflowResultsService.createOneSecondTimer(moment(), updateJobElapsedTimer); + } } else if (data.status === "successful" || data.status === "failed" || data.status === "error" || @@ -699,7 +709,12 @@ function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTy } })); + statusSocket[1](); + $scope.$on('$destroy', function(){ + if (statusSocket[1]) { + statusSocket[1](); + } $( ".JobResultsStdOut-aLineOfStdOut" ).remove(); cancelRequests = true; eventQueue.initialize(); diff --git a/awx/ui/client/src/job-results/job-results.route.js b/awx/ui/client/src/job-results/job-results.route.js index 755735ddc8..4ea38a97ba 100644 --- a/awx/ui/client/src/job-results/job-results.route.js +++ b/awx/ui/client/src/job-results/job-results.route.js @@ -36,6 +36,16 @@ export default { } }, resolve: { + statusSocket: ['$rootScope', '$stateParams', function($rootScope, $stateParams) { + var preScope = {}; + var eventOn = $rootScope.$on(`ws-jobs`, function(e, data) { + if (parseInt(data.unified_job_id, 10) === + parseInt($stateParams.id,10)) { + preScope.job_status = data.status; + } + }); + return [preScope, eventOn]; + }], // the GET for the particular job jobData: ['Rest', 'GetBasePath', '$stateParams', '$q', '$state', 'Alert', 'jobResultsService', function(Rest, GetBasePath, $stateParams, $q, $state, Alert, jobResultsService) { return jobResultsService.getJobData($stateParams.id); From 191cbeee42c324a8418aac5517d847298f47b3ed Mon Sep 17 00:00:00 2001 From: John Mitchell Date: Tue, 21 Feb 2017 15:03:36 -0500 Subject: [PATCH 3/7] make sure entering already running job case doesn't called elapsed to reset --- awx/ui/client/src/job-results/job-results.controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 7fe7cc31a0..33f93bb535 100644 --- a/awx/ui/client/src/job-results/job-results.controller.js +++ b/awx/ui/client/src/job-results/job-results.controller.js @@ -668,7 +668,7 @@ function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTy if (statusSocket[0].job_status) { $scope.job_status = statusSocket[0].job_status; } - if ($scope.job_status === "running") { + if ($scope.job_status === "running" && !$scope.job.elapsed) { runTimeElapsedTimer = workflowResultsService.createOneSecondTimer(moment(), updateJobElapsedTimer); } From a1f5ee501c601e4a51c3662a15b86b5fa7bd9aff Mon Sep 17 00:00:00 2001 From: John Mitchell Date: Tue, 21 Feb 2017 15:12:35 -0500 Subject: [PATCH 4/7] fix test? --- .../tests/spec/job-results/job-results.controller-test.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/awx/ui/tests/spec/job-results/job-results.controller-test.js b/awx/ui/tests/spec/job-results/job-results.controller-test.js index f0b7f3ecea..8a27faaeab 100644 --- a/awx/ui/tests/spec/job-results/job-results.controller-test.js +++ b/awx/ui/tests/spec/job-results/job-results.controller-test.js @@ -5,7 +5,7 @@ describe('Controller: jobResultsController', () => { // Setup let jobResultsController; - let jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTypeChange, ParseVariableString, jobResultsService, eventQueue, $compile, eventResolve, populateResolve, $rScope, q, $log, Dataset, Rest, $state, QuerySet, i18n,fieldChoices, fieldLabels, $interval, workflowResultsService; + let jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTypeChange, ParseVariableString, jobResultsService, eventQueue, $compile, eventResolve, populateResolve, $rScope, q, $log, Dataset, Rest, $state, QuerySet, i18n,fieldChoices, fieldLabels, $interval, workflowResultsService, statusSocket; jobData = { related: {} @@ -90,7 +90,7 @@ describe('Controller: jobResultsController', () => { }; let injectVals = () => { - angular.mock.inject((_jobData_, _jobDataOptions_, _jobLabels_, _jobFinished_, _count_, _ParseTypeChange_, _ParseVariableString_, _jobResultsService_, _eventQueue_, _$compile_, $rootScope, $controller, $q, $httpBackend, _$log_, _Dataset_, _Rest_, _$state_, _QuerySet_, _$interval_, _workflowResultsService_) => { + angular.mock.inject((_jobData_, _jobDataOptions_, _jobLabels_, _jobFinished_, _count_, _ParseTypeChange_, _ParseVariableString_, _jobResultsService_, _eventQueue_, _$compile_, $rootScope, $controller, $q, $httpBackend, _$log_, _Dataset_, _Rest_, _$state_, _QuerySet_, _$interval_, _workflowResultsService_, _statusSocket_) => { // when you call $scope.$apply() (which you need to do to // to get inside of .then blocks to test), something is // causing a request for all static files. @@ -127,6 +127,7 @@ describe('Controller: jobResultsController', () => { QuerySet = _QuerySet_; $interval = _$interval_; workflowResultsService = _workflowResultsService_; + statusSocket = _statusSocket_; jobResultsService.getEvents.and .returnValue(eventResolve); @@ -157,7 +158,8 @@ describe('Controller: jobResultsController', () => { Dataset: Dataset, Rest: Rest, $state: $state, - QuerySet: QuerySet + QuerySet: QuerySet, + statusSocket: statusSocket }); }); }; From 96121c61898fe7be76b4e5631a4e053db873c532 Mon Sep 17 00:00:00 2001 From: John Mitchell Date: Wed, 22 Feb 2017 13:29:17 -0500 Subject: [PATCH 5/7] fix tests --- awx/ui/client/src/job-results/job-results.controller.js | 8 +++++--- awx/ui/karma.conf.js | 2 +- .../tests/spec/job-results/job-results.controller-test.js | 6 ++++++ 3 files changed, 12 insertions(+), 4 deletions(-) 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 33f93bb535..b257b9e750 100644 --- a/awx/ui/client/src/job-results/job-results.controller.js +++ b/awx/ui/client/src/job-results/job-results.controller.js @@ -665,7 +665,7 @@ function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTy })); // get previously set up socket messages from resolve - if (statusSocket[0].job_status) { + if (statusSocket && statusSocket[0] && statusSocket[0].job_status) { $scope.job_status = statusSocket[0].job_status; } if ($scope.job_status === "running" && !$scope.job.elapsed) { @@ -709,10 +709,12 @@ function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTy } })); - statusSocket[1](); + if (statusSocket && statusSocket[1]) { + statusSocket[1](); + } $scope.$on('$destroy', function(){ - if (statusSocket[1]) { + if (statusSocket && statusSocket[1]) { statusSocket[1](); } $( ".JobResultsStdOut-aLineOfStdOut" ).remove(); diff --git a/awx/ui/karma.conf.js b/awx/ui/karma.conf.js index 4d7d4c8363..12998b4ebf 100644 --- a/awx/ui/karma.conf.js +++ b/awx/ui/karma.conf.js @@ -15,7 +15,7 @@ module.exports = function(config) { frameworks: [ 'jasmine', ], - reporters: ['progress', 'coverage', 'junit'], + reporters: ['progress', 'coverage'], files: [ './client/src/app.js', './node_modules/angular-mocks/angular-mocks.js', diff --git a/awx/ui/tests/spec/job-results/job-results.controller-test.js b/awx/ui/tests/spec/job-results/job-results.controller-test.js index 8a27faaeab..e9a1629143 100644 --- a/awx/ui/tests/spec/job-results/job-results.controller-test.js +++ b/awx/ui/tests/spec/job-results/job-results.controller-test.js @@ -7,6 +7,10 @@ describe('Controller: jobResultsController', () => { let jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTypeChange, ParseVariableString, jobResultsService, eventQueue, $compile, eventResolve, populateResolve, $rScope, q, $log, Dataset, Rest, $state, QuerySet, i18n,fieldChoices, fieldLabels, $interval, workflowResultsService, statusSocket; + statusSocket = function() { + var fn = function() {}; + return fn; + } jobData = { related: {} }; @@ -70,6 +74,8 @@ describe('Controller: jobResultsController', () => { return jasmine.createSpyObj('workflowResultsService', ['createOneSecondTimer', 'destroyTimer']); }); + $provide.value('statusSocket', statusSocket); + $provide.value('jobData', jobData); $provide.value('jobDataOptions', jobDataOptions); $provide.value('jobLabels', jobLabels); From 78dab3741d746f5956d15c87707b839c7701281f Mon Sep 17 00:00:00 2001 From: John Mitchell Date: Wed, 22 Feb 2017 13:44:56 -0500 Subject: [PATCH 6/7] accidentally messed up karma config, reverting --- awx/ui/karma.conf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awx/ui/karma.conf.js b/awx/ui/karma.conf.js index 12998b4ebf..4d7d4c8363 100644 --- a/awx/ui/karma.conf.js +++ b/awx/ui/karma.conf.js @@ -15,7 +15,7 @@ module.exports = function(config) { frameworks: [ 'jasmine', ], - reporters: ['progress', 'coverage'], + reporters: ['progress', 'coverage', 'junit'], files: [ './client/src/app.js', './node_modules/angular-mocks/angular-mocks.js', From 105a926abe09fa27358780cf13192214b5057faf Mon Sep 17 00:00:00 2001 From: John Mitchell Date: Wed, 22 Feb 2017 13:45:43 -0500 Subject: [PATCH 7/7] also remove line from karma config coz chris meyers is an idiot --- awx/ui/karma.conf.js | 1 - 1 file changed, 1 deletion(-) diff --git a/awx/ui/karma.conf.js b/awx/ui/karma.conf.js index 4d7d4c8363..1a22f476b2 100644 --- a/awx/ui/karma.conf.js +++ b/awx/ui/karma.conf.js @@ -20,7 +20,6 @@ module.exports = function(config) { './client/src/app.js', './node_modules/angular-mocks/angular-mocks.js', { pattern: './tests/**/*-test.js' }, - { pattern: './tests/**/*.json', included: false}, 'client/src/**/*.html' ], preprocessors: {