You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ja...@apache.org on 2013/02/25 23:34:01 UTC
svn commit: r1449945 [2/3] - in /incubator/ambari/trunk: ./ ambari-web/app/
ambari-web/app/assets/data/wizard/deploy/5_hosts/
ambari-web/app/controllers/main/ ambari-web/app/controllers/main/admin/
ambari-web/app/controllers/main/admin/security/ ambari...
Added: incubator/ambari/trunk/ambari-web/app/routes/add_security.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/routes/add_security.js?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/routes/add_security.js (added)
+++ incubator/ambari/trunk/ambari-web/app/routes/add_security.js Mon Feb 25 22:34:00 2013
@@ -0,0 +1,129 @@
+/**
+ * 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.
+ */
+
+module.exports = Em.Route.extend({
+ route: '/addSecurity',
+ App: require('app'),
+ enter: function (router) {
+ console.log('in /hosts/add:enter');
+ router.get('mainAdminSecurityController').setAddSecurityWizardStatus('RUNNING');
+
+ Ember.run.next(function () {
+ var mainAdminSecurityController = router.get('mainAdminSecurityController');
+ var addSecurityController = router.get('addSecurityController');
+ var currentStep = router.get('addSecurityController').get('currentStep');
+ App.router.get('updateController').set('isWorking', false);
+ App.ModalPopup.show({
+ classNames: ['full-width-modal'],
+ header: Em.I18n.t('admin.addSecurity.header'),
+ bodyClass: App.MainAdminSecurityAddMenuView.extend({
+ controllerBinding: 'App.router.addSecurityController'
+ }),
+ primary: Em.I18n.t('form.cancel'),
+ secondary: null,
+ showFooter: false,
+
+ onPrimary: function () {
+ this.hide();
+ App.router.get('updateController').set('isWorking', true);
+ router.transitionTo('adminSecurity.index');
+ },
+ onClose: function () {
+ this.hide();
+ App.router.get('updateController').set('isWorking', true);
+ mainAdminSecurityController.setAddSecurityWizardStatus(null);
+ router.get('addSecurityController').setCurrentStep(1);
+ router.get('addSecurityController.content').saveCurrentStage(2);
+ router.transitionTo('adminSecurity.index');
+ },
+ didInsertElement: function () {
+ this.fitHeight();
+ }
+ });
+ App.router.transitionTo('step' + currentStep);
+ });
+
+ },
+
+ step1: Em.Route.extend({
+ route: '/start',
+ connectOutlets: function (router) {
+ console.log('in addSecurity.step1:connectOutlets');
+ var controller = router.get('addSecurityController');
+ controller.dataLoading().done(function () {
+ controller.setCurrentStep('1');
+ controller.loadAllPriorSteps();
+ controller.connectOutlet('mainAdminSecurityAddStep1', controller.get('content'));
+ })
+ },
+
+ next: function (router) {
+ var addSecurityController = router.get('addSecurityController');
+ addSecurityController.get('content').set('serviceConfigProperties', null);
+ router.transitionTo('step2');
+ }
+ }),
+
+ step2: Em.Route.extend({
+ route: '/configure',
+ connectOutlets: function (router) {
+ console.log('in addSecurity.step2:connectOutlets');
+ var controller = router.get('addSecurityController');
+ controller.dataLoading().done(function () {
+ controller.setCurrentStep('2');
+ controller.loadAllPriorSteps();
+ controller.connectOutlet('mainAdminSecurityAddStep2', controller.get('content'));
+ })
+ },
+ back: Em.Router.transitionTo('step1'),
+ next: function (router) {
+ var addSecurityController = router.get('addSecurityController');
+ var addSecurityStep2Controller = router.get('mainAdminSecurityAddStep2Controller');
+ addSecurityController.saveServiceConfigProperties(addSecurityStep2Controller);
+ addSecurityController.get('content').saveCurrentStage('2');
+ router.transitionTo('step3');
+ }
+ }),
+
+ step3: Em.Route.extend({
+ route: '/apply',
+ connectOutlets: function (router) {
+ console.log('in addSecurity.step3:connectOutlets');
+ var controller = router.get('addSecurityController');
+ controller.dataLoading().done(function () {
+ controller.setCurrentStep('3');
+ controller.loadAllPriorSteps();
+ controller.connectOutlet('mainAdminSecurityAddStep3', controller.get('content'));
+ })
+ },
+ back: Em.Router.transitionTo('step2'),
+ done: function (router, context) {
+ //Logic on completion of the wizard
+ //set stage to stage2 of step3
+ router.setAddSecurityWizardStatus(null);
+ }
+ }),
+
+ gotoStep1: Em.Router.transitionTo('step1'),
+
+ gotoStep2: Em.Router.transitionTo('step2'),
+
+ gotoStep3: Em.Router.transitionTo('step3')
+
+});
+
Modified: incubator/ambari/trunk/ambari-web/app/routes/main.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/routes/main.js?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/routes/main.js (original)
+++ incubator/ambari/trunk/ambari-web/app/routes/main.js Mon Feb 25 22:34:00 2013
@@ -17,8 +17,8 @@
*/
module.exports = Em.Route.extend({
- route:'/main',
- enter:function (router) {
+ route: '/main',
+ enter: function (router) {
console.log('in /main:enter');
if (router.getAuthenticated()) {
App.router.get('clusterController').loadClusterName(false);
@@ -30,107 +30,118 @@ module.exports = Em.Route.extend({
});
}
},
-
- index:Ember.Route.extend({
- route:'/',
- redirectsTo:'dashboard'
+ /*routePath: function(router,event) {
+ if (router.getAuthenticated()) {
+ App.router.get('clusterController').loadClusterName(false);
+ router.get('mainController').initialize();
+ // TODO: redirect to last known state
+ } else {
+ Ember.run.next(function () {
+ router.transitionTo('login');
+ });
+ }
+ }, */
+
+ index: Ember.Route.extend({
+ route: '/',
+ redirectsTo: 'dashboard'
}),
- test:Em.Route.extend({
- route:'/test',
- connectOutlets:function (router, context) {
+ test: Em.Route.extend({
+ route: '/test',
+ connectOutlets: function (router, context) {
router.get('mainController').connectOutlet('mainTest');
}
}),
- connectOutlets:function (router, context) {
+ connectOutlets: function (router, context) {
router.get('applicationController').connectOutlet('main');
},
- charts:Em.Route.extend({
- route:'/charts',
- connectOutlets:function (router, context) {
+ charts: Em.Route.extend({
+ route: '/charts',
+ connectOutlets: function (router, context) {
router.get('mainController').connectOutlet('mainCharts');
},
- enter:function (router) {
+ enter: function (router) {
Em.run.next(function () {
router.transitionTo('heatmap');
});
},
- index:Ember.Route.extend({
- route:'/',
- redirectsTo:'heatmap'
- }),
- heatmap:Em.Route.extend({
- route:'/heatmap',
- connectOutlets:function (router, context) {
+ index: Ember.Route.extend({
+ route: '/',
+ redirectsTo: 'heatmap'
+ }),
+ heatmap: Em.Route.extend({
+ route: '/heatmap',
+ connectOutlets: function (router, context) {
router.get('mainChartsController').connectOutlet('mainChartsHeatmap');
}
}),
- horizon_chart:Em.Route.extend({
- route:'/horizon_chart',
- connectOutlets:function (router, context) {
+ horizon_chart: Em.Route.extend({
+ route: '/horizon_chart',
+ connectOutlets: function (router, context) {
router.get('mainChartsController').connectOutlet('mainChartsHorizon');
}
}),
- showChart:function (router, event) {
+ showChart: function (router, event) {
var parent = event.view._parentView;
parent.deactivateChildViews();
event.view.set('active', "active");
router.transitionTo(event.context);
}
}),
- apps:Em.Route.extend({
- route:'/apps',
- connectOutlets:function (router) {
+ apps: Em.Route.extend({
+ route: '/apps',
+ connectOutlets: function (router) {
//router.get('clusterController').loadRuns();
router.get('mainAppsController').loadRuns();
router.get('mainController').connectOutlet('mainApps');
}
}),
- hosts:Em.Route.extend({
- route:'/hosts',
- index:Ember.Route.extend({
- route:'/',
- connectOutlets:function (router, context) {
+ hosts: Em.Route.extend({
+ route: '/hosts',
+ index: Ember.Route.extend({
+ route: '/',
+ connectOutlets: function (router, context) {
router.get('mainController').connectOutlet('mainHost');
}
}),
- hostDetails:Em.Route.extend({
- route:'/:host_id',
- connectOutlets:function (router, host) {
+ hostDetails: Em.Route.extend({
+ route: '/:host_id',
+ connectOutlets: function (router, host) {
router.get('mainController').connectOutlet('mainHostDetails', host);
},
- index:Ember.Route.extend({
- route:'/',
- redirectsTo:'summary'
+ index: Ember.Route.extend({
+ route: '/',
+ redirectsTo: 'summary'
}),
- summary:Em.Route.extend({
- route:'/summary',
- connectOutlets:function (router, context) {
+ summary: Em.Route.extend({
+ route: '/summary',
+ connectOutlets: function (router, context) {
router.get('mainHostDetailsController').connectOutlet('mainHostSummary');
}
}),
- metrics:Em.Route.extend({
- route:'/metrics',
- connectOutlets:function (router, context) {
+ metrics: Em.Route.extend({
+ route: '/metrics',
+ connectOutlets: function (router, context) {
router.get('mainHostDetailsController').connectOutlet('mainHostMetrics');
}
}),
- audit:Em.Route.extend({
- route:'/audit',
- connectOutlets:function (router, context) {
+ audit: Em.Route.extend({
+ route: '/audit',
+ connectOutlets: function (router, context) {
router.get('mainHostDetailsController').connectOutlet('mainHostAudit');
}
}),
- hostNavigate:function (router, event) {
+ hostNavigate: function (router, event) {
var parent = event.view._parentView;
parent.deactivateChildViews();
event.view.set('active', "active");
@@ -138,20 +149,20 @@ module.exports = Em.Route.extend({
}
}),
- backToHostsList:function (router, event) {
+ backToHostsList: function (router, event) {
router.transitionTo('hosts.index');
},
- showDetails:function (router, event) {
+ showDetails: function (router, event) {
router.get('mainHostDetailsController').setBack(true);
router.transitionTo('hostDetails.summary', event.context)
},
- addHost:function (router) {
- if(App.clusterStatus){
+ addHost: function (router) {
+ if (App.clusterStatus) {
App.clusterStatus.updateFromServer();
var currentClusterStatus = App.clusterStatus.get('value');
- if(currentClusterStatus && currentClusterStatus.clusterState=="ADD_HOSTS_COMPLETED_5"){
+ if (currentClusterStatus && currentClusterStatus.clusterState == "ADD_HOSTS_COMPLETED_5") {
// The last time add hosts ran, it left the status
// in this state. We need to clear any previous status
// so that the hosts page starts from fresh.
@@ -163,133 +174,222 @@ module.exports = Em.Route.extend({
}),
- hostAdd:require('routes/add_host_routes'),
+ hostAdd: require('routes/add_host_routes'),
+
+ admin: Em.Route.extend({
+ route: '/admin',
+ enter: function (router, transition) {
+ var controller = router.get('mainAdminController');
+ if (!App.db.getUser().admin) {
+ Em.run.next(function () {
+ router.transitionTo('main.dashboard');
+ });
+ } else {
+ // Em.run.next(function () {
+ // router.transitionTo('admin' + controller.get('category').capitalize());
+ //});
+ }
+ },
- admin:Em.Route.extend({
- route:'/admin',
- enter: function(){
- if(!App.db.getUser().admin){
+ routePath: function (router, event) {
+ if (!App.db.getUser().admin) {
Em.run.next(function () {
App.router.transitionTo('main.dashboard');
});
+ } else {
+ // var controller = router.get('mainAdminController');
+ //router.transitionTo('admin' + controller.get('category').capitalize());
}
},
- connectOutlets:function (router, context) {
+ connectOutlets: function (router, context) {
router.get('mainController').connectOutlet('mainAdmin');
},
- index:Ember.Route.extend({
- route:'/',
- redirectsTo:'adminUser'
+ index: Em.Route.extend({
+ /* enter: function(router, transition){
+ var controller = router.get('mainAdminController');
+ router.transitionTo('admin' + controller.get('category').capitalize());
+ }, */
+ route: '/',
+ redirectsTo: 'adminUser'
}),
- adminUser:Em.Route.extend({
- route:'/user',
- enter:function (router) {
+
+ adminUser: Em.Route.extend({
+ route: '/user',
+ index: Em.Route.extend({
+ route: '/',
+ redirectsTo: 'allUsers'
+ }),
+ enter: function (router) {
router.set('mainAdminController.category', "user");
Em.run.next(function () {
router.transitionTo('allUsers');
});
},
-
+ routePath: function (router, event) {
+ router.set('mainAdminController.category', "user");
+ router.transitionTo('allUsers');
+ Em.run.next(function () {
+ router.transitionTo('allUsers');
+ });
+ },
// events
- gotoUsers:Em.Router.transitionTo("allUsers"),
- gotoCreateUser:Em.Router.transitionTo("createUser"),
- gotoEditUser:function (router, event) {
+ gotoUsers: Em.Router.transitionTo("allUsers"),
+ gotoCreateUser: Em.Router.transitionTo("createUser"),
+ gotoEditUser: function (router, event) {
router.transitionTo("editUser", event.context)
},
// states
- allUsers:Em.Route.extend({
- route:'/',
- connectOutlets:function (router) {
+ allUsers: Em.Route.extend({
+ route: '/allUsers',
+ // index: Ember.Route.extend({
+ //route: '/',
+ connectOutlets: function (router) {
router.get('mainAdminController').connectOutlet('mainAdminUser');
}
+ //})
}),
- createUser:Em.Route.extend({
- route:'/create',
- connectOutlets:function (router) {
+ createUser: Em.Route.extend({
+ route: '/create',
+ connectOutlets: function (router) {
router.get('mainAdminController').connectOutlet('mainAdminUserCreate', {});
}
}),
- editUser:Em.Route.extend({
- route:'/edit/:user_id',
- connectOutlets:function (router, user) {
+ editUser: Em.Route.extend({
+ route: '/edit/:user_id',
+ connectOutlets: function (router, user) {
router.get('mainAdminController').connectOutlet('mainAdminUserEdit', user);
}
})
}),
- adminCluster:Em.Route.extend({
- route:'/cluster',
- connectOutlets:function (router) {
- router.set('mainAdminController.category', "cluster");
- router.get('mainAdminController').connectOutlet('mainAdminCluster');
- }
- }),
- adminAuthentication:Em.Route.extend({
- route:'/authentication',
- connectOutlets:function (router) {
+ adminAuthentication: Em.Route.extend({
+ route: '/authentication',
+ connectOutlets: function (router, context) {
router.set('mainAdminController.category', "authentication");
router.get('mainAdminController').connectOutlet('mainAdminAuthentication');
}
}),
- adminSecurity:Em.Route.extend({
- route:'/security',
- connectOutlets:function (router) {
+
+ adminSecurity: Em.Route.extend({
+ route: '/security',
+ enter: function (router) {
+ //alert("1.. I am in enter path");
router.set('mainAdminController.category', "security");
- router.get('mainAdminController').connectOutlet('mainAdminSecurity');
- }
+ var controller = router.get('mainAdminSecurityController');
+ if (!(controller.getAddSecurityWizardStatus() === 'RUNNING')) {
+ Em.run.next(function () {
+ router.transitionTo('adminSecurity.index');
+ });
+ } else {
+ Em.run.next(function () {
+ router.transitionTo('adminAddSecurity');
+ });
+ }
+ },
+
+ index: Ember.Route.extend({
+ route: '/',
+ connectOutlets: function (router, context) {
+ var controller = router.get('mainAdminController');
+ controller.set('category', "security");
+ var securityStatus = controller.securityStatusLoading();
+ securityStatus.done(function () {
+ controller.connectOutlet('mainAdminSecurity');
+ });
+ securityStatus.fail(function () {
+ App.ModalPopup.show({
+ header: Em.I18n.translations['common.error'],
+ secondary: false,
+ onPrimary: function () {
+ this.hide();
+ },
+ bodyClass: Ember.View.extend({
+ template: Ember.Handlebars.compile(['<p>{{t admin.security.status.error}}</p>'])
+ })
+ });
+ });
+ }
+ }),
+
+ addSecurity: function (router, object) {
+ router.transitionTo('adminAddSecurity');
+ },
+
+ disableSecurity: Ember.Route.extend({
+ route: '/',
+ connectOutlets: function (router, context) {
+ router.get('mainAdminSecurityController').connectOutlet('mainAdminSecurityDisable');
+ }
+ }),
+
+ adminAddSecurity: require('routes/add_security')
}),
- adminAdvanced:Em.Route.extend({
- route:'/advanced',
- connectOutlets:function (router) {
+ adminCluster: Em.Route.extend({
+ route: '/cluster',
+ connectOutlets: function (router) {
+ router.set('mainAdminController.category', "cluster");
+ router.get('mainAdminController').connectOutlet('mainAdminCluster');
+ }
+ }),
+ adminAdvanced: Em.Route.extend({
+ route: '/advanced',
+ connectOutlets: function (router) {
router.set('mainAdminController.category', "advanced");
router.get('mainAdminController').connectOutlet('mainAdminAdvanced');
}
}),
- adminAudit:Em.Route.extend({
- route:'/audit',
- connectOutlets:function (router) {
+ adminAudit: Em.Route.extend({
+ route: '/audit',
+ connectOutlets: function (router) {
router.set('mainAdminController.category', "audit");
router.get('mainAdminController').connectOutlet('mainAdminAudit');
}
}),
- upgradeStack:function (router, event) {
- if(!$(event.currentTarget).hasClass('inactive')){
+ upgradeStack: function (router, event) {
+ if (!$(event.currentTarget).hasClass('inactive')) {
router.transitionTo('stackUpgrade');
}
},
- adminNavigate:function (router, object) {
+
+ adminNavigate: function (router, object) {
router.transitionTo('admin' + object.context.capitalize());
- }
+ },
+
+ //events
+ goToAdminUser: Em.Router.transitionTo('adminUser'),
+ goToAdminSecurity: Em.Router.transitionTo('adminSecurity.index'),
+ goToAdminCluster: Em.Router.transitionTo('adminCluster')
+
}),
- stackUpgrade:require('routes/stack_upgrade'),
+ stackUpgrade: require('routes/stack_upgrade'),
- dashboard:Em.Route.extend({
- route:'/dashboard',
- connectOutlets:function (router, context) {
+ dashboard: Em.Route.extend({
+ route: '/dashboard',
+ connectOutlets: function (router, context) {
router.get('mainController').connectOutlet('mainDashboard');
},
- showDetails:function (router, event) {
+ showDetails: function (router, event) {
router.get('mainHostDetailsController').setBack(true);
router.transitionTo('hosts.hostDetails.summary', event.context);
}
}),
- services:Em.Route.extend({
- route:'/services',
- index:Ember.Route.extend({
- route:'/'
+ services: Em.Route.extend({
+ route: '/services',
+ index: Ember.Route.extend({
+ route: '/'
}),
- enter:function (router) {
+ enter: function (router) {
Ember.run.next(function () {
var service = router.get('mainServiceItemController.content');
if (!service) {
@@ -298,72 +398,73 @@ module.exports = Em.Route.extend({
router.transitionTo('service.summary', service);
});
},
- connectOutlets:function (router, context) {
+ connectOutlets: function (router, context) {
router.get('mainController').connectOutlet('mainService');
},
- service:Em.Route.extend({
- route:'/:service_id',
- connectOutlets:function (router, service) {
+ service: Em.Route.extend({
+ route: '/:service_id',
+ connectOutlets: function (router, service) {
router.get('mainServiceController').connectOutlet('mainServiceItem', service);
router.transitionTo('summary');
},
- index:Ember.Route.extend({
- route:'/'
+ index: Ember.Route.extend({
+ route: '/'
}),
- summary:Em.Route.extend({
- route:'/summary',
- connectOutlets:function (router, context) {
+ summary: Em.Route.extend({
+ route: '/summary',
+ connectOutlets: function (router, context) {
var item = router.get('mainServiceItemController.content');
var viewName = 'mainServiceInfoSummary';
router.get('mainServiceItemController').connectOutlet('mainServiceInfoSummary', item);
}
}),
- metrics:Em.Route.extend({
- route:'/metrics',
- connectOutlets:function (router, context) {
+ metrics: Em.Route.extend({
+ route: '/metrics',
+ connectOutlets: function (router, context) {
var item = router.get('mainServiceItemController.content');
router.get('mainServiceItemController').connectOutlet('mainServiceInfoMetrics', item);
}
}),
- configs:Em.Route.extend({
- route:'/configs',
- connectOutlets:function (router, context) {
+ configs: Em.Route.extend({
+ route: '/configs',
+ connectOutlets: function (router, context) {
var item = router.get('mainServiceItemController.content');
router.get('mainServiceItemController').connectOutlet('mainServiceInfoConfigs', item);
}
}),
- audit:Em.Route.extend({
- route:'/audit',
- connectOutlets:function (router, context) {
+ audit: Em.Route.extend({
+ route: '/audit',
+ connectOutlets: function (router, context) {
var item = router.get('mainServiceItemController.content');
router.get('mainServiceItemController').connectOutlet('mainServiceInfoAudit', item);
}
}),
- showInfo:function (router, event) {
+ showInfo: function (router, event) {
var parent = event.view._parentView;
parent.deactivateChildViews();
event.view.set('active', "active");
router.transitionTo(event.context);
},
- showDetails:function (router, event) {
+ showDetails: function (router, event) {
router.get('mainHostDetailsController').setBack(true);
router.transitionTo('hosts.hostDetails.summary', event.context);
}
}),
- showService:Em.Router.transitionTo('service'),
- addService:Em.Router.transitionTo('serviceAdd')
+ showService: Em.Router.transitionTo('service'),
+ addService: Em.Router.transitionTo('serviceAdd')
}),
+
serviceAdd:require('routes/add_service_routes'),
reassignMaster:require('routes/reassign_master_routes'),
- selectService:Em.Route.transitionTo('services.service'),
- selectHost:function (router, event) {
+ selectService: Em.Route.transitionTo('services.service'),
+ selectHost: function (router, event) {
router.get('mainHostDetailsController').setBack(false);
router.transitionTo('hosts.hostDetails.index', event.context);
},
- filterHosts:function (router, component) {
+ filterHosts: function (router, component) {
router.get('mainHostController').filterByComponent(component.context);
router.transitionTo('hosts.index');
}
Modified: incubator/ambari/trunk/ambari-web/app/styles/application.less
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/styles/application.less?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/styles/application.less (original)
+++ incubator/ambari/trunk/ambari-web/app/styles/application.less Mon Feb 25 22:34:00 2013
@@ -26,6 +26,7 @@
html {
overflow-y: scroll;
}
+
html, body {
height: 100%;
}
@@ -65,7 +66,7 @@ footer {
.logo {
float: left;
padding-top: 2px;
- img{
+ img {
height: 32px;
}
}
@@ -87,7 +88,6 @@ footer {
}
}
-
}
.navbar .nav {
@@ -95,7 +95,7 @@ footer {
overflow: hidden;
}
- .navbar-inner{
+ .navbar-inner {
min-height: 40px;
}
@@ -142,14 +142,14 @@ footer {
width: 140px;
}
- li:first-child{
+ li:first-child {
border-left: none;
- a{
+ a {
border-radius: 4px 0 0 4px;
}
}
- .navbar-inner{
+ .navbar-inner {
padding-left: 0;
}
@@ -209,21 +209,23 @@ h1 {
}
.icon-caret-right {
- min-width:8px;
+ min-width: 8px;
padding-top: 2px;
}
.icon-caret-left {
- min-width:8px;
+ min-width: 8px;
padding-top: 2px;
}
.icon-remove {
color: #FF4B4B;
}
+
.tooltip {
z-index: 1050;
}
+
.tooltip-inner {
text-align: left;
}
@@ -245,7 +247,7 @@ h1 {
margin: 0 -10px 20px 3px;
border-top: 70px solid transparent;
border-bottom: 70px solid transparent;
- border-right:20px solid transparent;
+ border-right: 20px solid transparent;
}
.visibleArrow {
@@ -307,10 +309,10 @@ h1 {
.advancedOptions {
margin-top: 20px;
margin-bottom: 30px;
- label{
+ label {
margin-bottom: 10px;
}
- label.disabled{
+ label.disabled {
color: #ccc;
}
}
@@ -414,23 +416,22 @@ h1 {
#host-log {
.stderr, .stdout {
background-color: #f0f0f0;
- /* max-height: 300px;
- overflow-y: auto; */
+ /* max-height: 300px;
+ overflow-y: auto; */
border-radius: 4px;
padding: 8px;
}
}
-
#serviceConfig {
margin-top: 20px;
.spinner {
- width:36px;
- height:36px;
+ width: 36px;
+ height: 36px;
background: url("/img/spinner.gif");
margin: 0 auto;
}
- .directories{
+ .directories {
min-width: 280px;
}
.accordion-heading {
@@ -570,7 +571,6 @@ a:focus {
/*****end styles for boxes*****/
-
/*90% width modal window start*/
.full-width-modal {
.modal {
@@ -579,12 +579,12 @@ a:focus {
}
.clear {
- clear:both;
+ clear: both;
}
> div > .dataTable {
border: 1px solid silver;
th {
- border-top:none;
+ border-top: none;
}
}
.content {
@@ -595,11 +595,12 @@ a:focus {
.table-striped tbody tr:nth-child(odd)
td .table-striped tbody
tr:nth-child(odd) td,
- tr:nth-child(even) th{
+ tr:nth-child(even) th {
background-color: none;
}
}
+
/*90% width modal window end*/
/*60% width modal window start*/
@@ -608,20 +609,20 @@ a:focus {
width: 60%;
margin: 0 0 0 -30%;
max-height: 544px;
- top:5%;
+ top: 5%;
}
- .modal-body{
+ .modal-body {
max-height: 403px;
}
.clear {
- clear:both;
+ clear: both;
}
> div > .dataTable {
border: 1px solid silver;
th {
- border-top:none;
+ border-top: none;
}
}
.content {
@@ -632,11 +633,12 @@ a:focus {
.table-striped tbody tr:nth-child(odd)
td .table-striped tbody
tr:nth-child(odd) td,
- tr:nth-child(even) th{
+ tr:nth-child(even) th {
background-color: none;
}
}
+
/*60% width modal window end*/
/*****start styles for install tasks logs*****/
@@ -645,60 +647,61 @@ a:focus {
font-size: 20px;
vertical-align: middle;
}
- .pending, .queued{
+ .pending, .queued {
color: #999999;
}
- .in_progress{
+ .in_progress {
color: #367FE6;
}
- .completed{
+ .completed {
color: #0EA31C;
}
.failed {
color: #DF5F5F;
}
- .aborted{
+ .aborted {
color: #FF9C09;
}
- .timedout{
+ .timedout {
color: #FF9C09;
}
}
-.task-list-main-warp{
- .task-list-line-cursor{
- cursor:pointer;
+.task-list-main-warp {
+
+ .task-list-line-cursor {
+ cursor: pointer;
}
- .task-top-wrap{
+ .task-top-wrap {
- width:100%;
+ width: 100%;
border-bottom: 1px solid #CCC;
- text-align:center;
- font-size:15px;
+ text-align: center;
+ font-size: 15px;
padding: 0 0 10px 0;
- .select-wrap{
+ .select-wrap {
float: right;
margin-top: -8px;
- select{
- width:140px;
+ select {
+ width: 140px;
}
}
}
#host-log, {
- .log-list-wrap{
+ .log-list-wrap {
padding: 10px 10px 10px 20px;
border-top: 1px solid #CCC;
border-bottom: 1px solid #CCC;
- .show-details{
+ .show-details {
float: right;
cursor: pointer;
font-size: 16px;
- i{
+ i {
color: #333;
}
}
@@ -707,56 +710,57 @@ a:focus {
}
}
-.task-detail-info{
+.task-detail-info {
- .task-detail-log-clipboard{
+ .task-detail-log-clipboard {
display: none;
resize: none;
overflow: hidden;
}
- .task-top-wrap{
- width:100%;
+ .task-top-wrap {
+ width: 100%;
border-bottom: 1px solid #CCC;
- text-align:center;
- font-size:15px;
+ text-align: center;
+ font-size: 15px;
padding: 0 0 10px 0;
- .task-detail-back{
+ .task-detail-back {
float: left;
}
- .task-detail-log-rolename{
+ .task-detail-log-rolename {
position: relative;
left: 0;
top: 0;
}
- .task-detail-status-ico{
+ .task-detail-status-ico {
content: "";
margin-top: -4px;
box-shadow: none;
margin-bottom: 0px;
- font-size:24px;
+ font-size: 24px;
}
- .task-detail-ico-wrap{
+ .task-detail-ico-wrap {
font-size: 14px;
- float:right;
- margin-top:-20px;
+ float: right;
+ margin-top: -20px;
- div{
+ div {
cursor: pointer;
}
- .task-detail-copy{
+ .task-detail-copy {
margin-right: 12px;
float: left;
}
- .task-detail-open-dialog{
+ .task-detail-open-dialog {
float: right;
}
}
}
}
+
/*****end styles for install tasks logs*****/
/*****start styles for dashboard page*****/
@@ -771,7 +775,7 @@ a:focus {
background-position: 6px 5px;
background-repeat: no-repeat;
list-style: none;
- float:left;
+ float: left;
min-height: 20px;
min-width: 20px;
margin-left: 0;
@@ -830,8 +834,7 @@ a:focus {
table.table {
margin-top: 14px;
color: #666;
- font-size: 13px;
- //width: 80%;
+ font-size: 13px; //width: 80%;
tr > td:first-child {
padding-right: 10px;
text-align: right !important;
@@ -840,7 +843,7 @@ a:focus {
padding: 4px;
}
}
- .dashboard-mini-chart > div{
+ .dashboard-mini-chart > div {
width: 172px;
}
.dashboard-mini-chart {
@@ -849,14 +852,13 @@ a:focus {
top: 7px;
position: absolute;
overflow: visible; // for quick links
- text-align: center;
- //width: 180px;
+ text-align: center; //width: 180px;
height: 200px;
.dropdown-menu {
text-align: left;
}
- .chart-container{
- .chart-x-axis{
+ .chart-container {
+ .chart-x-axis {
left: 0%;
width: 100%;
text-align: left;
@@ -905,6 +907,29 @@ a:focus {
}
}
+#security-stages {
+ tr {
+ height: 50px;
+ }
+ td {
+ width: 180px;
+ }
+ .progress-bar {
+ width: 50%;
+ .progress {
+ margin-bottom: 0;
+ }
+ }
+ .progress-percentage {
+ margin-left: 10px;
+ }
+
+}
+
+.faintText {
+ color: #999;
+}
+
.more-stats {
display: block;
width: 100%;
@@ -966,7 +991,7 @@ a:focus {
padding-left: 7px;
}
}
- .alert{
+ .alert {
margin: 7px;
}
}
@@ -999,6 +1024,7 @@ a:focus {
float: left;
}
}
+
.modal-footer.align-center {
text-align: center;
}
@@ -1006,8 +1032,8 @@ a:focus {
/*start chart/style graphs*/
.chart-container {
cursor: pointer;
- cursor:-moz-zoom-in;
- cursor:-webkit-zoom-in;
+ cursor: -moz-zoom-in;
+ cursor: -webkit-zoom-in;
&.chart-container-popup {
cursor: auto !important;
@@ -1072,7 +1098,7 @@ a:focus {
}
}
}
- text{
+ text {
font-weight: 700;
opacity: 1 !important;
}
@@ -1092,7 +1118,7 @@ a:focus {
padding: 0;
}
.rickshaw_graph {
- .x_tick{
+ .x_tick {
.title {
bottom: -6px;
opacity: 0.75;
@@ -1112,7 +1138,7 @@ a:focus {
}
}
-.modal-body{
+.modal-body {
.show {
display: inline-block;
}
@@ -1121,9 +1147,9 @@ a:focus {
}
}
-.mini-chart{
+.mini-chart {
position: absolute;
- .chart-container{
+ .chart-container {
width: 130px;
height: 130px;
}
@@ -1143,13 +1169,12 @@ a:focus {
float: left;
height: 20px;
width: 20px;
- margin-left: 0;
- // padding-left: 30px;
- // padding-right: 30px;
- // background-position: 12px 9px;
- // background-repeat: no-repeat;
+ margin-left: 0; // padding-left: 30px;
+ // padding-right: 30px;
+ // background-position: 12px 9px;
+ // background-repeat: no-repeat;
}
- .health-status-LIVE , .health-status-STARTING {
+ .health-status-LIVE, .health-status-STARTING {
.tab-marker-position;
background-image: @status-live-marker;
}
@@ -1176,7 +1201,7 @@ a:focus {
.add-service-button {
margin: 20px 20px 10px;
}
- .operations-count{
+ .operations-count {
background: #953B39;
}
}
@@ -1266,8 +1291,10 @@ table.graphs {
table-layout: fixed;
width: 100%;
}
+
/*Hosts*/
#hosts {
+
.page-bar {
border: 1px solid silver;
text-align:right;
@@ -1343,13 +1370,11 @@ table.graphs {
float: right;
}
}
- .progress{
+ .progress {
margin-bottom: 0;
}
- .table {
- //margin-bottom: 0;
- thead {
- //background: #EDF5FC;
+ .table { //margin-bottom: 0;
+ thead { //background: #EDF5FC;
}
th {
border-top: none;
@@ -1395,12 +1420,18 @@ table.graphs {
}
}
}
- .sorting_asc { background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAHgAAAMBAQAAAAAAAAAAAAAAAAAFCAYKAQACAQUAAAAAAAAAAAAAAAAABQMCBAYHCBAAAQUAAQMEAwAAAAAAAAAAAwECBAUGABESByExIghBMxQRAAIBAwMDAwUAAAAAAAAAAAECAwAEBRESBiExUUHhB2GBIhMU/9oADAMBAAIRAxEAPwDvA8k+Qc54sxGj32qlNi0ucrjTj/JqGlmROyJXQ2u/bOsZTmBExPd70/HXmQcW41lOX5+145h0L391KEHhR3Z28Ii6sx9AKgubiO1gaeU6Io19h9TUg/S/7eP+wia3NbBIFbuqiyn3VTCjIMArHHTJarEDGGiNU8vOKVsc7/VxBuGR3yV683X86/Cq/GpssrhP2S8emiSKRm1JS5VfyLH0WfQug7KwZR0CilWHy39++ObQTgkgeV9ux+xq9uc6U8pLfZzP6mClZpKWrvq1DilJAt4Mewh/0hRyBOsaUMoVKLvXtVU6t6+nL/HZTJYi4/rxU81tdbSu+N2Rtp7jcpB0OnUa9aoeOOVdsgDL4I1pFS+NPHmcsQ2+fw+UpLWOwwwWNVQ1kCaIcgaiONkmLGEZrDDXtcnXo5PfjC+5VybKWrWWSyF5cWbEEpJNI6kqdQSrMRqD1B9KjS2t423xoqt5AAr
b8QVPRwoo4UUcKK//2Q==) no-repeat right 50%; }
- .sorting_desc { background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAIEAAAIDAQAAAAAAAAAAAAAAAAAGBwgJCgEBAAIDAQAAAAAAAAAAAAAAAAMFBAYHCBAAAAUDAwMFAAAAAAAAAAAAAQIDBAUABgcSNTYRFQgTZFUWZhEAAAQEAggGAwAAAAAAAAAAAAECAxEhBAYSMjFBYRMzFDQFUZFSYmMHJFRk/9oADAMBAAIRAxEAPwDv4oAKACgCKc1tMmusb3Eph6cSgsgx7fucEZxGRks2llGIGVWgVm8q1dt0+6ogKaapSgdNbQPXTqAdwsN602bopk3vTnUW24rduwccbU2S5E8Sm1JM92czSZwNOKUYDFrCqTp1corDUFMpEcYap+Ipb4P5O8n81y9xXXlG50yY+thR3AEivqFvRDmduvSUrhuLtrFNXqCFvJm1LAQ5RMuchB6gBy13f7+tP6lsOipuz2jSGdy1ZJeNzmXnEtU+pWFTikmbxyTEjgglKKZpMU3ZanudYtTtSr8dMoYSKKvKMte0aUV5YGxgoASbD2iQ4Tyi6uB7Rvz/AHD9R8r7/wBWr64uta6/pKfq+JwUZP5/1/hwCFjIeTMrLo0np93q2xDtVCJh/9k=) no-repeat right 50%; }
- .sorting { background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAGgAAAIDAQAAAAAAAAAAAAAAAAUHAAYICgEBAQAAAAAAAAAAAAAAAAAAAAEQAAEEAQIFAgcAAAAAAAAAAAECAwQFABEGIRI0NQcTFDFBMmNUZRYRAQEBAQAAAAAAAAAAAAAAAAABEUH/2gAMAwEAAhEDEQA/AO93cd/XbXpLC9tHQ1Dr46nljUBby/gzGZB+p+Q6QhA+ZOApfDnllW/ha1tv6Ee7iyH5kRlvlbTIqHndWkNJ0HO7XFQbWeJUkpUeOpySrZh65UUnyFUW1ztaexRmIbaPyzoLE6vg2UWW9GC1e0XHnsSGEqfQohCwApK9OIGuAjfBP9VuG0m39vGqINVUe4r2xF21TVsuXZOI9N9lMmLBYkttQ21auBKhqtSUngCMkW5xqjKiYASh6SR2Tulr2HpOvf6j9p+V9/mwDeB//9k=) no-repeat right 50%; }
+ .sorting_asc {
+ background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAHgAAAMBAQAAAAAAAAAAAAAAAAAFCAYKAQACAQUAAAAAAAAAAAAAAAAABQMCBAYHCBAAAQUAAQMEAwAAAAAAAAAAAwECBAUGABESByExIghBMxQRAAIBAwMDAwUAAAAAAAAAAAECAwAEBRESBiExUUHhB2GBIhMU/9oADAMBAAIRAxEAPwDvA8k+Qc54sxGj32qlNi0ucrjTj/JqGlmROyJXQ2u/bOsZTmBExPd70/HXmQcW41lOX5+145h0L391KEHhR3Z28Ii6sx9AKgubiO1gaeU6Io19h9TUg/S/7eP+wia3NbBIFbuqiyn3VTCjIMArHHTJarEDGGiNU8vOKVsc7/VxBuGR3yV683X86/Cq/GpssrhP2S8emiSKRm1JS5VfyLH0WfQug7KwZR0CilWHy39++ObQTgkgeV9ux+xq9uc6U8pLfZzP6mClZpKWrvq1DilJAt4Mewh/0hRyBOsaUMoVKLvXtVU6t6+nL/HZTJYi4/rxU81tdbSu+N2Rtp7jcpB0OnUa9aoeOOVdsgDL4I1pFS+NPHmcsQ2+fw+UpLWOwwwWNVQ1kCaIcgaiONkmLGEZrDDXtcnXo5PfjC+5VybKWrWWSyF5cWbEEpJNI6kqdQSrMRqD1B9KjS2t423xoqt5AArb8QVPRwoo4UUc
KK//2Q==) no-repeat right 50%;
+ }
+ .sorting_desc {
+ background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAIEAAAIDAQAAAAAAAAAAAAAAAAAGBwgJCgEBAAIDAQAAAAAAAAAAAAAAAAMFBAYHCBAAAAUDAwMFAAAAAAAAAAAAAQIDBAUABgcSNTYRFQgTZFUWZhEAAAQEAggGAwAAAAAAAAAAAAECAxEhBAYSMjFBYRMzFDQFUZFSYmMHJFRk/9oADAMBAAIRAxEAPwDv4oAKACgCKc1tMmusb3Eph6cSgsgx7fucEZxGRks2llGIGVWgVm8q1dt0+6ogKaapSgdNbQPXTqAdwsN602bopk3vTnUW24rduwccbU2S5E8Sm1JM92czSZwNOKUYDFrCqTp1corDUFMpEcYap+Ipb4P5O8n81y9xXXlG50yY+thR3AEivqFvRDmduvSUrhuLtrFNXqCFvJm1LAQ5RMuchB6gBy13f7+tP6lsOipuz2jSGdy1ZJeNzmXnEtU+pWFTikmbxyTEjgglKKZpMU3ZanudYtTtSr8dMoYSKKvKMte0aUV5YGxgoASbD2iQ4Tyi6uB7Rvz/AHD9R8r7/wBWr64uta6/pKfq+JwUZP5/1/hwCFjIeTMrLo0np93q2xDtVCJh/9k=) no-repeat right 50%;
+ }
+ .sorting {
+ background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAGgAAAIDAQAAAAAAAAAAAAAAAAUHAAYICgEBAQAAAAAAAAAAAAAAAAAAAAEQAAEEAQIFAgcAAAAAAAAAAAECAwQFABEGIRI0NQcTFDFBMmNUZRYRAQEBAQAAAAAAAAAAAAAAAAABEUH/2gAMAwEAAhEDEQA/AO93cd/XbXpLC9tHQ1Dr46nljUBby/gzGZB+p+Q6QhA+ZOApfDnllW/ha1tv6Ee7iyH5kRlvlbTIqHndWkNJ0HO7XFQbWeJUkpUeOpySrZh65UUnyFUW1ztaexRmIbaPyzoLE6vg2UWW9GC1e0XHnsSGEqfQohCwApK9OIGuAjfBP9VuG0m39vGqINVUe4r2xF21TVsuXZOI9N9lMmLBYkttQ21auBKhqtSUngCMkW5xqjKiYASh6SR2Tulr2HpOvf6j9p+V9/mwDeB//9k=) no-repeat right 50%;
+ }
div.view-wrapper {
- .btn-group{
+ .btn-group {
margin-bottom: 9px;
}
}
@@ -1426,24 +1457,24 @@ table.graphs {
.page-bar {
border: 1px solid silver;
- text-align:right;
+ text-align: right;
div {
display: inline-block;
- margin:0 10px;
+ margin: 0 10px;
}
.dataTables_length {
label {
- display:inline;
+ display: inline;
}
select {
margin-bottom: 4px;
margin-top: 4px;
- width:70px;
+ width: 70px;
}
}
.dataTables_paginate {
a {
- padding:0 5px;
+ padding: 0 5px;
}
}
}
@@ -1502,14 +1533,14 @@ table.graphs {
}
#host-warnings {
- .warnings-list{
+ .warnings-list {
table {
margin-bottom: 0;
margin-top: 5px;
td {
width: 50%;
i {
- font-size:16px;
+ font-size: 16px;
margin: 2px;
}
}
@@ -1521,6 +1552,7 @@ table.graphs {
}
}
}
+
.host-checks-update {
button {
margin-left: 5px;
@@ -1537,109 +1569,130 @@ table.graphs {
margin-top: 27px;
- /*
- .component-operation-button {
- background-color: #E5E5E5;
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#E5E5E5), to(#F1F1F1));
- background-image: -webkit-linear-gradient(top, #E5E5E5, #F1F1F1);
- background-image: -o-linear-gradient(top, #E5E5E5, #F1F1F1);
- background-image: linear-gradient(to bottom, #E5E5E5, #F1F1F1);
- background-image: -moz-linear-gradient(top, #E5E5E5, #F1F1F1);
- background-repeat: repeat-x;
- color: #000000;
- }
- */
+/*
+.component-operation-button {
+ background-color: #E5E5E5;
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#E5E5E5), to(#F1F1F1));
+ background-image: -webkit-linear-gradient(top, #E5E5E5, #F1F1F1);
+ background-image: -o-linear-gradient(top, #E5E5E5, #F1F1F1);
+ background-image: linear-gradient(to bottom, #E5E5E5, #F1F1F1);
+ background-image: -moz-linear-gradient(top, #E5E5E5, #F1F1F1);
+ background-repeat: repeat-x;
+ color: #000000;
+}
+*/
.caret {
border-top-color: #000000;
border-bottom-color: #000000;
}
- //hack to apply style only for firefox
- @-moz-document url-prefix() {
- .host-components .caret{
- margin-top:-12px !important;
- }
- }
- .marker {
- background-repeat: no-repeat;
- display: inline-block;
- height: 13px;
- width: 13px;
- }
- .health-status-started, .health-status-starting {
- background-image: @status-live-marker;
- .marker;
- }
- .health-status-installed, .health-status-stopping {
- background-image: @status-dead-marker;
- .marker;
- }
+}
- .health-status-LIVE {
- background-image: @status-live-marker;
- .marker;
- }
- .health-status-DEAD {
- background-image: @status-dead-marker;
- .marker;
- }
- .health-status-DEAD-ORANGE {
- background-image: @status-dead-orange-marker;
- .marker;
- }
- .health-status-DEAD-YELLOW {
- background-image: @status-dead-yellow-marker;
- .marker;
- }
- .back {
- display: block;
- width: 105px;
- margin-bottom: 5px;
- }
- .box-header .host-title {
+//hack to apply style only for firefox
+@-moz-document
+url-prefix
+
+(
+)
+{
+.host-components .caret {
+ margin-top: -12px !important;
+}
+
+}
+.marker {
+ background-repeat: no-repeat;
+ display: inline-block;
+ height: 13px;
+ width: 13px;
+}
+
+.health-status-started, .health-status-starting {
+ background-image: @status-live-marker;
+ .marker;
+}
+
+.health-status-installed, .health-status-stopping {
+ background-image: @status-dead-marker;
+ .marker;
+}
+
+.health-status-LIVE {
+ background-image: @status-live-marker;
+ .marker;
+}
+
+.health-status-DEAD {
+ background-image: @status-dead-marker;
+ .marker;
+}
+
+.health-status-DEAD-ORANGE {
+ background-image: @status-dead-orange-marker;
+ .marker;
+}
+
+.health-status-DEAD-YELLOW {
+ background-image: @status-dead-yellow-marker;
+ .marker;
+}
+
+.back {
+ display: block;
+ width: 105px;
+ margin-bottom: 5px;
+}
+
+.box-header .host-title {
+ margin: 0;
+ padding-left: 17px;
+}
+
+.box-header .button-section {
+ margin-bottom: 5px;
+}
+
+hr {
+ margin-bottom: 0;
+ clear: both;
+}
+
+.content {
+ padding: 10px;
+}
+
+.host-configuration .dl-horizontal dt {
+ width: 90px;
+ line-height: 20px;
+}
+
+.host-configuration .dl-horizontal dd {
+ margin-left: 100px;
+ line-height: 20px;
+}
+
+.host-metrics {
+ [class*="span"] {
+ float: left;
margin: 0;
- padding-left: 17px;
- }
- .box-header .button-section {
- margin-bottom: 5px;
- }
- hr {
- margin-bottom: 0;
- clear: both;
- }
- .content {
- padding: 10px;
- }
- .host-configuration .dl-horizontal dt {
- width: 90px;
- line-height: 20px;
- }
- .host-configuration .dl-horizontal dd {
- margin-left: 100px;
- line-height: 20px;
}
- .host-metrics {
- [class*="span"] {
- float: left;
- margin: 0;
- }
- .chart-container {
- .chart-x-axis {
- left: 30%;
- width: 40%;
- }
+ .chart-container {
+ .chart-x-axis {
+ left: 30%;
+ width: 40%;
}
}
+}
- .host-components {
- padding: 10px;
- padding-bottom: 0;
- border: 1px solid #DEDEDE;
- border-radius: 4px;
- background: #FFF;
- }
- .host-components .btn-group {
- margin: 0 5px 10px 0;
- }
+.host-components {
+ padding: 10px;
+ padding-bottom: 0;
+ border: 1px solid #DEDEDE;
+ border-radius: 4px;
+ background: #FFF;
+}
+
+.host-components .btn-group {
+ margin: 0 5px 10px 0;
}
.background-operations {
@@ -1683,6 +1736,11 @@ table.graphs {
text-decoration: none;
}
}
+
+ .btn-padding {
+ margin-left: 20px
+ }
+
/*End Admin*/
/*assign masters*/
@@ -1969,7 +2027,7 @@ ul.filter {
/*Start Heatmap*/
.heatmap {
- #heatmap-metric-title{
+ #heatmap-metric-title {
margin-left: 23px;
}
.rack.rack-5-2 {
@@ -2010,16 +2068,16 @@ ul.filter {
position: absolute;
z-index: 1000;
}
- .container-fluid{
+ .container-fluid {
padding: 0px;
}
- .row-fluid [class*="span"]{
+ .row-fluid [class*="span"] {
margin-left: 0px;
}
- .legend{
+ .legend {
margin-top: 20px;
margin-bottom: 20px;
- .tile{
+ .tile {
width: 50px;
height: 1em;
padding: 4px;
@@ -2029,7 +2087,7 @@ ul.filter {
}
}
- h4{
+ h4 {
color: #777777;
margin-top: 5px;
}
@@ -2056,7 +2114,7 @@ ul.filter {
/* CHARTS */
.chart {
overflow: hidden;
- /*padding-bottom: 25px;*/
+/*padding-bottom: 25px;*/
.attributes {
width: 75px;
@@ -2303,7 +2361,7 @@ ul.inline li {
}
}
-.screensaver{
+.screensaver {
width: 90%;
height: 157px;
border: 1px solid silver;
@@ -2373,6 +2431,7 @@ ul.inline li {
#step10-content {
max-height: 440px;
}
+
.content-area {
position: relative;
.textTrigger {
@@ -2385,7 +2444,6 @@ ul.inline li {
}
}
-
//bootstrap
//.dropdown-menu .active > a, .dropdown-menu .active > a:hover {
// background-color: #49AFCD;
@@ -2397,6 +2455,7 @@ ul.inline li {
.combobox-container .btn:hover {
background-position: 0;
}
+
// COMBOBOX FIXES END
@media all and (max-width: 1200px) {
#main-nav {
@@ -2406,12 +2465,11 @@ ul.inline li {
}
}
-
//
// Gray palette
//
.nav-pills > .active > a, .nav-pills > .active > a:hover {
- background-color: #666666;
+ background-color: #666666;
}
.nav-list > .active > a, .nav-list > .active > a:hover {
@@ -2466,6 +2524,7 @@ i.icon-asterisks {
text-decoration: none;
}
}
+
.hidden {
display: none;
visibility: hidden;
@@ -2477,111 +2536,143 @@ i.icon-asterisks {
margin-left: -30px;
*zoom: 1;
}
+
.row:before,
.row:after {
display: table;
line-height: 0;
content: "";
}
+
.row:after {
clear: both;
}
+
[class*="span"] {
float: left;
min-height: 1px;
margin-left: 30px;
}
+
.container,
.navbar-static-top .container,
.navbar-fixed-top .container,
.navbar-fixed-bottom .container {
width: 1170px;
}
+
.span12 {
width: 1170px;
}
+
.span11 {
width: 1070px;
}
+
.span10 {
width: 970px;
}
+
.span9 {
width: 870px;
}
+
.span8 {
width: 770px;
}
+
.span7 {
width: 670px;
}
+
.span6 {
width: 570px;
}
+
.span5 {
width: 470px;
}
+
.span4 {
width: 370px;
}
+
.span3 {
width: 270px;
}
+
.span2 {
width: 170px;
}
+
.span1 {
width: 70px;
}
+
.offset12 {
margin-left: 1230px;
}
+
.offset11 {
margin-left: 1130px;
}
+
.offset10 {
margin-left: 1030px;
}
+
.offset9 {
margin-left: 930px;
}
+
.offset8 {
margin-left: 830px;
}
+
.offset7 {
margin-left: 730px;
}
+
.offset6 {
margin-left: 630px;
}
+
.offset5 {
margin-left: 530px;
}
+
.offset4 {
margin-left: 430px;
}
+
.offset3 {
margin-left: 330px;
}
+
.offset2 {
margin-left: 230px;
}
+
.offset1 {
margin-left: 130px;
}
+
.row-fluid {
width: 100%;
*zoom: 1;
}
+
.row-fluid:before,
.row-fluid:after {
display: table;
line-height: 0;
content: "";
}
+
.row-fluid:after {
clear: both;
}
+
.row-fluid [class*="span"] {
display: block;
float: left;
@@ -2593,230 +2684,285 @@ i.icon-asterisks {
-moz-box-sizing: border-box;
box-sizing: border-box;
}
+
.row-fluid [class*="span"]:first-child {
margin-left: 0;
}
+
.row-fluid .span12 {
width: 100%;
*width: 99.94680851063829%;
}
+
.row-fluid .span11 {
width: 91.45299145299145%;
*width: 91.39979996362975%;
}
+
.row-fluid .span10 {
width: 82.90598290598291%;
*width: 82.8527914166212%;
}
+
.row-fluid .span9 {
width: 74.35897435897436%;
*width: 74.30578286961266%;
}
+
.row-fluid .span8 {
width: 65.81196581196582%;
*width: 65.75877432260411%;
}
+
.row-fluid .span7 {
width: 57.26495726495726%;
*width: 57.21176577559556%;
}
+
.row-fluid .span6 {
width: 48.717948717948715%;
*width: 48.664757228587014%;
}
+
.row-fluid .span5 {
width: 40.17094017094017%;
*width: 40.11774868157847%;
}
+
.row-fluid .span4 {
width: 31.623931623931625%;
*width: 31.570740134569924%;
}
+
.row-fluid .span3 {
width: 23.076923076923077%;
*width: 23.023731587561375%;
}
+
.row-fluid .span2 {
width: 14.52991452991453%;
*width: 14.476723040552828%;
}
+
.row-fluid .span1 {
width: 5.982905982905983%;
*width: 5.929714493544281%;
}
+
.row-fluid .offset12 {
margin-left: 105.12820512820512%;
*margin-left: 105.02182214948171%;
}
+
.row-fluid .offset12:first-child {
margin-left: 102.56410256410257%;
*margin-left: 102.45771958537915%;
}
+
.row-fluid .offset11 {
margin-left: 96.58119658119658%;
*margin-left: 96.47481360247316%;
}
+
.row-fluid .offset11:first-child {
margin-left: 94.01709401709402%;
*margin-left: 93.91071103837061%;
}
+
.row-fluid .offset10 {
margin-left: 88.03418803418803%;
*margin-left: 87.92780505546462%;
}
+
.row-fluid .offset10:first-child {
margin-left: 85.47008547008548%;
*margin-left: 85.36370249136206%;
}
+
.row-fluid .offset9 {
margin-left: 79.48717948717949%;
*margin-left: 79.38079650845607%;
}
+
.row-fluid .offset9:first-child {
margin-left: 76.92307692307693%;
*margin-left: 76.81669394435352%;
}
+
.row-fluid .offset8 {
margin-left: 70.94017094017094%;
*margin-left: 70.83378796144753%;
}
+
.row-fluid .offset8:first-child {
margin-left: 68.37606837606839%;
*margin-left: 68.26968539734497%;
}
+
.row-fluid .offset7 {
margin-left: 62.393162393162385%;
*margin-left: 62.28677941443899%;
}
+
.row-fluid .offset7:first-child {
margin-left: 59.82905982905982%;
*margin-left: 59.72267685033642%;
}
+
.row-fluid .offset6 {
margin-left: 53.84615384615384%;
*margin-left: 53.739770867430444%;
}
+
.row-fluid .offset6:first-child {
margin-left: 51.28205128205128%;
*margin-left: 51.175668303327875%;
}
+
.row-fluid .offset5 {
margin-left: 45.299145299145295%;
*margin-left: 45.1927623204219%;
}
+
.row-fluid .offset5:first-child {
margin-left: 42.73504273504273%;
*margin-left: 42.62865975631933%;
}
+
.row-fluid .offset4 {
margin-left: 36.75213675213675%;
*margin-left: 36.645753773413354%;
}
+
.row-fluid .offset4:first-child {
margin-left: 34.18803418803419%;
*margin-left: 34.081651209310785%;
}
+
.row-fluid .offset3 {
margin-left: 28.205128205128204%;
*margin-left: 28.0987452264048%;
}
+
.row-fluid .offset3:first-child {
margin-left: 25.641025641025642%;
*margin-left: 25.53464266230224%;
}
+
.row-fluid .offset2 {
margin-left: 19.65811965811966%;
*margin-left: 19.551736679396257%;
}
+
.row-fluid .offset2:first-child {
margin-left: 17.094017094017094%;
*margin-left: 16.98763411529369%;
}
+
.row-fluid .offset1 {
margin-left: 11.11111111111111%;
*margin-left: 11.004728132387708%;
}
+
.row-fluid .offset1:first-child {
margin-left: 8.547008547008547%;
*margin-left: 8.440625568285142%;
}
+
input,
textarea,
.uneditable-input {
margin-left: 0;
}
+
.controls-row [class*="span"] + [class*="span"] {
margin-left: 30px;
}
+
input.span12,
textarea.span12,
.uneditable-input.span12 {
width: 1156px;
}
+
input.span11,
textarea.span11,
.uneditable-input.span11 {
width: 1056px;
}
+
input.span10,
textarea.span10,
.uneditable-input.span10 {
width: 956px;
}
+
input.span9,
textarea.span9,
.uneditable-input.span9 {
width: 856px;
}
+
input.span8,
textarea.span8,
.uneditable-input.span8 {
width: 756px;
}
+
input.span7,
textarea.span7,
.uneditable-input.span7 {
width: 656px;
}
+
input.span6,
textarea.span6,
.uneditable-input.span6 {
width: 556px;
}
+
input.span5,
textarea.span5,
.uneditable-input.span5 {
width: 456px;
}
+
input.span4,
textarea.span4,
.uneditable-input.span4 {
width: 356px;
}
+
input.span3,
textarea.span3,
.uneditable-input.span3 {
width: 256px;
}
+
input.span2,
textarea.span2,
.uneditable-input.span2 {
width: 156px;
}
+
input.span1,
textarea.span1,
.uneditable-input.span1 {
width: 56px;
}
+
.thumbnails {
margin-left: -30px;
}
+
.thumbnails > li {
margin-left: 30px;
}
+
.row-fluid .thumbnails {
margin-left: 0;
}
+
.summary-metric-graphs {
[class*="span"] {
float: left;
Modified: incubator/ambari/trunk/ambari-web/app/templates/application.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/application.hbs?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/templates/application.hbs (original)
+++ incubator/ambari/trunk/ambari-web/app/templates/application.hbs Mon Feb 25 22:34:00 2013
@@ -43,7 +43,7 @@
{{App.router.loginName}} <span class="caret"></span>
</button>
<ul class="dropdown-menu">
- <li><a href="" {{action logoff}}>{{t app.sighout}}</a></li>
+ <li><a href="" {{action logoff}}>{{t app.signout}}</a></li>
</ul>
</div>
{{/if}}
Modified: incubator/ambari/trunk/ambari-web/app/templates/main/admin.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/main/admin.hbs?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/templates/main/admin.hbs (original)
+++ incubator/ambari/trunk/ambari-web/app/templates/main/admin.hbs Mon Feb 25 22:34:00 2013
@@ -18,7 +18,17 @@
<div class="row-fluid">
<div id="main-admin-menu" class="well span2">
- {{view App.MainAdminMenuView}}
+ <ul>
+ {{#view view.NavItemView item="user" }}
+ <a class="text-center" href="javascript:void(null);" {{action goToAdminUser}} > Users</a>
+ {{/view}}
+ {{#view view.NavItemView item="security" }}
+ <a class="text-center" href="javascript:void(null);" {{action goToAdminSecurity}} > Security</a>
+ {{/view}}
+ {{#view view.NavItemView item="cluster" }}
+ <a class="text-center" href="javascript:void(null);" {{action goToAdminCluster}} > Cluster</a>
+ {{/view}}
+ </ul>
</div>
<div class="span10">
<div class="row-fluid">
Added: incubator/ambari/trunk/ambari-web/app/templates/main/admin/security.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/main/admin/security.hbs?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/templates/main/admin/security.hbs (added)
+++ incubator/ambari/trunk/ambari-web/app/templates/main/admin/security.hbs Mon Feb 25 22:34:00 2013
@@ -0,0 +1,40 @@
+{{!
+* 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.
+}}
+
+{{#if securityEnabled}}
+ <div>
+ <p class="text-success">{{t admin.security.enabled}}
+ <a
+ class="btn btn-padding btn-warning" {{bindAttr disabled="isSubmitDisabled"}} {{action notifySecurityOffPopup target="controller"}}>{{t admin.security.button.disable}}
+ </a> <br/>
+ </p>
+ </div>
+ <div>
+ {{outlet}}
+ </div>
+{{else}}
+ <div>
+ <p class="text-error">{{t admin.security.disabled}}
+ <a
+ class="btn btn-padding btn-success" {{action notifySecurityAddPopup target="controller"}}>{{t admin.security.button.enable}}
+ </a> <br/>
+ </p>
+
+ <p class="alert alert-info">{{t admin.security.recommend.enable}}</p>
+ </div>
+{{/if}}
\ No newline at end of file
Added: incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/menu.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/menu.hbs?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/menu.hbs (added)
+++ incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/menu.hbs Mon Feb 25 22:34:00 2013
@@ -0,0 +1,41 @@
+{{!
+* 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.
+}}
+
+
+<div id="addSecurity">
+ <div class="container">
+ <div class="container-fluid">
+ <div class="row-fluid">
+ <div class="span3">
+ <!--Sidebar content-->
+ <div class="well">
+ <ul class="nav nav-pills nav-stacked">
+ <li class="nav-header">{{t admin.addSecurity.header}}</li>
+ <li {{bindAttr class="isStep1:active view.isStep1Disabled:disabled"}}><a href="javascript:void(null);" {{action gotoStep1}}>{{t admin.security.step1.header}}</a></li>
+ <li {{bindAttr class="isStep2:active view.isStep2Disabled:disabled"}}><a href="javascript:void(null);" {{action gotoStep2}}>{{t admin.security.step2.header}}</a></li>
+ <li {{bindAttr class="isStep3:active view.isStep3Disabled:disabled"}}><a href="javascript:void(null);" {{action gotoStep3}}>{{t admin.security.step3.header}}</a></li>
+ </ul>
+ </div>
+ </div>
+ <div id="addSecurity-content" class="well span9">
+ {{outlet}}
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
Added: incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step1.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step1.hbs?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step1.hbs (added)
+++ incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step1.hbs Mon Feb 25 22:34:00 2013
@@ -0,0 +1,34 @@
+{{!
+* 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.
+}}
+
+<h2>{{t admin.security.step1.header}}</h2>
+<p class="alert">
+ {{t admin.security.step1.body.header}}
+</p>
+<div class="alert alert-info">
+ <ol>
+ <li>{{t admin.security.step1.body.instruction1}}</li>
+ <li>{{t admin.security.step1.body.instruction2}}</li>
+ <li>{{t admin.security.step1.body.instruction3}}</li>
+ </ol>
+</div>
+
+
+<div class="btn-area">
+ <a class="btn btn-success pull-right" {{action "next"}}>Next →</a>
+</div>
\ No newline at end of file
Added: incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step2.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step2.hbs?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step2.hbs (added)
+++ incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step2.hbs Mon Feb 25 22:34:00 2013
@@ -0,0 +1,15 @@
+<div id="serviceConfig">
+ <h2>{{t admin.security.step2.header}}</h2>
+
+ <p class="alert alert-info">
+ {{t admin.security.step2.body.header}}
+ </p>
+ {{view App.ServicesConfigView}}
+
+ <div class="btn-area">
+ <a class="btn" {{action back}}>← {{t common.back}}</a>
+
+ <a class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}}
+ {{action submit target="controller"}}>{{t common.next}} →</a>
+ </div>
+</div>
\ No newline at end of file
Added: incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step3.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step3.hbs?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step3.hbs (added)
+++ incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step3.hbs Mon Feb 25 22:34:00 2013
@@ -0,0 +1,30 @@
+{{!
+* 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.
+}}
+
+<h2>{{t admin.security.step3.header}}</h2>
+<p class="alert alert-info">
+ {{t admin.security.step3.body.header}}
+</p>
+
+{{view App.MainServiceReconfigureView}}
+
+<div class="btn-area">
+ <a class="btn" {{action back}}>← {{t common.back}}</a>
+ <a class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}}
+ {{action done}}>{{t common.done}} </a>
+</div>
\ No newline at end of file
Added: incubator/ambari/trunk/ambari-web/app/templates/main/service/reconfigure.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/main/service/reconfigure.hbs?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/templates/main/service/reconfigure.hbs (added)
+++ incubator/ambari/trunk/ambari-web/app/templates/main/service/reconfigure.hbs Mon Feb 25 22:34:00 2013
@@ -0,0 +1,47 @@
+{{!
+* 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.
+}}
+
+<table id="security-stages" class="table no-borders">
+ <tbody>
+ {{#each stage in controller.stages}}
+ {{#view App.StageStatusView}}
+ <td>
+ <p {{bindAttr class="stage.hasStarted::faintText"}}>{{stage.label}}</p>
+ </td>
+ <td>
+ {{#if stage.isCompleted}}
+ {{#if stage.isSuccess}}
+ {{view App.StageSuccessView}}
+ {{else}}
+ {{view App.StageFailureView}}
+ {{/if}}
+ {{else}}
+ {{#if stage.isStarted}}
+ {{#if stage.isPolling}}
+ <div class="progress-bar pull-left">
+ {{view App.StageInProgressView stageBinding=stage}}
+ </div>
+ <div class="progress-percentage pull-left">{{stage.progress}}%</div>
+ {{/if}}
+ {{/if}}
+ {{/if}}
+ </td>
+ {{/view}}
+ {{/each}}
+ </tbody>
+</table>
Modified: incubator/ambari/trunk/ambari-web/app/utils/db.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/utils/db.js?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/utils/db.js (original)
+++ incubator/ambari/trunk/ambari-web/app/utils/db.js Mon Feb 25 22:34:00 2013
@@ -51,11 +51,14 @@ App.db.cleanUp = function () {
'loginName': '',
'authenticated': false
},
+
'Installer' : {},
'AddHost' : {},
'AddService' : {},
'StackUpgrade' : {},
- 'ReassignMaster' : {}
+ 'ReassignMaster' : {},
+ 'AddSecurity': {}
+
};
console.log("In cleanup./..");
localStorage.setObject('ambari', App.db.data);
@@ -129,7 +132,7 @@ App.db.setHosts = function (hostInfo) {
localStorage.setObject('ambari', App.db.data);
};
-App.db.setInstallOptions = function(installOptions){
+App.db.setInstallOptions = function (installOptions) {
console.log('TRACE: Entering db:setInstallOptions function');
App.db.data = localStorage.getObject('ambari');
App.db.data.Installer.installOptions = installOptions;
@@ -195,7 +198,7 @@ App.db.setServiceConfigs = function (ser
localStorage.setObject('ambari', App.db.data);
};
-App.db.setAdvancedServiceConfig = function(serviceConfigs) {
+App.db.setAdvancedServiceConfig = function (serviceConfigs) {
App.db.data = localStorage.getObject('ambari');
App.db.data.Installer.advanceServiceConfigs = serviceConfigs;
localStorage.setObject('ambari', App.db.data);
@@ -246,6 +249,21 @@ App.db.setWizardCurrentStep = function (
localStorage.setObject('ambari', App.db.data);
};
+App.db.setSecurityWizardStatus = function (status) {
+ App.db.data = localStorage.getObject('ambari');
+ if (!App.db.data.AddSecurity) {
+ App.db.data.AddSecurity = {};
+ }
+ App.db.data.AddSecurity.status = status;
+ localStorage.setObject('ambari', App.db.data);
+};
+
+App.db.setSecurityStage = function (securityStage) {
+ App.db.data = localStorage.getObject('ambari');
+ App.db.data.AddSecurity.securityStage = securityStage;
+ localStorage.setObject('ambari', App.db.data);
+};
+
/*
* getter methods
@@ -356,7 +374,7 @@ App.db.getServiceConfigs = function () {
return App.db.data.Installer.serviceConfigs;
};
-App.db.getAdvancedServiceConfig = function() {
+App.db.getAdvancedServiceConfig = function () {
App.db.data = localStorage.getObject('ambari');
return App.db.data.Installer.advanceServiceConfigs;
};
@@ -386,6 +404,20 @@ App.db.getUpgradeOptions = function () {
console.log('TRACE: Entering db:getUpgradeOptions function');
App.db.data = localStorage.getObject('ambari');
return App.db.data.StackUpgrade.upgradeOptions;
+}
+
+App.db.getSecurityWizardStatus = function () {
+ App.db.data = localStorage.getObject('ambari');
+ if (!App.db.data.AddSecurity) {
+ App.db.data.AddSecurity = {};
+ }
+ return App.db.data.AddSecurity.status;
+};
+
+App.db.getSecurityStage = function () {
+ App.db.data = localStorage.getObject('ambari');
+ return App.db.data.AddSecurity.securityStage;
+
};
module.exports = App.db;
Added: incubator/ambari/trunk/ambari-web/app/utils/polling.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/utils/polling.js?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/utils/polling.js (added)
+++ incubator/ambari/trunk/ambari-web/app/utils/polling.js Mon Feb 25 22:34:00 2013
@@ -0,0 +1,214 @@
+/**
+ * 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');
+App.Poll = Em.Object.extend({
+ stage: '',
+ label: '',
+ isStarted: false,
+ isPolling: true,
+ clusterName: null,
+ requestId: null,
+ temp: false,
+ progress: 0,
+ url: null,
+ testUrl: null,
+ data: null,
+ isError: false,
+ isSuccess: false,
+ POLL_INTERVAL: 4000,
+ polledData: [],
+ numPolls: 0,
+ mockDataPrefix: '/data/wizard/deploy/5_hosts',
+
+ barWidth: function () {
+ var barWidth = 'width: ' + this.get('progress') + '%;';
+ return barWidth;
+ }.property('progress'),
+
+ isCompleted: function () {
+ return (this.get('isError') || this.get('isSuccess'));
+ }.property('isError', 'isSuccess'),
+
+ start: function () {
+ if (App.testMode) {
+ this.startPolling();
+ return;
+ }
+ var self = this;
+ var url = this.get('url');
+ var method;
+ var data = this.get('data');
+ if (App.testMode) {
+ method = 'GET';
+ } else {
+ method = 'PUT';
+ }
+
+ $.ajax({
+ type: method,
+ url: url,
+ async: false,
+ data: data,
+ dataType: 'text',
+ timeout: App.timeout,
+ success: function (data) {
+ var jsonData = jQuery.parseJSON(data);
+ console.log("TRACE: Polling -> value of the url is: " + url);
+ console.log("TRACE: Polling-> value of the sent data is: " + self.get('data'));
+ console.log("TRACE: Polling-> value of the received data is: " + jsonData);
+ if (jsonData === null) {
+ self.set('isSuccess', true);
+ } else {
+ var requestId = jsonData.Requests.id;
+ self.set('requestId', requestId);
+ console.log('requestId is: ' + requestId);
+ }
+ },
+
+ error: function () {
+ console.log("ERROR");
+ self.set('isError', true);
+ },
+
+ statusCode: require('data/statusCodes')
+ });
+ },
+
+ doPolling: function () {
+ if (this.get('requestId')) {
+ this.startPolling();
+ }
+ }.observes('requestId'),
+
+ startPolling: function () {
+ var self = this;
+ var url = App.apiPrefix + '/clusters/' + App.router.getClusterName() + '/requests/' + this.get('requestId') + '?fields=tasks/*';
+ if (App.testMode) {
+ this.set('POLL_INTERVAL', 1);
+ this.numPolls++;
+ url = this.get('mockDataPrefix') + '/poll_' + this.get('numPolls') + '.json';
+ debugger;
+ }
+
+ $.ajax({
+ type: 'GET',
+ url: url,
+ async: true,
+ dataType: 'text',
+ timeout: App.timeout,
+ success: function (data) {
+ console.log("TRACE: In success function for the GET logs data");
+ console.log("TRACE: The value is: ", jQuery.parseJSON(data));
+ var result = self.parseInfo(jQuery.parseJSON(data));
+ if (result !== true) {
+ window.setTimeout(function () {
+ self.startPolling();
+ }, self.POLL_INTERVAL);
+ }
+ },
+
+ error: function (request, ajaxOptions, error) {
+ console.log("TRACE: In error function for the GET data");
+ console.log("TRACE: value of the url is: " + url);
+ console.log("TRACE: error code status is: " + request.status);
+ self.set('isError', true);
+ },
+
+ statusCode: require('data/statusCodes')
+ }).retry({times: App.maxRetries, timeout: App.timeout}).then(null,
+ function () {
+ App.showReloadPopup();
+ console.log('Install services all retries failed');
+ }
+ );
+ },
+
+ stopPolling: function () {
+ //this.set('isSuccess', true);
+ },
+
+ replacePolledData: function (polledData) {
+ this.polledData.clear();
+ this.set('polledData', polledData);
+ },
+
+
+ getExecutedTasks: function (tasksData) {
+ var succededTasks = tasksData.filterProperty('Tasks.status', 'COMPLETED');
+ var failedTasks = tasksData.filterProperty('Tasks.status', 'FAILED');
+ var abortedTasks = tasksData.filterProperty('Tasks.status', 'ABORTED');
+ var timedoutTasks = tasksData.filterProperty('Tasks.status', 'TIMEDOUT');
+ var inProgressTasks = tasksData.filterProperty('Tasks.status', 'IN_PROGRESS');
+ return (succededTasks.length + failedTasks.length + abortedTasks.length + timedoutTasks.length + inProgressTasks.length);
+ },
+
+ isPollingFinished: function (polledData) {
+ if (polledData.everyProperty('Tasks.status', 'COMPLETED')) {
+ this.set('isSuccess', true);
+ return true;
+ } else if (polledData.someProperty('Tasks.status', 'FAILED') || polledData.someProperty('Tasks.status', 'TIMEDOUT') || polledData.someProperty('Tasks.status', 'ABORTED')) {
+ this.set('isError', true);
+ return true;
+ } else {
+ return false;
+ }
+ },
+
+
+ parseInfo: function (polledData) {
+ console.log('TRACE: Entering task info function');
+ var self = this;
+ var totalProgress = 0;
+ var tasksData = polledData.tasks;
+ console.log("The value of tasksData is: ", tasksData);
+ if (!tasksData) {
+ console.log("ERROR: NO tasks available to process");
+ }
+ var requestId = this.get('requestId');
+ if (!App.testMode && polledData.Requests && polledData.Requests.id && polledData.Requests.id != requestId) {
+ // We dont want to use non-current requestId's tasks data to
+ // determine the current install status.
+ // Also, we dont want to keep polling if it is not the
+ // current requestId.
+ return false;
+ }
+ this.replacePolledData(tasksData);
+ /* this.hosts.forEach(function (_host) {
+ var actionsPerHost = tasksData.filterProperty('Tasks.host_name', _host.name); // retrieved from polled Data
+ if (actionsPerHost.length === 0) {
+ _host.set('message', this.t('installer.step9.host.status.nothingToInstall'));
+ console.log("INFO: No task is hosted on the host");
+ }
+ if (actionsPerHost !== null && actionsPerHost !== undefined && actionsPerHost.length !== 0) {
+ this.setLogTasksStatePerHost(actionsPerHost, _host);
+ this.onSuccessPerHost(actionsPerHost, _host); // every action should be a success
+ this.onErrorPerHost(actionsPerHost, _host); // any action should be a failure
+ this.onInProgressPerHost(actionsPerHost, _host); // current running action for a host
+ totalProgress += self.progressPerHost(actionsPerHost, _host);
+ }
+ }, this); */
+ var executedTasks = this.getExecutedTasks(tasksData);
+ totalProgress = Math.floor((executedTasks / tasksData.length) * 100);
+ this.set('progress', totalProgress.toString());
+ console.log("INFO: right now the progress is: " + this.get('progress'));
+ return this.isPollingFinished(tasksData);
+ }
+
+});
+
Modified: incubator/ambari/trunk/ambari-web/app/views.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/views.js?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/views.js (original)
+++ incubator/ambari/trunk/ambari-web/app/views.js Mon Feb 25 22:34:00 2013
@@ -59,6 +59,12 @@ require('views/main/admin/user');
require('views/main/admin/user/create');
require('views/main/admin/user/edit');
require('views/main/admin/user/row');
+require('views/main/admin/security');
+require('views/main/admin/security/disable');
+require('views/main/admin/security/add/menu');
+require('views/main/admin/security/add/step1');
+require('views/main/admin/security/add/step2');
+require('views/main/admin/security/add/step3');
require('views/main/dashboard');
require('views/main/dashboard/service');
require('views/main/dashboard/service/hdfs');
@@ -74,6 +80,7 @@ require('views/main/dashboard/cluster_me
require('views/main/service');
require('views/main/service/menu');
require('views/main/service/item');
+require('views/main/service/reconfigure');
require('views/main/service/info/menu');
require('views/main/service/info/summary');
require('views/main/service/info/configs');
Modified: incubator/ambari/trunk/ambari-web/app/views/common/modal_popup.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/views/common/modal_popup.js?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/views/common/modal_popup.js (original)
+++ incubator/ambari/trunk/ambari-web/app/views/common/modal_popup.js Mon Feb 25 22:34:00 2013
@@ -20,6 +20,8 @@ var App = require('app');
App.ModalPopup = Ember.View.extend({
+ viewName: 'modalPopup',
+
template: Ember.Handlebars.compile([
'<div class="modal-backdrop"></div><div class="modal" id="modal" tabindex="-1" role="dialog" aria-labelledby="modal-label" aria-hidden="true">',
'<div class="modal-header">',
Modified: incubator/ambari/trunk/ambari-web/app/views/main/admin.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/views/main/admin.js?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/views/main/admin.js (original)
+++ incubator/ambari/trunk/ambari-web/app/views/main/admin.js Mon Feb 25 22:34:00 2013
@@ -19,5 +19,14 @@
var App = require('app');
App.MainAdminView = Em.View.extend({
- templateName: require('templates/main/admin')
-});
\ No newline at end of file
+ templateName: require('templates/main/admin'),
+ selectedBinding: 'controller.selected',
+ NavItemView: Ember.View.extend({
+ tagName: 'li',
+ classNameBindings: 'isActive:active'.w(),
+ isActive: function () {
+ return this.get('item') === this.get('parentView.selected');
+ }.property('item', 'parentView.selected').cacheable()
+ })
+});
+
Modified: incubator/ambari/trunk/ambari-web/app/views/main/admin/menu.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/views/main/admin/menu.js?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/views/main/admin/menu.js (original)
+++ incubator/ambari/trunk/ambari-web/app/views/main/admin/menu.js Mon Feb 25 22:34:00 2013
@@ -18,13 +18,19 @@
var App = require('app');
+// This logic is substituted by MainAdminView for now.
App.MainAdminMenuView = Em.CollectionView.extend({
- content:[
+ //contentBinding: 'controller',
+ /*content: [
{
route:'user',
label:'Users'
},
{
+ route:'security',
+ label:'Security'
+ },
+ {
route:'cluster',
label:'Cluster'
}
@@ -33,30 +39,41 @@ App.MainAdminMenuView = Em.CollectionVie
route:'authentication',
label:'Authentication'
},
- {
- route:'security',
- label:'Security'
+
+{
+ route: 'user',
+ label: 'Users'
+
},
{
- route:'audit',
- label:'Audit'
- }*/
+ route: 'security',
+ label: 'Security'
+ }/*,
+ {
+ route:'authentication',
+ label:'Authentication'
+ },
+
+ {
+ route:'audit',
+ label:'Audit'
+ }*/
/*,
- {
- route:'advanced',
- label:'Advanced'
- }
- */
+ {
+ route:'advanced',
+ label:'Advanced'
+ }
+
],
tagName: "ul",
classNames: ["nav", "nav-list"],
- init: function(){
+ init: function () {
this._super();
this.activateView(); // default selected menu
},
- activateView:function () {
+ activateView: function () {
var route = App.get('router.mainAdminController.category');
$.each(this._childViews, function () {
this.set('active', (this.get('content.route') == route ? "active" : ""));
@@ -68,4 +85,5 @@ App.MainAdminMenuView = Em.CollectionVie
active:"",
template:Ember.Handlebars.compile('<a class="text-center" {{action adminNavigate view.content.route }} href="#"> {{unbound view.content.label}}</a>')
})
+*/
});
\ No newline at end of file
Added: incubator/ambari/trunk/ambari-web/app/views/main/admin/security.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/views/main/admin/security.js?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/views/main/admin/security.js (added)
+++ incubator/ambari/trunk/ambari-web/app/views/main/admin/security.js Mon Feb 25 22:34:00 2013
@@ -0,0 +1,24 @@
+/**
+ * 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');
+
+App.MainAdminSecurityView = Em.View.extend({
+ templateName: require('templates/main/admin/security')
+
+});
\ No newline at end of file