You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by on...@apache.org on 2014/12/04 19:00:57 UTC
ambari git commit: AMBARI-8547. Alerts UI: Create Alert Definition
Wizard. Step-3 POST-call (onechiporenko)
Repository: ambari
Updated Branches:
refs/heads/trunk 21e3d2a73 -> f6e34a544
AMBARI-8547. Alerts UI: Create Alert Definition Wizard. Step-3 POST-call (onechiporenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f6e34a54
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f6e34a54
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f6e34a54
Branch: refs/heads/trunk
Commit: f6e34a54469e6ecb10a93cd9a595d0a13323cea7
Parents: 21e3d2a
Author: Oleg Nechiporenko <on...@apache.org>
Authored: Thu Dec 4 19:54:20 2014 +0200
Committer: Oleg Nechiporenko <on...@apache.org>
Committed: Thu Dec 4 19:54:20 2014 +0200
----------------------------------------------------------------------
.../add_alert_definition_controller.js | 15 +++++++
.../alerts/definition_configs_controller.js | 45 ++++++++++++++------
ambari-web/app/messages.js | 1 +
.../app/routes/add_alert_definition_routes.js | 40 ++++++++++-------
ambari-web/app/styles/alerts.less | 5 +++
.../main/alerts/add_alert_definition/step3.hbs | 9 +++-
ambari-web/app/utils/ajax/ajax.js | 10 +++++
ambari-web/app/utils/ember_reopen.js | 30 +++++++++++++
.../alerts/add_alert_definition/step3_view.js | 9 ++++
.../main/alerts/definition_configs_view.js | 2 +-
.../definitions_configs_controller_test.js | 2 +-
11 files changed, 135 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/f6e34a54/ambari-web/app/controllers/main/alerts/add_alert_definition/add_alert_definition_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/alerts/add_alert_definition/add_alert_definition_controller.js b/ambari-web/app/controllers/main/alerts/add_alert_definition/add_alert_definition_controller.js
index ea8f95d..194b4a3 100644
--- a/ambari-web/app/controllers/main/alerts/add_alert_definition/add_alert_definition_controller.js
+++ b/ambari-web/app/controllers/main/alerts/add_alert_definition/add_alert_definition_controller.js
@@ -28,6 +28,21 @@ App.AddAlertDefinitionController = App.WizardController.extend({
selectedType: null
},
+ /**
+ * Do request to create new alert definition
+ * @param {object} newDefinitionData
+ * @returns {$.ajax}
+ */
+ createNewAlertDefinition: function (newDefinitionData) {
+ return App.ajax.send({
+ name: 'alerts.create_alert_definition',
+ sender: this,
+ data: {
+ data: newDefinitionData
+ }
+ });
+ },
+
finish: function() {
this.clear();
this.setCurrentStep('1');
http://git-wip-us.apache.org/repos/asf/ambari/blob/f6e34a54/ambari-web/app/controllers/main/alerts/definition_configs_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/alerts/definition_configs_controller.js b/ambari-web/app/controllers/main/alerts/definition_configs_controller.js
index 2f88735..23af711 100644
--- a/ambari-web/app/controllers/main/alerts/definition_configs_controller.js
+++ b/ambari-web/app/controllers/main/alerts/definition_configs_controller.js
@@ -392,19 +392,21 @@ App.MainAlertDefinitionConfigsController = Em.Controller.extend({
sender: this,
data: {
id: this.get('content.id'),
- data: this.getPropertiesToUpdate()
+ data: this.getPropertiesToUpdate(true)
}
});
},
/**
* Create object with new values to put it on server
+ * @param {boolean} onlyChanged
* @method getPropertiesToUpdate
* @returns {Object}
*/
- getPropertiesToUpdate: function () {
+ getPropertiesToUpdate: function (onlyChanged) {
var propertiesToUpdate = {};
- this.get('configs').filterProperty('wasChanged').forEach(function (property) {
+ var configs = onlyChanged ? this.get('configs').filterProperty('wasChanged') : this.get('configs');
+ configs.forEach(function (property) {
var apiProperties = property.get('apiProperty');
var apiFormattedValues = property.get('apiFormattedValue');
if (!Em.isArray(property.get('apiProperty'))) {
@@ -414,21 +416,35 @@ App.MainAlertDefinitionConfigsController = Em.Controller.extend({
apiProperties.forEach(function (apiProperty, i) {
if (apiProperty.contains('source.')) {
if (!propertiesToUpdate['AlertDefinition/source']) {
- propertiesToUpdate['AlertDefinition/source'] = this.get('content.rawSourceData');
+ if (this.get('content.rawSourceData')) {
+ propertiesToUpdate['AlertDefinition/source'] = this.get('content.rawSourceData');
+ }
}
- var sourcePath = propertiesToUpdate['AlertDefinition/source'];
- apiProperty.replace('source.', '').split('.').forEach(function (path, index, array) {
- // check if it is last path
- if (array.length - index === 1) {
- sourcePath[path] = apiFormattedValues[i];
- } else {
- sourcePath = sourcePath[path];
+ if (this.get('content.rawSourceData')) {
+ // use rawSourceData to populate propertiesToUpdate
+ var sourcePath = propertiesToUpdate['AlertDefinition/source'];
+ apiProperty.replace('source.', '').split('.').forEach(function (path, index, array) {
+ // check if it is last path
+ if (array.length - index === 1) {
+ sourcePath[path] = apiFormattedValues[i];
+ } else {
+ sourcePath = sourcePath[path];
+ }
+ });
+ }
+ else {
+ if (!propertiesToUpdate['AlertDefinition/source']) {
+ propertiesToUpdate['AlertDefinition/source'] = {};
}
- });
+ Ember.setFullPath(propertiesToUpdate['AlertDefinition/source'], apiProperty.replace('source.', ''), apiFormattedValues[i]);
+ }
- } else {
- propertiesToUpdate['AlertDefinition/' + apiProperty] = apiFormattedValues[i];
+ }
+ else {
+ if (apiProperty) {
+ propertiesToUpdate['AlertDefinition/' + apiProperty] = apiFormattedValues[i];
+ }
}
}, this);
}, this);
@@ -439,6 +455,7 @@ App.MainAlertDefinitionConfigsController = Em.Controller.extend({
/**
* Return array of all config values
* used to save configs to local db in wizard
+ * @method getConfigsValues
* @returns {Array}
*/
getConfigsValues: function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/f6e34a54/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 05cf4b8..38cdd49 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -844,6 +844,7 @@ Em.I18n.translations = {
'alerts.add.step1.header': 'Choose Type',
'alerts.add.step2.header': 'Configure',
'alerts.add.step3.header': 'Review',
+ 'alerts.add.step3.selectedType': 'Selected Type',
'alerts.fastAccess.popup.header': '{0} Critical or Warning Alerts',
'alerts.fastAccess.popup.body.name': 'Alert Name',
http://git-wip-us.apache.org/repos/asf/ambari/blob/f6e34a54/ambari-web/app/routes/add_alert_definition_routes.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/add_alert_definition_routes.js b/ambari-web/app/routes/add_alert_definition_routes.js
index 0dc9a32..c941798 100644
--- a/ambari-web/app/routes/add_alert_definition_routes.js
+++ b/ambari-web/app/routes/add_alert_definition_routes.js
@@ -95,7 +95,12 @@ module.exports = App.WizardRoute.extend({
next: function (router) {
var controller = router.get('addAlertDefinitionController');
- controller.set('content.configs', App.router.get('mainAlertDefinitionConfigsController').getConfigsValues());
+ controller.set('content.configs', App.router.get('mainAlertDefinitionConfigsController.configs'));
+ var newDefinitionData = App.router.get('mainAlertDefinitionConfigsController').getPropertiesToUpdate(false);
+ newDefinitionData['AlertDefinition/source'].type = controller.get('content.selectedType');
+ newDefinitionData['AlertDefinition/label'] = newDefinitionData['AlertDefinition/name'];
+ newDefinitionData['AlertDefinition/name'] = newDefinitionData['AlertDefinition/name'].toLowerCase().replace(/\s+/g, '_');
+ controller.set('content.formattedToRequestConfigs', newDefinitionData);
controller.setDBProperty('content', controller.get('content'));
router.transitionTo('step3');
}
@@ -109,6 +114,7 @@ module.exports = App.WizardRoute.extend({
connectOutlets: function (router) {
var controller = router.get('addAlertDefinitionController');
controller.setCurrentStep('3');
+ controller.set('content', controller.getDBProperty('content'));
controller.connectOutlet('addAlertDefinitionStep3', controller.get('content'));
},
@@ -116,21 +122,23 @@ module.exports = App.WizardRoute.extend({
done: function (router) {
var controller = router.get('addAlertDefinitionController');
- controller.get('popup').hide();
- controller.setDBProperty('content', {});
- controller.finish();
- App.clusterStatus.setClusterStatus({
- clusterName: controller.get('content.cluster.name'),
- clusterState: 'DEFAULT',
- localdb: App.db.data
- },
- {
- alwaysCallback: function () {
- controller.get('popup').hide();
- router.transitionTo('main.alerts');
- location.reload();
- }
- });
+ controller.createNewAlertDefinition(Em.get(controller.getDBProperty('content'), 'formattedToRequestConfigs')).done(function () {
+ controller.get('popup').hide();
+ controller.setDBProperty('content', {});
+ controller.finish();
+ App.clusterStatus.setClusterStatus({
+ clusterName: controller.get('content.cluster.name'),
+ clusterState: 'DEFAULT',
+ localdb: App.db.data
+ },
+ {
+ alwaysCallback: function () {
+ controller.get('popup').hide();
+ router.transitionTo('main.alerts');
+ location.reload();
+ }
+ });
+ });
}
})
http://git-wip-us.apache.org/repos/asf/ambari/blob/f6e34a54/ambari-web/app/styles/alerts.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/alerts.less b/ambari-web/app/styles/alerts.less
index f111422..855d039 100644
--- a/ambari-web/app/styles/alerts.less
+++ b/ambari-web/app/styles/alerts.less
@@ -73,6 +73,11 @@
}
}
+.alert-definition-review {
+ height: 400px;
+ overflow: scroll;
+}
+
#alert-definitions-table {
a {
&.disabled {
http://git-wip-us.apache.org/repos/asf/ambari/blob/f6e34a54/ambari-web/app/templates/main/alerts/add_alert_definition/step3.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/alerts/add_alert_definition/step3.hbs b/ambari-web/app/templates/main/alerts/add_alert_definition/step3.hbs
index 6fc9d2f..1b7e85d 100644
--- a/ambari-web/app/templates/main/alerts/add_alert_definition/step3.hbs
+++ b/ambari-web/app/templates/main/alerts/add_alert_definition/step3.hbs
@@ -18,7 +18,14 @@
<h2>{{t alerts.add.step3.header}}</h2>
-{{controller.content.selectedType}}
+<div>
+ {{t alerts.add.step3.selectedType}}: <strong>{{controller.content.selectedType}}</strong>
+</div>
+<div class="control-group">
+ <div class="controls">
+ <pre class="alert-definition-review">{{view.alertDefinitionToDisplay}}</pre>
+ </div>
+</div>
<div class="btn-area">
<a class="btn" {{bindAttr disabled="isBackBtnDisabled"}} {{action back}}>← {{t common.back}}</a>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f6e34a54/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index abd5c3a..a853d3b 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -383,6 +383,16 @@ var urls = {
}
}
},
+ 'alerts.create_alert_definition': {
+ 'real': '/clusters/{clusterName}/alert_definitions/',
+ 'mock': '',
+ 'format': function (data) {
+ return {
+ type: 'POST',
+ data: JSON.stringify(data.data)
+ }
+ }
+ },
'alerts.delete_alert_definition': {
'real': '/clusters/{clusterName}/alert_definitions/{id}',
'mock': '',
http://git-wip-us.apache.org/repos/asf/ambari/blob/f6e34a54/ambari-web/app/utils/ember_reopen.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ember_reopen.js b/ambari-web/app/utils/ember_reopen.js
index 8acebe5..3462d6d 100644
--- a/ambari-web/app/utils/ember_reopen.js
+++ b/ambari-web/app/utils/ember_reopen.js
@@ -130,6 +130,36 @@ Ember.RadioButton = Ember.Checkbox.extend({
}.property('value','selection')
});
+/**
+ * Set value to obj by path
+ * Create nested objects if needed
+ * Example:
+ * <code>
+ * var a = {b: {}};
+ * var path = 'b.c.d';
+ * var value = 1;
+ * Em.setFullPath(a, path, value); // a = {b: {c: {d: 1}}
+ * </code>
+ *
+ * @param {object} obj
+ * @param {string} path
+ * @param {*} value
+ */
+Ember.setFullPath = function (obj, path, value) {
+ var parts = path.split('.'),
+ sub_path = '';
+ parts.forEach(function(_path, _index) {
+ Em.assert('path parts can\'t be empty', _path.length);
+ sub_path += '.' + _path;
+ if (_index === parts.length - 1) {
+ Em.set(obj, sub_path, value);
+ return;
+ }
+ if (Em.isNone(Em.get(obj, sub_path))) {
+ Em.set(obj, sub_path, {});
+ }
+ });
+};
Em.View.reopen({
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/f6e34a54/ambari-web/app/views/main/alerts/add_alert_definition/step3_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/alerts/add_alert_definition/step3_view.js b/ambari-web/app/views/main/alerts/add_alert_definition/step3_view.js
index 9ed836a..1a6f789 100644
--- a/ambari-web/app/views/main/alerts/add_alert_definition/step3_view.js
+++ b/ambari-web/app/views/main/alerts/add_alert_definition/step3_view.js
@@ -20,6 +20,15 @@ var App = require('app');
App.AddAlertDefinitionStep3View = Em.View.extend({
+ /**
+ * @type {string}
+ */
+ alertDefinitionToDisplay: '',
+
+ willInsertElement: function () {
+ this.set('alertDefinitionToDisplay', JSON.stringify(this.get('controller.content.formattedToRequestConfigs'), null, 4));
+ },
+
templateName: require('templates/main/alerts/add_alert_definition/step3')
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/f6e34a54/ambari-web/app/views/main/alerts/definition_configs_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/alerts/definition_configs_view.js b/ambari-web/app/views/main/alerts/definition_configs_view.js
index 4bfeb57..b063207 100644
--- a/ambari-web/app/views/main/alerts/definition_configs_view.js
+++ b/ambari-web/app/views/main/alerts/definition_configs_view.js
@@ -25,7 +25,7 @@ App.AlertDefinitionConfigsView = Em.View.extend({
templateName: require('templates/main/alerts/configs'),
/**
- * Define whether configs are aditable
+ * Define whether configs are editable
* is set in template
* @type {Boolean}
*/
http://git-wip-us.apache.org/repos/asf/ambari/blob/f6e34a54/ambari-web/test/controllers/main/alerts/definitions_configs_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/alerts/definitions_configs_controller_test.js b/ambari-web/test/controllers/main/alerts/definitions_configs_controller_test.js
index 0060409..2022370 100644
--- a/ambari-web/test/controllers/main/alerts/definitions_configs_controller_test.js
+++ b/ambari-web/test/controllers/main/alerts/definitions_configs_controller_test.js
@@ -467,7 +467,7 @@ describe('App.MainAlertDefinitionConfigsController', function () {
it(testCase.m, function () {
controller.set('configs', testCase.configs);
- var result = controller.getPropertiesToUpdate();
+ var result = controller.getPropertiesToUpdate(true);
expect(result).to.eql(testCase.result);
});