blob: f05d00fda388b2ea878985d8bb4833dd44e8249c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
(function () {
// rootPath of this site, it has a tailing slash /
var rootPath = function () {
var root = location.origin + location.pathname;
return root.substring(0, root.lastIndexOf("/") + 1);
}();
angular.module('dashboard', [
'ngAnimate',
'ngSanitize',
'ngCookies',
'ngTouch',
'mgcrea.ngStrap',
'ui.router',
'ui.select',
'cfp.loadingBarInterceptor',
'ngFileUpload',
'dashing',
'org.apache.gearpump.models'
])
// configure routes
.config(['$stateProvider', '$urlRouterProvider',
function ($stateProvider, $urlRouterProvider) {
'use strict';
$urlRouterProvider
.when('', '/')
.when('/', '/cluster')
.when('/cluster', '/cluster/master');
$stateProvider
.state('cluster', {
abstract: true, // todo: we have a sidebar for cluster only
url: '/cluster',
templateUrl: 'views/cluster/overview.html'
});
// Please check every controller for corresponding state definition
}])
// configure loading bar effect
.config(['cfpLoadingBarProvider', function (cfpLoadingBarProvider) {
'use strict';
cfpLoadingBarProvider.includeSpinner = false;
cfpLoadingBarProvider.latencyThreshold = 1000;
}])
// configure angular-strap
.config(['$tooltipProvider', function ($tooltipProvider) {
'use strict';
angular.extend($tooltipProvider.defaults, {
html: true
});
}])
// configure dashing
.config(['dashing.i18n', function (i18n) {
'use strict';
i18n.confirmationYesButtonText = 'OK';
i18n.confirmationNoButtonText = 'Cancel';
}])
// disable logging for production
.config(['$compileProvider', function ($compileProvider) {
'use strict';
$compileProvider.debugInfoEnabled(false);
}])
// constants
.constant('conf', {
restapiProtocol: 'v1.0',
restapiRoot: rootPath,
restapiQueryInterval: 3 * 1000, // in milliseconds
restapiQueryTimeout: 30 * 1000, // in milliseconds
restapiTaskLevelMetricsQueryLimit: 100,
loginUrl: rootPath + 'login'
})
/* add a retry delay for angular-ui-router, when resolving a data is failed */
.run(['$rootScope', '$state', 'conf', function ($rootScope, $state, conf) {
'use strict';
$rootScope.$on('$stateChangeError', function (event, toState) {
event.preventDefault();
_.delay($state.go, conf.restapiQueryTimeout, toState);
});
}])
/* enable a health check service */
.run(['$modal', 'HealthCheckService', 'conf', function ($modal, HealthCheckService, conf) {
'use strict';
var dialog = $modal({
templateUrl: 'views/service_unreachable_notice.html',
backdrop: 'static',
show: false
});
var showDialogFn = function () {
dialog.$promise.then(dialog.show);
};
var hideDialogFn = function () {
// simply refresh the page, to make sure page status is fresh
location.reload();
};
HealthCheckService.config(
conf.restapiRoot + 'version',
conf.restapiQueryInterval,
showDialogFn,
hideDialogFn
);
HealthCheckService.checkForever();
}]);
})();