diff --git a/awx/ui/static/js/controllers/JobDetail.js b/awx/ui/static/js/controllers/JobDetail.js index 589bb41364..8b1d233bee 100644 --- a/awx/ui/static/js/controllers/JobDetail.js +++ b/awx/ui/static/js/controllers/JobDetail.js @@ -19,7 +19,9 @@ function JobDetailController ($location, $rootScope, $scope, $compile, $routePar api_complete = false, refresh_count = 0, lastEventId = 0, - verbosity_options, job_type_options; + verbosity_options, + job_type_options, + checkCount = 0; scope.plays = []; scope.hosts = []; @@ -77,20 +79,36 @@ function JobDetailController ($location, $rootScope, $scope, $compile, $routePar "
Failed
\n" + "\n"; - event_socket = Socket({ - scope: scope, - endpoint: "job_events" - }); + function openSocket() { + event_socket = Socket({ + scope: scope, + endpoint: "job_events" + }); + event_socket.init(); + event_socket.on("job_events-" + job_id, function(data) { + if (api_complete && data.id > lastEventId) { + data.event = data.event_name; + DigestEvent({ scope: scope, event: data }); + } + }); + } + openSocket(); - event_socket.init(); - - event_socket.on("job_events-" + job_id, function(data) { - if (api_complete && data.id > lastEventId) { - data.event = data.event_name; - DigestEvent({ scope: scope, event: data }); + $rootScope.checkSocketConnectionInterval = setInterval(function() { + if (event_socket.checkStatus() === 'error' || checkCount > 2) { + // there's an error or we're stuck in a 'connecting' state. attempt to reconnect + $log.debug('job detail page: initializing and restarting socket connections'); + event_socket = null; + openSocket(); + checkCount = 0; } - }); - + else if (event_socket.checkStatus() === 'connecting') { + checkCount++; + } + else { + checkCount = 0; + } + }, 3000); if ($rootScope.removeJobStatusChange) { $rootScope.removeJobStatusChange();