You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by yu...@apache.org on 2014/08/22 02:03:21 UTC
git commit: Revert "AMBARI-6967. Admin View: default login behavior
(route to Admin View, Cluster Dashboard, or Views Landing page). (yusaku)"
Repository: ambari
Updated Branches:
refs/heads/trunk 8831f36c2 -> fc600523a
Revert "AMBARI-6967. Admin View: default login behavior (route to Admin View, Cluster Dashboard, or Views Landing page). (yusaku)"
This reverts commit b750cd8f22443cfb77e7849f6fe42dff400a6200.
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/fc600523
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/fc600523
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/fc600523
Branch: refs/heads/trunk
Commit: fc600523a3842faad04b25fb2817638585d2fc18
Parents: 8831f36
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Thu Aug 21 17:03:10 2014 -0700
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Thu Aug 21 17:03:10 2014 -0700
----------------------------------------------------------------------
ambari-web/app/controllers.js | 1 +
.../controllers/global/cluster_controller.js | 44 ++++++++
ambari-web/app/controllers/main.js | 1 -
.../app/controllers/main/views_controller.js | 80 +-------------
ambari-web/app/mappers/users_mapper.js | 2 +-
ambari-web/app/messages.js | 2 +
ambari-web/app/router.js | 108 ++++++++-----------
ambari-web/app/routes/main.js | 22 ++++
ambari-web/app/routes/views.js | 53 ---------
ambari-web/app/utils/ajax/ajax.js | 2 +-
ambari-web/app/views/main/menu.js | 7 +-
ambari-web/app/views/main/views_view.js | 4 +-
ambari-web/test/mappers/users_mapper_test.js | 2 +-
13 files changed, 119 insertions(+), 209 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc600523/ambari-web/app/controllers.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers.js b/ambari-web/app/controllers.js
index c4a1001..063af6a 100644
--- a/ambari-web/app/controllers.js
+++ b/ambari-web/app/controllers.js
@@ -54,6 +54,7 @@ require('controllers/main/admin/highAvailability/resourceManager/step4_controlle
require('controllers/main/admin/repositories');
require('controllers/main/admin/stack_upgrade_controller');
require('controllers/main/admin/serviceAccounts_controller');
+require('controllers/main/admin/access_controller');
require('controllers/main/admin/advanced');
require('utils/polling');
require('controllers/main/admin/security');
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc600523/ambari-web/app/controllers/global/cluster_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/cluster_controller.js b/ambari-web/app/controllers/global/cluster_controller.js
index 3d14754..d612039 100644
--- a/ambari-web/app/controllers/global/cluster_controller.js
+++ b/ambari-web/app/controllers/global/cluster_controller.js
@@ -22,6 +22,7 @@ App.ClusterController = Em.Controller.extend({
name: 'clusterController',
isLoaded: false,
ambariProperties: null,
+ ambariViews: [],
clusterDataLoadedPercent: 'width:0', // 0 to 1
isGangliaUrlLoaded: false,
@@ -248,6 +249,7 @@ App.ClusterController = Em.Controller.extend({
loadClusterData: function () {
var self = this;
this.loadAmbariProperties();
+ this.loadAmbariViews();
if (!App.get('clusterName')) {
return;
}
@@ -347,6 +349,48 @@ App.ClusterController = Em.Controller.extend({
}, callback)
},
+ loadAmbariViews: function () {
+ App.ajax.send({
+ name: 'views.info',
+ sender: this,
+ success: 'loadAmbariViewsSuccess'
+ });
+ },
+
+ loadAmbariViewsSuccess: function (data) {
+ if (data.items.length) {
+ App.ajax.send({
+ name: 'views.instances',
+ sender: this,
+ success: 'loadViewInstancesSuccess'
+ });
+ } else {
+ this.set('ambariViews', []);
+ }
+ },
+
+ loadViewInstancesSuccess: function (data) {
+ this.set('ambariViews', []);
+ var self = this;
+ data.items.forEach(function (view) {
+ view.versions.forEach(function (version) {
+ version.instances.forEach(function (instance) {
+ var current_instance = Em.Object.create({
+ iconPath: instance.ViewInstanceInfo.icon_path || "/img/ambari-view-default.png",
+ label: instance.ViewInstanceInfo.label || version.ViewVersionInfo.label || instance.ViewInstanceInfo.view_name,
+ visible: instance.ViewInstanceInfo.visible || false,
+ version: instance.ViewInstanceInfo.version,
+ description: instance.ViewInstanceInfo.description || Em.I18n.t('views.main.instance.noDescription'),
+ viewName: instance.ViewInstanceInfo.view_name,
+ instanceName: instance.ViewInstanceInfo.instance_name,
+ href: instance.ViewInstanceInfo.context_path
+ });
+ self.get('ambariViews').pushObject(current_instance);
+ }, this);
+ }, this);
+ }, this);
+ },
+
/**
*
* @param callback
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc600523/ambari-web/app/controllers/main.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main.js b/ambari-web/app/controllers/main.js
index b5d83c4..55db450 100644
--- a/ambari-web/app/controllers/main.js
+++ b/ambari-web/app/controllers/main.js
@@ -44,7 +44,6 @@ App.MainController = Em.Controller.extend({
*/
initialize: function(){
App.router.get('clusterController').loadClusterData();
- App.router.get('mainViewsController').loadAmbariViews();
},
dataLoading: function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc600523/ambari-web/app/controllers/main/views_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/views_controller.js b/ambari-web/app/controllers/main/views_controller.js
index 687554b..5d64da6 100644
--- a/ambari-web/app/controllers/main/views_controller.js
+++ b/ambari-web/app/controllers/main/views_controller.js
@@ -21,87 +21,9 @@ var App = require('app');
App.MainViewsController = Em.Controller.extend({
name:'mainViewsController',
- isDataLoaded: false,
-
- ambariViews: [],
-
- dataLoading: function () {
- var viewsController = this;
- var dfd = $.Deferred();
- if (this.get('isDataLoaded')) {
- dfd.resolve(this.get('ambariViews'));
- } else {
- var interval = setInterval(function () {
- if (viewsController.get('isDataLoaded')) {
- dfd.resolve(viewsController.get('ambariViews'));
- clearInterval(interval);
- }
- }, 50);
- }
- return dfd.promise();
- },
-
-
- loadAmbariViews: function () {
- App.ajax.send({
- name: 'views.info',
- sender: this,
- success: 'loadAmbariViewsSuccess',
- error: 'loadAmbariViewsError'
- });
- },
-
- loadAmbariViewsSuccess: function (data, opt, params) {
- if (data.items.length) {
- App.ajax.send({
- name: 'views.instances',
- sender: this,
- success: 'loadViewInstancesSuccess',
- error: 'loadViewInstancesError'
- });
- } else {
- this.set('ambariViews', []);
- this.set('isDataLoaded', true);
- }
- },
-
- loadAmbariViewsError: function () {
- this.set('ambariViews', []);
- this.set('isDataLoaded', true);
- },
-
- loadViewInstancesSuccess: function (data, opt, params) {
- this.set('ambariViews', []);
- var instances = [];
- data.items.forEach(function (view) {
- view.versions.forEach(function (version) {
- version.instances.forEach(function (instance) {
- var current_instance = Em.Object.create({
- iconPath: instance.ViewInstanceInfo.icon_path || "/img/ambari-view-default.png",
- label: instance.ViewInstanceInfo.label || version.ViewVersionInfo.label || instance.ViewInstanceInfo.view_name,
- visible: instance.ViewInstanceInfo.visible || false,
- version: instance.ViewInstanceInfo.version,
- description: instance.ViewInstanceInfo.description || Em.I18n.t('views.main.instance.noDescription'),
- viewName: instance.ViewInstanceInfo.view_name,
- instanceName: instance.ViewInstanceInfo.instance_name,
- href: instance.ViewInstanceInfo.context_path
- });
- instances.push(current_instance);
- }, this);
- }, this);
- }, this);
- this.get('ambariViews').pushObjects(instances);
- this.set('isDataLoaded', true);
- },
-
- loadViewInstancesError: function () {
- this.set('ambariViews', []);
- this.set('isDataLoaded', true);
- },
-
setView: function(event) {
if(event.context){
- App.router.transitionTo('views.viewDetails', event.context);
+ App.router.transitionTo('main.views.viewDetails', event.context);
}
}
});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc600523/ambari-web/app/mappers/users_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/users_mapper.js b/ambari-web/app/mappers/users_mapper.js
index 0f86ef6..19b3098 100644
--- a/ambari-web/app/mappers/users_mapper.js
+++ b/ambari-web/app/mappers/users_mapper.js
@@ -49,6 +49,6 @@ App.usersMapper = App.QuickDataMapper.create({
* @return {Boolean}
**/
isAdmin: function(permissionList) {
- return permissionList.indexOf('AMBARI.ADMIN') > -1 || permissionList.indexOf('CLUSTER.OPERATE') > -1;
+ return permissionList.indexOf('AMBARI.ADMIN') > -1 || permissionList.indexOf('CLUSTER.OPERATOR') > -1;
}
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc600523/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index f569411..eda41f7 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -276,6 +276,8 @@ Em.I18n.translations = {
'popup.confirmationFeedBack.sending':'Sending...',
'popup.confirmationFeedBack.query.fail':'Request failed',
+ 'router.hadoopClusterNotSetUp':'Your administrator has not set up a Hadoop cluster yet.',
+
'login.header':'Sign in',
'login.username':'Username',
'login.loginButton':'Sign in',
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc600523/ambari-web/app/router.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/router.js b/ambari-web/app/router.js
index 5510434..3b4fb07 100644
--- a/ambari-web/app/router.js
+++ b/ambari-web/app/router.js
@@ -168,21 +168,22 @@ App.Router = Em.Router.extend({
data: {
userName: userName
},
- success: 'getUserPrivilegesSuccess',
- error: 'getUserPrivilegesError'
+ success: 'getUserPrivilegesSuccess'
});
},
getUserPrivilegesSuccess: function() {},
- getUserPrivilegesError: function(req) {
- console.log("Get user privileges error: " + req.statusCode);
- },
-
setUserLoggedIn: function(userName) {
+ var controller = this.get('loginController'),
+ self = this;
this.setAuthenticated(true);
this.setLoginName(userName);
this.setUser(App.User.find().findProperty('id', userName));
+ this.getSection(function(route){
+ self.transitionTo(route);
+ controller.postLogin(true,true);
+ });
},
login: function () {
@@ -221,15 +222,29 @@ App.Router = Em.Router.extend({
loginSuccessCallback: function(data, opt, params) {
console.log('login success');
- App.ajax.send({
- name: 'router.login.clusters',
- sender: this,
- data: {
- loginName: params.loginName,
- loginData: data
- },
- success: 'loginGetClustersSuccessCallback',
- error: 'loginGetClustersErrorCallback'
+ var isAdmin = false;
+ var self = this;
+ this.getUserPrivileges(data.Users.user_name).done(function(privileges) {
+ data.privileges = privileges;
+ App.usersMapper.map({"items": [data]});
+ isAdmin = App.usersMapper.isAdmin(privileges.items.mapProperty('PrivilegeInfo.permission_name'));
+ if (isAdmin) {
+ App.set('isAdmin', true);
+ self.setUserLoggedIn(params.loginName);
+ return true;
+ }
+ else {
+ return App.ajax.send({
+ name: 'router.login2',
+ sender: self,
+ data: {
+ loginName: params.loginName,
+ loginData: data
+ },
+ success: 'login2SuccessCallback',
+ error: 'login2ErrorCallback'
+ });
+ }
});
},
@@ -245,55 +260,19 @@ App.Router = Em.Router.extend({
},
- loginGetClustersSuccessCallback: function (clustersData, opt, params) {
- var adminViewUrl = '/views/ADMIN_VIEW/1.0.0/INSTANCE/#/';
- //TODO: Replace hard coded value with query. Same in templates/application.hbs
- var loginController = this.get('loginController');
- var loginData = params.loginData;
- var router = this;
-
- this.getUserPrivileges(params.loginName).done(function(privileges) {
- loginData.privileges = privileges;
- App.usersMapper.map({"items": [loginData]});
- router.setUserLoggedIn(params.loginName);
- var permissionList = privileges.items.mapProperty('PrivilegeInfo.permission_name');
- var isAdmin = permissionList.indexOf('AMBARI.ADMIN') > -1;
- var transitionToApp = false;
- if (isAdmin) {
- App.set('isAdmin', true);
- if (clustersData.items.length) {
- transitionToApp = true;
- } else {
- window.location = adminViewUrl;
- return;
- }
- } else {
- if (clustersData.items.length) {
- //TODO: Iterate over clusters
- var clusterName = clustersData.items[0].Clusters.cluster_name;
- var clusterPermissions = privileges.items.filterProperty('PrivilegeInfo.cluster_name', clusterName).mapProperty('PrivilegeInfo.permission_name');
- if (clusterPermissions.indexOf('CLUSTER.OPERATE') > -1) {
- App.set('isAdmin', true);
- transitionToApp = true;
- } else if (clusterPermissions.indexOf('CLUSTER.READ') > -1) {
- transitionToApp = true;
- }
- }
- }
- if (transitionToApp) {
- router.getSection(function (route) {
- router.transitionTo(route);
- loginController.postLogin(true, true);
- });
- } else {
- router.transitionTo('views.index');
- loginController.postLogin(true,true);
- }
- });
+ login2SuccessCallback: function (clusterResp, opt, params) {
+ var controller = this.get('loginController');
+ if (clusterResp.items.length) {
+ App.usersMapper.map({"items": [params.loginData]});
+ this.setUserLoggedIn(params.loginName);
+ }
+ else {
+ controller.set('errorMessage', Em.I18n.t('router.hadoopClusterNotSetUp'));
+ }
},
- loginGetClustersErrorCallback: function (req) {
- console.log("Get clusters error: " + req.statusCode);
+ login2ErrorCallback: function (req) {
+ console.log("Server not responding: " + req.statusCode);
},
getSection: function (callback) {
@@ -368,7 +347,6 @@ App.Router = Em.Router.extend({
});
}
this.transitionTo('login', context);
- window.location.reload();
},
logOffSuccessCallback: function (data) {
@@ -430,9 +408,7 @@ App.Router = Em.Router.extend({
installer: require('routes/installer'),
main: require('routes/main'),
-
- views: require('routes/views'),
-
+
experimental: Em.Route.extend({
route: '/experimental',
enter: function (router, context) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc600523/ambari-web/app/routes/main.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/main.js b/ambari-web/app/routes/main.js
index f822c48..b73627a 100644
--- a/ambari-web/app/routes/main.js
+++ b/ambari-web/app/routes/main.js
@@ -67,6 +67,28 @@ module.exports = Em.Route.extend({
router.get('applicationController').connectOutlet('main');
},
+
+ views: Em.Route.extend({
+ route: '/views',
+ index: Em.Route.extend({
+ route: '/',
+ connectOutlets: function (router, context) {
+ router.get('mainController').connectOutlet('mainViews');
+ }
+ }),
+ viewDetails: Em.Route.extend({
+ route: '/:viewName/:version/:instanceName',
+ connectOutlets: function (router, params) {
+ router.get('mainController').dataLoading().done(function() {
+ // find and set content for `mainViewsDetails` and associated controller
+ router.get('mainController').connectOutlet('mainViewsDetails', App.router.get('clusterController.ambariViews')
+ .findProperty('href', ['/views', params.viewName, params.version, params.instanceName].join('/')));
+ });
+ }
+ })
+ }),
+
+
test: Em.Route.extend({
route: '/test',
connectOutlets: function (router, context) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc600523/ambari-web/app/routes/views.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/views.js b/ambari-web/app/routes/views.js
deleted file mode 100644
index d72dbf0..0000000
--- a/ambari-web/app/routes/views.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 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.
- */
-
-var App = require('app');
-var stringUtils = require('utils/string_utils');
-
-module.exports = Em.Route.extend({
- route: '/views',
- enter: function (router) {
- router.getAuthenticated().done(function (loggedIn) {
- if (loggedIn) {
- router.get('mainViewsController').loadAmbariViews();
- } else {
- Em.run.next(function () {
- router.transitionTo('login');
- });
- }
- });
- },
- index: Em.Route.extend({
- route: '/',
- connectOutlets: function (router) {
- router.get('mainViewsController').dataLoading().done(function() {
- router.get('applicationController').connectOutlet('mainViews');
- });
- }
- }),
- viewDetails: Em.Route.extend({
- route: '/:viewName/:version/:instanceName',
- connectOutlets: function (router, params) {
- // find and set content for `mainViewsDetails` and associated controller
- router.get('mainViewsController').dataLoading().done(function() {
- router.get('applicationController').connectOutlet('mainViewsDetails', App.router.get('mainViewsController.ambariViews')
- .findProperty('href', ['/views', params.viewName, params.version, params.instanceName].join('/')));
- });
- }
- })
-});
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc600523/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index 4213bc5..09d68c6 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1370,7 +1370,7 @@ var urls = {
real: '/privileges?PrivilegeInfo/principal_name={userName}&fields=*',
mock: '/data/users/privileges_{userName}.json'
},
- 'router.login.clusters': {
+ 'router.login2': {
'real': '/clusters',
'mock': '/data/clusters/info.json'
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc600523/ambari-web/app/views/main/menu.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/menu.js b/ambari-web/app/views/main/menu.js
index c9d475a..ea4a2bd 100644
--- a/ambari-web/app/views/main/menu.js
+++ b/ambari-web/app/views/main/menu.js
@@ -27,8 +27,8 @@ App.MainMenuView = Em.CollectionView.extend({
classNames:['nav', 'top-nav-menu'],
views: function() {
- return App.router.get('mainViewsController.ambariViews');
- }.property('App.router.mainViewsController.ambariViews'),
+ return App.router.get('clusterController.ambariViews');
+ }.property('App.router.clusterController.ambariViews'),
content: function(){
var result = [];
@@ -121,9 +121,6 @@ App.MainMenuView = Em.CollectionView.extend({
goToSection: function (event) {
if (event.context === 'hosts') {
App.router.set('mainHostController.showFilterConditionsFirstLoad', false);
- } else if (event.context === 'views') {
- App.router.route('views');
- return;
}
App.router.route('main/' + event.context);
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc600523/ambari-web/app/views/main/views_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/views_view.js b/ambari-web/app/views/main/views_view.js
index 3c97baf..5a16bbd 100644
--- a/ambari-web/app/views/main/views_view.js
+++ b/ambari-web/app/views/main/views_view.js
@@ -25,8 +25,8 @@ App.MainViewsView = Em.View.extend({
classNames: [""],
views: function() {
- return App.router.get('mainViewsController.ambariViews');
- }.property('App.router.mainViewsController.ambariViews'),
+ return App.router.get('clusterController.ambariViews');
+ }.property('App.ClusterController.ambariViews'),
selectedViewBinding: 'controller.selectedView'
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc600523/ambari-web/test/mappers/users_mapper_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/mappers/users_mapper_test.js b/ambari-web/test/mappers/users_mapper_test.js
index 767a002..20c6bae 100644
--- a/ambari-web/test/mappers/users_mapper_test.js
+++ b/ambari-web/test/mappers/users_mapper_test.js
@@ -29,7 +29,7 @@ describe('App.usersMapper', function () {
{i:["AMBARI.ADMIN"],e:true,m:'has admin role'},
{i:["CLUSTER.READ", "AMBARI.ADMIN"],e:true,m:'has admin role'},
{i:["VIEW.USE"],e:false,m:'doesn\'t have admin role'},
- {i:["CLUSTER.OPERATE"],e:true,m:'has admin role'}
+ {i:["CLUSTER.OPERATOR"],e:true,m:'has admin role'}
];
tests.forEach(function(test) {
it(test.m, function() {