You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2015/04/30 13:16:53 UTC

ambari git commit: AMBARI-10858 Create widget -> Add metric popup: UI tweaks. (atkach)

Repository: ambari
Updated Branches:
  refs/heads/trunk b4d760549 -> 46c96582e


AMBARI-10858 Create widget -> Add metric popup: UI tweaks. (atkach)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/46c96582
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/46c96582
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/46c96582

Branch: refs/heads/trunk
Commit: 46c96582ed54ae36bb8d942f9c254ba328da58a0
Parents: b4d7605
Author: Andrii Tkach <at...@hortonworks.com>
Authored: Thu Apr 30 12:34:13 2015 +0300
Committer: Andrii Tkach <at...@hortonworks.com>
Committed: Thu Apr 30 14:16:28 2015 +0300

----------------------------------------------------------------------
 .../service/widgets/create/step2_controller.js  | 84 ++++++++++++++------
 .../service/widgets/create/wizard_controller.js |  4 +-
 ambari-web/app/messages.js                      |  2 +-
 .../app/mixins/common/widgets/widget_mixin.js   |  7 +-
 .../service/widgets/create/step2_add_metric.hbs |  1 +
 .../service/widgets/create/expression_view.js   | 18 +++--
 6 files changed, 82 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/46c96582/ambari-web/app/controllers/main/service/widgets/create/step2_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/widgets/create/step2_controller.js b/ambari-web/app/controllers/main/service/widgets/create/step2_controller.js
index edbb20f..0830f1e 100644
--- a/ambari-web/app/controllers/main/service/widgets/create/step2_controller.js
+++ b/ambari-web/app/controllers/main/service/widgets/create/step2_controller.js
@@ -107,23 +107,62 @@ App.WidgetWizardStep2Controller = Em.Controller.extend({
     switch (this.get('content.widgetType')) {
       case "NUMBER":
       case "GAUGE":
-        return this.get('expressions')[0] &&
-          (this.get('expressions')[0].get('isInvalid') ||
-            this.get('expressions')[0].get('isEmpty'));
+        return !this.isExpressionComplete(this.get('expressions')[0]);
       case "GRAPH":
-        return this.get('dataSets.length') > 0 &&
-          (this.get('dataSets').someProperty('expression.isInvalid') ||
-            this.get('dataSets').someProperty('expression.isEmpty'));
+        return !this.isGraphDataComplete(this.get('dataSets'));
       case "TEMPLATE":
-        return !this.get('templateValue') ||
-          this.get('expressions.length') > 0 &&
-            (this.get('expressions').someProperty('isInvalid') ||
-              this.get('expressions').someProperty('isEmpty'));
+        return !this.isTemplateDataComplete(this.get('expressions'), this.get('templateValue'));
     }
     return false;
-  }.property('widgetPropertiesViews.@each.isValid', 'templateValue',
-    'dataSets.@each.expression', 'dataSets.@each.isInvalid', 'dataSets.@each.isExpressionEmpty',
-    'expressions.@each.isInvalid', 'expressions.@each.isEmpty'),
+  }.property(
+    'widgetPropertiesViews.@each.isValid',
+    'dataSets.@each.label',
+    'templateValue'
+  ),
+
+  /**
+   * check whether data of expression is complete
+   * @param {Em.Object} expression
+   * @returns {boolean}
+   */
+  isExpressionComplete: function (expression) {
+    return expression && !expression.get('isInvalid') && !expression.get('isEmpty');
+  },
+
+  /**
+   * check whether data of graph widget is complete
+   * @param dataSets
+   * @returns {boolean} isComplete
+   */
+  isGraphDataComplete: function (dataSets) {
+    var isComplete = Boolean(dataSets.length);
+
+    for (var i = 0; i < dataSets.length; i++) {
+      if (dataSets[i].get('label').trim() === '' || !this.isExpressionComplete(dataSets[i].get('expression'))) {
+        isComplete = false;
+        break;
+      }
+    }
+    return isComplete;
+  },
+
+  /**
+   * check whether data of template widget is complete
+   * @param {Array} expressions
+   * @param {string} templateValue
+   * @returns {boolean} isComplete
+   */
+  isTemplateDataComplete: function (expressions, templateValue) {
+    var isComplete = Boolean(expressions.length > 0 && templateValue.trim() !== '');
+
+    for (var i = 0; i < expressions.length; i++) {
+      if (!this.isExpressionComplete(expressions[i])) {
+        isComplete = false;
+        break;
+      }
+    }
+    return isComplete;
+  },
 
   /**
    * Add data set
@@ -138,17 +177,13 @@ App.WidgetWizardStep2Controller = Em.Controller.extend({
       id: id,
       label: '',
       isRemovable: !isDefault,
-      expression: {
+      expression: Em.Object.create({
         data: [],
         isInvalid: false,
-        isEmpty: true
-      },
-      isInvalid: function() {
-        return this.get('expression.isInvalid');
-      }.property('expression.isInvalid'),
-      isExpressionEmpty: function() {
-        return this.get('expression.isEmpty');
-      }.property('expression.isEmpty')
+        isEmpty: function () {
+          return (this.get('data.length') === 0);
+        }.property('data.length')
+      })
     }));
     return id;
   },
@@ -176,7 +211,9 @@ App.WidgetWizardStep2Controller = Em.Controller.extend({
       data: [],
       alias: '{{' + this.get('EXPRESSION_PREFIX') + id + '}}',
       isInvalid: false,
-      isEmpty: true
+      isEmpty: function () {
+        return (this.get('data.length') === 0);
+      }.property('data.length')
     }));
     return id;
   },
@@ -201,6 +238,7 @@ App.WidgetWizardStep2Controller = Em.Controller.extend({
       return Em.Object.create(item);
     }, this));
     this.set('dataSets', this.get('content.dataSets').map(function (item) {
+      item.expression = Em.Object.create(item.expression);
       return Em.Object.create(item);
     }, this));
     this.set('templateValue', this.get('content.templateValue'));

http://git-wip-us.apache.org/repos/asf/ambari/blob/46c96582/ambari-web/app/controllers/main/service/widgets/create/wizard_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/widgets/create/wizard_controller.js b/ambari-web/app/controllers/main/service/widgets/create/wizard_controller.js
index 2b9ae91..263f8d8 100644
--- a/ambari-web/app/controllers/main/service/widgets/create/wizard_controller.js
+++ b/ambari-web/app/controllers/main/service/widgets/create/wizard_controller.js
@@ -206,7 +206,9 @@ App.WidgetWizardController = App.WizardController.extend({
       sender: this,
       data: {
         stackVersionURL: App.get('stackVersionURL'),
-        serviceNames: App.Service.find().mapProperty('serviceName').join(',')
+        serviceNames: App.Service.find().filter(function (item) {
+          return App.StackService.find(item.get('id')).get('isServiceWithWidgets');
+        }).mapProperty('serviceName').join(',')
       },
       callback: callback,
       success: 'loadAllMetricsFromServerCallback'

http://git-wip-us.apache.org/repos/asf/ambari/blob/46c96582/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 9bf0108..e3c64de 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -2518,7 +2518,7 @@ Em.I18n.translations = {
   'widget.create.wizard.step2.body.warning':'Note: Valid operators are +, -, *, /',
   'widget.create.wizard.step2.addExpression': 'Add Expression',
   'widget.create.wizard.step2.addDataset': 'Add data set',
-  'widget.create.wizard.step2.allComponents': 'All {0}',
+  'widget.create.wizard.step2.allComponents': 'All {0}s',
   'widget.create.wizard.step2.activeComponents': 'Active {0}',
   'widget.create.wizard.step2.noMetricFound': 'No metric found',
   'widget.create.wizard.step3.widgetName': 'Name',

http://git-wip-us.apache.org/repos/asf/ambari/blob/46c96582/ambari-web/app/mixins/common/widgets/widget_mixin.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/widgets/widget_mixin.js b/ambari-web/app/mixins/common/widgets/widget_mixin.js
index 935a8d4..23f3c9f 100644
--- a/ambari-web/app/mixins/common/widgets/widget_mixin.js
+++ b/ambari-web/app/mixins/common/widgets/widget_mixin.js
@@ -518,7 +518,7 @@ App.WidgetPreviewMixin = Ember.Mixin.create({
     id: 1,
     values: []
   }),
-  drawWidget: function () {
+  loadMetrics: function () {
     this.get('content').setProperties({
       'values': this.get('controller.widgetValues'),
       'properties': this.get('controller.widgetProperties'),
@@ -534,8 +534,9 @@ App.WidgetPreviewMixin = Ember.Mixin.create({
         }
       })
     });
-    this.loadMetrics();
     this._super();
   }.observes('controller.widgetProperties', 'controller.widgetValues', 'controller.widgetMetrics', 'controller.widgetName'),
-  onMetricsLoaded: Em.K
+  onMetricsLoaded: function () {
+    this.drawWidget();
+  }
 });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/46c96582/ambari-web/app/templates/main/service/widgets/create/step2_add_metric.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/widgets/create/step2_add_metric.hbs b/ambari-web/app/templates/main/service/widgets/create/step2_add_metric.hbs
index 9492d8b..5eee49e 100644
--- a/ambari-web/app/templates/main/service/widgets/create/step2_add_metric.hbs
+++ b/ambari-web/app/templates/main/service/widgets/create/step2_add_metric.hbs
@@ -55,6 +55,7 @@
   <div class="span3">{{t dashboard.widgets.wizard.step2.Metric}}</div>
   <div class="span9">
     <select class="chosen-select">
+      <option value="" disabled selected>{{t dashboard.widgets.wizard.step2.selectMetric}}</option>
       {{#each metric in view.selectedComponent.metrics}}
         <option>{{unbound metric}}</option>
       {{/each}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/46c96582/ambari-web/app/views/main/service/widgets/create/expression_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/service/widgets/create/expression_view.js b/ambari-web/app/views/main/service/widgets/create/expression_view.js
index a733cf8..d311403 100644
--- a/ambari-web/app/views/main/service/widgets/create/expression_view.js
+++ b/ambari-web/app/views/main/service/widgets/create/expression_view.js
@@ -138,8 +138,10 @@ App.WidgetWizardExpressionView = Em.View.extend({
 
     this.set('isInvalid', isInvalid);
     this.set('expression.isInvalid', isInvalid);
-    this.set('expression.isEmpty', this.get('expression.data.length') == 0);
-    if (!isInvalid) this.get('controller').updateExpressions();
+    this.get('controller').propertyDidChange('isSubmitDisabled');
+    if (!isInvalid) {
+      this.get('controller').updateExpressions();
+    }
   }.observes('expression.data.length'),
 
   /**
@@ -233,6 +235,7 @@ App.WidgetWizardExpressionView = Em.View.extend({
           }
           this.set('parentView.selectedMetric', null);
           Em.run.next(function () {
+            $('.chosen-select option').first().attr('selected','selected');
             $('.chosen-select').trigger('chosen:updated');
           });
         },
@@ -282,19 +285,22 @@ App.WidgetWizardExpressionView = Em.View.extend({
           for (var serviceName in servicesMap) {
             components = [];
             for (var componentId in servicesMap[serviceName].components) {
+
+              //HBase service should not show "Active HBase master"
+              if (servicesMap[serviceName].components[componentId].component_name === 'HBASE_MASTER' &&
+                servicesMap[serviceName].components[componentId].level === 'HOSTCOMPONENT') continue;
+
               components.push(Em.Object.create({
                 componentName: servicesMap[serviceName].components[componentId].component_name,
                 level: servicesMap[serviceName].components[componentId].level,
                 displayName: function() {
                   var stackComponent = App.StackServiceComponent.find(this.get('componentName'));
                   if (stackComponent.get('isMaster')) {
-                    if (this.get('level') === 'COMPONENT') {
-                      return Em.I18n.t('widget.create.wizard.step2.allComponents').format(stackComponent.get('displayName'));
-                    } else {
+                    if (this.get('level') === 'HOSTCOMPONENT') {
                       return Em.I18n.t('widget.create.wizard.step2.activeComponents').format(stackComponent.get('displayName'));
                     }
                   }
-                  return stackComponent.get('displayName');
+                  return Em.I18n.t('widget.create.wizard.step2.allComponents').format(stackComponent.get('displayName'));
                 }.property('componentName', 'level'),
                 count: servicesMap[serviceName].components[componentId].count,
                 metrics: servicesMap[serviceName].components[componentId].metrics.uniq().sort(),