| 'use strict'; |
| |
| angular. |
| module('buildMonitor.controllers', [ 'buildMonitor.services', 'buildMonitor.cron', 'uiSlider', 'jenkins']). |
| |
| controller('JobViews', ['$scope', '$rootScope', 'proxy', 'every', 'connectivityStrategist', |
| function ($scope, $rootScope, proxy, every, connectivityStrategist) { |
| var tryToRecover = connectivityStrategist.decideOnStrategy, |
| fetchJobViews = proxy.buildMonitor.fetchJobViews; |
| |
| $scope.jobs = {}; |
| |
| every(5000, function () { |
| |
| return fetchJobViews().then(function (response) { |
| |
| $scope.jobs = response.data.jobs; |
| $scope.title = response.data.title; |
| $scope.oncall = response.data.oncall; |
| |
| $rootScope.$broadcast('jenkins:data-fetched', {}); |
| |
| }, tryToRecover()); |
| }); |
| }]). |
| |
| service('connectivityStrategist', ['$rootScope', '$q', 'counter', |
| function ($rootScope, $q, counter) { |
| |
| var lostConnectionsCount = counter; |
| |
| this.resetErrorCounter = function () { |
| if (lostConnectionsCount.value() > 0) { |
| $rootScope.$broadcast("jenkins:connection-reestablished", {}); |
| } |
| |
| lostConnectionsCount.reset(); |
| } |
| |
| this.decideOnStrategy = function () { |
| |
| function handleLostConnection(error) { |
| lostConnectionsCount.increase(); |
| |
| $rootScope.$broadcast("jenkins:connection-lost", error); |
| |
| return $q.when(error); |
| } |
| |
| function handleJenkinsRestart(error) { |
| $rootScope.$broadcast("jenkins:restarted", error); |
| return $q.reject(error); |
| } |
| |
| function handleInternalJenkins(error) { |
| $rootScope.$broadcast("jenkins:internal-error", error); |
| return $q.reject(error); |
| } |
| |
| function handleUnknown(error) { |
| $rootScope.$broadcast("jenkins:unknown-communication-error", error); |
| return $q.reject(error); |
| } |
| |
| return function (error) { |
| switch (error.status) { |
| case 0: return handleLostConnection(error); |
| case 404: return handleJenkinsRestart(error); |
| case 500: return handleInternalJenkins(error); |
| default: return handleUnknown(error); |
| } |
| } |
| } |
| }]). |
| |
| directive('notifier', ['$timeout', function ($timeout) { |
| return { |
| restrict: 'E', |
| controller: function ($scope) { |
| $scope.message = ''; |
| |
| $scope.$on('jenkins:connection-lost', function () { |
| $scope.message = 'Communication with Jenkins mother ship is lost. Trying to reconnect...'; |
| }); |
| |
| $scope.$on('jenkins:connection-reestablished', function () { |
| $scope.message = "... and we're back online, yay! :-)"; |
| |
| $timeout(function () { |
| $scope.message = ""; |
| }, 3000); |
| }); |
| }, |
| replace: true, |
| template: '<span class="notifier" ' + |
| 'ng-show="message"' + |
| 'ng-animate="\'fade\'">' + |
| '{{ message }}' + |
| "</span>\n" |
| } |
| }]). |
| |
| run(['$rootScope', '$window', '$log', 'notifyUser', 'connectivityStrategist', |
| function ($rootScope, $window, $log, notifyUser, connectivityStrategist) { |
| $rootScope.$on('jenkins:data-fetched', function (event) { |
| connectivityStrategist.resetErrorCounter(); |
| }); |
| |
| $rootScope.$on('jenkins:internal-error', function (event, error) { |
| notifyUser.aboutInternalJenkins(error); |
| }); |
| |
| $rootScope.$on('jenkins:restarted', function (event, error) { |
| $window.location.reload(); |
| }); |
| |
| $rootScope.$on('jenkins:unknown-communication-error', function (event, error) { |
| notifyUser.about(error.status); |
| }); |
| }]); |