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 2012/12/09 15:00:38 UTC
svn commit: r1418960 [5/6] - in
/incubator/ambari/branches/AMBARI-666/ambari-web/app: ./
assets/data/apps/jobs/ assets/data/dashboard/mapreduce/ assets/data/hosts/
controllers/ controllers/main/admin/
controllers/main/charts/heatmap_metrics/ controller...
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/service/add_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/service/add_controller.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/service/add_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/service/add_controller.js Sun Dec 9 14:00:34 2012
@@ -43,7 +43,8 @@ App.AddServiceController = Em.Controller
masterComponentHosts: null,
serviceConfigProperties: null,
advancedServiceConfig: null,
- controllerName: 'addServiceController'
+ controllerName: 'addServiceController',
+ isWizard: true
}),
/**
@@ -166,16 +167,31 @@ App.AddServiceController = Em.Controller
* Load clusterInfo(step1) to model
*/
loadClusterInfo: function(){
- var cluster = {
- name: App.router.getClusterName(),
- status: "",
- isCompleted: true
- };
+ var cluster = App.db.getClusterStatus();
+ if(!cluster){
+ cluster = {
+ name: App.router.getClusterName(),
+ status: "",
+ isCompleted: false
+ };
+ App.db.setClusterStatus(cluster);
+ }
this.set('content.cluster', cluster);
console.log("AddServiceController:loadClusterInfo: loaded data ", cluster);
},
/**
+ * save status of the cluster. This is called from step8 and step9 to persist install and start requestId
+ * @param clusterStatus object with status, isCompleted, requestId, isInstallError and isStartError field.
+ */
+ saveClusterStatus: function (clusterStatus) {
+ clusterStatus.name = this.get('content.cluster.name');
+ this.set('content.cluster', clusterStatus);
+ console.log('called saveClusterStatus ' + JSON.stringify(clusterStatus));
+ App.db.setClusterStatus(clusterStatus);
+ },
+
+ /**
* Temporary function for wizardStep9, before back-end integration
*/
setInfoForStep9: function () {
@@ -441,19 +457,29 @@ App.AddServiceController = Em.Controller
var service = services.findProperty('id', comp.service);
var hosts = [];
- service.get('hostComponents').filterProperty('componentName', comp.name).forEach(function (host_component) {
+ if(!service){
+ service = services.findProperty('id', 'HDFS');
+ service.get('hostComponents').filterProperty('componentName', 'DATANODE').forEach(function (host_component) {
+ hosts.push({
+ group: "Default",
+ hostName: host_component.get('host.id'),
+ isInstalled: false
+ });
+ }, this);
+ } else {
+ service.get('hostComponents').filterProperty('componentName', comp.name).forEach(function (host_component) {
hosts.push({
group: "Default",
hostName: host_component.get('host.id'),
isInstalled: true
});
- }, this);
+ }, this);
+ }
result.push({
componentName: comp.name,
displayName: App.format.role(comp.name),
- hosts: hosts,
- isInstalled: true
+ hosts: hosts
})
}
@@ -471,8 +497,7 @@ App.AddServiceController = Em.Controller
result.push({
componentName: 'CLIENT',
displayName: 'client',
- hosts: hosts,
- isInstalled: true
+ hosts: hosts
})
return result;
@@ -658,7 +683,7 @@ App.AddServiceController = Em.Controller
isCompleted: false,
installStartTime: installSartTime
};
- //self.saveClusterStatus(clusterStatus);
+ self.saveClusterStatus(clusterStatus);
} else {
console.log('ERROR: Error occurred in parsing JSON data');
}
@@ -674,7 +699,7 @@ App.AddServiceController = Em.Controller
isInstallError: true,
isCompleted: false
};
- //self.saveClusterStatus(clusterStatus);
+ self.saveClusterStatus(clusterStatus);
},
statusCode: require('data/statusCodes')
@@ -700,6 +725,7 @@ App.AddServiceController = Em.Controller
App.db.setHosts(undefined);
App.db.setMasterComponentHosts(undefined);
App.db.setSlaveComponentHosts(undefined);
+ App.db.setClusterStatus(undefined);
}
});
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/service/info/configs.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/service/info/configs.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/service/info/configs.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/service/info/configs.js Sun Dec 9 14:00:34 2012
@@ -23,14 +23,21 @@ App.MainServiceInfoConfigsController = E
name: 'mainServiceInfoConfigsController',
stepConfigs: [], //contains all field properties that are viewed in this service
selectedService: null,
+ serviceConfigTags: null,
+ globalConfigs: [],
+ uiConfigs: [],
+ isApplyingChanges: false,
serviceConfigs: require('data/service_configs'),
+ configs: require('data/config_properties').configProperties,
+ configMapping: require('data/config_mapping'),
+ customConfigs: require('data/custom_configs'),
isSubmitDisabled: function () {
- return !this.stepConfigs.everyProperty('errorCount', 0);
- }.property('stepConfigs.@each.errorCount'),
+ return (!(this.stepConfigs.everyProperty('errorCount', 0)) || this.get('isApplyingChanges'));
+ }.property('stepConfigs.@each.errorCount', 'isApplyingChanges'),
- slaveComponentHosts : function(){
- if(!this.get('content')){
+ slaveComponentHosts: function () {
+ if (!this.get('content')) {
return;
}
console.log('slaveComponentHosts', App.db.getSlaveComponentHosts());
@@ -39,11 +46,13 @@ App.MainServiceInfoConfigsController = E
clearStep: function () {
this.get('stepConfigs').clear();
+ this.get('globalConfigs').clear();
+ if (this.get('serviceConfigTags')) {
+ this.set('serviceConfigTags', null);
+ }
},
- serviceConfigProperties: function() {
- console.log('serviceConfigProperties');
- console.log(App.db.getServiceConfigProperties());
+ serviceConfigProperties: function () {
return App.db.getServiceConfigProperties();
}.property('content'),
@@ -52,34 +61,204 @@ App.MainServiceInfoConfigsController = E
*/
loadStep: function () {
console.log("TRACE: Loading configure for service");
-
this.clearStep();
- this.renderServiceConfigs(this.serviceConfigs);
+ //STEP 1: set the present state of the service Properties. State depends on array of: unique combination of type(ex. core-site) and tag (ex. version01) derived from serviceInfo desired_state
+ this.setServciceConfigs();
+ //STEP 2: Create an array of objects defining tagnames to be polled and new tagnames to be set after submit
+ this.setServiceTagNames();
+ //STEP 3: Set globalConfigs and Get an array of serviceProperty objects
+ var serviceConfigs = this.getSitesConfigProperties();
+ //STEP 4: Remove properties mentioned in configMapping from serviceConfig
+ this.get('configMapping').forEach(function (_configs) {
+
+ }, this)
+ //STEP 5: Add the advanced configs to the serviceConfigs property
+
+ var advancedConfig = App.router.get('installerController').loadAdvancedConfig(this.get('content.serviceName'));
+ var service = this.get('serviceConfigs').findProperty('serviceName', this.get('content.serviceName'));
+ advancedConfig.forEach(function (_config) {
+ if (service) {
+ if (!this.get('configMapping').someProperty('name', _config.name)) {
+ if (service.configs.someProperty('name', _config.name)) {
+ service.configs.findProperty('name', _config.name).description = _config.description;
+ } else {
+ _config.id = "site property";
+ _config.category = 'Advanced';
+ _config.displayName = _config.name;
+ _config.defaultValue = _config.value;
+ if (/\${.*}/.test(_config.value) || (service.serviceName !== 'OOZIE' && service.serviceName !== 'HBASE')) {
+ _config.isRequired = false;
+ _config.value = '';
+ } else if (/^\s+$/.test(_config.value)) {
+ _config.isRequired = false;
+ }
+ _config.isVisible = true;
+ _config.displayType = 'advanced';
+ service.configs.pushObject(_config);
+ }
+ }
+ }
+ }, this);
+ this.loadCustomConfig();
- var storedServices = this.get('serviceConfigProperties');
- if (storedServices) {
- var configs = new Ember.Set();
-
- // for all services`
- this.get('stepConfigs').forEach(function (_content) {
- //for all components
- _content.get('configs').forEach(function (_config) {
-
- var componentVal = storedServices.findProperty('name', _config.get('name'));
- //if we have config for specified component
- if(componentVal){
+ this.renderServiceConfigs(this.get('serviceConfigs'));
- //set it
- _config.set('value', componentVal.value)
- }
+ console.log('---------------------------------------');
- }, this);
+
+ },
+
+ /**
+ * Get configuration for the *-site.xml
+ */
+ setServciceConfigs: function () {
+ var self = this;
+ var url = App.apiPrefix + '/clusters/' + App.router.getClusterName() + '/services/' + this.get('content.serviceName');
+ $.ajax({
+ type: 'GET',
+ url: url,
+ async: false,
+ timeout: 10000,
+ dataType: 'text',
+ success: function (data) {
+ console.log("TRACE: In success function for the GET getServciceConfigs call");
+ console.log("TRACE: The url is: " + url);
+ var jsonData = jQuery.parseJSON(data);
+ self.set('serviceConfigTags', jQuery.parseJSON(jsonData.ServiceInfo.desired_configs));
+ },
+
+ error: function (request, ajaxOptions, error) {
+ console.log("TRACE: In error function for the getServciceConfigs call");
+ console.log("TRACE: value of the url is: " + url);
+ console.log("TRACE: error code status is: " + request.status);
+
+ },
+
+ statusCode: require('data/statusCodes')
+ });
+ },
+
+ /**
+ * set tagnames for configuration of the *-site.xml
+ */
+ setServiceTagNames: function () {
+ console.log("TRACE: In setServiceTagNames function:");
+ var newServiceConfigTags = [];
+ var serviceConfigTags = this.get('serviceConfigTags');
+ var time = new Date().getMilliseconds();
+ console.log("The value of time is: " + time);
+ for (var index in serviceConfigTags) {
+ console.log("The value of serviceConfigTags[index]: " + serviceConfigTags[index]);
+ newServiceConfigTags.pushObject({
+ siteName: index,
+ tagName: serviceConfigTags[index],
+ newTagName: serviceConfigTags[index] + time
}, this);
}
+ this.set('serviceConfigTags', newServiceConfigTags);
+ },
- console.log('---------------------------------------');
- console.log(this.get('stepConfigs'));
+ /**
+ * Render a custom conf-site box for entering properties that will be written in *-site.xml files of the services
+ */
+ loadCustomConfig: function () {
+ var serviceConfig = this.get('serviceConfigs').findProperty('serviceName', this.get('content.serviceName'));
+ var customConfig = this.get('customConfigs').findProperty('serviceName', this.get('content.serviceName'));
+ serviceConfig.configs.pushObject(customConfig);
+ },
+
+ /**
+ * load the configs from the server
+ */
+ getSitesConfigProperties: function () {
+ var serviceConfigs = [];
+ var globalConfigs = [];
+ var localServiceConfigs = this.get('serviceConfigs').findProperty('serviceName', this.get('content.serviceName'));
+
+ this.get('serviceConfigTags').forEach(function (_tag) {
+ var properties = this.getSiteConfigProperties(_tag.siteName, _tag.tagName);
+ for (var index in properties) {
+ var serviceConfigObj = {
+ name: index,
+ value: properties[index],
+ defaultValue: properties[index],
+ filename: _tag.siteName + ".xml",
+ isVisible: true,
+ isRequired: true
+ };
+ if (_tag.siteName === 'global') {
+ if (localServiceConfigs.configs.someProperty('name', index)) {
+ var item = localServiceConfigs.configs.findProperty('name', index);
+ item.value = properties[index];
+ item.defaultValue = properties[index];
+ if (item.displayType === 'int') {
+ if (/\d+m$/.test(item.value)) {
+ item.value = item.value.slice(0, item.value.length - 1);
+ item.defaultValue = item.value;
+ }
+ }
+ if (item.displayType === 'checkbox') {
+ switch (item.value) {
+ case 'true' :
+ item.value = true;
+ break;
+ case 'false' :
+ item.value = false;
+ break;
+ }
+ }
+ }
+ serviceConfigObj.id = 'puppet var';
+ serviceConfigObj.serviceName = this.get('configs').someProperty('name', index) ? this.get('configs').findProperty('name', index).serviceName : null;
+ serviceConfigObj.category = this.get('configs').someProperty('name', index) ? this.get('configs').findProperty('name', index).category : null;
+ globalConfigs.pushObject(serviceConfigObj);
+ } else if (!this.get('configMapping').someProperty('name', index)) {
+ if (_tag.siteName !== localServiceConfigs.filename) {
+ serviceConfigObj.isVisible = false;
+ }
+ serviceConfigObj.id = 'site property';
+ serviceConfigObj.serviceName = this.get('content.serviceName');
+ serviceConfigObj.category = 'Advanced';
+ serviceConfigObj.displayName = index;
+ serviceConfigObj.displayType = 'advanced';
+ localServiceConfigs.configs.pushObject(serviceConfigObj);
+ }
+ serviceConfigs.pushObject(serviceConfigObj);
+ }
+ }, this);
+ this.set('globalConfigs', globalConfigs);
+ return serviceConfigs;
+ },
+
+ getSiteConfigProperties: function (sitename, tagname) {
+ var self = this;
+ var properties = {};
+ var url = App.apiPrefix + '/clusters/' + App.router.getClusterName() + '/configurations/?type=' + sitename + '&tag=' + tagname;
+ $.ajax({
+ type: 'GET',
+ url: url,
+ async: false,
+ timeout: 10000,
+ dataType: 'json',
+ success: function (data) {
+ console.log("TRACE: In success function for the GET getSiteConfigProperties call");
+ console.log("TRACE: The url is: " + url);
+ properties = data.items.findProperty('tag', tagname).properties;
+
+ console.log("The value of config properties is: " + properties);
+ },
+
+ error: function (request, ajaxOptions, error) {
+ console.log("TRACE: In error function for the getServciceConfigs call");
+ console.log("TRACE: value of the url is: " + url);
+ console.log("TRACE: error code status is: " + request.status);
+
+ },
+
+ statusCode: require('data/statusCodes')
+ });
+ return properties;
},
/**
@@ -89,6 +268,7 @@ App.MainServiceInfoConfigsController = E
renderServiceConfigs: function (serviceConfigs) {
serviceConfigs.forEach(function (_serviceConfig) {
var serviceConfig = App.ServiceConfig.create({
+ filename: _serviceConfig.filename,
serviceName: _serviceConfig.serviceName,
displayName: _serviceConfig.displayName,
configCategories: _serviceConfig.configCategories,
@@ -118,35 +298,653 @@ App.MainServiceInfoConfigsController = E
_componentConfig.configs.forEach(function (_serviceConfigProperty) {
var serviceConfigProperty = App.ServiceConfigProperty.create(_serviceConfigProperty);
serviceConfigProperty.serviceConfig = componentConfig;
- serviceConfigProperty.initialValue();
+ this.initialValue(serviceConfigProperty);
componentConfig.configs.pushObject(serviceConfigProperty);
serviceConfigProperty.validate();
}, this);
},
+ restartServicePopup: function (event) {
+ console.log("Enered the entry pointttt");
+ var self = this;
+ var result;
+ console.log('I am over hererererere: ' + this.get('content.healthStatus'));
+ if (this.get('isApplyingChanges') === true) {
+ return;
+ }
+ App.ModalPopup.show({
+ header: 'Restart ' + self.get('content.serviceName'),
+ primary: 'Restart',
+ onPrimary: function () {
+ self.restartService();
+ this.hide();
+ },
+ onSecondary: function () {
+ this.hide();
+ },
+ bodyClass: Ember.View.extend({
+ template: Ember.Handlebars.compile(['<p>Restart the service</p>'].join('\n'))
+ })
+ });
+ },
+
+ restartService: function () {
+ console.log("In restart servicesssss");
+ this.set('isApplyingChanges', true);
+ this.get('serviceConfigTags').forEach(function (_tag) {
+ _tag.newTagName = _tag.newTagName + new Date().getMilliseconds();
+ }, this);
+
+ //Step 1: Stop the service
+
+ if (this.stopService()) {
+ this.doPolling('stop', function () {
+ this.applyConfigurations();
+ }, function () {
+ this.failuresInStop();
+ });
+ } else {
+ this.failuresInStop();
+ }
+ },
+
+ failuresInStop: function () {
+ console.log("Step 1 faliure");
+ this.msgPopup('Restart ' + this.get('content.serviceName'), 'Failed to stop the service');
+ this.set('isApplyingChanges', false);
+ },
+
+ applyConfigurations: function () {
+ if (App.testMode === true) {
+ result = true
+ } else {
+ var result = this.saveServiceConfigProperties();
+ }
+
+ if (result === false) {
+ console.log("Step2 failure");
+ this.msgPopup('Restart ' + this.get('content.serviceName'), 'Failed to apply configs. Start the service again with last configurations', this.startServiceWrapper);
+ } else {
+ if (this.startService()) {
+ this.doPolling('start', function () {
+ this.msgPopup('Restart ' + this.get('content.serviceName'), 'Restarted the service successfully with new configurations');
+ this.set('isApplyingChanges', false);
+ }, function () {
+ // this.rollBackPopup('Configs applied but failures encountered during starting/checking service. Do you want to rollback to the last service configuration and restart the service.');
+ console.log("Configs applied but failures encountered during starting/checking service.");
+ });
+ } else {
+ this.msgPopup('Restart ' + this.get('content.serviceName'), 'Failed to start the service');
+ this.set('isApplyingChanges', false);
+ }
+ console.log("Error in start service API");
+ }
+ },
+
+ startServiceWrapper: function () {
+ if (this.startService()) {
+ this.doPolling('start', function () {
+ this.msgPopup('Restart ' + this.get('content.serviceName'), 'Started the service with the last known configuration.');
+ this.set('isApplyingChanges', false);
+ }, function () {
+ this.msgPopup('Restart ' + this.get('content.serviceName'), 'Started the service with the last known configuration.');
+ this.set('isApplyingChanges', false);
+ });
+ } else {
+ this.msgPopup('Restart ' + this.get('content.serviceName'), 'Started the service with the last known configuration.');
+ this.set('isApplyingChanges', false);
+ }
+ },
+
+
+ rollBack: function () {
+ var result;
+ //STEP 1: Apply the last known configuration
+ result = this.applyCreatedConfToService('previous');
+ //CASE 1: failure for rollback
+ if (result === false) {
+ console.log("rollback1 faliure");
+ this.msgPopup('Restart ' + this.get('content.serviceName'), 'Failed to rolled back to the last known configuration');
+ } else {
+ //STEP 2: start the service
+ if (this.startService()) {
+ this.doPolling('start', function () {
+ this.msgPopup('Restart ' + this.get('content.serviceName'), 'Successfully rolled back to the last known configuration');
+ this.set('isApplyingChanges', false);
+ }, function () {
+ this.msgPopup('Restart ' + this.get('content.serviceName'), 'Rolled back to the last configuration but failed to start the service with the rolled back configuration');
+ this.set('isApplyingChanges', false);
+ });
+ } else {
+ this.msgPopup('Restart ' + this.get('content.serviceName'), 'Rolled back to the last configuration but failed to start the service with the rolled back configuration');
+ this.set('isApplyingChanges', false);
+ }
+ }
+ },
+
+ startService: function () {
+ var self = this;
+ var clusterName = App.router.getClusterName();
+ var url = App.apiPrefix + '/clusters/' + clusterName + '/services/' + this.get('content.serviceName');
+ var method = (App.testMode) ? 'GET' : 'PUT';
+ var data = '{"ServiceInfo": {"state": "STARTED"}}';
+ var result;
+ $.ajax({
+ type: method,
+ url: url,
+ data: data,
+ async: false,
+ dataType: 'text',
+ timeout: 5000,
+ success: function (data) {
+ var jsonData = jQuery.parseJSON(data);
+ console.log("TRACE: In success function for the startService call");
+ console.log("TRACE: value of the url is: " + url);
+ result = true;
+ },
+
+ error: function (request, ajaxOptions, error) {
+ console.log("TRACE: In error function for the startService call");
+ console.log("TRACE: value of the url is: " + url);
+ console.log("TRACE: error code status is: " + request.status);
+
+ result = (App.testMode) ? true : false;
+
+ },
+
+ statusCode: require('data/statusCodes')
+ });
+ return result;
+ },
+
+ msgPopup: function (header, message, callback) {
+ var self = this;
+ var result;
+
+ App.ModalPopup.show({
+ header: 'Restart ' + self.get('content.serviceName'),
+ secondary: false,
+ onPrimary: function () {
+ if (callback !== undefined) {
+ callback();
+ }
+ this.hide();
+ },
+ bodyClass: Ember.View.extend({
+ template: Ember.Handlebars.compile(['<p>{{view.message}}</p>'].join('\n')),
+ message: message
+ })
+ });
+ },
+
+ rollBackPopup: function (message) {
+ var self = this;
+ var result;
+
+ App.ModalPopup.show({
+ header: 'Restart ' + self.get('content.serviceName'),
+ primary: 'Yes',
+ secondary: 'No',
+ onPrimary: function () {
+ self.rollBack();
+ this.hide();
+ },
+ bodyClass: Ember.View.extend({
+ template: Ember.Handlebars.compile(['<p>{{view.message}}</p>'].join('\n')),
+ message: message
+ })
+ });
+ },
+
+ stopService: function () {
+ var self = this;
+ var clusterName = App.router.getClusterName();
+ var url = App.apiPrefix + '/clusters/' + clusterName + '/services/' + this.get('content.serviceName');
+ var method = (App.testMode) ? 'GET' : 'PUT';
+ var data = '{"ServiceInfo": {"state": "INSTALLED"}}';
+ var result;
+ $.ajax({
+ type: method,
+ url: url,
+ data: data,
+ async: false,
+ dataType: 'text',
+ timeout: 5000,
+ success: function (data) {
+ var jsonData = jQuery.parseJSON(data);
+ console.log("TRACE: In success function for the stopService call");
+ console.log("TRACE: value of the url is: " + url);
+ result = true;
+ },
+
+ error: function (request, ajaxOptions, error) {
+ console.log("TRACE: STep8 -> In error function for the stopService call");
+ console.log("TRACE: STep8 -> value of the url is: " + url);
+ console.log("TRACE: STep8 -> error code status is: " + request.status);
+ result = (App.testMode) ? true : false;
+ },
+
+ statusCode: require('data/statusCodes')
+ });
+ return result;
+ },
+
/**
* Save config properties
*/
saveServiceConfigProperties: function () {
- var serviceConfigProperties = [];
- this.get('stepConfigs').forEach(function (_content) {
- _content.get('configs').forEach(function (_configProperties) {
- var configProperty = {
- name: _configProperties.get('name'),
- value: _configProperties.get('value'),
- service: _configProperties.get('serviceName')
- };
- serviceConfigProperties.push(configProperty);
+ var result = false;
+ var configs = this.get('stepConfigs').findProperty('serviceName', this.get('content.serviceName')).get('configs');
+ this.saveGlobalConfigs(configs);
+ this.saveSiteConfigs(configs);
+ this.setCustomConfigs();
+ var result = this.createConfigurations();
+ if (result === true) {
+ result = this.applyCreatedConfToService('new');
+ }
+ console.log("The result from applyCreatdConfToService is: " + result);
+ return result;
+ },
+
+ saveGlobalConfigs: function (configs) {
+ var globalConfigs = this.get('globalConfigs');
+ configs.filterProperty('id', 'puppet var').forEach(function (_config) {
+ if (globalConfigs.someProperty('name', _config.name)) {
+ globalConfigs.findProperty('name', _config.name).value = _config.value;
+ } else {
+ globalConfigs.pushObject({
+ name: _config.name,
+ value: _config.value
+ });
+ }
+ }, this);
+ this.set('globalConfigs', globalConfigs);
+ },
+
+ saveSiteConfigs: function (configs) {
+ var storedConfigs = this.get('stepConfigs').filterProperty('id', 'site property').filterProperty('value');
+ var uiConfigs = this.loadUiSideConfigs();
+ this.set('uiConfigs', storedConfigs.concat(uiConfigs));
+ },
+
+ loadUiSideConfigs: function () {
+ var uiConfig = [];
+ var configs = this.get('configMapping').filterProperty('foreignKey', null);
+ configs.forEach(function (_config) {
+ var value = this.getGlobConfigValue(_config.templateName, _config.value);
+ uiConfig.pushObject({
+ "id": "site property",
+ "name": _config.name,
+ "value": value,
+ "filename": _config.filename
+ });
+ }, this);
+ var dependentConfig = this.get('configMapping').filterProperty('foreignKey');
+ dependentConfig.forEach(function (_config) {
+ this.setConfigValue(uiConfig, _config);
+ uiConfig.pushObject({
+ "id": "site property",
+ "name": _config.name,
+ "value": _config.value,
+ "filename": _config.filename
+ });
+ }, this);
+ return uiConfig;
+ },
+ /**
+ * Set all site property that are derived from other puppet-variable
+ */
+
+ getGlobConfigValue: function (templateName, expression) {
+ var express = expression.match(/<(.*?)>/g);
+ var value = expression;
+ if (express == null) {
+ return expression;
+ }
+ express.forEach(function (_express) {
+ //console.log("The value of template is: " + _express);
+ var index = parseInt(_express.match(/\[([\d]*)(?=\])/)[1]);
+ if (this.get('globalConfigs').someProperty('name', templateName[index])) {
+ //console.log("The name of the variable is: " + this.get('content.serviceConfigProperties').findProperty('name', templateName[index]).name);
+ var globValue = this.get('globalConfigs').findProperty('name', templateName[index]).value;
+ value = value.replace(_express, globValue);
+ } else {
+ /*
+ console.log("ERROR: The variable name is: " + templateName[index]);
+ console.log("ERROR: mapped config from configMapping file has no corresponding variable in " +
+ "content.serviceConfigProperties. Two possible reasons for the error could be: 1) The service is not selected. " +
+ "and/OR 2) The service_config metadata file has no corresponding global var for the site property variable");
+ */
+ value = null;
+ }
+ }, this);
+ return value;
+ },
+ /**
+ * Set all site property that are derived from other site-properties
+ */
+ setConfigValue: function (uiConfig, config) {
+ var fkValue = config.value.match(/<(foreignKey.*?)>/g);
+ if (fkValue) {
+ fkValue.forEach(function (_fkValue) {
+ var index = parseInt(_fkValue.match(/\[([\d]*)(?=\])/)[1]);
+ if (uiConfig.someProperty('name', config.foreignKey[index])) {
+ var globalValue = uiConfig.findProperty('name', config.foreignKey[index]).value;
+ config.value = config.value.replace(_fkValue, globalValue);
+ } else if (this.get('stepConfigs').someProperty('name', config.foreignKey[index])) {
+ var globalValue;
+ if (this.get('stepConfigs').findProperty('name', config.foreignKey[index]).value === '') {
+ globalValue = this.get('stepConfigs').findProperty('name', config.foreignKey[index]).defaultValue;
+ } else {
+ globalValue = this.get('stepConfigs').findProperty('name', config.foreignKey[index]).value;
+ }
+ config.value = config.value.replace(_fkValue, globalValue);
+ }
+ }, this);
+ }
+ if (fkValue = config.name.match(/<(foreignKey.*?)>/g)) {
+ fkValue.forEach(function (_fkValue) {
+ var index = parseInt(_fkValue.match(/\[([\d]*)(?=\])/)[1]);
+ if (uiConfig.someProperty('name', config.foreignKey[index])) {
+ var globalValue = uiConfig.findProperty('name', config.foreignKey[index]).value;
+ config.name = config.name.replace(_fkValue, globalValue);
+ } else if (this.get('stepConfigs').someProperty('name', config.foreignKey[index])) {
+ var globalValue;
+ if (this.get('stepConfigs').findProperty('name', config.foreignKey[index]).value === '') {
+ globalValue = this.get('stepConfigs').findProperty('name', config.foreignKey[index]).defaultValue;
+ } else {
+ globalValue = this.get('stepConfigs').findProperty('name', config.foreignKey[index]).value;
+ }
+ config.name = config.name.replace(_fkValue, globalValue);
+ }
+ }, this);
+ }
+ //For properties in the configMapping file having foreignKey and templateName properties.
+ var templateValue = config.value.match(/<(templateName.*?)>/g);
+ if (templateValue) {
+ templateValue.forEach(function (_value) {
+ var index = parseInt(_value.match(/\[([\d]*)(?=\])/)[1]);
+ if (this.get('globalConfigs').someProperty('name', config.templateName[index])) {
+ var globalValue = this.get('globalConfigs').findProperty('name', config.templateName[index]).value;
+ config.value = config.value.replace(_value, globalValue);
+ }
}, this);
+ }
+ },
+ createConfigurations: function () {
+ var result = true;
+ var serviceConfigTags = this.get('serviceConfigTags');
+ serviceConfigTags.forEach(function (_serviceTags) {
+ if (_serviceTags.siteName === 'global') {
+ console.log("TRACE: Inside globalssss");
+ result = this.createConfigSite(this.createGlobalSiteObj(_serviceTags.newTagName));
+ } else if (_serviceTags.siteName === 'core-site') {
+ console.log("TRACE: Inside core-site");
+ result = this.createConfigSite(this.createCoreSiteObj(_serviceTags.newTagName));
+ } else {
+ result = this.createConfigSite(this.createSiteObj(_serviceTags.siteName, _serviceTags.newTagName));
+ }
+ if (result === false) {
+ return false;
+ }
+ }, this);
+ return true;
+ },
+
+ createConfigSite: function (data) {
+ var result;
+ var realData = data;
+ console.log("Inside createConfigSite");
+ var clusterName = App.router.getClusterName();
+ var url = App.apiPrefix + '/clusters/' + clusterName + '/configurations';
+ $.ajax({
+ type: 'POST',
+ url: url,
+ data: JSON.stringify(data),
+ async: false,
+ dataType: 'text',
+ timeout: 5000,
+ success: function (data) {
+ var jsonData = jQuery.parseJSON(data);
+ result = true;
+ console.log("TRACE: In success function for the createConfigSite");
+ console.log("TRACE: value of the url is: " + url);
+ console.log("TRACE: value of the received data is: " + jsonData);
+ },
+
+ error: function (request, ajaxOptions, error) {
+ result = false;
+ console.log('TRACE: In Error ');
+ console.log("The original data was: " + JSON.stringify(realData));
+ console.log('TRACE: Error message is: ' + request.responseText);
+ console.log("TRACE: value of the url is: " + url);
+ },
+
+ statusCode: require('data/statusCodes')
+ });
+ console.log("Exiting createConfigSite");
+ console.log("Value of result is: " + result);
+ return result;
+ },
+
+ createGlobalSiteObj: function (tagName) {
+ var globalSiteProperties = {};
+ this.get('globalConfigs').forEach(function (_globalSiteObj) {
+ // do not pass any globalConfigs whose name ends with _host or _hosts
+ if (!/_hosts?$/.test(_globalSiteObj.name)) {
+ // append "m" to JVM memory options
+ if (/_heapsize|_newsize|_maxnewsize$/.test(_globalSiteObj.name)) {
+ _globalSiteObj.value += "m";
+ }
+ globalSiteProperties[_globalSiteObj.name] = _globalSiteObj.value;
+ //console.log("TRACE: name of the global property is: " + _globalSiteObj.name);
+ //console.log("TRACE: value of the global property is: " + _globalSiteObj.value);
+ }
+ }, this);
+ return {"type": "global", "tag": tagName, "properties": globalSiteProperties};
+ },
+
+ createCoreSiteObj: function (tagName) {
+ var coreSiteObj = this.get('uiConfigs').filterProperty('filename', 'core-site.xml');
+ var coreSiteProperties = {};
+ // hadoop.proxyuser.oozie.hosts needs to be skipped if oozie is not selected
+ var isOozieSelected = (this.get('content.serviceName') === 'OOZIE');
+ coreSiteObj.forEach(function (_coreSiteObj) {
+ if (isOozieSelected || _coreSiteObj.name != 'hadoop.proxyuser.oozie.hosts') {
+ coreSiteProperties[_coreSiteObj.name] = _coreSiteObj.value;
+ }
+ //console.log("TRACE: name of the property is: " + _coreSiteObj.name);
+ //console.log("TRACE: value of the property is: " + _coreSiteObj.value);
+ }, this);
+ return {"type": "core-site", "tag": tagName, "properties": coreSiteProperties};
+ },
+ createSiteObj: function (siteName, tagName) {
+ var siteObj = this.get('uiConfigs').filterProperty('filename', siteName + ".xml");
+ var siteProperties = {};
+ siteObj.forEach(function (_siteObj) {
+ siteProperties[_siteObj.name] = _siteObj.value;
+ }, this);
+ return {"type": siteName, "tag": tagName, "properties": siteProperties};
+ },
+
+ applyCreatedConfToService: function (configStatus) {
+ var result;
+ var clusterName = App.router.getClusterName();
+ var url = App.apiPrefix + '/clusters/' + clusterName + '/services/' + this.get('content.serviceName');
+ var data = this.getConfigForService(configStatus);
+ var realData = data;
+ $.ajax({
+ type: 'PUT',
+ url: url,
+ async: false,
+ dataType: 'text',
+ data: JSON.stringify(data),
+ timeout: 5000,
+ success: function (data) {
+ var jsonData = jQuery.parseJSON(data);
+ console.log("TRACE: In success function for the applyCreatedConfToService call");
+ console.log("TRACE: value of the url is: " + url);
+ result = true;
+ },
+
+ error: function (request, ajaxOptions, error) {
+ console.log('Error: In Error of apply');
+ console.log("The original data was: " + JSON.stringify(realData));
+ console.log('Error: Error message is: ' + request.responseText);
+ result = false;
+ },
+
+ statusCode: require('data/statusCodes')
+ });
+ console.log("Exiting applyCreatedConfToService");
+ console.log("Value of result is: " + result);
+ return result;
+ },
+
+ getConfigForService: function (config) {
+ var data = {config: {}};
+ this.get('serviceConfigTags').forEach(function (_serviceTag) {
+ if (config === 'new')
+ data.config[_serviceTag.siteName] = _serviceTag.newTagName;
+ else if (config = 'previous') {
+ data.config[_serviceTag.siteName] = _serviceTag.tagName;
+ }
+ }, this);
+ return data;
+ },
+
+ setCustomConfigs: function () {
+ var site = this.get('stepConfigs').filterProperty('id', 'conf-site');
+ site.forEach(function (_site) {
+ var keyValue = _site.value.split(/\n+/);
+ if (keyValue) {
+ keyValue.forEach(function (_keyValue) {
+ console.log("The value of the keyValue is: " + _keyValue.trim());
+ _keyValue = _keyValue.trim();
+ var key = _keyValue.match(/(.+)=/);
+ var value = _keyValue.match(/=(.*)/);
+ if (key) {
+ this.setSiteProperty(key[1], value[1], _site.filename);
+ }
+
+ }, this);
+ }
}, this);
+ },
+
+ /**
+ * Set property of the site variable
+ */
+ setSiteProperty: function (key, value, filename) {
+ if (this.get('uiConfigs').someProperty('name', key)) {
+ this.get('uiConfigs').findProperty('name', key).value = value;
+ } else {
+ this.get('uiConfigs').pushObject({
+ "id": "site property",
+ "name": key,
+ "value": value,
+ "filename": filename
+ });
+ }
+ },
- App.db.setServiceConfigProperties(serviceConfigProperties);
- alert('Data saved successfully');
-// this.set('content.serviceConfigProperties', serviceConfigProperties);
+ getUrl: function (testUrl, url) {
+ return (App.testMode) ? testUrl : App.apiPrefix + '/clusters/' + App.router.getClusterName() + url;
+ },
+
+ doPolling: function (desiredStatus, successCallback, errCallback) {
+ var POLL_INTERVAL = 4000;
+ var self = this;
+ var result = true;
+ var servicesUrl1;
+ if (desiredStatus === 'stop') {
+ servicesUrl1 = this.getUrl('/data/dashboard/mapreduce/mapreduce_stop.json', '/services?ServiceInfo/service_name=' + this.get('content.serviceName') + '&fields=components/host_components/*');
+ } else if (desiredStatus === 'start') {
+ servicesUrl1 = this.getUrl('/data/dashboard/mapreduce/mapreduce_start.json', '/services?ServiceInfo/service_name=' + this.get('content.serviceName') + '&fields=components/host_components/*');
+ }
+
+ App.HttpClient.get(servicesUrl1, App.servicesMapper, {
+ complete: function () {
+ var status;
+ if (result === false) {
+ return;
+ }
+ if (desiredStatus === 'stop') {
+ status = self.get('content.isStopped');
+ if (self.get('content.components').someProperty('workStatus', 'STOP_FAILED')) {
+ // if (!self.stopService()) {
+ // return;
+ //}
+ }
+ } else if (desiredStatus === 'start') {
+ status = self.get('content.isStarted');
+ if (self.get('content.components').someProperty('workStatus', 'START_FAILED')) {
+ //if (!self.startService()) {
+ // return;
+ //}
+ }
+ }
+ if (status !== true) {
+ window.setTimeout(function () {
+ self.doPolling(desiredStatus, successCallback, errCallback);
+ }, POLL_INTERVAL);
+ } else if (status === true) {
+ successCallback.apply(self);
+ }
+ },
+ error: function (jqXHR, textStatus) {
+ errCallback.apply(self);
+ result = false;
+ }
+ });
+ return result;
+ },
+
+ initialValue: function (config) {
+ switch (config.name) {
+ case 'namenode_host':
+ config.set('id', 'puppet var');
+ config.set('value', this.get('content.components').findProperty('componentName', 'NAMENODE').get('host.hostName'));
+ break;
+ case 'snamenode_host':
+ config.set('id', 'puppet var');
+ config.set('value', this.get('content.components').findProperty('componentName', 'SECONDARY_NAMENODE').get('host.hostName'));
+ break;
+ case 'jobtracker_host':
+ config.set('id', 'puppet var');
+ config.set('value', this.get('content.components').findProperty('componentName', 'JOBTRACKER').get('host.hostName'));
+ break;
+ case 'hbasemaster_host':
+ config.set('id', 'puppet var');
+ config.set('value', this.get('content.components').findProperty('componentName', 'HBASE_MASTER').get('host.hostName'));
+ break;
+ case 'hivemetastore_host':
+ config.set('id', 'puppet var');
+ config.set('value', this.get('content.components').findProperty('componentName', 'HIVE_SERVER').get('host.hostName'));
+ break;
+ case 'hive_ambari_host':
+ config.set('id', 'puppet var');
+ config.set('value', this.get('content.components').findProperty('componentName', 'HIVE_SERVER').get('host.hostName'));
+ break;
+ case 'oozieserver_host':
+ config.set('id', 'puppet var');
+ config.set('value', this.get('content.components').findProperty('componentName', 'OOZIE_SERVER').get('host.hostName'));
+ break;
+ case 'oozie_ambari_host':
+ config.set('id', 'puppet var');
+ config.set('value', this.get('content.components').findProperty('componentName', 'OOZIE_SERVER').get('host.hostName'));
+ break;
+ case 'zookeeperserver_hosts':
+ config.set('id', 'puppet var');
+ config.set('value', this.get('content.components').findProperty('componentName', 'ZOOKEEPER_SERVER').get('host.hostName'));
+ break;
+ }
}
+
});
+
App.MainServiceSlaveComponentGroupsController = App.SlaveComponentGroupsController.extend({
name: 'mainServiceSlaveComponentGroupsController',
contentBinding: 'App.router.mainServiceInfoConfigsController.slaveComponentHosts',
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/service/item.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/service/item.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/service/item.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/main/service/item.js Sun Dec 9 14:00:34 2012
@@ -26,7 +26,7 @@ App.MainServiceItemController = Em.Contr
* @param url
* @param data Object to send
*/
- sendCommandToServer : function(url, method,postData, callback){
+ sendCommandToServer : function(url, method, postData, callback){
var url = (App.testMode) ?
'/data/wizard/deploy/poll_1.json' : //content is the same as ours
App.apiPrefix + '/clusters/' + App.router.getClusterName() + url;
@@ -36,7 +36,7 @@ App.MainServiceItemController = Em.Contr
$.ajax({
type: method,
url: url,
- data: JSON.stringify(postData),
+ data: (postData != null) ? JSON.stringify(postData) : null,
dataType: 'json',
timeout: App.timeout,
success: function(data){
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step10_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step10_controller.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step10_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step10_controller.js Sun Dec 9 14:00:34 2012
@@ -66,7 +66,12 @@ App.WizardStep10Controller = Em.Controll
var succededHosts = hostsInfo.filterProperty('status', 'success');
var warnedHosts = hostsInfo.filterProperty('status', 'warning').concat(hostsInfo.filterProperty('status', 'failed'));
if (succededHosts.length) {
- var successStatement = succededHosts.length + ' nodes succeded completely to install and start all service components assigned to them.';
+ var successStatement;
+ if (succededHosts.length > 1) {
+ successStatement = succededHosts.length + ' nodes succeded completely to install and start all service components assigned to them.';
+ } else {
+ successStatement = succededHosts.length + ' node succeded completely to install and start all service components assigned to it.';
+ }
this.get('clusterInfo').findProperty('id', 1).get('status').pushObject(Ember.Object.create({
id: 1,
displayStatement: successStatement
@@ -281,7 +286,7 @@ App.WizardStep10Controller = Em.Controll
loadNagios: function (component) {
if (component.get('hostName')) {
- var statement = 'Ganglia Server installed on ' + component.get('hostName');
+ var statement = 'Nagios Server installed on ' + component.get('hostName');
this.get('clusterInfo').findProperty('id', 2).get('status').pushObject(Ember.Object.create({
id: 1,
displayStatement: statement
@@ -315,13 +320,15 @@ App.WizardStep10Controller = Em.Controll
}
},
- loadInstallTime: function() {
- var statement = 'Install and start of all services completed in ' + this.get('content.cluster.serviceStartTime') + ' minutes';
- this.get('clusterInfo').pushObject(Ember.Object.create({
- id: 5,
- displayStatement: statement,
- status: []
- }));
+ loadInstallTime: function () {
+ if (this.get('content.cluster.installTime')) {
+ var statement = 'Install and start of all services completed in ' + this.get('content.cluster.installTime') + ' minutes';
+ this.get('clusterInfo').pushObject(Ember.Object.create({
+ id: 5,
+ displayStatement: statement,
+ status: []
+ }));
+ }
}
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step5_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step5_controller.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step5_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step5_controller.js Sun Dec 9 14:00:34 2012
@@ -64,7 +64,7 @@ App.WizardStep5Controller = Em.Controlle
host_name: _host.name,
cpu: _host.cpu,
memory: _host.memory,
- host_info: "%@ ( %@GB %@cores )".fmt(_host.name, _host.memory, _host.cpu)
+ host_info: "%@ (%@, %@ cores)".fmt(_host.name, (_host.memory * 1024).bytesToSize(1, 'parseFloat'), _host.cpu)
});
this.get("hosts").pushObject(hostObj);
@@ -92,7 +92,7 @@ App.WizardStep5Controller = Em.Controlle
var masterComponents = this.get('components').filterProperty('isMaster', true); //get full list from mock data
var servicesLength = services.length;
- for (var index =0; index < servicesLength; index++) {
+ for (var index = 0; index < servicesLength; index++) {
var componentInfo = masterComponents.filterProperty('service_name', services[index]);
componentInfo.forEach(function (_componentInfo) {
@@ -383,11 +383,10 @@ App.WizardStep5Controller = Em.Controlle
mappedHosts.forEach(function (item) {
hostObj = self.get("hosts").findProperty("host_name", item);
console.log("Name of the host is: " + hostObj.host_name);
- hostInfo = " ( " + hostObj.get("memory") + "GB" + " " + hostObj.get("cpu") + "cores )";
mappingObject = Ember.Object.create({
host_name: item,
- hostInfo: hostInfo,
+ hostInfo: hostObj.host_info,
masterServices: self.get("selectedServicesMasters").filterProperty("selectedHost", item)
});
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step6_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step6_controller.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step6_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step6_controller.js Sun Dec 9 14:00:34 2012
@@ -231,7 +231,7 @@ App.WizardStep6Controller = Em.Controlle
var dataNode = hostsObj.findProperty('hostName', _dataNode.hostName);
if (dataNode) {
dataNode.set('isDataNode', true);
- dataNode.set('isDataNodeInstalled', true);
+ dataNode.set('isDataNodeInstalled', _dataNode.isInstalled);
}
});
@@ -241,7 +241,7 @@ App.WizardStep6Controller = Em.Controlle
var taskTracker = hostsObj.findProperty('hostName', _taskTracker.hostName);
if (taskTracker) {
taskTracker.set('isTaskTracker', true);
- taskTracker.set('isTaskTrackerInstalled', true);
+ taskTracker.set('isTaskTrackerInstalled', _taskTracker.isInstalled);
}
});
}
@@ -252,7 +252,7 @@ App.WizardStep6Controller = Em.Controlle
var regionServer = hostsObj.findProperty('hostName', _regionServer.hostName);
if (regionServer) {
regionServer.set('isRegionServer', true);
- regionServer.set('isRegionServerInstalled', true);
+ regionServer.set('isRegionServerInstalled', _regionServer.isInstalled);
}
});
}
@@ -262,7 +262,7 @@ App.WizardStep6Controller = Em.Controlle
var client = hostsObj.findProperty('hostName', _client.hostName);
if (client) {
client.set('isClient', true);
- client.set('isClientInstalled', true);
+ client.set('isClientInstalled', _client.isInstalled);
}
}, this);
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step7_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step7_controller.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step7_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step7_controller.js Sun Dec 9 14:00:34 2012
@@ -116,6 +116,11 @@ App.WizardStep7Controller = Em.Controlle
}
},
+
+
+ /**
+ * Render a custom conf-site box for entering properties that will be written in *-site.xml files of the services
+ */
loadCustomConfig: function () {
var serviceConfigs = this.get('serviceConfigs');
this.get('customConfigs').forEach(function (_config) {
@@ -134,8 +139,8 @@ App.WizardStep7Controller = Em.Controlle
*/
renderServiceConfigs: function (serviceConfigs) {
serviceConfigs.forEach(function (_serviceConfig) {
+
var serviceConfig = App.ServiceConfig.create({
- id: _serviceConfig.id,
filename: _serviceConfig.filename,
serviceName: _serviceConfig.serviceName,
displayName: _serviceConfig.displayName,
@@ -154,6 +159,21 @@ App.WizardStep7Controller = Em.Controlle
}
}, this);
+ var miscConfigs = this.get('stepConfigs').findProperty('serviceName', 'MISC').configs;
+ var showProxyGroup = this.get('selectedServiceNames').contains('HIVE') ||
+ this.get('selectedServiceNames').contains('HCATALOG') ||
+ this.get('selectedServiceNames').contains('OOZIE');
+ miscConfigs.findProperty('name', 'proxyuser_group').set('isVisible', showProxyGroup);
+ miscConfigs.findProperty('name', 'hbase_user').set('isVisible', this.get('selectedServiceNames').contains('HBASE'));
+ miscConfigs.findProperty('name', 'mapred_user').set('isVisible', this.get('selectedServiceNames').contains('MAPREDUCE'));
+ miscConfigs.findProperty('name', 'hive_user').set('isVisible', this.get('selectedServiceNames').contains('HIVE'));
+ miscConfigs.findProperty('name', 'hcat_user').set('isVisible', this.get('selectedServiceNames').contains('HCATALOG'));
+ miscConfigs.findProperty('name', 'templeton_user').set('isVisible', this.get('selectedServiceNames').contains('HCATALOG'));
+ miscConfigs.findProperty('name', 'oozie_user').set('isVisible', this.get('selectedServiceNames').contains('OOZIE'));
+ miscConfigs.findProperty('name', 'pig_user').set('isVisible', this.get('selectedServiceNames').contains('PIG'));
+ miscConfigs.findProperty('name', 'sqoop_user').set('isVisible', this.get('selectedServiceNames').contains('SQOOP'));
+ miscConfigs.findProperty('name', 'zk_user').set('isVisible', this.get('selectedServiceNames').contains('ZOOKEEPER'));
+
this.set('selectedService', this.get('stepConfigs').objectAt(0));
},
@@ -167,7 +187,6 @@ App.WizardStep7Controller = Em.Controlle
var serviceConfigProperty = App.ServiceConfigProperty.create(_serviceConfigProperty);
serviceConfigProperty.serviceConfig = componentConfig;
serviceConfigProperty.initialValue();
-
componentConfig.configs.pushObject(serviceConfigProperty);
serviceConfigProperty.validate();
}, this);
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step8_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step8_controller.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step8_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step8_controller.js Sun Dec 9 14:00:34 2012
@@ -293,6 +293,7 @@ App.WizardStep8Controller = Em.Controlle
break;
case 'GANGLIA':
this.loadGanglia(serviceObj);
+ break;
case 'HCATALOG':
break;
default:
@@ -615,7 +616,7 @@ App.WizardStep8Controller = Em.Controlle
createCluster: function () {
- if (this.get('content.cluster.isCompleted')){
+ if (this.get('content.isWizard')){
return false;
}
@@ -829,7 +830,7 @@ App.WizardStep8Controller = Em.Controlle
createConfigurations: function () {
var selectedServices = this.get('selectedServices');
- if (!this.get('content.cluster.isCompleted')){
+ if (!this.get('content.isWizard')){
this.createConfigSite(this.createGlobalSiteObj());
this.createConfigSite(this.createCoreSiteObj());
this.createConfigSite(this.createHdfsSiteObj('HDFS'));
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/controllers/wizard/step9_controller.js Sun Dec 9 14:00:34 2012
@@ -77,11 +77,14 @@ App.WizardStep9Controller = Em.Controlle
},
loadHosts: function () {
- var hostInfo = [];
- hostInfo = App.db.getHosts();
+ var hostInfo = this.get('content.hostsInfo');
+
var hosts = new Ember.Set();
for (var index in hostInfo) {
- hosts.add(hostInfo[index]);
+ var obj = Em.Object.create(hostInfo[index]);
+ obj.tasks = [];
+ obj.logTasks = [];
+ hosts.add(obj);
console.log("TRACE: host name is: " + hostInfo[index].name);
}
return hosts;
@@ -433,7 +436,6 @@ App.WizardStep9Controller = Em.Controlle
// This is done at HostRole level.
setLogTasksStatePerHost: function (tasksPerHost, host) {
- var tasks = [];
console.log('In step9 setTasksStatePerHost function.');
tasksPerHost.forEach(function (_task) {
console.log('In step9 _taskPerHost function.');
@@ -491,7 +493,7 @@ App.WizardStep9Controller = Em.Controlle
getUrl: function () {
var clusterName = this.get('content.cluster.name');
- var requestId = App.db.getClusterStatus().requestId;
+ var requestId = this.get('content.cluster.requestId');
var url = App.apiPrefix + '/clusters/' + clusterName + '/requests/' + requestId + '?fields=tasks/*';
console.log("URL for step9 is: " + url);
return url;
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_mapping.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_mapping.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_mapping.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_mapping.js Sun Dec 9 14:00:34 2012
@@ -102,13 +102,6 @@ module.exports = [
"filename": "hdfs-site.xml"
},
{
- "name": "dfs.webhdfs.enabled",
- "templateName": ["dfs_webhdfs_enabled"],
- "foreignKey": null,
- "value": "<templateName[0]>",
- "filename": "hdfs-site.xml"
- },
- {
"name": "dfs.datanode.failed.volumes.tolerated",
"templateName": ["dfs_datanode_failed_volume_tolerated"],
"foreignKey": null,
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_properties.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_properties.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_properties.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/data/config_properties.js Sun Dec 9 14:00:34 2012
@@ -609,7 +609,7 @@ module.exports =
{
"id": "puppet var",
"name": "proxyuser_group",
- "displayName": "Proxy group for Hive, Templeton and Oozie.",
+ "displayName": "Proxy group for Hive, Templeton, and Oozie",
"description": "",
"defaultValue": "users",
"isReconfigurable": false,
@@ -648,8 +648,8 @@ module.exports =
{
"id": "puppet var",
"name": "dfs_replication",
- "displayName": "Include hosts",
- "description": "Include entered hosts",
+ "displayName": "Block replication",
+ "description": "Default block replication.",
"displayType": "int",
"defaultValue": "3",
"isReconfigurable": false,
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/initialize.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/initialize.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/initialize.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/initialize.js Sun Dec 9 14:00:34 2012
@@ -22,7 +22,7 @@ window.App = require('app');
App.testMode = false;
App.skipBootstrap = false;
App.alwaysGoToInstaller = false;
-App.apiPrefix = '/api';
+App.apiPrefix = '/api/v1';
// default AJAX timeout
App.timeout = 20000;
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/hosts_mapper.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/hosts_mapper.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/hosts_mapper.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/hosts_mapper.js Sun Dec 9 14:00:34 2012
@@ -28,6 +28,7 @@ App.hostsMapper = App.QuickDataMapper.cr
components: {
item : 'HostRoles.component_name'
},
+ rack: 'Hosts.rack_info',
host_components_key: 'host_components',
host_components_type: 'array',
host_components: {
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/jobs_mapper.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/jobs_mapper.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/jobs_mapper.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/jobs_mapper.js Sun Dec 9 14:00:34 2012
@@ -57,7 +57,9 @@ App.jobsMapper = App.QuickDataMapper.cre
App.jobTimeLineMapper = App.QuickDataMapper.create({
config:{
- jobTimeLine:'items'
+ map:'map',
+ shuffle:'shuffle',
+ reduce:'reduce'
},
map:function (json) {
var job = this.get('model'); // @model App.MainAppsItemBarView
@@ -71,7 +73,12 @@ App.jobTimeLineMapper = App.QuickDataMap
App.jobTasksMapper = App.QuickDataMapper.create({
config:{
- jobTaskView:'items'
+ mapNodeLocal:'mapNodeLocal',
+ mapRackLocal:'mapRackLocal',
+ mapOffSwitch:'mapOffSwitch',
+ reduceOffSwitch:'reduceOffSwitch',
+ submitTime:'submitTime',
+ finishTime:'finishTime'
},
map:function (json) {
var job = this.get('model'); // @model App.MainAppsItemBarView
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/services_mapper.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/services_mapper.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/services_mapper.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/mappers/services_mapper.js Sun Dec 9 14:00:34 2012
@@ -25,6 +25,7 @@ App.servicesMapper = App.QuickDataMapper
'OOZIE',
'GANGLIA',
'NAGIOS',
+ 'ZOOKEEPER',
'PIG',
'SQOOP'
],
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/messages.js Sun Dec 9 14:00:34 2012
@@ -340,7 +340,10 @@ Em.I18n.translations = {
'dashboard.services.hbase.masterStarted':'Master Started',
'dashboard.services.hbase.masterActivated':'Master Activated',
-
+ 'dashboard.services.configs.popup.stopService.header':'Stop service',
+ 'dashboard.services.configs.popup.stopService.body' : 'Service needs to be stopped for reconfiguration',
+ 'dashboard.services.configs.popup.restartService.header' : 'Restart service',
+ 'dashboard.services.configs.popup.restartService.body' : 'Service needs to be restarted for reconfiguration',
'timeRange.presets.1hour':'1h',
'timeRange.presets.12hour':'12h',
'timeRange.presets.1day':'1d',
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/component.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/component.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/component.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/component.js Sun Dec 9 14:00:34 2012
@@ -62,6 +62,8 @@ App.Component.Status = {
starting: "STARTING",
stopped: "INSTALLED",
stopping: "STOPPING",
+ stop_failed: "STOP_FAILED",
+ start_failed: "START_FAILED",
getKeyName:function(value){
switch(value){
@@ -73,6 +75,10 @@ App.Component.Status = {
return 'installed';
case this.stopping:
return 'stopping';
+ case this.stop_failed:
+ return 'stop_failed';
+ case this.start_failed:
+ return 'start_failed';
}
return 'none';
}
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/host.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/host.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/host.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/host.js Sun Dec 9 14:00:34 2012
@@ -31,6 +31,7 @@ App.Host = DS.Model.extend({
loadAvg: DS.attr('string'),
osArch: DS.attr('string'),
ip: DS.attr('string'),
+ rack: DS.attr('string'),
healthStatus: DS.attr('string'),
cpuUsage: DS.attr('number'),
memoryUsage: DS.attr('number'),
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/hosts.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/hosts.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/hosts.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/hosts.js Sun Dec 9 14:00:34 2012
@@ -21,8 +21,8 @@ var App = require('app');
App.HostInfo = Ember.Object.extend({
elementId: 'host',
name: '',
- cpu: '2',
- memory: '2',
+ cpu: 2,
+ memory: 4000000000,
message: 'Information',
barColor: 'progress-info',
isChecked: true,
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/models/service.js Sun Dec 9 14:00:34 2012
@@ -29,20 +29,31 @@ App.Service = DS.Model.extend({
quickLinks: DS.hasMany('App.QuickLinks'),
components: DS.hasMany('App.Component'),
hostComponents: DS.hasMany('App.HostComponent'),
- isRunning: function(){
- return (this.get('healthStatus') == 'green' | this.get('healthStatus') == 'green-blinking');
+ isRunning: function () {
+ return (this.get('healthStatus') == 'green' || this.get('healthStatus') == 'green-blinking');
}.property('healthStatus'),
- healthStatus: function(){
+ healthStatus: function () {
var components = this.get('components').filterProperty('isMaster', true);
- if (components.everyProperty('workStatus', App.Component.Status.started)){
+ if (components.everyProperty('workStatus', App.Component.Status.started)) {
return 'green';
- } else if(components.someProperty('workStatus', App.Component.Status.stopped)){
- return 'red';
- } else if(components.someProperty('workStatus', App.Component.Status.starting)){
+ } else if (components.someProperty('workStatus', App.Component.Status.starting)) {
return 'green-blinking';
+ } else if (components.someProperty('workStatus', App.Component.Status.stopped)) {
+ return 'red';
+ } else {
+ return 'red-blinking';
}
- return 'red-blinking';
+ }.property('components.@each.workStatus'),
+
+ isStopped: function () {
+ var components = this.get('components');
+ return components.everyProperty('workStatus', App.Component.Status.stopped);
+ }.property('components.@each.workStatus'),
+
+ isStarted: function () {
+ var components = this.get('components').filterProperty('isMaster', true);
+ return components.everyProperty('workStatus', App.Component.Status.started);
}.property('components.@each.workStatus'),
displayName: function () {
@@ -80,8 +91,8 @@ App.Service.Health = {
starting: "STARTING",
stopping: "STOPPING",
- getKeyName:function(value){
- switch(value){
+ getKeyName: function (value) {
+ switch (value) {
case this.live:
return 'live';
case this.dead:
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_host_routes.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_host_routes.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_host_routes.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_host_routes.js Sun Dec 9 14:00:34 2012
@@ -34,26 +34,6 @@ module.exports = Em.Route.extend({
router.get('mainController').connectOutlet('addHost');
},
- step0: Em.Route.extend({
- route: '/step0',
- connectOutlets: function (router) {
- console.log('in addHost.step0:connectOutlets');
- var controller = router.get('addHostController');
- controller.setCurrentStep('0', false);
- controller.loadAllPriorSteps();
- controller.connectOutlet('wizardStep1', controller.get('content'));
- },
-
- next: function (router) {
- var addHostController = router.get('addHostController');
- var wizardStep1Controller = router.get('wizardStep1Controller');
-
- addHostController.saveClusterInfo(wizardStep1Controller);
-
- router.transitionTo('step1');
- }
- }),
-
step1: Em.Route.extend({
route: '/step1',
connectOutlets: function (router) {
@@ -235,7 +215,6 @@ module.exports = Em.Route.extend({
next: function (router) {
var addHostController = router.get('addHostController');
var wizardStep9Controller = router.get('wizardStep9Controller');
- addHostController.saveClusterInfo(wizardStep9Controller);
addHostController.saveInstalledHosts(wizardStep9Controller);
router.transitionTo('step9');
}
@@ -254,7 +233,7 @@ module.exports = Em.Route.extend({
complete: function (router, context) {
if (true) { // this function will be moved to installerController where it will validate
var addHostController = router.get('addHostController');
- addHostController.setCurrentStep('1', false);
+ addHostController.finish();
router.transitionTo('hosts');
} else {
console.log('cluster installation failure');
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_service_routes.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_service_routes.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_service_routes.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/add_service_routes.js Sun Dec 9 14:00:34 2012
@@ -154,7 +154,7 @@ module.exports = Em.Route.extend({
},
back: Em.Router.transitionTo('step5'),
retry: function(router,context) {
- var addServiceController = router.get('addSrviceController');
+ var addServiceController = router.get('addServiceController');
var wizardStep9Controller = router.get('wizardStep9Controller');
if (!wizardStep9Controller.get('isSubmitDisabled')) {
addServiceController.installServices();
@@ -165,7 +165,6 @@ module.exports = Em.Route.extend({
next: function (router) {
var addServiceController = router.get('addServiceController');
var wizardStep9Controller = router.get('wizardStep9Controller');
- //addServiceController.saveClusterInfo(wizardStep9Controller);
addServiceController.saveInstalledHosts(wizardStep9Controller);
router.transitionTo('step7');
}
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/installer.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/installer.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/installer.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/routes/installer.js Sun Dec 9 14:00:34 2012
@@ -279,7 +279,6 @@ module.exports = Em.Route.extend({
next: function (router) {
var installerController = router.get('installerController');
var wizardStep9Controller = router.get('wizardStep9Controller');
- // installerController.saveClusterInfo(wizardStep9Controller);
installerController.saveInstalledHosts(wizardStep9Controller);
router.transitionTo('step10');
}
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/application.less
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/application.less?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/application.less (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/styles/application.less Sun Dec 9 14:00:34 2012
@@ -843,9 +843,12 @@ a:focus {
}
}
.table {
- margin-bottom: 0;
+ //margin-bottom: 0;
thead {
- background: #EDF5FC;
+ //background: #EDF5FC;
+ }
+ th {
+ border-top: none;
}
th, td {
width: 82px;
@@ -883,7 +886,68 @@ a:focus {
}
}
}
+ .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 85% 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 85% 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 85% 50%; }
+
+ a.paginate_disabled_next, a.paginate_disabled_previous {
+ color: gray;
+ &:hover {
+ color: gray;
+ text-decoration: none;
+ }
+ }
+
+ a.paginate_enabled_next, a.paginate_enabled_previous {
+ &:hover {
+ text-decoration: none;
+ }
+ }
+
+ div.view-wrapper {
+ float: left;
+ }
+
+ a.ui-icon-circle-close {
+ float: right;
+ opacity: 0.2;
+ padding: 1px;
+ position: relative;
+ &:hover {
+ opacity: 0.7;
+ }
+ }
+ .notActive {
+ a.ui-icon-circle-close {
+ visibility: hidden;
+ }
+ }
+ }
+
+ .page-bar {
+ border: 1px solid silver;
+ text-align:right;
+ div {
+ display: inline-block;
+ margin:0 10px;
+ }
+ .dataTables_length {
+ label {
+ display:inline;
+ }
+ select {
+ margin-bottom: 4px;
+ margin-top: 4px;
+ width:70px;
+ }
+ }
+ .dataTables_paginate {
+ a {
+ padding:0 5px;
+ }
+ }
}
+
.open-group > .dropdown-menu {
display: block;
}
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/background_operations_popup.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/background_operations_popup.hbs?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/background_operations_popup.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/background_operations_popup.hbs Sun Dec 9 14:00:34 2012
@@ -20,15 +20,16 @@
{{#view App.MainBackgroundOperation contentBinding="operation"}}
<div>
<a {{action showOperationLog target="view"}} href="#">
- {{#if view.isOpenShowLog}}Hide{{else}}Show{{/if}} info about {{operation.command}} {{operation.role}} on {{operation.host_name}}
+ <i {{bindAttr class="view.iconClass"}}></i>
+ {{#if view.isOpen}}Hide{{else}}Show{{/if}} info about {{operation.command}} {{operation.role}} on {{operation.host_name}}
</a>
- {{#if view.isOpenShowLog}}
+ {{#if view.isOpen}}
<h5>exitcode:</h5>
<pre class="stderr">{{operation.exit_code}}</pre>
<h5>stderr:</h5>
- <pre class="stderr">{{operation.stderr}}</pre>
+ <pre class="stderr">{{highlight operation.stderr [err;fail]}}</pre>
<h5>stdout:</h5>
- <pre class="stdout">{{operation.stdout}}</pre>
+ <pre class="stdout">{{highlight operation.stdout [err;fail]}}</pre>
{{/if}}
</div>
{{/view}}
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host.hbs?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/host.hbs Sun Dec 9 14:00:34 2012
@@ -16,7 +16,7 @@
* limitations under the License.
}}
-<div id="hosts" class="box">
+<div id="hosts">
<div class="box-header">
<div class="button-section">
<button class="btn btn-inverse add-host-button" {{action addHost}}>
@@ -25,27 +25,24 @@
</button>
</div>
</div>
- <table class="table table-bordered table-striped">
+ <table class="datatable table table-bordered table-striped" id="hosts-table">
<thead>
<tr>
- <th class="name">
- <div class="host-name-pos">
- <a class="filter-label" href="#" {{action sortByName target="controller" }}>Name
- {{#if controller.isSort}}
- <i class="icon-arrow-up"{{bindAttr class="controller.sortClass"}}></i>
- {{/if}}
- </a>
-
- {{view Ember.TextField class="host-name-search" placeholder="search" valueBinding="view.filterByName"}}
- </div>
-
- </th>
+ <th>Name</th>
<th>Rack</th>
<th>CPU</th>
<th>RAM</th>
<th>Disk Usage</th>
<th>Load Avg</th>
- <th>
+ <th>Components</th>
+ </tr>
+ <th class="notActive"><div class="view-wrapper">{{view view.nameFilterView viewName="nameFilterViewInstance"}}</div> <a href="#" {{action "clearFilterButtonClick" target="view"}} id="view_nameFilterViewInstance" class="ui-icon ui-icon-circle-close ui-name"></a></th>
+ <th class="notActive"><div class="view-wrapper">{{view view.rackFilterView viewName="rackFilterViewInstance"}}</div> <a href="#" {{action "clearFilterButtonClick" target="view"}} id="view_rackFilterViewInstance" class="ui-icon ui-icon-circle-close ui-rack"></a></th>
+ <th class="notActive"><div class="view-wrapper">{{view view.cpuFilterView viewName="cpuFilterViewInstance"}}</div> <a href="#" {{action "clearFilterButtonClick" target="view"}} id="view_cpuFilterViewInstance" class="ui-icon ui-icon-circle-close ui-cpu"></a></th>
+ <th class="notActive"><div class="view-wrapper">{{view view.ramFilterView viewName="ramFilterViewInstance"}}</div> <a href="#" {{action "clearFilterButtonClick" target="view"}} id="view_ramFilterViewInstance" class="ui-icon ui-icon-circle-close ui-ram"></a></th>
+ <th></th>
+ <th></th>
+ <th><input id="components_filter" type="hidden" />
<div {{bindAttr class="view.btnGroupClass"}} >
<button class="btn btn-info single-btn-group" {{action "clickFilterButton" target="view"}}>
Components
@@ -104,11 +101,11 @@
{{#each host in controller}}
{{#view view.HostView contentBinding="host"}}
<tr>
- <td class="name">
+ <td>
<span {{bindAttr class="host.healthClass"}}></span>
<a href="#" {{action "showDetails" host}}>{{unbound host.hostName}}</a>
</td>
- <td>{{host.cluster.clusterName}}</td>
+ <td>{{host.rack}}</td>
<td>{{host.cpu}}</td>
<td>{{host.memoryFormatted}}</td>
<td>
@@ -125,26 +122,4 @@
{{/each}}
</tbody>
</table>
- <div class="box-footer">
- <hr/>
- <div class="footer-pagination">
- <ul class="nav nav-pills">
- <li class="disabled">Show: </li>
- <li class="dropdown">
- {{view Em.Select contentBinding="pageSizeRange"
- selectionBinding="pageSize"
- optionValuePath="this"}}
- </li>
- <li class="disabled">{{startPosition}}-{{rangeStop}} of {{total}}</li>
- <li class="disabled page-listing">
- {{#if hasPrevious}}
- <a href="#" {{action showPreviousPage target="controller"}}>previous</a>
- {{/if}}
- {{#if hasNext}}
- <a href="#" {{action showNextPage target="controller"}}>next</a>
- {{/if}}
- </li>
- </ul>
- </div>
- </div>
</div>
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/info/configs.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/info/configs.hbs?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/info/configs.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/main/service/info/configs.hbs Sun Dec 9 14:00:34 2012
@@ -216,6 +216,6 @@
<p class="pull-right">
<!--<input class="btn btn-primary" type="button" value="Save and apply changes" {{!bindAttr disabled="isSubmitDisabled"}} />-->
<a class="btn btn-primary" {{bindAttr disabled="isSubmitDisabled"}}
- {{action saveServiceConfigProperties target="controller"}}>Save and apply changes</a>
+ {{action restartServicePopup target="controller"}}>Save and apply changes</a>
</p>
</div>
\ No newline at end of file
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step5.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step5.hbs?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step5.hbs (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/templates/wizard/step5.hbs Sun Dec 9 14:00:34 2012
@@ -57,7 +57,7 @@
<div class="host-assignments">
{{#each masterHostMapping}}
<div class="mapping-box round-corners well">
- <div class="hostString"><span><strong>{{host_name}}</strong></span><span>{{hostInfo}}</span></div>
+ <div class="hostString"><span>{{hostInfo}}</span></div>
{{#each masterServices}}
<span class="assignedService round-corners">{{display_name}}</span>
{{/each}}
Modified: incubator/ambari/branches/AMBARI-666/ambari-web/app/utils/data_table.js
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-web/app/utils/data_table.js?rev=1418960&r1=1418959&r2=1418960&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-web/app/utils/data_table.js (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-web/app/utils/data_table.js Sun Dec 9 14:00:34 2012
@@ -17,6 +17,20 @@
*/
jQuery.extend(jQuery.fn.dataTableExt.oSort, {
+
+ "num-html-pre": function(date_string) {
+ date_string = $(date_string).text();
+ return parseInt(date_string, 10);
+ },
+
+ "num-html-asc": function (a, b) {
+ return a - b;
+ },
+
+ "num-html-desc": function (a, b) {
+ return b - a;
+ },
+
// @see utils/date.js
"ambari-date-pre": function (date_string) {
date_string = $(date_string).text(); // strip Ember script tags
@@ -141,17 +155,19 @@ jQuery.extend($.fn.dataTableExt.afnFilte
function (oSettings, aData, iDataIndex) {
var inputFilters = [
{iColumn: '0', elementId: 'star_filter', type: 'star'},
+ {iColumn: '2', elementId: 'cpu_filter', type: 'number'},
{iColumn: '4', elementId: 'user_filter', type: 'multiple'},
{iColumn: '5', elementId: 'jobs_filter', type: 'number' },
- {iColumn: '6', elementId: 'input_filter', type: 'bandwidth' },
- {iColumn: '7', elementId: 'output_filter', type: 'bandwidth' },
+ {iColumn: '3', elementId: 'ram_filter', type: 'ambari-bandwidth' },
+ {iColumn: '6', elementId: 'input_filter', type: 'ambari-bandwidth' },
+ {iColumn: '7', elementId: 'output_filter', type: 'ambari-bandwidth' },
{iColumn: '8', elementId: 'duration_filter', type: 'time' },
- {iColumn: '9', elementId: 'rundate_filter', type: 'date' }
+ //{iColumn: '9', elementId: 'rundate_filter', type: 'ambari-date' }
];
var match = true;
- for (i = 0; i < inputFilters.length; i++) {
+ for (var i = 0; i < inputFilters.length; i++) {
switch (inputFilters[i].type) {
- case 'date':
+ case 'ambari-date':
if (jQuery('#' + inputFilters[i].elementId).val() !== 'Any' && match) {
dateFilter(jQuery('#' + inputFilters[i].elementId).val(), aData[inputFilters[i].iColumn]);
}
@@ -171,7 +187,7 @@ jQuery.extend($.fn.dataTableExt.afnFilte
timeFilter(jQuery('#' + inputFilters[i].elementId).val(), aData[inputFilters[i].iColumn]);
}
break;
- case 'bandwidth':
+ case 'ambari-bandwidth':
if (jQuery('#' + inputFilters[i].elementId).val() && match) {
bandwidthFilter(jQuery('#' + inputFilters[i].elementId).val(), aData[inputFilters[i].iColumn]);
}
@@ -230,6 +246,7 @@ jQuery.extend($.fn.dataTableExt.afnFilte
}
function bandwidthFilter(rangeExp, rowValue) {
+ rowValue = $(rowValue).text();
var compareChar = rangeExp.charAt(0);
var compareScale = rangeExp.charAt(rangeExp.length - 1);
var compareValue = isNaN(parseFloat(compareScale)) ? parseFloat(rangeExp.substr(1, rangeExp.length - 2)) : parseFloat(rangeExp.substr(1, rangeExp.length - 1));